@shortstravelmgmt/component-lib 0.1.16 → 0.2.11
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/dist/index.d.ts +3847 -75
- package/dist/index.esm.js +12961 -614
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +13087 -612
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/package.json +8 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,938 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import React__default, { HTMLAttributes, ButtonHTMLAttributes, InputHTMLAttributes, SVGProps, TextareaHTMLAttributes, SelectHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import React__default, { CSSProperties, HTMLAttributes, ButtonHTMLAttributes, InputHTMLAttributes, SVGProps, TextareaHTMLAttributes, SelectHTMLAttributes, ReactNode, ChangeEvent } from 'react';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* STM Hub Design Tokens
|
|
6
|
+
* TypeScript implementation of the design system tokens
|
|
7
|
+
*
|
|
8
|
+
* These tokens are the single source of truth for all visual values.
|
|
9
|
+
* Components should use these tokens via the useTheme hook or css utility.
|
|
10
|
+
*/
|
|
11
|
+
declare const brandColors: {
|
|
12
|
+
readonly blue: "#15538C";
|
|
13
|
+
readonly blueDeep: "#0E3F6E";
|
|
14
|
+
readonly blueTint: "#E5EDF4";
|
|
15
|
+
};
|
|
16
|
+
declare const primaryColors: {
|
|
17
|
+
readonly primary: "#0A53EF";
|
|
18
|
+
readonly primaryDark: "#1A43D1";
|
|
19
|
+
readonly primaryLight: "#E6ECFB";
|
|
20
|
+
readonly primaryLightHover: "#DAE3F8";
|
|
21
|
+
};
|
|
22
|
+
declare const neutralColors: {
|
|
23
|
+
readonly basecolor: "#F5F5F5";
|
|
24
|
+
readonly subtle: "#EFF0F0";
|
|
25
|
+
readonly card: "#EFEFEF";
|
|
26
|
+
readonly cardalt: "#EBEBEC";
|
|
27
|
+
readonly secondary: "#E4E5E7";
|
|
28
|
+
readonly secondaryDark: "#DFE1E3";
|
|
29
|
+
readonly tableBorder: "#D5D5D5";
|
|
30
|
+
readonly border: "#EDEDED";
|
|
31
|
+
readonly borderDark: "#D5D5D5";
|
|
32
|
+
readonly white: "#FFFFFF";
|
|
33
|
+
};
|
|
34
|
+
declare const textColors: {
|
|
35
|
+
readonly ink: "#282828";
|
|
36
|
+
readonly charcoal: "#3F3F3F";
|
|
37
|
+
readonly slate: "#5C5C5C";
|
|
38
|
+
readonly stone: "#787878";
|
|
39
|
+
readonly pending: "#C7C7CA";
|
|
40
|
+
readonly error: "#940000";
|
|
41
|
+
};
|
|
42
|
+
declare const statusColors: {
|
|
43
|
+
readonly success: "#138660";
|
|
44
|
+
readonly warning: "#9F5500";
|
|
45
|
+
readonly gold: "#FFC179";
|
|
46
|
+
readonly error: "#940000";
|
|
47
|
+
};
|
|
48
|
+
declare const accentColors: {
|
|
49
|
+
readonly mint: "#37C3A4";
|
|
50
|
+
readonly forest: "#003E1B";
|
|
51
|
+
readonly forestLight: "#E2F0EC";
|
|
52
|
+
readonly tangerine: "#FE7C35";
|
|
53
|
+
readonly tangerineLight: "#FFE2C1";
|
|
54
|
+
};
|
|
55
|
+
declare const teamColors: {
|
|
56
|
+
readonly men: "#8AC6D9";
|
|
57
|
+
readonly women: "#FFA99A";
|
|
58
|
+
readonly mixed: "#D1C1C3";
|
|
59
|
+
};
|
|
60
|
+
declare const travelColors: {
|
|
61
|
+
readonly limoBackground: "#EDE9FE";
|
|
62
|
+
readonly limoForeground: "#7C3AED";
|
|
63
|
+
readonly busBackground: "#FEF3C7";
|
|
64
|
+
readonly busForeground: "#D97706";
|
|
65
|
+
};
|
|
66
|
+
declare const vendorColors: {
|
|
67
|
+
readonly DL: {
|
|
68
|
+
readonly bg: "#003366";
|
|
69
|
+
readonly fg: "#FFFFFF";
|
|
70
|
+
};
|
|
71
|
+
readonly AA: {
|
|
72
|
+
readonly bg: "#0078D2";
|
|
73
|
+
readonly fg: "#FFFFFF";
|
|
74
|
+
};
|
|
75
|
+
readonly UA: {
|
|
76
|
+
readonly bg: "#002244";
|
|
77
|
+
readonly fg: "#FFFFFF";
|
|
78
|
+
};
|
|
79
|
+
readonly WN: {
|
|
80
|
+
readonly bg: "#F9B612";
|
|
81
|
+
readonly fg: "#304CB2";
|
|
82
|
+
};
|
|
83
|
+
readonly B6: {
|
|
84
|
+
readonly bg: "#003876";
|
|
85
|
+
readonly fg: "#FFFFFF";
|
|
86
|
+
};
|
|
87
|
+
readonly AS: {
|
|
88
|
+
readonly bg: "#016191";
|
|
89
|
+
readonly fg: "#FFFFFF";
|
|
90
|
+
};
|
|
91
|
+
readonly F9: {
|
|
92
|
+
readonly bg: "#2D8B45";
|
|
93
|
+
readonly fg: "#FFFFFF";
|
|
94
|
+
};
|
|
95
|
+
readonly NK: {
|
|
96
|
+
readonly bg: "#FFC72C";
|
|
97
|
+
readonly fg: "#000000";
|
|
98
|
+
};
|
|
99
|
+
readonly G4: {
|
|
100
|
+
readonly bg: "#00386C";
|
|
101
|
+
readonly fg: "#FFFFFF";
|
|
102
|
+
};
|
|
103
|
+
readonly HA: {
|
|
104
|
+
readonly bg: "#660099";
|
|
105
|
+
readonly fg: "#FFFFFF";
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
declare const gradients: {
|
|
109
|
+
readonly avatar: "linear-gradient(135deg, #4F7FFF 0%, #4066E8 100%)";
|
|
110
|
+
};
|
|
111
|
+
declare const alertTokens: {
|
|
112
|
+
readonly primary: {
|
|
113
|
+
readonly fg: "#0A53EF";
|
|
114
|
+
readonly bg: "#E6ECFB";
|
|
115
|
+
readonly border: "#0A53EF";
|
|
116
|
+
};
|
|
117
|
+
readonly success: {
|
|
118
|
+
readonly fg: "#138660";
|
|
119
|
+
readonly bg: "#E2F0EC";
|
|
120
|
+
readonly border: "#138660";
|
|
121
|
+
};
|
|
122
|
+
readonly warning: {
|
|
123
|
+
readonly fg: "#9F5500";
|
|
124
|
+
readonly bg: "#FFE2C1";
|
|
125
|
+
readonly border: "#FE7C35";
|
|
126
|
+
};
|
|
127
|
+
readonly error: {
|
|
128
|
+
readonly fg: "#940000";
|
|
129
|
+
readonly bg: "#FEE2E2";
|
|
130
|
+
readonly border: "#940000";
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
declare const semanticColors: {
|
|
134
|
+
readonly fg: {
|
|
135
|
+
readonly 1: "#282828";
|
|
136
|
+
readonly 2: "#3F3F3F";
|
|
137
|
+
readonly 3: "#5C5C5C";
|
|
138
|
+
readonly 4: "#787878";
|
|
139
|
+
readonly disabled: "#C7C7CA";
|
|
140
|
+
readonly link: "#0A53EF";
|
|
141
|
+
readonly linkHover: "#1A43D1";
|
|
142
|
+
};
|
|
143
|
+
readonly bg: {
|
|
144
|
+
readonly page: "#F5F5F5";
|
|
145
|
+
readonly surface: "#FFFFFF";
|
|
146
|
+
readonly card: "#EFEFEF";
|
|
147
|
+
readonly subtle: "#EFF0F0";
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
declare const fontFamily: {
|
|
151
|
+
readonly base: "'Roboto Flex', system-ui, -apple-system, 'Segoe UI', sans-serif";
|
|
152
|
+
readonly display: "'Roboto Flex', system-ui, -apple-system, sans-serif";
|
|
153
|
+
readonly mono: "'JetBrains Mono', ui-monospace, 'SFMono-Regular', Menlo, Consolas, monospace";
|
|
154
|
+
};
|
|
155
|
+
declare const fontSize: {
|
|
156
|
+
readonly xs: "12px";
|
|
157
|
+
readonly sm: "14px";
|
|
158
|
+
readonly base: "16px";
|
|
159
|
+
readonly lg: "18px";
|
|
160
|
+
readonly xl: "20px";
|
|
161
|
+
readonly '2xl': "24px";
|
|
162
|
+
readonly '4xl': "36px";
|
|
163
|
+
};
|
|
164
|
+
declare const lineHeight: {
|
|
165
|
+
readonly xs: "16px";
|
|
166
|
+
readonly sm: "20px";
|
|
167
|
+
readonly base: "24px";
|
|
168
|
+
readonly lg: "28px";
|
|
169
|
+
readonly xl: "28px";
|
|
170
|
+
readonly '2xl': "32px";
|
|
171
|
+
readonly '4xl': "40px";
|
|
172
|
+
readonly tight: 1.25;
|
|
173
|
+
readonly normal: 1.5;
|
|
174
|
+
};
|
|
175
|
+
declare const fontWeight: {
|
|
176
|
+
readonly light: 300;
|
|
177
|
+
readonly regular: 400;
|
|
178
|
+
readonly medium: 500;
|
|
179
|
+
readonly semibold: 600;
|
|
180
|
+
readonly bold: 700;
|
|
181
|
+
};
|
|
182
|
+
declare const spacing: {
|
|
183
|
+
readonly 0: "0";
|
|
184
|
+
readonly '0.5': "2px";
|
|
185
|
+
readonly 1: "4px";
|
|
186
|
+
readonly '1.5': "6px";
|
|
187
|
+
readonly 2: "8px";
|
|
188
|
+
readonly 3: "12px";
|
|
189
|
+
readonly 4: "16px";
|
|
190
|
+
readonly 5: "20px";
|
|
191
|
+
readonly 6: "24px";
|
|
192
|
+
readonly 7: "28px";
|
|
193
|
+
readonly 8: "32px";
|
|
194
|
+
readonly 9: "36px";
|
|
195
|
+
readonly 10: "40px";
|
|
196
|
+
readonly 12: "48px";
|
|
197
|
+
readonly 16: "64px";
|
|
198
|
+
};
|
|
199
|
+
declare const radius: {
|
|
200
|
+
readonly sm: "2px";
|
|
201
|
+
readonly md: "4px";
|
|
202
|
+
readonly lg: "6px";
|
|
203
|
+
readonly xl: "8px";
|
|
204
|
+
readonly '2xl': "12px";
|
|
205
|
+
readonly '3xl': "16px";
|
|
206
|
+
readonly full: "9999px";
|
|
207
|
+
};
|
|
208
|
+
declare const shadow: {
|
|
209
|
+
readonly sm: "0 1px 2px rgba(0, 0, 0, 0.04)";
|
|
210
|
+
readonly md: "0 4px 6px -1px rgba(0, 0, 0, 0.06), 0 2px 4px -2px rgba(0, 0, 0, 0.04)";
|
|
211
|
+
readonly lg: "0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -4px rgba(0, 0, 0, 0.04)";
|
|
212
|
+
};
|
|
213
|
+
declare const breakpoints: {
|
|
214
|
+
readonly sm: "640px";
|
|
215
|
+
readonly md: "768px";
|
|
216
|
+
readonly lg: "1024px";
|
|
217
|
+
readonly xl: "1280px";
|
|
218
|
+
readonly '2xl': "1536px";
|
|
219
|
+
};
|
|
220
|
+
declare const transition: {
|
|
221
|
+
readonly fast: "150ms ease";
|
|
222
|
+
readonly base: "200ms ease";
|
|
223
|
+
readonly slow: "300ms ease";
|
|
224
|
+
};
|
|
225
|
+
declare const lightTheme: {
|
|
226
|
+
readonly colors: {
|
|
227
|
+
readonly brand: {
|
|
228
|
+
readonly blue: "#15538C";
|
|
229
|
+
readonly blueDeep: "#0E3F6E";
|
|
230
|
+
readonly blueTint: "#E5EDF4";
|
|
231
|
+
};
|
|
232
|
+
readonly primary: {
|
|
233
|
+
readonly primary: "#0A53EF";
|
|
234
|
+
readonly primaryDark: "#1A43D1";
|
|
235
|
+
readonly primaryLight: "#E6ECFB";
|
|
236
|
+
readonly primaryLightHover: "#DAE3F8";
|
|
237
|
+
};
|
|
238
|
+
readonly neutral: {
|
|
239
|
+
readonly basecolor: "#F5F5F5";
|
|
240
|
+
readonly subtle: "#EFF0F0";
|
|
241
|
+
readonly card: "#EFEFEF";
|
|
242
|
+
readonly cardalt: "#EBEBEC";
|
|
243
|
+
readonly secondary: "#E4E5E7";
|
|
244
|
+
readonly secondaryDark: "#DFE1E3";
|
|
245
|
+
readonly tableBorder: "#D5D5D5";
|
|
246
|
+
readonly border: "#EDEDED";
|
|
247
|
+
readonly borderDark: "#D5D5D5";
|
|
248
|
+
readonly white: "#FFFFFF";
|
|
249
|
+
};
|
|
250
|
+
readonly text: {
|
|
251
|
+
readonly ink: "#282828";
|
|
252
|
+
readonly charcoal: "#3F3F3F";
|
|
253
|
+
readonly slate: "#5C5C5C";
|
|
254
|
+
readonly stone: "#787878";
|
|
255
|
+
readonly pending: "#C7C7CA";
|
|
256
|
+
readonly error: "#940000";
|
|
257
|
+
};
|
|
258
|
+
readonly status: {
|
|
259
|
+
readonly success: "#138660";
|
|
260
|
+
readonly warning: "#9F5500";
|
|
261
|
+
readonly gold: "#FFC179";
|
|
262
|
+
readonly error: "#940000";
|
|
263
|
+
};
|
|
264
|
+
readonly accent: {
|
|
265
|
+
readonly mint: "#37C3A4";
|
|
266
|
+
readonly forest: "#003E1B";
|
|
267
|
+
readonly forestLight: "#E2F0EC";
|
|
268
|
+
readonly tangerine: "#FE7C35";
|
|
269
|
+
readonly tangerineLight: "#FFE2C1";
|
|
270
|
+
};
|
|
271
|
+
readonly team: {
|
|
272
|
+
readonly men: "#8AC6D9";
|
|
273
|
+
readonly women: "#FFA99A";
|
|
274
|
+
readonly mixed: "#D1C1C3";
|
|
275
|
+
};
|
|
276
|
+
readonly travel: {
|
|
277
|
+
readonly limoBackground: "#EDE9FE";
|
|
278
|
+
readonly limoForeground: "#7C3AED";
|
|
279
|
+
readonly busBackground: "#FEF3C7";
|
|
280
|
+
readonly busForeground: "#D97706";
|
|
281
|
+
};
|
|
282
|
+
readonly vendor: {
|
|
283
|
+
readonly DL: {
|
|
284
|
+
readonly bg: "#003366";
|
|
285
|
+
readonly fg: "#FFFFFF";
|
|
286
|
+
};
|
|
287
|
+
readonly AA: {
|
|
288
|
+
readonly bg: "#0078D2";
|
|
289
|
+
readonly fg: "#FFFFFF";
|
|
290
|
+
};
|
|
291
|
+
readonly UA: {
|
|
292
|
+
readonly bg: "#002244";
|
|
293
|
+
readonly fg: "#FFFFFF";
|
|
294
|
+
};
|
|
295
|
+
readonly WN: {
|
|
296
|
+
readonly bg: "#F9B612";
|
|
297
|
+
readonly fg: "#304CB2";
|
|
298
|
+
};
|
|
299
|
+
readonly B6: {
|
|
300
|
+
readonly bg: "#003876";
|
|
301
|
+
readonly fg: "#FFFFFF";
|
|
302
|
+
};
|
|
303
|
+
readonly AS: {
|
|
304
|
+
readonly bg: "#016191";
|
|
305
|
+
readonly fg: "#FFFFFF";
|
|
306
|
+
};
|
|
307
|
+
readonly F9: {
|
|
308
|
+
readonly bg: "#2D8B45";
|
|
309
|
+
readonly fg: "#FFFFFF";
|
|
310
|
+
};
|
|
311
|
+
readonly NK: {
|
|
312
|
+
readonly bg: "#FFC72C";
|
|
313
|
+
readonly fg: "#000000";
|
|
314
|
+
};
|
|
315
|
+
readonly G4: {
|
|
316
|
+
readonly bg: "#00386C";
|
|
317
|
+
readonly fg: "#FFFFFF";
|
|
318
|
+
};
|
|
319
|
+
readonly HA: {
|
|
320
|
+
readonly bg: "#660099";
|
|
321
|
+
readonly fg: "#FFFFFF";
|
|
322
|
+
};
|
|
323
|
+
};
|
|
324
|
+
readonly alert: {
|
|
325
|
+
readonly primary: {
|
|
326
|
+
readonly fg: "#0A53EF";
|
|
327
|
+
readonly bg: "#E6ECFB";
|
|
328
|
+
readonly border: "#0A53EF";
|
|
329
|
+
};
|
|
330
|
+
readonly success: {
|
|
331
|
+
readonly fg: "#138660";
|
|
332
|
+
readonly bg: "#E2F0EC";
|
|
333
|
+
readonly border: "#138660";
|
|
334
|
+
};
|
|
335
|
+
readonly warning: {
|
|
336
|
+
readonly fg: "#9F5500";
|
|
337
|
+
readonly bg: "#FFE2C1";
|
|
338
|
+
readonly border: "#FE7C35";
|
|
339
|
+
};
|
|
340
|
+
readonly error: {
|
|
341
|
+
readonly fg: "#940000";
|
|
342
|
+
readonly bg: "#FEE2E2";
|
|
343
|
+
readonly border: "#940000";
|
|
344
|
+
};
|
|
345
|
+
};
|
|
346
|
+
readonly semantic: {
|
|
347
|
+
readonly fg: {
|
|
348
|
+
readonly 1: "#282828";
|
|
349
|
+
readonly 2: "#3F3F3F";
|
|
350
|
+
readonly 3: "#5C5C5C";
|
|
351
|
+
readonly 4: "#787878";
|
|
352
|
+
readonly disabled: "#C7C7CA";
|
|
353
|
+
readonly link: "#0A53EF";
|
|
354
|
+
readonly linkHover: "#1A43D1";
|
|
355
|
+
};
|
|
356
|
+
readonly bg: {
|
|
357
|
+
readonly page: "#F5F5F5";
|
|
358
|
+
readonly surface: "#FFFFFF";
|
|
359
|
+
readonly card: "#EFEFEF";
|
|
360
|
+
readonly subtle: "#EFF0F0";
|
|
361
|
+
};
|
|
362
|
+
};
|
|
363
|
+
};
|
|
364
|
+
readonly typography: {
|
|
365
|
+
readonly fontFamily: {
|
|
366
|
+
readonly base: "'Roboto Flex', system-ui, -apple-system, 'Segoe UI', sans-serif";
|
|
367
|
+
readonly display: "'Roboto Flex', system-ui, -apple-system, sans-serif";
|
|
368
|
+
readonly mono: "'JetBrains Mono', ui-monospace, 'SFMono-Regular', Menlo, Consolas, monospace";
|
|
369
|
+
};
|
|
370
|
+
readonly fontSize: {
|
|
371
|
+
readonly xs: "12px";
|
|
372
|
+
readonly sm: "14px";
|
|
373
|
+
readonly base: "16px";
|
|
374
|
+
readonly lg: "18px";
|
|
375
|
+
readonly xl: "20px";
|
|
376
|
+
readonly '2xl': "24px";
|
|
377
|
+
readonly '4xl': "36px";
|
|
378
|
+
};
|
|
379
|
+
readonly lineHeight: {
|
|
380
|
+
readonly xs: "16px";
|
|
381
|
+
readonly sm: "20px";
|
|
382
|
+
readonly base: "24px";
|
|
383
|
+
readonly lg: "28px";
|
|
384
|
+
readonly xl: "28px";
|
|
385
|
+
readonly '2xl': "32px";
|
|
386
|
+
readonly '4xl': "40px";
|
|
387
|
+
readonly tight: 1.25;
|
|
388
|
+
readonly normal: 1.5;
|
|
389
|
+
};
|
|
390
|
+
readonly fontWeight: {
|
|
391
|
+
readonly light: 300;
|
|
392
|
+
readonly regular: 400;
|
|
393
|
+
readonly medium: 500;
|
|
394
|
+
readonly semibold: 600;
|
|
395
|
+
readonly bold: 700;
|
|
396
|
+
};
|
|
397
|
+
};
|
|
398
|
+
readonly spacing: {
|
|
399
|
+
readonly 0: "0";
|
|
400
|
+
readonly '0.5': "2px";
|
|
401
|
+
readonly 1: "4px";
|
|
402
|
+
readonly '1.5': "6px";
|
|
403
|
+
readonly 2: "8px";
|
|
404
|
+
readonly 3: "12px";
|
|
405
|
+
readonly 4: "16px";
|
|
406
|
+
readonly 5: "20px";
|
|
407
|
+
readonly 6: "24px";
|
|
408
|
+
readonly 7: "28px";
|
|
409
|
+
readonly 8: "32px";
|
|
410
|
+
readonly 9: "36px";
|
|
411
|
+
readonly 10: "40px";
|
|
412
|
+
readonly 12: "48px";
|
|
413
|
+
readonly 16: "64px";
|
|
414
|
+
};
|
|
415
|
+
readonly radius: {
|
|
416
|
+
readonly sm: "2px";
|
|
417
|
+
readonly md: "4px";
|
|
418
|
+
readonly lg: "6px";
|
|
419
|
+
readonly xl: "8px";
|
|
420
|
+
readonly '2xl': "12px";
|
|
421
|
+
readonly '3xl': "16px";
|
|
422
|
+
readonly full: "9999px";
|
|
423
|
+
};
|
|
424
|
+
readonly shadow: {
|
|
425
|
+
readonly sm: "0 1px 2px rgba(0, 0, 0, 0.04)";
|
|
426
|
+
readonly md: "0 4px 6px -1px rgba(0, 0, 0, 0.06), 0 2px 4px -2px rgba(0, 0, 0, 0.04)";
|
|
427
|
+
readonly lg: "0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -4px rgba(0, 0, 0, 0.04)";
|
|
428
|
+
};
|
|
429
|
+
readonly breakpoints: {
|
|
430
|
+
readonly sm: "640px";
|
|
431
|
+
readonly md: "768px";
|
|
432
|
+
readonly lg: "1024px";
|
|
433
|
+
readonly xl: "1280px";
|
|
434
|
+
readonly '2xl': "1536px";
|
|
435
|
+
};
|
|
436
|
+
readonly transition: {
|
|
437
|
+
readonly fast: "150ms ease";
|
|
438
|
+
readonly base: "200ms ease";
|
|
439
|
+
readonly slow: "300ms ease";
|
|
440
|
+
};
|
|
441
|
+
readonly gradients: {
|
|
442
|
+
readonly avatar: "linear-gradient(135deg, #4F7FFF 0%, #4066E8 100%)";
|
|
443
|
+
};
|
|
444
|
+
};
|
|
445
|
+
declare const darkTheme: {
|
|
446
|
+
readonly colors: {
|
|
447
|
+
readonly neutral: {
|
|
448
|
+
readonly basecolor: "#1a1a1a";
|
|
449
|
+
readonly subtle: "#2a2a2a";
|
|
450
|
+
readonly card: "#252525";
|
|
451
|
+
readonly cardalt: "#2f2f2f";
|
|
452
|
+
readonly secondary: "#3a3a3a";
|
|
453
|
+
readonly secondaryDark: "#454545";
|
|
454
|
+
readonly tableBorder: "#4a4a4a";
|
|
455
|
+
readonly border: "#3a3a3a";
|
|
456
|
+
readonly borderDark: "#4a4a4a";
|
|
457
|
+
readonly white: "#1a1a1a";
|
|
458
|
+
};
|
|
459
|
+
readonly text: {
|
|
460
|
+
readonly ink: "#f0f0f0";
|
|
461
|
+
readonly charcoal: "#d0d0d0";
|
|
462
|
+
readonly slate: "#a0a0a0";
|
|
463
|
+
readonly stone: "#808080";
|
|
464
|
+
readonly pending: "#606060";
|
|
465
|
+
readonly error: "#ff6b6b";
|
|
466
|
+
};
|
|
467
|
+
readonly semantic: {
|
|
468
|
+
readonly fg: {
|
|
469
|
+
readonly 1: "#f0f0f0";
|
|
470
|
+
readonly 2: "#d0d0d0";
|
|
471
|
+
readonly 3: "#a0a0a0";
|
|
472
|
+
readonly 4: "#808080";
|
|
473
|
+
readonly disabled: "#606060";
|
|
474
|
+
readonly link: "#0A53EF";
|
|
475
|
+
readonly linkHover: "#1A43D1";
|
|
476
|
+
};
|
|
477
|
+
readonly bg: {
|
|
478
|
+
readonly page: "#1a1a1a";
|
|
479
|
+
readonly surface: "#252525";
|
|
480
|
+
readonly card: "#252525";
|
|
481
|
+
readonly subtle: "#2a2a2a";
|
|
482
|
+
};
|
|
483
|
+
};
|
|
484
|
+
readonly brand: {
|
|
485
|
+
readonly blue: "#15538C";
|
|
486
|
+
readonly blueDeep: "#0E3F6E";
|
|
487
|
+
readonly blueTint: "#E5EDF4";
|
|
488
|
+
};
|
|
489
|
+
readonly primary: {
|
|
490
|
+
readonly primary: "#0A53EF";
|
|
491
|
+
readonly primaryDark: "#1A43D1";
|
|
492
|
+
readonly primaryLight: "#E6ECFB";
|
|
493
|
+
readonly primaryLightHover: "#DAE3F8";
|
|
494
|
+
};
|
|
495
|
+
readonly status: {
|
|
496
|
+
readonly success: "#138660";
|
|
497
|
+
readonly warning: "#9F5500";
|
|
498
|
+
readonly gold: "#FFC179";
|
|
499
|
+
readonly error: "#940000";
|
|
500
|
+
};
|
|
501
|
+
readonly accent: {
|
|
502
|
+
readonly mint: "#37C3A4";
|
|
503
|
+
readonly forest: "#003E1B";
|
|
504
|
+
readonly forestLight: "#E2F0EC";
|
|
505
|
+
readonly tangerine: "#FE7C35";
|
|
506
|
+
readonly tangerineLight: "#FFE2C1";
|
|
507
|
+
};
|
|
508
|
+
readonly team: {
|
|
509
|
+
readonly men: "#8AC6D9";
|
|
510
|
+
readonly women: "#FFA99A";
|
|
511
|
+
readonly mixed: "#D1C1C3";
|
|
512
|
+
};
|
|
513
|
+
readonly travel: {
|
|
514
|
+
readonly limoBackground: "#EDE9FE";
|
|
515
|
+
readonly limoForeground: "#7C3AED";
|
|
516
|
+
readonly busBackground: "#FEF3C7";
|
|
517
|
+
readonly busForeground: "#D97706";
|
|
518
|
+
};
|
|
519
|
+
readonly vendor: {
|
|
520
|
+
readonly DL: {
|
|
521
|
+
readonly bg: "#003366";
|
|
522
|
+
readonly fg: "#FFFFFF";
|
|
523
|
+
};
|
|
524
|
+
readonly AA: {
|
|
525
|
+
readonly bg: "#0078D2";
|
|
526
|
+
readonly fg: "#FFFFFF";
|
|
527
|
+
};
|
|
528
|
+
readonly UA: {
|
|
529
|
+
readonly bg: "#002244";
|
|
530
|
+
readonly fg: "#FFFFFF";
|
|
531
|
+
};
|
|
532
|
+
readonly WN: {
|
|
533
|
+
readonly bg: "#F9B612";
|
|
534
|
+
readonly fg: "#304CB2";
|
|
535
|
+
};
|
|
536
|
+
readonly B6: {
|
|
537
|
+
readonly bg: "#003876";
|
|
538
|
+
readonly fg: "#FFFFFF";
|
|
539
|
+
};
|
|
540
|
+
readonly AS: {
|
|
541
|
+
readonly bg: "#016191";
|
|
542
|
+
readonly fg: "#FFFFFF";
|
|
543
|
+
};
|
|
544
|
+
readonly F9: {
|
|
545
|
+
readonly bg: "#2D8B45";
|
|
546
|
+
readonly fg: "#FFFFFF";
|
|
547
|
+
};
|
|
548
|
+
readonly NK: {
|
|
549
|
+
readonly bg: "#FFC72C";
|
|
550
|
+
readonly fg: "#000000";
|
|
551
|
+
};
|
|
552
|
+
readonly G4: {
|
|
553
|
+
readonly bg: "#00386C";
|
|
554
|
+
readonly fg: "#FFFFFF";
|
|
555
|
+
};
|
|
556
|
+
readonly HA: {
|
|
557
|
+
readonly bg: "#660099";
|
|
558
|
+
readonly fg: "#FFFFFF";
|
|
559
|
+
};
|
|
560
|
+
};
|
|
561
|
+
readonly alert: {
|
|
562
|
+
readonly primary: {
|
|
563
|
+
readonly fg: "#0A53EF";
|
|
564
|
+
readonly bg: "#E6ECFB";
|
|
565
|
+
readonly border: "#0A53EF";
|
|
566
|
+
};
|
|
567
|
+
readonly success: {
|
|
568
|
+
readonly fg: "#138660";
|
|
569
|
+
readonly bg: "#E2F0EC";
|
|
570
|
+
readonly border: "#138660";
|
|
571
|
+
};
|
|
572
|
+
readonly warning: {
|
|
573
|
+
readonly fg: "#9F5500";
|
|
574
|
+
readonly bg: "#FFE2C1";
|
|
575
|
+
readonly border: "#FE7C35";
|
|
576
|
+
};
|
|
577
|
+
readonly error: {
|
|
578
|
+
readonly fg: "#940000";
|
|
579
|
+
readonly bg: "#FEE2E2";
|
|
580
|
+
readonly border: "#940000";
|
|
581
|
+
};
|
|
582
|
+
};
|
|
583
|
+
};
|
|
584
|
+
readonly typography: {
|
|
585
|
+
readonly fontFamily: {
|
|
586
|
+
readonly base: "'Roboto Flex', system-ui, -apple-system, 'Segoe UI', sans-serif";
|
|
587
|
+
readonly display: "'Roboto Flex', system-ui, -apple-system, sans-serif";
|
|
588
|
+
readonly mono: "'JetBrains Mono', ui-monospace, 'SFMono-Regular', Menlo, Consolas, monospace";
|
|
589
|
+
};
|
|
590
|
+
readonly fontSize: {
|
|
591
|
+
readonly xs: "12px";
|
|
592
|
+
readonly sm: "14px";
|
|
593
|
+
readonly base: "16px";
|
|
594
|
+
readonly lg: "18px";
|
|
595
|
+
readonly xl: "20px";
|
|
596
|
+
readonly '2xl': "24px";
|
|
597
|
+
readonly '4xl': "36px";
|
|
598
|
+
};
|
|
599
|
+
readonly lineHeight: {
|
|
600
|
+
readonly xs: "16px";
|
|
601
|
+
readonly sm: "20px";
|
|
602
|
+
readonly base: "24px";
|
|
603
|
+
readonly lg: "28px";
|
|
604
|
+
readonly xl: "28px";
|
|
605
|
+
readonly '2xl': "32px";
|
|
606
|
+
readonly '4xl': "40px";
|
|
607
|
+
readonly tight: 1.25;
|
|
608
|
+
readonly normal: 1.5;
|
|
609
|
+
};
|
|
610
|
+
readonly fontWeight: {
|
|
611
|
+
readonly light: 300;
|
|
612
|
+
readonly regular: 400;
|
|
613
|
+
readonly medium: 500;
|
|
614
|
+
readonly semibold: 600;
|
|
615
|
+
readonly bold: 700;
|
|
616
|
+
};
|
|
617
|
+
};
|
|
618
|
+
readonly spacing: {
|
|
619
|
+
readonly 0: "0";
|
|
620
|
+
readonly '0.5': "2px";
|
|
621
|
+
readonly 1: "4px";
|
|
622
|
+
readonly '1.5': "6px";
|
|
623
|
+
readonly 2: "8px";
|
|
624
|
+
readonly 3: "12px";
|
|
625
|
+
readonly 4: "16px";
|
|
626
|
+
readonly 5: "20px";
|
|
627
|
+
readonly 6: "24px";
|
|
628
|
+
readonly 7: "28px";
|
|
629
|
+
readonly 8: "32px";
|
|
630
|
+
readonly 9: "36px";
|
|
631
|
+
readonly 10: "40px";
|
|
632
|
+
readonly 12: "48px";
|
|
633
|
+
readonly 16: "64px";
|
|
634
|
+
};
|
|
635
|
+
readonly radius: {
|
|
636
|
+
readonly sm: "2px";
|
|
637
|
+
readonly md: "4px";
|
|
638
|
+
readonly lg: "6px";
|
|
639
|
+
readonly xl: "8px";
|
|
640
|
+
readonly '2xl': "12px";
|
|
641
|
+
readonly '3xl': "16px";
|
|
642
|
+
readonly full: "9999px";
|
|
643
|
+
};
|
|
644
|
+
readonly shadow: {
|
|
645
|
+
readonly sm: "0 1px 2px rgba(0, 0, 0, 0.04)";
|
|
646
|
+
readonly md: "0 4px 6px -1px rgba(0, 0, 0, 0.06), 0 2px 4px -2px rgba(0, 0, 0, 0.04)";
|
|
647
|
+
readonly lg: "0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -4px rgba(0, 0, 0, 0.04)";
|
|
648
|
+
};
|
|
649
|
+
readonly breakpoints: {
|
|
650
|
+
readonly sm: "640px";
|
|
651
|
+
readonly md: "768px";
|
|
652
|
+
readonly lg: "1024px";
|
|
653
|
+
readonly xl: "1280px";
|
|
654
|
+
readonly '2xl': "1536px";
|
|
655
|
+
};
|
|
656
|
+
readonly transition: {
|
|
657
|
+
readonly fast: "150ms ease";
|
|
658
|
+
readonly base: "200ms ease";
|
|
659
|
+
readonly slow: "300ms ease";
|
|
660
|
+
};
|
|
661
|
+
readonly gradients: {
|
|
662
|
+
readonly avatar: "linear-gradient(135deg, #4F7FFF 0%, #4066E8 100%)";
|
|
663
|
+
};
|
|
664
|
+
};
|
|
665
|
+
/**
|
|
666
|
+
* Theme interface - allows both light and dark themes to be assignable.
|
|
667
|
+
* Uses structural typing rather than literal types for color values.
|
|
668
|
+
*/
|
|
669
|
+
interface Theme {
|
|
670
|
+
colors: {
|
|
671
|
+
brand: typeof brandColors;
|
|
672
|
+
primary: typeof primaryColors;
|
|
673
|
+
neutral: {
|
|
674
|
+
basecolor: string;
|
|
675
|
+
subtle: string;
|
|
676
|
+
card: string;
|
|
677
|
+
cardalt: string;
|
|
678
|
+
secondary: string;
|
|
679
|
+
secondaryDark: string;
|
|
680
|
+
tableBorder: string;
|
|
681
|
+
border: string;
|
|
682
|
+
borderDark: string;
|
|
683
|
+
white: string;
|
|
684
|
+
};
|
|
685
|
+
text: {
|
|
686
|
+
ink: string;
|
|
687
|
+
charcoal: string;
|
|
688
|
+
slate: string;
|
|
689
|
+
stone: string;
|
|
690
|
+
pending: string;
|
|
691
|
+
error: string;
|
|
692
|
+
};
|
|
693
|
+
status: typeof statusColors;
|
|
694
|
+
accent: typeof accentColors;
|
|
695
|
+
team: typeof teamColors;
|
|
696
|
+
travel: typeof travelColors;
|
|
697
|
+
vendor: typeof vendorColors;
|
|
698
|
+
alert: typeof alertTokens;
|
|
699
|
+
semantic: {
|
|
700
|
+
fg: {
|
|
701
|
+
1: string;
|
|
702
|
+
2: string;
|
|
703
|
+
3: string;
|
|
704
|
+
4: string;
|
|
705
|
+
disabled: string;
|
|
706
|
+
link: string;
|
|
707
|
+
linkHover: string;
|
|
708
|
+
};
|
|
709
|
+
bg: {
|
|
710
|
+
page: string;
|
|
711
|
+
surface: string;
|
|
712
|
+
card: string;
|
|
713
|
+
subtle: string;
|
|
714
|
+
};
|
|
715
|
+
};
|
|
716
|
+
};
|
|
717
|
+
typography: {
|
|
718
|
+
fontFamily: typeof fontFamily;
|
|
719
|
+
fontSize: typeof fontSize;
|
|
720
|
+
lineHeight: typeof lineHeight;
|
|
721
|
+
fontWeight: typeof fontWeight;
|
|
722
|
+
};
|
|
723
|
+
spacing: typeof spacing;
|
|
724
|
+
radius: typeof radius;
|
|
725
|
+
shadow: typeof shadow;
|
|
726
|
+
breakpoints: typeof breakpoints;
|
|
727
|
+
transition: typeof transition;
|
|
728
|
+
gradients: typeof gradients;
|
|
729
|
+
}
|
|
730
|
+
type ThemeColors = Theme['colors'];
|
|
731
|
+
type ThemeTypography = Theme['typography'];
|
|
732
|
+
type ThemeSpacing = keyof typeof spacing;
|
|
733
|
+
type ThemeRadius = keyof typeof radius;
|
|
734
|
+
type ThemeShadow = keyof typeof shadow;
|
|
735
|
+
type ThemeBreakpoint = keyof typeof breakpoints;
|
|
736
|
+
type ThemeTransition = keyof typeof transition;
|
|
737
|
+
|
|
738
|
+
type ThemeMode = 'light' | 'dark' | 'system';
|
|
739
|
+
interface ThemeContextValue {
|
|
740
|
+
/** Current resolved theme object */
|
|
741
|
+
theme: Theme;
|
|
742
|
+
/** Current theme mode setting */
|
|
743
|
+
mode: ThemeMode;
|
|
744
|
+
/** Whether dark mode is currently active */
|
|
745
|
+
isDark: boolean;
|
|
746
|
+
/** Update the theme mode */
|
|
747
|
+
setMode: (mode: ThemeMode) => void;
|
|
748
|
+
/** Toggle between light and dark modes */
|
|
749
|
+
toggleTheme: () => void;
|
|
750
|
+
}
|
|
751
|
+
/**
|
|
752
|
+
* Access the current theme context.
|
|
753
|
+
*
|
|
754
|
+
* Outside a ThemeProvider this resolves to the light theme with no-op mode
|
|
755
|
+
* setters, so components stay renderable on their own.
|
|
756
|
+
*
|
|
757
|
+
* @example
|
|
758
|
+
* ```tsx
|
|
759
|
+
* const { theme, isDark, toggleTheme } = useTheme();
|
|
760
|
+
*
|
|
761
|
+
* const buttonStyle = css({
|
|
762
|
+
* backgroundColor: theme.colors.primary.primary,
|
|
763
|
+
* color: theme.colors.neutral.white,
|
|
764
|
+
* });
|
|
765
|
+
* ```
|
|
766
|
+
*/
|
|
767
|
+
declare function useTheme(): ThemeContextValue;
|
|
768
|
+
interface ThemeProviderProps {
|
|
769
|
+
/** Child components */
|
|
770
|
+
children: React__default.ReactNode;
|
|
771
|
+
/** Initial theme mode (default: 'system') */
|
|
772
|
+
defaultMode?: ThemeMode;
|
|
773
|
+
/** Storage key for persisting theme preference */
|
|
774
|
+
storageKey?: string;
|
|
775
|
+
/** Whether to add theme class to document root */
|
|
776
|
+
applyToRoot?: boolean;
|
|
777
|
+
}
|
|
778
|
+
/**
|
|
779
|
+
* Provides theme context to child components.
|
|
780
|
+
* Supports light, dark, and system-preference modes.
|
|
781
|
+
*
|
|
782
|
+
* @example
|
|
783
|
+
* ```tsx
|
|
784
|
+
* // Basic usage
|
|
785
|
+
* <ThemeProvider>
|
|
786
|
+
* <App />
|
|
787
|
+
* </ThemeProvider>
|
|
788
|
+
*
|
|
789
|
+
* // With initial dark mode
|
|
790
|
+
* <ThemeProvider defaultMode="dark">
|
|
791
|
+
* <App />
|
|
792
|
+
* </ThemeProvider>
|
|
793
|
+
*
|
|
794
|
+
* // With persistence
|
|
795
|
+
* <ThemeProvider storageKey="stm-theme-mode">
|
|
796
|
+
* <App />
|
|
797
|
+
* </ThemeProvider>
|
|
798
|
+
* ```
|
|
799
|
+
*/
|
|
800
|
+
declare function ThemeProvider({ children, defaultMode, storageKey, applyToRoot, }: ThemeProviderProps): React__default.ReactElement;
|
|
801
|
+
|
|
802
|
+
/**
|
|
803
|
+
* CSS object type - extends React's CSSProperties.
|
|
804
|
+
* Simpler type to avoid complex union issues.
|
|
805
|
+
*/
|
|
806
|
+
type CSSObject = CSSProperties & Record<string, unknown>;
|
|
807
|
+
type StyleFunction<P = object> = (props: P & {
|
|
808
|
+
theme: Theme;
|
|
809
|
+
}) => CSSObject;
|
|
810
|
+
/**
|
|
811
|
+
* Create a CSS object with type safety.
|
|
812
|
+
* Converts nested pseudo-selectors for inline style compatibility.
|
|
813
|
+
*
|
|
814
|
+
* @example
|
|
815
|
+
* ```tsx
|
|
816
|
+
* const buttonStyle = css({
|
|
817
|
+
* backgroundColor: theme.colors.primary.primary,
|
|
818
|
+
* padding: `${theme.spacing[2]} ${theme.spacing[4]}`,
|
|
819
|
+
* borderRadius: theme.radius.full,
|
|
820
|
+
* '&:hover': {
|
|
821
|
+
* backgroundColor: theme.colors.primary.primaryDark,
|
|
822
|
+
* },
|
|
823
|
+
* });
|
|
824
|
+
* ```
|
|
825
|
+
*/
|
|
826
|
+
declare function css(styles: CSSObject): CSSObject;
|
|
827
|
+
/**
|
|
828
|
+
* Merge multiple CSS objects together.
|
|
829
|
+
* Later objects override earlier ones.
|
|
830
|
+
*
|
|
831
|
+
* @example
|
|
832
|
+
* ```tsx
|
|
833
|
+
* const combined = merge(baseStyle, variantStyle, sizeStyle);
|
|
834
|
+
* ```
|
|
835
|
+
*/
|
|
836
|
+
declare function merge(...styles: (CSSObject | CSSProperties | Record<string, unknown> | undefined | null | false)[]): CSSObject;
|
|
837
|
+
/**
|
|
838
|
+
* Convert a CSSObject to inline styles.
|
|
839
|
+
* Strips out pseudo-selectors (they can't be inlined).
|
|
840
|
+
*/
|
|
841
|
+
declare function toInlineStyle(styles: CSSObject): CSSProperties;
|
|
842
|
+
/**
|
|
843
|
+
* Create spacing value from theme tokens.
|
|
844
|
+
*/
|
|
845
|
+
declare function space(value: keyof typeof spacing | number): string;
|
|
846
|
+
/**
|
|
847
|
+
* Create border-radius value from theme tokens.
|
|
848
|
+
*/
|
|
849
|
+
declare function rounded(value: keyof typeof radius): string;
|
|
850
|
+
/**
|
|
851
|
+
* Create box-shadow value from theme tokens.
|
|
852
|
+
*/
|
|
853
|
+
declare function boxShadow(value: keyof typeof shadow): string;
|
|
854
|
+
/**
|
|
855
|
+
* Create transition value from theme tokens.
|
|
856
|
+
*/
|
|
857
|
+
declare function trans(value: keyof typeof transition): string;
|
|
858
|
+
/**
|
|
859
|
+
* Create font-weight value from theme tokens.
|
|
860
|
+
*/
|
|
861
|
+
declare function weight(value: keyof typeof fontWeight): number;
|
|
862
|
+
/**
|
|
863
|
+
* Create font-size value from theme tokens.
|
|
864
|
+
*/
|
|
865
|
+
declare function size(value: keyof typeof fontSize): string;
|
|
866
|
+
/**
|
|
867
|
+
* Create line-height value from theme tokens.
|
|
868
|
+
*/
|
|
869
|
+
declare function leading(value: keyof typeof lineHeight): string | number;
|
|
870
|
+
/**
|
|
871
|
+
* Create font-family value from theme tokens.
|
|
872
|
+
*/
|
|
873
|
+
declare function font(value: keyof typeof fontFamily): string;
|
|
874
|
+
/**
|
|
875
|
+
* Reset button styles.
|
|
876
|
+
*/
|
|
877
|
+
declare const buttonReset: CSSObject;
|
|
878
|
+
/**
|
|
879
|
+
* Flex center alignment.
|
|
880
|
+
*/
|
|
881
|
+
declare const flexCenter: CSSObject;
|
|
882
|
+
/**
|
|
883
|
+
* Flex row with gap.
|
|
884
|
+
*/
|
|
885
|
+
declare function flexRow(gap?: keyof typeof spacing): CSSObject;
|
|
886
|
+
/**
|
|
887
|
+
* Flex column with gap.
|
|
888
|
+
*/
|
|
889
|
+
declare function flexCol(gap?: keyof typeof spacing): CSSObject;
|
|
890
|
+
/**
|
|
891
|
+
* Absolute fill parent.
|
|
892
|
+
*/
|
|
893
|
+
declare const absoluteFill: CSSObject;
|
|
894
|
+
/**
|
|
895
|
+
* Screen reader only (visually hidden but accessible).
|
|
896
|
+
*/
|
|
897
|
+
declare const srOnly: CSSObject;
|
|
898
|
+
/**
|
|
899
|
+
* Truncate text with ellipsis.
|
|
900
|
+
*/
|
|
901
|
+
declare const truncate: CSSObject;
|
|
902
|
+
/**
|
|
903
|
+
* Line clamp for multi-line truncation.
|
|
904
|
+
*/
|
|
905
|
+
declare function lineClamp(lines: number): CSSObject;
|
|
906
|
+
/**
|
|
907
|
+
* Create a style factory that receives the theme.
|
|
908
|
+
* Use with useTheme() hook.
|
|
909
|
+
*
|
|
910
|
+
* @example
|
|
911
|
+
* ```tsx
|
|
912
|
+
* const useButtonStyles = styled((theme) => ({
|
|
913
|
+
* root: css({
|
|
914
|
+
* backgroundColor: theme.colors.primary.primary,
|
|
915
|
+
* color: theme.colors.neutral.white,
|
|
916
|
+
* }),
|
|
917
|
+
* disabled: css({
|
|
918
|
+
* opacity: 0.5,
|
|
919
|
+
* cursor: 'not-allowed',
|
|
920
|
+
* }),
|
|
921
|
+
* }));
|
|
922
|
+
*
|
|
923
|
+
* function Button() {
|
|
924
|
+
* const { theme } = useTheme();
|
|
925
|
+
* const styles = useButtonStyles(theme);
|
|
926
|
+
* return <button style={toInlineStyle(styles.root)}>Click</button>;
|
|
927
|
+
* }
|
|
928
|
+
* ```
|
|
929
|
+
*/
|
|
930
|
+
declare function styled<T extends Record<string, CSSObject>>(factory: (theme: Theme) => T): (theme: Theme) => T;
|
|
931
|
+
|
|
932
|
+
type AlertVariant$1 = 'primary' | 'success' | 'warning' | 'error';
|
|
5
933
|
interface AlertProps {
|
|
6
934
|
/** Visual style variant */
|
|
7
|
-
variant?: AlertVariant;
|
|
935
|
+
variant?: AlertVariant$1;
|
|
8
936
|
/** Optional title for the alert */
|
|
9
937
|
title?: string;
|
|
10
938
|
/** Content of the alert */
|
|
@@ -18,6 +946,42 @@ interface AlertProps {
|
|
|
18
946
|
}
|
|
19
947
|
declare const Alert: React__default.FC<AlertProps>;
|
|
20
948
|
|
|
949
|
+
type AlertVariant = 'primary' | 'success' | 'warning' | 'error';
|
|
950
|
+
|
|
951
|
+
interface AlertStyledProps {
|
|
952
|
+
/** Visual style variant */
|
|
953
|
+
variant?: AlertVariant;
|
|
954
|
+
/** Optional title for the alert */
|
|
955
|
+
title?: string;
|
|
956
|
+
/** Content of the alert */
|
|
957
|
+
children: React__default.ReactNode;
|
|
958
|
+
/** Whether the alert can be dismissed */
|
|
959
|
+
dismissible?: boolean;
|
|
960
|
+
/** Callback when dismiss button is clicked */
|
|
961
|
+
onDismiss?: () => void;
|
|
962
|
+
/** Additional inline styles */
|
|
963
|
+
style?: React__default.CSSProperties;
|
|
964
|
+
/** Data test attribute for testing */
|
|
965
|
+
'data-test'?: string;
|
|
966
|
+
}
|
|
967
|
+
/**
|
|
968
|
+
* Alert component for displaying important messages.
|
|
969
|
+
* Uses CSS-in-JS styling with theme support.
|
|
970
|
+
* Supports primary, success, warning, and error variants.
|
|
971
|
+
*
|
|
972
|
+
* @example
|
|
973
|
+
* ```tsx
|
|
974
|
+
* <AlertStyled variant="success" title="Success!">
|
|
975
|
+
* Your changes have been saved.
|
|
976
|
+
* </AlertStyled>
|
|
977
|
+
*
|
|
978
|
+
* <AlertStyled variant="error" dismissible onDismiss={() => setShow(false)}>
|
|
979
|
+
* An error occurred. Please try again.
|
|
980
|
+
* </AlertStyled>
|
|
981
|
+
* ```
|
|
982
|
+
*/
|
|
983
|
+
declare const AlertStyled: React__default.FC<AlertStyledProps>;
|
|
984
|
+
|
|
21
985
|
type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
22
986
|
interface AvatarProps extends HTMLAttributes<HTMLDivElement> {
|
|
23
987
|
/** Image source URL */
|
|
@@ -29,7 +993,11 @@ interface AvatarProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
29
993
|
/** Name (used to generate initials if not provided) */
|
|
30
994
|
name?: string;
|
|
31
995
|
/** Size of the avatar */
|
|
32
|
-
|
|
996
|
+
/**
|
|
997
|
+
* One of the named sizes, or an explicit pixel value for hosts pinned to a
|
|
998
|
+
* dimension the scale does not carry.
|
|
999
|
+
*/
|
|
1000
|
+
size?: AvatarSize | number;
|
|
33
1001
|
}
|
|
34
1002
|
/**
|
|
35
1003
|
* Avatar component for user profile images or initials.
|
|
@@ -56,9 +1024,34 @@ interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
|
56
1024
|
*/
|
|
57
1025
|
declare const Badge: React__default.FC<BadgeProps>;
|
|
58
1026
|
|
|
59
|
-
type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
|
|
60
|
-
type ButtonSize = 'sm' | 'md' | 'lg';
|
|
1027
|
+
type ButtonVariant$1 = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
|
|
1028
|
+
type ButtonSize$1 = 'sm' | 'md' | 'lg';
|
|
61
1029
|
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
1030
|
+
/** Visual style variant */
|
|
1031
|
+
variant?: ButtonVariant$1;
|
|
1032
|
+
/** Size of the button */
|
|
1033
|
+
size?: ButtonSize$1;
|
|
1034
|
+
/** Makes button take full width */
|
|
1035
|
+
fullWidth?: boolean;
|
|
1036
|
+
/** Shows loading spinner */
|
|
1037
|
+
loading?: boolean;
|
|
1038
|
+
/** Icon element to show before text */
|
|
1039
|
+
leftIcon?: React__default.ReactNode;
|
|
1040
|
+
/** Icon element to show after text */
|
|
1041
|
+
rightIcon?: React__default.ReactNode;
|
|
1042
|
+
/** Makes button square (equal width/height) */
|
|
1043
|
+
square?: boolean;
|
|
1044
|
+
}
|
|
1045
|
+
/**
|
|
1046
|
+
* Primary button component for user interactions.
|
|
1047
|
+
* Supports multiple variants, sizes, and states.
|
|
1048
|
+
*/
|
|
1049
|
+
declare const Button: React__default.ForwardRefExoticComponent<ButtonProps & React__default.RefAttributes<HTMLButtonElement>>;
|
|
1050
|
+
|
|
1051
|
+
type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'primary-light' | 'outline-primary' | 'outline-secondary' | 'outline-charcoal' | 'charcoal' | 'text';
|
|
1052
|
+
type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
1053
|
+
|
|
1054
|
+
interface ButtonStyledProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
62
1055
|
/** Visual style variant */
|
|
63
1056
|
variant?: ButtonVariant;
|
|
64
1057
|
/** Size of the button */
|
|
@@ -76,9 +1069,25 @@ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
|
76
1069
|
}
|
|
77
1070
|
/**
|
|
78
1071
|
* Primary button component for user interactions.
|
|
1072
|
+
* Uses CSS-in-JS styling with theme support.
|
|
79
1073
|
* Supports multiple variants, sizes, and states.
|
|
1074
|
+
*
|
|
1075
|
+
* @example
|
|
1076
|
+
* ```tsx
|
|
1077
|
+
* <ButtonStyled variant="primary" size="md">
|
|
1078
|
+
* Click me
|
|
1079
|
+
* </ButtonStyled>
|
|
1080
|
+
*
|
|
1081
|
+
* <ButtonStyled variant="outline" leftIcon={<PlusIcon />}>
|
|
1082
|
+
* Add item
|
|
1083
|
+
* </ButtonStyled>
|
|
1084
|
+
*
|
|
1085
|
+
* <ButtonStyled loading>
|
|
1086
|
+
* Processing...
|
|
1087
|
+
* </ButtonStyled>
|
|
1088
|
+
* ```
|
|
80
1089
|
*/
|
|
81
|
-
declare const
|
|
1090
|
+
declare const ButtonStyled: React__default.ForwardRefExoticComponent<ButtonStyledProps & React__default.RefAttributes<HTMLButtonElement>>;
|
|
82
1091
|
|
|
83
1092
|
interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
|
|
84
1093
|
/** Label text for the checkbox */
|
|
@@ -147,6 +1156,7 @@ declare const UserIcon: React__default.FC<IconProps>;
|
|
|
147
1156
|
declare const UsersIcon: React__default.FC<IconProps>;
|
|
148
1157
|
declare const MailIcon: React__default.FC<IconProps>;
|
|
149
1158
|
declare const PhoneIcon: React__default.FC<IconProps>;
|
|
1159
|
+
declare const HeadsetIcon: React__default.FC<IconProps>;
|
|
150
1160
|
declare const PrinterIcon: React__default.FC<IconProps>;
|
|
151
1161
|
declare const RefreshIcon: React__default.FC<IconProps>;
|
|
152
1162
|
declare const WarningIcon: React__default.FC<IconProps>;
|
|
@@ -333,18 +1343,18 @@ interface SpinnerProps {
|
|
|
333
1343
|
}
|
|
334
1344
|
declare const Spinner: React__default.FC<SpinnerProps>;
|
|
335
1345
|
|
|
336
|
-
type StatusBadgeVariant = 'ticketed' | 'itinerary' | 'not-ticketed' | 'submitted' | 'pending' | 'cancelled';
|
|
337
|
-
interface StatusBadgeProps {
|
|
1346
|
+
type StatusBadgeVariant = 'ticketed' | 'itinerary' | 'not-ticketed' | 'submitted' | 'pending' | 'cancelled' | 'approved' | 'rejected' | 'in-review';
|
|
1347
|
+
interface StatusBadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
338
1348
|
/** The status variant to display */
|
|
339
1349
|
status: StatusBadgeVariant;
|
|
340
1350
|
/** Optional custom label (defaults to formatted status) */
|
|
341
1351
|
label?: string;
|
|
342
|
-
/** Additional CSS class */
|
|
343
|
-
className?: string;
|
|
344
1352
|
}
|
|
345
1353
|
declare const StatusBadge: React__default.FC<StatusBadgeProps>;
|
|
346
1354
|
|
|
347
|
-
type TagVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info'
|
|
1355
|
+
type TagVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info'
|
|
1356
|
+
/** No fill or colour of its own — inherits, for grouping content inline. */
|
|
1357
|
+
| 'plain';
|
|
348
1358
|
type TagSize = 'sm' | 'md' | 'lg';
|
|
349
1359
|
interface TagProps {
|
|
350
1360
|
/** Tag content */
|
|
@@ -364,7 +1374,7 @@ interface TagProps {
|
|
|
364
1374
|
/** Inline styles */
|
|
365
1375
|
style?: React__default.CSSProperties;
|
|
366
1376
|
}
|
|
367
|
-
declare const Tag: React__default.
|
|
1377
|
+
declare const Tag: React__default.ForwardRefExoticComponent<TagProps & React__default.RefAttributes<HTMLSpanElement>>;
|
|
368
1378
|
|
|
369
1379
|
type TimepickerSize = 'sm' | 'md' | 'lg';
|
|
370
1380
|
interface TimepickerProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
|
|
@@ -419,6 +1429,21 @@ interface ToggleProps {
|
|
|
419
1429
|
className?: string;
|
|
420
1430
|
/** Accessible name for the toggle */
|
|
421
1431
|
'aria-label'?: string;
|
|
1432
|
+
/**
|
|
1433
|
+
* Field name. Supplying it renders a hidden checkbox so the toggle submits
|
|
1434
|
+
* with a surrounding form; without it the toggle is presentational.
|
|
1435
|
+
*/
|
|
1436
|
+
name?: string;
|
|
1437
|
+
/** Id applied to the hidden checkbox, for an external `<label htmlFor>`. */
|
|
1438
|
+
id?: string;
|
|
1439
|
+
/** Class applied to the label wrapper, when a `label` is given. */
|
|
1440
|
+
wrapperClassName?: string;
|
|
1441
|
+
/**
|
|
1442
|
+
* Indicator shown inside the track while disabled — usually a padlock, to
|
|
1443
|
+
* explain why the control cannot be moved. Takes a node so the component
|
|
1444
|
+
* stays independent of any icon set.
|
|
1445
|
+
*/
|
|
1446
|
+
disabledIcon?: ReactNode;
|
|
422
1447
|
}
|
|
423
1448
|
declare const Toggle: React__default.FC<ToggleProps>;
|
|
424
1449
|
|
|
@@ -443,20 +1468,18 @@ interface TooltipProps {
|
|
|
443
1468
|
declare const Tooltip: React__default.FC<TooltipProps>;
|
|
444
1469
|
|
|
445
1470
|
type TravelType = 'A' | 'C' | 'H' | 'L' | 'R' | 'B' | 'U';
|
|
446
|
-
interface TypeIconProps {
|
|
1471
|
+
interface TypeIconProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
447
1472
|
/** Travel type code: A=Air, C=Car, H=Hotel, L=Limo, R=Rail, B=Bus, U=Unknown */
|
|
448
1473
|
type: TravelType;
|
|
449
1474
|
/** Size in pixels */
|
|
450
1475
|
size?: number;
|
|
451
1476
|
/** Show tooltip on hover */
|
|
452
1477
|
showTooltip?: boolean;
|
|
453
|
-
/** Additional CSS class */
|
|
454
|
-
className?: string;
|
|
455
1478
|
}
|
|
456
1479
|
declare const TypeIcon: React__default.FC<TypeIconProps>;
|
|
457
1480
|
|
|
458
1481
|
type VendorCode = 'DL' | 'AA' | 'UA' | 'WN' | 'B6' | 'AS' | 'F9' | 'NK' | 'G4' | 'HA' | string;
|
|
459
|
-
interface TravelServiceIconProps {
|
|
1482
|
+
interface TravelServiceIconProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
460
1483
|
/** Travel type: A=Air, C=Car, H=Hotel, L=Limo, R=Rail */
|
|
461
1484
|
type: TravelType;
|
|
462
1485
|
/** Vendor/airline code (e.g., DL, AA, UA) */
|
|
@@ -467,8 +1490,6 @@ interface TravelServiceIconProps {
|
|
|
467
1490
|
size?: number;
|
|
468
1491
|
/** Show multi-segment indicator */
|
|
469
1492
|
multi?: boolean;
|
|
470
|
-
/** Additional CSS class */
|
|
471
|
-
className?: string;
|
|
472
1493
|
}
|
|
473
1494
|
declare const TravelServiceIcon: React__default.FC<TravelServiceIconProps>;
|
|
474
1495
|
|
|
@@ -510,8 +1531,14 @@ interface SegmentedSelectorProps {
|
|
|
510
1531
|
ariaLabel?: string;
|
|
511
1532
|
/** Stable hook used by Hub acceptance and Chromatic tests. */
|
|
512
1533
|
dataTest?: string;
|
|
513
|
-
|
|
514
|
-
|
|
1534
|
+
/** Class applied to every option button. */
|
|
1535
|
+
itemClassName?: string;
|
|
1536
|
+
/** Class applied to the selected option, on top of `itemClassName`. */
|
|
1537
|
+
activeItemClassName?: string;
|
|
1538
|
+
/** Which side of the label an option's icon sits on. Defaults to left. */
|
|
1539
|
+
iconPosition?: 'left' | 'right';
|
|
1540
|
+
}
|
|
1541
|
+
declare const SegmentedSelector: ({ options, value, onChange, disabled, size, className, ariaLabel, dataTest, itemClassName, activeItemClassName, iconPosition, }: SegmentedSelectorProps) => React.JSX.Element;
|
|
515
1542
|
type CalendarViewValue = 'calendar' | 'card' | 'list';
|
|
516
1543
|
interface CalendarViewSelectorProps extends Omit<SegmentedSelectorProps, 'options' | 'value' | 'onChange' | 'ariaLabel'> {
|
|
517
1544
|
value: CalendarViewValue;
|
|
@@ -525,6 +1552,67 @@ interface CalendarTypeSelectorProps extends Omit<SegmentedSelectorProps, 'option
|
|
|
525
1552
|
}
|
|
526
1553
|
declare const CalendarTypeSelector: ({ value, onChange, ...props }: CalendarTypeSelectorProps) => React.JSX.Element;
|
|
527
1554
|
|
|
1555
|
+
interface ContactCardProps {
|
|
1556
|
+
/** Person's name. Also seeds the avatar's initials. */
|
|
1557
|
+
name?: string;
|
|
1558
|
+
/** Role or job title, shown under the name. */
|
|
1559
|
+
title?: string;
|
|
1560
|
+
/** Phone number, rendered as a `tel:` link. */
|
|
1561
|
+
phone?: string;
|
|
1562
|
+
/** Email address, rendered as a `mailto:` link. */
|
|
1563
|
+
email?: string;
|
|
1564
|
+
/**
|
|
1565
|
+
* Replaces the plain name with your own control — a button opening a
|
|
1566
|
+
* profile, say. The name is still used for the avatar's initials.
|
|
1567
|
+
*/
|
|
1568
|
+
action?: ReactNode;
|
|
1569
|
+
/** Whether to show the avatar. */
|
|
1570
|
+
showAvatar?: boolean;
|
|
1571
|
+
/** Additional CSS class */
|
|
1572
|
+
className?: string;
|
|
1573
|
+
}
|
|
1574
|
+
/**
|
|
1575
|
+
* A single person's contact details: avatar, name, title, and tappable phone
|
|
1576
|
+
* and email links.
|
|
1577
|
+
*
|
|
1578
|
+
* Renders nothing when there is neither a name nor an action, so callers can
|
|
1579
|
+
* hand it a partially filled record without guarding first.
|
|
1580
|
+
*/
|
|
1581
|
+
declare const ContactCard: React__default.FC<ContactCardProps>;
|
|
1582
|
+
|
|
1583
|
+
type DetailListVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error';
|
|
1584
|
+
interface DetailListItem {
|
|
1585
|
+
/** Name of the field. Omitted for icon rows, which read as a single line. */
|
|
1586
|
+
label?: ReactNode;
|
|
1587
|
+
/** The value. A row with nothing to show is skipped. */
|
|
1588
|
+
description?: ReactNode;
|
|
1589
|
+
/** Leading icon. Supplying one makes this an icon row rather than a pair. */
|
|
1590
|
+
icon?: ReactNode;
|
|
1591
|
+
/** Tints the value as a status chip. */
|
|
1592
|
+
variant?: DetailListVariant;
|
|
1593
|
+
}
|
|
1594
|
+
interface DetailListProps {
|
|
1595
|
+
/** Rows to show. Items with no description are skipped. */
|
|
1596
|
+
items: DetailListItem[];
|
|
1597
|
+
/** Space between rows, and between an icon and its text, in pixels. */
|
|
1598
|
+
gap?: number;
|
|
1599
|
+
/** Additional CSS class */
|
|
1600
|
+
className?: string;
|
|
1601
|
+
}
|
|
1602
|
+
/**
|
|
1603
|
+
* A compact list of field/value pairs, as used down the side of a trip or
|
|
1604
|
+
* booking summary.
|
|
1605
|
+
*
|
|
1606
|
+
* Rows come in two shapes. A `label` and `description` render as a pair, the
|
|
1607
|
+
* value aligned right and optionally tinted as a status chip. An `icon` and
|
|
1608
|
+
* `description` render as one line, with rows lacking an icon still indented
|
|
1609
|
+
* so the text stays aligned.
|
|
1610
|
+
*
|
|
1611
|
+
* The whole list disappears when no item has a description, so callers can
|
|
1612
|
+
* pass a sparse record without checking whether anything survived.
|
|
1613
|
+
*/
|
|
1614
|
+
declare const DetailList: React__default.FC<DetailListProps>;
|
|
1615
|
+
|
|
528
1616
|
type DropdownAlignment = 'left' | 'center' | 'right';
|
|
529
1617
|
interface DropdownProps {
|
|
530
1618
|
/** Label for the dropdown trigger button */
|
|
@@ -539,6 +1627,16 @@ interface DropdownProps {
|
|
|
539
1627
|
className?: string;
|
|
540
1628
|
/** Whether the dropdown is disabled */
|
|
541
1629
|
disabled?: boolean;
|
|
1630
|
+
/**
|
|
1631
|
+
* Render the trigger yourself, instead of the default labelled button.
|
|
1632
|
+
* Receives the open state and the handler that toggles the menu, so the
|
|
1633
|
+
* host can supply its own button with its own variant, icon and styling.
|
|
1634
|
+
*/
|
|
1635
|
+
trigger?: (state: {
|
|
1636
|
+
isOpen: boolean;
|
|
1637
|
+
toggle: () => void;
|
|
1638
|
+
disabled: boolean;
|
|
1639
|
+
}) => React__default.ReactNode;
|
|
542
1640
|
}
|
|
543
1641
|
interface DropdownItemProps {
|
|
544
1642
|
/** Item label */
|
|
@@ -556,6 +1654,113 @@ declare const Dropdown: React__default.FC<DropdownProps> & {
|
|
|
556
1654
|
Item: React__default.FC<DropdownItemProps>;
|
|
557
1655
|
};
|
|
558
1656
|
|
|
1657
|
+
type EmptyStateSize = 'sm' | 'md' | 'lg';
|
|
1658
|
+
interface EmptyStateProps {
|
|
1659
|
+
/** Headline explaining why the surface is empty. */
|
|
1660
|
+
title: string;
|
|
1661
|
+
/** Supporting copy shown under the title. */
|
|
1662
|
+
description?: string;
|
|
1663
|
+
/** Illustration or icon rendered above the title. */
|
|
1664
|
+
icon?: ReactNode;
|
|
1665
|
+
/** Label for the primary call to action; the button is hidden without it. */
|
|
1666
|
+
actionLabel?: string;
|
|
1667
|
+
/** Fired when the primary call to action is pressed. */
|
|
1668
|
+
onAction?: () => void;
|
|
1669
|
+
/** Label for the secondary call to action; the button is hidden without it. */
|
|
1670
|
+
secondaryActionLabel?: string;
|
|
1671
|
+
/** Fired when the secondary call to action is pressed. */
|
|
1672
|
+
onSecondaryAction?: () => void;
|
|
1673
|
+
/** Vertical padding scale — use `sm` inside a table body, `lg` for a full page. */
|
|
1674
|
+
size?: EmptyStateSize;
|
|
1675
|
+
/** Custom content rendered below the actions. */
|
|
1676
|
+
children?: ReactNode;
|
|
1677
|
+
/** Additional CSS class, appended last. */
|
|
1678
|
+
className?: string;
|
|
1679
|
+
}
|
|
1680
|
+
/** Placeholder shown when a list, table, or panel has nothing to display. */
|
|
1681
|
+
declare const EmptyState: ({ title, description, icon, actionLabel, onAction, secondaryActionLabel, onSecondaryAction, size, children, className, }: EmptyStateProps) => React.JSX.Element;
|
|
1682
|
+
|
|
1683
|
+
interface FieldLayoutRenderProps {
|
|
1684
|
+
/** Id to put on the control, so the label points at it. */
|
|
1685
|
+
id: string;
|
|
1686
|
+
/** Value for the control's `aria-describedby`, or undefined when clean. */
|
|
1687
|
+
describedBy?: string;
|
|
1688
|
+
/** Whether an error message is showing. */
|
|
1689
|
+
hasError: boolean;
|
|
1690
|
+
}
|
|
1691
|
+
interface FieldLayoutProps {
|
|
1692
|
+
/** Renders the control. Receives the id and description wiring to apply. */
|
|
1693
|
+
children: (props: FieldLayoutRenderProps) => ReactNode;
|
|
1694
|
+
/** Field label. */
|
|
1695
|
+
label?: ReactNode;
|
|
1696
|
+
/** Whether the label sits above the control or beside it. */
|
|
1697
|
+
labelPosition?: 'top' | 'left';
|
|
1698
|
+
/** Hides the label without removing it from the layout's wiring. */
|
|
1699
|
+
showLabel?: boolean;
|
|
1700
|
+
/** Marks the field required, adding an asterisk to the label. */
|
|
1701
|
+
required?: boolean;
|
|
1702
|
+
/** Greys the field and hides the asterisk and icons. */
|
|
1703
|
+
disabled?: boolean;
|
|
1704
|
+
/** Explanatory text shown from an info icon beside the label. */
|
|
1705
|
+
tooltip?: string;
|
|
1706
|
+
/** Validation message shown beneath the control. */
|
|
1707
|
+
error?: string;
|
|
1708
|
+
/** Hint shown beneath the control, under any error. */
|
|
1709
|
+
note?: ReactNode;
|
|
1710
|
+
/** Decoration inside the leading edge of the control. */
|
|
1711
|
+
leftIcon?: ReactNode;
|
|
1712
|
+
/** Decoration inside the trailing edge of the control. */
|
|
1713
|
+
rightIcon?: ReactNode;
|
|
1714
|
+
/** Additional CSS class for the wrapper. */
|
|
1715
|
+
className?: string;
|
|
1716
|
+
}
|
|
1717
|
+
/**
|
|
1718
|
+
* The chrome around a form control: label, required marker, tooltip, the
|
|
1719
|
+
* icons that sit inside the field, and the error and hint beneath it.
|
|
1720
|
+
*
|
|
1721
|
+
* It owns none of the input's behaviour. The control is supplied as a render
|
|
1722
|
+
* prop and handed the generated id and `aria-describedby`, so any input —
|
|
1723
|
+
* native, third-party, or form-library bound — can sit inside it while keeping
|
|
1724
|
+
* the label and error correctly associated.
|
|
1725
|
+
*/
|
|
1726
|
+
declare const FieldLayout: React__default.FC<FieldLayoutProps>;
|
|
1727
|
+
|
|
1728
|
+
/** Document types a travel workflow usually accepts. */
|
|
1729
|
+
declare const DOCUMENT_FILE_EXTENSIONS: string[];
|
|
1730
|
+
interface FileUploadButtonProps {
|
|
1731
|
+
/** Text on the button, and the accessible name of the file input. */
|
|
1732
|
+
label?: string;
|
|
1733
|
+
/** Comma-separated list of accepted extensions or MIME types. */
|
|
1734
|
+
accept?: string;
|
|
1735
|
+
/** Allow choosing more than one file. */
|
|
1736
|
+
multiple?: boolean;
|
|
1737
|
+
/** Disables the control and removes the file input entirely. */
|
|
1738
|
+
disabled?: boolean;
|
|
1739
|
+
/** Shows the button's spinner, e.g. while an upload is in flight. */
|
|
1740
|
+
loading?: boolean;
|
|
1741
|
+
/** Visual style of the button. */
|
|
1742
|
+
variant?: ButtonVariant;
|
|
1743
|
+
/** Size of the button. */
|
|
1744
|
+
size?: ButtonSize;
|
|
1745
|
+
/** Icon shown after the label. */
|
|
1746
|
+
icon?: ReactNode;
|
|
1747
|
+
/** Called with the change event when files are chosen. */
|
|
1748
|
+
onSelect?: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
1749
|
+
/** Additional CSS class */
|
|
1750
|
+
className?: string;
|
|
1751
|
+
/** Extra attributes for the underlying file input. */
|
|
1752
|
+
inputProps?: Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'accept' | 'multiple' | 'onChange'>;
|
|
1753
|
+
}
|
|
1754
|
+
/**
|
|
1755
|
+
* A styled button that opens the file picker.
|
|
1756
|
+
*
|
|
1757
|
+
* The file input is the control: it sits transparently over the button and
|
|
1758
|
+
* carries the accessible name, so keyboard and screen-reader users get one
|
|
1759
|
+
* "choose file" control rather than a button and an input side by side. The
|
|
1760
|
+
* button underneath is decorative and hidden from assistive technology.
|
|
1761
|
+
*/
|
|
1762
|
+
declare const FileUploadButton: React__default.FC<FileUploadButtonProps>;
|
|
1763
|
+
|
|
559
1764
|
interface FilterOption {
|
|
560
1765
|
value: string;
|
|
561
1766
|
label: string;
|
|
@@ -575,6 +1780,8 @@ interface FilterChipProps {
|
|
|
575
1780
|
searchPlaceholder?: string;
|
|
576
1781
|
/** Info message to show at top of dropdown */
|
|
577
1782
|
infoMessage?: string;
|
|
1783
|
+
/** Disable the filter when a controlled host has no change handler */
|
|
1784
|
+
disabled?: boolean;
|
|
578
1785
|
/** Additional CSS class */
|
|
579
1786
|
className?: string;
|
|
580
1787
|
}
|
|
@@ -652,6 +1859,39 @@ interface FormStackProps {
|
|
|
652
1859
|
/** Standard vertical form-field rhythm used by Hub modal forms. */
|
|
653
1860
|
declare const FormStack: ({ children, gap, className }: FormStackProps) => React.JSX.Element;
|
|
654
1861
|
|
|
1862
|
+
/** A side of the tile, used to describe how it joins its neighbours. */
|
|
1863
|
+
type InfoTileEdge = 'left' | 'right' | 'top' | 'bottom';
|
|
1864
|
+
interface InfoTileProps {
|
|
1865
|
+
/** Figure the tile exists to show, e.g. a count or a date. */
|
|
1866
|
+
value: ReactNode;
|
|
1867
|
+
/** Short caption naming what the value measures. */
|
|
1868
|
+
label: ReactNode;
|
|
1869
|
+
/** Optional leading icon, rendered in its own bordered cell. */
|
|
1870
|
+
icon?: ReactNode;
|
|
1871
|
+
/**
|
|
1872
|
+
* Edges whose corners should be square rather than rounded. Use when the
|
|
1873
|
+
* tile sits against another so the pair reads as one control.
|
|
1874
|
+
*/
|
|
1875
|
+
square?: InfoTileEdge[];
|
|
1876
|
+
/**
|
|
1877
|
+
* Edges that should not draw a border. Give this to the second tile of a
|
|
1878
|
+
* pair so the two share a single divider instead of stacking two.
|
|
1879
|
+
*/
|
|
1880
|
+
borderless?: InfoTileEdge[];
|
|
1881
|
+
/** Additional CSS class */
|
|
1882
|
+
className?: string;
|
|
1883
|
+
/** Inline style overrides, merged after the computed tile styles. */
|
|
1884
|
+
style?: CSSProperties;
|
|
1885
|
+
}
|
|
1886
|
+
/**
|
|
1887
|
+
* Compact statistic tile pairing a figure with a caption and an optional icon.
|
|
1888
|
+
*
|
|
1889
|
+
* Tiles are designed to butt together into a strip — horizontally on narrow
|
|
1890
|
+
* screens, vertically on wide ones — by squaring the touching corners and
|
|
1891
|
+
* dropping the duplicated border.
|
|
1892
|
+
*/
|
|
1893
|
+
declare const InfoTile: React__default.FC<InfoTileProps>;
|
|
1894
|
+
|
|
655
1895
|
type ManifestView = 'passengers' | 'equipment';
|
|
656
1896
|
interface ManifestViewToggleProps {
|
|
657
1897
|
view: ManifestView;
|
|
@@ -663,6 +1903,64 @@ interface ManifestViewToggleProps {
|
|
|
663
1903
|
}
|
|
664
1904
|
declare const ManifestViewToggle: ({ view, onView, paxCount, eqCount, locked, className, }: ManifestViewToggleProps) => React.JSX.Element;
|
|
665
1905
|
|
|
1906
|
+
/** A user option that can be searched for and selected. */
|
|
1907
|
+
interface MultiUserSearchOption {
|
|
1908
|
+
/** Unique identifier for the user. */
|
|
1909
|
+
id: string | number;
|
|
1910
|
+
/** Display name. */
|
|
1911
|
+
name: string;
|
|
1912
|
+
/** Email address. */
|
|
1913
|
+
email: string;
|
|
1914
|
+
/** Optional job title or role. */
|
|
1915
|
+
title?: string;
|
|
1916
|
+
/** Whether this option is disabled. */
|
|
1917
|
+
disabled?: boolean;
|
|
1918
|
+
/** Reason the option is disabled, shown as tooltip. */
|
|
1919
|
+
disabledReason?: string;
|
|
1920
|
+
}
|
|
1921
|
+
interface MultiUserSearchProps {
|
|
1922
|
+
/** Label for the search input. */
|
|
1923
|
+
label?: string;
|
|
1924
|
+
/** Placeholder text. */
|
|
1925
|
+
placeholder?: string;
|
|
1926
|
+
/** Options to display when search matches or is empty. */
|
|
1927
|
+
options: MultiUserSearchOption[];
|
|
1928
|
+
/** Currently selected user IDs. */
|
|
1929
|
+
selectedIds: (string | number)[];
|
|
1930
|
+
/** Called when user types in the search input. Debounce in the host if needed. */
|
|
1931
|
+
onSearch?: (query: string) => void;
|
|
1932
|
+
/** Called when selection changes. */
|
|
1933
|
+
onSelectionChange: (ids: (string | number)[]) => void;
|
|
1934
|
+
/** Whether the host is loading search results. */
|
|
1935
|
+
loading?: boolean;
|
|
1936
|
+
/** Whether the component is disabled. */
|
|
1937
|
+
disabled?: boolean;
|
|
1938
|
+
/** Minimum characters before triggering search callback. */
|
|
1939
|
+
minSearchLength?: number;
|
|
1940
|
+
/** Helper text shown below the input. */
|
|
1941
|
+
helperText?: string;
|
|
1942
|
+
/** Error message to display. */
|
|
1943
|
+
error?: string;
|
|
1944
|
+
/** Additional CSS class. */
|
|
1945
|
+
className?: string;
|
|
1946
|
+
/** Test ID for automation. */
|
|
1947
|
+
'data-test'?: string;
|
|
1948
|
+
}
|
|
1949
|
+
/**
|
|
1950
|
+
* Multi-select user search with typeahead dropdown.
|
|
1951
|
+
*
|
|
1952
|
+
* Features:
|
|
1953
|
+
* - Single search input that populates a dropdown of matching users
|
|
1954
|
+
* - Multi-select via checkboxes or clicking options
|
|
1955
|
+
* - Selected users shown as dismissible badges above the input
|
|
1956
|
+
* - Keyboard navigation (arrow keys, enter, escape)
|
|
1957
|
+
* - Loading state while searching
|
|
1958
|
+
*/
|
|
1959
|
+
declare const MultiUserSearch: {
|
|
1960
|
+
({ label, placeholder, options, selectedIds, onSearch, onSelectionChange, loading, disabled, minSearchLength, helperText, error, className, "data-test": dataTest, }: MultiUserSearchProps): React__default.JSX.Element;
|
|
1961
|
+
displayName: string;
|
|
1962
|
+
};
|
|
1963
|
+
|
|
666
1964
|
type NavItemVariant = 'default' | 'pill';
|
|
667
1965
|
type NavItemSize = 'sm' | 'md' | 'lg';
|
|
668
1966
|
interface NavItemProps {
|
|
@@ -697,6 +1995,67 @@ interface NavItemProps {
|
|
|
697
1995
|
}
|
|
698
1996
|
declare const NavItem: React__default.FC<NavItemProps>;
|
|
699
1997
|
|
|
1998
|
+
interface PageHeaderProps {
|
|
1999
|
+
/** The page's heading. */
|
|
2000
|
+
title?: ReactNode;
|
|
2001
|
+
/** Smaller line above the title, naming the section the page sits in. */
|
|
2002
|
+
pretitle?: ReactNode;
|
|
2003
|
+
/** Content directly beneath the title — tabs, a summary line, filters. */
|
|
2004
|
+
after?: ReactNode;
|
|
2005
|
+
/**
|
|
2006
|
+
* Slot for a back control, rendered to the left of the title. Takes a node
|
|
2007
|
+
* so the host supplies its own router link and icon, keeping this component
|
|
2008
|
+
* independent of any router.
|
|
2009
|
+
*/
|
|
2010
|
+
back?: ReactNode;
|
|
2011
|
+
/** Additional CSS class */
|
|
2012
|
+
className?: string;
|
|
2013
|
+
}
|
|
2014
|
+
/**
|
|
2015
|
+
* Standard page heading: an optional back control, a pretitle, the title, and
|
|
2016
|
+
* a slot beneath for anything that belongs with it.
|
|
2017
|
+
*
|
|
2018
|
+
* The header keeps its height while `title` is empty and fades in once one
|
|
2019
|
+
* arrives, so pages do not jump as their data loads.
|
|
2020
|
+
*/
|
|
2021
|
+
declare const PageHeader: React__default.FC<PageHeaderProps>;
|
|
2022
|
+
|
|
2023
|
+
/** A rendered slot in the page list: either a page number or a truncation gap. */
|
|
2024
|
+
type PaginationItem = number | 'ellipsis';
|
|
2025
|
+
interface PaginationProps {
|
|
2026
|
+
/** Current page, 1-based. */
|
|
2027
|
+
page: number;
|
|
2028
|
+
/** Rows shown per page. */
|
|
2029
|
+
pageSize: number;
|
|
2030
|
+
/** Total number of rows across every page. */
|
|
2031
|
+
totalItems: number;
|
|
2032
|
+
/** Number of page buttons rendered either side of the current page. */
|
|
2033
|
+
siblingCount?: number;
|
|
2034
|
+
/** Page-size choices; the size selector is hidden when this is empty. */
|
|
2035
|
+
pageSizeOptions?: number[];
|
|
2036
|
+
/** Hides the "Showing x–y of z" summary. */
|
|
2037
|
+
hideSummary?: boolean;
|
|
2038
|
+
/** Noun used in the summary text, e.g. "quotes". */
|
|
2039
|
+
itemLabel?: string;
|
|
2040
|
+
/** Accessible label for the surrounding nav landmark. */
|
|
2041
|
+
ariaLabel?: string;
|
|
2042
|
+
/** Fired with the new 1-based page number. */
|
|
2043
|
+
onPageChange?: (page: number) => void;
|
|
2044
|
+
/** Fired with the new page size; the size selector is hidden when omitted. */
|
|
2045
|
+
onPageSizeChange?: (pageSize: number) => void;
|
|
2046
|
+
/** Additional CSS class, appended last. */
|
|
2047
|
+
className?: string;
|
|
2048
|
+
}
|
|
2049
|
+
/**
|
|
2050
|
+
* Builds the page-button list for a paginator, collapsing long runs into
|
|
2051
|
+
* `'ellipsis'` markers. First and last pages are always present.
|
|
2052
|
+
*/
|
|
2053
|
+
declare const buildPaginationItems: (page: number, pageCount: number, siblingCount?: number) => PaginationItem[];
|
|
2054
|
+
/** Page count for a given total/size, never below 1 so the control always renders a page. */
|
|
2055
|
+
declare const getPageCount: (totalItems: number, pageSize: number) => number;
|
|
2056
|
+
/** Paginator for list and table screens: page buttons, prev/next, and an optional page-size selector. */
|
|
2057
|
+
declare const Pagination: ({ page, pageSize, totalItems, siblingCount, pageSizeOptions, hideSummary, itemLabel, ariaLabel, onPageChange, onPageSizeChange, className, }: PaginationProps) => React.JSX.Element;
|
|
2058
|
+
|
|
700
2059
|
type ProgressSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
701
2060
|
type ProgressVariant = 'primary' | 'success' | 'warning' | 'error';
|
|
702
2061
|
interface ProgressBarProps {
|
|
@@ -726,6 +2085,11 @@ interface ProgressCircleProps {
|
|
|
726
2085
|
showLabel?: boolean;
|
|
727
2086
|
/** Additional CSS class */
|
|
728
2087
|
className?: string;
|
|
2088
|
+
/**
|
|
2089
|
+
* Explicit diameter in pixels, for indicators smaller or larger than the
|
|
2090
|
+
* named ramp. The stroke scales with it.
|
|
2091
|
+
*/
|
|
2092
|
+
diameter?: number;
|
|
729
2093
|
}
|
|
730
2094
|
declare const ProgressBar: React__default.FC<ProgressBarProps>;
|
|
731
2095
|
declare const ProgressCircle: React__default.FC<ProgressCircleProps>;
|
|
@@ -927,6 +2291,8 @@ interface ServiceToggleListProps {
|
|
|
927
2291
|
onClick?: (key: string) => void;
|
|
928
2292
|
/** Additional CSS class */
|
|
929
2293
|
className?: string;
|
|
2294
|
+
/** Disable every service toggle */
|
|
2295
|
+
disabled?: boolean;
|
|
930
2296
|
}
|
|
931
2297
|
/**
|
|
932
2298
|
* ServiceToggle component for a single service item.
|
|
@@ -953,6 +2319,25 @@ interface SupplierTypeToggleProps {
|
|
|
953
2319
|
}
|
|
954
2320
|
declare const SupplierTypeToggle: ({ value, defaultValue, onChange, disabled, className, }: SupplierTypeToggleProps) => React.JSX.Element;
|
|
955
2321
|
|
|
2322
|
+
interface TeamCalendarHeaderProps {
|
|
2323
|
+
/** Short team abbreviation, e.g. "MBB". Always shown. */
|
|
2324
|
+
teamCode: string;
|
|
2325
|
+
/** Full team name, shown alongside the code once there is room for it. */
|
|
2326
|
+
teamFullName?: string;
|
|
2327
|
+
/** Content beneath the identity — trip counts, a next-trip date, actions. */
|
|
2328
|
+
children?: ReactNode;
|
|
2329
|
+
/** Additional CSS class */
|
|
2330
|
+
className?: string;
|
|
2331
|
+
}
|
|
2332
|
+
/**
|
|
2333
|
+
* The heading of a team's column in the travel calendar: the team's code, its
|
|
2334
|
+
* full name where space allows, and whatever summary belongs underneath.
|
|
2335
|
+
*
|
|
2336
|
+
* It sticks to the top of its column so the team stays identifiable while the
|
|
2337
|
+
* schedule scrolls.
|
|
2338
|
+
*/
|
|
2339
|
+
declare const TeamCalendarHeader: React__default.FC<TeamCalendarHeaderProps>;
|
|
2340
|
+
|
|
956
2341
|
interface TeamHeaderProps {
|
|
957
2342
|
/** Fully composed title. Overrides teamCode/teamName when supplied. */
|
|
958
2343
|
title?: ReactNode;
|
|
@@ -1066,6 +2451,229 @@ declare const GroundSegment: React__default.FC<GroundSegmentProps>;
|
|
|
1066
2451
|
*/
|
|
1067
2452
|
declare const HotelSegment: React__default.FC<HotelSegmentProps>;
|
|
1068
2453
|
|
|
2454
|
+
/** One flown leg the carrier is pricing. */
|
|
2455
|
+
interface AcmiLeg {
|
|
2456
|
+
/** Stable id used as the React key and by the remove handler. */
|
|
2457
|
+
id: string;
|
|
2458
|
+
/** Departure airport, ICAO or IATA. */
|
|
2459
|
+
origin: string;
|
|
2460
|
+
/** Arrival airport, ICAO or IATA. */
|
|
2461
|
+
destination: string;
|
|
2462
|
+
/** Flight time in decimal hours; blank until it is calculated. */
|
|
2463
|
+
flightTime: string;
|
|
2464
|
+
/** Whether this is a passenger-carrying revenue leg or aircraft positioning. */
|
|
2465
|
+
type?: 'live' | 'ferry';
|
|
2466
|
+
}
|
|
2467
|
+
/** Aircraft a carrier can be quoted on, with the seat cap the calculator validates against. */
|
|
2468
|
+
interface AcmiAircraftOption {
|
|
2469
|
+
/** Value stored on the quote. */
|
|
2470
|
+
value: string;
|
|
2471
|
+
/** Label shown in the picker. */
|
|
2472
|
+
label: string;
|
|
2473
|
+
/** Maximum passengers the airframe is certified for. */
|
|
2474
|
+
seats: number;
|
|
2475
|
+
/** Optional carrier value used to keep the aircraft picker contract-valid. */
|
|
2476
|
+
carrier?: string;
|
|
2477
|
+
}
|
|
2478
|
+
/** Everything the calculator needs to price a trip. */
|
|
2479
|
+
interface AcmiQuoteInputs {
|
|
2480
|
+
/** Operating carrier. */
|
|
2481
|
+
carrier: string;
|
|
2482
|
+
/** Aircraft value from `aircraftOptions`. */
|
|
2483
|
+
aircraft: string;
|
|
2484
|
+
/** Travel party size. */
|
|
2485
|
+
passengers: string;
|
|
2486
|
+
/** Fuel price in dollars per gallon. */
|
|
2487
|
+
fuelPrice: string;
|
|
2488
|
+
/** Markup percentage applied to the operating subtotal. */
|
|
2489
|
+
markupPercent: string;
|
|
2490
|
+
/** Nights the crew stays away from base. */
|
|
2491
|
+
crewNights: string;
|
|
2492
|
+
/** Month of travel, 1–12, used for historic winds aloft. */
|
|
2493
|
+
tripMonth: string;
|
|
2494
|
+
/** Itinerary legs, in order. Automatic positioning mode restricts these to live legs. */
|
|
2495
|
+
legs: AcmiLeg[];
|
|
2496
|
+
}
|
|
2497
|
+
/** Controls whether positioning legs come from the user or the host pricing engine. */
|
|
2498
|
+
type AcmiPositioningMode = 'automatic' | 'explicit';
|
|
2499
|
+
/** The priced result the calculator renders once a quote is produced. */
|
|
2500
|
+
interface AcmiQuoteResult {
|
|
2501
|
+
/** Sum of every leg's operating cost before markup. */
|
|
2502
|
+
operatingSubtotal: number;
|
|
2503
|
+
/** Dollar value of the markup percentage. */
|
|
2504
|
+
markupAmount: number;
|
|
2505
|
+
/** Flat trip insurance. */
|
|
2506
|
+
insuranceAmount: number;
|
|
2507
|
+
/** Operating subtotal + markup + insurance. */
|
|
2508
|
+
preTaxTotal: number;
|
|
2509
|
+
/** Federal excise tax. */
|
|
2510
|
+
fet: number;
|
|
2511
|
+
/** Per-segment government fees. */
|
|
2512
|
+
segmentFees: number;
|
|
2513
|
+
/** What the carrier would quote the school. */
|
|
2514
|
+
finalPrice: number;
|
|
2515
|
+
/** Authoritative priced legs returned by the host pricing service. */
|
|
2516
|
+
legs?: Array<{
|
|
2517
|
+
id: string;
|
|
2518
|
+
origin: string;
|
|
2519
|
+
destination: string;
|
|
2520
|
+
type: 'live' | 'ferry';
|
|
2521
|
+
blockHours: number;
|
|
2522
|
+
total: number;
|
|
2523
|
+
}>;
|
|
2524
|
+
/** Backend pricing rules worth making explicit to a reviewer. */
|
|
2525
|
+
pricingDetails?: {
|
|
2526
|
+
/** Total backend-priced ferry block hours. */
|
|
2527
|
+
ferryBlockHours: number;
|
|
2528
|
+
/** Contractual minimum used for each estimated ferry leg, when applicable. */
|
|
2529
|
+
ferryMinimumHours?: number;
|
|
2530
|
+
/** Contractual fuel buffer as a decimal fraction, for example 0.1 for 10%. */
|
|
2531
|
+
fuelBufferPercent: number;
|
|
2532
|
+
/** Dollar value added by the fuel buffer. */
|
|
2533
|
+
fuelBufferAmount: number;
|
|
2534
|
+
/** Trip-level security screening charge. */
|
|
2535
|
+
screeningAmount: number;
|
|
2536
|
+
};
|
|
2537
|
+
}
|
|
2538
|
+
interface AcmiQuoteCalculatorProps {
|
|
2539
|
+
/** Carriers the user may quote for. */
|
|
2540
|
+
carrierOptions?: {
|
|
2541
|
+
value: string;
|
|
2542
|
+
label: string;
|
|
2543
|
+
}[];
|
|
2544
|
+
/** Aircraft available to the selected carrier. */
|
|
2545
|
+
aircraftOptions?: AcmiAircraftOption[];
|
|
2546
|
+
/** Starting values; the calculator owns the state from there. */
|
|
2547
|
+
defaultInputs?: Partial<AcmiQuoteInputs>;
|
|
2548
|
+
/**
|
|
2549
|
+
* `automatic` accepts live legs only because the host adds positioning.
|
|
2550
|
+
* `explicit` lets the user enter every live and ferry leg.
|
|
2551
|
+
*/
|
|
2552
|
+
positioningMode?: AcmiPositioningMode;
|
|
2553
|
+
/** Flat per-trip insurance, quoted in the locked field. */
|
|
2554
|
+
insuranceFlat?: number;
|
|
2555
|
+
/** Fired with the complete inputs when Calculate Quote is pressed and the form is valid. */
|
|
2556
|
+
onCalculate?: (inputs: AcmiQuoteInputs) => void;
|
|
2557
|
+
/** Fired whenever an input changes so a host can invalidate a stale async result. */
|
|
2558
|
+
onInputsChange?: (inputs: AcmiQuoteInputs) => void;
|
|
2559
|
+
/** Priced result to display; omit to keep the results panel hidden. */
|
|
2560
|
+
result?: AcmiQuoteResult;
|
|
2561
|
+
/** Fired when Submit for Approval is pressed; the button is hidden without a `result`. */
|
|
2562
|
+
onSubmitForApproval?: (inputs: AcmiQuoteInputs) => void;
|
|
2563
|
+
/** BCP 47 locale used for currency formatting. */
|
|
2564
|
+
locale?: string;
|
|
2565
|
+
/** Shows a pending state while the host pricing service is working. */
|
|
2566
|
+
calculating?: boolean;
|
|
2567
|
+
/** Host pricing failure rendered alongside form validation. */
|
|
2568
|
+
calculationError?: string;
|
|
2569
|
+
/** Show the legacy historic-winds input when a pricing service supports it. */
|
|
2570
|
+
showTripMonth?: boolean;
|
|
2571
|
+
/** Additional CSS class, appended last. */
|
|
2572
|
+
className?: string;
|
|
2573
|
+
}
|
|
2574
|
+
/** Carriers STM currently holds ACMI agreements with. */
|
|
2575
|
+
declare const ACMI_CARRIER_OPTIONS: {
|
|
2576
|
+
value: string;
|
|
2577
|
+
label: string;
|
|
2578
|
+
}[];
|
|
2579
|
+
/** Aircraft the ACMI carriers operate, with certified seat counts. */
|
|
2580
|
+
declare const ACMI_AIRCRAFT_OPTIONS: AcmiAircraftOption[];
|
|
2581
|
+
/** Months of travel, used to pick the historic winds-aloft profile. */
|
|
2582
|
+
declare const TRIP_MONTH_OPTIONS: {
|
|
2583
|
+
value: string;
|
|
2584
|
+
label: string;
|
|
2585
|
+
}[];
|
|
2586
|
+
/** Flat trip insurance STM adds to every ACMI quote. */
|
|
2587
|
+
declare const ACMI_INSURANCE_FLAT = 350;
|
|
2588
|
+
/**
|
|
2589
|
+
* ACMI pricing calculator. ACMI carriers reach this from the bid response form, where
|
|
2590
|
+
* it is their default tab: they price the trip here rather than typing a total blind.
|
|
2591
|
+
*/
|
|
2592
|
+
declare const AcmiQuoteCalculator: {
|
|
2593
|
+
({ carrierOptions, aircraftOptions, defaultInputs, positioningMode, insuranceFlat, onCalculate, onInputsChange, result, onSubmitForApproval, locale, calculating, calculationError, showTripMonth, className, }: AcmiQuoteCalculatorProps): React.JSX.Element;
|
|
2594
|
+
displayName: string;
|
|
2595
|
+
};
|
|
2596
|
+
|
|
2597
|
+
type GroupTravelRequestSource = 'agent' | 'client';
|
|
2598
|
+
type GroupTravelDueField = 'confirmation' | 'deposit' | 'utilization' | 'names' | 'ticketing';
|
|
2599
|
+
interface GroupTravelDueStatus {
|
|
2600
|
+
/** ISO (yyyy-mm-dd) due date for this milestone, if one has been set. */
|
|
2601
|
+
dueDate?: string;
|
|
2602
|
+
/** Marked complete regardless of date. */
|
|
2603
|
+
complete: boolean;
|
|
2604
|
+
}
|
|
2605
|
+
interface GroupTravelPnr {
|
|
2606
|
+
id: string | number;
|
|
2607
|
+
/** Airline record locator, or the placeholder used before one has been issued. */
|
|
2608
|
+
recordLocator: string;
|
|
2609
|
+
complete: boolean;
|
|
2610
|
+
}
|
|
2611
|
+
interface AgentGroupTravelRequest {
|
|
2612
|
+
id: number;
|
|
2613
|
+
/** School/account this request belongs to — rows are grouped by this value. */
|
|
2614
|
+
accountName: string;
|
|
2615
|
+
/** Whether an agent or the client themselves submitted the request. */
|
|
2616
|
+
source: GroupTravelRequestSource;
|
|
2617
|
+
masterTripId?: number;
|
|
2618
|
+
/** Shown as a tooltip and highlights the ID when present. */
|
|
2619
|
+
notes?: string;
|
|
2620
|
+
/** ISO (yyyy-mm-dd) trip start date. */
|
|
2621
|
+
startDate: string;
|
|
2622
|
+
name: string;
|
|
2623
|
+
sport: string;
|
|
2624
|
+
/** Sport code used for the sport filter, e.g. "MBB". */
|
|
2625
|
+
sportCode: string;
|
|
2626
|
+
carrier?: string;
|
|
2627
|
+
air: boolean;
|
|
2628
|
+
charter: boolean;
|
|
2629
|
+
car: boolean;
|
|
2630
|
+
motorcoach: boolean;
|
|
2631
|
+
hotel: boolean;
|
|
2632
|
+
groupHotel: boolean;
|
|
2633
|
+
routing: string;
|
|
2634
|
+
/** ISO (yyyy-mm-dd) date submitted. */
|
|
2635
|
+
submittedDate?: string;
|
|
2636
|
+
/** ISO (yyyy-mm-dd) date the quote was sent. */
|
|
2637
|
+
quoteSentDate?: string;
|
|
2638
|
+
confirmation: GroupTravelDueStatus;
|
|
2639
|
+
deposit: GroupTravelDueStatus;
|
|
2640
|
+
utilization: GroupTravelDueStatus;
|
|
2641
|
+
names: GroupTravelDueStatus;
|
|
2642
|
+
ticketing: GroupTravelDueStatus;
|
|
2643
|
+
/** One entry per PNR in this group; more than one renders as an expandable "Multi" group. */
|
|
2644
|
+
pnrs: GroupTravelPnr[];
|
|
2645
|
+
}
|
|
2646
|
+
interface AgentGroupTravelRequestSportOption {
|
|
2647
|
+
code: string;
|
|
2648
|
+
label: string;
|
|
2649
|
+
}
|
|
2650
|
+
interface AgentGroupTravelRequestViewOption {
|
|
2651
|
+
id: string;
|
|
2652
|
+
label: string;
|
|
2653
|
+
/** Account names included in this saved view. */
|
|
2654
|
+
accountNames: string[];
|
|
2655
|
+
}
|
|
2656
|
+
interface AgentGroupTravelRequestsTableProps {
|
|
2657
|
+
requests: AgentGroupTravelRequest[];
|
|
2658
|
+
sports?: AgentGroupTravelRequestSportOption[];
|
|
2659
|
+
/** Saved account-group "views"; the view filter is hidden when none are supplied. */
|
|
2660
|
+
views?: AgentGroupTravelRequestViewOption[];
|
|
2661
|
+
/** ISO (yyyy-mm-dd) reference date for due-status coloring. Defaults to today; pass a fixed value in stories/tests for determinism. */
|
|
2662
|
+
today?: string;
|
|
2663
|
+
onOpenRequest?: (id: number) => void;
|
|
2664
|
+
onViewMasterTrip?: (masterTripId: number) => void;
|
|
2665
|
+
onDeleteRequest?: (id: number) => void;
|
|
2666
|
+
onCopyPnr?: (recordLocator: string) => void;
|
|
2667
|
+
onToggleDueStatus?: (id: number, field: GroupTravelDueField) => void;
|
|
2668
|
+
onSubmittedDateChange?: (id: number, value: string) => void;
|
|
2669
|
+
onQuoteSentDateChange?: (id: number, value: string) => void;
|
|
2670
|
+
className?: string;
|
|
2671
|
+
}
|
|
2672
|
+
/** Computes the short "A/C/B/H/GH/CA" travel-type codes shown in the Type column. */
|
|
2673
|
+
declare const computeTravelTypeCodes: (request: Pick<AgentGroupTravelRequest, "air" | "charter" | "car" | "motorcoach" | "hotel" | "groupHotel">) => string[];
|
|
2674
|
+
/** Hub's agent-facing list of open Group Travel Requests, grouped by school, one row per PNR group. */
|
|
2675
|
+
declare const AgentGroupTravelRequestsTable: ({ requests, sports, views, today, onOpenRequest, onViewMasterTrip, onDeleteRequest, onCopyPnr, onToggleDueStatus, onSubmittedDateChange, onQuoteSentDateChange, className, }: AgentGroupTravelRequestsTableProps) => React.JSX.Element;
|
|
2676
|
+
|
|
1069
2677
|
interface SidenavItem {
|
|
1070
2678
|
/** Unique key for the item */
|
|
1071
2679
|
key: string;
|
|
@@ -1184,6 +2792,73 @@ interface CardFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
1184
2792
|
}
|
|
1185
2793
|
declare const CardFooter: React__default.FC<CardFooterProps>;
|
|
1186
2794
|
|
|
2795
|
+
/** The three notifications the Charter Sourcing backend currently sends. */
|
|
2796
|
+
type CharterSourcingEmailVariant = 'admin-review' | 'submitter-approved' | 'submitter-updated';
|
|
2797
|
+
/** One origin/destination pair included in the email's route summary. */
|
|
2798
|
+
interface CharterSourcingEmailLeg {
|
|
2799
|
+
origin: string;
|
|
2800
|
+
destination: string;
|
|
2801
|
+
}
|
|
2802
|
+
/** Contract-backed quote facts shared by all three notifications. */
|
|
2803
|
+
interface CharterSourcingEmailQuote {
|
|
2804
|
+
requestId: string;
|
|
2805
|
+
carrier: string;
|
|
2806
|
+
aircraft: string;
|
|
2807
|
+
passengers: string | number;
|
|
2808
|
+
legs: readonly CharterSourcingEmailLeg[];
|
|
2809
|
+
outboundDate: string;
|
|
2810
|
+
returnDate: string;
|
|
2811
|
+
submittedBy: string;
|
|
2812
|
+
/**
|
|
2813
|
+
* Preformatted amount without an assumed currency symbol. The backend only
|
|
2814
|
+
* supplies this when a legacy `flightQuote.lineItems` snapshot exists.
|
|
2815
|
+
*/
|
|
2816
|
+
totalCost?: string;
|
|
2817
|
+
}
|
|
2818
|
+
/** One scalar value changed by an administrator. */
|
|
2819
|
+
interface CharterSourcingEmailChange {
|
|
2820
|
+
label: string;
|
|
2821
|
+
previousValue: string;
|
|
2822
|
+
updatedValue: string;
|
|
2823
|
+
}
|
|
2824
|
+
/** Hub only sends an update notification when at least one field changed. */
|
|
2825
|
+
type CharterSourcingEmailChanges = readonly [
|
|
2826
|
+
CharterSourcingEmailChange,
|
|
2827
|
+
...CharterSourcingEmailChange[]
|
|
2828
|
+
];
|
|
2829
|
+
interface CharterSourcingEmailPreviewBaseProps {
|
|
2830
|
+
quote: CharterSourcingEmailQuote;
|
|
2831
|
+
/**
|
|
2832
|
+
* Original production recipient shown when a non-production environment
|
|
2833
|
+
* diverts the message to its configured test inbox.
|
|
2834
|
+
*/
|
|
2835
|
+
testServerOriginalRecipient?: string;
|
|
2836
|
+
className?: string;
|
|
2837
|
+
}
|
|
2838
|
+
/** Props mirror the three real sends; an update must contain at least one change. */
|
|
2839
|
+
type CharterSourcingEmailPreviewProps = CharterSourcingEmailPreviewBaseProps & ({
|
|
2840
|
+
variant: 'admin-review' | 'submitter-approved';
|
|
2841
|
+
changes?: never;
|
|
2842
|
+
} | {
|
|
2843
|
+
variant: 'submitter-updated';
|
|
2844
|
+
changes: CharterSourcingEmailChanges;
|
|
2845
|
+
});
|
|
2846
|
+
/** The exact comma-separated route label used by the backend subject and body. */
|
|
2847
|
+
declare const getCharterSourcingEmailRoute: (quote: CharterSourcingEmailQuote) => string;
|
|
2848
|
+
/** Build the production-aligned subject line for a preview. */
|
|
2849
|
+
declare const getCharterSourcingEmailSubject: (variant: CharterSourcingEmailVariant, quote: CharterSourcingEmailQuote) => string;
|
|
2850
|
+
/**
|
|
2851
|
+
* Table-based visual contract for Charter Sourcing's Postmark notifications.
|
|
2852
|
+
*
|
|
2853
|
+
* Layout tables use `role="presentation"`; quote facts and changed values stay
|
|
2854
|
+
* semantic data tables. Django must still render its own HTML and plain-text
|
|
2855
|
+
* templates, but it should preserve this table topology and literal styling.
|
|
2856
|
+
*/
|
|
2857
|
+
declare const CharterSourcingEmailPreview: {
|
|
2858
|
+
(props: CharterSourcingEmailPreviewProps): React.JSX.Element;
|
|
2859
|
+
displayName: string;
|
|
2860
|
+
};
|
|
2861
|
+
|
|
1187
2862
|
interface Contact {
|
|
1188
2863
|
/** Contact ID */
|
|
1189
2864
|
id: string | number;
|
|
@@ -1240,7 +2915,12 @@ interface DrawerProps {
|
|
|
1240
2915
|
/** Position of the drawer */
|
|
1241
2916
|
position?: DrawerPosition;
|
|
1242
2917
|
/** Size of the drawer */
|
|
1243
|
-
|
|
2918
|
+
/**
|
|
2919
|
+
* One of the named sizes, or an explicit CSS length (e.g. '300px', '50%')
|
|
2920
|
+
* for panels the ramp does not carry. The length applies to width for a
|
|
2921
|
+
* left/right drawer and to height for top/bottom.
|
|
2922
|
+
*/
|
|
2923
|
+
size?: DrawerSize | (string & {});
|
|
1244
2924
|
/** Drawer content */
|
|
1245
2925
|
children: React__default.ReactNode;
|
|
1246
2926
|
/** Whether clicking backdrop closes drawer */
|
|
@@ -1298,6 +2978,8 @@ interface TravelDueDateItem {
|
|
|
1298
2978
|
tripId: string;
|
|
1299
2979
|
tripName: string;
|
|
1300
2980
|
masterTripGUID?: string;
|
|
2981
|
+
/** Set by the API when the due date has passed; used by `overdueOnly`. */
|
|
2982
|
+
pastdue?: boolean;
|
|
1301
2983
|
}
|
|
1302
2984
|
type GroupedTravelDueDates = Record<string, TravelDueDateItem[]>;
|
|
1303
2985
|
interface DueDatesDrawerProps {
|
|
@@ -1305,14 +2987,110 @@ interface DueDatesDrawerProps {
|
|
|
1305
2987
|
dueDates: GroupedTravelDueDates;
|
|
1306
2988
|
selectedDate?: string | null;
|
|
1307
2989
|
selectedTrip?: string | null;
|
|
2990
|
+
/**
|
|
2991
|
+
* NG-702/NG-811: opened via the Overdue Actions card — only past-due,
|
|
2992
|
+
* incomplete items count toward that card's number, so the panel must match
|
|
2993
|
+
* rather than showing every due date.
|
|
2994
|
+
*/
|
|
2995
|
+
overdueOnly?: boolean;
|
|
1308
2996
|
onClose: () => void;
|
|
1309
2997
|
onToggle?: (item: TravelDueDateItem) => void;
|
|
1310
2998
|
onTaskClick?: (masterTripGUID: string) => void;
|
|
1311
2999
|
className?: string;
|
|
1312
3000
|
}
|
|
1313
3001
|
declare const isTravelDueDateCompleted: (item: Pick<TravelDueDateItem, "status" | "completeddatetime">) => boolean;
|
|
3002
|
+
declare const isTravelDueDateOverdue: (item: Pick<TravelDueDateItem, "completeddatetime" | "pastdue">) => boolean;
|
|
1314
3003
|
/** Hub's searchable, status-aware due-dates drawer. */
|
|
1315
|
-
declare const DueDatesDrawer: ({ isOpen, dueDates, selectedDate, selectedTrip, onClose, onToggle, onTaskClick, className }: DueDatesDrawerProps) => React.JSX.Element;
|
|
3004
|
+
declare const DueDatesDrawer: ({ isOpen, dueDates, selectedDate, selectedTrip, overdueOnly, onClose, onToggle, onTaskClick, className }: DueDatesDrawerProps) => React.JSX.Element;
|
|
3005
|
+
|
|
3006
|
+
/** A row is any record; columns address it by key. */
|
|
3007
|
+
type GridRow = Record<string, unknown>;
|
|
3008
|
+
interface GridCellRenderProps<R> {
|
|
3009
|
+
/** The whole row, for renderers that need more than one field. */
|
|
3010
|
+
row: R;
|
|
3011
|
+
/** Position in the sorted data, for numbering or alternating output. */
|
|
3012
|
+
rowIndex: number;
|
|
3013
|
+
/** The column's key. */
|
|
3014
|
+
name?: string;
|
|
3015
|
+
}
|
|
3016
|
+
interface GridColumn<R = GridRow> {
|
|
3017
|
+
/** Key of the field this column shows. */
|
|
3018
|
+
name?: string;
|
|
3019
|
+
/** Column heading. */
|
|
3020
|
+
label?: ReactNode;
|
|
3021
|
+
/** Renders the heading from the column key, for headings that need state. */
|
|
3022
|
+
labelAs?: (props: {
|
|
3023
|
+
name?: string;
|
|
3024
|
+
}) => ReactNode;
|
|
3025
|
+
/** Icon shown before the heading. */
|
|
3026
|
+
icon?: ReactNode;
|
|
3027
|
+
/** Renders the cell instead of printing the field. */
|
|
3028
|
+
as?: (props: GridCellRenderProps<R>) => ReactNode;
|
|
3029
|
+
/** Formats the field for display. Return falsy to show an en dash. */
|
|
3030
|
+
format?: (value: never, row: R) => ReactNode;
|
|
3031
|
+
/** Whether the column can be sorted by clicking its heading. */
|
|
3032
|
+
sortable?: boolean;
|
|
3033
|
+
/** Orders two rows. Defaults to comparing the field directly. */
|
|
3034
|
+
sortComparator?: (a: R, b: R) => number;
|
|
3035
|
+
/** Class applied to the column's cells. */
|
|
3036
|
+
className?: string;
|
|
3037
|
+
/** Class applied to the column's heading. */
|
|
3038
|
+
labelClassName?: string;
|
|
3039
|
+
}
|
|
3040
|
+
interface GridTotalRow {
|
|
3041
|
+
/** Label shown in the first column of the total row. */
|
|
3042
|
+
label: string;
|
|
3043
|
+
/** Column whose values are summed. */
|
|
3044
|
+
columnName: string;
|
|
3045
|
+
}
|
|
3046
|
+
interface GridTableProps<R = GridRow> {
|
|
3047
|
+
/** Column definitions, left to right. */
|
|
3048
|
+
columns: GridColumn<R>[];
|
|
3049
|
+
/** Rows to show. */
|
|
3050
|
+
data: R[];
|
|
3051
|
+
/**
|
|
3052
|
+
* CSS grid template for the columns. Defaults to equal fractions, one per
|
|
3053
|
+
* column.
|
|
3054
|
+
*/
|
|
3055
|
+
gridTemplateColumns?: string;
|
|
3056
|
+
/** Field whose value keys each row. Falls back to `id`, then the index. */
|
|
3057
|
+
rowKey?: string;
|
|
3058
|
+
/** Content above and below the heading row. */
|
|
3059
|
+
header?: {
|
|
3060
|
+
above?: ReactNode;
|
|
3061
|
+
below?: ReactNode;
|
|
3062
|
+
};
|
|
3063
|
+
/** Column sorted on first render. */
|
|
3064
|
+
initialSortColumn?: string;
|
|
3065
|
+
/** Whether that initial sort is ascending. */
|
|
3066
|
+
initialSortAscending?: boolean;
|
|
3067
|
+
/** Tie-breaker applied when the chosen column compares equal. */
|
|
3068
|
+
secondarySortComparator?: (a: R, b: R) => number;
|
|
3069
|
+
/** Draws a rule between rows. */
|
|
3070
|
+
bordered?: boolean;
|
|
3071
|
+
/** Shown in place of the rows when there are none. */
|
|
3072
|
+
emptyMessage?: ReactNode;
|
|
3073
|
+
/** Sums a column into a sticky footer row. */
|
|
3074
|
+
totalRow?: GridTotalRow;
|
|
3075
|
+
/** Additional CSS class */
|
|
3076
|
+
className?: string;
|
|
3077
|
+
}
|
|
3078
|
+
/**
|
|
3079
|
+
* A data table laid out with CSS grid rather than table markup, so a row can
|
|
3080
|
+
* be an arbitrary composition rather than a fixed set of cells.
|
|
3081
|
+
*
|
|
3082
|
+
* It reflows on narrow screens: the heading row is hidden and each row becomes
|
|
3083
|
+
* a card whose cells carry their own labels, which keeps wide datasets legible
|
|
3084
|
+
* on a phone.
|
|
3085
|
+
*
|
|
3086
|
+
* Sorting is held internally — click a sortable heading to sort by it, click
|
|
3087
|
+
* again to reverse — and an optional total row sums a column into a sticky
|
|
3088
|
+
* footer.
|
|
3089
|
+
*/
|
|
3090
|
+
declare function GridTable<R = GridRow>({ columns, data, gridTemplateColumns, rowKey, header, initialSortColumn, initialSortAscending, secondarySortComparator, bordered, emptyMessage, totalRow, className, }: GridTableProps<R>): React__default.JSX.Element;
|
|
3091
|
+
declare namespace GridTable {
|
|
3092
|
+
var displayName: string;
|
|
3093
|
+
}
|
|
1316
3094
|
|
|
1317
3095
|
interface HubNavigationItem {
|
|
1318
3096
|
key: string;
|
|
@@ -1321,8 +3099,18 @@ interface HubNavigationItem {
|
|
|
1321
3099
|
icon: ReactNode;
|
|
1322
3100
|
}
|
|
1323
3101
|
declare const HUB_INDIVIDUAL_TRAVEL_ITEM: HubNavigationItem;
|
|
3102
|
+
/** Canonical navigation identity for the carrier-facing STM Charters portal. */
|
|
3103
|
+
declare const HUB_STM_CHARTERS_ITEM: HubNavigationItem;
|
|
1324
3104
|
declare const HUB_NAV_ITEMS: HubNavigationItem[];
|
|
1325
3105
|
declare const HUB_ADMIN_ITEM: HubNavigationItem;
|
|
3106
|
+
declare const HUB_AGENTS_ITEM: HubNavigationItem;
|
|
3107
|
+
/**
|
|
3108
|
+
* Sourcing sits with the admin-gated footer items rather than in `HUB_NAV_ITEMS`: the
|
|
3109
|
+
* review queue is an ACMI-admin surface, so carriers and school users must not see it.
|
|
3110
|
+
*/
|
|
3111
|
+
declare const HUB_SOURCING_ITEM: HubNavigationItem;
|
|
3112
|
+
/** Off-fleet quote review is an admin surface too, so it is gated the same way. */
|
|
3113
|
+
declare const HUB_OFF_FLEET_ITEM: HubNavigationItem;
|
|
1326
3114
|
interface HubAppShellActions {
|
|
1327
3115
|
isMobileNavOpen: boolean;
|
|
1328
3116
|
toggleMobileNav: () => void;
|
|
@@ -1330,8 +3118,19 @@ interface HubAppShellActions {
|
|
|
1330
3118
|
interface HubAppShellProps {
|
|
1331
3119
|
children: ReactNode;
|
|
1332
3120
|
navItems?: HubNavigationItem[];
|
|
1333
|
-
|
|
3121
|
+
/** Set to `null` when Individual Travel is not available to the current user or account. */
|
|
3122
|
+
individualTravelItem?: HubNavigationItem | null;
|
|
3123
|
+
agentsItem?: HubNavigationItem;
|
|
3124
|
+
/** ACMI sourcing entry, rendered in the footer and shown only when `isAdmin` is true. */
|
|
3125
|
+
sourcingItem?: HubNavigationItem;
|
|
3126
|
+
/** Off-fleet quote review entry, rendered in the footer and gated on `isAdmin`. */
|
|
3127
|
+
offFleetItem?: HubNavigationItem;
|
|
1334
3128
|
adminItem?: HubNavigationItem;
|
|
3129
|
+
/**
|
|
3130
|
+
* Authoritative footer navigation. When provided (including an empty array),
|
|
3131
|
+
* it replaces the default admin-gated Sourcing, Off-Fleet, Agents, and Administration items.
|
|
3132
|
+
*/
|
|
3133
|
+
footerNavItems?: HubNavigationItem[];
|
|
1335
3134
|
activeNavKey?: string;
|
|
1336
3135
|
onNavigate?: (item: HubNavigationItem) => void;
|
|
1337
3136
|
onLogoClick?: () => void;
|
|
@@ -1347,13 +3146,237 @@ interface HubAppShellProps {
|
|
|
1347
3146
|
loading?: boolean;
|
|
1348
3147
|
contentDisabled?: boolean;
|
|
1349
3148
|
showContent?: boolean;
|
|
3149
|
+
/** Logo for expanded sidebar state */
|
|
1350
3150
|
logo?: ReactNode;
|
|
3151
|
+
/** Logo for collapsed sidebar state (icon only, no text) */
|
|
3152
|
+
collapsedLogo?: ReactNode;
|
|
1351
3153
|
defaultExpanded?: boolean;
|
|
1352
3154
|
betaLabel?: string;
|
|
1353
3155
|
className?: string;
|
|
1354
3156
|
}
|
|
1355
3157
|
/** The shared application navigation and content shell used by Hub and its Storybook pages. */
|
|
1356
|
-
declare const HubAppShell: ({ children, navItems, individualTravelItem, adminItem, activeNavKey, onNavigate, onLogoClick, onLegacyPortal, accountSelector, renderTopbarActions, renderMobileExtras, mobileFooter, profileMenu, userInitials, isAdmin, navigationDisabled, loading, contentDisabled, showContent, logo, defaultExpanded, betaLabel, className, }: HubAppShellProps) => React.JSX.Element;
|
|
3158
|
+
declare const HubAppShell: ({ children, navItems, individualTravelItem, agentsItem, sourcingItem, offFleetItem, adminItem, footerNavItems, activeNavKey, onNavigate, onLogoClick, onLegacyPortal, accountSelector, renderTopbarActions, renderMobileExtras, mobileFooter, profileMenu, userInitials, isAdmin, navigationDisabled, loading, contentDisabled, showContent, logo, collapsedLogo, defaultExpanded, betaLabel, className, }: HubAppShellProps) => React.JSX.Element;
|
|
3159
|
+
|
|
3160
|
+
/**
|
|
3161
|
+
* Parses an `YYYY-MM-DD` itinerary date into a *local* calendar date.
|
|
3162
|
+
*
|
|
3163
|
+
* `new Date('2026-11-12')` is parsed as UTC midnight, which renders as the
|
|
3164
|
+
* previous day everywhere west of Greenwich. Travel dates are calendar dates,
|
|
3165
|
+
* never instants, so they are built component-wise instead.
|
|
3166
|
+
*/
|
|
3167
|
+
declare const parseItineraryDate: (isoDate: string) => Date | null;
|
|
3168
|
+
/** Formats an itinerary date as `Thu Nov 12` (short) or `Thursday, November 12, 2026` (long). */
|
|
3169
|
+
declare const formatItineraryDate: (isoDate: string, style?: "short" | "long") => string;
|
|
3170
|
+
/** Formats a trip's span the way the itinerary header shows it, collapsing repeated month/year. */
|
|
3171
|
+
declare const formatItineraryDateRange: (startIso: string, endIso: string) => string;
|
|
3172
|
+
/** Formats a segment or trip amount. Falls back to a plain number if the currency code is unknown. */
|
|
3173
|
+
declare const formatItineraryMoney: (amount: number, currency?: string) => string;
|
|
3174
|
+
/**
|
|
3175
|
+
* Booking state of a single segment.
|
|
3176
|
+
*
|
|
3177
|
+
* Mirrors the statuses the Portal itinerary prints today — `Holding Confirmed`
|
|
3178
|
+
* is shown to travelers as `Confirmed` — plus the ticketing states Hub's
|
|
3179
|
+
* individual travel list already uses.
|
|
3180
|
+
*/
|
|
3181
|
+
type ItinerarySegmentStatus = 'confirmed' | 'ticketed' | 'not-ticketed' | 'itinerary' | 'pending' | 'cancelled';
|
|
3182
|
+
interface ItinerarySegmentBase {
|
|
3183
|
+
/** Stable identifier for the segment (used as a React key and in callbacks) */
|
|
3184
|
+
id: string;
|
|
3185
|
+
/** Booking state shown in the card header */
|
|
3186
|
+
status: ItinerarySegmentStatus;
|
|
3187
|
+
/** Supplier confirmation / record locator for this segment */
|
|
3188
|
+
confirmation?: string;
|
|
3189
|
+
/** Name the reservation is held under */
|
|
3190
|
+
reservationName?: string;
|
|
3191
|
+
/** Segment cost, used by the itinerary cost summary */
|
|
3192
|
+
cost?: number;
|
|
3193
|
+
/** ISO 4217 currency code for `cost` */
|
|
3194
|
+
currency?: string;
|
|
3195
|
+
}
|
|
3196
|
+
/** A flight. Fields follow Hub's `CommercialFlight` plus what the Portal itinerary prints. */
|
|
3197
|
+
interface ItineraryAirSegment extends ItinerarySegmentBase {
|
|
3198
|
+
type: 'air';
|
|
3199
|
+
/** Marketing carrier name, e.g. `Delta Air Lines` */
|
|
3200
|
+
carrier: string;
|
|
3201
|
+
/** IATA carrier code, e.g. `DL` — drives the carrier-coloured service icon */
|
|
3202
|
+
carrierCode?: string;
|
|
3203
|
+
/** Flight number without the carrier code, e.g. `1274` */
|
|
3204
|
+
flightNumber: string;
|
|
3205
|
+
/** Operating carrier when the flight is a codeshare */
|
|
3206
|
+
operatedBy?: string;
|
|
3207
|
+
/** Departure airport code, e.g. `DSM` */
|
|
3208
|
+
departureAirport: string;
|
|
3209
|
+
/** Departure city, e.g. `Des Moines, IA` */
|
|
3210
|
+
departureCity: string;
|
|
3211
|
+
/** Departure date as `YYYY-MM-DD` */
|
|
3212
|
+
departureDate: string;
|
|
3213
|
+
/** Departure clock time as shown to the traveler, e.g. `6:15 AM` */
|
|
3214
|
+
departureTime: string;
|
|
3215
|
+
/** Arrival airport code, e.g. `LAS` */
|
|
3216
|
+
arrivalAirport: string;
|
|
3217
|
+
/** Arrival city, e.g. `Las Vegas, NV` */
|
|
3218
|
+
arrivalCity: string;
|
|
3219
|
+
/** Arrival date as `YYYY-MM-DD`; when it differs from `departureDate` the card flags the day change */
|
|
3220
|
+
arrivalDate?: string;
|
|
3221
|
+
/** Arrival clock time, e.g. `9:57 AM` */
|
|
3222
|
+
arrivalTime: string;
|
|
3223
|
+
/** Elapsed flight time, e.g. `3h 42m` */
|
|
3224
|
+
elapsed?: string;
|
|
3225
|
+
/** Assigned seats */
|
|
3226
|
+
seats?: string[];
|
|
3227
|
+
/** Cabin / class of service, e.g. `Main Cabin` */
|
|
3228
|
+
cabin?: string;
|
|
3229
|
+
/** Shows the online check-in action (the Portal reveals it the day before departure) */
|
|
3230
|
+
checkInAvailable?: boolean;
|
|
3231
|
+
/** Live flight status note, e.g. `In air — scheduled to arrive on time` */
|
|
3232
|
+
flightStatus?: string;
|
|
3233
|
+
}
|
|
3234
|
+
/** A rental car. Fields follow Hub's `VehicleSegment` / `Vehicle` plus the Portal's car block. */
|
|
3235
|
+
interface ItineraryCarSegment extends ItinerarySegmentBase {
|
|
3236
|
+
type: 'car';
|
|
3237
|
+
/** Rental chain name, e.g. `Enterprise Rent-A-Car` */
|
|
3238
|
+
vendor: string;
|
|
3239
|
+
/** Vendor code, e.g. `ZE` */
|
|
3240
|
+
vendorCode?: string;
|
|
3241
|
+
/** Car type description, e.g. `Intermediate SUV` */
|
|
3242
|
+
carType: string;
|
|
3243
|
+
/** Car type code, e.g. `IFAR` */
|
|
3244
|
+
carTypeCode?: string;
|
|
3245
|
+
/** Number of cars on the reservation */
|
|
3246
|
+
carCount?: number;
|
|
3247
|
+
/** Pick-up date as `YYYY-MM-DD` */
|
|
3248
|
+
pickupDate: string;
|
|
3249
|
+
/** Pick-up clock time, e.g. `10:30 AM` */
|
|
3250
|
+
pickupTime?: string;
|
|
3251
|
+
/** Pick-up location, e.g. `Harry Reid Intl Airport (LAS)` */
|
|
3252
|
+
pickupLocation: string;
|
|
3253
|
+
/** Drop-off date as `YYYY-MM-DD` */
|
|
3254
|
+
dropoffDate: string;
|
|
3255
|
+
/** Drop-off clock time */
|
|
3256
|
+
dropoffTime?: string;
|
|
3257
|
+
/** Drop-off location */
|
|
3258
|
+
dropoffLocation: string;
|
|
3259
|
+
/** Rental counter phone number */
|
|
3260
|
+
phone?: string;
|
|
3261
|
+
/** Quoted rate per day */
|
|
3262
|
+
dailyRate?: number;
|
|
3263
|
+
}
|
|
3264
|
+
/** A hotel stay. Fields follow Hub's `AgencyHotelSegment` plus the Portal's hotel block. */
|
|
3265
|
+
interface ItineraryHotelSegment extends ItinerarySegmentBase {
|
|
3266
|
+
type: 'hotel';
|
|
3267
|
+
/** Property name, e.g. `Renaissance Las Vegas` */
|
|
3268
|
+
hotelName: string;
|
|
3269
|
+
/** Hotel chain, e.g. `Marriott` */
|
|
3270
|
+
chain?: string;
|
|
3271
|
+
/** Chain code, e.g. `MC` */
|
|
3272
|
+
chainCode?: string;
|
|
3273
|
+
/** Check-in date as `YYYY-MM-DD` */
|
|
3274
|
+
checkInDate: string;
|
|
3275
|
+
/** Check-in time, e.g. `4:00 PM` */
|
|
3276
|
+
checkInTime?: string;
|
|
3277
|
+
/** Check-out date as `YYYY-MM-DD` */
|
|
3278
|
+
checkOutDate: string;
|
|
3279
|
+
/** Check-out time, e.g. `11:00 AM` */
|
|
3280
|
+
checkOutTime?: string;
|
|
3281
|
+
/** Number of nights */
|
|
3282
|
+
nights?: number;
|
|
3283
|
+
/** Number of rooms held */
|
|
3284
|
+
rooms?: number;
|
|
3285
|
+
/** Room type, e.g. `2 Queen Beds` */
|
|
3286
|
+
roomType?: string;
|
|
3287
|
+
/** Nightly room rate */
|
|
3288
|
+
nightlyRate?: number;
|
|
3289
|
+
/** Street address lines */
|
|
3290
|
+
address?: string[];
|
|
3291
|
+
/** City, state and postal code line */
|
|
3292
|
+
cityLine?: string;
|
|
3293
|
+
/** Property phone number */
|
|
3294
|
+
phone?: string;
|
|
3295
|
+
}
|
|
3296
|
+
/** Any segment an itinerary can show. */
|
|
3297
|
+
type ItinerarySegment = ItineraryAirSegment | ItineraryCarSegment | ItineraryHotelSegment;
|
|
3298
|
+
/** The date a segment belongs to on the itinerary — departure, pick-up or check-in. */
|
|
3299
|
+
declare const getSegmentDate: (segment: ItinerarySegment) => string;
|
|
3300
|
+
/** Minutes since midnight for a `6:15 AM` clock time, or null when it cannot be read. */
|
|
3301
|
+
declare const parseClockTime: (time?: string) => number | null;
|
|
3302
|
+
/**
|
|
3303
|
+
* When a segment starts on its itinerary day, used to read a day in time order.
|
|
3304
|
+
*
|
|
3305
|
+
* Null when the booking carries no time — a hotel with no stated check-in, say.
|
|
3306
|
+
*/
|
|
3307
|
+
declare const getSegmentStartMinutes: (segment: ItinerarySegment) => number | null;
|
|
3308
|
+
/** Traveler-facing name for a segment, used as the card heading and in the day summary. */
|
|
3309
|
+
declare const getSegmentTitle: (segment: ItinerarySegment) => string;
|
|
3310
|
+
interface ItinerarySegmentCardProps {
|
|
3311
|
+
/** The air, car or hotel booking to render */
|
|
3312
|
+
segment: ItinerarySegment;
|
|
3313
|
+
/** Heading level for the card title, so pages keep a sensible outline */
|
|
3314
|
+
headingLevel?: 2 | 3 | 4;
|
|
3315
|
+
/** Called when a traveler starts online check-in for a flight */
|
|
3316
|
+
onCheckIn?: (segment: ItineraryAirSegment) => void;
|
|
3317
|
+
/** Extra content rendered below the detail list (notes, agent remarks) */
|
|
3318
|
+
footer?: ReactNode;
|
|
3319
|
+
/** Additional CSS class */
|
|
3320
|
+
className?: string;
|
|
3321
|
+
}
|
|
3322
|
+
/**
|
|
3323
|
+
* ItinerarySegmentCard — one booked leg of a traveler's itinerary.
|
|
3324
|
+
*
|
|
3325
|
+
* Renders a flight, rental car or hotel stay with the same header, endpoint
|
|
3326
|
+
* pair and labelled detail list, so a traveler reads every segment the same
|
|
3327
|
+
* way. The business fields match what the legacy Portal itinerary prints.
|
|
3328
|
+
*/
|
|
3329
|
+
declare const ItinerarySegmentCard: {
|
|
3330
|
+
({ segment, headingLevel, onCheckIn, footer, className, }: ItinerarySegmentCardProps): React.JSX.Element;
|
|
3331
|
+
displayName: string;
|
|
3332
|
+
};
|
|
3333
|
+
|
|
3334
|
+
/** One travel day: the date and every segment starting on it. */
|
|
3335
|
+
interface ItineraryDay {
|
|
3336
|
+
/** Day the segments start on, as `YYYY-MM-DD` */
|
|
3337
|
+
date: string;
|
|
3338
|
+
/** Segments starting on this day, in the order they should be read */
|
|
3339
|
+
segments: ItinerarySegment[];
|
|
3340
|
+
}
|
|
3341
|
+
/**
|
|
3342
|
+
* Groups segments into travel days, ordered by date, and orders each day by time.
|
|
3343
|
+
*
|
|
3344
|
+
* Air, car and hotel bookings arrive from three separate systems, so a
|
|
3345
|
+
* traveler-facing itinerary has to interleave them rather than list them service
|
|
3346
|
+
* by service — and it cannot assume the caller merged them in any useful order.
|
|
3347
|
+
* Sorting here is what puts the 6:15 AM flight above the 4:00 PM hotel check-in,
|
|
3348
|
+
* and keeps the legs of a connection in the order they are flown.
|
|
3349
|
+
*
|
|
3350
|
+
* Day grouping keys off the plain `YYYY-MM-DD` string, so ordering never depends
|
|
3351
|
+
* on the reader's time zone. Segments with no stated time sort last, keeping the
|
|
3352
|
+
* order they were given.
|
|
3353
|
+
*/
|
|
3354
|
+
declare const groupSegmentsByDay: (segments: ItinerarySegment[]) => ItineraryDay[];
|
|
3355
|
+
interface ItineraryTimelineProps {
|
|
3356
|
+
/** Every air, car and hotel booking on the trip, in any order */
|
|
3357
|
+
segments: ItinerarySegment[];
|
|
3358
|
+
/** Shows a loading placeholder instead of the timeline */
|
|
3359
|
+
loading?: boolean;
|
|
3360
|
+
/** Message shown in place of the timeline when the itinerary could not be loaded */
|
|
3361
|
+
error?: ReactNode;
|
|
3362
|
+
/** Message shown when the trip has no booked segments yet */
|
|
3363
|
+
emptyMessage?: ReactNode;
|
|
3364
|
+
/** Called when a traveler starts online check-in for a flight */
|
|
3365
|
+
onCheckIn?: (segment: ItineraryAirSegment) => void;
|
|
3366
|
+
/** Additional CSS class */
|
|
3367
|
+
className?: string;
|
|
3368
|
+
}
|
|
3369
|
+
/**
|
|
3370
|
+
* ItineraryTimeline — a trip's bookings read as a day-by-day itinerary.
|
|
3371
|
+
*
|
|
3372
|
+
* Interleaves air, car and hotel segments under a heading for each travel day,
|
|
3373
|
+
* and covers the loading, error and nothing-booked-yet states a real trip
|
|
3374
|
+
* passes through.
|
|
3375
|
+
*/
|
|
3376
|
+
declare const ItineraryTimeline: {
|
|
3377
|
+
({ segments, loading, error, emptyMessage, onCheckIn, className, }: ItineraryTimelineProps): React.JSX.Element;
|
|
3378
|
+
displayName: string;
|
|
3379
|
+
};
|
|
1357
3380
|
|
|
1358
3381
|
interface MembershipProgram {
|
|
1359
3382
|
/** Unique identifier */
|
|
@@ -1566,6 +3589,130 @@ declare const PreferencesPanel: {
|
|
|
1566
3589
|
displayName: string;
|
|
1567
3590
|
};
|
|
1568
3591
|
|
|
3592
|
+
/**
|
|
3593
|
+
* The fourteen ACMI quote line-item categories, matching the categories the ACMI
|
|
3594
|
+
* calculator and the Salesforce QuoteLineItem records use. Keeping the vocabulary
|
|
3595
|
+
* identical means a quote can move between the calculator, the queue, and Salesforce
|
|
3596
|
+
* without anything being re-mapped by hand.
|
|
3597
|
+
*/
|
|
3598
|
+
type SourcingCostCategory = 'acmi-block-hours' | 'fuel' | 'ground-handling' | 'landing-fees' | 'security-screening' | 'catering' | 'additional-catering' | 'crew-hotac' | 'other' | 'segment-fee' | 'fet' | 'xy-immig' | 'pfcs' | 'insurance-provision';
|
|
3599
|
+
interface SourcingCostLineItem {
|
|
3600
|
+
id: string;
|
|
3601
|
+
/** Short name for the charge, e.g. "Block hours — outbound". */
|
|
3602
|
+
label: string;
|
|
3603
|
+
/** Optional supporting detail rendered under the label. */
|
|
3604
|
+
description?: string;
|
|
3605
|
+
/** Grouping band; defaults to "other". */
|
|
3606
|
+
category?: SourcingCostCategory;
|
|
3607
|
+
/** How many units the carrier is charging for. */
|
|
3608
|
+
quantity: number;
|
|
3609
|
+
/** Unit the quantity is measured in, e.g. "block hours", "legs", "pax". */
|
|
3610
|
+
unit: string;
|
|
3611
|
+
/** Price per unit in major currency units (dollars, not cents). */
|
|
3612
|
+
unitPrice: number;
|
|
3613
|
+
}
|
|
3614
|
+
interface SourcingCostAdjustment {
|
|
3615
|
+
id: string;
|
|
3616
|
+
/** Label for the adjustment, e.g. "Repeat-charter discount". */
|
|
3617
|
+
label: string;
|
|
3618
|
+
/** Signed amount in major currency units — negative for a discount. */
|
|
3619
|
+
amount: number;
|
|
3620
|
+
/** Optional supporting detail rendered under the label. */
|
|
3621
|
+
note?: string;
|
|
3622
|
+
}
|
|
3623
|
+
interface QuoteCostTotals {
|
|
3624
|
+
/** Sum of every line item. */
|
|
3625
|
+
subtotal: number;
|
|
3626
|
+
/** Signed sum of every adjustment. */
|
|
3627
|
+
adjustmentTotal: number;
|
|
3628
|
+
/** Subtotal plus adjustments — the number the carrier is asking for. */
|
|
3629
|
+
total: number;
|
|
3630
|
+
}
|
|
3631
|
+
interface QuoteCostBreakdownProps {
|
|
3632
|
+
/** Charges that make up the quote. */
|
|
3633
|
+
lineItems: SourcingCostLineItem[];
|
|
3634
|
+
/** Discounts and surcharges applied after the subtotal. */
|
|
3635
|
+
adjustments?: SourcingCostAdjustment[];
|
|
3636
|
+
/** ISO 4217 currency code used for formatting. */
|
|
3637
|
+
currency?: string;
|
|
3638
|
+
/** BCP 47 locale used for formatting; pinned so stories and tests stay deterministic. */
|
|
3639
|
+
locale?: string;
|
|
3640
|
+
/** Heading rendered above the table; pass an empty string to hide it. */
|
|
3641
|
+
title?: string;
|
|
3642
|
+
/** Traveller count — supplying it adds a per-passenger figure under the total. */
|
|
3643
|
+
passengerCount?: number;
|
|
3644
|
+
/** Additional CSS class, appended last. */
|
|
3645
|
+
className?: string;
|
|
3646
|
+
}
|
|
3647
|
+
/** Display label for each ACMI line-item category, in quote order. */
|
|
3648
|
+
declare const SOURCING_COST_CATEGORY_LABELS: Record<SourcingCostCategory, string>;
|
|
3649
|
+
/** Every ACMI line-item category, in the order a quote lists them. */
|
|
3650
|
+
declare const SOURCING_COST_CATEGORIES: SourcingCostCategory[];
|
|
3651
|
+
/** Extended amount for a single line: quantity multiplied by unit price. */
|
|
3652
|
+
declare const computeLineItemTotal: (lineItem: SourcingCostLineItem) => number;
|
|
3653
|
+
/** Subtotal, signed adjustment total, and grand total for a quote. */
|
|
3654
|
+
declare const computeQuoteTotals: (lineItems: SourcingCostLineItem[], adjustments?: SourcingCostAdjustment[]) => QuoteCostTotals;
|
|
3655
|
+
/** Itemised cost table for a carrier's sourcing quote: line items, adjustments, and the total. */
|
|
3656
|
+
declare const QuoteCostBreakdown: ({ lineItems, adjustments, currency, locale, title, passengerCount, className, }: QuoteCostBreakdownProps) => React.JSX.Element;
|
|
3657
|
+
|
|
3658
|
+
/** One field the admin changed while reviewing, kept as a before/after pair. */
|
|
3659
|
+
interface QuoteFieldChange {
|
|
3660
|
+
/** Machine name of the field, used as the React key. */
|
|
3661
|
+
field: string;
|
|
3662
|
+
/** Human label shown in the summary, e.g. "Passengers". */
|
|
3663
|
+
label: string;
|
|
3664
|
+
/** Value as the carrier submitted it, already formatted for display. */
|
|
3665
|
+
from: string;
|
|
3666
|
+
/** Value the admin is submitting instead, already formatted for display. */
|
|
3667
|
+
to: string;
|
|
3668
|
+
}
|
|
3669
|
+
interface QuoteReviewActionsProps {
|
|
3670
|
+
/** Quote the decision applies to; echoed back through both callbacks. */
|
|
3671
|
+
quoteId: string;
|
|
3672
|
+
/** Carrier name, used in the confirmation copy. */
|
|
3673
|
+
carrier: string;
|
|
3674
|
+
/** Quoted total, pre-formatted for display in the confirmation copy. */
|
|
3675
|
+
formattedTotal?: string;
|
|
3676
|
+
/**
|
|
3677
|
+
* Edits the admin has made to the quote. They are listed old → new in the approve
|
|
3678
|
+
* confirmation. Hub sends the submitter a separate update email when an admin edit
|
|
3679
|
+
* is persisted; the later approval email does not repeat the change list.
|
|
3680
|
+
*/
|
|
3681
|
+
changes?: QuoteFieldChange[];
|
|
3682
|
+
/** Locks both actions — use once a decision has already been recorded. */
|
|
3683
|
+
disabled?: boolean;
|
|
3684
|
+
/**
|
|
3685
|
+
* Why the actions are unavailable. Rendered under the buttons whenever `disabled`
|
|
3686
|
+
* is true, so an expensive action is never greyed out without saying why.
|
|
3687
|
+
*/
|
|
3688
|
+
disabledReason?: string;
|
|
3689
|
+
/** Shows the in-progress state on the approve confirmation. */
|
|
3690
|
+
loading?: boolean;
|
|
3691
|
+
/** Label for the approve button. */
|
|
3692
|
+
approveLabel?: string;
|
|
3693
|
+
/** Label for the reject button. */
|
|
3694
|
+
rejectLabel?: string;
|
|
3695
|
+
/** One-click reasons offered in the reject drawer. */
|
|
3696
|
+
rejectReasons?: string[];
|
|
3697
|
+
/** Fired once the admin confirms, with every edit the host must persist before approval. */
|
|
3698
|
+
onApprove?: (quoteId: string, changes: QuoteFieldChange[]) => void;
|
|
3699
|
+
/** Fired with the note explaining the rejection. */
|
|
3700
|
+
onReject?: (quoteId: string, note: string) => void;
|
|
3701
|
+
/** Additional CSS class, appended last. */
|
|
3702
|
+
className?: string;
|
|
3703
|
+
}
|
|
3704
|
+
/**
|
|
3705
|
+
* Decision surface for a sourcing quote. The admin corrects and records the quote in place,
|
|
3706
|
+
* so there is no request-changes round trip:
|
|
3707
|
+
* approving routes through a confirmation listing every edit old → new, because that
|
|
3708
|
+
* list is persisted before approval. Rejecting opens a drawer for the stored review note;
|
|
3709
|
+
* the current Hub workflow does not send a rejection email.
|
|
3710
|
+
*/
|
|
3711
|
+
declare const QuoteReviewActions: {
|
|
3712
|
+
({ quoteId, carrier, formattedTotal, changes, disabled, disabledReason, loading, approveLabel, rejectLabel, rejectReasons, onApprove, onReject, className, }: QuoteReviewActionsProps): React.JSX.Element;
|
|
3713
|
+
displayName: string;
|
|
3714
|
+
};
|
|
3715
|
+
|
|
1569
3716
|
interface SummaryItem {
|
|
1570
3717
|
/** Label for the field */
|
|
1571
3718
|
label: string;
|
|
@@ -1606,6 +3753,8 @@ interface RequestSummaryProps {
|
|
|
1606
3753
|
className?: string;
|
|
1607
3754
|
/** Title for the summary panel */
|
|
1608
3755
|
title?: string;
|
|
3756
|
+
/** Stable selector for integration and browser tests */
|
|
3757
|
+
dataTest?: string;
|
|
1609
3758
|
}
|
|
1610
3759
|
/**
|
|
1611
3760
|
* SummarySection component for a group of related summary items.
|
|
@@ -1636,9 +3785,9 @@ interface RequestFormHeaderProps {
|
|
|
1636
3785
|
}
|
|
1637
3786
|
interface RequestFormFooterProps {
|
|
1638
3787
|
/** Callback for cancel/previous button */
|
|
1639
|
-
onPrevious
|
|
3788
|
+
onPrevious?: () => void;
|
|
1640
3789
|
/** Callback for next/submit button */
|
|
1641
|
-
onNext
|
|
3790
|
+
onNext?: () => void;
|
|
1642
3791
|
/** Whether on first page */
|
|
1643
3792
|
isFirstPage?: boolean;
|
|
1644
3793
|
/** Whether on last page */
|
|
@@ -1649,6 +3798,10 @@ interface RequestFormFooterProps {
|
|
|
1649
3798
|
previousText?: string;
|
|
1650
3799
|
/** Custom next button text */
|
|
1651
3800
|
nextText?: string;
|
|
3801
|
+
/** Test hook for the previous button */
|
|
3802
|
+
previousButtonDataTest?: string;
|
|
3803
|
+
/** Test hook for the next button */
|
|
3804
|
+
nextButtonDataTest?: string;
|
|
1652
3805
|
/** Additional CSS class */
|
|
1653
3806
|
className?: string;
|
|
1654
3807
|
}
|
|
@@ -1669,19 +3822,228 @@ interface RequestFormLayoutProps {
|
|
|
1669
3822
|
showSidebarOnMobile?: boolean;
|
|
1670
3823
|
}
|
|
1671
3824
|
/**
|
|
1672
|
-
* RequestFormHeader component for the fixed header in travel request forms.
|
|
1673
|
-
*/
|
|
1674
|
-
declare const RequestFormHeader: React__default.FC<RequestFormHeaderProps>;
|
|
1675
|
-
/**
|
|
1676
|
-
* RequestFormFooter component for the fixed footer with navigation buttons.
|
|
1677
|
-
*/
|
|
1678
|
-
declare const RequestFormFooter: React__default.FC<RequestFormFooterProps>;
|
|
1679
|
-
/**
|
|
1680
|
-
* RequestFormLayout organism for travel request forms.
|
|
1681
|
-
* Provides a three-column layout with fixed header and footer.
|
|
3825
|
+
* RequestFormHeader component for the fixed header in travel request forms.
|
|
3826
|
+
*/
|
|
3827
|
+
declare const RequestFormHeader: React__default.FC<RequestFormHeaderProps>;
|
|
3828
|
+
/**
|
|
3829
|
+
* RequestFormFooter component for the fixed footer with navigation buttons.
|
|
3830
|
+
*/
|
|
3831
|
+
declare const RequestFormFooter: React__default.FC<RequestFormFooterProps>;
|
|
3832
|
+
/**
|
|
3833
|
+
* RequestFormLayout organism for travel request forms.
|
|
3834
|
+
* Provides a three-column layout with fixed header and footer.
|
|
3835
|
+
*/
|
|
3836
|
+
declare const RequestFormLayout: React__default.FC<RequestFormLayoutProps>;
|
|
3837
|
+
|
|
3838
|
+
/** The six Regular Season bid queues, in the order the legacy portal lists them. */
|
|
3839
|
+
type RegularSeasonBidType = 'Open' | 'Closed' | 'Awarded' | 'Declined' | 'Obsolete' | 'No Bid';
|
|
3840
|
+
/** Where a single trip's bid sits, mirroring the legacy `BidStatus` column. */
|
|
3841
|
+
type CharterTripBidStatus = 'Not Submitted' | 'Submitted' | 'No Bid';
|
|
3842
|
+
interface CharterTripBid {
|
|
3843
|
+
/** Salesforce Trip GUID — the row key and the value posted on submit. */
|
|
3844
|
+
tripGuid: string;
|
|
3845
|
+
/** Trip name shown in the expanded trip row. */
|
|
3846
|
+
tripName: string;
|
|
3847
|
+
/** Bid type for this trip, e.g. "Round Trip". */
|
|
3848
|
+
bidType: string;
|
|
3849
|
+
/** Travel party size requested by the team. */
|
|
3850
|
+
travelPartySize: number;
|
|
3851
|
+
/** Route summary as stored, e.g. "GSO-JAX-GSO". */
|
|
3852
|
+
route: string;
|
|
3853
|
+
/** Departure date, ISO `yyyy-mm-dd`. */
|
|
3854
|
+
departureDate: string;
|
|
3855
|
+
/** Bid expiration date, ISO `yyyy-mm-dd`. */
|
|
3856
|
+
expirationDate: string;
|
|
3857
|
+
/** Whether this carrier has already responded to this trip. */
|
|
3858
|
+
bidStatus: CharterTripBidStatus;
|
|
3859
|
+
/** Carrier union GUID posted alongside the trip on submit. */
|
|
3860
|
+
carrierUnionGuid: string;
|
|
3861
|
+
}
|
|
3862
|
+
interface CharterFlightProgramBid {
|
|
3863
|
+
/** Salesforce Flight Program GUID — the row key and the value posted on submit. */
|
|
3864
|
+
flightProgramGuid: string;
|
|
3865
|
+
/** Flight program name, the legacy `BidName` column. */
|
|
3866
|
+
bidName: string;
|
|
3867
|
+
/** True when the school's TMC implementation phase is "P7: Active". */
|
|
3868
|
+
isTmcClient: boolean;
|
|
3869
|
+
/** Sport for the program, used by the Sport filter. */
|
|
3870
|
+
sport: string;
|
|
3871
|
+
/** Season for the program, used by the Season filter. */
|
|
3872
|
+
season: string;
|
|
3873
|
+
/** Program year. */
|
|
3874
|
+
year: number;
|
|
3875
|
+
/** Bid due date, ISO `yyyy-mm-dd`. */
|
|
3876
|
+
dueDate: string;
|
|
3877
|
+
/** Team name, used by the Team filter. */
|
|
3878
|
+
team: string;
|
|
3879
|
+
/** Carrier union GUID posted alongside the program on submit. */
|
|
3880
|
+
carrierUnionGuid: string;
|
|
3881
|
+
/** Trips inside this flight program, shown when the row is expanded. */
|
|
3882
|
+
trips: CharterTripBid[];
|
|
3883
|
+
}
|
|
3884
|
+
/** Which level of the accordion a bid action came from. */
|
|
3885
|
+
type CharterBidLevel = 'flightProgram' | 'tripProgram';
|
|
3886
|
+
/** Identifies the row an action was fired from, at either level of the accordion. */
|
|
3887
|
+
interface CharterBidTarget {
|
|
3888
|
+
/** Whether the action came from a flight-program row or a trip row. */
|
|
3889
|
+
level: CharterBidLevel;
|
|
3890
|
+
/** Flight program GUID — always present. */
|
|
3891
|
+
flightProgramGuid: string;
|
|
3892
|
+
/** Trip GUID — present only for `tripProgram` actions. */
|
|
3893
|
+
tripGuid?: string;
|
|
3894
|
+
/** Carrier union GUID for the row. */
|
|
3895
|
+
carrierUnionGuid: string;
|
|
3896
|
+
}
|
|
3897
|
+
interface RegularSeasonBidsTableProps {
|
|
3898
|
+
/** Flight programs to list, each with its trips. */
|
|
3899
|
+
bids: CharterFlightProgramBid[];
|
|
3900
|
+
/** Which queue is being shown — drives the header text and the action columns. */
|
|
3901
|
+
bidType?: RegularSeasonBidType;
|
|
3902
|
+
/** ACMI carriers may re-bid, so Submit Bid stays available after submission. */
|
|
3903
|
+
acmiCarrier?: boolean;
|
|
3904
|
+
/** "Today" used to decide which rows are expiring soon; defaults to the current date. */
|
|
3905
|
+
today?: string;
|
|
3906
|
+
/** Flight program GUIDs expanded on first render. */
|
|
3907
|
+
defaultExpandedGuids?: string[];
|
|
3908
|
+
/** Fired when Submit Bid is pressed at either level. */
|
|
3909
|
+
onSubmitBid?: (target: CharterBidTarget) => void;
|
|
3910
|
+
/** Fired when View Bid is pressed at either level. */
|
|
3911
|
+
onViewBid?: (target: CharterBidTarget) => void;
|
|
3912
|
+
/** Fired when a single No Bid button is pressed. */
|
|
3913
|
+
onNoBid?: (target: CharterBidTarget) => void;
|
|
3914
|
+
/** Fired with every checked row when "Submit No Bid for Selected" is pressed. */
|
|
3915
|
+
onBulkNoBid?: (targets: CharterBidTarget[]) => void;
|
|
3916
|
+
/** Hides the Sport / Season / Team / Expiring Soon filter bar. */
|
|
3917
|
+
hideFilters?: boolean;
|
|
3918
|
+
/** Shows the loading row instead of data. */
|
|
3919
|
+
loading?: boolean;
|
|
3920
|
+
/** BCP 47 locale used for date formatting. */
|
|
3921
|
+
locale?: string;
|
|
3922
|
+
/** Additional CSS class, appended last. */
|
|
3923
|
+
className?: string;
|
|
3924
|
+
}
|
|
3925
|
+
/** Header copy for each queue, matching the legacy `cfswitch`. */
|
|
3926
|
+
declare const BID_TYPE_HEADINGS: Record<RegularSeasonBidType, string>;
|
|
3927
|
+
/** Every Regular Season queue, in legacy menu order. */
|
|
3928
|
+
declare const REGULAR_SEASON_BID_TYPES: RegularSeasonBidType[];
|
|
3929
|
+
/** A trip is expiring soon once "today" reaches two days before its expiration date. */
|
|
3930
|
+
declare const isExpiringSoon: (expirationDate: string, today: string) => boolean;
|
|
3931
|
+
/**
|
|
3932
|
+
* The legacy template reads `BidStatus` off whichever row CFML's grouped output
|
|
3933
|
+
* happened to leave current, which is unreliable. We derive it instead: a program
|
|
3934
|
+
* counts as submitted only when every trip under it is, and as No Bid only when
|
|
3935
|
+
* every trip under it is.
|
|
3936
|
+
*/
|
|
3937
|
+
declare const deriveProgramBidStatus: (program: CharterFlightProgramBid) => CharterTripBidStatus;
|
|
3938
|
+
/** A program is biddable while at least one trip under it has not been declined. */
|
|
3939
|
+
declare const isProgramBiddable: (program: CharterFlightProgramBid) => boolean;
|
|
3940
|
+
/**
|
|
3941
|
+
* The Regular Season bid queue: a two-level flight-program → trip accordion with the
|
|
3942
|
+
* legacy Sport / Season / Team / Expiring Soon filters and the same Submit Bid,
|
|
3943
|
+
* No Bid, and View Bid gating at both levels.
|
|
3944
|
+
*/
|
|
3945
|
+
declare const RegularSeasonBidsTable: {
|
|
3946
|
+
({ bids, bidType, acmiCarrier, today, defaultExpandedGuids, onSubmitBid, onViewBid, onNoBid, onBulkNoBid, hideFilters, loading, locale, className, }: RegularSeasonBidsTableProps): React.JSX.Element;
|
|
3947
|
+
displayName: string;
|
|
3948
|
+
};
|
|
3949
|
+
|
|
3950
|
+
/**
|
|
3951
|
+
* Where a carrier's quote sits in the ACMI sourcing review workflow. The same four
|
|
3952
|
+
* values are used by the queue table, the status badges, and the detail page, so a
|
|
3953
|
+
* quote never reads as one status in one place and another somewhere else.
|
|
3954
|
+
*/
|
|
3955
|
+
type SourcingQuoteStatus = 'pending' | 'in-review' | 'approved' | 'rejected';
|
|
3956
|
+
/** Whether a leg carries the travel party or repositions the aircraft. */
|
|
3957
|
+
type SourcingQuoteLegType = 'live' | 'ferry';
|
|
3958
|
+
interface SourcingQuoteLeg {
|
|
3959
|
+
id: string;
|
|
3960
|
+
/** Human label for the leg, e.g. "Outbound" or "Return". */
|
|
3961
|
+
label: string;
|
|
3962
|
+
/** Revenue leg or positioning leg; defaults to "live". */
|
|
3963
|
+
type?: SourcingQuoteLegType;
|
|
3964
|
+
/** Departure airport code. */
|
|
3965
|
+
origin: string;
|
|
3966
|
+
/** Arrival airport code. */
|
|
3967
|
+
destination: string;
|
|
3968
|
+
/** ISO 8601 local departure timestamp, when scheduling has supplied one. */
|
|
3969
|
+
departsAt?: string;
|
|
3970
|
+
/** ISO 8601 local arrival timestamp, when scheduling has supplied one. */
|
|
3971
|
+
arrivesAt?: string;
|
|
3972
|
+
/** Equipment the carrier is offering for this leg. */
|
|
3973
|
+
aircraft: string;
|
|
3974
|
+
/** Seats available on this leg. */
|
|
3975
|
+
seats: number;
|
|
3976
|
+
/** Scheduled block time in hours. */
|
|
3977
|
+
blockHours: number;
|
|
3978
|
+
}
|
|
3979
|
+
interface SourcingQuote {
|
|
3980
|
+
id: string;
|
|
3981
|
+
/** Carrier that submitted the quote. */
|
|
3982
|
+
carrier: string;
|
|
3983
|
+
/** Trip the quote is for. */
|
|
3984
|
+
tripName: string;
|
|
3985
|
+
/** School / account the trip belongs to. */
|
|
3986
|
+
accountName: string;
|
|
3987
|
+
/** Sport travelling. */
|
|
3988
|
+
sport: string;
|
|
3989
|
+
/** Current review status. */
|
|
3990
|
+
status: SourcingQuoteStatus;
|
|
3991
|
+
/** ISO (yyyy-mm-dd) date the carrier submitted the quote. */
|
|
3992
|
+
submittedDate: string;
|
|
3993
|
+
/** ISO (yyyy-mm-dd) first departure date. */
|
|
3994
|
+
departureDate: string;
|
|
3995
|
+
/** Travel-party size. */
|
|
3996
|
+
passengers: number;
|
|
3997
|
+
/**
|
|
3998
|
+
* Quoted total in major currency units. Always derive this from `lineItems` with
|
|
3999
|
+
* `computeQuoteTotals` rather than authoring it — a hand-written total can drift
|
|
4000
|
+
* away from the breakdown the carrier actually sent.
|
|
4001
|
+
*/
|
|
4002
|
+
total: number;
|
|
4003
|
+
/** ISO 4217 currency code for `total`. */
|
|
4004
|
+
currency?: string;
|
|
4005
|
+
/** Flight legs the quote covers. */
|
|
4006
|
+
legs?: SourcingQuoteLeg[];
|
|
4007
|
+
/** Charges that make up the quoted total. */
|
|
4008
|
+
lineItems?: SourcingCostLineItem[];
|
|
4009
|
+
/** Free-text note the carrier attached to the submission. */
|
|
4010
|
+
carrierNote?: string;
|
|
4011
|
+
}
|
|
4012
|
+
interface SourcingReviewQueueTableProps {
|
|
4013
|
+
/** Quotes to list. */
|
|
4014
|
+
quotes: SourcingQuote[];
|
|
4015
|
+
/** Controlled selection of quote ids. Omit to let the table own the selection. */
|
|
4016
|
+
selectedQuoteIds?: string[];
|
|
4017
|
+
/** Fired whenever the selection changes. */
|
|
4018
|
+
onSelectionChange?: (selectedQuoteIds: string[]) => void;
|
|
4019
|
+
/** Fired when a quote row is opened for review. */
|
|
4020
|
+
onOpenQuote?: (quoteId: string) => void;
|
|
4021
|
+
/** Fired with every selected id when the bulk-approve button is pressed. */
|
|
4022
|
+
onBulkApprove?: (quoteIds: string[]) => void;
|
|
4023
|
+
/** Fired when the user clears an active search or status filter. */
|
|
4024
|
+
onFiltersCleared?: () => void;
|
|
4025
|
+
/** Rows shown per page. */
|
|
4026
|
+
pageSize?: number;
|
|
4027
|
+
/** Hides the search box and status filter. */
|
|
4028
|
+
hideFilters?: boolean;
|
|
4029
|
+
/** Shows the table's loading row instead of data. */
|
|
4030
|
+
loading?: boolean;
|
|
4031
|
+
/** BCP 47 locale used for currency and date formatting. */
|
|
4032
|
+
locale?: string;
|
|
4033
|
+
/** Additional CSS class, appended last. */
|
|
4034
|
+
className?: string;
|
|
4035
|
+
}
|
|
4036
|
+
/** Statuses an admin may still act on; approved and rejected quotes are locked out of bulk approve. */
|
|
4037
|
+
declare const isQuoteActionable: (quote: SourcingQuote) => boolean;
|
|
4038
|
+
/** Case-insensitive match across the fields an admin is likely to search by. */
|
|
4039
|
+
declare const matchesQuoteSearch: (quote: SourcingQuote, term: string) => boolean;
|
|
4040
|
+
/**
|
|
4041
|
+
* ACMI sourcing review queue — the list of carrier-submitted flight quotes awaiting
|
|
4042
|
+
* an admin decision, with row selection for bulk approve.
|
|
1682
4043
|
*/
|
|
1683
|
-
declare const
|
|
4044
|
+
declare const SourcingReviewQueueTable: ({ quotes, selectedQuoteIds, onSelectionChange, onOpenQuote, onBulkApprove, onFiltersCleared, pageSize: initialPageSize, hideFilters, loading, locale, className, }: SourcingReviewQueueTableProps) => React.JSX.Element;
|
|
1684
4045
|
|
|
4046
|
+
type TableRowKey = string | number;
|
|
1685
4047
|
interface TableColumn<T = any> {
|
|
1686
4048
|
/** Unique key for the column */
|
|
1687
4049
|
key: string;
|
|
@@ -1715,12 +4077,28 @@ interface TableProps<T = any> {
|
|
|
1715
4077
|
loading?: boolean;
|
|
1716
4078
|
/** Empty state message */
|
|
1717
4079
|
emptyMessage?: string;
|
|
4080
|
+
/** Rich empty state rendered instead of `emptyMessage` when there are no rows */
|
|
4081
|
+
emptyContent?: React__default.ReactNode;
|
|
4082
|
+
/** Adds a leading checkbox column for row selection */
|
|
4083
|
+
selectable?: boolean;
|
|
4084
|
+
/** Controlled selection — the row keys currently selected. Omit to let the table own the state. */
|
|
4085
|
+
selectedRowKeys?: TableRowKey[];
|
|
4086
|
+
/** Starting selection when the table owns the state */
|
|
4087
|
+
defaultSelectedRowKeys?: TableRowKey[];
|
|
4088
|
+
/** Fired with the next selection: the row keys plus the matching rows */
|
|
4089
|
+
onSelectionChange?: (selectedRowKeys: TableRowKey[], selectedRows: T[]) => void;
|
|
4090
|
+
/** Return false to lock a row out of selection */
|
|
4091
|
+
isRowSelectable?: (row: T, index: number) => boolean;
|
|
4092
|
+
/** Accessible label for an individual row checkbox */
|
|
4093
|
+
rowSelectionLabel?: (row: T, index: number) => string;
|
|
4094
|
+
/** Accessible label for the header select-all checkbox */
|
|
4095
|
+
selectAllLabel?: string;
|
|
1718
4096
|
/** Row click handler */
|
|
1719
4097
|
onRowClick?: (row: T, index: number) => void;
|
|
1720
4098
|
/** Additional CSS class */
|
|
1721
4099
|
className?: string;
|
|
1722
4100
|
}
|
|
1723
|
-
declare const Table: <T extends Record<string, any> = any>({ columns, data, rowKey, bordered, striped, hoverable, compact, loading, emptyMessage, onRowClick, className, }: TableProps<T>) => React__default.JSX.Element;
|
|
4101
|
+
declare const Table: <T extends Record<string, any> = any>({ columns, data, rowKey, bordered, striped, hoverable, compact, loading, emptyMessage, emptyContent, selectable, selectedRowKeys, defaultSelectedRowKeys, onSelectionChange, isRowSelectable, rowSelectionLabel, selectAllLabel, onRowClick, className, }: TableProps<T>) => React__default.JSX.Element;
|
|
1724
4102
|
|
|
1725
4103
|
interface TeamOption {
|
|
1726
4104
|
/** Team code (e.g., 'MBB', 'WBB') */
|
|
@@ -1814,21 +4192,72 @@ interface TeamScheduleActionsProps {
|
|
|
1814
4192
|
/** Exact presentational counterpart of Hub's Team Schedule action controls. */
|
|
1815
4193
|
declare const TeamScheduleActions: ({ isCompactView, tripCount, seasonLabel, seasonValue, seasonOptions, previousSeasonDisabled, exportDisabled, exporting, groupTravelDisabled, mergeDisabled, merging, onViewSchedule, onBack, onPreviousSeason, onNextSeason, onSeasonChange, onExport, onGroupTravelRequest, onMergeEvents, className, }: TeamScheduleActionsProps) => React.JSX.Element;
|
|
1816
4194
|
|
|
4195
|
+
/** @deprecated Legacy injected row. Prefer the structured `data` prop. */
|
|
1817
4196
|
interface TeamScheduleCompactRow {
|
|
1818
4197
|
id: string | number;
|
|
1819
4198
|
trip: ReactNode;
|
|
1820
4199
|
events: ReactNode;
|
|
1821
4200
|
}
|
|
4201
|
+
interface TeamScheduleCompactEvent {
|
|
4202
|
+
id: string | number;
|
|
4203
|
+
opponent: string;
|
|
4204
|
+
title: string;
|
|
4205
|
+
date: string;
|
|
4206
|
+
time?: string;
|
|
4207
|
+
tbc?: string;
|
|
4208
|
+
location: string;
|
|
4209
|
+
homeAway: string;
|
|
4210
|
+
/** Leading 48px cell (e.g. checkbox or drag handle). */
|
|
4211
|
+
leading?: ReactNode;
|
|
4212
|
+
/** Trailing 116px cell (e.g. Edit action). */
|
|
4213
|
+
action?: ReactNode;
|
|
4214
|
+
}
|
|
4215
|
+
interface TeamScheduleCompactTrip {
|
|
4216
|
+
id: string | number;
|
|
4217
|
+
gtr?: ReactNode;
|
|
4218
|
+
travelStart: string;
|
|
4219
|
+
travelEnd: string;
|
|
4220
|
+
tripName: string;
|
|
4221
|
+
services?: ReactNode;
|
|
4222
|
+
/** Trailing 116px cell (e.g. Edit action). */
|
|
4223
|
+
action?: ReactNode;
|
|
4224
|
+
events: TeamScheduleCompactEvent[];
|
|
4225
|
+
}
|
|
1822
4226
|
interface TeamScheduleCompactTableProps {
|
|
1823
|
-
|
|
4227
|
+
/** Structured trips powering the TanStack-driven table features. */
|
|
4228
|
+
data?: TeamScheduleCompactTrip[];
|
|
4229
|
+
/**
|
|
4230
|
+
* @deprecated Legacy fully-injected rows. Rendered as-is; table features
|
|
4231
|
+
* (sorting, filtering, …) only apply to the structured `data` prop.
|
|
4232
|
+
*/
|
|
4233
|
+
rows?: TeamScheduleCompactRow[];
|
|
4234
|
+
/** Header labels for legacy `rows` mode only. */
|
|
1824
4235
|
tripHeaders?: ReactNode[];
|
|
1825
4236
|
eventHeaders?: ReactNode[];
|
|
1826
4237
|
onAddEvent?: () => void;
|
|
1827
4238
|
addEventDisabled?: boolean;
|
|
1828
4239
|
className?: string;
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
4240
|
+
/** Click trip column headers to sort. */
|
|
4241
|
+
enableSorting?: boolean;
|
|
4242
|
+
/** Search box matching trip and event text. */
|
|
4243
|
+
enableGlobalFilter?: boolean;
|
|
4244
|
+
globalFilterPlaceholder?: string;
|
|
4245
|
+
/** Per-column text filters under the trip headers. */
|
|
4246
|
+
enableColumnFilters?: boolean;
|
|
4247
|
+
/** Page the trips with prev/next controls. */
|
|
4248
|
+
enablePagination?: boolean;
|
|
4249
|
+
pageSize?: number;
|
|
4250
|
+
/** Checkbox per trip plus a select-all header checkbox. */
|
|
4251
|
+
enableRowSelection?: boolean;
|
|
4252
|
+
/** Called with the selected trip ids whenever selection changes. */
|
|
4253
|
+
onRowSelectionChange?: (selectedIds: string[]) => void;
|
|
4254
|
+
/** "Columns" menu to show/hide trip columns. */
|
|
4255
|
+
enableColumnVisibility?: boolean;
|
|
4256
|
+
/** Chevron per trip to collapse its events panel. */
|
|
4257
|
+
enableExpanding?: boolean;
|
|
4258
|
+
}
|
|
4259
|
+
/** Hub's two-panel compact Team Schedule shell, powered by TanStack Table. */
|
|
4260
|
+
declare const TeamScheduleCompactTable: ({ data, rows, tripHeaders, eventHeaders, onAddEvent, addEventDisabled, className, enableSorting, enableGlobalFilter, globalFilterPlaceholder, enableColumnFilters, enablePagination, pageSize, enableRowSelection, onRowSelectionChange, enableColumnVisibility, enableExpanding, }: TeamScheduleCompactTableProps) => React.JSX.Element;
|
|
1832
4261
|
|
|
1833
4262
|
interface TeamScheduleDueDate {
|
|
1834
4263
|
id?: string | number;
|
|
@@ -2144,31 +4573,37 @@ declare const TravelerForm: {
|
|
|
2144
4573
|
};
|
|
2145
4574
|
|
|
2146
4575
|
interface TripData {
|
|
2147
|
-
/**
|
|
4576
|
+
/** Stable unique trip identifier supplied by the host */
|
|
2148
4577
|
id: string;
|
|
2149
|
-
/** PNR/
|
|
4578
|
+
/** PNR/confirmation number used to load a booked itinerary */
|
|
2150
4579
|
pnr?: string;
|
|
2151
|
-
/** Request ID
|
|
4580
|
+
/** Request ID used to load a submitted request */
|
|
2152
4581
|
reqId?: string;
|
|
2153
4582
|
/** Traveler name(s) */
|
|
2154
4583
|
travelers: string[];
|
|
2155
4584
|
/** Sport code */
|
|
2156
4585
|
sport?: string;
|
|
2157
|
-
/** Vendor/
|
|
4586
|
+
/** Vendor/airline code */
|
|
2158
4587
|
vendor?: string;
|
|
2159
|
-
/** Itinerary string (
|
|
4588
|
+
/** Itinerary string (for example, `ATL-RDU`) */
|
|
2160
4589
|
itinerary?: string;
|
|
2161
4590
|
/** Travel type codes */
|
|
2162
4591
|
types: TravelType[];
|
|
2163
4592
|
/** Multi-segment indicators */
|
|
2164
4593
|
multiSegments?: TravelType[];
|
|
2165
|
-
/**
|
|
4594
|
+
/** Human-readable travel date range */
|
|
2166
4595
|
dates: string;
|
|
2167
|
-
/**
|
|
2168
|
-
|
|
2169
|
-
/**
|
|
4596
|
+
/** ISO start date, used by the legacy local-filter mode when available */
|
|
4597
|
+
startDate?: string;
|
|
4598
|
+
/** ISO end date, used by the legacy local-filter mode when available */
|
|
4599
|
+
endDate?: string;
|
|
4600
|
+
/** Total trip cost, used by the legacy local-filter mode when available */
|
|
4601
|
+
totalCost?: number;
|
|
4602
|
+
/** Trip status. Backend labels such as `Invoiced` are normalized safely. */
|
|
4603
|
+
status: StatusBadgeVariant | string;
|
|
4604
|
+
/** Requested by (for requested trips) */
|
|
2170
4605
|
requestedBy?: string;
|
|
2171
|
-
/** Submitted date (for
|
|
4606
|
+
/** Submitted date (for requested trips) */
|
|
2172
4607
|
submitted?: string;
|
|
2173
4608
|
}
|
|
2174
4609
|
interface TripTableProps {
|
|
@@ -2182,7 +4617,12 @@ interface TripTableProps {
|
|
|
2182
4617
|
vendorMode?: 'icon' | 'code';
|
|
2183
4618
|
/** Use unified service column */
|
|
2184
4619
|
useServiceColumn?: boolean;
|
|
2185
|
-
/**
|
|
4620
|
+
/** Preferred callback. Receives the stable, complete controlled row. */
|
|
4621
|
+
onSelectTrip?: (trip: TripData) => void;
|
|
4622
|
+
/**
|
|
4623
|
+
* Legacy callback. Receives the PNR/request ID when present, then `id`.
|
|
4624
|
+
* @deprecated Prefer `onSelectTrip` so identifiers are never ambiguous.
|
|
4625
|
+
*/
|
|
2186
4626
|
onViewTrip?: (id: string) => void;
|
|
2187
4627
|
/** Show empty state */
|
|
2188
4628
|
emptyMessage?: string;
|
|
@@ -2200,6 +4640,8 @@ interface AdministrationCard {
|
|
|
2200
4640
|
}
|
|
2201
4641
|
interface AdministrationPageProps {
|
|
2202
4642
|
activeTab?: AdministrationTab;
|
|
4643
|
+
/** Authoritative tabs for the current viewer. An empty array renders no tab controls. */
|
|
4644
|
+
enabledTabs?: AdministrationTab[];
|
|
2203
4645
|
onTabChange?: (tab: AdministrationTab) => void;
|
|
2204
4646
|
cards?: AdministrationCard[];
|
|
2205
4647
|
onCardClick?: (card: AdministrationCard) => void;
|
|
@@ -2207,7 +4649,354 @@ interface AdministrationPageProps {
|
|
|
2207
4649
|
className?: string;
|
|
2208
4650
|
}
|
|
2209
4651
|
/** Hub administration shell and system-card index. */
|
|
2210
|
-
declare const AdministrationPage: ({ activeTab, onTabChange, cards, onCardClick, children, className, }: AdministrationPageProps) => React.JSX.Element;
|
|
4652
|
+
declare const AdministrationPage: ({ activeTab, enabledTabs, onTabChange, cards, onCardClick, children, className, }: AdministrationPageProps) => React.JSX.Element;
|
|
4653
|
+
|
|
4654
|
+
interface AgentGroupTravelRequestsPageProps {
|
|
4655
|
+
/** Page title, shown above the request list. */
|
|
4656
|
+
title?: string;
|
|
4657
|
+
/** Open group travel requests to list, grouped by school. */
|
|
4658
|
+
requests: AgentGroupTravelRequest[];
|
|
4659
|
+
/** Options for the "Filter by sport" dropdown. */
|
|
4660
|
+
sports?: AgentGroupTravelRequestSportOption[];
|
|
4661
|
+
/** Saved account-group "views"; the view filter is hidden when none are supplied. */
|
|
4662
|
+
views?: AgentGroupTravelRequestViewOption[];
|
|
4663
|
+
/** ISO (yyyy-mm-dd) reference date for due-status coloring. */
|
|
4664
|
+
today?: string;
|
|
4665
|
+
/** Shows the STM-employee-only quick links (agent request form, CDS requests, actionable items, administer views). */
|
|
4666
|
+
isStmEmployee?: boolean;
|
|
4667
|
+
onBackToBookATrip?: () => void;
|
|
4668
|
+
onSubmitNewRequest?: () => void;
|
|
4669
|
+
onSubmitAgentRequest?: () => void;
|
|
4670
|
+
onSearchPastRequests?: () => void;
|
|
4671
|
+
onShowCdsRequests?: () => void;
|
|
4672
|
+
onShowActionableItems?: () => void;
|
|
4673
|
+
onAdministerViews?: () => void;
|
|
4674
|
+
onOpenRequest?: (id: number) => void;
|
|
4675
|
+
onViewMasterTrip?: (masterTripId: number) => void;
|
|
4676
|
+
onDeleteRequest?: (id: number) => void;
|
|
4677
|
+
onCopyPnr?: (recordLocator: string) => void;
|
|
4678
|
+
onToggleDueStatus?: (id: number, field: GroupTravelDueField) => void;
|
|
4679
|
+
onSubmittedDateChange?: (id: number, value: string) => void;
|
|
4680
|
+
onQuoteSentDateChange?: (id: number, value: string) => void;
|
|
4681
|
+
className?: string;
|
|
4682
|
+
}
|
|
4683
|
+
/** Hub's agent-facing Group Travel Request screen — the "Book a Trip" quick links plus the open-requests list. */
|
|
4684
|
+
declare const AgentGroupTravelRequestsPage: ({ title, requests, sports, views, today, isStmEmployee, onBackToBookATrip, onSubmitNewRequest, onSubmitAgentRequest, onSearchPastRequests, onShowCdsRequests, onShowActionableItems, onAdministerViews, onOpenRequest, onViewMasterTrip, onDeleteRequest, onCopyPnr, onToggleDueStatus, onSubmittedDateChange, onQuoteSentDateChange, className, }: AgentGroupTravelRequestsPageProps) => React.JSX.Element;
|
|
4685
|
+
|
|
4686
|
+
/** The three sections of the legacy My Profile menu. */
|
|
4687
|
+
type CarrierProfileTab = 'profile' | 'contacts' | 'aircraft';
|
|
4688
|
+
/** Default bid values used to pre-fill the bid response form. */
|
|
4689
|
+
interface CarrierProfilePreferences {
|
|
4690
|
+
/** Default seats offered. */
|
|
4691
|
+
availableSeats: string;
|
|
4692
|
+
/** Default max payload in pounds. */
|
|
4693
|
+
maxPayload: string;
|
|
4694
|
+
/** Default fuel base in dollars. */
|
|
4695
|
+
fuelBase: string;
|
|
4696
|
+
/** Default catering option. */
|
|
4697
|
+
cateringOptions: string;
|
|
4698
|
+
}
|
|
4699
|
+
/** A carrier contact on file with STM. */
|
|
4700
|
+
interface CarrierContact {
|
|
4701
|
+
/** Legacy `Contact_ID`, used as the row key. */
|
|
4702
|
+
contactId: string;
|
|
4703
|
+
/** Contact type name, e.g. "Sales". */
|
|
4704
|
+
contactType: string;
|
|
4705
|
+
/** Contact's full name. */
|
|
4706
|
+
name: string;
|
|
4707
|
+
/** Work phone. */
|
|
4708
|
+
workPhone: string;
|
|
4709
|
+
/** Email address. */
|
|
4710
|
+
email: string;
|
|
4711
|
+
/** Whether new bid notifications go to this contact. */
|
|
4712
|
+
bidContact: boolean;
|
|
4713
|
+
}
|
|
4714
|
+
/** An airframe the carrier can be quoted on. */
|
|
4715
|
+
interface CarrierAircraft {
|
|
4716
|
+
/** Legacy `Aircraft_ID`, used as the row key. */
|
|
4717
|
+
aircraftId: string;
|
|
4718
|
+
/** Model or name. */
|
|
4719
|
+
name: string;
|
|
4720
|
+
/** Certified seat count. */
|
|
4721
|
+
seatQty: number;
|
|
4722
|
+
/** Max payload in pounds. */
|
|
4723
|
+
maxPayload: number;
|
|
4724
|
+
/** Fuel base in dollars. */
|
|
4725
|
+
fuelBase: number;
|
|
4726
|
+
/** How many seat maps and documents are attached. */
|
|
4727
|
+
documentCount?: number;
|
|
4728
|
+
}
|
|
4729
|
+
interface CarrierProfilePageProps {
|
|
4730
|
+
/** Carrier account name, used in the Contacts heading. */
|
|
4731
|
+
carrierName: string;
|
|
4732
|
+
/** Default bid values. */
|
|
4733
|
+
preferences?: CarrierProfilePreferences;
|
|
4734
|
+
/** Catering options STM offers. */
|
|
4735
|
+
cateringOptions?: string[];
|
|
4736
|
+
/** Contacts on file. */
|
|
4737
|
+
contacts?: CarrierContact[];
|
|
4738
|
+
/** Contact types available in the picker. */
|
|
4739
|
+
contactTypes?: string[];
|
|
4740
|
+
/** Aircraft on file. */
|
|
4741
|
+
aircraft?: CarrierAircraft[];
|
|
4742
|
+
/** Controlled section selection; omit to let the page own it. */
|
|
4743
|
+
tab?: CarrierProfileTab;
|
|
4744
|
+
/** Section selected on first render when `tab` is omitted. */
|
|
4745
|
+
defaultTab?: CarrierProfileTab;
|
|
4746
|
+
/** Fired with the section the carrier switched to. */
|
|
4747
|
+
onTabChange?: (tab: CarrierProfileTab) => void;
|
|
4748
|
+
/** Fired with the saved preferences. */
|
|
4749
|
+
onSavePreferences?: (preferences: CarrierProfilePreferences) => void;
|
|
4750
|
+
/** Fired with the contact to edit. */
|
|
4751
|
+
onEditContact?: (contactId: string) => void;
|
|
4752
|
+
/** Fired with the contact to delete. */
|
|
4753
|
+
onDeleteContact?: (contactId: string) => void;
|
|
4754
|
+
/** Fired with the new contact's values. */
|
|
4755
|
+
onAddContact?: (contact: Omit<CarrierContact, 'contactId'>) => void;
|
|
4756
|
+
/** Fired with the aircraft to edit. */
|
|
4757
|
+
onEditAircraft?: (aircraftId: string) => void;
|
|
4758
|
+
/** Fired with the aircraft to delete. */
|
|
4759
|
+
onDeleteAircraft?: (aircraftId: string) => void;
|
|
4760
|
+
/** Fired when an aircraft's seat maps and documents are opened. */
|
|
4761
|
+
onOpenAircraftDocuments?: (aircraftId: string) => void;
|
|
4762
|
+
/** Renders profile data without mutation controls, even when callbacks are supplied. */
|
|
4763
|
+
readOnly?: boolean;
|
|
4764
|
+
/** Label for the back link above the header. */
|
|
4765
|
+
backLabel?: string;
|
|
4766
|
+
/** Fired when the back link is pressed. */
|
|
4767
|
+
onBack?: () => void;
|
|
4768
|
+
/** BCP 47 locale used for number formatting. */
|
|
4769
|
+
locale?: string;
|
|
4770
|
+
/** Additional CSS class, appended last. */
|
|
4771
|
+
className?: string;
|
|
4772
|
+
}
|
|
4773
|
+
/** Catering choices offered on the legacy preferences form. */
|
|
4774
|
+
declare const CARRIER_CATERING_OPTIONS: string[];
|
|
4775
|
+
/** Contact types the legacy portal offers. */
|
|
4776
|
+
declare const CARRIER_CONTACT_TYPES: string[];
|
|
4777
|
+
/**
|
|
4778
|
+
* My Profile — the legacy `profiles/` area, with its Profile · Contacts · Aircraft
|
|
4779
|
+
* split kept intact. Preferences pre-fill the bid response form; contacts decide who
|
|
4780
|
+
* is emailed about new bids; aircraft are what STM can quote the carrier on.
|
|
4781
|
+
*/
|
|
4782
|
+
declare const CarrierProfilePage: {
|
|
4783
|
+
({ carrierName, preferences: initialPreferences, cateringOptions, contacts, contactTypes, aircraft, tab: controlledTab, defaultTab, onTabChange, onSavePreferences, onEditContact, onDeleteContact, onAddContact, onEditAircraft, onDeleteAircraft, onOpenAircraftDocuments, readOnly, backLabel, onBack, locale, className, }: CarrierProfilePageProps): React.JSX.Element;
|
|
4784
|
+
displayName: string;
|
|
4785
|
+
};
|
|
4786
|
+
|
|
4787
|
+
/** Read-only carrier facts returned for one NCAA championship opportunity. */
|
|
4788
|
+
interface ChampionshipBidDetail {
|
|
4789
|
+
bidId: string;
|
|
4790
|
+
bidName: string;
|
|
4791
|
+
aircraftName?: string;
|
|
4792
|
+
seats?: number;
|
|
4793
|
+
totalCost?: number;
|
|
4794
|
+
cities?: string;
|
|
4795
|
+
restrictions?: string;
|
|
4796
|
+
comments?: string;
|
|
4797
|
+
noBid?: boolean;
|
|
4798
|
+
awarded?: boolean;
|
|
4799
|
+
confirmed?: boolean;
|
|
4800
|
+
contractFileName?: string;
|
|
4801
|
+
}
|
|
4802
|
+
interface ChampionshipBidDetailPageProps {
|
|
4803
|
+
/** Detail returned by Hub; omit while loading or when no record was found. */
|
|
4804
|
+
bid?: ChampionshipBidDetail;
|
|
4805
|
+
/** Shows the loading state instead of detail. */
|
|
4806
|
+
loading?: boolean;
|
|
4807
|
+
/** Label for the optional back navigation. */
|
|
4808
|
+
backLabel?: string;
|
|
4809
|
+
/** Fired only for navigation back to the championship queue. */
|
|
4810
|
+
onBack?: () => void;
|
|
4811
|
+
/** BCP 47 locale used to format seats and total cost. */
|
|
4812
|
+
locale?: string;
|
|
4813
|
+
className?: string;
|
|
4814
|
+
}
|
|
4815
|
+
/**
|
|
4816
|
+
* Read-only NCAA championship bid detail. Hub owns fetching, authorization, and every write;
|
|
4817
|
+
* this page deliberately exposes no bid, award, confirmation, contract, or editing actions.
|
|
4818
|
+
*/
|
|
4819
|
+
declare const ChampionshipBidDetailPage: {
|
|
4820
|
+
({ bid, loading, backLabel, onBack, locale, className, }: ChampionshipBidDetailPageProps): React.JSX.Element;
|
|
4821
|
+
displayName: string;
|
|
4822
|
+
};
|
|
4823
|
+
|
|
4824
|
+
/** The five NCAA Championship queues, in the order the legacy menu lists them. */
|
|
4825
|
+
type ChampionshipBidType = 'Open' | 'Awarded' | 'Closed' | 'Declined' | 'Withdrawn';
|
|
4826
|
+
/** One championship bid opportunity. */
|
|
4827
|
+
interface ChampionshipBid {
|
|
4828
|
+
/** Legacy `Bid_ID`, used as the row key. */
|
|
4829
|
+
bidId: string;
|
|
4830
|
+
/** Opportunity name. */
|
|
4831
|
+
bidName: string;
|
|
4832
|
+
/** Preferred itinerary, e.g. "OMA-DAY". */
|
|
4833
|
+
cityPairs: string;
|
|
4834
|
+
/** Travel party size. */
|
|
4835
|
+
travelParty: number;
|
|
4836
|
+
/** Departure date, ISO `yyyy-mm-dd`. */
|
|
4837
|
+
departDate: string;
|
|
4838
|
+
/** Bid expiration date, ISO `yyyy-mm-dd`. */
|
|
4839
|
+
expirationDate: string;
|
|
4840
|
+
/** Whether the carrier has already responded. */
|
|
4841
|
+
responded?: boolean;
|
|
4842
|
+
/** Whether the carrier declined this opportunity. */
|
|
4843
|
+
noBid?: boolean;
|
|
4844
|
+
/** Whether an awarded bid has been confirmed by the carrier. */
|
|
4845
|
+
confirmed?: boolean;
|
|
4846
|
+
/** File name of the signed contract, when one has been uploaded. */
|
|
4847
|
+
contractFile?: string;
|
|
4848
|
+
}
|
|
4849
|
+
interface ChampionshipBidsPageProps {
|
|
4850
|
+
/** Bids for the selected queue. */
|
|
4851
|
+
bids: ChampionshipBid[];
|
|
4852
|
+
/** Controlled queue selection; omit to let the page own it. */
|
|
4853
|
+
bidType?: ChampionshipBidType;
|
|
4854
|
+
/** Queue selected on first render when `bidType` is omitted. */
|
|
4855
|
+
defaultBidType?: ChampionshipBidType;
|
|
4856
|
+
/** Fired with the queue the carrier switched to. */
|
|
4857
|
+
onBidTypeChange?: (bidType: ChampionshipBidType) => void;
|
|
4858
|
+
/** Fired when a bid name is opened for read-only detail navigation. */
|
|
4859
|
+
onViewBid?: (bidId: string) => void;
|
|
4860
|
+
/**
|
|
4861
|
+
* Fired by the Bid and Bid anyway write-intent actions. Also serves as the
|
|
4862
|
+
* legacy fallback for bid-name navigation when `onViewBid` is omitted.
|
|
4863
|
+
*/
|
|
4864
|
+
onOpenBid?: (bidId: string) => void;
|
|
4865
|
+
/** Fired when an awarded bid is confirmed. */
|
|
4866
|
+
onConfirmAward?: (bidId: string) => void;
|
|
4867
|
+
/** Fired when a signed contract is opened or uploaded. */
|
|
4868
|
+
onOpenContract?: (bidId: string) => void;
|
|
4869
|
+
/** Rows shown per page. */
|
|
4870
|
+
pageSize?: number;
|
|
4871
|
+
/** Label for the back link above the header. */
|
|
4872
|
+
backLabel?: string;
|
|
4873
|
+
/** Fired when the back link is pressed. */
|
|
4874
|
+
onBack?: () => void;
|
|
4875
|
+
/** Shows the table's loading row instead of data. */
|
|
4876
|
+
loading?: boolean;
|
|
4877
|
+
/** BCP 47 locale used for date formatting. */
|
|
4878
|
+
locale?: string;
|
|
4879
|
+
/** Additional CSS class, appended last. */
|
|
4880
|
+
className?: string;
|
|
4881
|
+
}
|
|
4882
|
+
/** Every NCAA Championship queue, in legacy menu order. */
|
|
4883
|
+
declare const CHAMPIONSHIP_BID_TYPES: ChampionshipBidType[];
|
|
4884
|
+
/** Header copy for each queue, matching the legacy `cfswitch`. */
|
|
4885
|
+
declare const CHAMPIONSHIP_HEADINGS: Record<ChampionshipBidType, string>;
|
|
4886
|
+
/**
|
|
4887
|
+
* NCAA Championship bid queues — the legacy `bids/index.cfm` list. Five status queues
|
|
4888
|
+
* and a flat table; the checkmark and delete GIFs become status pills, and the
|
|
4889
|
+
* confirm / contract image links become real buttons.
|
|
4890
|
+
*/
|
|
4891
|
+
declare const ChampionshipBidsPage: {
|
|
4892
|
+
({ bids, bidType: controlledBidType, defaultBidType, onBidTypeChange, onViewBid, onOpenBid, onConfirmAward, onOpenContract, pageSize: initialPageSize, backLabel, onBack, loading, locale, className, }: ChampionshipBidsPageProps): React.JSX.Element;
|
|
4893
|
+
displayName: string;
|
|
4894
|
+
};
|
|
4895
|
+
|
|
4896
|
+
/** What the carrier is submitting: a priced quote, or a decline. */
|
|
4897
|
+
interface CharterBidSubmission {
|
|
4898
|
+
/** The calculator inputs behind the quote; null when the carrier is declining. */
|
|
4899
|
+
inputs: AcmiQuoteInputs | null;
|
|
4900
|
+
/** True when the carrier is declining the opportunity. */
|
|
4901
|
+
noBid: boolean;
|
|
4902
|
+
}
|
|
4903
|
+
interface CharterBidResponsePageProps {
|
|
4904
|
+
/** Flight program the bid is against. */
|
|
4905
|
+
program: CharterFlightProgramBid;
|
|
4906
|
+
/** Trips covered by this response — one for a trip bid, all of them for a program bid. */
|
|
4907
|
+
trips: CharterTripBid[];
|
|
4908
|
+
/** School / account the trips belong to. */
|
|
4909
|
+
accountName: string;
|
|
4910
|
+
/** Trip-level bids are titled by trip name; program-level bids by program name. */
|
|
4911
|
+
tripLevel?: boolean;
|
|
4912
|
+
/** ACMI carriers additionally see the carrier STM requested for the trip. */
|
|
4913
|
+
acmiCarrier?: boolean;
|
|
4914
|
+
/** Carrier STM requested for this trip; shown to ACMI carriers only. */
|
|
4915
|
+
requestedCarrier?: string;
|
|
4916
|
+
/** Values the calculator opens with, typically the carrier's saved profile defaults. */
|
|
4917
|
+
defaultInputs?: Partial<AcmiQuoteInputs>;
|
|
4918
|
+
/** Priced result to show inside the calculator. */
|
|
4919
|
+
acmiResult?: AcmiQuoteResult;
|
|
4920
|
+
/** Fired when the calculator prices a quote. */
|
|
4921
|
+
onCalculateAcmi?: (inputs: AcmiQuoteInputs) => void;
|
|
4922
|
+
/** Fired with the quote — or the decline — when the bid is submitted. */
|
|
4923
|
+
onSubmitBid?: (submission: CharterBidSubmission) => void;
|
|
4924
|
+
/** Label for the back link above the header. */
|
|
4925
|
+
backLabel?: string;
|
|
4926
|
+
/** Fired when the back link is pressed. */
|
|
4927
|
+
onBack?: () => void;
|
|
4928
|
+
/** Disables the submit button and shows the in-progress label. */
|
|
4929
|
+
submitting?: boolean;
|
|
4930
|
+
/** BCP 47 locale used for date and currency formatting. */
|
|
4931
|
+
locale?: string;
|
|
4932
|
+
/** Additional CSS class, appended last. */
|
|
4933
|
+
className?: string;
|
|
4934
|
+
}
|
|
4935
|
+
/**
|
|
4936
|
+
* Bid response — the Submit Bid destination. The legacy screen offered four ways to
|
|
4937
|
+
* respond (a manual form, a pasted quote, a document upload, and for ACMI carriers a
|
|
4938
|
+
* calculator); the calculator is now the single submission method for everyone, so a
|
|
4939
|
+
* price is always built from the same inputs rather than typed in blind.
|
|
4940
|
+
*/
|
|
4941
|
+
declare const CharterBidResponsePage: {
|
|
4942
|
+
({ program, trips, accountName, tripLevel, acmiCarrier, requestedCarrier, defaultInputs, acmiResult, onCalculateAcmi, onSubmitBid, backLabel, onBack, submitting, locale, className, }: CharterBidResponsePageProps): React.JSX.Element;
|
|
4943
|
+
displayName: string;
|
|
4944
|
+
};
|
|
4945
|
+
|
|
4946
|
+
/** How the carrier submitted the bid STM is still parsing. */
|
|
4947
|
+
type CharterSubmissionType = 'form' | 'upload' | 'copyPaste';
|
|
4948
|
+
/** One submitted bid line as stored against the opportunity. */
|
|
4949
|
+
interface CharterSubmittedBid {
|
|
4950
|
+
/** Stable id used as the React key. */
|
|
4951
|
+
id: string;
|
|
4952
|
+
/** Seats offered. */
|
|
4953
|
+
seats: number;
|
|
4954
|
+
/** Max payload in pounds. */
|
|
4955
|
+
maxPayloadLbs: number;
|
|
4956
|
+
/** Fuel base price in dollars. */
|
|
4957
|
+
fuelBasePrice: number;
|
|
4958
|
+
/** Total cost in dollars. */
|
|
4959
|
+
totalCost: number;
|
|
4960
|
+
/** Catering included in the price. */
|
|
4961
|
+
cateringAvailable: string;
|
|
4962
|
+
/**
|
|
4963
|
+
* Operator notes. Salesforce stores these pipe-delimited in one field; pass the
|
|
4964
|
+
* already-split lines and each renders on its own row.
|
|
4965
|
+
*/
|
|
4966
|
+
notesFromOperator?: string[];
|
|
4967
|
+
}
|
|
4968
|
+
interface CharterBidViewPageProps {
|
|
4969
|
+
/** Flight program the bid belongs to. */
|
|
4970
|
+
program: CharterFlightProgramBid;
|
|
4971
|
+
/** Trip the bid covers; omit for a program-level bid. */
|
|
4972
|
+
trip?: CharterTripBid;
|
|
4973
|
+
/** Bids submitted against this opportunity. Empty means nothing has parsed yet. */
|
|
4974
|
+
bids?: CharterSubmittedBid[];
|
|
4975
|
+
/**
|
|
4976
|
+
* Set when a submission exists but has not parsed into bid lines yet. The legacy page
|
|
4977
|
+
* told the carrier to refresh; this drives a real processing state instead.
|
|
4978
|
+
*/
|
|
4979
|
+
processingSubmission?: CharterSubmissionType;
|
|
4980
|
+
/** Fired when the carrier asks to re-check a processing submission. */
|
|
4981
|
+
onRefresh?: () => void;
|
|
4982
|
+
/** Label for the back link above the header. */
|
|
4983
|
+
backLabel?: string;
|
|
4984
|
+
/** Fired when the back link is pressed. */
|
|
4985
|
+
onBack?: () => void;
|
|
4986
|
+
/** BCP 47 locale used for currency formatting. */
|
|
4987
|
+
locale?: string;
|
|
4988
|
+
/** Additional CSS class, appended last. */
|
|
4989
|
+
className?: string;
|
|
4990
|
+
}
|
|
4991
|
+
/**
|
|
4992
|
+
* View submitted bid — the legacy `dsp_viewBidResponse.cfm`. Shows every submitted bid
|
|
4993
|
+
* line, and replaces "please refresh the page" with a real processing state for bids
|
|
4994
|
+
* that arrived by upload or copy/paste and are still being parsed.
|
|
4995
|
+
*/
|
|
4996
|
+
declare const CharterBidViewPage: {
|
|
4997
|
+
({ program, trip, bids, processingSubmission, onRefresh, backLabel, onBack, locale, className, }: CharterBidViewPageProps): React.JSX.Element;
|
|
4998
|
+
displayName: string;
|
|
4999
|
+
};
|
|
2211
5000
|
|
|
2212
5001
|
type ManifestSendState = 'none' | 'initial-sent' | 'final-sent';
|
|
2213
5002
|
interface CharterManifestSegment {
|
|
@@ -2263,6 +5052,144 @@ interface CharterManifestPageProps {
|
|
|
2263
5052
|
/** Stateless, service-free rendering of Hub's charter manifest page. */
|
|
2264
5053
|
declare const CharterManifestPage: ({ tripName, travelStartDate, travelEndDate, seats, payloadLimit, passengerWeight, cargoWeight, carrierName, carrierNote, passengers, equipment, segments, locked, sendState, onBack, onGenerateFile, onChangeCarrier, onSplitSegments, onAddPassengers, onAddEquipment, onRemovePassenger, onRemoveEquipment, onSendInitial, onSendFinal, onUndoInitial, className, }: CharterManifestPageProps) => React.JSX.Element;
|
|
2265
5054
|
|
|
5055
|
+
type ChartersAccessRole = 'member' | 'admin';
|
|
5056
|
+
type ChartersAccessId = string | number;
|
|
5057
|
+
/** An account user who is eligible to receive STM Charters access. */
|
|
5058
|
+
interface ChartersAccountUser {
|
|
5059
|
+
accountUserId: ChartersAccessId;
|
|
5060
|
+
name: string;
|
|
5061
|
+
email: string;
|
|
5062
|
+
title?: string;
|
|
5063
|
+
}
|
|
5064
|
+
/** One account user's membership in the STM Charters workspace. */
|
|
5065
|
+
interface ChartersAccessMembership extends ChartersAccountUser {
|
|
5066
|
+
membershipId: ChartersAccessId;
|
|
5067
|
+
role: ChartersAccessRole;
|
|
5068
|
+
/** When present, the role control is disabled and this reason is shown. */
|
|
5069
|
+
roleChangeDisabledReason?: string;
|
|
5070
|
+
/** When present, the remove action is disabled and this reason is shown. */
|
|
5071
|
+
removeDisabledReason?: string;
|
|
5072
|
+
}
|
|
5073
|
+
interface ChartersAccessManagementPageProps {
|
|
5074
|
+
/** Account whose STM Charters membership is being managed. */
|
|
5075
|
+
accountName: string;
|
|
5076
|
+
/** Controlled access list. Successful callbacks must update this value in the host. */
|
|
5077
|
+
memberships: ChartersAccessMembership[];
|
|
5078
|
+
/** Existing account users who may be granted access. Existing members are filtered out. */
|
|
5079
|
+
availableAccountUsers: ChartersAccountUser[];
|
|
5080
|
+
/**
|
|
5081
|
+
* Optional debounced lookup for eligible account users. It is called after a trimmed query
|
|
5082
|
+
* reaches two characters; return the resulting candidates through availableAccountUsers.
|
|
5083
|
+
*/
|
|
5084
|
+
onSearchAccountUsers?: (query: string) => void | Promise<void>;
|
|
5085
|
+
/** Whether the host is loading candidates requested through onSearchAccountUsers. */
|
|
5086
|
+
accountUserSearchLoading?: boolean;
|
|
5087
|
+
/** The signed-in account user, used only to display the "You" marker. */
|
|
5088
|
+
currentAccountUserId?: ChartersAccessId;
|
|
5089
|
+
/** Whether the viewer may manage access. False renders a deliberate read-only view. */
|
|
5090
|
+
canManageAccess: boolean;
|
|
5091
|
+
/** Explanation shown in the read-only state. */
|
|
5092
|
+
readOnlyMessage?: string;
|
|
5093
|
+
/** Initial page loading state. */
|
|
5094
|
+
loading?: boolean;
|
|
5095
|
+
/** Initial page error. */
|
|
5096
|
+
error?: string;
|
|
5097
|
+
/** Optional retry for the initial page error. */
|
|
5098
|
+
onRetry?: () => void;
|
|
5099
|
+
/** Return to the STM Charters landing page. */
|
|
5100
|
+
onBack?: () => void;
|
|
5101
|
+
/** Add an existing account user as a charter member or charter admin. */
|
|
5102
|
+
onAddAccess?: (accountUser: ChartersAccountUser, role: ChartersAccessRole) => void | Promise<void>;
|
|
5103
|
+
/** Promote or demote an existing charter member. */
|
|
5104
|
+
onChangeRole?: (membership: ChartersAccessMembership, role: ChartersAccessRole) => void | Promise<void>;
|
|
5105
|
+
/** Remove STM Charters access after the page confirmation. */
|
|
5106
|
+
onRemoveAccess?: (membership: ChartersAccessMembership) => void | Promise<void>;
|
|
5107
|
+
className?: string;
|
|
5108
|
+
}
|
|
5109
|
+
/**
|
|
5110
|
+
* Account-scoped access management for the STM Charters workspace.
|
|
5111
|
+
*
|
|
5112
|
+
* Features:
|
|
5113
|
+
* - Single search input with dropdown for finding and selecting multiple users
|
|
5114
|
+
* - Selected users shown as dismissible badges
|
|
5115
|
+
* - Role assignment before adding
|
|
5116
|
+
* - Bulk add support
|
|
5117
|
+
*
|
|
5118
|
+
* The page deliberately owns only interaction state. Memberships, authorization guards,
|
|
5119
|
+
* persistence, routing, and account/global-admin recovery remain controlled by the host.
|
|
5120
|
+
*/
|
|
5121
|
+
declare const ChartersAccessManagementPage: {
|
|
5122
|
+
({ accountName, memberships, availableAccountUsers, onSearchAccountUsers, accountUserSearchLoading, currentAccountUserId, canManageAccess, readOnlyMessage, loading, error, onRetry, onBack, onAddAccess, onChangeRole, onRemoveAccess, className, }: ChartersAccessManagementPageProps): React.JSX.Element;
|
|
5123
|
+
displayName: string;
|
|
5124
|
+
};
|
|
5125
|
+
|
|
5126
|
+
/** One of the destinations the Charters landing page fans out to. */
|
|
5127
|
+
interface CharterSectionCard {
|
|
5128
|
+
/** Stable key, also passed back through `onOpenSection`. */
|
|
5129
|
+
key: string;
|
|
5130
|
+
/** Card heading. */
|
|
5131
|
+
title: string;
|
|
5132
|
+
/** One-line explanation of what lives behind the card. */
|
|
5133
|
+
description: string;
|
|
5134
|
+
/** Number of items waiting in that section; omit to hide the count. */
|
|
5135
|
+
count?: number;
|
|
5136
|
+
/** Noun for the count, e.g. "open bids". */
|
|
5137
|
+
countLabel?: string;
|
|
5138
|
+
/** Optional icon override. Unknown keys otherwise use the standard plane icon. */
|
|
5139
|
+
icon?: ReactNode;
|
|
5140
|
+
/** Whether the count is still loading. When true, shows a spinner instead of count. */
|
|
5141
|
+
loading?: boolean;
|
|
5142
|
+
}
|
|
5143
|
+
/** A named STM contact for one of the two bid programs. */
|
|
5144
|
+
interface CharterContact {
|
|
5145
|
+
/** Contact's full name. */
|
|
5146
|
+
name: string;
|
|
5147
|
+
/** Their role, e.g. "Director of Charter Sales". */
|
|
5148
|
+
role?: string;
|
|
5149
|
+
/** Email address; rendered as a mailto link when present. */
|
|
5150
|
+
email?: string;
|
|
5151
|
+
/** Direct phone number. */
|
|
5152
|
+
phone?: string;
|
|
5153
|
+
}
|
|
5154
|
+
/** A contact group, matching the legacy Regular Season / NCAA Championship split. */
|
|
5155
|
+
interface CharterContactGroup {
|
|
5156
|
+
/** Group heading. */
|
|
5157
|
+
title: string;
|
|
5158
|
+
/** People to list under the heading. */
|
|
5159
|
+
contacts: CharterContact[];
|
|
5160
|
+
}
|
|
5161
|
+
interface ChartersHomePageProps {
|
|
5162
|
+
/** Page title. */
|
|
5163
|
+
title?: string;
|
|
5164
|
+
/** Introductory copy under the title. */
|
|
5165
|
+
description?: string;
|
|
5166
|
+
/** Section cards; defaults to the four legacy portal areas. */
|
|
5167
|
+
sections?: CharterSectionCard[];
|
|
5168
|
+
/** Contact groups shown below the cards. */
|
|
5169
|
+
contactGroups?: CharterContactGroup[];
|
|
5170
|
+
/** Label for the tutorial link. */
|
|
5171
|
+
tutorialLabel?: string;
|
|
5172
|
+
/** Fired when the tutorial link is pressed. */
|
|
5173
|
+
onOpenTutorial?: () => void;
|
|
5174
|
+
/** Fired with the card key when a section card is opened. */
|
|
5175
|
+
onOpenSection?: (key: string) => void;
|
|
5176
|
+
/** Additional CSS class, appended last. */
|
|
5177
|
+
className?: string;
|
|
5178
|
+
}
|
|
5179
|
+
/** The four areas the legacy carrier portal exposes, in menu order. */
|
|
5180
|
+
declare const CHARTER_SECTIONS: CharterSectionCard[];
|
|
5181
|
+
/** The STM contacts hardcoded into the legacy welcome screen. */
|
|
5182
|
+
declare const CHARTER_CONTACT_GROUPS: CharterContactGroup[];
|
|
5183
|
+
/**
|
|
5184
|
+
* Charters landing page — the entry point for carriers. The legacy screen was a bare
|
|
5185
|
+
* welcome paragraph and a PDF link; this keeps the same information architecture but
|
|
5186
|
+
* puts a real card into each section with the queue count already visible.
|
|
5187
|
+
*/
|
|
5188
|
+
declare const ChartersHomePage: {
|
|
5189
|
+
({ title, description, sections, contactGroups, tutorialLabel, onOpenTutorial, onOpenSection, className, }: ChartersHomePageProps): React.JSX.Element;
|
|
5190
|
+
displayName: string;
|
|
5191
|
+
};
|
|
5192
|
+
|
|
2266
5193
|
interface ContactInfo {
|
|
2267
5194
|
name?: string;
|
|
2268
5195
|
email?: string;
|
|
@@ -2367,6 +5294,110 @@ interface DashboardPageProps {
|
|
|
2367
5294
|
/** Exact, service-free rendering of Hub's personalized home page. */
|
|
2368
5295
|
declare const DashboardPage: ({ greeting, firstName, accountName, widgets, systemBanners, alertBanners, syncStatus, onRefresh, onRemove, onResize, onReorder, onReset, onAddWidget, onTravelerRangeChange, onNavigate, className }: DashboardPageProps) => React.JSX.Element;
|
|
2369
5296
|
|
|
5297
|
+
type FeatureFlagIdentifier = string | number;
|
|
5298
|
+
type FeatureFlagTargetType = 'global' | 'account' | 'user' | 'userType' | 'role' | 'organizationalUnit' | 'organizationalUnitValue';
|
|
5299
|
+
type FeatureFlagRuleEffect = 'enable' | 'disable';
|
|
5300
|
+
/** Immutable feature metadata supplied by the host. */
|
|
5301
|
+
interface FeatureFlagDefinition {
|
|
5302
|
+
featureKey: string;
|
|
5303
|
+
name: string;
|
|
5304
|
+
description: string;
|
|
5305
|
+
parentFeatureKey?: string;
|
|
5306
|
+
defaultEnabled: boolean;
|
|
5307
|
+
/** Runtime definition kill switch. False means no targeting rule may enable the feature. */
|
|
5308
|
+
isActive?: boolean;
|
|
5309
|
+
}
|
|
5310
|
+
/** A host-owned selectable audience. IDs are opaque to the component. */
|
|
5311
|
+
interface FeatureFlagTargetOption {
|
|
5312
|
+
value: FeatureFlagIdentifier;
|
|
5313
|
+
label: string;
|
|
5314
|
+
accountId?: FeatureFlagIdentifier;
|
|
5315
|
+
/** Optional parent organizational-unit ID for a value option. */
|
|
5316
|
+
parentValue?: FeatureFlagIdentifier;
|
|
5317
|
+
disabled?: boolean;
|
|
5318
|
+
}
|
|
5319
|
+
interface FeatureFlagTargetOptions {
|
|
5320
|
+
accounts: FeatureFlagTargetOption[];
|
|
5321
|
+
users: FeatureFlagTargetOption[];
|
|
5322
|
+
userTypes: FeatureFlagTargetOption[];
|
|
5323
|
+
roles: FeatureFlagTargetOption[];
|
|
5324
|
+
organizationalUnits: FeatureFlagTargetOption[];
|
|
5325
|
+
organizationalUnitValues: FeatureFlagTargetOption[];
|
|
5326
|
+
}
|
|
5327
|
+
/** One persisted rule. `rowVersion` must be treated as an opaque concurrency token. */
|
|
5328
|
+
interface FeatureFlagRule {
|
|
5329
|
+
ruleId: FeatureFlagIdentifier;
|
|
5330
|
+
rowVersion: string;
|
|
5331
|
+
featureKey: string;
|
|
5332
|
+
targetType: FeatureFlagTargetType;
|
|
5333
|
+
accountId?: FeatureFlagIdentifier;
|
|
5334
|
+
accountLabel?: string;
|
|
5335
|
+
targetId?: FeatureFlagIdentifier;
|
|
5336
|
+
targetLabel: string;
|
|
5337
|
+
effect: FeatureFlagRuleEffect;
|
|
5338
|
+
priority: number;
|
|
5339
|
+
startsAt?: string | null;
|
|
5340
|
+
endsAt?: string | null;
|
|
5341
|
+
reason?: string | null;
|
|
5342
|
+
isActive: boolean;
|
|
5343
|
+
}
|
|
5344
|
+
interface FeatureFlagRuleFormValue {
|
|
5345
|
+
featureKey: string;
|
|
5346
|
+
targetType: FeatureFlagTargetType;
|
|
5347
|
+
accountId?: FeatureFlagIdentifier;
|
|
5348
|
+
targetId?: FeatureFlagIdentifier;
|
|
5349
|
+
effect: FeatureFlagRuleEffect;
|
|
5350
|
+
priority: number;
|
|
5351
|
+
startsAt?: string;
|
|
5352
|
+
endsAt?: string;
|
|
5353
|
+
reason: string;
|
|
5354
|
+
}
|
|
5355
|
+
interface FeatureFlagRuleEditRequest {
|
|
5356
|
+
ruleId: FeatureFlagIdentifier;
|
|
5357
|
+
rowVersion: string;
|
|
5358
|
+
value: FeatureFlagRuleFormValue;
|
|
5359
|
+
}
|
|
5360
|
+
interface FeatureFlagRuleDeactivateRequest {
|
|
5361
|
+
ruleId: FeatureFlagIdentifier;
|
|
5362
|
+
rowVersion: string;
|
|
5363
|
+
reason: string;
|
|
5364
|
+
}
|
|
5365
|
+
interface FeatureFlagManagementPageProps {
|
|
5366
|
+
/** Immutable feature catalog, including parent-child relationships. */
|
|
5367
|
+
definitions: FeatureFlagDefinition[];
|
|
5368
|
+
/** Controlled rule list. Successful mutations must be reflected by the host. */
|
|
5369
|
+
rules: FeatureFlagRule[];
|
|
5370
|
+
/** Controlled account and audience options. */
|
|
5371
|
+
targetOptions: FeatureFlagTargetOptions;
|
|
5372
|
+
loading?: boolean;
|
|
5373
|
+
error?: string;
|
|
5374
|
+
onRetry?: () => void;
|
|
5375
|
+
/** Host mutation state. It disables all mutation controls. */
|
|
5376
|
+
submitting?: boolean;
|
|
5377
|
+
/** Controlled user-search results are returned through `targetOptions.users`. */
|
|
5378
|
+
onSearchUsers?: (query: string, accountId?: FeatureFlagIdentifier) => void | Promise<void>;
|
|
5379
|
+
userSearchLoading?: boolean;
|
|
5380
|
+
userSearchError?: string;
|
|
5381
|
+
/** Called when an account selection needs account-scoped audience options from the host. */
|
|
5382
|
+
onAccountChange?: (accountId?: FeatureFlagIdentifier) => void | Promise<void>;
|
|
5383
|
+
audienceLoading?: boolean;
|
|
5384
|
+
audienceError?: string;
|
|
5385
|
+
onCreateRule?: (value: FeatureFlagRuleFormValue) => void | Promise<void>;
|
|
5386
|
+
onEditRule?: (request: FeatureFlagRuleEditRequest) => void | Promise<void>;
|
|
5387
|
+
onDeactivateRule?: (request: FeatureFlagRuleDeactivateRequest) => void | Promise<void>;
|
|
5388
|
+
className?: string;
|
|
5389
|
+
}
|
|
5390
|
+
/**
|
|
5391
|
+
* Presentation-only feature catalog and targeting-rule manager.
|
|
5392
|
+
*
|
|
5393
|
+
* The host owns authentication, authorization, persistence, effective-flag evaluation,
|
|
5394
|
+
* generated API types, and conversion to wire-level audience/effect values.
|
|
5395
|
+
*/
|
|
5396
|
+
declare const FeatureFlagManagementPage: {
|
|
5397
|
+
({ definitions, rules, targetOptions, loading, error, onRetry, submitting, onSearchUsers, userSearchLoading, userSearchError, onAccountChange, audienceLoading, audienceError, onCreateRule, onEditRule, onDeactivateRule, className, }: FeatureFlagManagementPageProps): React.JSX.Element;
|
|
5398
|
+
displayName: string;
|
|
5399
|
+
};
|
|
5400
|
+
|
|
2370
5401
|
type GroupTravelRequestFieldValue = string | number | boolean | undefined;
|
|
2371
5402
|
type GroupTravelRequestValues = Record<string, GroupTravelRequestFieldValue>;
|
|
2372
5403
|
interface GroupTravelRequestContact {
|
|
@@ -2396,38 +5427,339 @@ declare const GroupTravelRequestPage: {
|
|
|
2396
5427
|
};
|
|
2397
5428
|
|
|
2398
5429
|
type TabKey = 'requested' | 'current' | 'past';
|
|
5430
|
+
interface IndividualTravelFilters {
|
|
5431
|
+
search: string;
|
|
5432
|
+
sport: string;
|
|
5433
|
+
traveler: string;
|
|
5434
|
+
travelDateFrom: string;
|
|
5435
|
+
travelDateTo: string;
|
|
5436
|
+
destination: string;
|
|
5437
|
+
vendor: string;
|
|
5438
|
+
confirmation: string;
|
|
5439
|
+
amountMin: string;
|
|
5440
|
+
amountMax: string;
|
|
5441
|
+
}
|
|
5442
|
+
interface IndividualTravelPagination {
|
|
5443
|
+
page: number;
|
|
5444
|
+
pageSize: number;
|
|
5445
|
+
totalCount: number;
|
|
5446
|
+
totalPages: number;
|
|
5447
|
+
}
|
|
5448
|
+
type IndividualTravelTabCounts = Partial<Record<TabKey, number>>;
|
|
5449
|
+
type IndividualTravelExportScope = 'all' | TabKey;
|
|
5450
|
+
interface IndividualTravelExportRequest {
|
|
5451
|
+
scope: IndividualTravelExportScope;
|
|
5452
|
+
activeTab: TabKey;
|
|
5453
|
+
filters: IndividualTravelFilters;
|
|
5454
|
+
}
|
|
2399
5455
|
interface IndividualTravelPageProps {
|
|
2400
|
-
/**
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
5456
|
+
/**
|
|
5457
|
+
* Active server-provided page of rows. When supplied, filtering and paging are
|
|
5458
|
+
* delegated to the host through the controlled callbacks below.
|
|
5459
|
+
*/
|
|
5460
|
+
trips?: TripData[];
|
|
5461
|
+
/** Counts for each enabled tab, independent from the current server page. */
|
|
5462
|
+
tabCounts?: IndividualTravelTabCounts;
|
|
5463
|
+
/** Enabled tabs. Defaults to the production-backed current and past views. */
|
|
5464
|
+
enabledTabs?: TabKey[];
|
|
5465
|
+
/** Controlled active tab. */
|
|
5466
|
+
activeTab?: TabKey;
|
|
5467
|
+
/** Called when the user selects a tab. */
|
|
5468
|
+
onTabChange?: (tab: TabKey) => void;
|
|
5469
|
+
/** Controlled server filters. */
|
|
5470
|
+
filters?: Partial<IndividualTravelFilters>;
|
|
5471
|
+
/** Initial filters for uncontrolled/legacy mode. */
|
|
5472
|
+
defaultFilters?: Partial<IndividualTravelFilters>;
|
|
5473
|
+
/** Called with the complete next filter set. Hosts normally debounce requests. */
|
|
5474
|
+
onFiltersChange?: (filters: IndividualTravelFilters) => void;
|
|
5475
|
+
/** Controlled server pagination. */
|
|
5476
|
+
pagination?: IndividualTravelPagination;
|
|
5477
|
+
/** Called when the user requests another page. */
|
|
5478
|
+
onPageChange?: (page: number) => void;
|
|
5479
|
+
/** Initial data load. */
|
|
5480
|
+
loading?: boolean;
|
|
5481
|
+
/** Background refresh while existing rows remain visible. */
|
|
5482
|
+
refreshing?: boolean;
|
|
5483
|
+
/** Load error displayed instead of the table. */
|
|
5484
|
+
error?: ReactNode;
|
|
5485
|
+
/** Optional retry action for a load error. */
|
|
5486
|
+
onRetry?: () => void;
|
|
5487
|
+
/** Host-controlled export state. */
|
|
5488
|
+
exporting?: boolean;
|
|
5489
|
+
/**
|
|
5490
|
+
* Preferred export callback. It receives the tab and filters needed to export
|
|
5491
|
+
* the same controlled view the user sees.
|
|
5492
|
+
*/
|
|
5493
|
+
onExportFiltered?: (request: IndividualTravelExportRequest) => void | Promise<void>;
|
|
5494
|
+
/** Preferred booked-trip callback. Receives the stable controlled row. */
|
|
5495
|
+
onSelectTrip?: (trip: TripData) => void;
|
|
5496
|
+
/** Preferred requested-trip callback. Receives the stable controlled row. */
|
|
5497
|
+
onSelectRequest?: (trip: TripData) => void;
|
|
5498
|
+
/** Optional handoff to a real host-owned request route. Hidden when absent. */
|
|
5499
|
+
onCreateRequest?: () => void;
|
|
5500
|
+
/** Message used when the active, unfiltered source is empty. */
|
|
5501
|
+
emptyMessage?: string;
|
|
5502
|
+
/** Accessible label for the primary search field. */
|
|
5503
|
+
searchLabel?: string;
|
|
5504
|
+
/** Placeholder for the primary search field. */
|
|
5505
|
+
searchPlaceholder?: string;
|
|
5506
|
+
/** @deprecated Use `trips` with controlled tab/filter/pagination props. */
|
|
5507
|
+
currentTrips?: TripData[];
|
|
5508
|
+
/** @deprecated Use `trips` with controlled tab/filter/pagination props. */
|
|
5509
|
+
pastTrips?: TripData[];
|
|
5510
|
+
/**
|
|
5511
|
+
* @deprecated Use `trips` and explicitly enable `requested` only when a real
|
|
5512
|
+
* requested-trip source and detail handler exist.
|
|
5513
|
+
*/
|
|
5514
|
+
requestedTrips?: TripData[];
|
|
5515
|
+
/** Sport options for the filter. `All Sports` is added automatically. */
|
|
2407
5516
|
sportOptions?: FilterOption[];
|
|
2408
|
-
/** Traveler options for filter */
|
|
5517
|
+
/** Traveler options for the filter. `All Travelers` is added automatically. */
|
|
2409
5518
|
travelerOptions?: FilterOption[];
|
|
2410
|
-
/**
|
|
5519
|
+
/** @deprecated Prefer controlled `activeTab`. */
|
|
2411
5520
|
initialTab?: TabKey;
|
|
2412
|
-
/** Table density */
|
|
5521
|
+
/** Table density. */
|
|
2413
5522
|
density?: 'comfortable' | 'compact';
|
|
2414
|
-
/** Vendor display mode */
|
|
5523
|
+
/** Vendor display mode. */
|
|
2415
5524
|
vendorMode?: 'icon' | 'code';
|
|
2416
|
-
/** Use service column
|
|
5525
|
+
/** Use a unified service column. */
|
|
2417
5526
|
useServiceColumn?: boolean;
|
|
2418
|
-
/**
|
|
5527
|
+
/** @deprecated Prefer `onSelectTrip`. */
|
|
2419
5528
|
onViewTrip?: (id: string) => void;
|
|
2420
|
-
/**
|
|
5529
|
+
/** @deprecated Prefer `onSelectRequest`. */
|
|
2421
5530
|
onViewRequest?: (id: string) => void;
|
|
2422
|
-
/**
|
|
2423
|
-
|
|
2424
|
-
|
|
5531
|
+
/**
|
|
5532
|
+
* Legacy export callback. It remains async-capable but cannot receive filters
|
|
5533
|
+
* or export the requested tab. Prefer `onExportFiltered`.
|
|
5534
|
+
* @deprecated
|
|
5535
|
+
*/
|
|
5536
|
+
onExport?: (scope: 'all' | 'current' | 'past') => void | Promise<void>;
|
|
5537
|
+
/** Show traveler scope information for standard users. */
|
|
2425
5538
|
showTravelerScopeInfo?: boolean;
|
|
2426
|
-
/** Additional CSS class */
|
|
5539
|
+
/** Additional CSS class. */
|
|
2427
5540
|
className?: string;
|
|
2428
5541
|
}
|
|
2429
5542
|
declare const IndividualTravelPage: React__default.FC<IndividualTravelPageProps>;
|
|
2430
5543
|
|
|
5544
|
+
/** Travel services represented by the legacy individual-request record. */
|
|
5545
|
+
type IndividualTravelRequestService = 'air' | 'hotel' | 'car' | 'bus';
|
|
5546
|
+
type IndividualTravelRequestTravelerType = 'self' | 'other';
|
|
5547
|
+
type IndividualTravelRequestAirTripType = 'one-way' | 'round-trip' | 'multi-leg';
|
|
5548
|
+
type IndividualTravelRequestQuestionType = 'text' | 'yes-no' | 'single-select';
|
|
5549
|
+
interface IndividualTravelRequestOption {
|
|
5550
|
+
value: string;
|
|
5551
|
+
label: string;
|
|
5552
|
+
}
|
|
5553
|
+
/**
|
|
5554
|
+
* Display-only identity for the authenticated traveler. The host remains
|
|
5555
|
+
* responsible for deriving the submitting user and self traveler from auth.
|
|
5556
|
+
*/
|
|
5557
|
+
interface IndividualTravelRequestCurrentTraveler {
|
|
5558
|
+
displayName: string;
|
|
5559
|
+
email?: string;
|
|
5560
|
+
}
|
|
5561
|
+
interface IndividualTravelRequestTraveler {
|
|
5562
|
+
firstName: string;
|
|
5563
|
+
middleName?: string;
|
|
5564
|
+
lastName: string;
|
|
5565
|
+
dateOfBirth?: string;
|
|
5566
|
+
gender?: string;
|
|
5567
|
+
}
|
|
5568
|
+
interface IndividualTravelRequestQuestion {
|
|
5569
|
+
id: string;
|
|
5570
|
+
label: string;
|
|
5571
|
+
type: IndividualTravelRequestQuestionType;
|
|
5572
|
+
description?: string;
|
|
5573
|
+
required?: boolean;
|
|
5574
|
+
minLength?: number;
|
|
5575
|
+
maxLength?: number;
|
|
5576
|
+
options?: IndividualTravelRequestOption[];
|
|
5577
|
+
defaultValue?: string | boolean;
|
|
5578
|
+
}
|
|
5579
|
+
interface IndividualTravelRequestAirLeg {
|
|
5580
|
+
departureLocation: string;
|
|
5581
|
+
arrivalLocation: string;
|
|
5582
|
+
departureDate: string;
|
|
5583
|
+
departureTime: string;
|
|
5584
|
+
/** Used by a round-trip request. Multi-leg trips use another leg instead. */
|
|
5585
|
+
returnDate?: string;
|
|
5586
|
+
returnTime?: string;
|
|
5587
|
+
}
|
|
5588
|
+
interface IndividualTravelRequestAirRequest {
|
|
5589
|
+
tripType: IndividualTravelRequestAirTripType;
|
|
5590
|
+
legs: IndividualTravelRequestAirLeg[];
|
|
5591
|
+
details?: string;
|
|
5592
|
+
farePreference?: string;
|
|
5593
|
+
flightPreference?: string;
|
|
5594
|
+
preferredAirline?: string;
|
|
5595
|
+
priority?: string;
|
|
5596
|
+
}
|
|
5597
|
+
interface IndividualTravelRequestHotelLeg {
|
|
5598
|
+
city: string;
|
|
5599
|
+
checkInDate: string;
|
|
5600
|
+
checkOutDate: string;
|
|
5601
|
+
}
|
|
5602
|
+
interface IndividualTravelRequestHotelRequest {
|
|
5603
|
+
legs: IndividualTravelRequestHotelLeg[];
|
|
5604
|
+
bedPreference?: string;
|
|
5605
|
+
smokingPreference?: string;
|
|
5606
|
+
preferredHotel?: string;
|
|
5607
|
+
}
|
|
5608
|
+
interface IndividualTravelRequestCarLeg {
|
|
5609
|
+
pickupCity: string;
|
|
5610
|
+
pickupLocation?: string;
|
|
5611
|
+
pickupDate: string;
|
|
5612
|
+
/** Exact local time in 24-hour `HH:MM` form. */
|
|
5613
|
+
pickupTime: string;
|
|
5614
|
+
dropoffLocation?: string;
|
|
5615
|
+
dropoffDate: string;
|
|
5616
|
+
/** Exact local time in 24-hour `HH:MM` form. */
|
|
5617
|
+
dropoffTime: string;
|
|
5618
|
+
}
|
|
5619
|
+
interface IndividualTravelRequestCarRequest {
|
|
5620
|
+
legs: IndividualTravelRequestCarLeg[];
|
|
5621
|
+
vehicleType?: string;
|
|
5622
|
+
rentalCompany?: string;
|
|
5623
|
+
flightNumberOrTailNumber?: string;
|
|
5624
|
+
}
|
|
5625
|
+
interface IndividualTravelRequestBusRequest {
|
|
5626
|
+
pickupCity?: string;
|
|
5627
|
+
pickupLocation?: string;
|
|
5628
|
+
pickupDateTime?: string;
|
|
5629
|
+
dropoffCity?: string;
|
|
5630
|
+
dropoffLocation?: string;
|
|
5631
|
+
dropoffDateTime?: string;
|
|
5632
|
+
vehicleType?: string;
|
|
5633
|
+
specialRequests?: string;
|
|
5634
|
+
}
|
|
5635
|
+
type IndividualTravelRequestAnswerValue = string | boolean;
|
|
5636
|
+
/**
|
|
5637
|
+
* Host-submittable request values. Account and actor IDs are deliberately not
|
|
5638
|
+
* represented; the server must derive them from the authenticated context.
|
|
5639
|
+
*/
|
|
5640
|
+
interface IndividualTravelRequestValues {
|
|
5641
|
+
travelerType: IndividualTravelRequestTravelerType;
|
|
5642
|
+
/** Empty for self; populated only when travelerType is `other`. */
|
|
5643
|
+
travelers: IndividualTravelRequestTraveler[];
|
|
5644
|
+
/** Comma-delimited when emitted. The form also accepts semicolon input. */
|
|
5645
|
+
additionalEmails?: string;
|
|
5646
|
+
organizationAnswers: Record<string, string>;
|
|
5647
|
+
billingAnswers: Record<string, IndividualTravelRequestAnswerValue>;
|
|
5648
|
+
airRequest?: IndividualTravelRequestAirRequest;
|
|
5649
|
+
hotelRequest?: IndividualTravelRequestHotelRequest;
|
|
5650
|
+
carRequest?: IndividualTravelRequestCarRequest;
|
|
5651
|
+
busRequest?: IndividualTravelRequestBusRequest;
|
|
5652
|
+
specialRequests?: string;
|
|
5653
|
+
}
|
|
5654
|
+
interface IndividualTravelRequestFormConfiguration {
|
|
5655
|
+
organizationQuestions?: IndividualTravelRequestQuestion[];
|
|
5656
|
+
billingQuestions?: IndividualTravelRequestQuestion[];
|
|
5657
|
+
airlineOptions?: IndividualTravelRequestOption[];
|
|
5658
|
+
timeOptions?: IndividualTravelRequestOption[];
|
|
5659
|
+
fareOptions?: IndividualTravelRequestOption[];
|
|
5660
|
+
flightPreferenceOptions?: IndividualTravelRequestOption[];
|
|
5661
|
+
airPriorityOptions?: IndividualTravelRequestOption[];
|
|
5662
|
+
hotelOptions?: IndividualTravelRequestOption[];
|
|
5663
|
+
bedOptions?: IndividualTravelRequestOption[];
|
|
5664
|
+
smokingOptions?: IndividualTravelRequestOption[];
|
|
5665
|
+
vehicleOptions?: IndividualTravelRequestOption[];
|
|
5666
|
+
rentalCompanyOptions?: IndividualTravelRequestOption[];
|
|
5667
|
+
busVehicleOptions?: IndividualTravelRequestOption[];
|
|
5668
|
+
genderOptions?: IndividualTravelRequestOption[];
|
|
5669
|
+
/** Defaults to the currently verified air, hotel, and car request UI. */
|
|
5670
|
+
enabledServices?: IndividualTravelRequestService[];
|
|
5671
|
+
/** The host must authorize this capability. Defaults to false. */
|
|
5672
|
+
allowOtherTravelers?: boolean;
|
|
5673
|
+
/** Capped at the legacy maximum of 10. */
|
|
5674
|
+
maxTravelers?: number;
|
|
5675
|
+
/** Capped at the legacy maximum of four per service. */
|
|
5676
|
+
maxSegments?: number;
|
|
5677
|
+
}
|
|
5678
|
+
interface IndividualTravelRequestLabeledAnswer {
|
|
5679
|
+
id: string;
|
|
5680
|
+
label: string;
|
|
5681
|
+
value: IndividualTravelRequestAnswerValue;
|
|
5682
|
+
}
|
|
5683
|
+
interface IndividualTravelRequestSubmitter {
|
|
5684
|
+
name: string;
|
|
5685
|
+
email?: string;
|
|
5686
|
+
phone?: string;
|
|
5687
|
+
}
|
|
5688
|
+
/** Read-only detail model; all identity values are display text, never IDs. */
|
|
5689
|
+
interface IndividualTravelRequestDetail {
|
|
5690
|
+
requestId: string;
|
|
5691
|
+
submittedAt: string;
|
|
5692
|
+
completedAt?: string;
|
|
5693
|
+
submittedBy?: IndividualTravelRequestSubmitter;
|
|
5694
|
+
travelerType: IndividualTravelRequestTravelerType;
|
|
5695
|
+
travelers: IndividualTravelRequestTraveler[];
|
|
5696
|
+
additionalEmails?: string;
|
|
5697
|
+
organizationAnswers?: IndividualTravelRequestLabeledAnswer[];
|
|
5698
|
+
billingAnswers?: IndividualTravelRequestLabeledAnswer[];
|
|
5699
|
+
airRequest?: IndividualTravelRequestAirRequest;
|
|
5700
|
+
hotelRequest?: IndividualTravelRequestHotelRequest;
|
|
5701
|
+
carRequest?: IndividualTravelRequestCarRequest;
|
|
5702
|
+
busRequest?: IndividualTravelRequestBusRequest;
|
|
5703
|
+
specialRequests?: string;
|
|
5704
|
+
}
|
|
5705
|
+
|
|
5706
|
+
interface IndividualTravelRequestFormPageProps {
|
|
5707
|
+
/** Authenticated traveler display data. The component never emits an actor ID. */
|
|
5708
|
+
currentTraveler: IndividualTravelRequestCurrentTraveler;
|
|
5709
|
+
/** Account-aware questions and options loaded by the host. */
|
|
5710
|
+
configuration: IndividualTravelRequestFormConfiguration;
|
|
5711
|
+
/** Controlled form values. */
|
|
5712
|
+
values?: IndividualTravelRequestValues;
|
|
5713
|
+
/** Initial values for uncontrolled use. */
|
|
5714
|
+
initialValues?: Partial<IndividualTravelRequestValues>;
|
|
5715
|
+
/** Called with the complete next form value in controlled or uncontrolled use. */
|
|
5716
|
+
onChange?: (values: IndividualTravelRequestValues) => void;
|
|
5717
|
+
/** Hidden when absent; the remaining form is disabled and clearly read-only. */
|
|
5718
|
+
onSubmit?: (values: IndividualTravelRequestValues) => void | Promise<void>;
|
|
5719
|
+
/** Optional host-owned return/cancel route. */
|
|
5720
|
+
onCancel?: () => void;
|
|
5721
|
+
/** Configuration or initial-page loading state. */
|
|
5722
|
+
loading?: boolean;
|
|
5723
|
+
/** Host-controlled submit state. */
|
|
5724
|
+
submitting?: boolean;
|
|
5725
|
+
/** Load or submit error from the host. */
|
|
5726
|
+
error?: ReactNode;
|
|
5727
|
+
/** Server validation errors keyed with the form paths documented by this page. */
|
|
5728
|
+
fieldErrors?: Record<string, string>;
|
|
5729
|
+
/** Optional retry for a failed host operation. */
|
|
5730
|
+
onRetry?: () => void;
|
|
5731
|
+
/** Optional account-specific fee or response-time notice. */
|
|
5732
|
+
notice?: ReactNode;
|
|
5733
|
+
submitLabel?: string;
|
|
5734
|
+
className?: string;
|
|
5735
|
+
}
|
|
5736
|
+
declare const IndividualTravelRequestFormPage: React__default.FC<IndividualTravelRequestFormPageProps>;
|
|
5737
|
+
|
|
5738
|
+
interface IndividualTravelRequestDetailPageProps {
|
|
5739
|
+
/** Authorized request detail supplied by the host. */
|
|
5740
|
+
request?: IndividualTravelRequestDetail;
|
|
5741
|
+
/** Replaces request facts while the host loads the authorized record. */
|
|
5742
|
+
loading?: boolean;
|
|
5743
|
+
/** Replaces request facts when the host could not load the record. */
|
|
5744
|
+
error?: ReactNode;
|
|
5745
|
+
/** Important host-owned context shown above a loaded request. */
|
|
5746
|
+
notice?: ReactNode;
|
|
5747
|
+
/** Optional host-owned return route. Hidden when absent. */
|
|
5748
|
+
onBack?: () => void;
|
|
5749
|
+
backLabel?: string;
|
|
5750
|
+
/** Optional retry for a failed host query. Hidden unless an error is present. */
|
|
5751
|
+
onRetry?: () => void;
|
|
5752
|
+
className?: string;
|
|
5753
|
+
}
|
|
5754
|
+
/**
|
|
5755
|
+
* Read-only presentation for an authorized individual-travel request.
|
|
5756
|
+
*
|
|
5757
|
+
* The component performs no routing or lookup and intentionally exposes no
|
|
5758
|
+
* approve, edit, cancel, or email actions. Authorization and tenant scope stay
|
|
5759
|
+
* with the host that supplies `request`.
|
|
5760
|
+
*/
|
|
5761
|
+
declare const IndividualTravelRequestDetailPage: ({ request, loading, error, notice, onBack, backLabel, onRetry, className, }: IndividualTravelRequestDetailPageProps) => React.JSX.Element;
|
|
5762
|
+
|
|
2431
5763
|
interface InfoCenterArticle {
|
|
2432
5764
|
id: string;
|
|
2433
5765
|
title: string;
|
|
@@ -2478,6 +5810,78 @@ interface InfoCenterPageProps {
|
|
|
2478
5810
|
*/
|
|
2479
5811
|
declare const InfoCenterPage: ({ title, accountName, articles, state, isAdmin, onAddArticle, onEditArticle, onOpenExternal, className, showBreadcrumb, homeHref, initialArticleId, onInitialArticleOpen, }: InfoCenterPageProps) => React.JSX.Element;
|
|
2480
5812
|
|
|
5813
|
+
/** The travel team contact shown alongside the itinerary. */
|
|
5814
|
+
interface ItineraryAgent {
|
|
5815
|
+
/** Agent or team name */
|
|
5816
|
+
name: string;
|
|
5817
|
+
/** Role, e.g. `Travel Consultant` */
|
|
5818
|
+
role?: string;
|
|
5819
|
+
/** Contact phone number */
|
|
5820
|
+
phone?: string;
|
|
5821
|
+
/** Contact email address */
|
|
5822
|
+
email?: string;
|
|
5823
|
+
}
|
|
5824
|
+
interface ItineraryPageProps {
|
|
5825
|
+
/** Trip name, e.g. `Las Vegas Invitational` */
|
|
5826
|
+
tripName: string;
|
|
5827
|
+
/** Airline record locator / PNR for the trip */
|
|
5828
|
+
recordLocator: string;
|
|
5829
|
+
/** Travelers on the itinerary. A team name can be passed as a single entry. */
|
|
5830
|
+
travelers: string[];
|
|
5831
|
+
/** First travel date as `YYYY-MM-DD` */
|
|
5832
|
+
startDate: string;
|
|
5833
|
+
/** Last travel date as `YYYY-MM-DD` */
|
|
5834
|
+
endDate: string;
|
|
5835
|
+
/** Every air, car and hotel booking on the trip */
|
|
5836
|
+
segments: ItinerarySegment[];
|
|
5837
|
+
/** Overall booking state shown next to the trip name */
|
|
5838
|
+
status?: ItinerarySegmentStatus;
|
|
5839
|
+
/** Sport or program code, e.g. `MBB` */
|
|
5840
|
+
sportCode?: string;
|
|
5841
|
+
/** Total trip cost; when omitted the cost summary is hidden */
|
|
5842
|
+
totalCost?: number;
|
|
5843
|
+
/** ISO 4217 currency code for all amounts on the page */
|
|
5844
|
+
currency?: string;
|
|
5845
|
+
/** Travel team contact for the trip */
|
|
5846
|
+
agent?: ItineraryAgent;
|
|
5847
|
+
/** Shows the loading state in place of the timeline */
|
|
5848
|
+
loading?: boolean;
|
|
5849
|
+
/** Message shown in place of the timeline when the itinerary could not be loaded */
|
|
5850
|
+
error?: ReactNode;
|
|
5851
|
+
/** Important host-owned context shown above the timeline without replacing it */
|
|
5852
|
+
notice?: ReactNode;
|
|
5853
|
+
/** Called when the traveler retries a failed itinerary load */
|
|
5854
|
+
onRetry?: () => void;
|
|
5855
|
+
/** Called when the traveler returns to the individual-travel list */
|
|
5856
|
+
onBack?: () => void;
|
|
5857
|
+
/** Accessible text for the optional return action */
|
|
5858
|
+
backLabel?: string;
|
|
5859
|
+
/** Called when the traveler prints the itinerary */
|
|
5860
|
+
onPrint?: () => void;
|
|
5861
|
+
/** Called when the traveler emails the itinerary */
|
|
5862
|
+
onEmail?: () => void;
|
|
5863
|
+
/** Called when the traveler adds the trip to their calendar */
|
|
5864
|
+
onAddToCalendar?: () => void;
|
|
5865
|
+
/** Called when the traveler opens the PDF virtual invoice */
|
|
5866
|
+
onDownloadInvoice?: () => void;
|
|
5867
|
+
/** Called when a traveler starts online check-in for a flight */
|
|
5868
|
+
onCheckIn?: (segment: ItineraryAirSegment) => void;
|
|
5869
|
+
/** Additional CSS class */
|
|
5870
|
+
className?: string;
|
|
5871
|
+
}
|
|
5872
|
+
/**
|
|
5873
|
+
* ItineraryPage — the traveler-facing itinerary for a single trip.
|
|
5874
|
+
*
|
|
5875
|
+
* Shows who is travelling, when, and every flight, rental car and hotel stay in
|
|
5876
|
+
* day order, together with the actions the Portal itinerary offers today: print
|
|
5877
|
+
* it, email it, add it to a calendar, or open the PDF invoice. The page holds no
|
|
5878
|
+
* data of its own — everything arrives as props.
|
|
5879
|
+
*/
|
|
5880
|
+
declare const ItineraryPage: {
|
|
5881
|
+
({ tripName, recordLocator, travelers, startDate, endDate, segments, status, sportCode, totalCost, currency, agent, loading, error, notice, onRetry, onBack, backLabel, onPrint, onEmail, onAddToCalendar, onDownloadInvoice, onCheckIn, className, }: ItineraryPageProps): React.JSX.Element;
|
|
5882
|
+
displayName: string;
|
|
5883
|
+
};
|
|
5884
|
+
|
|
2481
5885
|
interface NotFoundPageProps {
|
|
2482
5886
|
/** Error code to display */
|
|
2483
5887
|
errorCode?: string | number;
|
|
@@ -2506,6 +5910,262 @@ declare const NotFoundPage: {
|
|
|
2506
5910
|
displayName: string;
|
|
2507
5911
|
};
|
|
2508
5912
|
|
|
5913
|
+
/** One (raw text → corrected JSON) pair appended to future extraction prompts. */
|
|
5914
|
+
interface OffFleetLearnedExample {
|
|
5915
|
+
/** Stable id used as the React key. */
|
|
5916
|
+
id: string;
|
|
5917
|
+
/** Operator the example is scoped to — examples only apply to the same operator. */
|
|
5918
|
+
operator: string;
|
|
5919
|
+
/** File the correction came from. */
|
|
5920
|
+
sourceFileName: string;
|
|
5921
|
+
/** When the correction was reprocessed, e.g. "3d ago". */
|
|
5922
|
+
learnedLabel: string;
|
|
5923
|
+
/** The raw document text, rendered verbatim. */
|
|
5924
|
+
rawText: string;
|
|
5925
|
+
/** The corrected JSON, rendered verbatim. */
|
|
5926
|
+
correctedJson: string;
|
|
5927
|
+
}
|
|
5928
|
+
interface OffFleetLearnedExamplesPageProps {
|
|
5929
|
+
/** Examples in the corpus. An empty array is the expected starting state. */
|
|
5930
|
+
examples?: OffFleetLearnedExample[];
|
|
5931
|
+
/** Fired with the example id when one is opened in full. */
|
|
5932
|
+
onOpenExample?: (exampleId: string) => void;
|
|
5933
|
+
/** Additional CSS class, appended last. */
|
|
5934
|
+
className?: string;
|
|
5935
|
+
}
|
|
5936
|
+
/** What the corpus is for and which requirement it satisfies. */
|
|
5937
|
+
declare const OFF_FLEET_LEARNED_DESCRIPTION = "Every correction submitted through this site is saved as a (raw text \u2192 corrected JSON) pair and appended to future extraction prompts for the same operator. This is ITD-8195\u2019s fourth requirement \u2014 the mechanism that is supposed to stop the same document format coming back to review week after week.";
|
|
5938
|
+
/** Why the corpus is empty until the first correction is reprocessed. */
|
|
5939
|
+
declare const OFF_FLEET_LEARNED_EMPTY_COPY = "The corpus starts empty and only /api/Reprocess writes to it, so the first row appears after the first correction is reprocessed from this site. Until then every extraction runs on the base prompt alone.";
|
|
5940
|
+
/**
|
|
5941
|
+
* Learned examples — the corrections corpus. The empty state explains the mechanism
|
|
5942
|
+
* rather than apologising, because an empty corpus is the correct starting state.
|
|
5943
|
+
*/
|
|
5944
|
+
declare const OffFleetLearnedExamplesPage: {
|
|
5945
|
+
({ examples, onOpenExample, className, }: OffFleetLearnedExamplesPageProps): React.JSX.Element;
|
|
5946
|
+
displayName: string;
|
|
5947
|
+
};
|
|
5948
|
+
|
|
5949
|
+
/** Where an off-fleet submission sits in the parser pipeline. */
|
|
5950
|
+
type OffFleetSubmissionStatus = 'needs-review' | 'received' | 'processing' | 'parsed';
|
|
5951
|
+
/** One carrier quote the parser could not reconcile against a Trip quote record. */
|
|
5952
|
+
interface OffFleetSubmission {
|
|
5953
|
+
/** Submission UUID — the row key. */
|
|
5954
|
+
id: string;
|
|
5955
|
+
/** Original document file name. */
|
|
5956
|
+
fileName: string;
|
|
5957
|
+
/** Flight Program GUID the submission was filed against. */
|
|
5958
|
+
flightProgramGuid: string;
|
|
5959
|
+
/**
|
|
5960
|
+
* Why the parser could not finish. Rendered verbatim and in full — never truncated,
|
|
5961
|
+
* because the exact list of unmatched flights is what the reviewer acts on.
|
|
5962
|
+
*/
|
|
5963
|
+
failureReason: string;
|
|
5964
|
+
/** Resolved carrier name, or undefined when only a GUID is known. */
|
|
5965
|
+
carrierName?: string;
|
|
5966
|
+
/** Carrier GUID, shown when the name could not be resolved. */
|
|
5967
|
+
carrierGuid?: string;
|
|
5968
|
+
/** Pipeline status. */
|
|
5969
|
+
status: OffFleetSubmissionStatus;
|
|
5970
|
+
/** True when the raw document text was captured. */
|
|
5971
|
+
hasRawText?: boolean;
|
|
5972
|
+
/** True when the model's extraction JSON was stored. */
|
|
5973
|
+
hasExtraction?: boolean;
|
|
5974
|
+
/** Human relative time since the last update, e.g. "16h ago". */
|
|
5975
|
+
updatedLabel: string;
|
|
5976
|
+
}
|
|
5977
|
+
interface OffFleetReviewQueuePageProps {
|
|
5978
|
+
/** Submissions to list. */
|
|
5979
|
+
submissions: OffFleetSubmission[];
|
|
5980
|
+
/** Counts for the stat tiles; derived from `submissions` when omitted. */
|
|
5981
|
+
counts?: Partial<Record<OffFleetSubmissionStatus | 'all', number>>;
|
|
5982
|
+
/** Fired with the submission id when Review is pressed. */
|
|
5983
|
+
onReview?: (submissionId: string) => void;
|
|
5984
|
+
/** Fired when the raw document text is opened. */
|
|
5985
|
+
onOpenRawText?: (submissionId: string) => void;
|
|
5986
|
+
/** Fired when the stored extraction JSON is opened. */
|
|
5987
|
+
onOpenExtraction?: (submissionId: string) => void;
|
|
5988
|
+
/** Shows the table's loading row instead of data. */
|
|
5989
|
+
loading?: boolean;
|
|
5990
|
+
/** Additional CSS class, appended last. */
|
|
5991
|
+
className?: string;
|
|
5992
|
+
}
|
|
5993
|
+
/** Copy explaining what lands in this queue and why nothing here dies silently. */
|
|
5994
|
+
declare const OFF_FLEET_QUEUE_DESCRIPTION = "Off-fleet carrier quotes the parser could not reconcile against existing Trip quote records. Each one keeps the raw document text and whatever the model extracted, so it can be corrected and reprocessed rather than dying silently.";
|
|
5995
|
+
/**
|
|
5996
|
+
* Off-fleet review queue. Failure reasons render in full inside the Submission cell —
|
|
5997
|
+
* a reviewer cannot decide what to correct from the word "Error".
|
|
5998
|
+
*/
|
|
5999
|
+
declare const OffFleetReviewQueuePage: {
|
|
6000
|
+
({ submissions, counts, onReview, onOpenRawText, onOpenExtraction, loading, className, }: OffFleetReviewQueuePageProps): React.JSX.Element;
|
|
6001
|
+
displayName: string;
|
|
6002
|
+
};
|
|
6003
|
+
|
|
6004
|
+
/** How the stated prices group onto legs. Changing this changes every per-leg price. */
|
|
6005
|
+
type OffFleetPriceBasis = 'per_segment' | 'per_round_trip' | 'trip_total';
|
|
6006
|
+
/** Whether a leg was matched to a Trip segment, and how. */
|
|
6007
|
+
type OffFleetLegMatch = 'unmatched' | 'ferry' | 'matched';
|
|
6008
|
+
/** A Trip segment the parser could have matched a leg against. */
|
|
6009
|
+
interface OffFleetTripSegment {
|
|
6010
|
+
/** Stable id used as the React key. */
|
|
6011
|
+
id: string;
|
|
6012
|
+
/** Departure date, ISO `yyyy-mm-dd`. */
|
|
6013
|
+
departs: string;
|
|
6014
|
+
/** Departure airport code. */
|
|
6015
|
+
origin: string;
|
|
6016
|
+
/** Arrival airport code. */
|
|
6017
|
+
destination: string;
|
|
6018
|
+
/** Trip GUID the segment belongs to. */
|
|
6019
|
+
tripGuid: string;
|
|
6020
|
+
}
|
|
6021
|
+
/** One leg of the quote — one takeoff, one landing. */
|
|
6022
|
+
interface OffFleetLeg {
|
|
6023
|
+
/** Stable id used as the React key. */
|
|
6024
|
+
id: string;
|
|
6025
|
+
/** How this leg matched a Trip segment. */
|
|
6026
|
+
match: OffFleetLegMatch;
|
|
6027
|
+
/** Flight date, ISO `yyyy-mm-dd`. */
|
|
6028
|
+
date: string;
|
|
6029
|
+
/** Departure airport code. */
|
|
6030
|
+
from: string;
|
|
6031
|
+
/** Arrival airport code. */
|
|
6032
|
+
to: string;
|
|
6033
|
+
/** Scheduled departure time, `HH:mm`. */
|
|
6034
|
+
etd: string;
|
|
6035
|
+
/** Scheduled arrival time, `HH:mm`. */
|
|
6036
|
+
eta: string;
|
|
6037
|
+
/** Equipment for this leg. */
|
|
6038
|
+
aircraft: string;
|
|
6039
|
+
/** Seats on this leg. */
|
|
6040
|
+
seats: string;
|
|
6041
|
+
/** Price as stated in the document, before normalization. */
|
|
6042
|
+
price: string;
|
|
6043
|
+
}
|
|
6044
|
+
/** The fields the parser maps onto the Salesforce Flight Quote. */
|
|
6045
|
+
interface OffFleetQuoteHeader {
|
|
6046
|
+
/** Operator as stated in the document. */
|
|
6047
|
+
operator: string;
|
|
6048
|
+
/** School or organisation, only when the document states it explicitly. */
|
|
6049
|
+
charterer: string;
|
|
6050
|
+
/** Date of the quote, not of a flight. ISO `yyyy-mm-dd`. */
|
|
6051
|
+
quoteDate: string;
|
|
6052
|
+
/** ISO 4217 currency code. */
|
|
6053
|
+
currency: string;
|
|
6054
|
+
/** Fuel base price, numeric with no currency symbol. */
|
|
6055
|
+
fuelBasePrice: string;
|
|
6056
|
+
/** Unit price, only when it is distinct from the leg table. */
|
|
6057
|
+
unitPrice: string;
|
|
6058
|
+
/** How the stated prices group onto legs. */
|
|
6059
|
+
priceBasis: OffFleetPriceBasis;
|
|
6060
|
+
/** Total the document states, checked to ±$1 after normalization. */
|
|
6061
|
+
statedTotal: string;
|
|
6062
|
+
}
|
|
6063
|
+
/** One row of the money reconciliation. */
|
|
6064
|
+
interface OffFleetPreflightRow {
|
|
6065
|
+
/** Leg label, e.g. "Leg 1". */
|
|
6066
|
+
leg: string;
|
|
6067
|
+
/** Price as stated in the document. */
|
|
6068
|
+
asStated: string;
|
|
6069
|
+
/** Price assigned to the leg once the price basis is applied. */
|
|
6070
|
+
perLegAfterNormalization: string;
|
|
6071
|
+
}
|
|
6072
|
+
/** Legs grouped by the Trip they will be billed against. */
|
|
6073
|
+
interface OffFleetTripGrouping {
|
|
6074
|
+
/** Trip GUID. */
|
|
6075
|
+
tripGuid: string;
|
|
6076
|
+
/** How many legs land on this Trip. */
|
|
6077
|
+
legCount: number;
|
|
6078
|
+
/** Total for this Trip, formatted. */
|
|
6079
|
+
total: string;
|
|
6080
|
+
}
|
|
6081
|
+
/** A per-leg problem the reviewer can jump to. */
|
|
6082
|
+
interface OffFleetLegDiagnostic {
|
|
6083
|
+
/** Id of the leg the message is about. */
|
|
6084
|
+
legId: string;
|
|
6085
|
+
/** The diagnostic, rendered in full. */
|
|
6086
|
+
message: string;
|
|
6087
|
+
}
|
|
6088
|
+
/** Everything the pre-flight check reports. */
|
|
6089
|
+
interface OffFleetPreflightCheck {
|
|
6090
|
+
/** Per-leg reconciliation rows. */
|
|
6091
|
+
rows: OffFleetPreflightRow[];
|
|
6092
|
+
/** Total across every row, formatted. */
|
|
6093
|
+
total: string;
|
|
6094
|
+
/** How many legs are still unmatched. */
|
|
6095
|
+
unmatchedCount: number;
|
|
6096
|
+
/** How many legs there are in total. */
|
|
6097
|
+
legCount: number;
|
|
6098
|
+
/** Legs grouped by Trip. */
|
|
6099
|
+
tripGroupings: OffFleetTripGrouping[];
|
|
6100
|
+
/** Per-leg problems, each with a jump target. */
|
|
6101
|
+
diagnostics?: OffFleetLegDiagnostic[];
|
|
6102
|
+
/** Warnings that do not block, e.g. ferry-leg matching. */
|
|
6103
|
+
warnings?: string[];
|
|
6104
|
+
}
|
|
6105
|
+
interface OffFleetSubmissionDetailPageProps {
|
|
6106
|
+
/** Submission UUID, shown as the subtitle. */
|
|
6107
|
+
submissionId: string;
|
|
6108
|
+
/** Original document file name, shown as the H1. */
|
|
6109
|
+
fileName: string;
|
|
6110
|
+
/** Status badge next to the back button. */
|
|
6111
|
+
statusLabel?: string;
|
|
6112
|
+
/** Why the submission needs review, rendered verbatim and in full. */
|
|
6113
|
+
failureReason: string;
|
|
6114
|
+
/** The raw text the parser read, OCR damage included. */
|
|
6115
|
+
rawText: string;
|
|
6116
|
+
/** Carrier name as resolved. */
|
|
6117
|
+
carrier: string;
|
|
6118
|
+
/** Carrier Union GUID. */
|
|
6119
|
+
carrierUnion: string;
|
|
6120
|
+
/** Flight Program GUID. */
|
|
6121
|
+
flightProgram: string;
|
|
6122
|
+
/** UTC timestamp the submission was received. */
|
|
6123
|
+
receivedAt: string;
|
|
6124
|
+
/** UTC timestamp of the last update. */
|
|
6125
|
+
updatedAt: string;
|
|
6126
|
+
/** Trip segments available for matching. */
|
|
6127
|
+
tripSegments?: OffFleetTripSegment[];
|
|
6128
|
+
/** The extraction JSON exactly as stored. */
|
|
6129
|
+
extractionJson?: string;
|
|
6130
|
+
/** Quote header values the reviewer can correct. */
|
|
6131
|
+
quoteHeader: OffFleetQuoteHeader;
|
|
6132
|
+
/** Flight legs the reviewer can correct. */
|
|
6133
|
+
legs: OffFleetLeg[];
|
|
6134
|
+
/** Free-text ambiguity reason. */
|
|
6135
|
+
ambiguityReason?: string;
|
|
6136
|
+
/** The money reconciliation panel. */
|
|
6137
|
+
preflight?: OffFleetPreflightCheck;
|
|
6138
|
+
/**
|
|
6139
|
+
* Why the expensive actions are unavailable. When set, both buttons are disabled and
|
|
6140
|
+
* the reason is shown — an action is never disabled without saying why.
|
|
6141
|
+
*/
|
|
6142
|
+
blockedReason?: string;
|
|
6143
|
+
/** Fired with the corrected header, legs, and ambiguity reason. */
|
|
6144
|
+
onCheckCorrection?: (values: {
|
|
6145
|
+
quoteHeader: OffFleetQuoteHeader;
|
|
6146
|
+
legs: OffFleetLeg[];
|
|
6147
|
+
ambiguityReason: string;
|
|
6148
|
+
}) => void;
|
|
6149
|
+
/** Fired when the submission is reprocessed. */
|
|
6150
|
+
onReprocess?: () => void;
|
|
6151
|
+
/** Label for the back link. */
|
|
6152
|
+
backLabel?: string;
|
|
6153
|
+
/** Fired when the back link is pressed. */
|
|
6154
|
+
onBack?: () => void;
|
|
6155
|
+
/** Additional CSS class, appended last. */
|
|
6156
|
+
className?: string;
|
|
6157
|
+
}
|
|
6158
|
+
/**
|
|
6159
|
+
* The off-fleet reviewer. Three properties are load-bearing and deliberate: every input
|
|
6160
|
+
* carries helper text explaining what the field *means* rather than how to format it,
|
|
6161
|
+
* failure reasons and diagnostics render in full, and the expensive actions are disabled
|
|
6162
|
+
* with the reason stated rather than silently greyed out.
|
|
6163
|
+
*/
|
|
6164
|
+
declare const OffFleetSubmissionDetailPage: {
|
|
6165
|
+
({ submissionId, fileName, statusLabel, failureReason, rawText, carrier, carrierUnion, flightProgram, receivedAt, updatedAt, tripSegments, extractionJson, quoteHeader: initialHeader, legs: initialLegs, ambiguityReason: initialAmbiguity, preflight, blockedReason, onCheckCorrection, onReprocess, backLabel, onBack, className, }: OffFleetSubmissionDetailPageProps): React.JSX.Element;
|
|
6166
|
+
displayName: string;
|
|
6167
|
+
};
|
|
6168
|
+
|
|
2509
6169
|
type RosterProgramNumberId = number | string;
|
|
2510
6170
|
interface RosterProgramNumberRow {
|
|
2511
6171
|
id: RosterProgramNumberId;
|
|
@@ -2527,6 +6187,47 @@ declare const RosterProgramNumbersPage: {
|
|
|
2527
6187
|
displayName: string;
|
|
2528
6188
|
};
|
|
2529
6189
|
|
|
6190
|
+
interface RegularSeasonBidsPageProps {
|
|
6191
|
+
/** Flight programs for the selected queue. */
|
|
6192
|
+
bids: CharterFlightProgramBid[];
|
|
6193
|
+
/** Controlled queue selection; omit to let the page own it. */
|
|
6194
|
+
bidType?: RegularSeasonBidType;
|
|
6195
|
+
/** Queue selected on first render when `bidType` is omitted. */
|
|
6196
|
+
defaultBidType?: RegularSeasonBidType;
|
|
6197
|
+
/** Fired with the queue the carrier switched to. */
|
|
6198
|
+
onBidTypeChange?: (bidType: RegularSeasonBidType) => void;
|
|
6199
|
+
/** ACMI carriers may re-bid, so Submit Bid stays available after submission. */
|
|
6200
|
+
acmiCarrier?: boolean;
|
|
6201
|
+
/** "Today" used to decide which rows are expiring soon. */
|
|
6202
|
+
today?: string;
|
|
6203
|
+
/** Label for the back link above the header. */
|
|
6204
|
+
backLabel?: string;
|
|
6205
|
+
/** Fired when the back link is pressed; the link is hidden without it. */
|
|
6206
|
+
onBack?: () => void;
|
|
6207
|
+
/** Fired when Submit Bid is pressed at either level. */
|
|
6208
|
+
onSubmitBid?: (target: CharterBidTarget) => void;
|
|
6209
|
+
/** Fired when View Bid is pressed at either level. */
|
|
6210
|
+
onViewBid?: (target: CharterBidTarget) => void;
|
|
6211
|
+
/** Fired when a single No Bid button is pressed. */
|
|
6212
|
+
onNoBid?: (target: CharterBidTarget) => void;
|
|
6213
|
+
/** Fired with every checked row when "Submit No Bid for Selected" is pressed. */
|
|
6214
|
+
onBulkNoBid?: (targets: CharterBidTarget[]) => void;
|
|
6215
|
+
/** Shows the table's loading row instead of data. */
|
|
6216
|
+
loading?: boolean;
|
|
6217
|
+
/** BCP 47 locale used for date formatting. */
|
|
6218
|
+
locale?: string;
|
|
6219
|
+
/** Additional CSS class, appended last. */
|
|
6220
|
+
className?: string;
|
|
6221
|
+
}
|
|
6222
|
+
/**
|
|
6223
|
+
* Regular Season bid queues — the legacy `RegularSeasonBids/index.cfm` list with its six
|
|
6224
|
+
* status tabs, filters, and two-level accordion, rebuilt as a real page.
|
|
6225
|
+
*/
|
|
6226
|
+
declare const RegularSeasonBidsPage: {
|
|
6227
|
+
({ bids, bidType: controlledBidType, defaultBidType, onBidTypeChange, acmiCarrier, today, backLabel, onBack, onSubmitBid, onViewBid, onNoBid, onBulkNoBid, loading, locale, className, }: RegularSeasonBidsPageProps): React.JSX.Element;
|
|
6228
|
+
displayName: string;
|
|
6229
|
+
};
|
|
6230
|
+
|
|
2530
6231
|
interface RosterReportOption {
|
|
2531
6232
|
id: string;
|
|
2532
6233
|
title: string;
|
|
@@ -2543,6 +6244,77 @@ declare const RosterReportsPage: {
|
|
|
2543
6244
|
displayName: string;
|
|
2544
6245
|
};
|
|
2545
6246
|
|
|
6247
|
+
/** The quote fields an admin may correct in place before approving. */
|
|
6248
|
+
interface SourcingQuoteDraft {
|
|
6249
|
+
/** Operating carrier as it should read on the Flight Quote. */
|
|
6250
|
+
carrier: string;
|
|
6251
|
+
/** Travel party the quote must seat. */
|
|
6252
|
+
passengers: string;
|
|
6253
|
+
/** First revenue departure, ISO `yyyy-mm-dd`. */
|
|
6254
|
+
departureDate: string;
|
|
6255
|
+
/** Cost line items; the quoted total is always derived from these. */
|
|
6256
|
+
lineItems: SourcingCostLineItem[];
|
|
6257
|
+
}
|
|
6258
|
+
interface SourcingQuoteDetailPageProps {
|
|
6259
|
+
/** The quote under review. */
|
|
6260
|
+
quote: SourcingQuote;
|
|
6261
|
+
/** Label for the back link above the header. */
|
|
6262
|
+
backLabel?: string;
|
|
6263
|
+
/** Fired when the back link is pressed. */
|
|
6264
|
+
onBack?: () => void;
|
|
6265
|
+
/** Fired with the corrected quote and every edit that must be persisted before approval. */
|
|
6266
|
+
onApprove?: (quoteId: string, changes: QuoteFieldChange[], draft: SourcingQuoteDraft) => void;
|
|
6267
|
+
/** Fired with the note explaining an outright rejection. */
|
|
6268
|
+
onReject?: (quoteId: string, note: string) => void;
|
|
6269
|
+
/** Shows the in-progress state on the approve confirmation. */
|
|
6270
|
+
actionsLoading?: boolean;
|
|
6271
|
+
/** Allow admins to edit facts and line items before approval. */
|
|
6272
|
+
editable?: boolean;
|
|
6273
|
+
/** BCP 47 locale used for currency and date formatting. */
|
|
6274
|
+
locale?: string;
|
|
6275
|
+
/** Additional CSS class, appended last. */
|
|
6276
|
+
className?: string;
|
|
6277
|
+
}
|
|
6278
|
+
/**
|
|
6279
|
+
* Hub's single-quote sourcing review screen. The admin corrects and records the quote here;
|
|
6280
|
+
* there is no request-changes round trip back to the carrier, so
|
|
6281
|
+
* every field is editable, the total stays derived from the line items, and approving
|
|
6282
|
+
* lists each edit old → new so the host can persist the edit before recording approval.
|
|
6283
|
+
*/
|
|
6284
|
+
declare const SourcingQuoteDetailPage: {
|
|
6285
|
+
({ quote, backLabel, onBack, onApprove, onReject, actionsLoading, editable, locale, className, }: SourcingQuoteDetailPageProps): React.JSX.Element;
|
|
6286
|
+
displayName: string;
|
|
6287
|
+
};
|
|
6288
|
+
|
|
6289
|
+
interface SourcingReviewQueuePageProps {
|
|
6290
|
+
/** Page title shown above the queue. */
|
|
6291
|
+
title?: string;
|
|
6292
|
+
/** Supporting copy under the title. */
|
|
6293
|
+
description?: string;
|
|
6294
|
+
/** Carrier-submitted quotes to review. */
|
|
6295
|
+
quotes: SourcingQuote[];
|
|
6296
|
+
/** Controlled selection of quote ids. */
|
|
6297
|
+
selectedQuoteIds?: string[];
|
|
6298
|
+
/** Fired whenever the selection changes. */
|
|
6299
|
+
onSelectionChange?: (selectedQuoteIds: string[]) => void;
|
|
6300
|
+
/** Fired when a quote is opened for review. */
|
|
6301
|
+
onOpenQuote?: (quoteId: string) => void;
|
|
6302
|
+
/** Fired with every selected id when the bulk-approve button is pressed. */
|
|
6303
|
+
onBulkApprove?: (quoteIds: string[]) => void;
|
|
6304
|
+
/** Hides the summary metrics above the queue. */
|
|
6305
|
+
hideSummary?: boolean;
|
|
6306
|
+
/** Rows shown per page. */
|
|
6307
|
+
pageSize?: number;
|
|
6308
|
+
/** Shows the table's loading row instead of data. */
|
|
6309
|
+
loading?: boolean;
|
|
6310
|
+
/** BCP 47 locale used for currency and date formatting. */
|
|
6311
|
+
locale?: string;
|
|
6312
|
+
/** Additional CSS class, appended last. */
|
|
6313
|
+
className?: string;
|
|
6314
|
+
}
|
|
6315
|
+
/** Hub's ACMI sourcing review queue — every carrier quote waiting on an admin decision. */
|
|
6316
|
+
declare const SourcingReviewQueuePage: ({ title, description, quotes, selectedQuoteIds, onSelectionChange, onOpenQuote, onBulkApprove, hideSummary, pageSize, loading, locale, className, }: SourcingReviewQueuePageProps) => React.JSX.Element;
|
|
6317
|
+
|
|
2546
6318
|
interface TeamManagementTab extends TeamSubMenuTab {
|
|
2547
6319
|
/** Tab icon */
|
|
2548
6320
|
icon?: ReactNode;
|
|
@@ -2726,5 +6498,5 @@ declare const TripDetailPage: {
|
|
|
2726
6498
|
displayName: string;
|
|
2727
6499
|
};
|
|
2728
6500
|
|
|
2729
|
-
export { Accordion, AdministrationPage, AirSegment, Alert, AppLayout, ArrowDownLeftIcon, ArrowUpRightIcon, Avatar, AvatarGroup, Badge, BuildingIcon, BusIcon, Button, CalendarIcon, CalendarTypeSelector, CalendarViewSelector, CarIcon, Card, CardBody, CardFooter, CardHeader, CharterManifestPage, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, ConfirmModal, ContactList, ContactUsPage, CubeIcon, DashboardIcon, DashboardPage, Datepicker, DocumentIcon, DownloadIcon, Drawer, DrawerBody, DrawerFooter, DrawerHeader, Dropdown, DueDatesDrawer, EditIcon, EyeIcon, FilterChip, FilterIcon, FormField, FormRow, FormSection, FormStack, GridIcon, GroundSegment, GroupTravelRequestPage, HUB_ADMIN_ITEM, HUB_INDIVIDUAL_TRAVEL_ITEM, HUB_NAV_ITEMS, HomeIcon, HotelIcon, HotelSegment, HubAppShell, Icons, IndividualTravelPage, InfoCenterPage, InfoIcon, Input, LightbulbIcon, LimoIcon, LockIcon, LogoIcon, MailIcon, ManifestCapacityStats, ManifestViewToggle, MegaphoneIcon, MembershipPrograms, MenuIcon, Metric, MinusIcon, Modal, ModalFooter, Module, ModuleDivider, ModuleVerticalDivider, NavItem, NotFoundPage, PageBanners, PhoneIcon, PlaneIcon, PlusIcon, PreferencesPanel, PrinterIcon, Progress, ProgressBar, ProgressCircle, RailIcon, RefreshIcon, ReportIcon, RequestFormFooter, RequestFormHeader, RequestFormLayout, RequestSummary, RosterProgramNumbersPage, RosterReportsPage, RosterToolbar, SUPPLIER_TYPE_OPTIONS, SchoolContactForm, SearchField, SearchIcon, Segment, SegmentedSelector, Select, SelectFilter, ServiceToggle, ServiceToggleList, SettingsIcon, Sidenav, Spinner, StatusBadge, SummarySection, SupplierTypeToggle, Table, Tag, TeamCard, TeamContactsPanel, TeamEquipmentForm, TeamHeader, TeamImportForm, TeamManagementPage, TeamProgramForm, TeamRosterMemberForm, TeamScheduleActions, TeamScheduleCompactTable, TeamScheduleEditor, TeamScheduleExpandedTable, TeamSchedulePage, TeamSubMenu, TeamTravelCalendarCardView, TeamTravelCalendarListView, TeamTravelCalendarPage, TeamTravelCalendarToolbar, TeamTravelCalendarView, TeamUserAccessForm, Textarea, Timepicker, Title, Toggle, Tooltip, Topbar, TrashIcon, TravelServiceIcon, TravelSummaryMetrics, TravelerForm, TrendDownIcon, TrendUpIcon, TripDetailPage, TripSegment, TripTable, TypeIcon, UploadIcon, UserIcon, UsersIcon, WarningIcon, XIcon, formatCompactTripCost, formatTeamScheduleDueDate, formatTeamScheduleTravelDates, getTeamTravelCalendarPeriodLabel, isTravelDueDateCompleted, moveTeamTravelCalendarPeriod };
|
|
2730
|
-
export type { AccordionProps, AccountInfo, AdministrationCard, AdministrationPageProps, AdministrationTab, AirSegmentProps, AlertProps, AlertVariant, AppLayoutProps, AvatarGroupProps, AvatarProps, AvatarSize, BadgeProps, BadgeSize, BadgeVariant, ButtonProps, ButtonSize, ButtonVariant, CalendarMetric, CalendarTypeSelectorProps, CalendarTypeValue, CalendarView, CalendarViewSelectorProps, CalendarViewValue, CardBodyProps, CardFooterProps, CardHeaderProps, CardPadding, CardProps, CardVariant, CharterManifestEquipment, CharterManifestPageProps, CharterManifestPassenger, CharterManifestSegment, CheckboxProps, ConfirmModalProps, Contact, ContactCardData, ContactInfo, ContactListProps, ContactPair, ContactUsData, ContactUsPageProps, DashboardPageProps, DatepickerProps, DatepickerSize, DrawerBodyProps, DrawerFooterProps, DrawerHeaderProps, DrawerPosition, DrawerProps, DrawerSize, DropdownAlignment, DropdownItemProps, DropdownProps, DueDatesDrawerProps, FilterChipProps, FilterOption, FlightData, FormFieldProps, FormRowProps, FormSectionProps, FormStackProps, GroundData, GroundSegmentProps, GroupTravelRequestContact, GroupTravelRequestFieldValue, GroupTravelRequestPageProps, GroupTravelRequestValues, GroupedTravelDueDates, HotelData, HotelSegmentProps, HubAppShellActions, HubAppShellProps, HubNavigationItem, IconName, IconProps, IndividualTravelPageProps, InfoCenterArticle, InfoCenterPageProps, InfoCenterPageState, InputProps, InputSize, ManifestCapacityStatsProps, ManifestSendState, ManifestView, ManifestViewToggleProps, MembershipProgram, MembershipProgramsProps, MetricProps, ModalFooterProps, ModalProps, ModalSize, ModuleProps, ModuleSize, NavItemProps, NavItemSize, NavItemVariant, NotFoundPageProps, PageBannersProps, PreferenceField, PreferenceSection, PreferencesPanelProps, ProgressBarProps, ProgressCircleProps, ProgressSize, ProgressVariant, RequestFormFooterProps, RequestFormHeaderProps, RequestFormLayoutProps, RequestSummaryProps, RosterProgramNumberId, RosterProgramNumberRow, RosterProgramNumbersPageProps, RosterReportOption, RosterReportsPageProps, RosterToolbarProps, ScheduleFilterOption, ScheduleMetric, SchoolContactFormProps, SearchFieldProps, SeasonOption, SegmentOption, SegmentProps, SegmentVariant, SegmentedSelectorOption, SegmentedSelectorProps, SelectFilterOption, SelectFilterProps, SelectOption, SelectOptionGroup, SelectProps, SelectSize, ServiceConfig, ServiceToggleListProps, ServiceToggleProps, SidenavItem, SidenavProps, SpinnerProps, SpinnerSize, StatusBadgeProps, StatusBadgeVariant, SummaryItem, SummarySectionConfig, SummarySegment, SupplierTypeToggleProps, SupplierTypeValue, SystemBanner, TabKey, TableColumn, TableProps, TagProps, TagSize, TagVariant, TeamCardProps, TeamContactId, TeamContactOption, TeamContactsLoadingState, TeamContactsPanelProps, TeamContactsValue, TeamEquipmentFormProps, TeamEquipmentValues, TeamFormMode, TeamHeaderProps, TeamImportFormProps, TeamImportKind, TeamManagementPageProps, TeamManagementTab, TeamNumericValue, TeamOption, TeamPortalUserOption, TeamProgramFormProps, TeamProgramType, TeamProgramValues, TeamRosterMemberFormProps, TeamRosterMemberValues, TeamScheduleActionsProps, TeamScheduleCompactRow, TeamScheduleCompactTableProps, TeamScheduleDueDate, TeamScheduleEditorEvent, TeamScheduleEditorProps, TeamScheduleEditorTrip, TeamScheduleExpandedRow, TeamScheduleExpandedTableProps, TeamScheduleHomeAway, TeamSchedulePageProps, TeamSubMenuProps, TeamSubMenuTab, TeamTravelCalendarCardViewProps, TeamTravelCalendarDueDate, TeamTravelCalendarDuration, TeamTravelCalendarEvent, TeamTravelCalendarItemType, TeamTravelCalendarListViewProps, TeamTravelCalendarPageProps, TeamTravelCalendarSportGroup, TeamTravelCalendarToolbarProps, TeamTravelCalendarTrip, TeamTravelCalendarViewProps, TeamUserAccessFormProps, TeamUserAccessValues, TextareaProps, TimepickerProps, TimepickerSize, TitleProps, TitleWeight, ToggleProps, ToggleSize, ToolbarAction, TooltipPosition, TooltipProps, TooltipVariant, TopbarProps, TravelAlertBanner, TravelDueDateItem, TravelServiceIconProps, TravelSummaryMetricsProps, TravelType, TravelerFormData, TravelerFormProps, TripData, TripDetailPageProps, TripSegmentProps, TripTableProps, TypeIconProps, VendorCode };
|
|
6501
|
+
export { ACMI_AIRCRAFT_OPTIONS, ACMI_CARRIER_OPTIONS, ACMI_INSURANCE_FLAT, Accordion, AcmiQuoteCalculator, AdministrationPage, AgentGroupTravelRequestsPage, AgentGroupTravelRequestsTable, AirSegment, Alert, AlertStyled, AppLayout, ArrowDownLeftIcon, ArrowUpRightIcon, Avatar, AvatarGroup, BID_TYPE_HEADINGS, Badge, BuildingIcon, BusIcon, Button, ButtonStyled, CARRIER_CATERING_OPTIONS, CARRIER_CONTACT_TYPES, CHAMPIONSHIP_BID_TYPES, CHAMPIONSHIP_HEADINGS, CHARTER_CONTACT_GROUPS, CHARTER_SECTIONS, CalendarIcon, CalendarTypeSelector, CalendarViewSelector, CarIcon, Card, CardBody, CardFooter, CardHeader, CarrierProfilePage, ChampionshipBidDetailPage, ChampionshipBidsPage, CharterBidResponsePage, CharterBidViewPage, CharterManifestPage, CharterSourcingEmailPreview, ChartersAccessManagementPage, ChartersHomePage, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, ConfirmModal, ContactCard, ContactList, ContactUsPage, CubeIcon, DOCUMENT_FILE_EXTENSIONS, DashboardIcon, DashboardPage, Datepicker, DetailList, DocumentIcon, DownloadIcon, Drawer, DrawerBody, DrawerFooter, DrawerHeader, Dropdown, DueDatesDrawer, EditIcon, EmptyState, EyeIcon, FeatureFlagManagementPage, FieldLayout, FileUploadButton, FilterChip, FilterIcon, FormField, FormRow, FormSection, FormStack, GridIcon, GridTable, GroundSegment, GroupTravelRequestPage, HUB_ADMIN_ITEM, HUB_AGENTS_ITEM, HUB_INDIVIDUAL_TRAVEL_ITEM, HUB_NAV_ITEMS, HUB_OFF_FLEET_ITEM, HUB_SOURCING_ITEM, HUB_STM_CHARTERS_ITEM, HeadsetIcon, HomeIcon, HotelIcon, HotelSegment, HubAppShell, Icons, IndividualTravelPage, IndividualTravelRequestDetailPage, IndividualTravelRequestFormPage, InfoCenterPage, InfoIcon, InfoTile, Input, ItineraryPage, ItinerarySegmentCard, ItineraryTimeline, LightbulbIcon, LimoIcon, LockIcon, LogoIcon, MailIcon, ManifestCapacityStats, ManifestViewToggle, MegaphoneIcon, MembershipPrograms, MenuIcon, Metric, MinusIcon, Modal, ModalFooter, Module, ModuleDivider, ModuleVerticalDivider, MultiUserSearch, NavItem, NotFoundPage, OFF_FLEET_LEARNED_DESCRIPTION, OFF_FLEET_LEARNED_EMPTY_COPY, OFF_FLEET_QUEUE_DESCRIPTION, OffFleetLearnedExamplesPage, OffFleetReviewQueuePage, OffFleetSubmissionDetailPage, PageBanners, PageHeader, Pagination, PhoneIcon, PlaneIcon, PlusIcon, PreferencesPanel, PrinterIcon, Progress, ProgressBar, ProgressCircle, QuoteCostBreakdown, QuoteReviewActions, REGULAR_SEASON_BID_TYPES, RailIcon, RefreshIcon, RegularSeasonBidsPage, RegularSeasonBidsTable, ReportIcon, RequestFormFooter, RequestFormHeader, RequestFormLayout, RequestSummary, RosterProgramNumbersPage, RosterReportsPage, RosterToolbar, SOURCING_COST_CATEGORIES, SOURCING_COST_CATEGORY_LABELS, SUPPLIER_TYPE_OPTIONS, SchoolContactForm, SearchField, SearchIcon, Segment, SegmentedSelector, Select, SelectFilter, ServiceToggle, ServiceToggleList, SettingsIcon, Sidenav, SourcingQuoteDetailPage, SourcingReviewQueuePage, SourcingReviewQueueTable, Spinner, StatusBadge, SummarySection, SupplierTypeToggle, TRIP_MONTH_OPTIONS, Table, Tag, TeamCalendarHeader, TeamCard, TeamContactsPanel, TeamEquipmentForm, TeamHeader, TeamImportForm, TeamManagementPage, TeamProgramForm, TeamRosterMemberForm, TeamScheduleActions, TeamScheduleCompactTable, TeamScheduleEditor, TeamScheduleExpandedTable, TeamSchedulePage, TeamSubMenu, TeamTravelCalendarCardView, TeamTravelCalendarListView, TeamTravelCalendarPage, TeamTravelCalendarToolbar, TeamTravelCalendarView, TeamUserAccessForm, Textarea, ThemeProvider, Timepicker, Title, Toggle, Tooltip, Topbar, TrashIcon, TravelServiceIcon, TravelSummaryMetrics, TravelerForm, TrendDownIcon, TrendUpIcon, TripDetailPage, TripSegment, TripTable, TypeIcon, UploadIcon, UserIcon, UsersIcon, WarningIcon, XIcon, absoluteFill, accentColors, alertTokens, boxShadow, brandColors, breakpoints, buildPaginationItems, buttonReset, computeLineItemTotal, computeQuoteTotals, computeTravelTypeCodes, css, darkTheme, lightTheme as defaultTheme, deriveProgramBidStatus, flexCenter, flexCol, flexRow, font, fontFamily, fontSize, fontWeight, formatCompactTripCost, formatItineraryDate, formatItineraryDateRange, formatItineraryMoney, formatTeamScheduleDueDate, formatTeamScheduleTravelDates, getCharterSourcingEmailRoute, getCharterSourcingEmailSubject, getPageCount, getSegmentDate, getSegmentStartMinutes, getSegmentTitle, getTeamTravelCalendarPeriodLabel, groupSegmentsByDay, isExpiringSoon, isProgramBiddable, isQuoteActionable, isTravelDueDateCompleted, isTravelDueDateOverdue, leading, lightTheme, lineClamp, lineHeight, matchesQuoteSearch, merge, moveTeamTravelCalendarPeriod, neutralColors, parseClockTime, parseItineraryDate, primaryColors, radius, rounded, semanticColors, shadow, size, space, spacing, srOnly, statusColors, styled, teamColors, textColors, toInlineStyle, trans, transition, truncate, useTheme, weight };
|
|
6502
|
+
export type { AccordionProps, AccountInfo, AcmiAircraftOption, AcmiLeg, AcmiPositioningMode, AcmiQuoteCalculatorProps, AcmiQuoteInputs, AcmiQuoteResult, AdministrationCard, AdministrationPageProps, AdministrationTab, AgentGroupTravelRequest, AgentGroupTravelRequestSportOption, AgentGroupTravelRequestViewOption, AgentGroupTravelRequestsPageProps, AirSegmentProps, AlertProps, AlertStyledProps, AlertVariant$1 as AlertVariant, AppLayoutProps, AvatarGroupProps, AvatarProps, AvatarSize, BadgeProps, BadgeSize, BadgeVariant, ButtonProps, ButtonSize$1 as ButtonSize, ButtonStyledProps, ButtonVariant$1 as ButtonVariant, CSSObject, CalendarMetric, CalendarTypeSelectorProps, CalendarTypeValue, CalendarView, CalendarViewSelectorProps, CalendarViewValue, CardBodyProps, CardFooterProps, CardHeaderProps, CardPadding, CardProps, CardVariant, CarrierAircraft, CarrierContact, CarrierProfilePageProps, CarrierProfilePreferences, CarrierProfileTab, ChampionshipBid, ChampionshipBidDetail, ChampionshipBidDetailPageProps, ChampionshipBidType, ChampionshipBidsPageProps, CharterBidLevel, CharterBidResponsePageProps, CharterBidSubmission, CharterBidTarget, CharterBidViewPageProps, CharterContact, CharterContactGroup, CharterFlightProgramBid, CharterManifestEquipment, CharterManifestPageProps, CharterManifestPassenger, CharterManifestSegment, CharterSectionCard, CharterSourcingEmailChange, CharterSourcingEmailChanges, CharterSourcingEmailLeg, CharterSourcingEmailPreviewProps, CharterSourcingEmailQuote, CharterSourcingEmailVariant, CharterSubmissionType, CharterSubmittedBid, CharterTripBid, CharterTripBidStatus, ChartersAccessId, ChartersAccessManagementPageProps, ChartersAccessMembership, ChartersAccessRole, ChartersAccountUser, ChartersHomePageProps, CheckboxProps, ConfirmModalProps, Contact, ContactCardData, ContactCardProps, ContactInfo, ContactListProps, ContactPair, ContactUsData, ContactUsPageProps, DashboardPageProps, DatepickerProps, DatepickerSize, DetailListItem, DetailListProps, DetailListVariant, DrawerBodyProps, DrawerFooterProps, DrawerHeaderProps, DrawerPosition, DrawerProps, DrawerSize, DropdownAlignment, DropdownItemProps, DropdownProps, DueDatesDrawerProps, EmptyStateProps, EmptyStateSize, FeatureFlagDefinition, FeatureFlagIdentifier, FeatureFlagManagementPageProps, FeatureFlagRule, FeatureFlagRuleDeactivateRequest, FeatureFlagRuleEditRequest, FeatureFlagRuleEffect, FeatureFlagRuleFormValue, FeatureFlagTargetOption, FeatureFlagTargetOptions, FeatureFlagTargetType, FieldLayoutProps, FieldLayoutRenderProps, FileUploadButtonProps, FilterChipProps, FilterOption, FlightData, FormFieldProps, FormRowProps, FormSectionProps, FormStackProps, GridCellRenderProps, GridColumn, GridRow, GridTableProps, GridTotalRow, GroundData, GroundSegmentProps, GroupTravelDueField, GroupTravelDueStatus, GroupTravelPnr, GroupTravelRequestContact, GroupTravelRequestFieldValue, GroupTravelRequestPageProps, GroupTravelRequestSource, GroupTravelRequestValues, GroupedTravelDueDates, HotelData, HotelSegmentProps, HubAppShellActions, HubAppShellProps, HubNavigationItem, IconName, IconProps, IndividualTravelExportRequest, IndividualTravelExportScope, IndividualTravelFilters, IndividualTravelPageProps, IndividualTravelPagination, IndividualTravelRequestAirLeg, IndividualTravelRequestAirRequest, IndividualTravelRequestAirTripType, IndividualTravelRequestAnswerValue, IndividualTravelRequestBusRequest, IndividualTravelRequestCarLeg, IndividualTravelRequestCarRequest, IndividualTravelRequestCurrentTraveler, IndividualTravelRequestDetail, IndividualTravelRequestDetailPageProps, IndividualTravelRequestFormConfiguration, IndividualTravelRequestFormPageProps, IndividualTravelRequestHotelLeg, IndividualTravelRequestHotelRequest, IndividualTravelRequestLabeledAnswer, IndividualTravelRequestOption, IndividualTravelRequestQuestion, IndividualTravelRequestQuestionType, IndividualTravelRequestService, IndividualTravelRequestSubmitter, IndividualTravelRequestTraveler, IndividualTravelRequestTravelerType, IndividualTravelRequestValues, IndividualTravelTabCounts, InfoCenterArticle, InfoCenterPageProps, InfoCenterPageState, InfoTileEdge, InfoTileProps, InputProps, InputSize, ItineraryAgent, ItineraryAirSegment, ItineraryCarSegment, ItineraryDay, ItineraryHotelSegment, ItineraryPageProps, ItinerarySegment, ItinerarySegmentCardProps, ItinerarySegmentStatus, ItineraryTimelineProps, ManifestCapacityStatsProps, ManifestSendState, ManifestView, ManifestViewToggleProps, MembershipProgram, MembershipProgramsProps, MetricProps, ModalFooterProps, ModalProps, ModalSize, ModuleProps, ModuleSize, MultiUserSearchOption, MultiUserSearchProps, NavItemProps, NavItemSize, NavItemVariant, NotFoundPageProps, OffFleetLearnedExample, OffFleetLearnedExamplesPageProps, OffFleetLeg, OffFleetLegDiagnostic, OffFleetLegMatch, OffFleetPreflightCheck, OffFleetPreflightRow, OffFleetPriceBasis, OffFleetQuoteHeader, OffFleetReviewQueuePageProps, OffFleetSubmission, OffFleetSubmissionDetailPageProps, OffFleetSubmissionStatus, OffFleetTripGrouping, OffFleetTripSegment, PageBannersProps, PageHeaderProps, PaginationItem, PaginationProps, PreferenceField, PreferenceSection, PreferencesPanelProps, ProgressBarProps, ProgressCircleProps, ProgressSize, ProgressVariant, QuoteCostBreakdownProps, QuoteCostTotals, QuoteFieldChange, QuoteReviewActionsProps, RegularSeasonBidType, RegularSeasonBidsPageProps, RegularSeasonBidsTableProps, RequestFormFooterProps, RequestFormHeaderProps, RequestFormLayoutProps, RequestSummaryProps, RosterProgramNumberId, RosterProgramNumberRow, RosterProgramNumbersPageProps, RosterReportOption, RosterReportsPageProps, RosterToolbarProps, ScheduleFilterOption, ScheduleMetric, SchoolContactFormProps, SearchFieldProps, SeasonOption, SegmentOption, SegmentProps, SegmentVariant, SegmentedSelectorOption, SegmentedSelectorProps, SelectFilterOption, SelectFilterProps, SelectOption, SelectOptionGroup, SelectProps, SelectSize, ServiceConfig, ServiceToggleListProps, ServiceToggleProps, SidenavItem, SidenavProps, SourcingCostAdjustment, SourcingCostCategory, SourcingCostLineItem, SourcingQuote, SourcingQuoteDetailPageProps, SourcingQuoteDraft, SourcingQuoteLeg, SourcingQuoteLegType, SourcingQuoteStatus, SourcingReviewQueuePageProps, SourcingReviewQueueTableProps, SpinnerProps, SpinnerSize, StatusBadgeProps, StatusBadgeVariant, StyleFunction, SummaryItem, SummarySectionConfig, SummarySegment, SupplierTypeToggleProps, SupplierTypeValue, SystemBanner, TabKey, TableColumn, TableProps, TableRowKey, TagProps, TagSize, TagVariant, TeamCalendarHeaderProps, TeamCardProps, TeamContactId, TeamContactOption, TeamContactsLoadingState, TeamContactsPanelProps, TeamContactsValue, TeamEquipmentFormProps, TeamEquipmentValues, TeamFormMode, TeamHeaderProps, TeamImportFormProps, TeamImportKind, TeamManagementPageProps, TeamManagementTab, TeamNumericValue, TeamOption, TeamPortalUserOption, TeamProgramFormProps, TeamProgramType, TeamProgramValues, TeamRosterMemberFormProps, TeamRosterMemberValues, TeamScheduleActionsProps, TeamScheduleCompactEvent, TeamScheduleCompactRow, TeamScheduleCompactTableProps, TeamScheduleCompactTrip, TeamScheduleDueDate, TeamScheduleEditorEvent, TeamScheduleEditorProps, TeamScheduleEditorTrip, TeamScheduleExpandedRow, TeamScheduleExpandedTableProps, TeamScheduleHomeAway, TeamSchedulePageProps, TeamSubMenuProps, TeamSubMenuTab, TeamTravelCalendarCardViewProps, TeamTravelCalendarDueDate, TeamTravelCalendarDuration, TeamTravelCalendarEvent, TeamTravelCalendarItemType, TeamTravelCalendarListViewProps, TeamTravelCalendarPageProps, TeamTravelCalendarSportGroup, TeamTravelCalendarToolbarProps, TeamTravelCalendarTrip, TeamTravelCalendarViewProps, TeamUserAccessFormProps, TeamUserAccessValues, TextareaProps, Theme, ThemeBreakpoint, ThemeColors, ThemeContextValue, ThemeMode, ThemeProviderProps, ThemeRadius, ThemeShadow, ThemeSpacing, ThemeTransition, ThemeTypography, TimepickerProps, TimepickerSize, TitleProps, TitleWeight, ToggleProps, ToggleSize, ToolbarAction, TooltipPosition, TooltipProps, TooltipVariant, TopbarProps, TravelAlertBanner, TravelDueDateItem, TravelServiceIconProps, TravelSummaryMetricsProps, TravelType, TravelerFormData, TravelerFormProps, TripData, TripDetailPageProps, TripSegmentProps, TripTableProps, TypeIconProps, VendorCode };
|