@shortstravelmgmt/component-lib 0.1.3 → 0.1.5
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 +89 -7
- package/dist/index.esm.js +432 -275
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +437 -274
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -23,6 +23,7 @@ const ArrowUpRightIcon = createIcon(jsxs(Fragment, { children: [jsx("path", { d:
|
|
|
23
23
|
const ArrowDownLeftIcon = createIcon(jsxs(Fragment, { children: [jsx("path", { d: "M17 7 7 17" }), jsx("path", { d: "M17 17H7V7" })] }), 'ArrowDownLeftIcon');
|
|
24
24
|
const EyeIcon = createIcon(jsxs(Fragment, { children: [jsx("path", { d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }), jsx("circle", { cx: "12", cy: "12", r: "3" })] }), 'EyeIcon');
|
|
25
25
|
const DownloadIcon = createIcon(jsxs(Fragment, { children: [jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), jsx("polyline", { points: "7 10 12 15 17 10" }), jsx("line", { x1: "12", x2: "12", y1: "15", y2: "3" })] }), 'DownloadIcon');
|
|
26
|
+
const UploadIcon = createIcon(jsxs(Fragment, { children: [jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), jsx("polyline", { points: "17 8 12 3 7 8" }), jsx("line", { x1: "12", x2: "12", y1: "3", y2: "15" })] }), 'UploadIcon');
|
|
26
27
|
const FilterIcon$1 = createIcon(jsx("polygon", { points: "22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3" }), 'FilterIcon');
|
|
27
28
|
const CalendarIcon$1 = createIcon(jsxs(Fragment, { children: [jsx("path", { d: "M8 2v4" }), jsx("path", { d: "M16 2v4" }), jsx("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }), jsx("path", { d: "M3 10h18" })] }), 'CalendarIcon');
|
|
28
29
|
const UserIcon = createIcon(jsxs(Fragment, { children: [jsx("path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }), jsx("circle", { cx: "12", cy: "7", r: "4" })] }), 'UserIcon');
|
|
@@ -107,7 +108,7 @@ const Icons = {
|
|
|
107
108
|
Trash: TrashIcon$2,
|
|
108
109
|
};
|
|
109
110
|
|
|
110
|
-
var styles$
|
|
111
|
+
var styles$1a = {"alert":"Alert-module_alert__xxiES","content":"Alert-module_content__CVX32","icon":"Alert-module_icon__Xyh6J","body":"Alert-module_body__TTkmt","title":"Alert-module_title__7wNPO","message":"Alert-module_message__plreL","dismissButton":"Alert-module_dismissButton__MdRWh","primary":"Alert-module_primary__nME13","success":"Alert-module_success__GDt4S","warning":"Alert-module_warning__y4bLx","error":"Alert-module_error__nKMAG"};
|
|
111
112
|
|
|
112
113
|
const variantIcons = {
|
|
113
114
|
primary: LightbulbIcon,
|
|
@@ -117,10 +118,10 @@ const variantIcons = {
|
|
|
117
118
|
};
|
|
118
119
|
const Alert = ({ variant = 'primary', title, children, dismissible = false, onDismiss, className = '', }) => {
|
|
119
120
|
const IconComponent = variantIcons[variant];
|
|
120
|
-
return (jsx("div", { className: `${styles$
|
|
121
|
+
return (jsx("div", { className: `${styles$1a.alert} ${styles$1a[variant]} ${className}`, role: "alert", children: jsxs("div", { className: styles$1a.content, children: [jsx(IconComponent, { className: styles$1a.icon, size: 20 }), jsxs("div", { className: styles$1a.body, children: [title && jsx("h4", { className: styles$1a.title, children: title }), jsx("div", { className: styles$1a.message, children: children })] }), dismissible && onDismiss && (jsx("button", { type: "button", onClick: onDismiss, className: styles$1a.dismissButton, "aria-label": "Dismiss alert", children: jsx(CloseIcon, { size: 16 }) }))] }) }));
|
|
121
122
|
};
|
|
122
123
|
|
|
123
|
-
var styles$
|
|
124
|
+
var styles$19 = {"avatar":"Avatar-module_avatar__AcTRg","xs":"Avatar-module_xs__4uGxI","sm":"Avatar-module_sm__NvzTi","md":"Avatar-module_md__PgY8p","lg":"Avatar-module_lg__lhkAZ","xl":"Avatar-module_xl__qTDTF","image":"Avatar-module_image__GX2c9","initials":"Avatar-module_initials__58FHH","group":"Avatar-module_group__XW0b1","overflow":"Avatar-module_overflow__ul4Cc"};
|
|
124
125
|
|
|
125
126
|
const getInitials = (name) => {
|
|
126
127
|
const parts = name.trim().split(/\s+/);
|
|
@@ -135,43 +136,43 @@ const getInitials = (name) => {
|
|
|
135
136
|
const Avatar = ({ src, alt, initials, name, size = 'md', className = '', ...props }) => {
|
|
136
137
|
const displayInitials = initials || (name ? getInitials(name) : '?');
|
|
137
138
|
const classNames = [
|
|
138
|
-
styles$
|
|
139
|
-
styles$
|
|
139
|
+
styles$19.avatar,
|
|
140
|
+
styles$19[size],
|
|
140
141
|
className,
|
|
141
142
|
]
|
|
142
143
|
.filter(Boolean)
|
|
143
144
|
.join(' ');
|
|
144
|
-
return (jsx("div", { className: classNames, ...props, children: src ? (jsx("img", { src: src, alt: alt || name || 'Avatar', className: styles$
|
|
145
|
+
return (jsx("div", { className: classNames, ...props, children: src ? (jsx("img", { src: src, alt: alt || name || 'Avatar', className: styles$19.image })) : (jsx("span", { className: styles$19.initials, children: displayInitials })) }));
|
|
145
146
|
};
|
|
146
147
|
Avatar.displayName = 'Avatar';
|
|
147
148
|
const AvatarGroup = ({ max = 4, className = '', children, ...props }) => {
|
|
148
149
|
const childArray = React.Children.toArray(children);
|
|
149
150
|
const visibleChildren = childArray.slice(0, max);
|
|
150
151
|
const remainingCount = childArray.length - max;
|
|
151
|
-
const classNames = [styles$
|
|
152
|
-
return (jsxs("div", { className: classNames, ...props, children: [visibleChildren, remainingCount > 0 && (jsx("div", { className: `${styles$
|
|
152
|
+
const classNames = [styles$19.group, className].filter(Boolean).join(' ');
|
|
153
|
+
return (jsxs("div", { className: classNames, ...props, children: [visibleChildren, remainingCount > 0 && (jsx("div", { className: `${styles$19.avatar} ${styles$19.md} ${styles$19.overflow}`, children: jsxs("span", { className: styles$19.initials, children: ["+", remainingCount] }) }))] }));
|
|
153
154
|
};
|
|
154
155
|
AvatarGroup.displayName = 'AvatarGroup';
|
|
155
156
|
|
|
156
|
-
var styles$
|
|
157
|
+
var styles$18 = {"badge":"Badge-module_badge__lvuUg","sm":"Badge-module_sm__OTBAp","md":"Badge-module_md__YG44i","dot":"Badge-module_dot__RgcVD","default":"Badge-module_default__1ga4w","success":"Badge-module_success__jEfI9","warning":"Badge-module_warning__978mf","error":"Badge-module_error__xZJlm","info":"Badge-module_info__Xk7MM"};
|
|
157
158
|
|
|
158
159
|
/**
|
|
159
160
|
* Badge component for status indicators, labels, and tags.
|
|
160
161
|
*/
|
|
161
162
|
const Badge = ({ variant = 'default', size = 'md', dot = false, className = '', children, ...props }) => {
|
|
162
163
|
const classNames = [
|
|
163
|
-
styles$
|
|
164
|
-
styles$
|
|
165
|
-
styles$
|
|
164
|
+
styles$18.badge,
|
|
165
|
+
styles$18[variant],
|
|
166
|
+
styles$18[size],
|
|
166
167
|
className,
|
|
167
168
|
]
|
|
168
169
|
.filter(Boolean)
|
|
169
170
|
.join(' ');
|
|
170
|
-
return (jsxs("span", { className: classNames, ...props, children: [dot && jsx("span", { className: styles$
|
|
171
|
+
return (jsxs("span", { className: classNames, ...props, children: [dot && jsx("span", { className: styles$18.dot }), children] }));
|
|
171
172
|
};
|
|
172
173
|
Badge.displayName = 'Badge';
|
|
173
174
|
|
|
174
|
-
var styles$
|
|
175
|
+
var styles$17 = {"button":"Button-module_button__xDdzH","sm":"Button-module_sm__fb2AF","md":"Button-module_md__XOa6t","lg":"Button-module_lg__UN9rL","square":"Button-module_square__-o34b","primary":"Button-module_primary__jWHqR","secondary":"Button-module_secondary__30FUq","outline":"Button-module_outline__v98mS","ghost":"Button-module_ghost__XUGB1","danger":"Button-module_danger__NUxPy","fullWidth":"Button-module_fullWidth__p2otK","loading":"Button-module_loading__TsL5I","spinner":"Button-module_spinner__6bZoj","spin":"Button-module_spin__ZPDMG","icon":"Button-module_icon__21hUM","content":"Button-module_content__iVRPQ"};
|
|
175
176
|
|
|
176
177
|
/**
|
|
177
178
|
* Primary button component for user interactions.
|
|
@@ -179,21 +180,21 @@ var styles$16 = {"button":"Button-module_button__xDdzH","sm":"Button-module_sm__
|
|
|
179
180
|
*/
|
|
180
181
|
const Button = forwardRef(({ variant = 'primary', size = 'md', fullWidth = false, loading = false, leftIcon, rightIcon, square = false, className = '', disabled, children, ...props }, ref) => {
|
|
181
182
|
const classNames = [
|
|
182
|
-
styles$
|
|
183
|
-
styles$
|
|
184
|
-
styles$
|
|
185
|
-
fullWidth ? styles$
|
|
186
|
-
square ? styles$
|
|
187
|
-
loading ? styles$
|
|
183
|
+
styles$17.button,
|
|
184
|
+
styles$17[variant],
|
|
185
|
+
styles$17[size],
|
|
186
|
+
fullWidth ? styles$17.fullWidth : '',
|
|
187
|
+
square ? styles$17.square : '',
|
|
188
|
+
loading ? styles$17.loading : '',
|
|
188
189
|
className,
|
|
189
190
|
]
|
|
190
191
|
.filter(Boolean)
|
|
191
192
|
.join(' ');
|
|
192
|
-
return (jsxs("button", { ref: ref, className: classNames, disabled: disabled || loading, ...props, children: [loading && (jsx("span", { className: styles$
|
|
193
|
+
return (jsxs("button", { ref: ref, className: classNames, disabled: disabled || loading, ...props, children: [loading && (jsx("span", { className: styles$17.spinner, children: jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "12", cy: "12", r: "10", strokeOpacity: "0.25" }), jsx("path", { d: "M12 2a10 10 0 0 1 10 10", strokeLinecap: "round" })] }) })), !loading && leftIcon && jsx("span", { className: styles$17.icon, children: leftIcon }), children && jsx("span", { className: styles$17.content, children: children }), !loading && rightIcon && jsx("span", { className: styles$17.icon, children: rightIcon })] }));
|
|
193
194
|
});
|
|
194
195
|
Button.displayName = 'Button';
|
|
195
196
|
|
|
196
|
-
var styles$
|
|
197
|
+
var styles$16 = {"wrapper":"Checkbox-module_wrapper__tYM-f","label":"Checkbox-module_label__x7c9f","disabled":"Checkbox-module_disabled__YtL8b","checkboxWrapper":"Checkbox-module_checkboxWrapper__ez0mi","input":"Checkbox-module_input__xBHoX","checkbox":"Checkbox-module_checkbox__zGuTf","sm":"Checkbox-module_sm__naurE","md":"Checkbox-module_md__LlE6O","lg":"Checkbox-module_lg__dMWT-","hasError":"Checkbox-module_hasError__aCefd","labelText":"Checkbox-module_labelText__7arlw","helperText":"Checkbox-module_helperText__jR4oi","errorText":"Checkbox-module_errorText__u8puP"};
|
|
197
198
|
|
|
198
199
|
const CheckIcon$1 = () => (jsx("svg", { width: "10", height: "8", viewBox: "0 0 10 8", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M1 4L3.5 6.5L9 1", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
|
|
199
200
|
const IndeterminateIcon = () => (jsx("svg", { width: "10", height: "2", viewBox: "0 0 10 2", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M1 1H9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) }));
|
|
@@ -206,10 +207,10 @@ const Checkbox = forwardRef(({ label, size = 'md', helperText, error, indetermin
|
|
|
206
207
|
const helperId = `${checkboxId}-helper`;
|
|
207
208
|
const errorId = `${checkboxId}-error`;
|
|
208
209
|
const wrapperClasses = [
|
|
209
|
-
styles$
|
|
210
|
-
styles$
|
|
211
|
-
disabled ? styles$
|
|
212
|
-
error ? styles$
|
|
210
|
+
styles$16.wrapper,
|
|
211
|
+
styles$16[size],
|
|
212
|
+
disabled ? styles$16.disabled : '',
|
|
213
|
+
error ? styles$16.hasError : '',
|
|
213
214
|
className,
|
|
214
215
|
].filter(Boolean).join(' ');
|
|
215
216
|
// Handle indeterminate state via ref
|
|
@@ -225,13 +226,13 @@ const Checkbox = forwardRef(({ label, size = 'md', helperText, error, indetermin
|
|
|
225
226
|
ref.current = node;
|
|
226
227
|
}
|
|
227
228
|
};
|
|
228
|
-
return (jsxs("div", { className: wrapperClasses, children: [jsxs("label", { className: styles$
|
|
229
|
+
return (jsxs("div", { className: wrapperClasses, children: [jsxs("label", { className: styles$16.label, children: [jsxs("div", { className: styles$16.checkboxWrapper, children: [jsx("input", { ref: inputRef, type: "checkbox", id: checkboxId, className: styles$16.input, disabled: disabled, checked: checked, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
|
|
229
230
|
.filter(Boolean)
|
|
230
|
-
.join(' ') || undefined, ...props }), jsx("span", { className: styles$
|
|
231
|
+
.join(' ') || undefined, ...props }), jsx("span", { className: styles$16.checkbox, children: indeterminate ? jsx(IndeterminateIcon, {}) : jsx(CheckIcon$1, {}) })] }), label && jsx("span", { className: styles$16.labelText, children: label })] }), error && (jsx("span", { id: errorId, className: styles$16.errorText, children: error })), helperText && !error && (jsx("span", { id: helperId, className: styles$16.helperText, children: helperText }))] }));
|
|
231
232
|
});
|
|
232
233
|
Checkbox.displayName = 'Checkbox';
|
|
233
234
|
|
|
234
|
-
var styles$
|
|
235
|
+
var styles$15 = {"wrapper":"Datepicker-module_wrapper__SdezU","fullWidth":"Datepicker-module_fullWidth__CAeMt","label":"Datepicker-module_label__qUNBV","inputWrapper":"Datepicker-module_inputWrapper__FK2IJ","sm":"Datepicker-module_sm__DuDMB","md":"Datepicker-module_md__oyus3","lg":"Datepicker-module_lg__2sqBg","icon":"Datepicker-module_icon__WdaRf","input":"Datepicker-module_input__4TCcy","disabled":"Datepicker-module_disabled__W0e-a","error":"Datepicker-module_error__XPpIy","helperText":"Datepicker-module_helperText__UllZP","errorText":"Datepicker-module_errorText__lveyr"};
|
|
235
236
|
|
|
236
237
|
const CalendarIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), jsx("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), jsx("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), jsx("line", { x1: "3", y1: "10", x2: "21", y2: "10" })] }));
|
|
237
238
|
/**
|
|
@@ -243,23 +244,23 @@ const Datepicker = forwardRef(({ size = 'md', label, helperText, error, fullWidt
|
|
|
243
244
|
const helperId = `${inputId}-helper`;
|
|
244
245
|
const errorId = `${inputId}-error`;
|
|
245
246
|
const wrapperClasses = [
|
|
246
|
-
styles$
|
|
247
|
-
fullWidth ? styles$
|
|
247
|
+
styles$15.wrapper,
|
|
248
|
+
fullWidth ? styles$15.fullWidth : '',
|
|
248
249
|
className,
|
|
249
250
|
].filter(Boolean).join(' ');
|
|
250
251
|
const inputWrapperClasses = [
|
|
251
|
-
styles$
|
|
252
|
-
styles$
|
|
253
|
-
error ? styles$
|
|
254
|
-
disabled ? styles$
|
|
252
|
+
styles$15.inputWrapper,
|
|
253
|
+
styles$15[size],
|
|
254
|
+
error ? styles$15.error : '',
|
|
255
|
+
disabled ? styles$15.disabled : '',
|
|
255
256
|
].filter(Boolean).join(' ');
|
|
256
|
-
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: inputId, className: styles$
|
|
257
|
+
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: inputId, className: styles$15.label, children: label })), jsxs("div", { className: inputWrapperClasses, children: [jsx("span", { className: styles$15.icon, children: jsx(CalendarIcon, {}) }), jsx("input", { ref: ref, type: "date", id: inputId, className: styles$15.input, disabled: disabled, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
|
|
257
258
|
.filter(Boolean)
|
|
258
|
-
.join(' ') || undefined, ...props })] }), error && (jsx("span", { id: errorId, className: styles$
|
|
259
|
+
.join(' ') || undefined, ...props })] }), error && (jsx("span", { id: errorId, className: styles$15.errorText, children: error })), helperText && !error && (jsx("span", { id: helperId, className: styles$15.helperText, children: helperText }))] }));
|
|
259
260
|
});
|
|
260
261
|
Datepicker.displayName = 'Datepicker';
|
|
261
262
|
|
|
262
|
-
var styles$
|
|
263
|
+
var styles$14 = {"wrapper":"Input-module_wrapper__-8ija","fullWidth":"Input-module_fullWidth__xXOvN","label":"Input-module_label__t4LH-","inputWrapper":"Input-module_inputWrapper__U4EEd","error":"Input-module_error__fT9Sb","disabled":"Input-module_disabled__3tnIE","sm":"Input-module_sm__lGHP-","md":"Input-module_md__pReoW","lg":"Input-module_lg__iqqov","input":"Input-module_input__PeHY6","icon":"Input-module_icon__jkJiF","textarea":"Input-module_textarea__ZgdBz","helperText":"Input-module_helperText__eKsC8","errorText":"Input-module_errorText__xoiKP"};
|
|
263
264
|
|
|
264
265
|
/**
|
|
265
266
|
* Input component for text entry.
|
|
@@ -267,45 +268,45 @@ var styles$13 = {"wrapper":"Input-module_wrapper__-8ija","fullWidth":"Input-modu
|
|
|
267
268
|
const Input = forwardRef(({ size = 'md', label, helperText, error, leftIcon, rightIcon, fullWidth = false, className = '', id, disabled, ...props }, ref) => {
|
|
268
269
|
const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;
|
|
269
270
|
const wrapperClasses = [
|
|
270
|
-
styles$
|
|
271
|
-
fullWidth ? styles$
|
|
271
|
+
styles$14.wrapper,
|
|
272
|
+
fullWidth ? styles$14.fullWidth : '',
|
|
272
273
|
className,
|
|
273
274
|
]
|
|
274
275
|
.filter(Boolean)
|
|
275
276
|
.join(' ');
|
|
276
277
|
const inputWrapperClasses = [
|
|
277
|
-
styles$
|
|
278
|
-
styles$
|
|
279
|
-
error ? styles$
|
|
280
|
-
disabled ? styles$
|
|
278
|
+
styles$14.inputWrapper,
|
|
279
|
+
styles$14[size],
|
|
280
|
+
error ? styles$14.error : '',
|
|
281
|
+
disabled ? styles$14.disabled : '',
|
|
281
282
|
]
|
|
282
283
|
.filter(Boolean)
|
|
283
284
|
.join(' ');
|
|
284
|
-
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: inputId, className: styles$
|
|
285
|
+
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: inputId, className: styles$14.label, children: label })), jsxs("div", { className: inputWrapperClasses, children: [leftIcon && jsx("span", { className: styles$14.icon, children: leftIcon }), jsx("input", { ref: ref, id: inputId, className: styles$14.input, disabled: disabled, "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined, ...props }), rightIcon && jsx("span", { className: styles$14.icon, children: rightIcon })] }), error && (jsx("span", { id: `${inputId}-error`, className: styles$14.errorText, children: error })), helperText && !error && (jsx("span", { id: `${inputId}-helper`, className: styles$14.helperText, children: helperText }))] }));
|
|
285
286
|
});
|
|
286
287
|
Input.displayName = 'Input';
|
|
287
288
|
const Textarea = forwardRef(({ size = 'md', label, helperText, error, fullWidth = false, className = '', id, disabled, rows = 4, ...props }, ref) => {
|
|
288
289
|
const textareaId = id || `textarea-${Math.random().toString(36).substr(2, 9)}`;
|
|
289
290
|
const wrapperClasses = [
|
|
290
|
-
styles$
|
|
291
|
-
fullWidth ? styles$
|
|
291
|
+
styles$14.wrapper,
|
|
292
|
+
fullWidth ? styles$14.fullWidth : '',
|
|
292
293
|
className,
|
|
293
294
|
]
|
|
294
295
|
.filter(Boolean)
|
|
295
296
|
.join(' ');
|
|
296
297
|
const textareaClasses = [
|
|
297
|
-
styles$
|
|
298
|
-
styles$
|
|
299
|
-
error ? styles$
|
|
300
|
-
disabled ? styles$
|
|
298
|
+
styles$14.textarea,
|
|
299
|
+
styles$14[size],
|
|
300
|
+
error ? styles$14.error : '',
|
|
301
|
+
disabled ? styles$14.disabled : '',
|
|
301
302
|
]
|
|
302
303
|
.filter(Boolean)
|
|
303
304
|
.join(' ');
|
|
304
|
-
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: textareaId, className: styles$
|
|
305
|
+
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: textareaId, className: styles$14.label, children: label })), jsx("textarea", { ref: ref, id: textareaId, className: textareaClasses, disabled: disabled, rows: rows, "aria-invalid": !!error, "aria-describedby": error ? `${textareaId}-error` : helperText ? `${textareaId}-helper` : undefined, ...props }), error && (jsx("span", { id: `${textareaId}-error`, className: styles$14.errorText, children: error })), helperText && !error && (jsx("span", { id: `${textareaId}-helper`, className: styles$14.helperText, children: helperText }))] }));
|
|
305
306
|
});
|
|
306
307
|
Textarea.displayName = 'Textarea';
|
|
307
308
|
|
|
308
|
-
var styles$
|
|
309
|
+
var styles$13 = {"metric":"Metric-module_metric__LZ8D-","dark":"Metric-module_dark__FKdvj","clickable":"Metric-module_clickable__c3-pM","content":"Metric-module_content__YYpBG","valueRow":"Metric-module_valueRow__JpgYR","valueContainer":"Metric-module_valueContainer__CzjZ1","prefix":"Metric-module_prefix__Agpzq","value":"Metric-module_value__zspnf","suffix":"Metric-module_suffix__qvCMJ","warningIcon":"Metric-module_warningIcon__F-Ol5","label":"Metric-module_label__ydcti"};
|
|
309
310
|
|
|
310
311
|
const WarningIcon = () => (jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M12 2L1 21h22L12 2zm0 3.5L19.5 19H4.5L12 5.5zM11 10v4h2v-4h-2zm0 6v2h2v-2h-2z" }) }));
|
|
311
312
|
/**
|
|
@@ -315,15 +316,15 @@ const WarningIcon = () => (jsx("svg", { width: "24", height: "24", viewBox: "0 0
|
|
|
315
316
|
const Metric = ({ value, label, prefix, suffix, dark = false, onClick, className = '', warning = false, }) => {
|
|
316
317
|
const displayValue = value !== undefined && !isNaN(parseFloat(String(value))) ? value : 0;
|
|
317
318
|
return (jsx("div", { className: `
|
|
318
|
-
${styles$
|
|
319
|
-
${dark ? styles$
|
|
320
|
-
${onClick ? styles$
|
|
319
|
+
${styles$13.metric}
|
|
320
|
+
${dark ? styles$13.dark : ''}
|
|
321
|
+
${onClick ? styles$13.clickable : ''}
|
|
321
322
|
${className}
|
|
322
|
-
`, onClick: onClick, children: value !== undefined && (jsxs("div", { className: styles$
|
|
323
|
+
`, onClick: onClick, children: value !== undefined && (jsxs("div", { className: styles$13.content, children: [jsxs("div", { className: styles$13.valueRow, children: [jsxs("div", { className: styles$13.valueContainer, children: [prefix && jsx("span", { className: styles$13.prefix, children: prefix }), jsx("span", { className: styles$13.value, children: displayValue }), suffix && jsx("span", { className: styles$13.suffix, children: suffix })] }), warning && (jsx("div", { className: styles$13.warningIcon, children: jsx(WarningIcon, {}) }))] }), jsx("div", { className: styles$13.label, children: label })] })) }));
|
|
323
324
|
};
|
|
324
325
|
Metric.displayName = 'Metric';
|
|
325
326
|
|
|
326
|
-
var styles$
|
|
327
|
+
var styles$12 = {"wrapper":"Select-module_wrapper__UN2Bo","fullWidth":"Select-module_fullWidth__GgV-D","label":"Select-module_label__aSRVE","selectWrapper":"Select-module_selectWrapper__OCGYf","sm":"Select-module_sm__oTHGX","md":"Select-module_md__VSZQg","lg":"Select-module_lg__nknhY","select":"Select-module_select__DY-Id","hasLeftIcon":"Select-module_hasLeftIcon__ZrReQ","leftIcon":"Select-module_leftIcon__nBU1-","chevron":"Select-module_chevron__1MAEQ","disabled":"Select-module_disabled__0GOXE","error":"Select-module_error__Yijk5","helperText":"Select-module_helperText__rHrqP","errorText":"Select-module_errorText__1kM2R"};
|
|
327
328
|
|
|
328
329
|
const ChevronDownIcon = () => (jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsx("polyline", { points: "6 9 12 15 18 9" }) }));
|
|
329
330
|
/**
|
|
@@ -335,16 +336,16 @@ const Select = forwardRef(({ options, optionGroups, size = 'md', label, placehol
|
|
|
335
336
|
const helperId = `${selectId}-helper`;
|
|
336
337
|
const errorId = `${selectId}-error`;
|
|
337
338
|
const wrapperClasses = [
|
|
338
|
-
styles$
|
|
339
|
-
fullWidth ? styles$
|
|
339
|
+
styles$12.wrapper,
|
|
340
|
+
fullWidth ? styles$12.fullWidth : '',
|
|
340
341
|
className,
|
|
341
342
|
].filter(Boolean).join(' ');
|
|
342
343
|
const selectWrapperClasses = [
|
|
343
|
-
styles$
|
|
344
|
-
styles$
|
|
345
|
-
error ? styles$
|
|
346
|
-
disabled ? styles$
|
|
347
|
-
leftIcon ? styles$
|
|
344
|
+
styles$12.selectWrapper,
|
|
345
|
+
styles$12[size],
|
|
346
|
+
error ? styles$12.error : '',
|
|
347
|
+
disabled ? styles$12.disabled : '',
|
|
348
|
+
leftIcon ? styles$12.hasLeftIcon : '',
|
|
348
349
|
].filter(Boolean).join(' ');
|
|
349
350
|
const renderOptions = () => {
|
|
350
351
|
// Render grouped options
|
|
@@ -357,19 +358,19 @@ const Select = forwardRef(({ options, optionGroups, size = 'md', label, placehol
|
|
|
357
358
|
}
|
|
358
359
|
return null;
|
|
359
360
|
};
|
|
360
|
-
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: selectId, className: styles$
|
|
361
|
+
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: selectId, className: styles$12.label, children: label })), jsxs("div", { className: selectWrapperClasses, children: [leftIcon && jsx("span", { className: styles$12.leftIcon, children: leftIcon }), jsxs("select", { ref: ref, id: selectId, className: styles$12.select, disabled: disabled, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
|
|
361
362
|
.filter(Boolean)
|
|
362
|
-
.join(' ') || undefined, ...props, children: [placeholder && (jsx("option", { value: "", disabled: true, children: placeholder })), renderOptions()] }), jsx("span", { className: styles$
|
|
363
|
+
.join(' ') || undefined, ...props, children: [placeholder && (jsx("option", { value: "", disabled: true, children: placeholder })), renderOptions()] }), jsx("span", { className: styles$12.chevron, children: jsx(ChevronDownIcon, {}) })] }), error && (jsx("span", { id: errorId, className: styles$12.errorText, children: error })), helperText && !error && (jsx("span", { id: helperId, className: styles$12.helperText, children: helperText }))] }));
|
|
363
364
|
});
|
|
364
365
|
Select.displayName = 'Select';
|
|
365
366
|
|
|
366
|
-
var styles$
|
|
367
|
+
var styles$11 = {"spinner":"Spinner-module_spinner__OZwmB","svg":"Spinner-module_svg__Tusqk","spin":"Spinner-module_spin__YAPc9","track":"Spinner-module_track__NxLfV","indicator":"Spinner-module_indicator__gSUxF","xs":"Spinner-module_xs__4-WEg","sm":"Spinner-module_sm__enoDn","md":"Spinner-module_md__6axf9","lg":"Spinner-module_lg__EvJyC","xl":"Spinner-module_xl__yIXoK","srOnly":"Spinner-module_srOnly__WnZYf"};
|
|
367
368
|
|
|
368
369
|
const Spinner = ({ size = 'md', className = '', color, label = 'Loading...', }) => {
|
|
369
|
-
return (jsxs("span", { className: `${styles$
|
|
370
|
+
return (jsxs("span", { className: `${styles$11.spinner} ${styles$11[size]} ${className}`, role: "status", "aria-label": label, style: color ? { color } : undefined, children: [jsxs("svg", { className: styles$11.svg, xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [jsx("circle", { className: styles$11.track, cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), jsx("path", { className: styles$11.indicator, fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })] }), jsx("span", { className: styles$11.srOnly, children: label })] }));
|
|
370
371
|
};
|
|
371
372
|
|
|
372
|
-
var styles
|
|
373
|
+
var styles$10 = {"badge":"StatusBadge-module_badge__-BwEk","ticketed":"StatusBadge-module_ticketed__AJVZM","itinerary":"StatusBadge-module_itinerary__yRFNy","not-ticketed":"StatusBadge-module_not-ticketed__76GXg","submitted":"StatusBadge-module_submitted__QW0LL","pending":"StatusBadge-module_pending__FpMYC","cancelled":"StatusBadge-module_cancelled__XRz4S"};
|
|
373
374
|
|
|
374
375
|
const statusLabels = {
|
|
375
376
|
ticketed: 'Ticketed',
|
|
@@ -381,20 +382,20 @@ const statusLabels = {
|
|
|
381
382
|
};
|
|
382
383
|
const StatusBadge = ({ status, label, className, }) => {
|
|
383
384
|
const displayLabel = label || statusLabels[status] || status;
|
|
384
|
-
return (jsx("span", { className: `${styles
|
|
385
|
+
return (jsx("span", { className: `${styles$10.badge} ${styles$10[status]} ${className || ''}`, "data-status": status, children: displayLabel }));
|
|
385
386
|
};
|
|
386
387
|
|
|
387
|
-
var styles
|
|
388
|
+
var styles$$ = {"tag":"Tag-module_tag__uQVQa","content":"Tag-module_content__Z5bK9","sm":"Tag-module_sm__DvKJV","md":"Tag-module_md__KTo2m","lg":"Tag-module_lg__8xhWB","default":"Tag-module_default__5-uQz","primary":"Tag-module_primary__lwwYl","success":"Tag-module_success__kl3II","warning":"Tag-module_warning__peZRm","error":"Tag-module_error__6xzkl","info":"Tag-module_info__eKYiV","clickable":"Tag-module_clickable__TyiNK","removeButton":"Tag-module_removeButton__peMwo","removeIcon":"Tag-module_removeIcon__dQyJZ"};
|
|
388
389
|
|
|
389
390
|
const Tag = ({ children, variant = 'default', size = 'md', removable = false, onRemove, onClick, className = '', style, }) => {
|
|
390
391
|
const isClickable = Boolean(onClick);
|
|
391
|
-
return (jsxs("span", { className: `${styles
|
|
392
|
+
return (jsxs("span", { className: `${styles$$.tag} ${styles$$[variant]} ${styles$$[size]} ${isClickable ? styles$$.clickable : ''} ${className}`, onClick: onClick, style: style, role: isClickable ? 'button' : undefined, tabIndex: isClickable ? 0 : undefined, children: [jsx("span", { className: styles$$.content, children: children }), removable && (jsx("button", { type: "button", className: styles$$.removeButton, onClick: (e) => {
|
|
392
393
|
e.stopPropagation();
|
|
393
394
|
onRemove?.();
|
|
394
|
-
}, "aria-label": "Remove", children: jsx("svg", { className: styles
|
|
395
|
+
}, "aria-label": "Remove", children: jsx("svg", { className: styles$$.removeIcon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }))] }));
|
|
395
396
|
};
|
|
396
397
|
|
|
397
|
-
var styles$
|
|
398
|
+
var styles$_ = {"wrapper":"Timepicker-module_wrapper__pPrwn","fullWidth":"Timepicker-module_fullWidth__de3hO","label":"Timepicker-module_label__5RDrm","inputWrapper":"Timepicker-module_inputWrapper__-E5pk","sm":"Timepicker-module_sm__sWJu2","md":"Timepicker-module_md__TfpGX","lg":"Timepicker-module_lg__xSlw-","icon":"Timepicker-module_icon__NuPk4","input":"Timepicker-module_input__NxTmR","disabled":"Timepicker-module_disabled__lyxzF","error":"Timepicker-module_error__TOMK7","helperText":"Timepicker-module_helperText__MmcqS","errorText":"Timepicker-module_errorText__pXdnE"};
|
|
398
399
|
|
|
399
400
|
const ClockIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "12", cy: "12", r: "10" }), jsx("polyline", { points: "12 6 12 12 16 14" })] }));
|
|
400
401
|
/**
|
|
@@ -406,34 +407,34 @@ const Timepicker = forwardRef(({ size = 'md', label, helperText, error, fullWidt
|
|
|
406
407
|
const helperId = `${inputId}-helper`;
|
|
407
408
|
const errorId = `${inputId}-error`;
|
|
408
409
|
const wrapperClasses = [
|
|
409
|
-
styles$
|
|
410
|
-
fullWidth ? styles$
|
|
410
|
+
styles$_.wrapper,
|
|
411
|
+
fullWidth ? styles$_.fullWidth : '',
|
|
411
412
|
className,
|
|
412
413
|
].filter(Boolean).join(' ');
|
|
413
414
|
const inputWrapperClasses = [
|
|
414
|
-
styles$
|
|
415
|
-
styles$
|
|
416
|
-
error ? styles$
|
|
417
|
-
disabled ? styles$
|
|
415
|
+
styles$_.inputWrapper,
|
|
416
|
+
styles$_[size],
|
|
417
|
+
error ? styles$_.error : '',
|
|
418
|
+
disabled ? styles$_.disabled : '',
|
|
418
419
|
].filter(Boolean).join(' ');
|
|
419
|
-
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: inputId, className: styles$
|
|
420
|
+
return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: inputId, className: styles$_.label, children: label })), jsxs("div", { className: inputWrapperClasses, children: [jsx("span", { className: styles$_.icon, children: jsx(ClockIcon, {}) }), jsx("input", { ref: ref, type: "time", id: inputId, className: styles$_.input, disabled: disabled, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
|
|
420
421
|
.filter(Boolean)
|
|
421
|
-
.join(' ') || undefined, ...props })] }), error && (jsx("span", { id: errorId, className: styles$
|
|
422
|
+
.join(' ') || undefined, ...props })] }), error && (jsx("span", { id: errorId, className: styles$_.errorText, children: error })), helperText && !error && (jsx("span", { id: helperId, className: styles$_.helperText, children: helperText }))] }));
|
|
422
423
|
});
|
|
423
424
|
Timepicker.displayName = 'Timepicker';
|
|
424
425
|
|
|
425
|
-
var styles$
|
|
426
|
+
var styles$Z = {"title":"Title-module_title__mSSqn","light":"Title-module_light__7mlh-","normal":"Title-module_normal__ZYrS4","medium":"Title-module_medium__UK-Bj","semibold":"Title-module_semibold__07lTs","bold":"Title-module_bold__-oWUS"};
|
|
426
427
|
|
|
427
428
|
/**
|
|
428
429
|
* Title component for page headings.
|
|
429
430
|
* Large, prominent text for page titles.
|
|
430
431
|
*/
|
|
431
432
|
const Title = ({ children, weight = 'light', className = '', }) => {
|
|
432
|
-
return (jsx("h1", { className: `${styles$
|
|
433
|
+
return (jsx("h1", { className: `${styles$Z.title} ${styles$Z[weight]} ${className}`, children: children }));
|
|
433
434
|
};
|
|
434
435
|
Title.displayName = 'Title';
|
|
435
436
|
|
|
436
|
-
var styles$
|
|
437
|
+
var styles$Y = {"toggle":"Toggle-module_toggle__lRFvk","checked":"Toggle-module_checked__duOWU","disabled":"Toggle-module_disabled__DV2FB","thumb":"Toggle-module_thumb__ehIbb","sm":"Toggle-module_sm__Gs9bK","md":"Toggle-module_md__hTNCY","lg":"Toggle-module_lg__DpHtS","wrapper":"Toggle-module_wrapper__-Bvff","wrapperDisabled":"Toggle-module_wrapperDisabled__ZSCvM","label":"Toggle-module_label__GeuIf"};
|
|
437
438
|
|
|
438
439
|
const Toggle = ({ checked, onChange, disabled = false, size = 'md', label, labelPosition = 'right', className = '', 'aria-label': ariaLabel, }) => {
|
|
439
440
|
const handleClick = () => {
|
|
@@ -447,14 +448,14 @@ const Toggle = ({ checked, onChange, disabled = false, size = 'md', label, label
|
|
|
447
448
|
onChange?.(!checked);
|
|
448
449
|
}
|
|
449
450
|
};
|
|
450
|
-
const toggleElement = (jsx("div", { className: `${styles$
|
|
451
|
+
const toggleElement = (jsx("div", { className: `${styles$Y.toggle} ${styles$Y[size]} ${checked ? styles$Y.checked : ''} ${disabled ? styles$Y.disabled : ''} ${className}`, onClick: handleClick, onKeyDown: handleKeyDown, role: "switch", "aria-checked": checked, "aria-disabled": disabled, "aria-label": ariaLabel || label, tabIndex: disabled ? -1 : 0, children: jsx("span", { className: styles$Y.thumb }) }));
|
|
451
452
|
if (label) {
|
|
452
|
-
return (jsxs("label", { className: `${styles$
|
|
453
|
+
return (jsxs("label", { className: `${styles$Y.wrapper} ${disabled ? styles$Y.wrapperDisabled : ''}`, children: [labelPosition === 'left' && jsx("span", { className: styles$Y.label, children: label }), toggleElement, labelPosition === 'right' && jsx("span", { className: styles$Y.label, children: label })] }));
|
|
453
454
|
}
|
|
454
455
|
return toggleElement;
|
|
455
456
|
};
|
|
456
457
|
|
|
457
|
-
var styles$
|
|
458
|
+
var styles$X = {"wrapper":"Tooltip-module_wrapper__9SUwl","tooltip":"Tooltip-module_tooltip__KQ7km","fadeIn":"Tooltip-module_fadeIn__dL8S5","content":"Tooltip-module_content__kO8yx","dark":"Tooltip-module_dark__Y66ss","light":"Tooltip-module_light__mItfR","top":"Tooltip-module_top__1jrIn","bottom":"Tooltip-module_bottom__99YBc","left":"Tooltip-module_left__ZNd1H","right":"Tooltip-module_right__r0j5Q","arrow":"Tooltip-module_arrow__qcKWx","arrowTop":"Tooltip-module_arrowTop__k13dt","arrowBottom":"Tooltip-module_arrowBottom__FP-w2","arrowLeft":"Tooltip-module_arrowLeft__7T1uO","arrowRight":"Tooltip-module_arrowRight__FbPdB"};
|
|
458
459
|
|
|
459
460
|
const Tooltip = ({ content, children, position = 'top', variant = 'dark', delay = 200, disabled = false, className = '', }) => {
|
|
460
461
|
const [isVisible, setIsVisible] = useState(false);
|
|
@@ -518,10 +519,10 @@ const Tooltip = ({ content, children, position = 'top', variant = 'dark', delay
|
|
|
518
519
|
}
|
|
519
520
|
};
|
|
520
521
|
}, []);
|
|
521
|
-
return (jsxs("div", { ref: triggerRef, className: `${styles$
|
|
522
|
+
return (jsxs("div", { ref: triggerRef, className: `${styles$X.wrapper} ${className}`, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onFocus: handleFocus, onBlur: handleBlur, children: [children, isVisible && content && (jsxs("div", { ref: tooltipRef, className: `${styles$X.tooltip} ${styles$X[actualPosition]} ${styles$X[variant]}`, role: "tooltip", children: [jsx("div", { className: styles$X.content, children: content }), jsx("div", { className: `${styles$X.arrow} ${styles$X[`arrow${actualPosition.charAt(0).toUpperCase()}${actualPosition.slice(1)}`]}` })] }))] }));
|
|
522
523
|
};
|
|
523
524
|
|
|
524
|
-
var styles$
|
|
525
|
+
var styles$W = {"service":"TravelServiceIcon-module_service__-4EZb","code":"TravelServiceIcon-module_code__vElzI","multi":"TravelServiceIcon-module_multi__nqZLM","multiIndicator":"TravelServiceIcon-module_multiIndicator__KJF1L"};
|
|
525
526
|
|
|
526
527
|
// Airline brand colors
|
|
527
528
|
const vendorColors = {
|
|
@@ -561,16 +562,16 @@ const TravelServiceIcon = ({ type, vendor, mode = 'icon', size = 28, multi = fal
|
|
|
561
562
|
const colors = mode === 'icon' && vendorColors[vendorKey]
|
|
562
563
|
? vendorColors[vendorKey]
|
|
563
564
|
: typeColors$1[type] || typeColors$1.U;
|
|
564
|
-
return (jsxs("span", { className: `${styles$
|
|
565
|
+
return (jsxs("span", { className: `${styles$W.service} ${multi ? styles$W.multi : ''} ${className || ''}`, style: {
|
|
565
566
|
width: size,
|
|
566
567
|
height: size,
|
|
567
568
|
backgroundColor: colors.bg,
|
|
568
569
|
color: colors.fg,
|
|
569
570
|
fontSize: size * 0.4,
|
|
570
|
-
}, title: vendor ? `${vendor} (${type})` : type, children: [mode === 'code' && vendor ? (jsx("span", { className: styles$
|
|
571
|
+
}, title: vendor ? `${vendor} (${type})` : type, children: [mode === 'code' && vendor ? (jsx("span", { className: styles$W.code, children: vendor })) : (jsx("svg", { viewBox: "0 0 24 24", width: size * 0.55, height: size * 0.55, fill: "currentColor", children: typeIcons$1[type] || typeIcons$1.U })), multi && jsx("span", { className: styles$W.multiIndicator, children: "+" })] }));
|
|
571
572
|
};
|
|
572
573
|
|
|
573
|
-
var styles$
|
|
574
|
+
var styles$V = {"icon":"TypeIcon-module_icon__WUL-x"};
|
|
574
575
|
|
|
575
576
|
const typeLabels = {
|
|
576
577
|
A: 'Air',
|
|
@@ -603,7 +604,7 @@ const typeIcons = {
|
|
|
603
604
|
const TypeIcon = ({ type, size = 18, showTooltip = true, className, }) => {
|
|
604
605
|
const colors = typeColors[type] || typeColors.U;
|
|
605
606
|
const label = typeLabels[type] || 'Unknown';
|
|
606
|
-
return (jsx("span", { className: `${styles$
|
|
607
|
+
return (jsx("span", { className: `${styles$V.icon} ${className || ''}`, style: {
|
|
607
608
|
width: size,
|
|
608
609
|
height: size,
|
|
609
610
|
backgroundColor: colors.bg,
|
|
@@ -611,7 +612,7 @@ const TypeIcon = ({ type, size = 18, showTooltip = true, className, }) => {
|
|
|
611
612
|
}, title: showTooltip ? label : undefined, "aria-label": label, children: jsx("svg", { viewBox: "0 0 24 24", width: size * 0.6, height: size * 0.6, fill: "currentColor", children: typeIcons[type] || typeIcons.U }) }));
|
|
612
613
|
};
|
|
613
614
|
|
|
614
|
-
var styles$
|
|
615
|
+
var styles$U = {"accordion":"Accordion-module_accordion__I3hmS","headerContainer":"Accordion-module_headerContainer__QhfHx","toggle":"Accordion-module_toggle__rlK5n","caret":"Accordion-module_caret__iZAh1","open":"Accordion-module_open__5jX-w","header":"Accordion-module_header__gzKrn","body":"Accordion-module_body__xTgL6","hidden":"Accordion-module_hidden__wcCWd","visible":"Accordion-module_visible__116om","timeline":"Accordion-module_timeline__ikrdK","line":"Accordion-module_line__buDP1","endCaret":"Accordion-module_endCaret__OXpPJ","content":"Accordion-module_content__aL8Vn"};
|
|
615
616
|
|
|
616
617
|
const CaretIcon = ({ className }) => (jsx("svg", { className: className, width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsx("polyline", { points: "9 18 15 12 9 6" }) }));
|
|
617
618
|
/**
|
|
@@ -629,21 +630,21 @@ const Accordion = ({ header, children, defaultOpen = true, open: controlledOpen,
|
|
|
629
630
|
}
|
|
630
631
|
onOpenChange?.(newOpen);
|
|
631
632
|
};
|
|
632
|
-
return (jsxs("div", { className: `${styles$
|
|
633
|
+
return (jsxs("div", { className: `${styles$U.accordion} ${className || ''}`, children: [jsxs("div", { className: styles$U.headerContainer, children: [jsx("button", { type: "button", className: styles$U.toggle, onClick: handleToggle, "aria-expanded": isOpen, children: jsx(CaretIcon, { className: `${styles$U.caret} ${isOpen ? styles$U.open : ''}` }) }), jsx("div", { className: styles$U.header, children: header })] }), jsxs("div", { className: `${styles$U.body} ${isOpen ? styles$U.visible : styles$U.hidden}`, "aria-hidden": !isOpen, children: [showTimeline && (jsxs("div", { className: styles$U.timeline, children: [jsx("div", { className: styles$U.line }), jsx(CaretIcon, { className: styles$U.endCaret })] })), jsx("div", { className: styles$U.content, children: children })] })] }));
|
|
633
634
|
};
|
|
634
635
|
Accordion.displayName = 'Accordion';
|
|
635
636
|
|
|
636
|
-
var styles$
|
|
637
|
+
var styles$T = {"selector":"CalendarSelectors-module_selector__1nDos","item":"CalendarSelectors-module_item__CoR5s","active":"CalendarSelectors-module_active__u4w6Z","sm":"CalendarSelectors-module_sm__ju5t-","withLabel":"CalendarSelectors-module_withLabel__Jr9Re","md":"CalendarSelectors-module_md__a-U38","lg":"CalendarSelectors-module_lg__WHvAF","iconOnly":"CalendarSelectors-module_iconOnly__cAjyD"};
|
|
637
638
|
|
|
638
639
|
const ListIcon = () => (jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", "aria-hidden": "true", children: [jsx("line", { x1: "8", y1: "6", x2: "21", y2: "6" }), jsx("line", { x1: "8", y1: "12", x2: "21", y2: "12" }), jsx("line", { x1: "8", y1: "18", x2: "21", y2: "18" }), jsx("circle", { cx: "3", cy: "6", r: "1", fill: "currentColor", stroke: "none" }), jsx("circle", { cx: "3", cy: "12", r: "1", fill: "currentColor", stroke: "none" }), jsx("circle", { cx: "3", cy: "18", r: "1", fill: "currentColor", stroke: "none" })] }));
|
|
639
|
-
const SegmentedSelector = ({ options, value, onChange, disabled = false, size = 'md', className = '', ariaLabel = 'View options', }) => (jsx("div", { className: [styles$
|
|
640
|
+
const SegmentedSelector = ({ options, value, onChange, disabled = false, size = 'md', className = '', ariaLabel = 'View options', }) => (jsx("div", { className: [styles$T.selector, className].filter(Boolean).join(' '), role: "group", "aria-label": ariaLabel, children: options.map((option) => {
|
|
640
641
|
const active = option.id === value;
|
|
641
642
|
const accessibleName = option.alt ?? option.label ?? option.id;
|
|
642
643
|
return (jsxs("button", { type: "button", title: accessibleName, "aria-label": accessibleName, "aria-pressed": active, disabled: disabled, className: [
|
|
643
|
-
styles$
|
|
644
|
-
styles$
|
|
645
|
-
option.label ? styles$
|
|
646
|
-
active ? styles$
|
|
644
|
+
styles$T.item,
|
|
645
|
+
styles$T[size],
|
|
646
|
+
option.label ? styles$T.withLabel : styles$T.iconOnly,
|
|
647
|
+
active ? styles$T.active : '',
|
|
647
648
|
].filter(Boolean).join(' '), onClick: () => onChange?.(option.id), children: [option.icon, option.label && jsx("span", { children: option.label })] }, option.id));
|
|
648
649
|
}) }));
|
|
649
650
|
const CalendarViewSelector = ({ value, onChange, ...props }) => (jsx(SegmentedSelector, { ...props, ariaLabel: "Calendar view", value: value, onChange: (nextValue) => onChange?.(nextValue), options: [
|
|
@@ -656,7 +657,7 @@ const CalendarTypeSelector = ({ value, onChange, ...props }) => (jsx(SegmentedSe
|
|
|
656
657
|
{ id: 'due_dates', label: 'Due Dates' },
|
|
657
658
|
] }));
|
|
658
659
|
|
|
659
|
-
var styles$
|
|
660
|
+
var styles$S = {"dropdown":"Dropdown-module_dropdown__K4-yz","arrow":"Dropdown-module_arrow__2Xuwf","arrowOpen":"Dropdown-module_arrowOpen__5g2iY","menu":"Dropdown-module_menu__dCgm8","menuOpen":"Dropdown-module_menuOpen__-IXFR","left":"Dropdown-module_left__tnNcS","center":"Dropdown-module_center__s9zhj","right":"Dropdown-module_right__s71gz","item":"Dropdown-module_item__R008o","itemDisabled":"Dropdown-module_itemDisabled__XIuNm","itemIcon":"Dropdown-module_itemIcon__DbSnD"};
|
|
660
661
|
|
|
661
662
|
const Dropdown = ({ label, children, alignment = 'left', width, className = '', disabled = false, }) => {
|
|
662
663
|
const [isOpen, setIsOpen] = useState(false);
|
|
@@ -679,14 +680,14 @@ const Dropdown = ({ label, children, alignment = 'left', width, className = '',
|
|
|
679
680
|
setIsOpen(false);
|
|
680
681
|
}
|
|
681
682
|
};
|
|
682
|
-
return (jsxs("div", { ref: dropdownRef, className: `${styles$
|
|
683
|
+
return (jsxs("div", { ref: dropdownRef, className: `${styles$S.dropdown} ${className}`, onKeyDown: handleKeyDown, children: [jsxs(Button, { variant: "secondary", onClick: () => !disabled && setIsOpen(!isOpen), disabled: disabled, "aria-expanded": isOpen, "aria-haspopup": "true", children: [label, jsx("svg", { className: `${styles$S.arrow} ${isOpen ? styles$S.arrowOpen : ''}`, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", width: "16", height: "16", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })] }), jsx("div", { className: `${styles$S.menu} ${styles$S[alignment]} ${isOpen ? styles$S.menuOpen : ''}`, style: width ? { minWidth: `${width}px` } : undefined, role: "menu", children: children })] }));
|
|
683
684
|
};
|
|
684
685
|
const DropdownItem = ({ children, onClick, disabled = false, icon, className = '', }) => {
|
|
685
|
-
return (jsxs("button", { type: "button", className: `${styles$
|
|
686
|
+
return (jsxs("button", { type: "button", className: `${styles$S.item} ${disabled ? styles$S.itemDisabled : ''} ${className}`, onClick: onClick, disabled: disabled, role: "menuitem", children: [icon && jsx("span", { className: styles$S.itemIcon, children: icon }), children] }));
|
|
686
687
|
};
|
|
687
688
|
Dropdown.Item = DropdownItem;
|
|
688
689
|
|
|
689
|
-
var styles$
|
|
690
|
+
var styles$R = {"wrapper":"FilterChip-module_wrapper__YDRSW","chip":"FilterChip-module_chip__pF7K5","open":"FilterChip-module_open__EYBp7","active":"FilterChip-module_active__JEkku","label":"FilterChip-module_label__tRr-y","value":"FilterChip-module_value__0EcVu","chevron":"FilterChip-module_chevron__kh13z","rotated":"FilterChip-module_rotated__U-FzI","dropdown":"FilterChip-module_dropdown__w3ytW","infoMessage":"FilterChip-module_infoMessage__0TzcA","searchWrapper":"FilterChip-module_searchWrapper__VHOSK","searchIcon":"FilterChip-module_searchIcon__jJ2K-","searchInput":"FilterChip-module_searchInput__FqwvR","optionsList":"FilterChip-module_optionsList__P0dgd","option":"FilterChip-module_option__DMuqM","selected":"FilterChip-module_selected__ltt9Y","noResults":"FilterChip-module_noResults__QGNao"};
|
|
690
691
|
|
|
691
692
|
const FilterChip = ({ label, value, options, onChange, searchable = false, searchPlaceholder = 'Search...', infoMessage, className, }) => {
|
|
692
693
|
const [open, setOpen] = useState(false);
|
|
@@ -723,13 +724,13 @@ const FilterChip = ({ label, value, options, onChange, searchable = false, searc
|
|
|
723
724
|
const selectedOption = options.find(opt => opt.value === value);
|
|
724
725
|
const displayValue = selectedOption?.label || value;
|
|
725
726
|
const isDefault = value === options[0]?.value;
|
|
726
|
-
return (jsxs("div", { ref: ref, className: `${styles$
|
|
727
|
+
return (jsxs("div", { ref: ref, className: `${styles$R.wrapper} ${className || ''}`, children: [jsxs("button", { type: "button", className: `${styles$R.chip} ${open ? styles$R.open : ''} ${!isDefault ? styles$R.active : ''}`, onClick: () => setOpen(!open), "aria-haspopup": "listbox", "aria-expanded": open, children: [jsxs("span", { className: styles$R.label, children: [label, ":"] }), jsx("span", { className: styles$R.value, children: displayValue }), jsx("svg", { className: `${styles$R.chevron} ${open ? styles$R.rotated : ''}`, width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsx("polyline", { points: "6 9 12 15 18 9" }) })] }), open && (jsxs("div", { className: styles$R.dropdown, role: "listbox", children: [infoMessage && (jsxs("div", { className: styles$R.infoMessage, children: [jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "currentColor", children: jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z" }) }), jsx("span", { children: infoMessage })] })), searchable && (jsxs("div", { className: styles$R.searchWrapper, children: [jsxs("svg", { className: styles$R.searchIcon, width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "11", cy: "11", r: "8" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })] }), jsx("input", { type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: searchPlaceholder, className: styles$R.searchInput, autoFocus: true })] })), jsxs("div", { className: styles$R.optionsList, children: [filteredOptions.map((option) => (jsx("button", { type: "button", role: "option", "aria-selected": option.value === value, className: `${styles$R.option} ${option.value === value ? styles$R.selected : ''}`, onClick: () => {
|
|
727
728
|
onChange(option.value);
|
|
728
729
|
setOpen(false);
|
|
729
|
-
}, children: option.label }, option.value))), filteredOptions.length === 0 && (jsx("div", { className: styles$
|
|
730
|
+
}, children: option.label }, option.value))), filteredOptions.length === 0 && (jsx("div", { className: styles$R.noResults, children: "No results found" }))] })] }))] }));
|
|
730
731
|
};
|
|
731
732
|
|
|
732
|
-
var styles$
|
|
733
|
+
var styles$Q = {"formField":"FormField-module_formField__VhLhK","label":"FormField-module_label__CNCs6","required":"FormField-module_required__HkPQf","inputElement":"FormField-module_inputElement__9uvGR","inputError":"FormField-module_inputError__xD7fk","helperText":"FormField-module_helperText__D99kd","errorText":"FormField-module_errorText__8mXAJ","visuallyHidden":"FormField-module_visuallyHidden__YQc7S"};
|
|
733
734
|
|
|
734
735
|
const FormField = forwardRef(({ label, helperText, error, required = false, hideLabel = false, className, as = 'input', inputProps, textareaProps, children, }, ref) => {
|
|
735
736
|
const generatedId = useId();
|
|
@@ -748,15 +749,15 @@ const FormField = forwardRef(({ label, helperText, error, required = false, hide
|
|
|
748
749
|
return children;
|
|
749
750
|
}
|
|
750
751
|
if (as === 'textarea') {
|
|
751
|
-
return (jsx(Textarea, { ref: ref, id: inputId, "aria-describedby": describedBy, "aria-invalid": hasError, "aria-required": required, ...textareaProps, className: `${styles$
|
|
752
|
+
return (jsx(Textarea, { ref: ref, id: inputId, "aria-describedby": describedBy, "aria-invalid": hasError, "aria-required": required, ...textareaProps, className: `${styles$Q.inputElement} ${hasError ? styles$Q.inputError : ''} ${textareaProps?.className || ''}` }));
|
|
752
753
|
}
|
|
753
|
-
return (jsx(Input, { ref: ref, id: inputId, "aria-describedby": describedBy, "aria-invalid": hasError, "aria-required": required, ...inputProps, className: `${styles$
|
|
754
|
+
return (jsx(Input, { ref: ref, id: inputId, "aria-describedby": describedBy, "aria-invalid": hasError, "aria-required": required, ...inputProps, className: `${styles$Q.inputElement} ${hasError ? styles$Q.inputError : ''} ${inputProps?.className || ''}` }));
|
|
754
755
|
};
|
|
755
|
-
return (jsxs("div", { className: `${styles$
|
|
756
|
+
return (jsxs("div", { className: `${styles$Q.formField} ${className || ''}`, children: [jsxs("label", { htmlFor: inputId, className: `${styles$Q.label} ${hideLabel ? styles$Q.visuallyHidden : ''}`, children: [label, required && jsx("span", { className: styles$Q.required, "aria-hidden": "true", children: "*" })] }), renderInput(), helperText && !hasError && (jsx("p", { id: helperId, className: styles$Q.helperText, children: helperText })), hasError && (jsx("p", { id: errorId, className: styles$Q.errorText, role: "alert", children: error }))] }));
|
|
756
757
|
});
|
|
757
758
|
FormField.displayName = 'FormField';
|
|
758
759
|
|
|
759
|
-
var styles$
|
|
760
|
+
var styles$P = {"row":"FormRow-module_row__2ObP9","cols1":"FormRow-module_cols1__WsxX3","cols2":"FormRow-module_cols2__t548T","cols3":"FormRow-module_cols3__zjoSR","cols4":"FormRow-module_cols4__DbZL-","gapsm":"FormRow-module_gapsm__sl0ji","gapmd":"FormRow-module_gapmd__77Yp3","gaplg":"FormRow-module_gaplg__Yb-fh","stackMobile":"FormRow-module_stackMobile__6UluR"};
|
|
760
761
|
|
|
761
762
|
/**
|
|
762
763
|
* FormRow component for laying out form fields in a responsive grid.
|
|
@@ -766,16 +767,16 @@ const FormRow = ({ children, columns, gap = 'md', className, stackOnMobile = tru
|
|
|
766
767
|
const childCount = Children.count(children);
|
|
767
768
|
const colCount = columns || (childCount > 4 ? 4 : childCount);
|
|
768
769
|
return (jsx("div", { className: `
|
|
769
|
-
${styles$
|
|
770
|
-
${styles$
|
|
771
|
-
${styles$
|
|
772
|
-
${stackOnMobile ? styles$
|
|
770
|
+
${styles$P.row}
|
|
771
|
+
${styles$P[`cols${colCount}`]}
|
|
772
|
+
${styles$P[`gap${gap}`]}
|
|
773
|
+
${stackOnMobile ? styles$P.stackMobile : ''}
|
|
773
774
|
${className || ''}
|
|
774
775
|
`, children: children }));
|
|
775
776
|
};
|
|
776
777
|
FormRow.displayName = 'FormRow';
|
|
777
778
|
|
|
778
|
-
var styles$
|
|
779
|
+
var styles$O = {"section":"FormSection-module_section__T17Vg","header":"FormSection-module_header__2MkY6","icon":"FormSection-module_icon__uywPB","title":"FormSection-module_title__dlvYD","fieldset":"FormSection-module_fieldset__pDDIo","disabled":"FormSection-module_disabled__xC3-e","status":"FormSection-module_status__2XOyW","statusLabel":"FormSection-module_statusLabel__VAuDb","statusValue":"FormSection-module_statusValue__YKSc-","submitted":"FormSection-module_submitted__sS-zT","not-submitted":"FormSection-module_not-submitted__Kuk2i","draft":"FormSection-module_draft__XHq3-"};
|
|
779
780
|
|
|
780
781
|
/**
|
|
781
782
|
* FormSection component for grouping related form fields with a title and icon.
|
|
@@ -784,45 +785,45 @@ var styles$N = {"section":"FormSection-module_section__T17Vg","header":"FormSect
|
|
|
784
785
|
const FormSection = ({ title, icon, status, disabled = false, children, className, id, }) => {
|
|
785
786
|
const isSubmitted = status === 'submitted';
|
|
786
787
|
const isDisabled = disabled || isSubmitted;
|
|
787
|
-
return (jsxs("div", { className: `${styles$
|
|
788
|
+
return (jsxs("div", { className: `${styles$O.section} ${className || ''}`, id: id, children: [jsxs("div", { className: styles$O.header, children: [icon && jsx("span", { className: styles$O.icon, children: icon }), jsx("h2", { className: styles$O.title, children: title })] }), jsxs("fieldset", { disabled: isDisabled, className: `${styles$O.fieldset} ${isDisabled ? styles$O.disabled : ''}`, children: [status && (jsxs("div", { className: styles$O.status, children: [jsx("span", { className: styles$O.statusLabel, children: "Status:" }), jsx("span", { className: `${styles$O.statusValue} ${styles$O[status]}`, children: status === 'submitted' ? 'Submitted' : status === 'draft' ? 'Draft' : 'Not Submitted' })] })), children] })] }));
|
|
788
789
|
};
|
|
789
790
|
FormSection.displayName = 'FormSection';
|
|
790
791
|
|
|
791
|
-
var styles$
|
|
792
|
+
var styles$N = {"stack":"FormStack-module_stack__SURjY","sm":"FormStack-module_sm__rt3tb","md":"FormStack-module_md__SRDmc","lg":"FormStack-module_lg__jql3j"};
|
|
792
793
|
|
|
793
794
|
/** Standard vertical form-field rhythm used by Hub modal forms. */
|
|
794
|
-
const FormStack = ({ children, gap = 'md', className = '' }) => (jsx("div", { className: [styles$
|
|
795
|
+
const FormStack = ({ children, gap = 'md', className = '' }) => (jsx("div", { className: [styles$N.stack, styles$N[gap], className].filter(Boolean).join(' '), children: children }));
|
|
795
796
|
|
|
796
|
-
var styles$
|
|
797
|
+
var styles$M = {"toggle":"ManifestViewToggle-module_toggle__sHnAd","lockedToggle":"ManifestViewToggle-module_lockedToggle__m70h9","tab":"ManifestViewToggle-module_tab__qcwg7","active":"ManifestViewToggle-module_active__ln3B8","locked":"ManifestViewToggle-module_locked__Udun8","lockedActive":"ManifestViewToggle-module_lockedActive__kYSaF","count":"ManifestViewToggle-module_count__M-8a8"};
|
|
797
798
|
|
|
798
799
|
const ManifestViewToggle = ({ view, onView, paxCount, eqCount, locked, className = '', }) => {
|
|
799
800
|
const tabs = [
|
|
800
801
|
{ key: 'passengers', label: 'Passengers', count: paxCount, icon: UsersIcon$1 },
|
|
801
802
|
{ key: 'equipment', label: 'Equipment', count: eqCount, icon: CubeIcon },
|
|
802
803
|
];
|
|
803
|
-
return (jsx("div", { className: [styles$
|
|
804
|
+
return (jsx("div", { className: [styles$M.toggle, locked ? styles$M.lockedToggle : '', className].filter(Boolean).join(' '), role: "tablist", "aria-label": "Manifest view", children: tabs.map((tab) => {
|
|
804
805
|
const active = view === tab.key;
|
|
805
806
|
const Icon = locked ? LockIcon$1 : tab.icon;
|
|
806
807
|
return (jsxs("button", { type: "button", role: "tab", "aria-selected": active, onClick: () => onView(tab.key), className: [
|
|
807
|
-
styles$
|
|
808
|
-
active ? styles$
|
|
809
|
-
locked ? styles$
|
|
810
|
-
locked && active ? styles$
|
|
811
|
-
].filter(Boolean).join(' '), children: [jsx(Icon, { size: 16 }), tab.label, jsx("span", { className: styles$
|
|
808
|
+
styles$M.tab,
|
|
809
|
+
active ? styles$M.active : '',
|
|
810
|
+
locked ? styles$M.locked : '',
|
|
811
|
+
locked && active ? styles$M.lockedActive : '',
|
|
812
|
+
].filter(Boolean).join(' '), children: [jsx(Icon, { size: 16 }), tab.label, jsx("span", { className: styles$M.count, children: tab.count })] }, tab.key));
|
|
812
813
|
}) }));
|
|
813
814
|
};
|
|
814
815
|
|
|
815
|
-
var styles$
|
|
816
|
+
var styles$L = {"navItem":"NavItem-module_navItem__4PpZU","disabled":"NavItem-module_disabled__uYqez","default":"NavItem-module_default__VB92P","active":"NavItem-module_active__3bcnW","pill":"NavItem-module_pill__pn5gl","icon":"NavItem-module_icon__j9VQ5","label":"NavItem-module_label__3S3KY","sm":"NavItem-module_sm__1oeZI","md":"NavItem-module_md__ySO90","lg":"NavItem-module_lg__OmaBw","collapsed":"NavItem-module_collapsed__ciZ6-","iconSm":"NavItem-module_iconSm__UvWnu","iconMd":"NavItem-module_iconMd__uAMlQ","iconLg":"NavItem-module_iconLg__PFPKD","badge":"NavItem-module_badge__oP9u2"};
|
|
816
817
|
|
|
817
818
|
const NavItem = ({ icon, label, active = false, collapsed = false, variant = 'default', size = 'md', badge, badgeVariant = 'default', onClick, disabled = false, href, external = false, className, 'aria-label': ariaLabel, }) => {
|
|
818
|
-
const content = (jsxs(Fragment, { children: [icon && jsx("span", { className: `${styles$
|
|
819
|
+
const content = (jsxs(Fragment, { children: [icon && jsx("span", { className: `${styles$L.icon} ${styles$L[`icon${size.charAt(0).toUpperCase()}${size.slice(1)}`]}`, "aria-hidden": "true", children: icon }), !collapsed && (jsx("span", { className: styles$L.label, children: label })), badge !== undefined && !collapsed && (jsx(Badge, { variant: badgeVariant, className: styles$L.badge, children: badge }))] }));
|
|
819
820
|
const classNames = [
|
|
820
|
-
styles$
|
|
821
|
-
styles$
|
|
822
|
-
styles$
|
|
823
|
-
active ? styles$
|
|
824
|
-
collapsed ? styles$
|
|
825
|
-
disabled ? styles$
|
|
821
|
+
styles$L.navItem,
|
|
822
|
+
styles$L[variant],
|
|
823
|
+
styles$L[size],
|
|
824
|
+
active ? styles$L.active : '',
|
|
825
|
+
collapsed ? styles$L.collapsed : '',
|
|
826
|
+
disabled ? styles$L.disabled : '',
|
|
826
827
|
className || '',
|
|
827
828
|
].filter(Boolean).join(' ');
|
|
828
829
|
const commonProps = {
|
|
@@ -837,7 +838,7 @@ const NavItem = ({ icon, label, active = false, collapsed = false, variant = 'de
|
|
|
837
838
|
return (jsx("button", { type: "button", onClick: disabled ? undefined : onClick, disabled: disabled, ...commonProps, children: content }));
|
|
838
839
|
};
|
|
839
840
|
|
|
840
|
-
var styles$
|
|
841
|
+
var styles$K = {"barContainer":"Progress-module_barContainer__e4v8v","barTrack":"Progress-module_barTrack__tJsPO","barFill":"Progress-module_barFill__RbcDy","barxs":"Progress-module_barxs__TLS4q","barsm":"Progress-module_barsm__BFAiw","barmd":"Progress-module_barmd__QDW-h","barlg":"Progress-module_barlg__C-Mzw","barLabel":"Progress-module_barLabel__4PFJ7","circleContainer":"Progress-module_circleContainer__zyOTa","circleSvg":"Progress-module_circleSvg__0Tt1Q","circleTrack":"Progress-module_circleTrack__p4VWf","circleFill":"Progress-module_circleFill__6fU2M","circleLabel":"Progress-module_circleLabel__vHLfU","primary":"Progress-module_primary__H2wpc","success":"Progress-module_success__rmmnE","warning":"Progress-module_warning__68ovy","error":"Progress-module_error__ZXkH0"};
|
|
841
842
|
|
|
842
843
|
const dimensions = {
|
|
843
844
|
xs: 32,
|
|
@@ -853,7 +854,7 @@ const strokeWidths = {
|
|
|
853
854
|
};
|
|
854
855
|
const ProgressBar = ({ value, max = 100, size = 'md', variant = 'primary', showLabel = false, className = '', }) => {
|
|
855
856
|
const percentage = Math.min(Math.max((value / max) * 100, 0), 100);
|
|
856
|
-
return (jsxs("div", { className: `${styles$
|
|
857
|
+
return (jsxs("div", { className: `${styles$K.barContainer} ${styles$K[`bar${size}`]} ${className}`, children: [jsx("div", { className: styles$K.barTrack, children: jsx("div", { className: `${styles$K.barFill} ${styles$K[variant]}`, style: { width: `${percentage}%` }, role: "progressbar", "aria-valuenow": value, "aria-valuemin": 0, "aria-valuemax": max }) }), showLabel && (jsxs("span", { className: styles$K.barLabel, children: [Math.round(percentage), "%"] }))] }));
|
|
857
858
|
};
|
|
858
859
|
const ProgressCircle = ({ value, max = 100, size = 'md', variant = 'primary', showLabel = false, className = '', }) => {
|
|
859
860
|
const percentage = Math.min(Math.max((value / max) * 100, 0), 100);
|
|
@@ -862,7 +863,7 @@ const ProgressCircle = ({ value, max = 100, size = 'md', variant = 'primary', sh
|
|
|
862
863
|
const radius = (dimension - strokeWidth) / 2;
|
|
863
864
|
const circumference = radius * 2 * Math.PI;
|
|
864
865
|
const strokeDashoffset = circumference - (percentage / 100) * circumference;
|
|
865
|
-
return (jsxs("div", { className: `${styles$
|
|
866
|
+
return (jsxs("div", { className: `${styles$K.circleContainer} ${className}`, style: { width: dimension, height: dimension }, children: [jsxs("svg", { width: dimension, height: dimension, className: styles$K.circleSvg, children: [jsx("circle", { className: styles$K.circleTrack, cx: dimension / 2, cy: dimension / 2, r: radius, strokeWidth: strokeWidth, fill: "transparent" }), jsx("circle", { className: `${styles$K.circleFill} ${styles$K[variant]}`, cx: dimension / 2, cy: dimension / 2, r: radius, strokeWidth: strokeWidth, fill: "transparent", strokeDasharray: circumference, strokeDashoffset: strokeDashoffset, strokeLinecap: "round", role: "progressbar", "aria-valuenow": value, "aria-valuemin": 0, "aria-valuemax": max })] }), showLabel && (jsxs("span", { className: styles$K.circleLabel, style: { fontSize: size === 'xs' ? '8px' : size === 'sm' ? '10px' : size === 'md' ? '12px' : '14px' }, children: [Math.round(percentage), "%"] }))] }));
|
|
866
867
|
};
|
|
867
868
|
// Combined export
|
|
868
869
|
const Progress = {
|
|
@@ -870,7 +871,7 @@ const Progress = {
|
|
|
870
871
|
Circle: ProgressCircle,
|
|
871
872
|
};
|
|
872
873
|
|
|
873
|
-
var styles$
|
|
874
|
+
var styles$J = {"toolbar":"RosterToolbar-module_toolbar__IHjs9","leftSection":"RosterToolbar-module_leftSection__baz7E","rightSection":"RosterToolbar-module_rightSection__R2b-D","dropdown":"RosterToolbar-module_dropdown__NKaWV","dropdownTrigger":"RosterToolbar-module_dropdownTrigger__nCoaZ","dropdownMenu":"RosterToolbar-module_dropdownMenu__7QuED","dropdownItem":"RosterToolbar-module_dropdownItem__mrsat","dropdownItemIcon":"RosterToolbar-module_dropdownItemIcon__gx5tx","lockButton":"RosterToolbar-module_lockButton__zw3s0","locked":"RosterToolbar-module_locked__DVnqB","saveButton":"RosterToolbar-module_saveButton__th1lq","spinner":"RosterToolbar-module_spinner__uWdPg"};
|
|
874
875
|
|
|
875
876
|
const ImportIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), jsx("polyline", { points: "17 8 12 3 7 8" }), jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })] }));
|
|
876
877
|
const ExportIcon$1 = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), jsx("polyline", { points: "7 10 12 15 17 10" }), jsx("line", { x1: "12", y1: "15", x2: "12", y2: "3" })] }));
|
|
@@ -878,23 +879,23 @@ const ChevronIcon$2 = () => (jsx("svg", { width: "12", height: "12", viewBox: "0
|
|
|
878
879
|
const LockIcon = () => (jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })] }));
|
|
879
880
|
const UnlockIcon = () => (jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsx("path", { d: "M7 11V7a5 5 0 0 1 9.9-1" })] }));
|
|
880
881
|
const SaveIcon = () => (jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("path", { d: "M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" }), jsx("polyline", { points: "17 21 17 13 7 13 7 21" }), jsx("polyline", { points: "7 3 7 8 15 8" })] }));
|
|
881
|
-
const SpinnerIcon = () => (jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: styles$
|
|
882
|
+
const SpinnerIcon = () => (jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: styles$J.spinner, children: jsx("circle", { cx: "12", cy: "12", r: "10", strokeDasharray: "32", strokeDashoffset: "32" }) }));
|
|
882
883
|
const DropdownButton = ({ label, icon, options, }) => {
|
|
883
|
-
return (jsxs("div", { className: styles$
|
|
884
|
+
return (jsxs("div", { className: styles$J.dropdown, children: [jsxs("button", { type: "button", className: styles$J.dropdownTrigger, children: [icon, jsx("span", { children: label }), jsx(ChevronIcon$2, {})] }), jsx("div", { className: styles$J.dropdownMenu, children: options.map((option, i) => (jsxs("button", { type: "button", className: styles$J.dropdownItem, onClick: option.onClick, disabled: option.disabled, children: [option.icon && jsx("span", { className: styles$J.dropdownItemIcon, children: option.icon }), option.label] }, i))) })] }));
|
|
884
885
|
};
|
|
885
886
|
/**
|
|
886
887
|
* RosterToolbar - Toolbar for roster management with import/export/save actions
|
|
887
888
|
*/
|
|
888
889
|
const RosterToolbar = ({ importOptions, exportOptions, lockToggle, saveButton, additionalActions, searchField, className = '', }) => {
|
|
889
|
-
const toolbarClasses = [styles$
|
|
890
|
-
return (jsxs("div", { className: toolbarClasses, children: [jsxs("div", { className: styles$
|
|
891
|
-
styles$
|
|
892
|
-
lockToggle.isLocked ? styles$
|
|
893
|
-
].filter(Boolean).join(' '), onClick: () => lockToggle.onToggle(!lockToggle.isLocked), disabled: lockToggle.disabled, "aria-label": lockToggle.isLocked ? 'Unlock roster' : 'Lock roster', children: [lockToggle.isLocked ? jsx(LockIcon, {}) : jsx(UnlockIcon, {}), jsx("span", { children: lockToggle.isLocked ? 'Locked' : 'Unlocked' })] })), saveButton && (jsxs("button", { type: "button", className: styles$
|
|
890
|
+
const toolbarClasses = [styles$J.toolbar, className].filter(Boolean).join(' ');
|
|
891
|
+
return (jsxs("div", { className: toolbarClasses, children: [jsxs("div", { className: styles$J.leftSection, children: [searchField, additionalActions] }), jsxs("div", { className: styles$J.rightSection, children: [importOptions && importOptions.length > 0 && (jsx(DropdownButton, { label: "Import", icon: jsx(ImportIcon, {}), options: importOptions })), exportOptions && exportOptions.length > 0 && (jsx(DropdownButton, { label: "Export", icon: jsx(ExportIcon$1, {}), options: exportOptions })), lockToggle && (jsxs("button", { type: "button", className: [
|
|
892
|
+
styles$J.lockButton,
|
|
893
|
+
lockToggle.isLocked ? styles$J.locked : '',
|
|
894
|
+
].filter(Boolean).join(' '), onClick: () => lockToggle.onToggle(!lockToggle.isLocked), disabled: lockToggle.disabled, "aria-label": lockToggle.isLocked ? 'Unlock roster' : 'Lock roster', children: [lockToggle.isLocked ? jsx(LockIcon, {}) : jsx(UnlockIcon, {}), jsx("span", { children: lockToggle.isLocked ? 'Locked' : 'Unlocked' })] })), saveButton && (jsxs("button", { type: "button", className: styles$J.saveButton, onClick: saveButton.onClick, disabled: saveButton.disabled || saveButton.loading, children: [saveButton.loading ? jsx(SpinnerIcon, {}) : jsx(SaveIcon, {}), jsx("span", { children: saveButton.label || 'Save' })] }))] })] }));
|
|
894
895
|
};
|
|
895
896
|
RosterToolbar.displayName = 'RosterToolbar';
|
|
896
897
|
|
|
897
|
-
var styles$
|
|
898
|
+
var styles$I = {"searchField":"SearchField-module_searchField__c7gUE","inputWrapper":"SearchField-module_inputWrapper__SUzHv","searchIcon":"SearchField-module_searchIcon__MOZ2m","input":"SearchField-module_input__abJcl","clearButton":"SearchField-module_clearButton__RMIg2","sm":"SearchField-module_sm__-sayT","lg":"SearchField-module_lg__QKacI"};
|
|
898
899
|
|
|
899
900
|
const SearchField = forwardRef(({ placeholder = 'Search...', value, defaultValue = '', onChange, onSearch, onClear, size = 'md', disabled = false, showClear = true, showButton = true, className, id, 'aria-label': ariaLabel = 'Search', ...props }, ref) => {
|
|
900
901
|
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
@@ -922,25 +923,25 @@ const SearchField = forwardRef(({ placeholder = 'Search...', value, defaultValue
|
|
|
922
923
|
onSearch?.(currentValue);
|
|
923
924
|
}
|
|
924
925
|
};
|
|
925
|
-
return (jsxs("form", { className: `${styles$
|
|
926
|
+
return (jsxs("form", { className: `${styles$I.searchField} ${styles$I[size]} ${className || ''}`, onSubmit: handleSubmit, role: "search", children: [jsxs("div", { className: styles$I.inputWrapper, children: [jsx(SearchIcon$1, { className: styles$I.searchIcon, "aria-hidden": "true" }), jsx(Input, { ref: ref, id: id, type: "search", placeholder: placeholder, value: currentValue, onChange: handleChange, onKeyDown: handleKeyDown, disabled: disabled, className: styles$I.input, "aria-label": ariaLabel, ...props }), showClear && currentValue && (jsx("button", { type: "button", className: styles$I.clearButton, onClick: handleClear, disabled: disabled, "aria-label": "Clear search", children: jsx(CloseIcon, { size: 16 }) }))] }), showButton && (jsx(Button, { type: "submit", variant: "primary", size: size, disabled: disabled, children: "Search" }))] }));
|
|
926
927
|
});
|
|
927
928
|
SearchField.displayName = 'SearchField';
|
|
928
929
|
|
|
929
|
-
var styles$
|
|
930
|
+
var styles$H = {"form":"SchoolContactForm-module_form__-Mx7k","portalLabel":"SchoolContactForm-module_portalLabel__GAeV6","newContactLabel":"SchoolContactForm-module_newContactLabel__7S3Vw","divider":"SchoolContactForm-module_divider__ZSx-R","nameFields":"SchoolContactForm-module_nameFields__Fcjl8","phoneFields":"SchoolContactForm-module_phoneFields__-zRPe"};
|
|
930
931
|
|
|
931
932
|
/**
|
|
932
933
|
* Layout for Hub's school-contact editor. Field controls stay injectable so
|
|
933
934
|
* consuming applications retain their form state, validation, and masking.
|
|
934
935
|
*/
|
|
935
|
-
const SchoolContactForm = ({ mode, createFromPortalUser, firstNameField, middleInitialField, lastNameField, businessPhoneField, cellPhoneField, emailField, className = '', }) => (jsxs("div", { className: [styles$
|
|
936
|
+
const SchoolContactForm = ({ mode, createFromPortalUser, firstNameField, middleInitialField, lastNameField, businessPhoneField, cellPhoneField, emailField, className = '', }) => (jsxs("div", { className: [styles$H.form, className].filter(Boolean).join(' '), children: [mode === 'Add' && (jsxs(Fragment, { children: [jsxs("div", { children: [jsx("label", { className: styles$H.portalLabel, children: "Create From Portal User" }), createFromPortalUser] }), jsx("div", { className: styles$H.divider, children: jsx("strong", { children: "OR" }) }), jsx("p", { className: styles$H.newContactLabel, children: "Create New Contact Without Portal Access" })] })), jsxs("div", { className: styles$H.nameFields, children: [firstNameField, middleInitialField, lastNameField] }), jsxs("div", { className: styles$H.phoneFields, children: [businessPhoneField, cellPhoneField] }), jsx("div", { children: emailField })] }));
|
|
936
937
|
|
|
937
|
-
var styles$
|
|
938
|
+
var styles$G = {"segment":"Segment-module_segment__UF-SG","fullWidth":"Segment-module_fullWidth__Hi19i","option":"Segment-module_option__UJUhj","disabled":"Segment-module_disabled__CSxuQ","selected":"Segment-module_selected__gRnVj","sm":"Segment-module_sm__h8S7Z","md":"Segment-module_md__4uTae","lg":"Segment-module_lg__zL0Hv","icon":"Segment-module_icon__ZHRr6"};
|
|
938
939
|
|
|
939
940
|
const Segment = ({ options, value, onChange, size = 'md', fullWidth = false, className = '', 'aria-label': ariaLabel, }) => {
|
|
940
|
-
return (jsx("div", { className: `${styles$
|
|
941
|
+
return (jsx("div", { className: `${styles$G.segment} ${styles$G[size]} ${fullWidth ? styles$G.fullWidth : ''} ${className}`, role: "radiogroup", "aria-label": ariaLabel, children: options.map((option) => (jsxs("button", { type: "button", className: `${styles$G.option} ${value === option.value ? styles$G.selected : ''} ${option.disabled ? styles$G.disabled : ''}`, onClick: () => !option.disabled && onChange(option.value), disabled: option.disabled, role: "radio", "aria-checked": value === option.value, children: [option.icon && jsx("span", { className: styles$G.icon, children: option.icon }), option.label] }, option.value))) }));
|
|
941
942
|
};
|
|
942
943
|
|
|
943
|
-
var styles$
|
|
944
|
+
var styles$F = {"container":"SelectFilter-module_container__tCC9y","trigger":"SelectFilter-module_trigger__5WbMf","open":"SelectFilter-module_open__oo-Y6","disabled":"SelectFilter-module_disabled__JUdi3","triggerText":"SelectFilter-module_triggerText__LM07K","placeholder":"SelectFilter-module_placeholder__J0xyo","chevron":"SelectFilter-module_chevron__x-Pnr","dropdown":"SelectFilter-module_dropdown__52FPP","tabs":"SelectFilter-module_tabs__wp6on","tab":"SelectFilter-module_tab__JpnWo","activeTab":"SelectFilter-module_activeTab__ShP7x","actions":"SelectFilter-module_actions__phfFl","actionBtn":"SelectFilter-module_actionBtn__ppB--","options":"SelectFilter-module_options__p1iCX","option":"SelectFilter-module_option__0vwfy","selected":"SelectFilter-module_selected__2vxyT","checkbox":"SelectFilter-module_checkbox__qTUjy","optionLabel":"SelectFilter-module_optionLabel__L4CMA","footer":"SelectFilter-module_footer__aq4JP","applyBtn":"SelectFilter-module_applyBtn__RFKei"};
|
|
944
945
|
|
|
945
946
|
const ChevronIcon$1 = () => (jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsx("polyline", { points: "6 9 12 15 18 9" }) }));
|
|
946
947
|
const CheckIcon = () => (jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsx("polyline", { points: "20 6 9 17 4 12" }) }));
|
|
@@ -1013,11 +1014,11 @@ const SelectFilter = ({ label, options = [], groupedOptions = {}, value = [], on
|
|
|
1013
1014
|
}
|
|
1014
1015
|
return `${selected.length} selected`;
|
|
1015
1016
|
};
|
|
1016
|
-
return (jsxs("div", { ref: dropdownRef, className: `${styles$
|
|
1017
|
+
return (jsxs("div", { ref: dropdownRef, className: `${styles$F.container} ${className}`, children: [jsxs("button", { type: "button", className: `${styles$F.trigger} ${disabled ? styles$F.disabled : ''} ${isOpen ? styles$F.open : ''}`, onClick: () => !disabled && setIsOpen(!isOpen), children: [jsx("span", { className: `${styles$F.triggerText} ${selectedValues.length === 0 ? styles$F.placeholder : ''}`, children: getDisplayText() }), jsx("span", { className: styles$F.chevron, children: jsx(ChevronIcon$1, {}) })] }), isOpen && (jsxs("div", { className: styles$F.dropdown, style: { width }, children: [grouped && tabs.length > 0 && (jsx("div", { className: styles$F.tabs, children: tabs.map(tab => (jsx("button", { type: "button", className: `${styles$F.tab} ${activeTab === tab ? styles$F.activeTab : ''}`, onClick: () => setActiveTab(tab), children: tab.charAt(0).toUpperCase() + tab.slice(1) }, tab))) })), multiselect && (jsxs("div", { className: styles$F.actions, children: [jsx("button", { type: "button", className: styles$F.actionBtn, onClick: handleSelectAll, children: "Select All" }), jsx("button", { type: "button", className: styles$F.actionBtn, onClick: handleClear, children: "Clear" })] })), jsx("div", { className: styles$F.options, children: currentOptions.map(option => (jsxs("div", { className: `${styles$F.option} ${selectedValues.includes(option.value) ? styles$F.selected : ''}`, onClick: () => handleSelect(option.value), children: [multiselect && (jsx("span", { className: styles$F.checkbox, children: selectedValues.includes(option.value) && jsx(CheckIcon, {}) })), jsx("span", { className: styles$F.optionLabel, children: option.label })] }, option.value))) }), multiselect && (jsx("div", { className: styles$F.footer, children: jsx("button", { type: "button", className: styles$F.applyBtn, onClick: () => setIsOpen(false), children: "Apply" }) }))] }))] }));
|
|
1017
1018
|
};
|
|
1018
1019
|
SelectFilter.displayName = 'SelectFilter';
|
|
1019
1020
|
|
|
1020
|
-
var styles$
|
|
1021
|
+
var styles$E = {"list":"ServiceToggle-module_list__bBts8","item":"ServiceToggle-module_item__4wEbQ","labelContainer":"ServiceToggle-module_labelContainer__oz-I1","clickable":"ServiceToggle-module_clickable__yzQxe","icon":"ServiceToggle-module_icon__8IdST","label":"ServiceToggle-module_label__J98Ve"};
|
|
1021
1022
|
|
|
1022
1023
|
/**
|
|
1023
1024
|
* ServiceToggle component for a single service item.
|
|
@@ -1030,19 +1031,19 @@ const ServiceToggle = ({ label, icon, hasToggle = true, enabled = false, onToggl
|
|
|
1030
1031
|
onClick();
|
|
1031
1032
|
}
|
|
1032
1033
|
};
|
|
1033
|
-
return (jsxs("div", { className: styles$
|
|
1034
|
+
return (jsxs("div", { className: styles$E.item, children: [jsxs("div", { className: `${styles$E.labelContainer} ${isClickable ? styles$E.clickable : ''}`, onClick: handleClick, children: [icon && jsx("span", { className: styles$E.icon, children: icon }), jsx("span", { className: styles$E.label, children: label })] }), hasToggle && (jsx(Toggle, { checked: enabled, onChange: (checked) => onToggle?.(checked), disabled: disabled, size: "sm" }))] }));
|
|
1034
1035
|
};
|
|
1035
1036
|
/**
|
|
1036
1037
|
* ServiceToggleList component for displaying a list of services with toggles.
|
|
1037
1038
|
* Used in travel request forms for service selection (Air, Hotel, Ground, etc.)
|
|
1038
1039
|
*/
|
|
1039
1040
|
const ServiceToggleList = ({ services, enabledServices = {}, onToggle, onClick, className, }) => {
|
|
1040
|
-
return (jsx("div", { className: `${styles$
|
|
1041
|
+
return (jsx("div", { className: `${styles$E.list} ${className || ''}`, children: services.map((service) => (jsx(ServiceToggle, { serviceKey: service.key, label: service.label, icon: service.icon, hasToggle: service.hasToggle, enabled: enabledServices[service.key] ?? false, onToggle: (enabled) => onToggle?.(service.key, enabled), onClick: () => onClick?.(service.key) }, service.key))) }));
|
|
1041
1042
|
};
|
|
1042
1043
|
ServiceToggle.displayName = 'ServiceToggle';
|
|
1043
1044
|
ServiceToggleList.displayName = 'ServiceToggleList';
|
|
1044
1045
|
|
|
1045
|
-
var styles$
|
|
1046
|
+
var styles$D = {"toggle":"SupplierTypeToggle-module_toggle__x4pTJ","active":"SupplierTypeToggle-module_active__8BGSe"};
|
|
1046
1047
|
|
|
1047
1048
|
const SUPPLIER_TYPE_OPTIONS = [
|
|
1048
1049
|
{ value: 'A', label: 'Air' },
|
|
@@ -1063,23 +1064,24 @@ const SupplierTypeToggle = ({ value, defaultValue = '', onChange, disabled = fal
|
|
|
1063
1064
|
setInternalValue(nextValue);
|
|
1064
1065
|
onChange?.(nextValue);
|
|
1065
1066
|
};
|
|
1066
|
-
return (jsx("div", { className: [styles$
|
|
1067
|
+
return (jsx("div", { className: [styles$D.toggle, className].filter(Boolean).join(' '), role: "group", "aria-label": "Supplier type", children: OPTIONS.map((option) => (jsx("button", { type: "button", disabled: disabled, "aria-pressed": activeValue === option.value, className: activeValue === option.value ? styles$D.active : '', onClick: () => handleSelect(option.value), children: option.label }, option.value || 'all'))) }));
|
|
1067
1068
|
};
|
|
1068
1069
|
|
|
1069
|
-
var styles$
|
|
1070
|
+
var styles$C = {"header":"TeamHeader-module_header__3Zx1c","empty":"TeamHeader-module_empty__fKrFE","left":"TeamHeader-module_left__yqug2","backButton":"TeamHeader-module_backButton__MqElX","titles":"TeamHeader-module_titles__m3Ne9","pretitle":"TeamHeader-module_pretitle__rZUD6","title":"TeamHeader-module_title__i3dmZ","actions":"TeamHeader-module_actions__ft1DN","subMenu":"TeamHeader-module_subMenu__oL-3Q","activeTab":"TeamHeader-module_activeTab__AUzdq"};
|
|
1070
1071
|
|
|
1071
1072
|
const BackIcon = () => (jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("line", { x1: "19", y1: "12", x2: "5", y2: "12" }), jsx("polyline", { points: "12 19 5 12 12 5" })] }));
|
|
1072
1073
|
/**
|
|
1073
1074
|
* TeamHeader - Header component for team management pages
|
|
1074
1075
|
*/
|
|
1075
1076
|
const TeamHeader = ({ title: suppliedTitle, teamCode, teamName, pretitle = 'Team Management', backHref, onBack, actions, className = '', }) => {
|
|
1076
|
-
const headerClasses = [
|
|
1077
|
-
styles$B.header,
|
|
1078
|
-
className,
|
|
1079
|
-
].filter(Boolean).join(' ');
|
|
1080
1077
|
const title = suppliedTitle ?? (teamCode && teamName
|
|
1081
1078
|
? `${teamCode} - ${teamName}`
|
|
1082
1079
|
: teamName || teamCode || '');
|
|
1080
|
+
const headerClasses = [
|
|
1081
|
+
styles$C.header,
|
|
1082
|
+
!title ? styles$C.empty : '',
|
|
1083
|
+
className,
|
|
1084
|
+
].filter(Boolean).join(' ');
|
|
1083
1085
|
const handleBack = () => {
|
|
1084
1086
|
if (onBack) {
|
|
1085
1087
|
onBack();
|
|
@@ -1089,7 +1091,7 @@ const TeamHeader = ({ title: suppliedTitle, teamCode, teamName, pretitle = 'Team
|
|
|
1089
1091
|
window.location.href = backHref;
|
|
1090
1092
|
}
|
|
1091
1093
|
};
|
|
1092
|
-
return (jsxs("div", { className: headerClasses, children: [jsxs("div", { className: styles$
|
|
1094
|
+
return (jsxs("div", { className: headerClasses, children: [jsxs("div", { className: styles$C.left, children: [(backHref || onBack) && (jsx("button", { type: "button", className: styles$C.backButton, onClick: handleBack, "aria-label": "Go back", children: jsx(BackIcon, {}) })), jsxs("div", { className: styles$C.titles, children: [pretitle && jsx("span", { className: styles$C.pretitle, children: pretitle }), jsxs("h1", { className: styles$C.title, children: [title, "\u00A0"] })] })] }), actions && (jsx("div", { className: styles$C.actions, children: actions }))] }));
|
|
1093
1095
|
};
|
|
1094
1096
|
const DEFAULT_TABS$1 = [
|
|
1095
1097
|
{ id: 'profile', label: 'Profile' },
|
|
@@ -1098,11 +1100,11 @@ const DEFAULT_TABS$1 = [
|
|
|
1098
1100
|
{ id: 'user-access', label: 'User Access' },
|
|
1099
1101
|
];
|
|
1100
1102
|
/** Router-agnostic counterpart of Hub's team-management submenu. */
|
|
1101
|
-
const TeamSubMenu = ({ tabs = DEFAULT_TABS$1, activeTab, onTabChange, className = '' }) => (jsx("nav", { className: [styles$
|
|
1103
|
+
const TeamSubMenu = ({ tabs = DEFAULT_TABS$1, activeTab, onTabChange, className = '' }) => (jsx("nav", { className: [styles$C.subMenu, className].filter(Boolean).join(' '), "aria-label": "Team management sections", children: tabs.map((tab) => (jsx("button", { type: "button", className: activeTab === tab.id ? styles$C.activeTab : '', "aria-current": activeTab === tab.id ? 'page' : undefined, onClick: () => onTabChange?.(tab.id), children: tab.label }, tab.id))) }));
|
|
1102
1104
|
TeamHeader.displayName = 'TeamHeader';
|
|
1103
1105
|
TeamSubMenu.displayName = 'TeamSubMenu';
|
|
1104
1106
|
|
|
1105
|
-
var styles$
|
|
1107
|
+
var styles$B = {"segment":"TripSegment-module_segment__jX-Nq","light":"TripSegment-module_light__hHSb3","dark":"TripSegment-module_dark__3Fuo7","empty":"TripSegment-module_empty__vmzg0","item":"TripSegment-module_item__S-RC1","itemHeader":"TripSegment-module_itemHeader__wFWMo","itemType":"TripSegment-module_itemType__NsDLe","itemName":"TripSegment-module_itemName__ysYsC","route":"TripSegment-module_route__Shyz0","location":"TripSegment-module_location__8VCMH","details":"TripSegment-module_details__4U4Km","dates":"TripSegment-module_dates__Wn4-k"};
|
|
1106
1108
|
|
|
1107
1109
|
const PlaneIcon$3 = () => (jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsx("path", { d: "M21 16v-2l-8-5V3.5a1.5 1.5 0 0 0-3 0V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5Z" }) }));
|
|
1108
1110
|
const BusIcon$2 = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("rect", { x: "4", y: "4", width: "16", height: "14", rx: "2" }), jsx("path", { d: "M8 6v6" }), jsx("path", { d: "M16 6v6" }), jsx("circle", { cx: "8", cy: "16", r: "1" }), jsx("circle", { cx: "16", cy: "16", r: "1" })] }));
|
|
@@ -1112,41 +1114,41 @@ const ArrowIcon = () => (jsxs("svg", { width: "12", height: "12", viewBox: "0 0
|
|
|
1112
1114
|
* Base TripSegment component wrapper
|
|
1113
1115
|
*/
|
|
1114
1116
|
const TripSegment = ({ type: _type, variant = 'light', className = '', children, }) => {
|
|
1115
|
-
return (jsx("div", { className: `${styles$
|
|
1117
|
+
return (jsx("div", { className: `${styles$B.segment} ${styles$B[variant]} ${className}`, children: children }));
|
|
1116
1118
|
};
|
|
1117
1119
|
/**
|
|
1118
1120
|
* AirSegment component for displaying flight information
|
|
1119
1121
|
*/
|
|
1120
1122
|
const AirSegment = ({ flights, variant = 'light', className = '', }) => {
|
|
1121
1123
|
if (!flights || flights.length === 0) {
|
|
1122
|
-
return (jsx(TripSegment, { type: "air", variant: variant, className: className, children: jsx("span", { className: styles$
|
|
1124
|
+
return (jsx(TripSegment, { type: "air", variant: variant, className: className, children: jsx("span", { className: styles$B.empty, children: "No flights" }) }));
|
|
1123
1125
|
}
|
|
1124
|
-
return (jsx(TripSegment, { type: "air", variant: variant, className: className, children: flights.map((flight, i) => (jsxs("div", { className: styles$
|
|
1126
|
+
return (jsx(TripSegment, { type: "air", variant: variant, className: className, children: flights.map((flight, i) => (jsxs("div", { className: styles$B.item, children: [jsxs("div", { className: styles$B.itemHeader, children: [jsx(PlaneIcon$3, {}), jsx("span", { className: styles$B.itemType, children: flight.type === 'charter' ? 'Charter' : 'Commercial' })] }), jsxs("div", { className: styles$B.route, children: [jsx("span", { className: styles$B.location, children: flight.departure }), jsx(ArrowIcon, {}), jsx("span", { className: styles$B.location, children: flight.arrival })] }), jsxs("div", { className: styles$B.details, children: [jsx("span", { children: flight.departureDate }), flight.departureTime && jsx("span", { children: flight.departureTime })] }), flight.airline && (jsxs("div", { className: styles$B.details, children: [jsx("span", { children: flight.airline }), flight.flightNumber && jsxs("span", { children: ["#", flight.flightNumber] })] }))] }, i))) }));
|
|
1125
1127
|
};
|
|
1126
1128
|
/**
|
|
1127
1129
|
* GroundSegment component for displaying ground transportation
|
|
1128
1130
|
*/
|
|
1129
1131
|
const GroundSegment = ({ segments, variant = 'light', className = '', }) => {
|
|
1130
1132
|
if (!segments || segments.length === 0) {
|
|
1131
|
-
return (jsx(TripSegment, { type: "ground", variant: variant, className: className, children: jsx("span", { className: styles$
|
|
1133
|
+
return (jsx(TripSegment, { type: "ground", variant: variant, className: className, children: jsx("span", { className: styles$B.empty, children: "No ground transportation" }) }));
|
|
1132
1134
|
}
|
|
1133
|
-
return (jsx(TripSegment, { type: "ground", variant: variant, className: className, children: segments.map((segment, i) => (jsxs("div", { className: styles$
|
|
1135
|
+
return (jsx(TripSegment, { type: "ground", variant: variant, className: className, children: segments.map((segment, i) => (jsxs("div", { className: styles$B.item, children: [jsxs("div", { className: styles$B.itemHeader, children: [jsx(BusIcon$2, {}), jsx("span", { className: styles$B.itemType, children: segment.type.charAt(0).toUpperCase() + segment.type.slice(1) })] }), jsxs("div", { className: styles$B.route, children: [jsx("span", { className: styles$B.location, children: segment.pickupLocation }), jsx(ArrowIcon, {}), jsx("span", { className: styles$B.location, children: segment.dropoffLocation })] }), jsxs("div", { className: styles$B.details, children: [jsx("span", { children: segment.pickupDate }), segment.pickupTime && jsx("span", { children: segment.pickupTime })] }), segment.company && (jsxs("div", { className: styles$B.details, children: [jsx("span", { children: segment.company }), segment.vehicleCount && jsxs("span", { children: [segment.vehicleCount, " vehicles"] })] }))] }, i))) }));
|
|
1134
1136
|
};
|
|
1135
1137
|
/**
|
|
1136
1138
|
* HotelSegment component for displaying hotel information
|
|
1137
1139
|
*/
|
|
1138
1140
|
const HotelSegment = ({ hotels, variant = 'light', className = '', }) => {
|
|
1139
1141
|
if (!hotels || hotels.length === 0) {
|
|
1140
|
-
return (jsx(TripSegment, { type: "hotel", variant: variant, className: className, children: jsx("span", { className: styles$
|
|
1142
|
+
return (jsx(TripSegment, { type: "hotel", variant: variant, className: className, children: jsx("span", { className: styles$B.empty, children: "No hotels" }) }));
|
|
1141
1143
|
}
|
|
1142
|
-
return (jsx(TripSegment, { type: "hotel", variant: variant, className: className, children: hotels.map((hotel, i) => (jsxs("div", { className: styles$
|
|
1144
|
+
return (jsx(TripSegment, { type: "hotel", variant: variant, className: className, children: hotels.map((hotel, i) => (jsxs("div", { className: styles$B.item, children: [jsxs("div", { className: styles$B.itemHeader, children: [jsx(HotelIcon$3, {}), jsx("span", { className: styles$B.itemName, children: hotel.name })] }), hotel.city && (jsx("div", { className: styles$B.details, children: jsx("span", { children: hotel.city }) })), jsxs("div", { className: styles$B.dates, children: [jsx("span", { children: hotel.checkIn }), jsx("span", { children: "\u2013" }), jsx("span", { children: hotel.checkOut })] }), hotel.roomCount && (jsx("div", { className: styles$B.details, children: jsxs("span", { children: [hotel.roomCount, " rooms"] }) }))] }, i))) }));
|
|
1143
1145
|
};
|
|
1144
1146
|
TripSegment.displayName = 'TripSegment';
|
|
1145
1147
|
AirSegment.displayName = 'AirSegment';
|
|
1146
1148
|
GroundSegment.displayName = 'GroundSegment';
|
|
1147
1149
|
HotelSegment.displayName = 'HotelSegment';
|
|
1148
1150
|
|
|
1149
|
-
var styles$
|
|
1151
|
+
var styles$A = {"sidenav":"Sidenav-module_sidenav__9DKVg","expanded":"Sidenav-module_expanded__TfkMs","collapsed":"Sidenav-module_collapsed__xyLkg","toggle":"Sidenav-module_toggle__JCoZu","logoContainer":"Sidenav-module_logoContainer__lLl0-","nav":"Sidenav-module_nav__ZwGrU","navItem":"Sidenav-module_navItem__HhFpj","active":"Sidenav-module_active__-oHUp","icon":"Sidenav-module_icon__7XJWf","label":"Sidenav-module_label__DJDBw","footer":"Sidenav-module_footer__EgrDk"};
|
|
1150
1152
|
|
|
1151
1153
|
/**
|
|
1152
1154
|
* Sidenav component for main navigation.
|
|
@@ -1155,8 +1157,8 @@ var styles$z = {"sidenav":"Sidenav-module_sidenav__9DKVg","expanded":"Sidenav-mo
|
|
|
1155
1157
|
const Sidenav = ({ logo, logoCollapsed, items, activeKey, onItemClick, defaultExpanded = true, footer, className = '', ...props }) => {
|
|
1156
1158
|
const [expanded, setExpanded] = useState(defaultExpanded);
|
|
1157
1159
|
const classNames = [
|
|
1158
|
-
styles$
|
|
1159
|
-
expanded ? styles$
|
|
1160
|
+
styles$A.sidenav,
|
|
1161
|
+
expanded ? styles$A.expanded : styles$A.collapsed,
|
|
1160
1162
|
className,
|
|
1161
1163
|
]
|
|
1162
1164
|
.filter(Boolean)
|
|
@@ -1169,20 +1171,20 @@ const Sidenav = ({ logo, logoCollapsed, items, activeKey, onItemClick, defaultEx
|
|
|
1169
1171
|
onItemClick(item.key);
|
|
1170
1172
|
}
|
|
1171
1173
|
};
|
|
1172
|
-
return (jsxs("aside", { className: classNames, ...props, children: [jsx("button", { className: styles$
|
|
1174
|
+
return (jsxs("aside", { className: classNames, ...props, children: [jsx("button", { className: styles$A.toggle, onClick: () => setExpanded(!expanded), "aria-label": expanded ? 'Collapse sidebar' : 'Expand sidebar', children: expanded ? (jsx(ChevronLeftIcon, { size: 16 })) : (jsx(ChevronRightIcon$1, { size: 16 })) }), jsx("div", { className: styles$A.logoContainer, children: expanded ? logo : logoCollapsed || logo }), jsx("nav", { className: styles$A.nav, children: items.map((item) => {
|
|
1173
1175
|
const isActive = item.key === activeKey;
|
|
1174
1176
|
const itemClasses = [
|
|
1175
|
-
styles$
|
|
1176
|
-
isActive ? styles$
|
|
1177
|
+
styles$A.navItem,
|
|
1178
|
+
isActive ? styles$A.active : '',
|
|
1177
1179
|
]
|
|
1178
1180
|
.filter(Boolean)
|
|
1179
1181
|
.join(' ');
|
|
1180
|
-
return (jsxs("button", { className: itemClasses, onClick: () => handleItemClick(item), "aria-current": isActive ? 'page' : undefined, title: !expanded ? item.label : undefined, children: [jsx("span", { className: styles$
|
|
1181
|
-
}) }), footer && jsx("div", { className: styles$
|
|
1182
|
+
return (jsxs("button", { className: itemClasses, onClick: () => handleItemClick(item), "aria-current": isActive ? 'page' : undefined, title: !expanded ? item.label : undefined, children: [jsx("span", { className: styles$A.icon, children: item.icon }), expanded && jsx("span", { className: styles$A.label, children: item.label })] }, item.key));
|
|
1183
|
+
}) }), footer && jsx("div", { className: styles$A.footer, children: footer })] }));
|
|
1182
1184
|
};
|
|
1183
1185
|
Sidenav.displayName = 'Sidenav';
|
|
1184
1186
|
|
|
1185
|
-
var styles$
|
|
1187
|
+
var styles$z = {"topbar":"Topbar-module_topbar__U9CDj","left":"Topbar-module_left__m4aap","accountWrapper":"Topbar-module_accountWrapper__5mjDZ","accountSelector":"Topbar-module_accountSelector__iqI--","open":"Topbar-module_open__2Xsp1","accountCode":"Topbar-module_accountCode__KMKWm","accountName":"Topbar-module_accountName__XZYjB","chevron":"Topbar-module_chevron__OSXcD","chevronOpen":"Topbar-module_chevronOpen__jVvEl","dropdown":"Topbar-module_dropdown__fA5Gw","dropdownSearch":"Topbar-module_dropdownSearch__9zqy3","searchIcon":"Topbar-module_searchIcon__sHGnK","searchInput":"Topbar-module_searchInput__1TSc3","dropdownList":"Topbar-module_dropdownList__P4q9b","dropdownItem":"Topbar-module_dropdownItem__w-eHf","selected":"Topbar-module_selected__MylKY","dropdownItemCode":"Topbar-module_dropdownItemCode__cUAn6","dropdownItemName":"Topbar-module_dropdownItemName__MYw3k","noResults":"Topbar-module_noResults__PkNfT","actions":"Topbar-module_actions__KtaiZ"};
|
|
1186
1188
|
|
|
1187
1189
|
/**
|
|
1188
1190
|
* Topbar component for the main header.
|
|
@@ -1193,7 +1195,7 @@ const Topbar = ({ account, accounts, onAccountSelect, onAccountClick, actions, l
|
|
|
1193
1195
|
const [searchQuery, setSearchQuery] = useState('');
|
|
1194
1196
|
const dropdownRef = useRef(null);
|
|
1195
1197
|
const searchInputRef = useRef(null);
|
|
1196
|
-
const classNames = [styles$
|
|
1198
|
+
const classNames = [styles$z.topbar, className].filter(Boolean).join(' ');
|
|
1197
1199
|
// Close dropdown on outside click
|
|
1198
1200
|
useEffect(() => {
|
|
1199
1201
|
if (!isOpen)
|
|
@@ -1242,27 +1244,27 @@ const Topbar = ({ account, accounts, onAccountSelect, onAccountClick, actions, l
|
|
|
1242
1244
|
const filteredAccounts = accounts?.filter(acc => acc.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
|
|
1243
1245
|
acc.code.toLowerCase().includes(searchQuery.toLowerCase())) || [];
|
|
1244
1246
|
const hasDropdown = accounts && accounts.length > 0;
|
|
1245
|
-
return (jsxs("header", { className: classNames, ...props, children: [jsxs("div", { className: styles$
|
|
1247
|
+
return (jsxs("header", { className: classNames, ...props, children: [jsxs("div", { className: styles$z.left, children: [leftContent, account && (jsxs("div", { className: styles$z.accountWrapper, ref: dropdownRef, children: [jsxs("button", { className: `${styles$z.accountSelector} ${isOpen ? styles$z.open : ''}`, onClick: handleToggle, "aria-expanded": isOpen, "aria-haspopup": hasDropdown ? 'listbox' : undefined, children: [jsx("span", { className: styles$z.accountCode, children: account.code }), jsx("span", { className: styles$z.accountName, children: account.name }), hasDropdown && (jsx(ChevronDownIcon$1, { size: 16, className: `${styles$z.chevron} ${isOpen ? styles$z.chevronOpen : ''}` }))] }), isOpen && hasDropdown && (jsxs("div", { className: styles$z.dropdown, role: "listbox", children: [jsxs("div", { className: styles$z.dropdownSearch, children: [jsxs("svg", { className: styles$z.searchIcon, width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "11", cy: "11", r: "8" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })] }), jsx("input", { ref: searchInputRef, type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Search accounts...", className: styles$z.searchInput })] }), jsx("div", { className: styles$z.dropdownList, children: filteredAccounts.length > 0 ? (filteredAccounts.map((acc) => (jsxs("button", { className: `${styles$z.dropdownItem} ${acc.code === account.code ? styles$z.selected : ''}`, onClick: () => handleSelectAccount(acc), role: "option", "aria-selected": acc.code === account.code, children: [jsx("span", { className: styles$z.dropdownItemCode, children: acc.code }), jsx("span", { className: styles$z.dropdownItemName, children: acc.name })] }, acc.code)))) : (jsx("div", { className: styles$z.noResults, children: "No accounts found" })) })] }))] }))] }), actions && jsx("div", { className: styles$z.actions, children: actions })] }));
|
|
1246
1248
|
};
|
|
1247
1249
|
Topbar.displayName = 'Topbar';
|
|
1248
1250
|
|
|
1249
|
-
var styles$
|
|
1251
|
+
var styles$y = {"appLayout":"AppLayout-module_appLayout__NFbZk","mainArea":"AppLayout-module_mainArea__t-6oq","content":"AppLayout-module_content__5kV7S"};
|
|
1250
1252
|
|
|
1251
1253
|
const AppLayout = ({ navItems = [], activeNavKey, logo, collapsedLogo, account, defaultExpanded = true, onNavItemClick, onAccountClick, children, navFooter, topbarActions, className, }) => {
|
|
1252
|
-
return (jsxs("div", { className: `${styles$
|
|
1254
|
+
return (jsxs("div", { className: `${styles$y.appLayout} ${className || ''}`, children: [jsx(Sidenav, { items: navItems, activeKey: activeNavKey, defaultExpanded: defaultExpanded, onItemClick: onNavItemClick, logo: logo, logoCollapsed: collapsedLogo, footer: navFooter }), jsxs("div", { className: styles$y.mainArea, children: [jsx(Topbar, { account: account, onAccountClick: onAccountClick, actions: topbarActions }), jsx("main", { className: styles$y.content, children: children })] })] }));
|
|
1253
1255
|
};
|
|
1254
1256
|
|
|
1255
|
-
var styles$
|
|
1257
|
+
var styles$x = {"card":"Card-module_card__Ak6-W","default":"Card-module_default__e-M3H","bordered":"Card-module_bordered__pUL4k","elevated":"Card-module_elevated__8f-WS","interactive":"Card-module_interactive__6B4fH","padding-none":"Card-module_padding-none__c1qKN","padding-sm":"Card-module_padding-sm__Uejon","padding-md":"Card-module_padding-md__kR4F9","padding-lg":"Card-module_padding-lg__MleX9","header":"Card-module_header__NiVTV","headerContent":"Card-module_headerContent__LyJRB","title":"Card-module_title__3DN1v","subtitle":"Card-module_subtitle__gE5L-","actions":"Card-module_actions__gHmpq","body":"Card-module_body__BU4oo","footer":"Card-module_footer__zjjTd"};
|
|
1256
1258
|
|
|
1257
1259
|
/**
|
|
1258
1260
|
* Card component for grouping related content.
|
|
1259
1261
|
*/
|
|
1260
1262
|
const Card = forwardRef(({ variant = 'default', padding = 'md', interactive = false, className = '', children, ...props }, ref) => {
|
|
1261
1263
|
const classNames = [
|
|
1262
|
-
styles$
|
|
1263
|
-
styles$
|
|
1264
|
-
styles$
|
|
1265
|
-
interactive ? styles$
|
|
1264
|
+
styles$x.card,
|
|
1265
|
+
styles$x[variant],
|
|
1266
|
+
styles$x[`padding-${padding}`],
|
|
1267
|
+
interactive ? styles$x.interactive : '',
|
|
1266
1268
|
className,
|
|
1267
1269
|
]
|
|
1268
1270
|
.filter(Boolean)
|
|
@@ -1271,22 +1273,22 @@ const Card = forwardRef(({ variant = 'default', padding = 'md', interactive = fa
|
|
|
1271
1273
|
});
|
|
1272
1274
|
Card.displayName = 'Card';
|
|
1273
1275
|
const CardHeader = ({ title, subtitle, actions, className = '', children, ...props }) => {
|
|
1274
|
-
const classNames = [styles$
|
|
1275
|
-
return (jsxs("div", { className: classNames, ...props, children: [jsxs("div", { className: styles$
|
|
1276
|
+
const classNames = [styles$x.header, className].filter(Boolean).join(' ');
|
|
1277
|
+
return (jsxs("div", { className: classNames, ...props, children: [jsxs("div", { className: styles$x.headerContent, children: [title && jsx("h3", { className: styles$x.title, children: title }), subtitle && jsx("p", { className: styles$x.subtitle, children: subtitle }), children] }), actions && jsx("div", { className: styles$x.actions, children: actions })] }));
|
|
1276
1278
|
};
|
|
1277
1279
|
CardHeader.displayName = 'CardHeader';
|
|
1278
1280
|
const CardBody = ({ className = '', children, ...props }) => {
|
|
1279
|
-
const classNames = [styles$
|
|
1281
|
+
const classNames = [styles$x.body, className].filter(Boolean).join(' ');
|
|
1280
1282
|
return (jsx("div", { className: classNames, ...props, children: children }));
|
|
1281
1283
|
};
|
|
1282
1284
|
CardBody.displayName = 'CardBody';
|
|
1283
1285
|
const CardFooter = ({ className = '', children, ...props }) => {
|
|
1284
|
-
const classNames = [styles$
|
|
1286
|
+
const classNames = [styles$x.footer, className].filter(Boolean).join(' ');
|
|
1285
1287
|
return (jsx("div", { className: classNames, ...props, children: children }));
|
|
1286
1288
|
};
|
|
1287
1289
|
CardFooter.displayName = 'CardFooter';
|
|
1288
1290
|
|
|
1289
|
-
var styles$
|
|
1291
|
+
var styles$w = {"container":"ContactList-module_container__1kjze","alert":"ContactList-module_alert__KC0tz","card":"ContactList-module_card__TOyp2","header":"ContactList-module_header__QysLx","titleRow":"ContactList-module_titleRow__tUDMS","title":"ContactList-module_title__R-IOd","tooltip":"ContactList-module_tooltip__DDMka","list":"ContactList-module_list__6tjo-","contactItem":"ContactList-module_contactItem__4SoW-","contactInfo":"ContactList-module_contactInfo__6cQpi","contactName":"ContactList-module_contactName__z748K","badge":"ContactList-module_badge__USFpb","badgeSecondary":"ContactList-module_badgeSecondary__OSwqF","contactRole":"ContactList-module_contactRole__6kfuQ","contactDetails":"ContactList-module_contactDetails__ihY0M","contactLink":"ContactList-module_contactLink__sWGp9","contactPhone":"ContactList-module_contactPhone__dUn6z","contactActions":"ContactList-module_contactActions__6WT-z","actionButton":"ContactList-module_actionButton__aPnGZ","actionButtonDanger":"ContactList-module_actionButtonDanger__yRBz0","empty":"ContactList-module_empty__bRTDB","footer":"ContactList-module_footer__18gB-","addButton":"ContactList-module_addButton__STUhp"};
|
|
1290
1292
|
|
|
1291
1293
|
const InfoIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "12", cy: "12", r: "10" }), jsx("line", { x1: "12", y1: "16", x2: "12", y2: "12" }), jsx("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })] }));
|
|
1292
1294
|
const EditIcon$1 = () => (jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }), jsx("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })] }));
|
|
@@ -1297,18 +1299,18 @@ const PlusIcon$1 = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0
|
|
|
1297
1299
|
*/
|
|
1298
1300
|
const ContactList = ({ title = 'Contacts', tooltip, contacts, onEdit, onRemove, onAdd, showAdd = true, addLabel = 'Add Contact', alert, className = '', }) => {
|
|
1299
1301
|
const listClasses = [
|
|
1300
|
-
styles$
|
|
1302
|
+
styles$w.container,
|
|
1301
1303
|
className,
|
|
1302
1304
|
].filter(Boolean).join(' ');
|
|
1303
|
-
return (jsxs("div", { className: listClasses, children: [alert && (jsx("div", { className: styles$
|
|
1305
|
+
return (jsxs("div", { className: listClasses, children: [alert && (jsx("div", { className: styles$w.alert, children: alert })), jsxs("div", { className: styles$w.card, children: [jsx("div", { className: styles$w.header, children: jsxs("div", { className: styles$w.titleRow, children: [jsx("h3", { className: styles$w.title, children: title }), tooltip && (jsx("span", { className: styles$w.tooltip, children: jsx(InfoIcon, {}) }))] }) }), jsxs("div", { className: styles$w.list, children: [contacts.map((contact) => (jsxs("div", { className: styles$w.contactItem, children: [jsxs("div", { className: styles$w.contactInfo, children: [jsxs("div", { className: styles$w.contactName, children: [contact.name, contact.isPrimary && (jsx("span", { className: styles$w.badge, children: "Primary" })), contact.isSecondary && (jsx("span", { className: `${styles$w.badge} ${styles$w.badgeSecondary}`, children: "Secondary" }))] }), contact.role && (jsx("div", { className: styles$w.contactRole, children: contact.role })), jsxs("div", { className: styles$w.contactDetails, children: [contact.email && (jsx("a", { href: `mailto:${contact.email}`, className: styles$w.contactLink, children: contact.email })), contact.phone && (jsx("span", { className: styles$w.contactPhone, children: contact.phone }))] })] }), jsxs("div", { className: styles$w.contactActions, children: [onEdit && (jsx("button", { type: "button", className: styles$w.actionButton, onClick: () => onEdit(contact), "aria-label": "Edit contact", children: jsx(EditIcon$1, {}) })), onRemove && (jsx("button", { type: "button", className: `${styles$w.actionButton} ${styles$w.actionButtonDanger}`, onClick: () => onRemove(contact), "aria-label": "Remove contact", children: jsx(TrashIcon$1, {}) }))] })] }, contact.id))), contacts.length === 0 && (jsx("div", { className: styles$w.empty, children: "No contacts added" }))] }), showAdd && onAdd && (jsx("div", { className: styles$w.footer, children: jsxs("button", { type: "button", className: styles$w.addButton, onClick: onAdd, children: [jsx(PlusIcon$1, {}), addLabel] }) }))] })] }));
|
|
1304
1306
|
};
|
|
1305
1307
|
ContactList.displayName = 'ContactList';
|
|
1306
1308
|
|
|
1307
|
-
var styles$
|
|
1309
|
+
var styles$v = {"container":"Drawer-module_container__hXuOY","backdrop":"Drawer-module_backdrop__MIipQ","fadeIn":"Drawer-module_fadeIn__QsuvQ","backdropOpen":"Drawer-module_backdropOpen__YpH--","drawer":"Drawer-module_drawer__EHbbs","right":"Drawer-module_right__x6P6Q","drawerOpen":"Drawer-module_drawerOpen__KTgFg","left":"Drawer-module_left__aVF9t","top":"Drawer-module_top__wuvhi","bottom":"Drawer-module_bottom__rt-VZ","sizeSm":"Drawer-module_sizeSm__LFrm3","sizeMd":"Drawer-module_sizeMd__A1QTQ","sizeLg":"Drawer-module_sizeLg__6laD8","sizeXl":"Drawer-module_sizeXl__FY9mZ","sizeFull":"Drawer-module_sizeFull__BGQ1q","header":"Drawer-module_header__MpR14","headerContent":"Drawer-module_headerContent__dFcLH","title":"Drawer-module_title__0AmOX","closeButton":"Drawer-module_closeButton__VuXsE","body":"Drawer-module_body__GLUGo","footer":"Drawer-module_footer__K5ekS"};
|
|
1308
1310
|
|
|
1309
|
-
const DrawerHeader = ({ title, children, showClose = true, onClose, className = '', }) => (jsxs("div", { className: `${styles$
|
|
1310
|
-
const DrawerBody = ({ children, className = '' }) => (jsx("div", { className: `${styles$
|
|
1311
|
-
const DrawerFooter = ({ children, className = '' }) => (jsx("div", { className: `${styles$
|
|
1311
|
+
const DrawerHeader = ({ title, children, showClose = true, onClose, className = '', }) => (jsxs("div", { className: `${styles$v.header} ${className}`, children: [jsxs("div", { className: styles$v.headerContent, children: [title && jsx("h2", { className: styles$v.title, children: title }), children] }), showClose && (jsx("button", { type: "button", className: styles$v.closeButton, onClick: onClose, "aria-label": "Close drawer", children: jsx("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }))] }));
|
|
1312
|
+
const DrawerBody = ({ children, className = '' }) => (jsx("div", { className: `${styles$v.body} ${className}`, children: children }));
|
|
1313
|
+
const DrawerFooter = ({ children, className = '' }) => (jsx("div", { className: `${styles$v.footer} ${className}`, children: children }));
|
|
1312
1314
|
const Drawer = ({ isOpen, onClose, position = 'right', size = 'md', children, closeOnBackdropClick = true, closeOnEscape = true, showBackdrop = true, className = '', }) => {
|
|
1313
1315
|
const handleEscape = useCallback((e) => {
|
|
1314
1316
|
if (closeOnEscape && e.key === 'Escape') {
|
|
@@ -1332,7 +1334,7 @@ const Drawer = ({ isOpen, onClose, position = 'right', size = 'md', children, cl
|
|
|
1332
1334
|
};
|
|
1333
1335
|
if (!isOpen)
|
|
1334
1336
|
return null;
|
|
1335
|
-
return (jsxs("div", { className: styles$
|
|
1337
|
+
return (jsxs("div", { className: styles$v.container, children: [showBackdrop && (jsx("div", { className: `${styles$v.backdrop} ${isOpen ? styles$v.backdropOpen : ''}`, onClick: handleBackdropClick })), jsx("div", { className: `${styles$v.drawer} ${styles$v[position]} ${styles$v[`size${size.charAt(0).toUpperCase()}${size.slice(1)}`]} ${isOpen ? styles$v.drawerOpen : ''} ${className}`, role: "dialog", "aria-modal": "true", children: React.Children.map(children, (child) => {
|
|
1336
1338
|
if (React.isValidElement(child) && child.type === DrawerHeader) {
|
|
1337
1339
|
return React.cloneElement(child, {
|
|
1338
1340
|
onClose,
|
|
@@ -1345,7 +1347,7 @@ Drawer.Header = DrawerHeader;
|
|
|
1345
1347
|
Drawer.Body = DrawerBody;
|
|
1346
1348
|
Drawer.Footer = DrawerFooter;
|
|
1347
1349
|
|
|
1348
|
-
var styles$
|
|
1350
|
+
var styles$u = {"drawer":"DueDatesDrawer-module_drawer__TqC4Q","open":"DueDatesDrawer-module_open__Yblf3","body":"DueDatesDrawer-module_body__OwwF-","search":"DueDatesDrawer-module_search__g7-Rl","cards":"DueDatesDrawer-module_cards__bFG90","empty":"DueDatesDrawer-module_empty__K2ULN","card":"DueDatesDrawer-module_card__4Os-5","cardTitle":"DueDatesDrawer-module_cardTitle__fU-cP","status":"DueDatesDrawer-module_status__dXifz","completed":"DueDatesDrawer-module_completed__jWoYi","pastDue":"DueDatesDrawer-module_pastDue__TSikC","tags":"DueDatesDrawer-module_tags__8P87y","completion":"DueDatesDrawer-module_completion__mIrWm"};
|
|
1349
1351
|
|
|
1350
1352
|
const isTravelDueDateCompleted = (item) => item.status.trim().toLowerCase() === 'completed' || !!item.completeddatetime;
|
|
1351
1353
|
const parseLocalDate$1 = (value) => {
|
|
@@ -1361,7 +1363,7 @@ const DueDateCard = ({ item, onToggle, onTaskClick }) => {
|
|
|
1361
1363
|
const completed = isTravelDueDateCompleted(item);
|
|
1362
1364
|
const dueDate = parseLocalDate$1(item.duedate);
|
|
1363
1365
|
const pastDue = !!dueDate && dueDate < new Date() && !completed;
|
|
1364
|
-
return (jsxs("article", { className: styles$
|
|
1366
|
+
return (jsxs("article", { className: styles$u.card, children: [jsxs("div", { className: styles$u.cardTitle, children: [jsx("button", { type: "button", "aria-label": `${completed ? 'Reopen' : 'Complete'} ${item.tasktitle}`, className: [styles$u.status, completed ? styles$u.completed : pastDue ? styles$u.pastDue : ''].filter(Boolean).join(' '), onClick: () => onToggle?.(item), children: completed ? jsx(CheckIcon$2, { size: 12 }) : null }), jsx("h5", { children: item.tasktitle })] }), item.description && jsx("p", { children: item.description }), jsxs("div", { className: styles$u.tags, children: [jsx("span", { style: { backgroundColor: sportColor(item.sportCode) }, children: item.sportCode }), jsx("button", { type: "button", disabled: !item.masterTripGUID || !onTaskClick, onClick: () => item.masterTripGUID && onTaskClick?.(item.masterTripGUID), children: item.tripName })] }), completed && item.completeddatetime && jsxs("div", { className: styles$u.completion, children: [jsx(CheckIcon$2, { size: 14 }), jsxs("span", { children: [jsx("em", { children: "on" }), " ", formatDate$2(item.completeddatetime, { month: 'numeric', day: 'numeric', year: '2-digit' }), " ", jsx("em", { children: "by" }), " ", item.completedby] })] })] }));
|
|
1365
1367
|
};
|
|
1366
1368
|
/** Hub's searchable, status-aware due-dates drawer. */
|
|
1367
1369
|
const DueDatesDrawer = ({ isOpen, dueDates, selectedDate, selectedTrip, onClose, onToggle, onTaskClick, className = '' }) => {
|
|
@@ -1373,10 +1375,10 @@ const DueDatesDrawer = ({ isOpen, dueDates, selectedDate, selectedTrip, onClose,
|
|
|
1373
1375
|
const matches = items.filter((item) => (!selectedTrip || item.masterTripGUID === String(selectedTrip)) && (!normalized || item.tasktitle.toLowerCase().includes(normalized) || item.sportCode.toLowerCase().includes(normalized) || item.description.toLowerCase().includes(normalized)));
|
|
1374
1376
|
return matches.length ? [[date, matches]] : [];
|
|
1375
1377
|
})), [dueDates, search, selectedDate, selectedTrip]);
|
|
1376
|
-
return (jsxs("aside", { className: [styles$
|
|
1378
|
+
return (jsxs("aside", { className: [styles$u.drawer, isOpen ? styles$u.open : '', className].filter(Boolean).join(' '), "aria-hidden": !isOpen, "aria-label": "Due Dates", children: [jsxs("header", { children: [jsx("h3", { children: "Due Dates" }), jsx("button", { type: "button", "aria-label": "Close due dates", onClick: onClose, children: jsx(CloseIcon, { size: 24 }) })] }), jsxs("div", { className: styles$u.body, children: [jsxs("label", { className: styles$u.search, children: [jsx(SearchIcon$1, { size: 16 }), jsx("input", { type: "search", placeholder: "Search", value: search, onChange: (event) => setSearch(event.target.value) })] }), !Object.keys(filtered).length ? jsx("div", { className: styles$u.empty, children: "No due dates found." }) : Object.entries(filtered).map(([date, items]) => (jsxs("section", { children: [jsx("h4", { children: formatDate$2(date, { month: 'long', day: 'numeric', year: 'numeric' }) }), jsx("div", { className: styles$u.cards, children: items.map((item) => jsx(DueDateCard, { item: item, onToggle: onToggle, onTaskClick: onTaskClick }, `${date}-${item.taskid}`)) })] }, date)))] })] }));
|
|
1377
1379
|
};
|
|
1378
1380
|
|
|
1379
|
-
var styles$
|
|
1381
|
+
var styles$t = {"shell":"HubAppShell-module_shell__Y13Fo","main":"HubAppShell-module_main__OvnjA","beta":"HubAppShell-module_beta__V8Dzh","sidebar":"HubAppShell-module_sidebar__73gt6","shellExpanded":"HubAppShell-module_shellExpanded__z9cLL","expandButton":"HubAppShell-module_expandButton__hyYi-","logo":"HubAppShell-module_logo__iylLM","defaultLogo":"HubAppShell-module_defaultLogo__tVCz-","desktopNav":"HubAppShell-module_desktopNav__-ZRGD","navItem":"HubAppShell-module_navItem__FKkXN","active":"HubAppShell-module_active__zu1-B","navIcon":"HubAppShell-module_navIcon__QRImh","disabledNav":"HubAppShell-module_disabledNav__zj07n","sidebarFooter":"HubAppShell-module_sidebarFooter__kA2bq","profile":"HubAppShell-module_profile__JCGL5","avatar":"HubAppShell-module_avatar__V-lFG","profileMenu":"HubAppShell-module_profileMenu__qqWSu","topbar":"HubAppShell-module_topbar__U4w0A","defaultAccount":"HubAppShell-module_defaultAccount__3vohz","defaultActions":"HubAppShell-module_defaultActions__wAEJb","desktopActions":"HubAppShell-module_desktopActions__uVRKY","mobileActions":"HubAppShell-module_mobileActions__W6Rf9","content":"HubAppShell-module_content__yCgGs","contentDisabled":"HubAppShell-module_contentDisabled__btmCY","mobileNav":"HubAppShell-module_mobileNav__X0zBs","mobileNavItem":"HubAppShell-module_mobileNavItem__1x94j","mobileExtras":"HubAppShell-module_mobileExtras__xo3qI","mobileBooking":"HubAppShell-module_mobileBooking__-Jz9h","mobilePrimary":"HubAppShell-module_mobilePrimary__p5PCn","mobileFooter":"HubAppShell-module_mobileFooter__QvsE-","loading":"HubAppShell-module_loading__V8RiG"};
|
|
1380
1382
|
|
|
1381
1383
|
const HUB_INDIVIDUAL_TRAVEL_ITEM = { key: 'individual-travel', label: 'Individual Travel', path: '/individual-travel', icon: jsx(UserIcon, { size: 24 }) };
|
|
1382
1384
|
const HUB_NAV_ITEMS = [
|
|
@@ -1386,9 +1388,9 @@ const HUB_NAV_ITEMS = [
|
|
|
1386
1388
|
{ key: 'team-management', label: 'Team Management', path: '/team-management', icon: jsx(UsersIcon$1, { size: 24 }) },
|
|
1387
1389
|
];
|
|
1388
1390
|
const HUB_ADMIN_ITEM = { key: 'administration', label: 'Administration', path: '/administration', icon: jsx(SettingsIcon, { size: 24 }) };
|
|
1389
|
-
const DefaultLogo = ({ expanded }) => jsxs("div", { className: styles$
|
|
1390
|
-
const DefaultAccount = () => jsxs("button", { type: "button", className: styles$
|
|
1391
|
-
const DefaultActions = ({ isMobileNavOpen, toggleMobileNav }) => (jsxs("div", { className: styles$
|
|
1391
|
+
const DefaultLogo = ({ expanded }) => jsxs("div", { className: styles$t.defaultLogo, children: [jsx(LogoIcon, { size: expanded ? 38 : 32 }), expanded && jsxs("span", { children: [jsx("strong", { children: "SHORT'S" }), jsx("small", { children: "TRAVEL MANAGEMENT" })] })] });
|
|
1392
|
+
const DefaultAccount = () => jsxs("button", { type: "button", className: styles$t.defaultAccount, children: [jsx("span", { children: "UNI" }), jsx("strong", { children: "University of Northern Iowa" })] });
|
|
1393
|
+
const DefaultActions = ({ isMobileNavOpen, toggleMobileNav }) => (jsxs("div", { className: styles$t.defaultActions, children: [jsxs("div", { className: styles$t.desktopActions, children: [jsx(Button, { size: "lg", leftIcon: jsx(ArrowUpRightIcon, { size: 18 }), children: "Book Team Travel" }), jsx(Button, { variant: "secondary", size: "lg", square: true, "aria-label": "Provide Feedback", children: jsx(LightbulbIcon, { size: 18 }) }), jsx(Button, { variant: "secondary", size: "lg", square: true, "aria-label": "Announcements", children: jsx(MegaphoneIcon, { size: 18 }) }), jsx(Button, { variant: "secondary", size: "lg", square: true, "aria-label": "Contact Us", children: jsx(PhoneIcon, { size: 18 }) })] }), jsxs("div", { className: styles$t.mobileActions, children: [jsx(Button, { variant: "ghost", size: "lg", square: true, "aria-label": "Announcements", children: jsx(MegaphoneIcon, { size: 20 }) }), jsx(Button, { variant: "ghost", size: "lg", square: true, "aria-label": isMobileNavOpen ? 'Close navigation' : 'Open navigation', onClick: toggleMobileNav, children: isMobileNavOpen ? jsx(CloseIcon, { size: 22 }) : jsx(MenuIcon, { size: 22 }) })] })] }));
|
|
1392
1394
|
/** The shared application navigation and content shell used by Hub and its Storybook pages. */
|
|
1393
1395
|
const HubAppShell = ({ children, navItems = HUB_NAV_ITEMS, individualTravelItem = HUB_INDIVIDUAL_TRAVEL_ITEM, adminItem = HUB_ADMIN_ITEM, activeNavKey, onNavigate, onLogoClick, onLegacyPortal, accountSelector, renderTopbarActions, renderMobileExtras, mobileFooter, profileMenu, userInitials = 'KM', isAdmin = true, navigationDisabled = false, loading = false, contentDisabled = false, showContent = true, logo, defaultExpanded = false, betaLabel = 'Beta Version', className = '', }) => {
|
|
1394
1396
|
const [expanded, setExpanded] = useState(defaultExpanded);
|
|
@@ -1411,11 +1413,11 @@ const HubAppShell = ({ children, navItems = HUB_NAV_ITEMS, individualTravelItem
|
|
|
1411
1413
|
onNavigate?.(item);
|
|
1412
1414
|
closeMobileNav();
|
|
1413
1415
|
};
|
|
1414
|
-
const renderNavItem = (item, mobile = false) => (jsxs("button", { type: "button", className: [styles$
|
|
1415
|
-
return (jsxs("div", { className: [styles$
|
|
1416
|
+
const renderNavItem = (item, mobile = false) => (jsxs("button", { type: "button", className: [styles$t.navItem, activeNavKey === item.key ? styles$t.active : '', mobile ? styles$t.mobileNavItem : ''].filter(Boolean).join(' '), "aria-current": activeNavKey === item.key ? 'page' : undefined, "aria-label": item.label, title: item.label, onClick: () => navigate(item), children: [jsx("span", { className: styles$t.navIcon, children: item.icon }), (expanded || mobile) && jsx("span", { children: item.label })] }, item.key));
|
|
1417
|
+
return (jsxs("div", { className: [styles$t.shell, expanded ? styles$t.shellExpanded : '', className].filter(Boolean).join(' '), children: [loading && jsx("div", { className: styles$t.loading, role: "status", "aria-label": "Loading", "data-testid": "loading-overlay", children: jsx("span", {}) }), betaLabel && jsx("div", { className: styles$t.beta, children: betaLabel }), jsxs("aside", { className: styles$t.sidebar, "data-expanded": expanded, children: [jsx("button", { type: "button", className: styles$t.expandButton, "aria-label": expanded ? 'Collapse sidebar' : 'Expand sidebar', onClick: () => setExpanded((value) => !value), children: expanded ? jsx(ChevronLeftIcon, { size: 16 }) : jsx(ChevronRightIcon$1, { size: 16 }) }), jsx("button", { type: "button", className: styles$t.logo, "aria-label": "Go to Home", onClick: onLogoClick, children: logo ?? jsx(DefaultLogo, { expanded: expanded }) }), jsxs("nav", { className: styles$t.desktopNav, "aria-label": "Hub navigation", children: [jsxs("button", { type: "button", className: styles$t.navItem, "aria-label": "Old Portal", title: "Old Portal", onClick: onLegacyPortal, children: [jsx("span", { className: styles$t.navIcon, children: jsx(ArrowUpRightIcon, { size: 24 }) }), expanded && jsx("span", { children: "Old Portal" })] }), renderNavItem(individualTravelItem), jsx("div", { className: navigationDisabled ? styles$t.disabledNav : '', children: navItems.map((item) => renderNavItem(item)) })] }), jsxs("div", { className: styles$t.sidebarFooter, children: [isAdmin && renderNavItem(adminItem), jsxs("div", { className: styles$t.profile, ref: profileRef, children: [jsx("button", { type: "button", className: styles$t.avatar, "aria-label": "User Information", onClick: () => setIsProfileOpen((value) => !value), children: userInitials }), isProfileOpen && profileMenu && jsx("div", { className: styles$t.profileMenu, children: profileMenu })] })] })] }), jsxs("div", { className: styles$t.main, children: [jsxs("header", { className: styles$t.topbar, children: [jsx("div", { children: accountSelector ?? jsx(DefaultAccount, {}) }), renderTopbarActions?.(actions) ?? jsx(DefaultActions, { ...actions })] }), isMobileNavOpen && jsxs("div", { className: styles$t.mobileNav, children: [jsx("nav", { "aria-label": "Mobile Hub navigation", children: navItems.map((item) => renderNavItem(item, true)) }), jsxs("div", { className: styles$t.mobileExtras, role: "group", "aria-label": "Mobile navigation actions", children: [renderMobileExtras?.(closeMobileNav) ?? jsxs("button", { type: "button", className: styles$t.mobileBooking, onClick: closeMobileNav, children: [jsx(ArrowUpRightIcon, { size: 20 }), jsx("span", { children: "Book Team Travel" })] }), jsxs("button", { type: "button", className: styles$t.mobilePrimary, onClick: () => { onLegacyPortal?.(); closeMobileNav(); }, children: [jsx(ArrowUpRightIcon, { size: 20 }), jsx("span", { children: "Legacy Portal" })] })] }), mobileFooter && jsx("div", { className: styles$t.mobileFooter, children: mobileFooter })] }), showContent && jsx("main", { className: [styles$t.content, contentDisabled ? styles$t.contentDisabled : ''].filter(Boolean).join(' '), children: children })] })] }));
|
|
1416
1418
|
};
|
|
1417
1419
|
|
|
1418
|
-
var styles$
|
|
1420
|
+
var styles$s = {"container":"MembershipPrograms-module_container__qsGZu","loading":"MembershipPrograms-module_loading__tjDtr","alert":"MembershipPrograms-module_alert__GZc0f","header":"MembershipPrograms-module_header__ywXOE","title":"MembershipPrograms-module_title__WZGyt","addButton":"MembershipPrograms-module_addButton__rNlNb","empty":"MembershipPrograms-module_empty__pYrHW","list":"MembershipPrograms-module_list__8A9MG","group":"MembershipPrograms-module_group__v1Vc6","groupHeader":"MembershipPrograms-module_groupHeader__I5KJO","groupIcon":"MembershipPrograms-module_groupIcon__e1LIq","groupLabel":"MembershipPrograms-module_groupLabel__Wqift","programs":"MembershipPrograms-module_programs__hxHXQ","program":"MembershipPrograms-module_program__S3HTM","programInfo":"MembershipPrograms-module_programInfo__RJruG","programProvider":"MembershipPrograms-module_programProvider__c7enz","programName":"MembershipPrograms-module_programName__TN42s","programNumber":"MembershipPrograms-module_programNumber__GKav4","programStatus":"MembershipPrograms-module_programStatus__2imvX","programActions":"MembershipPrograms-module_programActions__36LkY","actionButton":"MembershipPrograms-module_actionButton__y-GI4","removeButton":"MembershipPrograms-module_removeButton__cTTuZ"};
|
|
1419
1421
|
|
|
1420
1422
|
const PlaneIcon$2 = () => (jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsx("path", { d: "M21 16v-2l-8-5V3.5a1.5 1.5 0 0 0-3 0V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5Z" }) }));
|
|
1421
1423
|
const HotelIcon$2 = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("path", { d: "M3 21h18" }), jsx("path", { d: "M19 21V5a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v16" }), jsx("path", { d: "M9 21v-4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v4" })] }));
|
|
@@ -1441,8 +1443,8 @@ const TYPE_LABELS = {
|
|
|
1441
1443
|
*/
|
|
1442
1444
|
const MembershipPrograms = ({ title = 'Membership Programs', programs, onEdit, onRemove, onAdd, alert, isLoading = false, emptyMessage = 'No membership programs added', className = '', }) => {
|
|
1443
1445
|
const containerClasses = [
|
|
1444
|
-
styles$
|
|
1445
|
-
isLoading ? styles$
|
|
1446
|
+
styles$s.container,
|
|
1447
|
+
isLoading ? styles$s.loading : '',
|
|
1446
1448
|
className,
|
|
1447
1449
|
].filter(Boolean).join(' ');
|
|
1448
1450
|
const groupedPrograms = programs.reduce((acc, program) => {
|
|
@@ -1453,30 +1455,30 @@ const MembershipPrograms = ({ title = 'Membership Programs', programs, onEdit, o
|
|
|
1453
1455
|
return acc;
|
|
1454
1456
|
}, {});
|
|
1455
1457
|
const typeOrder = ['airline', 'hotel', 'car', 'other'];
|
|
1456
|
-
return (jsxs("div", { className: containerClasses, children: [alert && jsx("div", { className: styles$
|
|
1458
|
+
return (jsxs("div", { className: containerClasses, children: [alert && jsx("div", { className: styles$s.alert, children: alert }), jsxs("div", { className: styles$s.header, children: [jsx("h2", { className: styles$s.title, children: title }), onAdd && (jsxs("button", { type: "button", className: styles$s.addButton, onClick: onAdd, "aria-label": "Add membership program", children: [jsx(PlusIcon, {}), jsx("span", { children: "Add Program" })] }))] }), programs.length === 0 ? (jsx("div", { className: styles$s.empty, children: jsx("p", { children: emptyMessage }) })) : (jsx("div", { className: styles$s.list, children: typeOrder.map((type) => {
|
|
1457
1459
|
const typePrograms = groupedPrograms[type];
|
|
1458
1460
|
if (!typePrograms || typePrograms.length === 0)
|
|
1459
1461
|
return null;
|
|
1460
|
-
return (jsxs("div", { className: styles$
|
|
1462
|
+
return (jsxs("div", { className: styles$s.group, children: [jsxs("div", { className: styles$s.groupHeader, children: [jsx("span", { className: styles$s.groupIcon, children: TYPE_ICONS[type] }), jsx("span", { className: styles$s.groupLabel, children: TYPE_LABELS[type] })] }), jsx("div", { className: styles$s.programs, children: typePrograms.map((program) => (jsxs("div", { className: styles$s.program, children: [jsxs("div", { className: styles$s.programInfo, children: [jsx("div", { className: styles$s.programProvider, children: program.provider }), program.programName && (jsx("div", { className: styles$s.programName, children: program.programName })), jsx("div", { className: styles$s.programNumber, children: program.membershipNumber }), program.status && (jsx("div", { className: styles$s.programStatus, children: program.status }))] }), jsxs("div", { className: styles$s.programActions, children: [onEdit && (jsx("button", { type: "button", className: styles$s.actionButton, onClick: () => onEdit(program), "aria-label": `Edit ${program.provider} program`, children: jsx(EditIcon, {}) })), onRemove && (jsx("button", { type: "button", className: [styles$s.actionButton, styles$s.removeButton].join(' '), onClick: () => onRemove(program), "aria-label": `Remove ${program.provider} program`, children: jsx(TrashIcon, {}) }))] })] }, program.id))) })] }, type));
|
|
1461
1463
|
}) }))] }));
|
|
1462
1464
|
};
|
|
1463
1465
|
MembershipPrograms.displayName = 'MembershipPrograms';
|
|
1464
1466
|
|
|
1465
|
-
var styles$
|
|
1467
|
+
var styles$r = {"stats":"ManifestCapacityStats-module_stats__BA5-o","stat":"ManifestCapacityStats-module_stat__qLJtb","labelRow":"ManifestCapacityStats-module_labelRow__iDQqn","label":"ManifestCapacityStats-module_label__5BRoZ","value":"ManifestCapacityStats-module_value__4hiE5","sub":"ManifestCapacityStats-module_sub__w7djZ","warningText":"ManifestCapacityStats-module_warningText__CZZ9a","warningIcon":"ManifestCapacityStats-module_warningIcon__NoXmW","alertIcon":"ManifestCapacityStats-module_alertIcon__h0QHJ","meter":"ManifestCapacityStats-module_meter__DrUuq","meterFill":"ManifestCapacityStats-module_meterFill__v7zKW","meterOver":"ManifestCapacityStats-module_meterOver__UqigI","alert":"ManifestCapacityStats-module_alert__vwkBX"};
|
|
1466
1468
|
|
|
1467
1469
|
const Stat = ({ label, value, sub, meterValue, meterMax, warn = false }) => {
|
|
1468
1470
|
const ratio = meterMax > 0 ? Math.min(100, Math.max(0, (meterValue / meterMax) * 100)) : 0;
|
|
1469
|
-
return (jsxs("div", { className: styles$
|
|
1471
|
+
return (jsxs("div", { className: styles$r.stat, children: [jsxs("div", { className: styles$r.labelRow, children: [jsx("span", { className: styles$r.label, children: label }), warn && jsx(WarningIcon$1, { size: 14, className: styles$r.warningIcon, "aria-label": `${label} warning` })] }), jsx("div", { className: [styles$r.value, warn ? styles$r.warningText : ''].filter(Boolean).join(' '), children: value }), jsx("div", { className: styles$r.sub, children: sub }), jsx("div", { className: styles$r.meter, "aria-hidden": "true", children: jsx("span", { className: [styles$r.meterFill, warn ? styles$r.meterOver : ''].filter(Boolean).join(' '), style: { width: `${ratio}%` } }) })] }));
|
|
1470
1472
|
};
|
|
1471
1473
|
/** Advisory seat and payload meters from Hub's charter manifest. */
|
|
1472
1474
|
const ManifestCapacityStats = ({ paxCount, seats, paxWeight, cargoWeight, payloadLimit, className = '', }) => {
|
|
1473
1475
|
const totalWeight = paxWeight + cargoWeight;
|
|
1474
1476
|
const overSeats = seats > 0 && paxCount > seats;
|
|
1475
1477
|
const overPayload = payloadLimit > 0 && totalWeight > payloadLimit;
|
|
1476
|
-
return (jsxs("div", { className: className, children: [jsxs("div", { className: styles$
|
|
1478
|
+
return (jsxs("div", { className: className, children: [jsxs("div", { className: styles$r.stats, children: [jsx(Stat, { label: "Seats", value: `${paxCount} / ${seats}`, sub: overSeats ? `${paxCount - seats} over capacity` : `${Math.max(0, seats - paxCount)} seats open`, meterValue: paxCount, meterMax: seats, warn: overSeats }), jsx(Stat, { label: "Passenger weight", value: `${paxWeight.toLocaleString()} lb`, sub: `${paxCount} passengers`, meterValue: paxWeight, meterMax: payloadLimit }), jsx(Stat, { label: "Cargo weight", value: `${cargoWeight.toLocaleString()} lb`, sub: "Equipment + bags", meterValue: cargoWeight, meterMax: payloadLimit }), jsx(Stat, { label: "Total payload", value: `${totalWeight.toLocaleString()} lb`, sub: overPayload ? `${(totalWeight - payloadLimit).toLocaleString()} lb over limit` : `Limit ${payloadLimit.toLocaleString()} lb`, meterValue: totalWeight, meterMax: payloadLimit, warn: overPayload })] }), (overSeats || overPayload) && (jsxs("div", { className: styles$r.alert, role: "alert", children: [jsx(WarningIcon$1, { size: 20, className: styles$r.alertIcon }), jsxs("div", { children: [overSeats && (jsxs("div", { children: [jsx("strong", { children: "Over seat capacity." }), " Remove ", paxCount - seats, " passenger(s) or split the manifest by segment."] })), overPayload && (jsxs("div", { children: [jsx("strong", { children: "Over the contracted payload." }), " Total payload exceeds the quoted maximum \u2014 coordinate with the team/client and confirm with the carrier before sending."] }))] })] }))] }));
|
|
1477
1479
|
};
|
|
1478
1480
|
|
|
1479
|
-
var styles$
|
|
1481
|
+
var styles$q = {"overlay":"Modal-module_overlay__n7Paz","fadeIn":"Modal-module_fadeIn__upWKg","modal":"Modal-module_modal__YZQ-K","slideIn":"Modal-module_slideIn__mtAFr","sm":"Modal-module_sm__QSWSJ","md":"Modal-module_md__6t9J8","lg":"Modal-module_lg__5r3uQ","xl":"Modal-module_xl__JPpjn","full":"Modal-module_full__y9leS","header":"Modal-module_header__xTw6j","title":"Modal-module_title__KvPHy","closeButton":"Modal-module_closeButton__JoRui","body":"Modal-module_body__K3swC","footer":"Modal-module_footer__Z1UcB","footerButtons":"Modal-module_footerButtons__u-Ayv","confirmMessage":"Modal-module_confirmMessage__ZlKV8"};
|
|
1480
1482
|
|
|
1481
1483
|
const Modal = ({ isOpen, onClose, title, children, size = 'md', showCloseButton = true, closeOnBackdropClick = true, closeOnEscape = true, footer, className = '', }) => {
|
|
1482
1484
|
const handleEscape = useCallback((e) => {
|
|
@@ -1501,12 +1503,12 @@ const Modal = ({ isOpen, onClose, title, children, size = 'md', showCloseButton
|
|
|
1501
1503
|
};
|
|
1502
1504
|
if (!isOpen)
|
|
1503
1505
|
return null;
|
|
1504
|
-
return (jsx("div", { className: styles$
|
|
1506
|
+
return (jsx("div", { className: styles$q.overlay, onClick: handleBackdropClick, children: jsxs("div", { className: `${styles$q.modal} ${styles$q[size]} ${className}`, role: "dialog", "aria-modal": "true", "aria-labelledby": title ? 'modal-title' : undefined, children: [(title || showCloseButton) && (jsxs("div", { className: styles$q.header, children: [title && (jsx("h2", { id: "modal-title", className: styles$q.title, children: title })), showCloseButton && (jsx("button", { type: "button", className: styles$q.closeButton, onClick: onClose, "aria-label": "Close modal", children: jsx("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }))] })), jsx("div", { className: styles$q.body, children: children }), footer && jsx("div", { className: styles$q.footer, children: footer })] }) }));
|
|
1505
1507
|
};
|
|
1506
|
-
const ModalFooter = ({ children, className = '' }) => (jsx("div", { className: `${styles$
|
|
1507
|
-
const ConfirmModal = ({ message, confirmText = 'Confirm', cancelText = 'Cancel', onConfirm, onClose, destructive = false, loading = false, ...props }) => (jsx(Modal, { ...props, onClose: onClose, size: "sm", footer: jsxs(ModalFooter, { children: [jsx(Button, { variant: "secondary", onClick: onClose, children: cancelText }), jsx(Button, { variant: destructive ? 'danger' : 'primary', onClick: onConfirm, disabled: loading, children: loading ? 'Loading...' : confirmText })] }), children: jsx("div", { className: styles$
|
|
1508
|
+
const ModalFooter = ({ children, className = '' }) => (jsx("div", { className: `${styles$q.footerButtons} ${className}`, children: children }));
|
|
1509
|
+
const ConfirmModal = ({ message, confirmText = 'Confirm', cancelText = 'Cancel', onConfirm, onClose, destructive = false, loading = false, ...props }) => (jsx(Modal, { ...props, onClose: onClose, size: "sm", footer: jsxs(ModalFooter, { children: [jsx(Button, { variant: "secondary", onClick: onClose, children: cancelText }), jsx(Button, { variant: destructive ? 'danger' : 'primary', onClick: onConfirm, disabled: loading, children: loading ? 'Loading...' : confirmText })] }), children: jsx("div", { className: styles$q.confirmMessage, children: message }) }));
|
|
1508
1510
|
|
|
1509
|
-
var styles$
|
|
1511
|
+
var styles$p = {"module":"Module-module_module__1Lglz","header":"Module-module_header__-qP6m","closed":"Module-module_closed__J5FYJ","sm":"Module-module_sm__g-iVI","md":"Module-module_md__zmKQE","lg":"Module-module_lg__5uVgV","titleRow":"Module-module_titleRow__3upJc","icon":"Module-module_icon__MXVy7","iconSpaced":"Module-module_iconSpaced__O8F0i","title":"Module-module_title__Qdyv0","badge":"Module-module_badge__zoNEC","tools":"Module-module_tools__w6Z1b","toggleBtn":"Module-module_toggleBtn__VxH2u","bodyWrapper":"Module-module_bodyWrapper__IogVT","body":"Module-module_body__O9n9B","hidden":"Module-module_hidden__mmUYg","footer":"Module-module_footer__hrUY9","divider":"Module-module_divider__YQKdf","dark":"Module-module_dark__w8Fb-","verticalDivider":"Module-module_verticalDivider__t3g-3"};
|
|
1510
1512
|
|
|
1511
1513
|
const ChevronIcon = ({ direction }) => (jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", style: { transform: direction === 'up' ? 'rotate(180deg)' : 'none' }, children: jsx("polyline", { points: "6 9 12 15 18 9" }) }));
|
|
1512
1514
|
/**
|
|
@@ -1528,19 +1530,19 @@ const Module = ({ title, icon, iconClassName = '', badge, before, children, afte
|
|
|
1528
1530
|
setOpen(!open);
|
|
1529
1531
|
}
|
|
1530
1532
|
};
|
|
1531
|
-
return (jsxs("div", { className: `${styles$
|
|
1533
|
+
return (jsxs("div", { className: `${styles$p.module} ${className}`, children: [title && (jsx("div", { className: `${styles$p.header} ${styles$p[size]} ${!open ? styles$p.closed : ''} ${headerClassName}`, children: jsxs("div", { className: `${styles$p.titleRow} ${styles$p[size]} ${titleClassName}`, children: [icon && (jsx("span", { className: `${styles$p.icon} ${size === 'sm' ? '' : styles$p.iconSpaced} ${iconClassName}`, children: icon })), jsx("span", { className: styles$p.title, children: title }), badge && jsx("span", { className: styles$p.badge, children: badge }), jsxs("div", { className: styles$p.tools, children: [tools, useToggle && (jsx("button", { type: "button", className: styles$p.toggleBtn, onClick: handleToggle, "aria-expanded": open, children: jsx(ChevronIcon, { direction: open ? 'up' : 'down' }) }))] })] }) })), jsxs("div", { className: styles$p.bodyWrapper, children: [before, jsx("div", { className: `${styles$p.body} ${styles$p[size]} ${!open ? styles$p.hidden : ''} ${bodyClassName}`, children: children }), after] }), footer && (jsx("div", { className: `${styles$p.footer} ${!open ? styles$p.hidden : ''}`, children: footer }))] }));
|
|
1532
1534
|
};
|
|
1533
1535
|
/**
|
|
1534
1536
|
* Horizontal divider for Module content
|
|
1535
1537
|
*/
|
|
1536
|
-
const ModuleDivider = ({ dark = false, className = '' }) => (jsx("hr", { className: `${styles$
|
|
1538
|
+
const ModuleDivider = ({ dark = false, className = '' }) => (jsx("hr", { className: `${styles$p.divider} ${dark ? styles$p.dark : ''} ${className}` }));
|
|
1537
1539
|
/**
|
|
1538
1540
|
* Vertical divider for Module content
|
|
1539
1541
|
*/
|
|
1540
|
-
const ModuleVerticalDivider = ({ dark = false, className = '' }) => (jsx("div", { className: `${styles$
|
|
1542
|
+
const ModuleVerticalDivider = ({ dark = false, className = '' }) => (jsx("div", { className: `${styles$p.verticalDivider} ${dark ? styles$p.dark : ''} ${className}` }));
|
|
1541
1543
|
Module.displayName = 'Module';
|
|
1542
1544
|
|
|
1543
|
-
var styles$
|
|
1545
|
+
var styles$o = {"stack":"PageBanners-module_stack__v6nwz","banner":"PageBanners-module_banner__8lgnU","system":"PageBanners-module_system__Xiqoe","alert":"PageBanners-module_alert__O2lYb","systemIcon":"PageBanners-module_systemIcon__su3aG","alertIcon":"PageBanners-module_alertIcon__owy3V","alertTitle":"PageBanners-module_alertTitle__zeo3d","alertDismiss":"PageBanners-module_alertDismiss__2JI9V","content":"PageBanners-module_content__ZHLA9","title":"PageBanners-module_title__-53EA","detail":"PageBanners-module_detail__xgNJE","clamp":"PageBanners-module_clamp__iWIIp","alertLink":"PageBanners-module_alertLink__mxQM5","dismiss":"PageBanners-module_dismiss__aWRXw"};
|
|
1544
1546
|
|
|
1545
1547
|
const decodeEntities = (value) => {
|
|
1546
1548
|
if (typeof document === 'undefined')
|
|
@@ -1567,13 +1569,13 @@ const PageBanners = ({ systemBanners, alertBanners, className = '', }) => {
|
|
|
1567
1569
|
const visibleAlerts = alertBanners.filter((banner) => !dismissed.has(banner.id));
|
|
1568
1570
|
if (!visibleSystem.length && !visibleAlerts.length)
|
|
1569
1571
|
return null;
|
|
1570
|
-
return (jsxs("div", { className: [styles$
|
|
1571
|
-
const content = (jsxs("div", { className: styles$
|
|
1572
|
-
return (jsxs("div", { className: [styles$
|
|
1572
|
+
return (jsxs("div", { className: [styles$o.stack, className].filter(Boolean).join(' '), role: "region", "aria-label": "Page notices", children: [visibleSystem.map((banner) => (jsxs("div", { className: [styles$o.banner, styles$o.system].join(' '), role: "status", children: [jsx(InfoIcon$1, { className: styles$o.systemIcon, size: 20, "aria-hidden": "true" }), jsxs("div", { className: styles$o.content, children: [jsx("p", { className: styles$o.title, dangerouslySetInnerHTML: { __html: banner.html } }), banner.detailHtml && (jsx("p", { className: styles$o.detail, dangerouslySetInnerHTML: { __html: banner.detailHtml } }))] }), jsx("button", { type: "button", className: styles$o.dismiss, "aria-label": "Dismiss notice", onClick: () => dismiss(banner.id), children: jsx(CloseIcon, { size: 16 }) })] }, banner.id))), visibleAlerts.map((banner) => {
|
|
1573
|
+
const content = (jsxs("div", { className: styles$o.content, children: [jsx("p", { className: [styles$o.title, styles$o.alertTitle].join(' '), children: decodeEntities(banner.title) }), banner.body && jsx("p", { className: [styles$o.detail, styles$o.clamp].join(' '), children: decodeEntities(banner.body) })] }));
|
|
1574
|
+
return (jsxs("div", { className: [styles$o.banner, styles$o.alert].join(' '), role: "alert", children: [jsx(WarningIcon$1, { className: styles$o.alertIcon, size: 20, "aria-hidden": "true" }), banner.href ? (jsx("a", { href: banner.href, className: styles$o.alertLink, children: content })) : (content), jsx("button", { type: "button", className: [styles$o.dismiss, styles$o.alertDismiss].join(' '), "aria-label": "Dismiss alert", onClick: () => dismiss(banner.id), children: jsx(CloseIcon, { size: 16 }) })] }, banner.id));
|
|
1573
1575
|
})] }));
|
|
1574
1576
|
};
|
|
1575
1577
|
|
|
1576
|
-
var styles$
|
|
1578
|
+
var styles$n = {"panel":"PreferencesPanel-module_panel__xsxcw","loading":"PreferencesPanel-module_loading__GopYy","alert":"PreferencesPanel-module_alert__9yYz3","title":"PreferencesPanel-module_title__Z5dpP","grid":"PreferencesPanel-module_grid__e0urP","section":"PreferencesPanel-module_section__6cbAx","sectionHeader":"PreferencesPanel-module_sectionHeader__X6e5h","sectionIcon":"PreferencesPanel-module_sectionIcon__jVJwn","sectionTitle":"PreferencesPanel-module_sectionTitle__29M-O","fields":"PreferencesPanel-module_fields__rryQ3","field":"PreferencesPanel-module_field__W3Z9z","fieldLabel":"PreferencesPanel-module_fieldLabel__usgRa","fieldValue":"PreferencesPanel-module_fieldValue__AEJ1C","fieldInput":"PreferencesPanel-module_fieldInput__rS8OR","footer":"PreferencesPanel-module_footer__qTYqi"};
|
|
1577
1579
|
|
|
1578
1580
|
const PlaneIcon$1 = () => (jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsx("path", { d: "M21 16v-2l-8-5V3.5a1.5 1.5 0 0 0-3 0V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5Z" }) }));
|
|
1579
1581
|
const BusIcon$1 = () => (jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("rect", { x: "4", y: "4", width: "16", height: "14", rx: "2" }), jsx("path", { d: "M8 6v6" }), jsx("path", { d: "M16 6v6" }), jsx("circle", { cx: "8", cy: "16", r: "1" }), jsx("circle", { cx: "16", cy: "16", r: "1" })] }));
|
|
@@ -1588,15 +1590,15 @@ const DEFAULT_ICONS = {
|
|
|
1588
1590
|
*/
|
|
1589
1591
|
const PreferencesPanel = ({ title, sections, alert, footer, isLoading = false, className = '', }) => {
|
|
1590
1592
|
const panelClasses = [
|
|
1591
|
-
styles$
|
|
1592
|
-
isLoading ? styles$
|
|
1593
|
+
styles$n.panel,
|
|
1594
|
+
isLoading ? styles$n.loading : '',
|
|
1593
1595
|
className,
|
|
1594
1596
|
].filter(Boolean).join(' ');
|
|
1595
|
-
return (jsxs("div", { className: panelClasses, children: [alert && (jsx("div", { className: styles$
|
|
1597
|
+
return (jsxs("div", { className: panelClasses, children: [alert && (jsx("div", { className: styles$n.alert, children: alert })), title && jsx("h2", { className: styles$n.title, children: title }), jsx("div", { className: styles$n.grid, children: sections.map((section, i) => (jsxs("div", { className: styles$n.section, children: [jsxs("div", { className: styles$n.sectionHeader, children: [(section.icon || DEFAULT_ICONS[section.title.toLowerCase()]) && (jsx("span", { className: styles$n.sectionIcon, children: section.icon || DEFAULT_ICONS[section.title.toLowerCase()] })), jsx("h3", { className: styles$n.sectionTitle, children: section.title })] }), jsx("div", { className: styles$n.fields, children: section.fields.map((field, j) => (jsxs("div", { className: styles$n.field, children: [jsx("label", { className: styles$n.fieldLabel, children: field.label }), field.input ? (jsx("div", { className: styles$n.fieldInput, children: field.input })) : (jsx("div", { className: styles$n.fieldValue, children: field.value || '—' }))] }, j))) })] }, i))) }), footer && (jsx("div", { className: styles$n.footer, children: footer }))] }));
|
|
1596
1598
|
};
|
|
1597
1599
|
PreferencesPanel.displayName = 'PreferencesPanel';
|
|
1598
1600
|
|
|
1599
|
-
var styles$
|
|
1601
|
+
var styles$m = {"summary":"RequestSummary-module_summary__nxews","title":"RequestSummary-module_title__NAq53","submissionInfo":"RequestSummary-module_submissionInfo__dwkaf","label":"RequestSummary-module_label__pGo-5","value":"RequestSummary-module_value__F8m9g","sections":"RequestSummary-module_sections__uWXtM","section":"RequestSummary-module_section__TlxbY","sectionTitle":"RequestSummary-module_sectionTitle__iMPB2","segment":"RequestSummary-module_segment__xq-Lp","segmentTitle":"RequestSummary-module_segmentTitle__ey5-f","row":"RequestSummary-module_row__tfJzQ","empty":"RequestSummary-module_empty__fzxmd"};
|
|
1600
1602
|
|
|
1601
1603
|
/**
|
|
1602
1604
|
* SummaryItem component displays a single label-value pair.
|
|
@@ -1605,7 +1607,7 @@ const SummaryItemRow = ({ item, value }) => {
|
|
|
1605
1607
|
if (!value)
|
|
1606
1608
|
return null;
|
|
1607
1609
|
const formattedValue = item.format ? item.format(value) : String(value);
|
|
1608
|
-
return (jsxs("div", { className: styles$
|
|
1610
|
+
return (jsxs("div", { className: styles$m.row, children: [jsx("span", { className: styles$m.label, children: item.label }), jsx("span", { className: styles$m.value, children: formattedValue })] }));
|
|
1609
1611
|
};
|
|
1610
1612
|
/**
|
|
1611
1613
|
* SummarySection component for a group of related summary items.
|
|
@@ -1616,7 +1618,7 @@ const SummarySection = ({ section, values }) => {
|
|
|
1616
1618
|
const hasSegments = section.segments?.some(seg => seg.items.some(item => values[`${section.key}_${seg.label}_${item.label}`] || values[item.label]));
|
|
1617
1619
|
if (!hasItems && !hasSegments)
|
|
1618
1620
|
return null;
|
|
1619
|
-
return (jsxs("div", { className: styles$
|
|
1621
|
+
return (jsxs("div", { className: styles$m.section, children: [jsx("h3", { className: styles$m.sectionTitle, children: section.title }), section.items?.map((item, i) => (jsx(SummaryItemRow, { item: item, value: values[item.label] || values[`${section.key}_${item.label}`] }, i))), section.segments?.map((segment, i) => (jsxs("div", { className: styles$m.segment, children: [jsx("h4", { className: styles$m.segmentTitle, children: segment.label }), segment.items.map((item, j) => (jsx(SummaryItemRow, { item: item, value: values[`${section.key}_${segment.label}_${item.label}`] || values[item.label] }, j)))] }, i)))] }));
|
|
1620
1622
|
};
|
|
1621
1623
|
/**
|
|
1622
1624
|
* RequestSummary component for displaying a summary of travel request form data.
|
|
@@ -1624,18 +1626,18 @@ const SummarySection = ({ section, values }) => {
|
|
|
1624
1626
|
*/
|
|
1625
1627
|
const RequestSummary = ({ sections, values, enabledSections = {}, submissionInfo, className, title = 'Request Summary', }) => {
|
|
1626
1628
|
const visibleSections = sections.filter(section => enabledSections[section.key] !== false);
|
|
1627
|
-
return (jsxs("div", { className: `${styles$
|
|
1629
|
+
return (jsxs("div", { className: `${styles$m.summary} ${className || ''}`, children: [jsx("h2", { className: styles$m.title, children: title }), submissionInfo && (jsxs("div", { className: styles$m.submissionInfo, children: [jsx("span", { className: styles$m.label, children: "Submitted by" }), jsx("span", { className: styles$m.value, children: submissionInfo.submittedBy }), jsx("span", { className: styles$m.label, children: "on" }), jsx("span", { className: styles$m.value, children: submissionInfo.submittedOn })] })), jsx("div", { className: styles$m.sections, children: visibleSections.map((section) => (jsx(SummarySection, { section: section, values: values }, section.key))) }), visibleSections.length === 0 && (jsx("p", { className: styles$m.empty, children: "No services selected" }))] }));
|
|
1628
1630
|
};
|
|
1629
1631
|
RequestSummary.displayName = 'RequestSummary';
|
|
1630
1632
|
|
|
1631
|
-
var styles$
|
|
1633
|
+
var styles$l = {"layout":"RequestFormLayout-module_layout__R-vaM","header":"RequestFormLayout-module_header__705In","headerContent":"RequestFormLayout-module_headerContent__Uu0br","headerTitle":"RequestFormLayout-module_headerTitle__W-fub","pagination":"RequestFormLayout-module_pagination__hTpNr","separator":"RequestFormLayout-module_separator__BgEsp","eventName":"RequestFormLayout-module_eventName__1zpgS","headerRight":"RequestFormLayout-module_headerRight__VjjY3","body":"RequestFormLayout-module_body__RBH8O","sidebar":"RequestFormLayout-module_sidebar__Ozr7m","showOnMobile":"RequestFormLayout-module_showOnMobile__kyyER","sidebarContent":"RequestFormLayout-module_sidebarContent__IdoMX","main":"RequestFormLayout-module_main__132ss","mainContent":"RequestFormLayout-module_mainContent__vnp1R","summarySidebar":"RequestFormLayout-module_summarySidebar__Vfg-z","summaryContent":"RequestFormLayout-module_summaryContent__Oppnd","footer":"RequestFormLayout-module_footer__yxDM5","footerContent":"RequestFormLayout-module_footerContent__GmTkE","button":"RequestFormLayout-module_button__-iWUv","primary":"RequestFormLayout-module_primary__cs2Fb","secondary":"RequestFormLayout-module_secondary__9WNRX"};
|
|
1632
1634
|
|
|
1633
1635
|
/**
|
|
1634
1636
|
* RequestFormHeader component for the fixed header in travel request forms.
|
|
1635
1637
|
*/
|
|
1636
1638
|
const RequestFormHeader = ({ title, currentPage, totalPages, eventName, rightContent, className, }) => {
|
|
1637
1639
|
const showPagination = currentPage !== undefined && totalPages !== undefined && totalPages > 1;
|
|
1638
|
-
return (jsx("header", { className: `${styles$
|
|
1640
|
+
return (jsx("header", { className: `${styles$l.header} ${className || ''}`, children: jsxs("div", { className: styles$l.headerContent, children: [jsxs("h1", { className: styles$l.headerTitle, children: [title, showPagination && (jsxs("span", { className: styles$l.pagination, children: ["(", currentPage, "/", totalPages, ")"] })), eventName && (jsxs(Fragment, { children: [jsx("span", { className: styles$l.separator, children: "\u2013" }), jsx("span", { className: styles$l.eventName, children: eventName })] }))] }), rightContent && jsx("div", { className: styles$l.headerRight, children: rightContent })] }) }));
|
|
1639
1641
|
};
|
|
1640
1642
|
/**
|
|
1641
1643
|
* RequestFormFooter component for the fixed footer with navigation buttons.
|
|
@@ -1643,20 +1645,20 @@ const RequestFormHeader = ({ title, currentPage, totalPages, eventName, rightCon
|
|
|
1643
1645
|
const RequestFormFooter = ({ onPrevious, onNext, isFirstPage = false, isLastPage = false, isSubmitting = false, previousText, nextText, className, }) => {
|
|
1644
1646
|
const prevLabel = previousText || (isFirstPage ? 'Cancel' : 'Previous');
|
|
1645
1647
|
const nextLabel = nextText || (isLastPage ? 'Submit' : 'Next');
|
|
1646
|
-
return (jsx("footer", { className: `${styles$
|
|
1648
|
+
return (jsx("footer", { className: `${styles$l.footer} ${className || ''}`, children: jsxs("div", { className: styles$l.footerContent, children: [jsx("button", { type: "button", className: `${styles$l.button} ${styles$l.secondary}`, onClick: onPrevious, disabled: isSubmitting, children: prevLabel }), jsx("button", { type: "button", className: `${styles$l.button} ${styles$l.primary}`, onClick: onNext, disabled: isSubmitting, children: isSubmitting ? 'Submitting...' : nextLabel })] }) }));
|
|
1647
1649
|
};
|
|
1648
1650
|
/**
|
|
1649
1651
|
* RequestFormLayout organism for travel request forms.
|
|
1650
1652
|
* Provides a three-column layout with fixed header and footer.
|
|
1651
1653
|
*/
|
|
1652
1654
|
const RequestFormLayout = ({ header, sidebar, children, summary, footer, className, showSidebarOnMobile = false, }) => {
|
|
1653
|
-
return (jsxs("div", { className: `${styles$
|
|
1655
|
+
return (jsxs("div", { className: `${styles$l.layout} ${className || ''}`, children: [header, jsxs("div", { className: styles$l.body, children: [sidebar && (jsx("aside", { className: `${styles$l.sidebar} ${showSidebarOnMobile ? styles$l.showOnMobile : ''}`, children: jsx("div", { className: styles$l.sidebarContent, children: sidebar }) })), jsx("main", { className: styles$l.main, children: jsx("div", { className: styles$l.mainContent, children: children }) }), summary && (jsx("aside", { className: styles$l.summarySidebar, children: jsx("div", { className: styles$l.summaryContent, children: summary }) }))] }), footer] }));
|
|
1654
1656
|
};
|
|
1655
1657
|
RequestFormLayout.displayName = 'RequestFormLayout';
|
|
1656
1658
|
RequestFormHeader.displayName = 'RequestFormHeader';
|
|
1657
1659
|
RequestFormFooter.displayName = 'RequestFormFooter';
|
|
1658
1660
|
|
|
1659
|
-
var styles$
|
|
1661
|
+
var styles$k = {"wrapper":"Table-module_wrapper__1klo5","table":"Table-module_table__fkuUB","header":"Table-module_header__vRy6j","headerCell":"Table-module_headerCell__2KzYn","headerContent":"Table-module_headerContent__HPl8-","sortable":"Table-module_sortable__NiS6E","sortIcon":"Table-module_sortIcon__Fy6z7","body":"Table-module_body__Wt52U","row":"Table-module_row__4GEgX","cell":"Table-module_cell__Xr-7H","alignLeft":"Table-module_alignLeft__FtI9E","alignCenter":"Table-module_alignCenter__p8Tr8","alignRight":"Table-module_alignRight__Ca7Yr","bordered":"Table-module_bordered__9bM3L","striped":"Table-module_striped__6TMF-","hoverable":"Table-module_hoverable__KN5Fp","compact":"Table-module_compact__opzS-","clickable":"Table-module_clickable__2ummV","loading":"Table-module_loading__tFELE","empty":"Table-module_empty__urRiw","pulse":"Table-module_pulse__t32v9"};
|
|
1660
1662
|
|
|
1661
1663
|
const Table = ({ columns, data, rowKey = 'id', bordered = false, striped = false, hoverable = true, compact = false, loading = false, emptyMessage = 'No data available', onRowClick, className = '', }) => {
|
|
1662
1664
|
const [sortColumn, setSortColumn] = useState(null);
|
|
@@ -1694,12 +1696,12 @@ const Table = ({ columns, data, rowKey = 'id', bordered = false, striped = false
|
|
|
1694
1696
|
}
|
|
1695
1697
|
return row[rowKey] ?? index;
|
|
1696
1698
|
};
|
|
1697
|
-
return (jsx("div", { className: `${styles$
|
|
1699
|
+
return (jsx("div", { className: `${styles$k.wrapper} ${className}`, children: jsxs("table", { className: `${styles$k.table} ${bordered ? styles$k.bordered : ''} ${striped ? styles$k.striped : ''} ${hoverable ? styles$k.hoverable : ''} ${compact ? styles$k.compact : ''}`, children: [jsx("thead", { className: styles$k.header, children: jsx("tr", { children: columns.map((column) => (jsx("th", { className: `${styles$k.headerCell} ${column.sortable ? styles$k.sortable : ''} ${styles$k[`align${(column.align || 'left').charAt(0).toUpperCase()}${(column.align || 'left').slice(1)}`]}`, style: column.width ? { width: column.width } : undefined, onClick: () => handleSort(column), children: jsxs("span", { className: styles$k.headerContent, children: [column.label, column.sortable && (jsx("span", { className: styles$k.sortIcon, children: sortColumn === column.key ? (sortDirection === 'asc' ? '↑' : '↓') : ('↕') }))] }) }, column.key))) }) }), jsx("tbody", { className: styles$k.body, children: loading ? (jsx("tr", { children: jsx("td", { colSpan: columns.length, className: styles$k.loading, children: "Loading..." }) })) : sortedData.length === 0 ? (jsx("tr", { children: jsx("td", { colSpan: columns.length, className: styles$k.empty, children: emptyMessage }) })) : (sortedData.map((row, rowIndex) => (jsx("tr", { className: `${styles$k.row} ${onRowClick ? styles$k.clickable : ''}`, onClick: () => onRowClick?.(row, rowIndex), children: columns.map((column) => (jsx("td", { className: `${styles$k.cell} ${styles$k[`align${(column.align || 'left').charAt(0).toUpperCase()}${(column.align || 'left').slice(1)}`]}`, children: column.render
|
|
1698
1700
|
? column.render(row[column.key], row, rowIndex)
|
|
1699
1701
|
: row[column.key] }, column.key))) }, getRowKey(row, rowIndex))))) })] }) }));
|
|
1700
1702
|
};
|
|
1701
1703
|
|
|
1702
|
-
var styles$
|
|
1704
|
+
var styles$j = {"card":"TeamCard-module_card__R2u4q","header":"TeamCard-module_header__XXRUp","icon":"TeamCard-module_icon__l2Go2","title":"TeamCard-module_title__llL8V","body":"TeamCard-module_body__OoVMW","tabs":"TeamCard-module_tabs__SJ7t-","tab":"TeamCard-module_tab__Q5j3C","tabActive":"TeamCard-module_tabActive__dUPwX","list":"TeamCard-module_list__a734u","teamItem":"TeamCard-module_teamItem__OYVIK","teamCode":"TeamCard-module_teamCode__BHB63","teamName":"TeamCard-module_teamName__-Bds2","chevron":"TeamCard-module_chevron__zBxM6","empty":"TeamCard-module_empty__8b5hb"};
|
|
1703
1705
|
|
|
1704
1706
|
const TEAM_GROUPS = [
|
|
1705
1707
|
{ label: 'All', key: undefined },
|
|
@@ -1733,26 +1735,26 @@ const TeamCard = ({ title = 'Administer Teams', icon, teams, onTeamSelect, class
|
|
|
1733
1735
|
return teams.filter(team => team.category === activeTab);
|
|
1734
1736
|
}, [teams, activeTab]);
|
|
1735
1737
|
const cardClasses = [
|
|
1736
|
-
styles$
|
|
1738
|
+
styles$j.card,
|
|
1737
1739
|
className,
|
|
1738
1740
|
].filter(Boolean).join(' ');
|
|
1739
|
-
return (jsxs("div", { className: cardClasses, children: [jsxs("div", { className: styles$
|
|
1741
|
+
return (jsxs("div", { className: cardClasses, children: [jsxs("div", { className: styles$j.header, children: [jsx("span", { className: styles$j.icon, children: icon || jsx(UsersIcon, {}) }), jsx("h3", { className: styles$j.title, children: title })] }), jsxs("div", { className: styles$j.body, children: [jsx("div", { className: styles$j.tabs, children: TEAM_GROUPS.map(({ label, key }) => (jsx("button", { type: "button", onClick: () => setActiveTab(key), className: `${styles$j.tab} ${activeTab === key ? styles$j.tabActive : ''}`, children: label }, label))) }), jsxs("div", { className: styles$j.list, children: [filteredTeams.map((team) => (jsxs("button", { type: "button", className: styles$j.teamItem, onClick: () => onTeamSelect?.(team), children: [jsx("span", { className: styles$j.teamCode, style: { backgroundColor: getTeamColor(team.code) }, children: team.code }), jsx("span", { className: styles$j.teamName, children: team.description }), jsx("span", { className: styles$j.chevron, children: jsx(ChevronRightIcon, {}) })] }, team.id))), filteredTeams.length === 0 && (jsx("div", { className: styles$j.empty, children: "No teams found" }))] })] })] }));
|
|
1740
1742
|
};
|
|
1741
1743
|
TeamCard.displayName = 'TeamCard';
|
|
1742
1744
|
|
|
1743
|
-
var styles$
|
|
1745
|
+
var styles$i = {"actions":"TeamScheduleActions-module_actions__OvuON","primaryRow":"TeamScheduleActions-module_primaryRow__8rwhE","tripCount":"TeamScheduleActions-module_tripCount__4axn4","seasonNavigator":"TeamScheduleActions-module_seasonNavigator__jmqeE","seasonLabel":"TeamScheduleActions-module_seasonLabel__8MtKK","secondaryRow":"TeamScheduleActions-module_secondaryRow__We2n9"};
|
|
1744
1746
|
|
|
1745
1747
|
/** Exact presentational counterpart of Hub's Team Schedule action controls. */
|
|
1746
|
-
const TeamScheduleActions = ({ isCompactView, tripCount, seasonLabel, seasonValue, seasonOptions = [], previousSeasonDisabled = false, exportDisabled = false, exporting = false, groupTravelDisabled = false, mergeDisabled = false, merging = false, onViewSchedule, onBack, onPreviousSeason, onNextSeason, onSeasonChange, onExport, onGroupTravelRequest, onMergeEvents, className = '', }) => (jsxs("div", { className: [styles$
|
|
1748
|
+
const TeamScheduleActions = ({ isCompactView, tripCount, seasonLabel, seasonValue, seasonOptions = [], previousSeasonDisabled = false, exportDisabled = false, exporting = false, groupTravelDisabled = false, mergeDisabled = false, merging = false, onViewSchedule, onBack, onPreviousSeason, onNextSeason, onSeasonChange, onExport, onGroupTravelRequest, onMergeEvents, className = '', }) => (jsxs("div", { className: [styles$i.actions, className].filter(Boolean).join(' '), children: [jsxs("div", { className: styles$i.primaryRow, children: [!isCompactView ? (jsx(Button, { size: "sm", onClick: onViewSchedule, children: "View/Edit Schedule" })) : (jsx(Button, { size: "sm", onClick: onBack, leftIcon: jsx(ChevronLeftIcon, { size: 14 }), children: "Back" })), jsxs("div", { className: styles$i.seasonNavigator, children: [jsx(Button, { variant: "secondary", size: "sm", square: true, "aria-label": "Previous Season", disabled: previousSeasonDisabled, onClick: onPreviousSeason, children: jsx(ChevronLeftIcon, { size: 18 }) }), jsxs("div", { className: styles$i.seasonLabel, children: [jsx(Button, { variant: "secondary", size: "sm", children: seasonLabel }), !!seasonOptions.length && (jsx("select", { "aria-label": "Season", value: seasonValue, onChange: (event) => onSeasonChange?.(event.target.value), children: seasonOptions.map((option) => jsx("option", { value: option.value, children: option.label }, option.value)) }))] }), jsx(Button, { variant: "secondary", size: "sm", square: true, "aria-label": "Next Season", onClick: onNextSeason, children: jsx(ChevronRightIcon$1, { size: 18 }) })] }), isCompactView && jsx(Button, { variant: "outline", size: "sm", loading: exporting, disabled: exportDisabled, rightIcon: jsx(ArrowUpRightIcon, { size: 14 }), onClick: onExport, children: "Export XLS" }), jsxs("span", { className: styles$i.tripCount, children: [tripCount, " trips displayed"] })] }), isCompactView && (jsxs("div", { className: styles$i.secondaryRow, children: [jsx(Button, { variant: "outline", size: "sm", disabled: groupTravelDisabled, onClick: onGroupTravelRequest, children: "Group Travel Request" }), jsx(Button, { variant: "outline", size: "sm", disabled: mergeDisabled, loading: merging, onClick: onMergeEvents, children: "Merge Events" })] }))] }));
|
|
1747
1749
|
|
|
1748
|
-
var styles$
|
|
1750
|
+
var styles$h = {"headers":"TeamScheduleCompactTable-module_headers__FVr2C","tripHeader":"TeamScheduleCompactTable-module_tripHeader__9vr2-","eventHeader":"TeamScheduleCompactTable-module_eventHeader__6gfwo","table":"TeamScheduleCompactTable-module_table__MdE3o","row":"TeamScheduleCompactTable-module_row__Rt0YC","trip":"TeamScheduleCompactTable-module_trip__oAUEQ","events":"TeamScheduleCompactTable-module_events__EwJi9","empty":"TeamScheduleCompactTable-module_empty__1u5HA","addRow":"TeamScheduleCompactTable-module_addRow__ejqSf"};
|
|
1749
1751
|
|
|
1750
1752
|
const DEFAULT_TRIP_HEADERS = ['', 'GTR', 'Trvl Start', 'Trvl End', 'Trip Name', 'Services', ''];
|
|
1751
1753
|
const DEFAULT_EVENT_HEADERS = ['', 'Event Date', 'Opponent/Host', 'Event Title', 'Hm/Awy', ''];
|
|
1752
1754
|
/** Hub's two-panel compact Team Schedule shell. Editable rows remain injectable. */
|
|
1753
|
-
const TeamScheduleCompactTable = ({ rows, tripHeaders = DEFAULT_TRIP_HEADERS, eventHeaders = DEFAULT_EVENT_HEADERS, onAddEvent, addEventDisabled = false, className = '', }) => (jsxs("div", { className: [styles$
|
|
1755
|
+
const TeamScheduleCompactTable = ({ rows, tripHeaders = DEFAULT_TRIP_HEADERS, eventHeaders = DEFAULT_EVENT_HEADERS, onAddEvent, addEventDisabled = false, className = '', }) => (jsxs("div", { className: [styles$h.schedule, className].filter(Boolean).join(' '), children: [jsxs("div", { className: styles$h.headers, children: [jsx("div", { className: styles$h.tripHeader, children: tripHeaders.map((header, index) => jsx("div", { children: header }, index)) }), jsx("div", { className: styles$h.eventHeader, children: eventHeaders.map((header, index) => jsx("div", { children: header }, index)) })] }), jsx("div", { className: styles$h.table, children: !rows.length ? jsx("div", { className: styles$h.empty, children: "No data available." }) : rows.map((row) => (jsxs("div", { className: styles$h.row, children: [jsx("div", { className: styles$h.trip, children: row.trip }), jsx("div", { className: styles$h.events, children: row.events })] }, row.id))) }), jsx("div", { className: styles$h.addRow, children: jsxs("button", { type: "button", disabled: addEventDisabled, onClick: onAddEvent, children: ["Add Event ", jsx(PlusIcon$2, { size: 16 })] }) })] }));
|
|
1754
1756
|
|
|
1755
|
-
var styles$
|
|
1757
|
+
var styles$g = {"table":"TeamScheduleExpandedTable-module_table__hmnHI","header":"TeamScheduleExpandedTable-module_header__7IWV-","row":"TeamScheduleExpandedTable-module_row__9MyHH","body":"TeamScheduleExpandedTable-module_body__NsvB3","cell":"TeamScheduleExpandedTable-module_cell__kgawH","tripLink":"TeamScheduleExpandedTable-module_tripLink__lYoi8","mobileLabel":"TeamScheduleExpandedTable-module_mobileLabel__J6apm","empty":"TeamScheduleExpandedTable-module_empty__d9Afo"};
|
|
1756
1758
|
|
|
1757
1759
|
const parseLocalDate = (value) => {
|
|
1758
1760
|
if (!value)
|
|
@@ -1806,19 +1808,181 @@ const TeamScheduleExpandedTable = ({ rows, teamCode, onTripClick, emptyMessage =
|
|
|
1806
1808
|
setAscending(true);
|
|
1807
1809
|
}
|
|
1808
1810
|
};
|
|
1809
|
-
return (jsxs("div", { className: [styles$
|
|
1811
|
+
return (jsxs("div", { className: [styles$g.table, className].filter(Boolean).join(' '), children: [jsx("div", { className: styles$g.header, children: headers.map((header) => (jsxs("button", { type: "button", disabled: !header.key, onClick: () => header.key && sort(header.key), children: [header.icon, jsx("span", { children: header.label }), header.key === sortKey && jsx("span", { "aria-label": ascending ? 'ascending' : 'descending', children: ascending ? '↑' : '↓' })] }, header.label))) }), !sortedRows.length ? jsx("div", { className: styles$g.empty, children: emptyMessage }) : jsx("div", { className: styles$g.body, children: sortedRows.map((row) => {
|
|
1810
1812
|
const values = [
|
|
1811
1813
|
teamCode ?? row.sportCode ?? '–',
|
|
1812
1814
|
formatTeamScheduleTravelDates(row.travelStartDate, row.travelEndDate),
|
|
1813
|
-
jsx("button", { type: "button", className: styles$
|
|
1815
|
+
jsx("button", { type: "button", className: styles$g.tripLink, onClick: () => onTripClick?.(row), children: row.tripName }),
|
|
1814
1816
|
row.airSegment,
|
|
1815
1817
|
row.groundSegment,
|
|
1816
1818
|
row.hotelSegment,
|
|
1817
1819
|
];
|
|
1818
|
-
return jsx("div", { className: styles$
|
|
1820
|
+
return jsx("div", { className: styles$g.row, children: values.map((value, index) => jsxs("div", { className: styles$g.cell, children: [jsxs("span", { className: styles$g.mobileLabel, children: [headers[index].icon, headers[index].label] }), jsx("div", { children: value || '–' })] }, headers[index].label)) }, row.masterTripGUID || row.tripName);
|
|
1819
1821
|
}) })] }));
|
|
1820
1822
|
};
|
|
1821
1823
|
|
|
1824
|
+
var styles$f = {"form":"TeamManagementForms-module_form__bF0qU","stack":"TeamManagementForms-module_stack__5XyWb","twoColumnGrid":"TeamManagementForms-module_twoColumnGrid__zKQM6","threeColumnGrid":"TeamManagementForms-module_threeColumnGrid__HiCa7","actions":"TeamManagementForms-module_actions__Y2lA0","sectionCard":"TeamManagementForms-module_sectionCard__IPv1F","blueSection":"TeamManagementForms-module_blueSection__FsxUA","sectionHeader":"TeamManagementForms-module_sectionHeader__rM4Oj","sectionIcon":"TeamManagementForms-module_sectionIcon__VkbW8","sectionHeading":"TeamManagementForms-module_sectionHeading__m8szw","badge":"TeamManagementForms-module_badge__IOqxe","optionalBadge":"TeamManagementForms-module_optionalBadge__PHhTy","completeBadge":"TeamManagementForms-module_completeBadge__ZLyyr","incompleteBadge":"TeamManagementForms-module_incompleteBadge__70kvV","middleNameField":"TeamManagementForms-module_middleNameField__43-7h","fieldHeader":"TeamManagementForms-module_fieldHeader__jG-Ej","fileField":"TeamManagementForms-module_fileField__JnFhb","instructions":"TeamManagementForms-module_instructions__qTJI6","sampleLink":"TeamManagementForms-module_sampleLink__L4qXl"};
|
|
1825
|
+
|
|
1826
|
+
const useManagedValues = (controlledValues, initialValues, onChange) => {
|
|
1827
|
+
const [internalValues, setInternalValues] = useState(initialValues);
|
|
1828
|
+
const currentValues = controlledValues ?? internalValues;
|
|
1829
|
+
const updateValues = (patch) => {
|
|
1830
|
+
const nextValues = { ...currentValues, ...patch };
|
|
1831
|
+
if (controlledValues === undefined)
|
|
1832
|
+
setInternalValues(nextValues);
|
|
1833
|
+
onChange?.(nextValues);
|
|
1834
|
+
};
|
|
1835
|
+
return [currentValues, updateValues];
|
|
1836
|
+
};
|
|
1837
|
+
const numericValue$1 = (value) => value === '' ? '' : Number(value);
|
|
1838
|
+
const FormShell = ({ ariaLabel, children, className = '', disabled = false, onCancel, onSubmit, showActions = true, values, }) => {
|
|
1839
|
+
const content = (jsxs(Fragment, { children: [children, showActions && (jsxs("div", { className: styles$f.actions, children: [jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsx(Button, { type: "submit", disabled: disabled, children: "Save" })] }))] }));
|
|
1840
|
+
if (!showActions)
|
|
1841
|
+
return jsx("div", { className: `${styles$f.form} ${className}`, children: content });
|
|
1842
|
+
return (jsx("form", { "aria-label": ariaLabel, className: `${styles$f.form} ${className}`, onSubmit: (event) => {
|
|
1843
|
+
event.preventDefault();
|
|
1844
|
+
onSubmit?.(values);
|
|
1845
|
+
}, children: content }));
|
|
1846
|
+
};
|
|
1847
|
+
const EMPTY_EQUIPMENT = {
|
|
1848
|
+
description: '',
|
|
1849
|
+
weight: '',
|
|
1850
|
+
quantity: '',
|
|
1851
|
+
height: '',
|
|
1852
|
+
width: '',
|
|
1853
|
+
depth: '',
|
|
1854
|
+
};
|
|
1855
|
+
const TeamEquipmentForm = ({ mode = 'Add', values, initialValues, onChange, onSubmit, onCancel, showActions = true, disabled = false, className, }) => {
|
|
1856
|
+
const [formValues, updateValues] = useManagedValues(values, { ...EMPTY_EQUIPMENT, ...initialValues }, onChange);
|
|
1857
|
+
return (jsx(FormShell, { ariaLabel: `${mode} equipment`, className: className, disabled: disabled, onCancel: onCancel, onSubmit: onSubmit, showActions: showActions, values: formValues, children: jsxs("div", { className: styles$f.stack, children: [jsx(Input, { label: "Item Name *", value: formValues.description, onChange: (event) => updateValues({ description: event.target.value }), required: true, disabled: disabled, fullWidth: true }), jsxs("div", { className: styles$f.twoColumnGrid, children: [jsx(Input, { label: "Weight (lbs) *", type: "number", min: "0", step: "0.1", value: formValues.weight, onChange: (event) => updateValues({ weight: numericValue$1(event.target.value) }), required: true, disabled: disabled, fullWidth: true }), jsx(Input, { label: "Quantity *", type: "number", min: "1", step: "1", value: formValues.quantity, onChange: (event) => updateValues({ quantity: numericValue$1(event.target.value) }), required: true, disabled: disabled, fullWidth: true }), jsx(Input, { label: "Height (inches)", type: "number", min: "0", step: "0.1", value: formValues.height, onChange: (event) => updateValues({ height: numericValue$1(event.target.value) }), disabled: disabled, fullWidth: true }), jsx(Input, { label: "Width (inches)", type: "number", min: "0", step: "0.1", value: formValues.width, onChange: (event) => updateValues({ width: numericValue$1(event.target.value) }), disabled: disabled, fullWidth: true }), jsx(Input, { label: "Depth (inches)", type: "number", min: "0", step: "0.1", value: formValues.depth, onChange: (event) => updateValues({ depth: numericValue$1(event.target.value) }), disabled: disabled, fullWidth: true })] })] }) }));
|
|
1858
|
+
};
|
|
1859
|
+
const TeamUserAccessForm = ({ options, values, initialValues, onChange, onSubmit, onCancel, showActions = true, disabled = false, className, }) => {
|
|
1860
|
+
const [formValues, updateValues] = useManagedValues(values, { userId: '', ...initialValues }, onChange);
|
|
1861
|
+
return (jsx(FormShell, { ariaLabel: "Add team access", className: className, disabled: disabled, onCancel: onCancel, onSubmit: onSubmit, showActions: showActions, values: formValues, children: jsx(Select, { label: "Available Users *", placeholder: "Select a school contact", options: options, value: formValues.userId, onChange: (event) => updateValues({ userId: event.target.value }), required: true, disabled: disabled, fullWidth: true }) }));
|
|
1862
|
+
};
|
|
1863
|
+
const DEFAULT_SUPPLIERS = {
|
|
1864
|
+
Air: [
|
|
1865
|
+
{ label: 'American Airlines', value: 'American Airlines' },
|
|
1866
|
+
{ label: 'Delta Air Lines', value: 'Delta Air Lines' },
|
|
1867
|
+
{ label: 'United Airlines', value: 'United Airlines' },
|
|
1868
|
+
],
|
|
1869
|
+
Car: [
|
|
1870
|
+
{ label: 'Enterprise', value: 'Enterprise' },
|
|
1871
|
+
{ label: 'Hertz', value: 'Hertz' },
|
|
1872
|
+
{ label: 'National', value: 'National' },
|
|
1873
|
+
],
|
|
1874
|
+
Hotel: [
|
|
1875
|
+
{ label: 'Hilton', value: 'Hilton' },
|
|
1876
|
+
{ label: 'Hyatt', value: 'Hyatt' },
|
|
1877
|
+
{ label: 'Marriott', value: 'Marriott' },
|
|
1878
|
+
],
|
|
1879
|
+
};
|
|
1880
|
+
const TeamProgramForm = ({ values, initialValues, onChange, onSubmit, onCancel, showActions = true, disabled = false, className, supplierOptions, }) => {
|
|
1881
|
+
const [formValues, updateValues] = useManagedValues(values, { type: 'Air', supplier: '', accountNumber: '', ...initialValues }, onChange);
|
|
1882
|
+
const options = { ...DEFAULT_SUPPLIERS, ...supplierOptions };
|
|
1883
|
+
return (jsx(FormShell, { ariaLabel: "Add loyalty program", className: className, disabled: disabled, onCancel: onCancel, onSubmit: onSubmit, showActions: showActions, values: formValues, children: jsxs("div", { className: styles$f.stack, children: [jsx(Select, { label: "Type", options: ['Air', 'Car', 'Hotel'].map((type) => ({ label: type, value: type })), value: formValues.type, onChange: (event) => updateValues({ type: event.target.value, supplier: '' }), disabled: disabled, fullWidth: true }), jsx(Select, { label: "Company *", placeholder: "Select a company", options: options[formValues.type] ?? [], value: formValues.supplier, onChange: (event) => updateValues({ supplier: event.target.value }), required: true, disabled: disabled, fullWidth: true }), jsx(Input, { label: "Program Number *", value: formValues.accountNumber, onChange: (event) => updateValues({ accountNumber: event.target.value }), required: true, disabled: disabled, fullWidth: true })] }) }));
|
|
1884
|
+
};
|
|
1885
|
+
const EMPTY_ROSTER_MEMBER = {
|
|
1886
|
+
portalUserId: '',
|
|
1887
|
+
firstName: '',
|
|
1888
|
+
middleName: '',
|
|
1889
|
+
noMiddleName: false,
|
|
1890
|
+
lastName: '',
|
|
1891
|
+
travelerType: '',
|
|
1892
|
+
birthDate: '',
|
|
1893
|
+
gender: '',
|
|
1894
|
+
weight: '',
|
|
1895
|
+
passportNumber: '',
|
|
1896
|
+
knownTravelerNumber: '',
|
|
1897
|
+
dhsRedressNumber: '',
|
|
1898
|
+
airline: '',
|
|
1899
|
+
frequentFlyerNumber: '',
|
|
1900
|
+
specialRequests: '',
|
|
1901
|
+
};
|
|
1902
|
+
const DEFAULT_TRAVELER_TYPES = [
|
|
1903
|
+
'Band Member',
|
|
1904
|
+
'Cheerleader',
|
|
1905
|
+
'Coach',
|
|
1906
|
+
'Mascot',
|
|
1907
|
+
'Non-Athlete (General)',
|
|
1908
|
+
'Student Athlete',
|
|
1909
|
+
'Trainer/Manager',
|
|
1910
|
+
].map((label) => ({ label, value: label }));
|
|
1911
|
+
const DEFAULT_AIRLINES = [
|
|
1912
|
+
{ label: 'American Airlines', value: 'American Airlines' },
|
|
1913
|
+
{ label: 'Delta Air Lines', value: 'Delta Air Lines' },
|
|
1914
|
+
{ label: 'Southwest Airlines', value: 'Southwest Airlines' },
|
|
1915
|
+
{ label: 'United Airlines', value: 'United Airlines' },
|
|
1916
|
+
];
|
|
1917
|
+
const localDateString = (date) => {
|
|
1918
|
+
const year = date.getFullYear();
|
|
1919
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
1920
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
1921
|
+
return `${year}-${month}-${day}`;
|
|
1922
|
+
};
|
|
1923
|
+
const SectionBadge = ({ complete, optional, label }) => {
|
|
1924
|
+
if (optional)
|
|
1925
|
+
return jsx("span", { className: `${styles$f.badge} ${styles$f.optionalBadge}`, children: "Optional" });
|
|
1926
|
+
if (complete)
|
|
1927
|
+
return jsxs("span", { className: `${styles$f.badge} ${styles$f.completeBadge}`, children: [jsx(CheckIcon$2, { size: 12 }), "Complete"] });
|
|
1928
|
+
return jsxs("span", { className: `${styles$f.badge} ${styles$f.incompleteBadge}`, children: [jsx(WarningIcon$1, { size: 12 }), label ?? 'Incomplete'] });
|
|
1929
|
+
};
|
|
1930
|
+
const SectionCard = ({ icon, title, subtitle, badge, blue = false, children, }) => (jsxs("section", { className: `${styles$f.sectionCard} ${blue ? styles$f.blueSection : ''}`, children: [jsxs("div", { className: styles$f.sectionHeader, children: [jsx("div", { className: styles$f.sectionIcon, children: icon }), jsxs("div", { className: styles$f.sectionHeading, children: [jsx("h3", { children: title }), jsx("p", { children: subtitle })] }), badge] }), children] }));
|
|
1931
|
+
const TeamRosterMemberForm = ({ mode = 'Add', values, initialValues, onChange, onSubmit, onCancel, showActions = true, disabled = false, className, portalUsers = [], airlineOptions = DEFAULT_AIRLINES, travelerTypeOptions = DEFAULT_TRAVELER_TYPES, }) => {
|
|
1932
|
+
const [formValues, updateValues] = useManagedValues(values, { ...EMPTY_ROSTER_MEMBER, ...initialValues }, onChange);
|
|
1933
|
+
const minBirthDate = new Date();
|
|
1934
|
+
minBirthDate.setFullYear(minBirthDate.getFullYear() - 130);
|
|
1935
|
+
const identityComplete = Boolean(formValues.firstName.trim()
|
|
1936
|
+
&& formValues.lastName.trim()
|
|
1937
|
+
&& (formValues.noMiddleName || formValues.middleName.trim())
|
|
1938
|
+
&& formValues.travelerType);
|
|
1939
|
+
const secureFlightComplete = Boolean(formValues.birthDate && formValues.gender && Number(formValues.weight) >= 1);
|
|
1940
|
+
return (jsxs(FormShell, { ariaLabel: `${mode} team member`, className: className, disabled: disabled, onCancel: onCancel, onSubmit: onSubmit, showActions: showActions, values: formValues, children: [mode === 'Add' && (jsx(SectionCard, { icon: jsx(UsersIcon$1, { size: 20 }), title: "Create from Portal User", subtitle: "Search an existing portal user to copy their traveler details", badge: jsx(SectionBadge, { optional: true }), blue: true, children: jsx(Select, { "aria-label": "Create from Portal User", placeholder: "Search portal users", options: portalUsers, value: formValues.portalUserId, onChange: (event) => {
|
|
1941
|
+
const portalUserId = event.target.value;
|
|
1942
|
+
const selectedUser = portalUsers.find((option) => String(option.value) === portalUserId);
|
|
1943
|
+
updateValues({ ...selectedUser?.traveler, portalUserId });
|
|
1944
|
+
}, disabled: disabled, fullWidth: true }) })), jsxs(SectionCard, { icon: jsx(UserIcon, { size: 20 }), title: "Identity", subtitle: "Name as it appears on government ID", badge: jsx(SectionBadge, { complete: identityComplete }), children: [jsxs("div", { className: styles$f.threeColumnGrid, children: [jsx(Input, { label: "First Name *", value: formValues.firstName, onChange: (event) => updateValues({ firstName: event.target.value }), required: true, disabled: disabled, fullWidth: true }), jsxs("div", { className: styles$f.middleNameField, children: [jsxs("div", { className: styles$f.fieldHeader, children: [jsx("label", { htmlFor: "team-middle-name", children: "Middle Name" }), jsx(Checkbox, { label: "None", size: "sm", checked: formValues.noMiddleName, onChange: (event) => updateValues({
|
|
1945
|
+
noMiddleName: event.target.checked,
|
|
1946
|
+
middleName: event.target.checked ? '' : formValues.middleName,
|
|
1947
|
+
}), disabled: disabled })] }), jsx(Input, { id: "team-middle-name", "aria-label": "Middle Name", placeholder: formValues.noMiddleName ? 'None' : '', value: formValues.middleName, onChange: (event) => updateValues({ middleName: event.target.value }), required: !formValues.noMiddleName, disabled: disabled || formValues.noMiddleName, fullWidth: true })] }), jsx(Input, { label: "Last Name *", value: formValues.lastName, onChange: (event) => updateValues({ lastName: event.target.value }), required: true, disabled: disabled, fullWidth: true })] }), jsx(Select, { label: "Traveler Type *", placeholder: "Select traveler type", options: travelerTypeOptions, value: formValues.travelerType, onChange: (event) => updateValues({ travelerType: event.target.value }), required: true, disabled: disabled, fullWidth: true })] }), jsx(SectionCard, { icon: jsx(LockIcon$1, { size: 20 }), title: "Secure Flight", subtitle: "TSA-required for every air booking", badge: jsx(SectionBadge, { complete: secureFlightComplete, label: !formValues.weight || Number(formValues.weight) < 1 ? 'Add weight' : undefined }), children: jsxs("div", { className: styles$f.threeColumnGrid, children: [jsx(Input, { label: "Date of Birth *", type: "date", min: localDateString(minBirthDate), max: localDateString(new Date()), value: formValues.birthDate, onChange: (event) => updateValues({ birthDate: event.target.value }), required: true, disabled: disabled, fullWidth: true }), jsx(Select, { label: "Gender *", placeholder: "Select gender", options: ['Male', 'Female', 'Unspecified (X)'].map((label) => ({ label, value: label })), value: formValues.gender, onChange: (event) => updateValues({ gender: event.target.value }), required: true, disabled: disabled, fullWidth: true }), jsx(Input, { label: "Weight (lbs) *", type: "number", min: "1", value: formValues.weight, onChange: (event) => updateValues({ weight: numericValue$1(event.target.value) }), required: true, disabled: disabled, fullWidth: true }), jsx(Input, { label: "Passport No.", placeholder: "Add for intl. travel", value: formValues.passportNumber, onChange: (event) => updateValues({ passportNumber: event.target.value.toUpperCase() }), disabled: disabled, fullWidth: true }), jsx(Input, { label: "Known Traveler No.", placeholder: "KTN", value: formValues.knownTravelerNumber, onChange: (event) => updateValues({ knownTravelerNumber: event.target.value.toUpperCase() }), disabled: disabled, fullWidth: true }), jsx(Input, { label: "DHS Redress No.", placeholder: "Add if issued", value: formValues.dhsRedressNumber, onChange: (event) => updateValues({ dhsRedressNumber: event.target.value.toUpperCase() }), disabled: disabled, fullWidth: true })] }) }), mode === 'Add' && (jsx(SectionCard, { icon: jsx(PlaneIcon$4, { size: 20 }), title: "Frequent Flyer", subtitle: "Airline loyalty program details", badge: jsx(SectionBadge, { optional: true }), children: jsxs("div", { className: styles$f.twoColumnGrid, children: [jsx(Select, { label: "Airline", placeholder: "Select airline", options: airlineOptions, value: formValues.airline, onChange: (event) => updateValues({ airline: event.target.value }), disabled: disabled, fullWidth: true }), jsx(Input, { label: "Frequent Flyer Number", value: formValues.frequentFlyerNumber, onChange: (event) => updateValues({ frequentFlyerNumber: event.target.value }), disabled: disabled, fullWidth: true })] }) })), jsx(SectionCard, { icon: jsx(InfoIcon$1, { size: 20 }), title: "Special Requests", subtitle: "Dietary, seating, accessibility, rooming", badge: jsx(SectionBadge, { optional: true }), children: jsx(Textarea, { "aria-label": "Special Requests", placeholder: "Add anything the travel desk should know\u2026", value: formValues.specialRequests, onChange: (event) => updateValues({ specialRequests: event.target.value }), rows: 3, disabled: disabled, fullWidth: true }) })] }));
|
|
1948
|
+
};
|
|
1949
|
+
const IMPORT_COPY = {
|
|
1950
|
+
equipment: {
|
|
1951
|
+
sample: 'Sports Equipment Sample.xlsx',
|
|
1952
|
+
instructions: [
|
|
1953
|
+
'All fields must be in the exact format and order of the sample spreadsheet.',
|
|
1954
|
+
'Weight is in pounds and dimensions are in inches, whole numbers only.',
|
|
1955
|
+
'Delete equipment that is not traveling before uploading a new sheet.',
|
|
1956
|
+
'The spreadsheet adds equipment; it does not overwrite existing data.',
|
|
1957
|
+
],
|
|
1958
|
+
},
|
|
1959
|
+
roster: {
|
|
1960
|
+
sample: 'Sports Manifest Sample.xlsx',
|
|
1961
|
+
instructions: [
|
|
1962
|
+
'All fields must match the exact format and order of the sample spreadsheet.',
|
|
1963
|
+
'Traveler Type must be valid and spelled correctly.',
|
|
1964
|
+
'Date of Birth must be MM/DD/YYYY and Gender must be Male or Female.',
|
|
1965
|
+
'The spreadsheet adds travelers; it does not overwrite existing data.',
|
|
1966
|
+
],
|
|
1967
|
+
},
|
|
1968
|
+
'teamworks-roster': {
|
|
1969
|
+
sample: 'Teamworks Spreadsheet Sample.xlsx',
|
|
1970
|
+
instructions: [
|
|
1971
|
+
'Follow the exact format and order of the Teamworks sample spreadsheet.',
|
|
1972
|
+
'Date of Birth must be MM/DD/YYYY.',
|
|
1973
|
+
],
|
|
1974
|
+
},
|
|
1975
|
+
};
|
|
1976
|
+
const TeamImportForm = ({ kind, onSubmit, onCancel, disabled = false, className = '' }) => {
|
|
1977
|
+
const [file, setFile] = useState(null);
|
|
1978
|
+
const copy = IMPORT_COPY[kind];
|
|
1979
|
+
return (jsxs("form", { "aria-label": `Import ${kind}`, className: `${styles$f.form} ${className}`, onSubmit: (event) => {
|
|
1980
|
+
event.preventDefault();
|
|
1981
|
+
if (file)
|
|
1982
|
+
onSubmit?.(file);
|
|
1983
|
+
}, children: [jsx("ol", { className: styles$f.instructions, children: copy.instructions.map((instruction, index) => jsxs("li", { children: [index + 1, ". ", instruction] }, instruction)) }), jsx("a", { className: styles$f.sampleLink, href: `/${copy.sample}`, download: true, children: copy.sample }), jsxs("label", { className: styles$f.fileField, children: [jsx(UploadIcon, { size: 24 }), jsx("span", { children: file?.name ?? 'Choose an Excel spreadsheet' }), jsx("input", { "aria-label": "Spreadsheet file", type: "file", accept: ".xlsx,.xls", onChange: (event) => setFile(event.target.files?.[0] ?? null), required: true, disabled: disabled })] }), jsxs("div", { className: styles$f.actions, children: [jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsx(Button, { type: "submit", disabled: disabled || !file, children: "Import" })] })] }));
|
|
1984
|
+
};
|
|
1985
|
+
|
|
1822
1986
|
var styles$e = {"grid":"TravelSummaryMetrics-module_grid__RqAU9"};
|
|
1823
1987
|
|
|
1824
1988
|
const numericValue = (value) => {
|
|
@@ -2334,30 +2498,23 @@ const NotFoundPage = ({ errorCode = '404', title = 'Page Not Found', message = '
|
|
|
2334
2498
|
};
|
|
2335
2499
|
NotFoundPage.displayName = 'NotFoundPage';
|
|
2336
2500
|
|
|
2337
|
-
var styles$3 = {"page":"TeamManagementPage-module_page__iRm2r","overview":"TeamManagementPage-module_overview__HDnLX","overviewHeader":"TeamManagementPage-module_overviewHeader__OYpB8","overviewGrid":"TeamManagementPage-module_overviewGrid__u8VZy","contactsColumn":"TeamManagementPage-module_contactsColumn__g-gm8","
|
|
2501
|
+
var styles$3 = {"page":"TeamManagementPage-module_page__iRm2r","overview":"TeamManagementPage-module_overview__HDnLX","overviewHeader":"TeamManagementPage-module_overviewHeader__OYpB8","overviewGrid":"TeamManagementPage-module_overviewGrid__u8VZy","contactsColumn":"TeamManagementPage-module_contactsColumn__g-gm8","body":"TeamManagementPage-module_body__10aka","main":"TeamManagementPage-module_main__-lFtT","sidebar":"TeamManagementPage-module_sidebar__u8syG","footer":"TeamManagementPage-module_footer__he9G0"};
|
|
2338
2502
|
|
|
2339
|
-
const RosterIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" }), jsx("circle", { cx: "9", cy: "7", r: "4" }), jsx("path", { d: "M23 21v-2a4 4 0 0 0-3-3.87" }), jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })] }));
|
|
2340
|
-
const ContactsIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("path", { d: "M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" }), jsx("polyline", { points: "22,6 12,13 2,6" })] }));
|
|
2341
|
-
const PreferencesIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "12", cy: "12", r: "3" }), jsx("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z" })] }));
|
|
2342
|
-
const ProgramsIcon = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("rect", { x: "3", y: "4", width: "18", height: "4", rx: "1" }), jsx("rect", { x: "3", y: "10", width: "18", height: "4", rx: "1" }), jsx("rect", { x: "3", y: "16", width: "18", height: "4", rx: "1" })] }));
|
|
2343
2503
|
const DEFAULT_TABS = [
|
|
2344
|
-
{ id: '
|
|
2345
|
-
{ id: '
|
|
2346
|
-
{ id: '
|
|
2347
|
-
{ id: '
|
|
2504
|
+
{ id: 'profile', label: 'Profile' },
|
|
2505
|
+
{ id: 'roster', label: 'Roster' },
|
|
2506
|
+
{ id: 'equipment', label: 'Equipment' },
|
|
2507
|
+
{ id: 'user-access', label: 'User Access' },
|
|
2348
2508
|
];
|
|
2349
2509
|
/**
|
|
2350
2510
|
* TeamManagementPage - Layout for team management with tabbed navigation
|
|
2351
2511
|
*/
|
|
2352
|
-
const TeamManagementPage = ({ variant = 'team', title = 'Team Management', teamPanel, contactsTitle = 'School Contacts', contactAlert, contacts, header, tabs = DEFAULT_TABS, activeTab = '
|
|
2512
|
+
const TeamManagementPage = ({ variant = 'team', title = 'Team Management', teamPanel, contactsTitle = 'School Contacts', contactAlert, contacts, header, tabs = DEFAULT_TABS, activeTab = 'profile', onTabChange, children, sidebar, footer, className = '', }) => {
|
|
2353
2513
|
const pageClasses = [styles$3.page, className].filter(Boolean).join(' ');
|
|
2354
2514
|
if (variant === 'overview') {
|
|
2355
2515
|
return (jsxs("div", { className: [styles$3.overview, className].filter(Boolean).join(' '), children: [jsx("header", { className: styles$3.overviewHeader, children: jsx("h1", { children: title }) }), jsxs("div", { className: styles$3.overviewGrid, children: [jsx("aside", { children: teamPanel }), jsxs("section", { className: styles$3.contactsColumn, children: [jsx("h2", { children: contactsTitle }), contactAlert, contacts] })] })] }));
|
|
2356
2516
|
}
|
|
2357
|
-
return (jsxs("div", { className: pageClasses, children: [header
|
|
2358
|
-
styles$3.tabButton,
|
|
2359
|
-
activeTab === tab.id ? styles$3.active : '',
|
|
2360
|
-
].filter(Boolean).join(' '), onClick: () => onTabChange?.(tab.id), "aria-selected": activeTab === tab.id, children: [tab.icon && jsx("span", { className: styles$3.tabIcon, children: tab.icon }), jsx("span", { children: tab.label }), tab.badge !== undefined && tab.badge > 0 && (jsx("span", { className: styles$3.tabBadge, children: tab.badge }))] }, tab.id))) }), jsxs("div", { className: styles$3.body, children: [jsx("main", { className: styles$3.main, children: children }), sidebar && (jsx("aside", { className: styles$3.sidebar, children: sidebar }))] }), footer && jsx("div", { className: styles$3.footer, children: footer })] }));
|
|
2517
|
+
return (jsxs("div", { className: pageClasses, children: [header, jsx(TeamSubMenu, { tabs: tabs, activeTab: activeTab, onTabChange: onTabChange }), sidebar ? jsxs("div", { className: styles$3.body, children: [jsx("main", { className: styles$3.main, children: children }), sidebar && (jsx("aside", { className: styles$3.sidebar, children: sidebar }))] }) : children, footer && jsx("div", { className: styles$3.footer, children: footer })] }));
|
|
2361
2518
|
};
|
|
2362
2519
|
TeamManagementPage.displayName = 'TeamManagementPage';
|
|
2363
2520
|
|
|
@@ -2442,5 +2599,5 @@ const TripDetailPage = ({ header, airSegment, groundSegment, hotelSegment, files
|
|
|
2442
2599
|
};
|
|
2443
2600
|
TripDetailPage.displayName = 'TripDetailPage';
|
|
2444
2601
|
|
|
2445
|
-
export { Accordion, AdministrationPage, AirSegment, Alert, AppLayout, ArrowDownLeftIcon, ArrowUpRightIcon, Avatar, AvatarGroup, Badge, BuildingIcon, BusIcon$3 as BusIcon, Button, CalendarIcon$1 as CalendarIcon, CalendarTypeSelector, CalendarViewSelector, CarIcon$2 as CarIcon, Card, CardBody, CardFooter, CardHeader, CharterManifestPage, CheckIcon$2 as CheckIcon, Checkbox, ChevronDownIcon$1 as ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon$1 as ChevronRightIcon, ChevronUpIcon, CloseIcon, ConfirmModal, ContactList, ContactUsPage, CubeIcon, DashboardIcon, DashboardPage, Datepicker, DocumentIcon, DownloadIcon, Drawer, DrawerBody, DrawerFooter, DrawerHeader, Dropdown, DueDatesDrawer, EditIcon$2 as EditIcon, EyeIcon, FilterChip, FilterIcon$1 as FilterIcon, FormField, FormRow, FormSection, FormStack, GridIcon, GroundSegment, GroupTravelRequestPage, HUB_ADMIN_ITEM, HUB_INDIVIDUAL_TRAVEL_ITEM, HUB_NAV_ITEMS, HomeIcon, HotelIcon$4 as HotelIcon, HotelSegment, HubAppShell, Icons, IndividualTravelPage, InfoCenterPage, InfoIcon$1 as InfoIcon, Input, LightbulbIcon, LimoIcon, LockIcon$1 as LockIcon, LogoIcon, MailIcon, ManifestCapacityStats, ManifestViewToggle, MegaphoneIcon, MembershipPrograms, MenuIcon, Metric, MinusIcon, Modal, ModalFooter, Module, ModuleDivider, ModuleVerticalDivider, NavItem, NotFoundPage, PageBanners, PhoneIcon, PlaneIcon$4 as PlaneIcon, PlusIcon$2 as PlusIcon, PreferencesPanel, PrinterIcon, Progress, ProgressBar, ProgressCircle, RailIcon, RefreshIcon, ReportIcon, RequestFormFooter, RequestFormHeader, RequestFormLayout, RequestSummary, RosterToolbar, SUPPLIER_TYPE_OPTIONS, SchoolContactForm, SearchField, SearchIcon$1 as SearchIcon, Segment, SegmentedSelector, Select, SelectFilter, ServiceToggle, ServiceToggleList, SettingsIcon, Sidenav, Spinner, StatusBadge, SummarySection, SupplierTypeToggle, Table, Tag, TeamCard, TeamHeader, TeamManagementPage, TeamScheduleActions, TeamScheduleCompactTable, TeamScheduleExpandedTable, TeamSchedulePage, TeamSubMenu, TeamTravelCalendarPage, Textarea, Timepicker, Title, Toggle, Tooltip, Topbar, TrashIcon$2 as TrashIcon, TravelServiceIcon, TravelSummaryMetrics, TravelerForm, TrendDownIcon, TrendUpIcon, TripDetailPage, TripSegment, TripTable, TypeIcon, UserIcon, UsersIcon$1 as UsersIcon, WarningIcon$1 as WarningIcon, XIcon, formatCompactTripCost, formatTeamScheduleTravelDates, isTravelDueDateCompleted };
|
|
2602
|
+
export { Accordion, AdministrationPage, AirSegment, Alert, AppLayout, ArrowDownLeftIcon, ArrowUpRightIcon, Avatar, AvatarGroup, Badge, BuildingIcon, BusIcon$3 as BusIcon, Button, CalendarIcon$1 as CalendarIcon, CalendarTypeSelector, CalendarViewSelector, CarIcon$2 as CarIcon, Card, CardBody, CardFooter, CardHeader, CharterManifestPage, CheckIcon$2 as CheckIcon, Checkbox, ChevronDownIcon$1 as ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon$1 as ChevronRightIcon, ChevronUpIcon, CloseIcon, ConfirmModal, ContactList, ContactUsPage, CubeIcon, DashboardIcon, DashboardPage, Datepicker, DocumentIcon, DownloadIcon, Drawer, DrawerBody, DrawerFooter, DrawerHeader, Dropdown, DueDatesDrawer, EditIcon$2 as EditIcon, EyeIcon, FilterChip, FilterIcon$1 as FilterIcon, FormField, FormRow, FormSection, FormStack, GridIcon, GroundSegment, GroupTravelRequestPage, HUB_ADMIN_ITEM, HUB_INDIVIDUAL_TRAVEL_ITEM, HUB_NAV_ITEMS, HomeIcon, HotelIcon$4 as HotelIcon, HotelSegment, HubAppShell, Icons, IndividualTravelPage, InfoCenterPage, InfoIcon$1 as InfoIcon, Input, LightbulbIcon, LimoIcon, LockIcon$1 as LockIcon, LogoIcon, MailIcon, ManifestCapacityStats, ManifestViewToggle, MegaphoneIcon, MembershipPrograms, MenuIcon, Metric, MinusIcon, Modal, ModalFooter, Module, ModuleDivider, ModuleVerticalDivider, NavItem, NotFoundPage, PageBanners, PhoneIcon, PlaneIcon$4 as PlaneIcon, PlusIcon$2 as PlusIcon, PreferencesPanel, PrinterIcon, Progress, ProgressBar, ProgressCircle, RailIcon, RefreshIcon, ReportIcon, RequestFormFooter, RequestFormHeader, RequestFormLayout, RequestSummary, RosterToolbar, SUPPLIER_TYPE_OPTIONS, SchoolContactForm, SearchField, SearchIcon$1 as SearchIcon, Segment, SegmentedSelector, Select, SelectFilter, ServiceToggle, ServiceToggleList, SettingsIcon, Sidenav, Spinner, StatusBadge, SummarySection, SupplierTypeToggle, Table, Tag, TeamCard, TeamEquipmentForm, TeamHeader, TeamImportForm, TeamManagementPage, TeamProgramForm, TeamRosterMemberForm, TeamScheduleActions, TeamScheduleCompactTable, TeamScheduleExpandedTable, TeamSchedulePage, TeamSubMenu, TeamTravelCalendarPage, TeamUserAccessForm, Textarea, Timepicker, Title, Toggle, Tooltip, Topbar, TrashIcon$2 as TrashIcon, TravelServiceIcon, TravelSummaryMetrics, TravelerForm, TrendDownIcon, TrendUpIcon, TripDetailPage, TripSegment, TripTable, TypeIcon, UploadIcon, UserIcon, UsersIcon$1 as UsersIcon, WarningIcon$1 as WarningIcon, XIcon, formatCompactTripCost, formatTeamScheduleTravelDates, isTravelDueDateCompleted };
|
|
2446
2603
|
//# sourceMappingURL=index.esm.js.map
|