@shortstravelmgmt/component-lib 0.2.11 → 0.2.12-rc.1
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 +121 -3
- package/dist/index.esm.js +299 -228
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +301 -227
- 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.js
CHANGED
|
@@ -800,7 +800,7 @@ const Icons = {
|
|
|
800
800
|
Trash: TrashIcon$2,
|
|
801
801
|
};
|
|
802
802
|
|
|
803
|
-
var styles$
|
|
803
|
+
var styles$1J = {"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"};
|
|
804
804
|
|
|
805
805
|
const variantIcons$1 = {
|
|
806
806
|
primary: LightbulbIcon,
|
|
@@ -810,7 +810,7 @@ const variantIcons$1 = {
|
|
|
810
810
|
};
|
|
811
811
|
const Alert = ({ variant = 'primary', title, children, dismissible = false, onDismiss, className = '', }) => {
|
|
812
812
|
const IconComponent = variantIcons$1[variant];
|
|
813
|
-
return (jsxRuntime.jsx("div", { className: `${styles$
|
|
813
|
+
return (jsxRuntime.jsx("div", { className: `${styles$1J.alert} ${styles$1J[variant]} ${className}`, role: "alert", children: jsxRuntime.jsxs("div", { className: styles$1J.content, children: [jsxRuntime.jsx(IconComponent, { className: styles$1J.icon, size: 20 }), jsxRuntime.jsxs("div", { className: styles$1J.body, children: [title && jsxRuntime.jsx("h4", { className: styles$1J.title, children: title }), jsxRuntime.jsx("div", { className: styles$1J.message, children: children })] }), dismissible && onDismiss && (jsxRuntime.jsx("button", { type: "button", onClick: onDismiss, className: styles$1J.dismissButton, "aria-label": "Dismiss alert", children: jsxRuntime.jsx(CloseIcon, { size: 16 }) }))] }) }));
|
|
814
814
|
};
|
|
815
815
|
|
|
816
816
|
// ============================================================================
|
|
@@ -1076,7 +1076,7 @@ const Badge = ({ variant = 'default', size = 'md', dot = false, className = '',
|
|
|
1076
1076
|
};
|
|
1077
1077
|
Badge.displayName = 'Badge';
|
|
1078
1078
|
|
|
1079
|
-
var styles$
|
|
1079
|
+
var styles$1I = {"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"};
|
|
1080
1080
|
|
|
1081
1081
|
/**
|
|
1082
1082
|
* Primary button component for user interactions.
|
|
@@ -1084,17 +1084,17 @@ var styles$1H = {"button":"Button-module_button__xDdzH","sm":"Button-module_sm__
|
|
|
1084
1084
|
*/
|
|
1085
1085
|
const Button = React.forwardRef(({ variant = 'primary', size = 'md', fullWidth = false, loading = false, leftIcon, rightIcon, square = false, className = '', disabled, children, ...props }, ref) => {
|
|
1086
1086
|
const classNames = [
|
|
1087
|
-
styles$
|
|
1088
|
-
styles$
|
|
1089
|
-
styles$
|
|
1090
|
-
fullWidth ? styles$
|
|
1091
|
-
square ? styles$
|
|
1092
|
-
loading ? styles$
|
|
1087
|
+
styles$1I.button,
|
|
1088
|
+
styles$1I[variant],
|
|
1089
|
+
styles$1I[size],
|
|
1090
|
+
fullWidth ? styles$1I.fullWidth : '',
|
|
1091
|
+
square ? styles$1I.square : '',
|
|
1092
|
+
loading ? styles$1I.loading : '',
|
|
1093
1093
|
className,
|
|
1094
1094
|
]
|
|
1095
1095
|
.filter(Boolean)
|
|
1096
1096
|
.join(' ');
|
|
1097
|
-
return (jsxRuntime.jsxs("button", { ref: ref, className: classNames, disabled: disabled || loading, ...props, children: [loading && (jsxRuntime.jsx("span", { className: styles$
|
|
1097
|
+
return (jsxRuntime.jsxs("button", { ref: ref, className: classNames, disabled: disabled || loading, ...props, children: [loading && (jsxRuntime.jsx("span", { className: styles$1I.spinner, children: jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", strokeOpacity: "0.25" }), jsxRuntime.jsx("path", { d: "M12 2a10 10 0 0 1 10 10", strokeLinecap: "round" })] }) })), !loading && leftIcon && jsxRuntime.jsx("span", { className: styles$1I.icon, children: leftIcon }), children && jsxRuntime.jsx("span", { className: styles$1I.content, children: children }), !loading && rightIcon && jsxRuntime.jsx("span", { className: styles$1I.icon, children: rightIcon })] }));
|
|
1098
1098
|
});
|
|
1099
1099
|
Button.displayName = 'Button';
|
|
1100
1100
|
|
|
@@ -1431,23 +1431,23 @@ const ButtonStyled = React.forwardRef(({ variant = 'primary', size = 'md', fullW
|
|
|
1431
1431
|
});
|
|
1432
1432
|
ButtonStyled.displayName = 'ButtonStyled';
|
|
1433
1433
|
|
|
1434
|
-
var styles$
|
|
1434
|
+
var styles$1H = {"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"};
|
|
1435
1435
|
|
|
1436
1436
|
const CheckIcon$1 = () => (jsxRuntime.jsx("svg", { width: "10", height: "8", viewBox: "0 0 10 8", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsxRuntime.jsx("path", { d: "M1 4L3.5 6.5L9 1", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
|
|
1437
1437
|
const IndeterminateIcon = () => (jsxRuntime.jsx("svg", { width: "10", height: "2", viewBox: "0 0 10 2", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsxRuntime.jsx("path", { d: "M1 1H9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) }));
|
|
1438
1438
|
/**
|
|
1439
1439
|
* Checkbox component for boolean selections.
|
|
1440
1440
|
*/
|
|
1441
|
-
const Checkbox = React.forwardRef(({ label, size = 'md', helperText, error, indeterminate = false, className = '', disabled, id, checked, ...props }, ref) => {
|
|
1441
|
+
const Checkbox = React.forwardRef(({ label, size = 'md', helperText, error, indeterminate = false, className = '', disabled, id, checked, type = 'checkbox', indicator, ...props }, ref) => {
|
|
1442
1442
|
const generatedId = React.useId();
|
|
1443
1443
|
const checkboxId = id || generatedId;
|
|
1444
1444
|
const helperId = `${checkboxId}-helper`;
|
|
1445
1445
|
const errorId = `${checkboxId}-error`;
|
|
1446
1446
|
const wrapperClasses = [
|
|
1447
|
-
styles$
|
|
1448
|
-
styles$
|
|
1449
|
-
disabled ? styles$
|
|
1450
|
-
error ? styles$
|
|
1447
|
+
styles$1H.wrapper,
|
|
1448
|
+
styles$1H[size],
|
|
1449
|
+
disabled ? styles$1H.disabled : '',
|
|
1450
|
+
error ? styles$1H.hasError : '',
|
|
1451
1451
|
className,
|
|
1452
1452
|
].filter(Boolean).join(' ');
|
|
1453
1453
|
// Handle indeterminate state via ref
|
|
@@ -1463,13 +1463,17 @@ const Checkbox = React.forwardRef(({ label, size = 'md', helperText, error, inde
|
|
|
1463
1463
|
ref.current = node;
|
|
1464
1464
|
}
|
|
1465
1465
|
};
|
|
1466
|
-
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [jsxRuntime.jsxs("label", { className: styles$
|
|
1466
|
+
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [jsxRuntime.jsxs("label", { className: styles$1H.label, children: [jsxRuntime.jsxs("div", { className: styles$1H.checkboxWrapper, children: [jsxRuntime.jsx("input", { ref: inputRef, type: type, id: checkboxId, className: styles$1H.input, disabled: disabled, checked: checked, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
|
|
1467
1467
|
.filter(Boolean)
|
|
1468
|
-
.join(' ') || undefined, ...props }), jsxRuntime.jsx("span", { className:
|
|
1468
|
+
.join(' ') || undefined, ...props }), jsxRuntime.jsx("span", { className: indicator ? undefined : styles$1H.checkbox, children: indicator
|
|
1469
|
+
? indicator({ checked: !!checked, indeterminate, disabled: !!disabled })
|
|
1470
|
+
: indeterminate
|
|
1471
|
+
? jsxRuntime.jsx(IndeterminateIcon, {})
|
|
1472
|
+
: jsxRuntime.jsx(CheckIcon$1, {}) })] }), label && jsxRuntime.jsx("span", { className: styles$1H.labelText, children: label })] }), error && (jsxRuntime.jsx("span", { id: errorId, className: styles$1H.errorText, children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: helperId, className: styles$1H.helperText, children: helperText }))] }));
|
|
1469
1473
|
});
|
|
1470
1474
|
Checkbox.displayName = 'Checkbox';
|
|
1471
1475
|
|
|
1472
|
-
var styles$
|
|
1476
|
+
var styles$1G = {"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"};
|
|
1473
1477
|
|
|
1474
1478
|
const CalendarIcon = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), jsxRuntime.jsx("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), jsxRuntime.jsx("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), jsxRuntime.jsx("line", { x1: "3", y1: "10", x2: "21", y2: "10" })] }));
|
|
1475
1479
|
/**
|
|
@@ -1481,23 +1485,23 @@ const Datepicker = React.forwardRef(({ size = 'md', label, helperText, error, fu
|
|
|
1481
1485
|
const helperId = `${inputId}-helper`;
|
|
1482
1486
|
const errorId = `${inputId}-error`;
|
|
1483
1487
|
const wrapperClasses = [
|
|
1484
|
-
styles$
|
|
1485
|
-
fullWidth ? styles$
|
|
1488
|
+
styles$1G.wrapper,
|
|
1489
|
+
fullWidth ? styles$1G.fullWidth : '',
|
|
1486
1490
|
className,
|
|
1487
1491
|
].filter(Boolean).join(' ');
|
|
1488
1492
|
const inputWrapperClasses = [
|
|
1489
|
-
styles$
|
|
1490
|
-
styles$
|
|
1491
|
-
error ? styles$
|
|
1492
|
-
disabled ? styles$
|
|
1493
|
+
styles$1G.inputWrapper,
|
|
1494
|
+
styles$1G[size],
|
|
1495
|
+
error ? styles$1G.error : '',
|
|
1496
|
+
disabled ? styles$1G.disabled : '',
|
|
1493
1497
|
].filter(Boolean).join(' ');
|
|
1494
|
-
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: inputId, className: styles$
|
|
1498
|
+
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: inputId, className: styles$1G.label, children: label })), jsxRuntime.jsxs("div", { className: inputWrapperClasses, children: [jsxRuntime.jsx("span", { className: styles$1G.icon, children: jsxRuntime.jsx(CalendarIcon, {}) }), jsxRuntime.jsx("input", { ref: ref, type: "date", id: inputId, className: styles$1G.input, disabled: disabled, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
|
|
1495
1499
|
.filter(Boolean)
|
|
1496
|
-
.join(' ') || undefined, ...props })] }), error && (jsxRuntime.jsx("span", { id: errorId, className: styles$
|
|
1500
|
+
.join(' ') || undefined, ...props })] }), error && (jsxRuntime.jsx("span", { id: errorId, className: styles$1G.errorText, children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: helperId, className: styles$1G.helperText, children: helperText }))] }));
|
|
1497
1501
|
});
|
|
1498
1502
|
Datepicker.displayName = 'Datepicker';
|
|
1499
1503
|
|
|
1500
|
-
var styles$
|
|
1504
|
+
var styles$1F = {"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","xs":"Input-module_xs__p7BuD","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"};
|
|
1501
1505
|
|
|
1502
1506
|
/**
|
|
1503
1507
|
* Input component for text entry.
|
|
@@ -1505,45 +1509,45 @@ var styles$1E = {"wrapper":"Input-module_wrapper__-8ija","fullWidth":"Input-modu
|
|
|
1505
1509
|
const Input = React.forwardRef(({ size = 'md', label, helperText, error, leftIcon, rightIcon, fullWidth = false, className = '', id, disabled, ...props }, ref) => {
|
|
1506
1510
|
const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;
|
|
1507
1511
|
const wrapperClasses = [
|
|
1508
|
-
styles$
|
|
1509
|
-
fullWidth ? styles$
|
|
1512
|
+
styles$1F.wrapper,
|
|
1513
|
+
fullWidth ? styles$1F.fullWidth : '',
|
|
1510
1514
|
className,
|
|
1511
1515
|
]
|
|
1512
1516
|
.filter(Boolean)
|
|
1513
1517
|
.join(' ');
|
|
1514
1518
|
const inputWrapperClasses = [
|
|
1515
|
-
styles$
|
|
1516
|
-
styles$
|
|
1517
|
-
error ? styles$
|
|
1518
|
-
disabled ? styles$
|
|
1519
|
+
styles$1F.inputWrapper,
|
|
1520
|
+
styles$1F[size],
|
|
1521
|
+
error ? styles$1F.error : '',
|
|
1522
|
+
disabled ? styles$1F.disabled : '',
|
|
1519
1523
|
]
|
|
1520
1524
|
.filter(Boolean)
|
|
1521
1525
|
.join(' ');
|
|
1522
|
-
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: inputId, className: styles$
|
|
1526
|
+
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: inputId, className: styles$1F.label, children: label })), jsxRuntime.jsxs("div", { className: inputWrapperClasses, children: [leftIcon && jsxRuntime.jsx("span", { className: styles$1F.icon, children: leftIcon }), jsxRuntime.jsx("input", { ref: ref, id: inputId, className: styles$1F.input, disabled: disabled, "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined, ...props }), rightIcon && jsxRuntime.jsx("span", { className: styles$1F.icon, children: rightIcon })] }), error && (jsxRuntime.jsx("span", { id: `${inputId}-error`, className: styles$1F.errorText, children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: `${inputId}-helper`, className: styles$1F.helperText, children: helperText }))] }));
|
|
1523
1527
|
});
|
|
1524
1528
|
Input.displayName = 'Input';
|
|
1525
1529
|
const Textarea = React.forwardRef(({ size = 'md', label, helperText, error, fullWidth = false, className = '', id, disabled, rows = 4, ...props }, ref) => {
|
|
1526
1530
|
const textareaId = id || `textarea-${Math.random().toString(36).substr(2, 9)}`;
|
|
1527
1531
|
const wrapperClasses = [
|
|
1528
|
-
styles$
|
|
1529
|
-
fullWidth ? styles$
|
|
1532
|
+
styles$1F.wrapper,
|
|
1533
|
+
fullWidth ? styles$1F.fullWidth : '',
|
|
1530
1534
|
className,
|
|
1531
1535
|
]
|
|
1532
1536
|
.filter(Boolean)
|
|
1533
1537
|
.join(' ');
|
|
1534
1538
|
const textareaClasses = [
|
|
1535
|
-
styles$
|
|
1536
|
-
styles$
|
|
1537
|
-
error ? styles$
|
|
1538
|
-
disabled ? styles$
|
|
1539
|
+
styles$1F.textarea,
|
|
1540
|
+
styles$1F[size],
|
|
1541
|
+
error ? styles$1F.error : '',
|
|
1542
|
+
disabled ? styles$1F.disabled : '',
|
|
1539
1543
|
]
|
|
1540
1544
|
.filter(Boolean)
|
|
1541
1545
|
.join(' ');
|
|
1542
|
-
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: textareaId, className: styles$
|
|
1546
|
+
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: textareaId, className: styles$1F.label, children: label })), jsxRuntime.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 && (jsxRuntime.jsx("span", { id: `${textareaId}-error`, className: styles$1F.errorText, children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: `${textareaId}-helper`, className: styles$1F.helperText, children: helperText }))] }));
|
|
1543
1547
|
});
|
|
1544
1548
|
Textarea.displayName = 'Textarea';
|
|
1545
1549
|
|
|
1546
|
-
var styles$
|
|
1550
|
+
var styles$1E = {"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"};
|
|
1547
1551
|
|
|
1548
1552
|
const WarningIcon = () => (jsxRuntime.jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: jsxRuntime.jsx("path", { d: "M12 2L1 21h22L12 2zm0 3.5L19.5 19H4.5L12 5.5zM11 10v4h2v-4h-2zm0 6v2h2v-2h-2z" }) }));
|
|
1549
1553
|
/**
|
|
@@ -1553,15 +1557,15 @@ const WarningIcon = () => (jsxRuntime.jsx("svg", { width: "24", height: "24", vi
|
|
|
1553
1557
|
const Metric = ({ value, label, prefix, suffix, dark = false, onClick, className = '', warning = false, }) => {
|
|
1554
1558
|
const displayValue = value !== undefined && !isNaN(parseFloat(String(value))) ? value : 0;
|
|
1555
1559
|
return (jsxRuntime.jsx("div", { className: `
|
|
1556
|
-
${styles$
|
|
1557
|
-
${dark ? styles$
|
|
1558
|
-
${onClick ? styles$
|
|
1560
|
+
${styles$1E.metric}
|
|
1561
|
+
${dark ? styles$1E.dark : ''}
|
|
1562
|
+
${onClick ? styles$1E.clickable : ''}
|
|
1559
1563
|
${className}
|
|
1560
|
-
`, onClick: onClick, children: value !== undefined && (jsxRuntime.jsxs("div", { className: styles$
|
|
1564
|
+
`, onClick: onClick, children: value !== undefined && (jsxRuntime.jsxs("div", { className: styles$1E.content, children: [jsxRuntime.jsxs("div", { className: styles$1E.valueRow, children: [jsxRuntime.jsxs("div", { className: styles$1E.valueContainer, children: [prefix && jsxRuntime.jsx("span", { className: styles$1E.prefix, children: prefix }), jsxRuntime.jsx("span", { className: styles$1E.value, children: displayValue }), suffix && jsxRuntime.jsx("span", { className: styles$1E.suffix, children: suffix })] }), warning && (jsxRuntime.jsx("div", { className: styles$1E.warningIcon, children: jsxRuntime.jsx(WarningIcon, {}) }))] }), jsxRuntime.jsx("div", { className: styles$1E.label, children: label })] })) }));
|
|
1561
1565
|
};
|
|
1562
1566
|
Metric.displayName = 'Metric';
|
|
1563
1567
|
|
|
1564
|
-
var styles$
|
|
1568
|
+
var styles$1D = {"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"};
|
|
1565
1569
|
|
|
1566
1570
|
const ChevronDownIcon = () => (jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" }) }));
|
|
1567
1571
|
/**
|
|
@@ -1573,16 +1577,16 @@ const Select = React.forwardRef(({ options, optionGroups, size = 'md', label, pl
|
|
|
1573
1577
|
const helperId = `${selectId}-helper`;
|
|
1574
1578
|
const errorId = `${selectId}-error`;
|
|
1575
1579
|
const wrapperClasses = [
|
|
1576
|
-
styles$
|
|
1577
|
-
fullWidth ? styles$
|
|
1580
|
+
styles$1D.wrapper,
|
|
1581
|
+
fullWidth ? styles$1D.fullWidth : '',
|
|
1578
1582
|
className,
|
|
1579
1583
|
].filter(Boolean).join(' ');
|
|
1580
1584
|
const selectWrapperClasses = [
|
|
1581
|
-
styles$
|
|
1582
|
-
styles$
|
|
1583
|
-
error ? styles$
|
|
1584
|
-
disabled ? styles$
|
|
1585
|
-
leftIcon ? styles$
|
|
1585
|
+
styles$1D.selectWrapper,
|
|
1586
|
+
styles$1D[size],
|
|
1587
|
+
error ? styles$1D.error : '',
|
|
1588
|
+
disabled ? styles$1D.disabled : '',
|
|
1589
|
+
leftIcon ? styles$1D.hasLeftIcon : '',
|
|
1586
1590
|
].filter(Boolean).join(' ');
|
|
1587
1591
|
const renderOptions = () => {
|
|
1588
1592
|
// Render grouped options
|
|
@@ -1595,16 +1599,16 @@ const Select = React.forwardRef(({ options, optionGroups, size = 'md', label, pl
|
|
|
1595
1599
|
}
|
|
1596
1600
|
return null;
|
|
1597
1601
|
};
|
|
1598
|
-
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: selectId, className: styles$
|
|
1602
|
+
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: selectId, className: styles$1D.label, children: label })), jsxRuntime.jsxs("div", { className: selectWrapperClasses, children: [leftIcon && jsxRuntime.jsx("span", { className: styles$1D.leftIcon, children: leftIcon }), jsxRuntime.jsxs("select", { ref: ref, id: selectId, className: styles$1D.select, disabled: disabled, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
|
|
1599
1603
|
.filter(Boolean)
|
|
1600
|
-
.join(' ') || undefined, ...props, children: [placeholder && (jsxRuntime.jsx("option", { value: "", disabled: true, children: placeholder })), renderOptions()] }), jsxRuntime.jsx("span", { className: styles$
|
|
1604
|
+
.join(' ') || undefined, ...props, children: [placeholder && (jsxRuntime.jsx("option", { value: "", disabled: true, children: placeholder })), renderOptions()] }), jsxRuntime.jsx("span", { className: styles$1D.chevron, children: jsxRuntime.jsx(ChevronDownIcon, {}) })] }), error && (jsxRuntime.jsx("span", { id: errorId, className: styles$1D.errorText, children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: helperId, className: styles$1D.helperText, children: helperText }))] }));
|
|
1601
1605
|
});
|
|
1602
1606
|
Select.displayName = 'Select';
|
|
1603
1607
|
|
|
1604
|
-
var styles$
|
|
1608
|
+
var styles$1C = {"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"};
|
|
1605
1609
|
|
|
1606
1610
|
const Spinner = ({ size = 'md', className = '', color, label = 'Loading...', }) => {
|
|
1607
|
-
return (jsxRuntime.jsxs("span", { className: `${styles$
|
|
1611
|
+
return (jsxRuntime.jsxs("span", { className: `${styles$1C.spinner} ${styles$1C[size]} ${className}`, role: "status", "aria-label": label, style: color ? { color } : undefined, children: [jsxRuntime.jsxs("svg", { className: styles$1C.svg, xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [jsxRuntime.jsx("circle", { className: styles$1C.track, cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), jsxRuntime.jsx("path", { className: styles$1C.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" })] }), jsxRuntime.jsx("span", { className: styles$1C.srOnly, children: label })] }));
|
|
1608
1612
|
};
|
|
1609
1613
|
|
|
1610
1614
|
const statusVariantStyles = (theme) => ({
|
|
@@ -1749,7 +1753,7 @@ const Tag = React.forwardRef(({ children, variant = 'default', size = 'md', remo
|
|
|
1749
1753
|
});
|
|
1750
1754
|
Tag.displayName = 'Tag';
|
|
1751
1755
|
|
|
1752
|
-
var styles$
|
|
1756
|
+
var styles$1B = {"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"};
|
|
1753
1757
|
|
|
1754
1758
|
const ClockIcon = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }), jsxRuntime.jsx("polyline", { points: "12 6 12 12 16 14" })] }));
|
|
1755
1759
|
/**
|
|
@@ -1761,30 +1765,30 @@ const Timepicker = React.forwardRef(({ size = 'md', label, helperText, error, fu
|
|
|
1761
1765
|
const helperId = `${inputId}-helper`;
|
|
1762
1766
|
const errorId = `${inputId}-error`;
|
|
1763
1767
|
const wrapperClasses = [
|
|
1764
|
-
styles$
|
|
1765
|
-
fullWidth ? styles$
|
|
1768
|
+
styles$1B.wrapper,
|
|
1769
|
+
fullWidth ? styles$1B.fullWidth : '',
|
|
1766
1770
|
className,
|
|
1767
1771
|
].filter(Boolean).join(' ');
|
|
1768
1772
|
const inputWrapperClasses = [
|
|
1769
|
-
styles$
|
|
1770
|
-
styles$
|
|
1771
|
-
error ? styles$
|
|
1772
|
-
disabled ? styles$
|
|
1773
|
+
styles$1B.inputWrapper,
|
|
1774
|
+
styles$1B[size],
|
|
1775
|
+
error ? styles$1B.error : '',
|
|
1776
|
+
disabled ? styles$1B.disabled : '',
|
|
1773
1777
|
].filter(Boolean).join(' ');
|
|
1774
|
-
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: inputId, className: styles$
|
|
1778
|
+
return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: inputId, className: styles$1B.label, children: label })), jsxRuntime.jsxs("div", { className: inputWrapperClasses, children: [jsxRuntime.jsx("span", { className: styles$1B.icon, children: jsxRuntime.jsx(ClockIcon, {}) }), jsxRuntime.jsx("input", { ref: ref, type: "time", id: inputId, className: styles$1B.input, disabled: disabled, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
|
|
1775
1779
|
.filter(Boolean)
|
|
1776
|
-
.join(' ') || undefined, ...props })] }), error && (jsxRuntime.jsx("span", { id: errorId, className: styles$
|
|
1780
|
+
.join(' ') || undefined, ...props })] }), error && (jsxRuntime.jsx("span", { id: errorId, className: styles$1B.errorText, children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: helperId, className: styles$1B.helperText, children: helperText }))] }));
|
|
1777
1781
|
});
|
|
1778
1782
|
Timepicker.displayName = 'Timepicker';
|
|
1779
1783
|
|
|
1780
|
-
var styles$
|
|
1784
|
+
var styles$1A = {"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"};
|
|
1781
1785
|
|
|
1782
1786
|
/**
|
|
1783
1787
|
* Title component for page headings.
|
|
1784
1788
|
* Large, prominent text for page titles.
|
|
1785
1789
|
*/
|
|
1786
1790
|
const Title = ({ children, weight = 'light', className = '', }) => {
|
|
1787
|
-
return (jsxRuntime.jsx("h1", { className: `${styles$
|
|
1791
|
+
return (jsxRuntime.jsx("h1", { className: `${styles$1A.title} ${styles$1A[weight]} ${className}`, children: children }));
|
|
1788
1792
|
};
|
|
1789
1793
|
Title.displayName = 'Title';
|
|
1790
1794
|
|
|
@@ -1889,7 +1893,7 @@ const Toggle = ({ checked, onChange, disabled = false, size = 'md', label, label
|
|
|
1889
1893
|
return toggleElement;
|
|
1890
1894
|
};
|
|
1891
1895
|
|
|
1892
|
-
var styles$
|
|
1896
|
+
var styles$1z = {"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","semantic":"Tooltip-module_semantic__shhec","primary":"Tooltip-module_primary__no1LJ","secondary":"Tooltip-module_secondary__HEoKK","success":"Tooltip-module_success__EG2f-","warning":"Tooltip-module_warning__1zoqE","error":"Tooltip-module_error__Nn6y6","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"};
|
|
1893
1897
|
|
|
1894
1898
|
const Tooltip = ({ content, children, position = 'top', variant = 'dark', delay = 200, disabled = false, className = '', }) => {
|
|
1895
1899
|
const [isVisible, setIsVisible] = React.useState(false);
|
|
@@ -1967,7 +1971,7 @@ const Tooltip = ({ content, children, position = 'top', variant = 'dark', delay
|
|
|
1967
1971
|
}
|
|
1968
1972
|
};
|
|
1969
1973
|
}, []);
|
|
1970
|
-
return (jsxRuntime.jsxs("div", { ref: triggerRef, className: `${styles$
|
|
1974
|
+
return (jsxRuntime.jsxs("div", { ref: triggerRef, className: `${styles$1z.wrapper} ${className}`, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onFocus: handleFocus, onBlur: handleBlur, onTouchStart: handleTouchStart, onTouchEnd: handleTouchEnd, children: [children, isVisible && content && (jsxRuntime.jsxs("div", { ref: tooltipRef, className: `${styles$1z.tooltip} ${styles$1z[actualPosition]} ${styles$1z[variant]} ${!['dark', 'light'].includes(variant) ? styles$1z.semantic : ''}`, role: "tooltip", children: [jsxRuntime.jsx("div", { className: styles$1z.content, children: content }), jsxRuntime.jsx("div", { className: `${styles$1z.arrow} ${styles$1z[`arrow${actualPosition.charAt(0).toUpperCase()}${actualPosition.slice(1)}`]}` })] }))] }));
|
|
1971
1975
|
};
|
|
1972
1976
|
|
|
1973
1977
|
function getTypeColors$1(theme) {
|
|
@@ -2117,7 +2121,7 @@ const TypeIcon = ({ type, size = 18, showTooltip = true, className = '', style,
|
|
|
2117
2121
|
}, ...props, children: jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", width: size * 0.6, height: size * 0.6, fill: "currentColor", children: typeIcons[type] || typeIcons.U }) }));
|
|
2118
2122
|
};
|
|
2119
2123
|
|
|
2120
|
-
var styles$
|
|
2124
|
+
var styles$1y = {"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"};
|
|
2121
2125
|
|
|
2122
2126
|
const CaretIcon = ({ className }) => (jsxRuntime.jsx("svg", { className: className, width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsxRuntime.jsx("polyline", { points: "9 18 15 12 9 6" }) }));
|
|
2123
2127
|
/**
|
|
@@ -2135,21 +2139,43 @@ const Accordion = ({ header, children, defaultOpen = true, open: controlledOpen,
|
|
|
2135
2139
|
}
|
|
2136
2140
|
onOpenChange?.(newOpen);
|
|
2137
2141
|
};
|
|
2138
|
-
return (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2142
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$1y.accordion} ${className || ''}`, children: [jsxRuntime.jsxs("div", { className: styles$1y.headerContainer, children: [jsxRuntime.jsx("button", { type: "button", className: styles$1y.toggle, onClick: handleToggle, "aria-expanded": isOpen, children: jsxRuntime.jsx(CaretIcon, { className: `${styles$1y.caret} ${isOpen ? styles$1y.open : ''}` }) }), jsxRuntime.jsx("div", { className: styles$1y.header, children: header })] }), jsxRuntime.jsxs("div", { className: `${styles$1y.body} ${isOpen ? styles$1y.visible : styles$1y.hidden}`, "aria-hidden": !isOpen, children: [showTimeline && (jsxRuntime.jsxs("div", { className: styles$1y.timeline, children: [jsxRuntime.jsx("div", { className: styles$1y.line }), jsxRuntime.jsx(CaretIcon, { className: styles$1y.endCaret })] })), jsxRuntime.jsx("div", { className: styles$1y.content, children: children })] })] }));
|
|
2139
2143
|
};
|
|
2140
2144
|
Accordion.displayName = 'Accordion';
|
|
2141
2145
|
|
|
2142
|
-
|
|
2146
|
+
/**
|
|
2147
|
+
* Sized to Hub's header back control (44x52), which is already above the 44px
|
|
2148
|
+
* minimum tap target, so it does not need padding to be reachable on a phone.
|
|
2149
|
+
*/
|
|
2150
|
+
const backLinkStyle = css({
|
|
2151
|
+
display: 'flex',
|
|
2152
|
+
alignItems: 'center',
|
|
2153
|
+
width: '44px',
|
|
2154
|
+
height: '52px',
|
|
2155
|
+
color: 'inherit',
|
|
2156
|
+
});
|
|
2157
|
+
|
|
2158
|
+
/**
|
|
2159
|
+
* The back affordance in a page header: a tap target holding a single arrow.
|
|
2160
|
+
*
|
|
2161
|
+
* It is deliberately not a Button. This navigates, so it should be a link —
|
|
2162
|
+
* middle-clickable, openable in a new tab, and announced as a link rather than
|
|
2163
|
+
* an action.
|
|
2164
|
+
*/
|
|
2165
|
+
const BackLink = ({ icon, as: Component = 'a', label = 'Back', className = '', style, ...props }) => (jsxRuntime.jsx(Component, { className: className, "aria-label": label, style: toInlineStyle(merge(backLinkStyle, style)), ...props, children: icon }));
|
|
2166
|
+
BackLink.displayName = 'BackLink';
|
|
2167
|
+
|
|
2168
|
+
var styles$1x = {"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"};
|
|
2143
2169
|
|
|
2144
2170
|
const ListIcon = () => (jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", "aria-hidden": "true", children: [jsxRuntime.jsx("line", { x1: "8", y1: "6", x2: "21", y2: "6" }), jsxRuntime.jsx("line", { x1: "8", y1: "12", x2: "21", y2: "12" }), jsxRuntime.jsx("line", { x1: "8", y1: "18", x2: "21", y2: "18" }), jsxRuntime.jsx("circle", { cx: "3", cy: "6", r: "1", fill: "currentColor", stroke: "none" }), jsxRuntime.jsx("circle", { cx: "3", cy: "12", r: "1", fill: "currentColor", stroke: "none" }), jsxRuntime.jsx("circle", { cx: "3", cy: "18", r: "1", fill: "currentColor", stroke: "none" })] }));
|
|
2145
|
-
const SegmentedSelector = ({ options, value, onChange, disabled = false, size = 'md', className = '', ariaLabel = 'View options', dataTest, itemClassName = '', activeItemClassName = '', iconPosition = 'left', }) => (jsxRuntime.jsx("div", { className: [styles$
|
|
2171
|
+
const SegmentedSelector = ({ options, value, onChange, disabled = false, size = 'md', className = '', ariaLabel = 'View options', dataTest, itemClassName = '', activeItemClassName = '', iconPosition = 'left', }) => (jsxRuntime.jsx("div", { className: [styles$1x.selector, className].filter(Boolean).join(' '), role: "group", "aria-label": ariaLabel, "data-test": dataTest, children: options.map((option) => {
|
|
2146
2172
|
const active = option.id === value;
|
|
2147
2173
|
const accessibleName = option.alt ?? option.label ?? option.id;
|
|
2148
2174
|
return (jsxRuntime.jsxs("button", { type: "button", title: accessibleName, "aria-label": accessibleName, "aria-pressed": active, disabled: disabled, "data-test": dataTest ? `${dataTest}-option-${option.id}` : undefined, className: [
|
|
2149
|
-
styles$
|
|
2150
|
-
styles$
|
|
2151
|
-
option.label ? styles$
|
|
2152
|
-
active ? styles$
|
|
2175
|
+
styles$1x.item,
|
|
2176
|
+
styles$1x[size],
|
|
2177
|
+
option.label ? styles$1x.withLabel : styles$1x.iconOnly,
|
|
2178
|
+
active ? styles$1x.active : '',
|
|
2153
2179
|
itemClassName,
|
|
2154
2180
|
active ? activeItemClassName : '',
|
|
2155
2181
|
].filter(Boolean).join(' '), onClick: () => onChange?.(option.id), children: [iconPosition === 'left' && option.icon, option.label && jsxRuntime.jsx("span", { children: option.label }), iconPosition === 'right' && option.icon] }, option.id));
|
|
@@ -2164,7 +2190,7 @@ const CalendarTypeSelector = ({ value, onChange, ...props }) => (jsxRuntime.jsx(
|
|
|
2164
2190
|
{ id: 'due_dates', label: 'Due Dates' },
|
|
2165
2191
|
] }));
|
|
2166
2192
|
|
|
2167
|
-
var styles$
|
|
2193
|
+
var styles$1w = {"contact":"ContactCard-module_contact__rwoCO","body":"ContactCard-module_body__zAMJ8","identity":"ContactCard-module_identity__q7L-a","name":"ContactCard-module_name__C8t5-","title":"ContactCard-module_title__UECZm","link":"ContactCard-module_link__VTUHu","linkText":"ContactCard-module_linkText__8atNF"};
|
|
2168
2194
|
|
|
2169
2195
|
/**
|
|
2170
2196
|
* A single person's contact details: avatar, name, title, and tappable phone
|
|
@@ -2176,11 +2202,11 @@ var styles$1v = {"contact":"ContactCard-module_contact__rwoCO","body":"ContactCa
|
|
|
2176
2202
|
const ContactCard$1 = ({ name, title, phone, email, action, showAvatar = true, className = '', }) => {
|
|
2177
2203
|
if (!action && !name)
|
|
2178
2204
|
return null;
|
|
2179
|
-
return (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2205
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$1w.contact} ${className}`, children: [name && showAvatar && jsxRuntime.jsx(Avatar, { name: name, size: 36 }), jsxRuntime.jsxs("div", { className: styles$1w.body, children: [jsxRuntime.jsxs("div", { className: styles$1w.identity, children: [action || jsxRuntime.jsx("span", { className: styles$1w.name, children: name }), title && jsxRuntime.jsx("span", { className: styles$1w.title, children: title })] }), phone && (jsxRuntime.jsxs("a", { href: `tel:${phone}`, className: styles$1w.link, children: [jsxRuntime.jsx(PhoneIcon, { size: 16, "aria-hidden": "true" }), jsxRuntime.jsx("span", { className: styles$1w.linkText, children: phone })] })), email && (jsxRuntime.jsxs("a", { href: `mailto:${email}`, className: styles$1w.link, children: [jsxRuntime.jsx(MailIcon, { size: 16, "aria-hidden": "true" }), jsxRuntime.jsx("span", { className: styles$1w.linkText, children: email })] }))] })] }));
|
|
2180
2206
|
};
|
|
2181
2207
|
ContactCard$1.displayName = 'ContactCard';
|
|
2182
2208
|
|
|
2183
|
-
var styles$
|
|
2209
|
+
var styles$1v = {"list":"DetailList-module_list__orbOL","pair":"DetailList-module_pair__CAbaR","label":"DetailList-module_label__rloof","value":"DetailList-module_value__TMLgu","iconRow":"DetailList-module_iconRow__G9NsX","icon":"DetailList-module_icon__V-jq2","iconPlaceholder":"DetailList-module_iconPlaceholder__c3w6w","iconText":"DetailList-module_iconText__Kgx7z","badge":"DetailList-module_badge__FBJ8a","primary":"DetailList-module_primary__w79M-","secondary":"DetailList-module_secondary__S0ti-","success":"DetailList-module_success__tJWzC","warning":"DetailList-module_warning__N50cB","error":"DetailList-module_error__no5kK"};
|
|
2184
2210
|
|
|
2185
2211
|
/**
|
|
2186
2212
|
* A compact list of field/value pairs, as used down the side of a trip or
|
|
@@ -2197,21 +2223,21 @@ var styles$1u = {"list":"DetailList-module_list__orbOL","pair":"DetailList-modul
|
|
|
2197
2223
|
const DetailList = ({ items, gap = 8, className = '' }) => {
|
|
2198
2224
|
if (!items.some((item) => !!item.description))
|
|
2199
2225
|
return null;
|
|
2200
|
-
return (jsxRuntime.jsx("div", { className: `${styles$
|
|
2226
|
+
return (jsxRuntime.jsx("div", { className: `${styles$1v.list} ${className}`, style: { gap }, children: items.map((item, index) => {
|
|
2201
2227
|
if (!item.description)
|
|
2202
2228
|
return null;
|
|
2203
2229
|
const key = `detail-${index}`;
|
|
2204
2230
|
if (item.icon !== undefined) {
|
|
2205
|
-
return (jsxRuntime.jsxs("div", { className: styles$
|
|
2231
|
+
return (jsxRuntime.jsxs("div", { className: styles$1v.iconRow, style: { gap }, children: [item.icon ? (jsxRuntime.jsx("span", { className: styles$1v.icon, "aria-hidden": "true", children: item.icon })) : (jsxRuntime.jsx("span", { className: styles$1v.iconPlaceholder })), jsxRuntime.jsx("span", { className: styles$1v.iconText, children: item.description })] }, key));
|
|
2206
2232
|
}
|
|
2207
2233
|
if (!item.label)
|
|
2208
2234
|
return null;
|
|
2209
|
-
return (jsxRuntime.jsxs("div", { className: styles$
|
|
2235
|
+
return (jsxRuntime.jsxs("div", { className: styles$1v.pair, style: { gap }, children: [jsxRuntime.jsx("span", { className: styles$1v.label, children: item.label }), jsxRuntime.jsx("span", { className: styles$1v.value, children: item.variant ? (jsxRuntime.jsx("span", { className: `${styles$1v.badge} ${styles$1v[item.variant]}`, children: item.description })) : (item.description) })] }, key));
|
|
2210
2236
|
}) }));
|
|
2211
2237
|
};
|
|
2212
2238
|
DetailList.displayName = 'DetailList';
|
|
2213
2239
|
|
|
2214
|
-
var styles$
|
|
2240
|
+
var styles$1u = {"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"};
|
|
2215
2241
|
|
|
2216
2242
|
const Dropdown = ({ label, children, alignment = 'left', width, className = '', disabled = false, trigger, }) => {
|
|
2217
2243
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
@@ -2234,19 +2260,19 @@ const Dropdown = ({ label, children, alignment = 'left', width, className = '',
|
|
|
2234
2260
|
setIsOpen(false);
|
|
2235
2261
|
}
|
|
2236
2262
|
};
|
|
2237
|
-
return (jsxRuntime.jsxs("div", { ref: dropdownRef, className: `${styles$
|
|
2263
|
+
return (jsxRuntime.jsxs("div", { ref: dropdownRef, className: `${styles$1u.dropdown} ${className}`, onKeyDown: handleKeyDown, children: [trigger ? (trigger({ isOpen, toggle: () => !disabled && setIsOpen(!isOpen), disabled })) : (jsxRuntime.jsxs(Button, { variant: "secondary", onClick: () => !disabled && setIsOpen(!isOpen), disabled: disabled, "aria-expanded": isOpen, "aria-haspopup": "true", children: [label, jsxRuntime.jsx("svg", { className: `${styles$1u.arrow} ${isOpen ? styles$1u.arrowOpen : ''}`, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", width: "16", height: "16", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })] })), jsxRuntime.jsx("div", { className: `${styles$1u.menu} ${styles$1u[alignment]} ${isOpen ? styles$1u.menuOpen : ''}`, style: width ? { minWidth: `${width}px` } : undefined, role: "menu", children: children })] }));
|
|
2238
2264
|
};
|
|
2239
2265
|
const DropdownItem = ({ children, onClick, disabled = false, icon, className = '', }) => {
|
|
2240
|
-
return (jsxRuntime.jsxs("button", { type: "button", className: `${styles$
|
|
2266
|
+
return (jsxRuntime.jsxs("button", { type: "button", className: `${styles$1u.item} ${disabled ? styles$1u.itemDisabled : ''} ${className}`, onClick: onClick, disabled: disabled, role: "menuitem", children: [icon && jsxRuntime.jsx("span", { className: styles$1u.itemIcon, children: icon }), children] }));
|
|
2241
2267
|
};
|
|
2242
2268
|
Dropdown.Item = DropdownItem;
|
|
2243
2269
|
|
|
2244
|
-
var styles$
|
|
2270
|
+
var styles$1t = {"emptyState":"EmptyState-module_emptyState__WVjm4","sm":"EmptyState-module_sm__uIlcU","md":"EmptyState-module_md__cUO3z","lg":"EmptyState-module_lg__TDd0B","icon":"EmptyState-module_icon__q7SEB","title":"EmptyState-module_title__wrG0V","description":"EmptyState-module_description__EhVZb","actions":"EmptyState-module_actions__XNSCG"};
|
|
2245
2271
|
|
|
2246
2272
|
/** Placeholder shown when a list, table, or panel has nothing to display. */
|
|
2247
|
-
const EmptyState$1 = ({ title, description, icon, actionLabel, onAction, secondaryActionLabel, onSecondaryAction, size = 'md', children, className = '', }) => (jsxRuntime.jsxs("div", { className: [styles$
|
|
2273
|
+
const EmptyState$1 = ({ title, description, icon, actionLabel, onAction, secondaryActionLabel, onSecondaryAction, size = 'md', children, className = '', }) => (jsxRuntime.jsxs("div", { className: [styles$1t.emptyState, styles$1t[size], className].filter(Boolean).join(' '), "data-test": "empty-state", children: [icon && jsxRuntime.jsx("div", { className: styles$1t.icon, "aria-hidden": "true", children: icon }), jsxRuntime.jsx("p", { className: styles$1t.title, children: title }), description && jsxRuntime.jsx("p", { className: styles$1t.description, children: description }), (actionLabel || secondaryActionLabel) && (jsxRuntime.jsxs("div", { className: styles$1t.actions, children: [actionLabel && (jsxRuntime.jsx(Button, { size: "sm", onClick: onAction, "data-test": "empty-state-action", children: actionLabel })), secondaryActionLabel && (jsxRuntime.jsx(Button, { size: "sm", variant: "secondary", onClick: onSecondaryAction, "data-test": "empty-state-secondary-action", children: secondaryActionLabel }))] })), children] }));
|
|
2248
2274
|
|
|
2249
|
-
var styles$
|
|
2275
|
+
var styles$1s = {"field":"FieldLayout-module_field__XUDXw","top":"FieldLayout-module_top__l7TpS","left":"FieldLayout-module_left__l9daC","label":"FieldLayout-module_label__eQGNc","labelError":"FieldLayout-module_labelError__pBsN0","required":"FieldLayout-module_required__Alrlu","tooltip":"FieldLayout-module_tooltip__OsmG5","control":"FieldLayout-module_control__ZTojP","icon":"FieldLayout-module_icon__1-nNC","iconLeft":"FieldLayout-module_iconLeft__GLO22","iconRight":"FieldLayout-module_iconRight__xvVIN","message":"FieldLayout-module_message__aQVJy","error":"FieldLayout-module_error__JZHWG","note":"FieldLayout-module_note__DOSvG"};
|
|
2250
2276
|
|
|
2251
2277
|
/**
|
|
2252
2278
|
* The chrome around a form control: label, required marker, tooltip, the
|
|
@@ -2261,11 +2287,11 @@ const FieldLayout = ({ children, label, labelPosition = 'top', showLabel = true,
|
|
|
2261
2287
|
const id = React.useId();
|
|
2262
2288
|
const errorId = `${id}-error`;
|
|
2263
2289
|
const hasError = Boolean(error);
|
|
2264
|
-
return (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2290
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$1s.field} ${styles$1s[labelPosition]} ${className}`, children: [label && showLabel && (jsxRuntime.jsxs("label", { htmlFor: id, className: `${styles$1s.label} ${hasError ? styles$1s.labelError : ''}`, children: [label, required && !disabled && (jsxRuntime.jsx("span", { className: styles$1s.required, "aria-hidden": "true", children: "*" })), tooltip && (jsxRuntime.jsx(Tooltip, { className: styles$1s.tooltip, content: tooltip, children: jsxRuntime.jsx(InfoIcon$1, { size: 16 }) }))] })), jsxRuntime.jsxs("div", { className: styles$1s.control, children: [leftIcon && !disabled && (jsxRuntime.jsx("span", { className: `${styles$1s.icon} ${styles$1s.iconLeft}`, "aria-hidden": "true", children: leftIcon })), children({ id, describedBy: hasError ? errorId : undefined, hasError }), rightIcon && !disabled && (jsxRuntime.jsx("span", { className: `${styles$1s.icon} ${styles$1s.iconRight}`, "aria-hidden": "true", children: rightIcon }))] }), hasError && (jsxRuntime.jsx("p", { id: errorId, className: `${styles$1s.message} ${styles$1s.error}`, children: error })), note && jsxRuntime.jsx("p", { className: `${styles$1s.message} ${styles$1s.note}`, children: note })] }));
|
|
2265
2291
|
};
|
|
2266
2292
|
FieldLayout.displayName = 'FieldLayout';
|
|
2267
2293
|
|
|
2268
|
-
var styles$
|
|
2294
|
+
var styles$1r = {"wrapper":"FileUploadButton-module_wrapper__usYRn","input":"FileUploadButton-module_input__RBN3b"};
|
|
2269
2295
|
|
|
2270
2296
|
/** Document types a travel workflow usually accepts. */
|
|
2271
2297
|
const DOCUMENT_FILE_EXTENSIONS = ['.pdf', '.doc', '.docx', '.xls', '.xlsx'];
|
|
@@ -2277,10 +2303,10 @@ const DOCUMENT_FILE_EXTENSIONS = ['.pdf', '.doc', '.docx', '.xls', '.xlsx'];
|
|
|
2277
2303
|
* "choose file" control rather than a button and an input side by side. The
|
|
2278
2304
|
* button underneath is decorative and hidden from assistive technology.
|
|
2279
2305
|
*/
|
|
2280
|
-
const FileUploadButton = ({ label = 'Add File', accept = DOCUMENT_FILE_EXTENSIONS.join(','), multiple = false, disabled = false, loading = false, variant = 'outline-secondary', size = 'sm', icon, onSelect, className = '', inputProps, }) => (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2306
|
+
const FileUploadButton = ({ label = 'Add File', accept = DOCUMENT_FILE_EXTENSIONS.join(','), multiple = false, disabled = false, loading = false, variant = 'outline-secondary', size = 'sm', icon, onSelect, className = '', inputProps, }) => (jsxRuntime.jsxs("div", { className: `${styles$1r.wrapper} ${className}`, children: [jsxRuntime.jsx(ButtonStyled, { variant: variant, size: size, loading: loading, disabled: disabled, rightIcon: icon, tabIndex: -1, "aria-hidden": "true", children: label }), !disabled && (jsxRuntime.jsx("input", { ...inputProps, className: styles$1r.input, type: "file", accept: accept, multiple: multiple, "aria-label": label, onChange: onSelect }))] }));
|
|
2281
2307
|
FileUploadButton.displayName = 'FileUploadButton';
|
|
2282
2308
|
|
|
2283
|
-
var styles$
|
|
2309
|
+
var styles$1q = {"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"};
|
|
2284
2310
|
|
|
2285
2311
|
const FilterChip = ({ label, value, options, onChange, searchable = false, searchPlaceholder = 'Search...', infoMessage, disabled = false, className, }) => {
|
|
2286
2312
|
const [open, setOpen] = React.useState(false);
|
|
@@ -2321,13 +2347,13 @@ const FilterChip = ({ label, value, options, onChange, searchable = false, searc
|
|
|
2321
2347
|
const selectedOption = options.find(opt => opt.value === value);
|
|
2322
2348
|
const displayValue = selectedOption?.label || value;
|
|
2323
2349
|
const isDefault = value === options[0]?.value;
|
|
2324
|
-
return (jsxRuntime.jsxs("div", { ref: ref, className: `${styles$
|
|
2350
|
+
return (jsxRuntime.jsxs("div", { ref: ref, className: `${styles$1q.wrapper} ${className || ''}`, children: [jsxRuntime.jsxs("button", { type: "button", className: `${styles$1q.chip} ${open ? styles$1q.open : ''} ${!isDefault ? styles$1q.active : ''}`, onClick: () => setOpen(!open), disabled: disabled, "aria-haspopup": "listbox", "aria-expanded": open, children: [jsxRuntime.jsxs("span", { className: styles$1q.label, children: [label, ":"] }), jsxRuntime.jsx("span", { className: styles$1q.value, children: displayValue }), jsxRuntime.jsx("svg", { className: `${styles$1q.chevron} ${open ? styles$1q.rotated : ''}`, width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" }) })] }), open && (jsxRuntime.jsxs("div", { className: styles$1q.dropdown, role: "listbox", children: [infoMessage && (jsxRuntime.jsxs("div", { className: styles$1q.infoMessage, children: [jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "currentColor", children: jsxRuntime.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" }) }), jsxRuntime.jsx("span", { children: infoMessage })] })), searchable && (jsxRuntime.jsxs("div", { className: styles$1q.searchWrapper, children: [jsxRuntime.jsxs("svg", { className: styles$1q.searchIcon, width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })] }), jsxRuntime.jsx("input", { type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: searchPlaceholder, className: styles$1q.searchInput, autoFocus: true })] })), jsxRuntime.jsxs("div", { className: styles$1q.optionsList, children: [filteredOptions.map((option) => (jsxRuntime.jsx("button", { type: "button", role: "option", "aria-selected": option.value === value, className: `${styles$1q.option} ${option.value === value ? styles$1q.selected : ''}`, onClick: () => {
|
|
2325
2351
|
onChange(option.value);
|
|
2326
2352
|
setOpen(false);
|
|
2327
|
-
}, children: option.label }, option.value))), filteredOptions.length === 0 && (jsxRuntime.jsx("div", { className: styles$
|
|
2353
|
+
}, children: option.label }, option.value))), filteredOptions.length === 0 && (jsxRuntime.jsx("div", { className: styles$1q.noResults, children: "No results found" }))] })] }))] }));
|
|
2328
2354
|
};
|
|
2329
2355
|
|
|
2330
|
-
var styles$
|
|
2356
|
+
var styles$1p = {"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"};
|
|
2331
2357
|
|
|
2332
2358
|
const FormField = React.forwardRef(({ label, helperText, error, required = false, hideLabel = false, className, as = 'input', inputProps, textareaProps, children, }, ref) => {
|
|
2333
2359
|
const generatedId = React.useId();
|
|
@@ -2346,15 +2372,15 @@ const FormField = React.forwardRef(({ label, helperText, error, required = false
|
|
|
2346
2372
|
return children;
|
|
2347
2373
|
}
|
|
2348
2374
|
if (as === 'textarea') {
|
|
2349
|
-
return (jsxRuntime.jsx(Textarea, { ref: ref, id: inputId, "aria-describedby": describedBy, "aria-invalid": hasError, "aria-required": required, ...textareaProps, className: `${styles$
|
|
2375
|
+
return (jsxRuntime.jsx(Textarea, { ref: ref, id: inputId, "aria-describedby": describedBy, "aria-invalid": hasError, "aria-required": required, ...textareaProps, className: `${styles$1p.inputElement} ${hasError ? styles$1p.inputError : ''} ${textareaProps?.className || ''}` }));
|
|
2350
2376
|
}
|
|
2351
|
-
return (jsxRuntime.jsx(Input, { ref: ref, id: inputId, "aria-describedby": describedBy, "aria-invalid": hasError, "aria-required": required, ...inputProps, className: `${styles$
|
|
2377
|
+
return (jsxRuntime.jsx(Input, { ref: ref, id: inputId, "aria-describedby": describedBy, "aria-invalid": hasError, "aria-required": required, ...inputProps, className: `${styles$1p.inputElement} ${hasError ? styles$1p.inputError : ''} ${inputProps?.className || ''}` }));
|
|
2352
2378
|
};
|
|
2353
|
-
return (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2379
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$1p.formField} ${className || ''}`, children: [jsxRuntime.jsxs("label", { htmlFor: inputId, className: `${styles$1p.label} ${hideLabel ? styles$1p.visuallyHidden : ''}`, children: [label, required && jsxRuntime.jsx("span", { className: styles$1p.required, "aria-hidden": "true", children: "*" })] }), renderInput(), helperText && !hasError && (jsxRuntime.jsx("p", { id: helperId, className: styles$1p.helperText, children: helperText })), hasError && (jsxRuntime.jsx("p", { id: errorId, className: styles$1p.errorText, role: "alert", children: error }))] }));
|
|
2354
2380
|
});
|
|
2355
2381
|
FormField.displayName = 'FormField';
|
|
2356
2382
|
|
|
2357
|
-
var styles$
|
|
2383
|
+
var styles$1o = {"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"};
|
|
2358
2384
|
|
|
2359
2385
|
/**
|
|
2360
2386
|
* FormRow component for laying out form fields in a responsive grid.
|
|
@@ -2364,16 +2390,16 @@ const FormRow = ({ children, columns, gap = 'md', className, stackOnMobile = tru
|
|
|
2364
2390
|
const childCount = React.Children.count(children);
|
|
2365
2391
|
const colCount = columns || (childCount > 4 ? 4 : childCount);
|
|
2366
2392
|
return (jsxRuntime.jsx("div", { className: `
|
|
2367
|
-
${styles$
|
|
2368
|
-
${styles$
|
|
2369
|
-
${styles$
|
|
2370
|
-
${stackOnMobile ? styles$
|
|
2393
|
+
${styles$1o.row}
|
|
2394
|
+
${styles$1o[`cols${colCount}`]}
|
|
2395
|
+
${styles$1o[`gap${gap}`]}
|
|
2396
|
+
${stackOnMobile ? styles$1o.stackMobile : ''}
|
|
2371
2397
|
${className || ''}
|
|
2372
2398
|
`, children: children }));
|
|
2373
2399
|
};
|
|
2374
2400
|
FormRow.displayName = 'FormRow';
|
|
2375
2401
|
|
|
2376
|
-
var styles$
|
|
2402
|
+
var styles$1n = {"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-"};
|
|
2377
2403
|
|
|
2378
2404
|
/**
|
|
2379
2405
|
* FormSection component for grouping related form fields with a title and icon.
|
|
@@ -2382,14 +2408,14 @@ var styles$1m = {"section":"FormSection-module_section__T17Vg","header":"FormSec
|
|
|
2382
2408
|
const FormSection = ({ title, icon, status, disabled = false, children, className, id, }) => {
|
|
2383
2409
|
const isSubmitted = status === 'submitted';
|
|
2384
2410
|
const isDisabled = disabled || isSubmitted;
|
|
2385
|
-
return (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2411
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$1n.section} ${className || ''}`, id: id, children: [jsxRuntime.jsxs("div", { className: styles$1n.header, children: [icon && jsxRuntime.jsx("span", { className: styles$1n.icon, children: icon }), jsxRuntime.jsx("h2", { className: styles$1n.title, children: title })] }), jsxRuntime.jsxs("fieldset", { disabled: isDisabled, className: `${styles$1n.fieldset} ${isDisabled ? styles$1n.disabled : ''}`, children: [status && (jsxRuntime.jsxs("div", { className: styles$1n.status, children: [jsxRuntime.jsx("span", { className: styles$1n.statusLabel, children: "Status:" }), jsxRuntime.jsx("span", { className: `${styles$1n.statusValue} ${styles$1n[status]}`, children: status === 'submitted' ? 'Submitted' : status === 'draft' ? 'Draft' : 'Not Submitted' })] })), children] })] }));
|
|
2386
2412
|
};
|
|
2387
2413
|
FormSection.displayName = 'FormSection';
|
|
2388
2414
|
|
|
2389
|
-
var styles$
|
|
2415
|
+
var styles$1m = {"stack":"FormStack-module_stack__SURjY","sm":"FormStack-module_sm__rt3tb","md":"FormStack-module_md__SRDmc","lg":"FormStack-module_lg__jql3j"};
|
|
2390
2416
|
|
|
2391
2417
|
/** Standard vertical form-field rhythm used by Hub modal forms. */
|
|
2392
|
-
const FormStack = ({ children, gap = 'md', className = '' }) => (jsxRuntime.jsx("div", { className: [styles$
|
|
2418
|
+
const FormStack = ({ children, gap = 'md', className = '' }) => (jsxRuntime.jsx("div", { className: [styles$1m.stack, styles$1m[gap], className].filter(Boolean).join(' '), children: children }));
|
|
2393
2419
|
|
|
2394
2420
|
const RADIUS = '8px';
|
|
2395
2421
|
/**
|
|
@@ -2467,26 +2493,26 @@ const InfoTile = ({ value, label, icon, square = NO_EDGES, borderless = NO_EDGES
|
|
|
2467
2493
|
};
|
|
2468
2494
|
InfoTile.displayName = 'InfoTile';
|
|
2469
2495
|
|
|
2470
|
-
var styles$
|
|
2496
|
+
var styles$1l = {"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"};
|
|
2471
2497
|
|
|
2472
2498
|
const ManifestViewToggle = ({ view, onView, paxCount, eqCount, locked, className = '', }) => {
|
|
2473
2499
|
const tabs = [
|
|
2474
2500
|
{ key: 'passengers', label: 'Passengers', count: paxCount, icon: UsersIcon$1 },
|
|
2475
2501
|
{ key: 'equipment', label: 'Equipment', count: eqCount, icon: CubeIcon },
|
|
2476
2502
|
];
|
|
2477
|
-
return (jsxRuntime.jsx("div", { className: [styles$
|
|
2503
|
+
return (jsxRuntime.jsx("div", { className: [styles$1l.toggle, locked ? styles$1l.lockedToggle : '', className].filter(Boolean).join(' '), role: "tablist", "aria-label": "Manifest view", children: tabs.map((tab) => {
|
|
2478
2504
|
const active = view === tab.key;
|
|
2479
2505
|
const Icon = locked ? LockIcon$1 : tab.icon;
|
|
2480
2506
|
return (jsxRuntime.jsxs("button", { type: "button", role: "tab", "aria-selected": active, onClick: () => onView(tab.key), className: [
|
|
2481
|
-
styles$
|
|
2482
|
-
active ? styles$
|
|
2483
|
-
locked ? styles$
|
|
2484
|
-
locked && active ? styles$
|
|
2485
|
-
].filter(Boolean).join(' '), children: [jsxRuntime.jsx(Icon, { size: 16 }), tab.label, jsxRuntime.jsx("span", { className: styles$
|
|
2507
|
+
styles$1l.tab,
|
|
2508
|
+
active ? styles$1l.active : '',
|
|
2509
|
+
locked ? styles$1l.locked : '',
|
|
2510
|
+
locked && active ? styles$1l.lockedActive : '',
|
|
2511
|
+
].filter(Boolean).join(' '), children: [jsxRuntime.jsx(Icon, { size: 16 }), tab.label, jsxRuntime.jsx("span", { className: styles$1l.count, children: tab.count })] }, tab.key));
|
|
2486
2512
|
}) }));
|
|
2487
2513
|
};
|
|
2488
2514
|
|
|
2489
|
-
var styles$
|
|
2515
|
+
var styles$1k = {"container":"MultiUserSearch-module_container__aWwYv","disabled":"MultiUserSearch-module_disabled__Twuo3","label":"MultiUserSearch-module_label__W4WWS","selectedUsers":"MultiUserSearch-module_selectedUsers__IPRHn","selectedBadge":"MultiUserSearch-module_selectedBadge__VxTlk","badgeContent":"MultiUserSearch-module_badgeContent__UnAN7","removeButton":"MultiUserSearch-module_removeButton__vV8P0","inputWrapper":"MultiUserSearch-module_inputWrapper__G4T-v","listbox":"MultiUserSearch-module_listbox__PxgPe","option":"MultiUserSearch-module_option__m0sTR","highlighted":"MultiUserSearch-module_highlighted__GvlxG","optionDisabled":"MultiUserSearch-module_optionDisabled__1GBAH","optionAvatar":"MultiUserSearch-module_optionAvatar__YO9js","optionContent":"MultiUserSearch-module_optionContent__q4YGx","optionName":"MultiUserSearch-module_optionName__YM5T7","optionEmail":"MultiUserSearch-module_optionEmail__-x6qp","optionTitle":"MultiUserSearch-module_optionTitle__RQZWi","loadingItem":"MultiUserSearch-module_loadingItem__ajXfz","noResults":"MultiUserSearch-module_noResults__czQX6","hint":"MultiUserSearch-module_hint__pcdaa","helperText":"MultiUserSearch-module_helperText__0jOQq","errorText":"MultiUserSearch-module_errorText__XISLN"};
|
|
2490
2516
|
|
|
2491
2517
|
const DEBOUNCE_MS = 300;
|
|
2492
2518
|
/**
|
|
@@ -2614,34 +2640,34 @@ const MultiUserSearch = ({ label = 'Search users', placeholder = 'Type to search
|
|
|
2614
2640
|
const showDropdown = isOpen && (loading || availableOptions.length > 0 || (meetsMinLength && !loading));
|
|
2615
2641
|
const showNoResults = isOpen && meetsMinLength && !loading && availableOptions.length === 0;
|
|
2616
2642
|
const showMinLengthHint = isOpen && !meetsMinLength && query.length > 0;
|
|
2617
|
-
return (jsxRuntime.jsxs("div", { ref: containerRef, className: [styles$
|
|
2643
|
+
return (jsxRuntime.jsxs("div", { ref: containerRef, className: [styles$1k.container, disabled ? styles$1k.disabled : '', className]
|
|
2618
2644
|
.filter(Boolean)
|
|
2619
|
-
.join(' '), "data-test": dataTest, children: [label && (jsxRuntime.jsx("label", { className: styles$
|
|
2645
|
+
.join(' '), "data-test": dataTest, children: [label && (jsxRuntime.jsx("label", { className: styles$1k.label, htmlFor: `${dataTest}-input`, children: label })), selectedUsers.length > 0 && (jsxRuntime.jsx("div", { className: styles$1k.selectedUsers, "data-test": `${dataTest}-selected`, children: selectedUsers.map((user) => (jsxRuntime.jsx(Badge, { variant: "info", size: "sm", className: styles$1k.selectedBadge, "data-test": `${dataTest}-selected-${user.id}`, children: jsxRuntime.jsxs("span", { className: styles$1k.badgeContent, children: [user.name, jsxRuntime.jsx("button", { type: "button", className: styles$1k.removeButton, onClick: () => removeSelection(user.id), "aria-label": `Remove ${user.name}`, disabled: disabled, children: jsxRuntime.jsx(CloseIcon, { size: 12 }) })] }) }, user.id))) })), jsxRuntime.jsxs("div", { className: styles$1k.inputWrapper, children: [jsxRuntime.jsx(Input, { ref: inputRef, id: `${dataTest}-input`, type: "search", placeholder: placeholder, value: query, onChange: handleInputChange, onFocus: handleInputFocus, onKeyDown: handleKeyDown, disabled: disabled, leftIcon: jsxRuntime.jsx(SearchIcon$1, { size: 16 }), rightIcon: loading ? jsxRuntime.jsx(Spinner, { size: "xs", label: "Searching" }) : undefined, "aria-expanded": isOpen, "aria-controls": `${dataTest}-listbox`, "aria-autocomplete": "list", "aria-activedescendant": highlightedIndex >= 0
|
|
2620
2646
|
? `${dataTest}-option-${availableOptions[highlightedIndex]?.id}`
|
|
2621
|
-
: undefined, role: "combobox", fullWidth: true, "data-test": `${dataTest}-input` }), showDropdown && (jsxRuntime.jsxs("ul", { ref: listRef, id: `${dataTest}-listbox`, className: styles$
|
|
2647
|
+
: undefined, role: "combobox", fullWidth: true, "data-test": `${dataTest}-input` }), showDropdown && (jsxRuntime.jsxs("ul", { ref: listRef, id: `${dataTest}-listbox`, className: styles$1k.listbox, role: "listbox", "aria-label": "Search results", "data-test": `${dataTest}-listbox`, children: [loading && (jsxRuntime.jsxs("li", { className: styles$1k.loadingItem, role: "status", children: [jsxRuntime.jsx(Spinner, { size: "sm", label: "Searching users" }), jsxRuntime.jsx("span", { children: "Searching users\u2026" })] })), !loading &&
|
|
2622
2648
|
availableOptions.map((option, index) => (jsxRuntime.jsxs("li", { id: `${dataTest}-option-${option.id}`, role: "option", "aria-selected": highlightedIndex === index, "aria-disabled": option.disabled, className: [
|
|
2623
|
-
styles$
|
|
2624
|
-
highlightedIndex === index ? styles$
|
|
2625
|
-
option.disabled ? styles$
|
|
2649
|
+
styles$1k.option,
|
|
2650
|
+
highlightedIndex === index ? styles$1k.highlighted : '',
|
|
2651
|
+
option.disabled ? styles$1k.optionDisabled : '',
|
|
2626
2652
|
]
|
|
2627
2653
|
.filter(Boolean)
|
|
2628
|
-
.join(' '), onClick: () => selectOption(option), title: option.disabledReason, "data-test": `${dataTest}-option-${option.id}`, children: [jsxRuntime.jsx("span", { className: styles$
|
|
2654
|
+
.join(' '), onClick: () => selectOption(option), title: option.disabledReason, "data-test": `${dataTest}-option-${option.id}`, children: [jsxRuntime.jsx("span", { className: styles$1k.optionAvatar, "aria-hidden": "true", children: jsxRuntime.jsx(UserIcon, { size: 16 }) }), jsxRuntime.jsxs("span", { className: styles$1k.optionContent, children: [jsxRuntime.jsx("span", { className: styles$1k.optionName, children: option.name }), jsxRuntime.jsx("span", { className: styles$1k.optionEmail, children: option.email }), option.title && (jsxRuntime.jsx("span", { className: styles$1k.optionTitle, children: option.title }))] })] }, option.id))), showNoResults && (jsxRuntime.jsxs("li", { className: styles$1k.noResults, role: "status", children: ["No users found matching \"", trimmedQuery, "\""] }))] })), showMinLengthHint && (jsxRuntime.jsxs("div", { className: styles$1k.hint, role: "status", children: ["Enter at least ", minSearchLength, " characters to search"] }))] }), (helperText || error) && (jsxRuntime.jsx("p", { className: [styles$1k.helperText, error ? styles$1k.errorText : '']
|
|
2629
2655
|
.filter(Boolean)
|
|
2630
2656
|
.join(' '), role: error ? 'alert' : undefined, children: error || helperText }))] }));
|
|
2631
2657
|
};
|
|
2632
2658
|
MultiUserSearch.displayName = 'MultiUserSearch';
|
|
2633
2659
|
|
|
2634
|
-
var styles$
|
|
2660
|
+
var styles$1j = {"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"};
|
|
2635
2661
|
|
|
2636
2662
|
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, }) => {
|
|
2637
|
-
const content = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [icon && jsxRuntime.jsx("span", { className: `${styles$
|
|
2663
|
+
const content = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [icon && jsxRuntime.jsx("span", { className: `${styles$1j.icon} ${styles$1j[`icon${size.charAt(0).toUpperCase()}${size.slice(1)}`]}`, "aria-hidden": "true", children: icon }), !collapsed && (jsxRuntime.jsx("span", { className: styles$1j.label, children: label })), badge !== undefined && !collapsed && (jsxRuntime.jsx(Badge, { variant: badgeVariant, className: styles$1j.badge, children: badge }))] }));
|
|
2638
2664
|
const classNames = [
|
|
2639
|
-
styles$
|
|
2640
|
-
styles$
|
|
2641
|
-
styles$
|
|
2642
|
-
active ? styles$
|
|
2643
|
-
collapsed ? styles$
|
|
2644
|
-
disabled ? styles$
|
|
2665
|
+
styles$1j.navItem,
|
|
2666
|
+
styles$1j[variant],
|
|
2667
|
+
styles$1j[size],
|
|
2668
|
+
active ? styles$1j.active : '',
|
|
2669
|
+
collapsed ? styles$1j.collapsed : '',
|
|
2670
|
+
disabled ? styles$1j.disabled : '',
|
|
2645
2671
|
className || '',
|
|
2646
2672
|
].filter(Boolean).join(' ');
|
|
2647
2673
|
const commonProps = {
|
|
@@ -2656,7 +2682,7 @@ const NavItem = ({ icon, label, active = false, collapsed = false, variant = 'de
|
|
|
2656
2682
|
return (jsxRuntime.jsx("button", { type: "button", onClick: disabled ? undefined : onClick, disabled: disabled, ...commonProps, children: content }));
|
|
2657
2683
|
};
|
|
2658
2684
|
|
|
2659
|
-
var styles$
|
|
2685
|
+
var styles$1i = {"header":"PageHeader-module_header__mgurT","empty":"PageHeader-module_empty__PhGUS","body":"PageHeader-module_body__Ky9Vw","text":"PageHeader-module_text__aZXIA","pretitle":"PageHeader-module_pretitle__4rrfW","title":"PageHeader-module_title__GQfAe"};
|
|
2660
2686
|
|
|
2661
2687
|
/**
|
|
2662
2688
|
* Standard page heading: an optional back control, a pretitle, the title, and
|
|
@@ -2665,10 +2691,10 @@ var styles$1h = {"header":"PageHeader-module_header__mgurT","empty":"PageHeader-
|
|
|
2665
2691
|
* The header keeps its height while `title` is empty and fades in once one
|
|
2666
2692
|
* arrives, so pages do not jump as their data loads.
|
|
2667
2693
|
*/
|
|
2668
|
-
const PageHeader = ({ title, pretitle, after, back, className = '', }) => (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2694
|
+
const PageHeader = ({ title, pretitle, after, back, className = '', }) => (jsxRuntime.jsxs("div", { className: `${styles$1i.header} ${title ? '' : styles$1i.empty} ${className}`, children: [back, jsxRuntime.jsx("div", { className: styles$1i.body, children: jsxRuntime.jsxs("div", { className: styles$1i.text, children: [pretitle && jsxRuntime.jsx("h2", { className: styles$1i.pretitle, children: pretitle }), jsxRuntime.jsxs("h1", { className: styles$1i.title, children: [title, "\u00A0"] }), after] }) })] }));
|
|
2669
2695
|
PageHeader.displayName = 'PageHeader';
|
|
2670
2696
|
|
|
2671
|
-
var styles$
|
|
2697
|
+
var styles$1h = {"pagination":"Pagination-module_pagination__bYlk4","summary":"Pagination-module_summary__fE-zz","controls":"Pagination-module_controls__U-4MK","pageSize":"Pagination-module_pageSize__vqxE8","pages":"Pagination-module_pages__-EHb7","page":"Pagination-module_page__bMFDY","step":"Pagination-module_step__RQPZN","current":"Pagination-module_current__YkaCW","ellipsis":"Pagination-module_ellipsis__2nszM"};
|
|
2672
2698
|
|
|
2673
2699
|
/**
|
|
2674
2700
|
* Builds the page-button list for a paginator, collapsing long runs into
|
|
@@ -2713,10 +2739,10 @@ const Pagination = ({ page, pageSize, totalItems, siblingCount = 1, pageSizeOpti
|
|
|
2713
2739
|
return;
|
|
2714
2740
|
onPageChange?.(next);
|
|
2715
2741
|
};
|
|
2716
|
-
return (jsxRuntime.jsxs("nav", { className: [styles$
|
|
2742
|
+
return (jsxRuntime.jsxs("nav", { className: [styles$1h.pagination, className].filter(Boolean).join(' '), "aria-label": ariaLabel, "data-test": "pagination", children: [!hideSummary && (jsxRuntime.jsxs("p", { className: styles$1h.summary, "data-test": "pagination-summary", children: ["Showing ", firstItem, "\u2013", lastItem, " of ", totalItems, " ", itemLabel] })), jsxRuntime.jsxs("div", { className: styles$1h.controls, children: [showSizeSelector && (jsxRuntime.jsxs("label", { className: styles$1h.pageSize, children: [jsxRuntime.jsx("span", { children: "Rows per page" }), jsxRuntime.jsx("select", { value: pageSize, onChange: (event) => onPageSizeChange?.(Number(event.target.value)), "data-test": "pagination-page-size", children: pageSizeOptions.map((option) => (jsxRuntime.jsx("option", { value: option, children: option }, option))) })] })), jsxRuntime.jsxs("ul", { className: styles$1h.pages, children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx("button", { type: "button", className: styles$1h.step, onClick: () => goTo(currentPage - 1), disabled: currentPage <= 1, "aria-label": "Previous page", "data-test": "pagination-previous", children: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }) }) }), items.map((item, index) => item === 'ellipsis' ? (jsxRuntime.jsx("li", { className: styles$1h.ellipsis, "aria-hidden": "true", children: "\u2026" }, `ellipsis-${index}`)) : (jsxRuntime.jsx("li", { children: jsxRuntime.jsx("button", { type: "button", className: [styles$1h.page, item === currentPage ? styles$1h.current : ''].filter(Boolean).join(' '), onClick: () => goTo(item), "aria-label": `Page ${item}`, "aria-current": item === currentPage ? 'page' : undefined, "data-test": `pagination-page-${item}`, children: item }) }, item))), jsxRuntime.jsx("li", { children: jsxRuntime.jsx("button", { type: "button", className: styles$1h.step, onClick: () => goTo(currentPage + 1), disabled: currentPage >= pageCount, "aria-label": "Next page", "data-test": "pagination-next", children: jsxRuntime.jsx(ChevronRightIcon$1, { size: 16 }) }) })] })] })] }));
|
|
2717
2743
|
};
|
|
2718
2744
|
|
|
2719
|
-
var styles$
|
|
2745
|
+
var styles$1g = {"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"};
|
|
2720
2746
|
|
|
2721
2747
|
const dimensions = {
|
|
2722
2748
|
xs: 32,
|
|
@@ -2732,7 +2758,7 @@ const strokeWidths = {
|
|
|
2732
2758
|
};
|
|
2733
2759
|
const ProgressBar = ({ value, max = 100, size = 'md', variant = 'primary', showLabel = false, className = '', }) => {
|
|
2734
2760
|
const percentage = Math.min(Math.max((value / max) * 100, 0), 100);
|
|
2735
|
-
return (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2761
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$1g.barContainer} ${styles$1g[`bar${size}`]} ${className}`, children: [jsxRuntime.jsx("div", { className: styles$1g.barTrack, children: jsxRuntime.jsx("div", { className: `${styles$1g.barFill} ${styles$1g[variant]}`, style: { width: `${percentage}%` }, role: "progressbar", "aria-valuenow": value, "aria-valuemin": 0, "aria-valuemax": max }) }), showLabel && (jsxRuntime.jsxs("span", { className: styles$1g.barLabel, children: [Math.round(percentage), "%"] }))] }));
|
|
2736
2762
|
};
|
|
2737
2763
|
const ProgressCircle = ({ value, max = 100, size = 'md', variant = 'primary', showLabel = false, className = '', diameter, }) => {
|
|
2738
2764
|
const percentage = Math.min(Math.max((value / max) * 100, 0), 100);
|
|
@@ -2743,7 +2769,7 @@ const ProgressCircle = ({ value, max = 100, size = 'md', variant = 'primary', sh
|
|
|
2743
2769
|
const radius = (dimension - strokeWidth) / 2;
|
|
2744
2770
|
const circumference = radius * 2 * Math.PI;
|
|
2745
2771
|
const strokeDashoffset = circumference - (percentage / 100) * circumference;
|
|
2746
|
-
return (jsxRuntime.jsxs("div", { className: `${styles$
|
|
2772
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$1g.circleContainer} ${className}`, style: { width: dimension, height: dimension }, children: [jsxRuntime.jsxs("svg", { width: dimension, height: dimension, className: styles$1g.circleSvg, children: [jsxRuntime.jsx("circle", { className: styles$1g.circleTrack, cx: dimension / 2, cy: dimension / 2, r: radius, strokeWidth: strokeWidth, fill: "transparent" }), jsxRuntime.jsx("circle", { className: `${styles$1g.circleFill} ${styles$1g[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 && (jsxRuntime.jsxs("span", { className: styles$1g.circleLabel, style: { fontSize: size === 'xs' ? '8px' : size === 'sm' ? '10px' : size === 'md' ? '12px' : '14px' }, children: [Math.round(percentage), "%"] }))] }));
|
|
2747
2773
|
};
|
|
2748
2774
|
// Combined export
|
|
2749
2775
|
const Progress = {
|
|
@@ -2751,7 +2777,29 @@ const Progress = {
|
|
|
2751
2777
|
Circle: ProgressCircle,
|
|
2752
2778
|
};
|
|
2753
2779
|
|
|
2754
|
-
|
|
2780
|
+
// 5px block padding, which is what Hub's `py-1.25` resolves to.
|
|
2781
|
+
const resultCountStyle = css({
|
|
2782
|
+
paddingTop: '5px',
|
|
2783
|
+
paddingBottom: '5px',
|
|
2784
|
+
margin: 0,
|
|
2785
|
+
});
|
|
2786
|
+
|
|
2787
|
+
/**
|
|
2788
|
+
* The "12 trips displayed" line that sits above a filtered list.
|
|
2789
|
+
*
|
|
2790
|
+
* It reports what is on screen, not what exists — the distinction matters when
|
|
2791
|
+
* a filter is applied, which is exactly when someone reads it.
|
|
2792
|
+
*
|
|
2793
|
+
* The count is announced politely so screen-reader users hear the list resize
|
|
2794
|
+
* as they filter, instead of having to go looking for the number.
|
|
2795
|
+
*/
|
|
2796
|
+
const ResultCount = ({ count, noun, pluralNoun, className = '', style, }) => {
|
|
2797
|
+
const word = count === 1 ? noun : (pluralNoun ?? `${noun}s`);
|
|
2798
|
+
return (jsxRuntime.jsxs("p", { className: className, "data-testid": "result-count", "aria-live": "polite", style: toInlineStyle(merge(resultCountStyle, style)), children: [count, " ", word.toLocaleLowerCase(), " displayed"] }));
|
|
2799
|
+
};
|
|
2800
|
+
ResultCount.displayName = 'ResultCount';
|
|
2801
|
+
|
|
2802
|
+
var styles$1f = {"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"};
|
|
2755
2803
|
|
|
2756
2804
|
const ImportIcon = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), jsxRuntime.jsx("polyline", { points: "17 8 12 3 7 8" }), jsxRuntime.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })] }));
|
|
2757
2805
|
const ExportIcon$1 = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), jsxRuntime.jsx("polyline", { points: "7 10 12 15 17 10" }), jsxRuntime.jsx("line", { x1: "12", y1: "15", x2: "12", y2: "3" })] }));
|
|
@@ -2759,23 +2807,23 @@ const ChevronIcon$2 = () => (jsxRuntime.jsx("svg", { width: "12", height: "12",
|
|
|
2759
2807
|
const LockIcon = () => (jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })] }));
|
|
2760
2808
|
const UnlockIcon = () => (jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }), jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0 1 9.9-1" })] }));
|
|
2761
2809
|
const SaveIcon = () => (jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("path", { d: "M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" }), jsxRuntime.jsx("polyline", { points: "17 21 17 13 7 13 7 21" }), jsxRuntime.jsx("polyline", { points: "7 3 7 8 15 8" })] }));
|
|
2762
|
-
const SpinnerIcon = () => (jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: styles$
|
|
2810
|
+
const SpinnerIcon = () => (jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: styles$1f.spinner, children: jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", strokeDasharray: "32", strokeDashoffset: "32" }) }));
|
|
2763
2811
|
const DropdownButton = ({ label, icon, options, }) => {
|
|
2764
|
-
return (jsxRuntime.jsxs("div", { className: styles$
|
|
2812
|
+
return (jsxRuntime.jsxs("div", { className: styles$1f.dropdown, children: [jsxRuntime.jsxs("button", { type: "button", className: styles$1f.dropdownTrigger, children: [icon, jsxRuntime.jsx("span", { children: label }), jsxRuntime.jsx(ChevronIcon$2, {})] }), jsxRuntime.jsx("div", { className: styles$1f.dropdownMenu, children: options.map((option, i) => (jsxRuntime.jsxs("button", { type: "button", className: styles$1f.dropdownItem, onClick: option.onClick, disabled: option.disabled, children: [option.icon && jsxRuntime.jsx("span", { className: styles$1f.dropdownItemIcon, children: option.icon }), option.label] }, i))) })] }));
|
|
2765
2813
|
};
|
|
2766
2814
|
/**
|
|
2767
2815
|
* RosterToolbar - Toolbar for roster management with import/export/save actions
|
|
2768
2816
|
*/
|
|
2769
2817
|
const RosterToolbar = ({ importOptions, exportOptions, lockToggle, saveButton, additionalActions, searchField, className = '', }) => {
|
|
2770
|
-
const toolbarClasses = [styles$
|
|
2771
|
-
return (jsxRuntime.jsxs("div", { className: toolbarClasses, children: [jsxRuntime.jsxs("div", { className: styles$
|
|
2772
|
-
styles$
|
|
2773
|
-
lockToggle.isLocked ? styles$
|
|
2774
|
-
].filter(Boolean).join(' '), onClick: () => lockToggle.onToggle(!lockToggle.isLocked), disabled: lockToggle.disabled, "aria-label": lockToggle.isLocked ? 'Unlock roster' : 'Lock roster', children: [lockToggle.isLocked ? jsxRuntime.jsx(LockIcon, {}) : jsxRuntime.jsx(UnlockIcon, {}), jsxRuntime.jsx("span", { children: lockToggle.isLocked ? 'Locked' : 'Unlocked' })] })), saveButton && (jsxRuntime.jsxs("button", { type: "button", className: styles$
|
|
2818
|
+
const toolbarClasses = [styles$1f.toolbar, className].filter(Boolean).join(' ');
|
|
2819
|
+
return (jsxRuntime.jsxs("div", { className: toolbarClasses, children: [jsxRuntime.jsxs("div", { className: styles$1f.leftSection, children: [searchField, additionalActions] }), jsxRuntime.jsxs("div", { className: styles$1f.rightSection, children: [importOptions && importOptions.length > 0 && (jsxRuntime.jsx(DropdownButton, { label: "Import", icon: jsxRuntime.jsx(ImportIcon, {}), options: importOptions })), exportOptions && exportOptions.length > 0 && (jsxRuntime.jsx(DropdownButton, { label: "Export", icon: jsxRuntime.jsx(ExportIcon$1, {}), options: exportOptions })), lockToggle && (jsxRuntime.jsxs("button", { type: "button", className: [
|
|
2820
|
+
styles$1f.lockButton,
|
|
2821
|
+
lockToggle.isLocked ? styles$1f.locked : '',
|
|
2822
|
+
].filter(Boolean).join(' '), onClick: () => lockToggle.onToggle(!lockToggle.isLocked), disabled: lockToggle.disabled, "aria-label": lockToggle.isLocked ? 'Unlock roster' : 'Lock roster', children: [lockToggle.isLocked ? jsxRuntime.jsx(LockIcon, {}) : jsxRuntime.jsx(UnlockIcon, {}), jsxRuntime.jsx("span", { children: lockToggle.isLocked ? 'Locked' : 'Unlocked' })] })), saveButton && (jsxRuntime.jsxs("button", { type: "button", className: styles$1f.saveButton, onClick: saveButton.onClick, disabled: saveButton.disabled || saveButton.loading, children: [saveButton.loading ? jsxRuntime.jsx(SpinnerIcon, {}) : jsxRuntime.jsx(SaveIcon, {}), jsxRuntime.jsx("span", { children: saveButton.label || 'Save' })] }))] })] }));
|
|
2775
2823
|
};
|
|
2776
2824
|
RosterToolbar.displayName = 'RosterToolbar';
|
|
2777
2825
|
|
|
2778
|
-
var styles$
|
|
2826
|
+
var styles$1e = {"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"};
|
|
2779
2827
|
|
|
2780
2828
|
const SearchField = React.forwardRef(({ placeholder = 'Search...', value, defaultValue = '', onChange, onSearch, onClear, size = 'md', disabled = false, showClear = true, showButton = true, className, id, 'aria-label': ariaLabel = 'Search', ...props }, ref) => {
|
|
2781
2829
|
const [internalValue, setInternalValue] = React.useState(defaultValue);
|
|
@@ -2803,25 +2851,25 @@ const SearchField = React.forwardRef(({ placeholder = 'Search...', value, defaul
|
|
|
2803
2851
|
onSearch?.(currentValue);
|
|
2804
2852
|
}
|
|
2805
2853
|
};
|
|
2806
|
-
return (jsxRuntime.jsxs("form", { className: `${styles$
|
|
2854
|
+
return (jsxRuntime.jsxs("form", { className: `${styles$1e.searchField} ${styles$1e[size]} ${className || ''}`, onSubmit: handleSubmit, role: "search", children: [jsxRuntime.jsxs("div", { className: styles$1e.inputWrapper, children: [jsxRuntime.jsx(SearchIcon$1, { className: styles$1e.searchIcon, "aria-hidden": "true" }), jsxRuntime.jsx(Input, { ref: ref, id: id, type: "search", placeholder: placeholder, value: currentValue, onChange: handleChange, onKeyDown: handleKeyDown, disabled: disabled, className: styles$1e.input, "aria-label": ariaLabel, ...props }), showClear && currentValue && (jsxRuntime.jsx("button", { type: "button", className: styles$1e.clearButton, onClick: handleClear, disabled: disabled, "aria-label": "Clear search", children: jsxRuntime.jsx(CloseIcon, { size: 16 }) }))] }), showButton && (jsxRuntime.jsx(Button, { type: "submit", variant: "primary", size: size, disabled: disabled, children: "Search" }))] }));
|
|
2807
2855
|
});
|
|
2808
2856
|
SearchField.displayName = 'SearchField';
|
|
2809
2857
|
|
|
2810
|
-
var styles$
|
|
2858
|
+
var styles$1d = {"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"};
|
|
2811
2859
|
|
|
2812
2860
|
/**
|
|
2813
2861
|
* Layout for Hub's school-contact editor. Field controls stay injectable so
|
|
2814
2862
|
* consuming applications retain their form state, validation, and masking.
|
|
2815
2863
|
*/
|
|
2816
|
-
const SchoolContactForm = ({ mode, createFromPortalUser, firstNameField, middleInitialField, lastNameField, businessPhoneField, cellPhoneField, emailField, className = '', }) => (jsxRuntime.jsxs("div", { className: [styles$
|
|
2864
|
+
const SchoolContactForm = ({ mode, createFromPortalUser, firstNameField, middleInitialField, lastNameField, businessPhoneField, cellPhoneField, emailField, className = '', }) => (jsxRuntime.jsxs("div", { className: [styles$1d.form, className].filter(Boolean).join(' '), children: [mode === 'Add' && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("label", { className: styles$1d.portalLabel, children: "Create From Portal User" }), createFromPortalUser] }), jsxRuntime.jsx("div", { className: styles$1d.divider, children: jsxRuntime.jsx("strong", { children: "OR" }) }), jsxRuntime.jsx("p", { className: styles$1d.newContactLabel, children: "Create New Contact Without Portal Access" })] })), jsxRuntime.jsxs("div", { className: styles$1d.nameFields, children: [firstNameField, middleInitialField, lastNameField] }), jsxRuntime.jsxs("div", { className: styles$1d.phoneFields, children: [businessPhoneField, cellPhoneField] }), jsxRuntime.jsx("div", { children: emailField })] }));
|
|
2817
2865
|
|
|
2818
|
-
var styles$
|
|
2866
|
+
var styles$1c = {"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"};
|
|
2819
2867
|
|
|
2820
2868
|
const Segment = ({ options, value, onChange, size = 'md', fullWidth = false, className = '', 'aria-label': ariaLabel, }) => {
|
|
2821
|
-
return (jsxRuntime.jsx("div", { className: `${styles$
|
|
2869
|
+
return (jsxRuntime.jsx("div", { className: `${styles$1c.segment} ${styles$1c[size]} ${fullWidth ? styles$1c.fullWidth : ''} ${className}`, role: "radiogroup", "aria-label": ariaLabel, children: options.map((option) => (jsxRuntime.jsxs("button", { type: "button", className: `${styles$1c.option} ${value === option.value ? styles$1c.selected : ''} ${option.disabled ? styles$1c.disabled : ''}`, onClick: () => !option.disabled && onChange(option.value), disabled: option.disabled, role: "radio", "aria-checked": value === option.value, children: [option.icon && jsxRuntime.jsx("span", { className: styles$1c.icon, children: option.icon }), option.label] }, option.value))) }));
|
|
2822
2870
|
};
|
|
2823
2871
|
|
|
2824
|
-
var styles$
|
|
2872
|
+
var styles$1b = {"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"};
|
|
2825
2873
|
|
|
2826
2874
|
const ChevronIcon$1 = () => (jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" }) }));
|
|
2827
2875
|
const CheckIcon = () => (jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }));
|
|
@@ -2894,11 +2942,11 @@ const SelectFilter = ({ label, options = [], groupedOptions = {}, value = [], on
|
|
|
2894
2942
|
}
|
|
2895
2943
|
return `${selected.length} selected`;
|
|
2896
2944
|
};
|
|
2897
|
-
return (jsxRuntime.jsxs("div", { ref: dropdownRef, className: `${styles$
|
|
2945
|
+
return (jsxRuntime.jsxs("div", { ref: dropdownRef, className: `${styles$1b.container} ${className}`, children: [jsxRuntime.jsxs("button", { type: "button", className: `${styles$1b.trigger} ${disabled ? styles$1b.disabled : ''} ${isOpen ? styles$1b.open : ''}`, onClick: () => !disabled && setIsOpen(!isOpen), children: [jsxRuntime.jsx("span", { className: `${styles$1b.triggerText} ${selectedValues.length === 0 ? styles$1b.placeholder : ''}`, children: getDisplayText() }), jsxRuntime.jsx("span", { className: styles$1b.chevron, children: jsxRuntime.jsx(ChevronIcon$1, {}) })] }), isOpen && (jsxRuntime.jsxs("div", { className: styles$1b.dropdown, style: { width }, children: [grouped && tabs.length > 0 && (jsxRuntime.jsx("div", { className: styles$1b.tabs, children: tabs.map(tab => (jsxRuntime.jsx("button", { type: "button", className: `${styles$1b.tab} ${activeTab === tab ? styles$1b.activeTab : ''}`, onClick: () => setActiveTab(tab), children: tab.charAt(0).toUpperCase() + tab.slice(1) }, tab))) })), multiselect && (jsxRuntime.jsxs("div", { className: styles$1b.actions, children: [jsxRuntime.jsx("button", { type: "button", className: styles$1b.actionBtn, onClick: handleSelectAll, children: "Select All" }), jsxRuntime.jsx("button", { type: "button", className: styles$1b.actionBtn, onClick: handleClear, children: "Clear" })] })), jsxRuntime.jsx("div", { className: styles$1b.options, children: currentOptions.map(option => (jsxRuntime.jsxs("div", { className: `${styles$1b.option} ${selectedValues.includes(option.value) ? styles$1b.selected : ''}`, onClick: () => handleSelect(option.value), children: [multiselect && (jsxRuntime.jsx("span", { className: styles$1b.checkbox, children: selectedValues.includes(option.value) && jsxRuntime.jsx(CheckIcon, {}) })), jsxRuntime.jsx("span", { className: styles$1b.optionLabel, children: option.label })] }, option.value))) }), multiselect && (jsxRuntime.jsx("div", { className: styles$1b.footer, children: jsxRuntime.jsx("button", { type: "button", className: styles$1b.applyBtn, onClick: () => setIsOpen(false), children: "Apply" }) }))] }))] }));
|
|
2898
2946
|
};
|
|
2899
2947
|
SelectFilter.displayName = 'SelectFilter';
|
|
2900
2948
|
|
|
2901
|
-
var styles$
|
|
2949
|
+
var styles$1a = {"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"};
|
|
2902
2950
|
|
|
2903
2951
|
/**
|
|
2904
2952
|
* ServiceToggle component for a single service item.
|
|
@@ -2911,19 +2959,19 @@ const ServiceToggle = ({ label, icon, hasToggle = true, enabled = false, onToggl
|
|
|
2911
2959
|
onClick();
|
|
2912
2960
|
}
|
|
2913
2961
|
};
|
|
2914
|
-
return (jsxRuntime.jsxs("div", { className: styles$
|
|
2962
|
+
return (jsxRuntime.jsxs("div", { className: styles$1a.item, children: [jsxRuntime.jsxs("div", { className: `${styles$1a.labelContainer} ${isClickable ? styles$1a.clickable : ''}`, onClick: handleClick, children: [icon && jsxRuntime.jsx("span", { className: styles$1a.icon, children: icon }), jsxRuntime.jsx("span", { className: styles$1a.label, children: label })] }), hasToggle && (jsxRuntime.jsx(Toggle, { "aria-label": label, checked: enabled, onChange: (checked) => onToggle?.(checked), disabled: disabled, size: "sm" }))] }));
|
|
2915
2963
|
};
|
|
2916
2964
|
/**
|
|
2917
2965
|
* ServiceToggleList component for displaying a list of services with toggles.
|
|
2918
2966
|
* Used in travel request forms for service selection (Air, Hotel, Ground, etc.)
|
|
2919
2967
|
*/
|
|
2920
2968
|
const ServiceToggleList = ({ services, enabledServices = {}, onToggle, onClick, className, disabled = false, }) => {
|
|
2921
|
-
return (jsxRuntime.jsx("div", { className: `${styles$
|
|
2969
|
+
return (jsxRuntime.jsx("div", { className: `${styles$1a.list} ${className || ''}`, children: services.map((service) => (jsxRuntime.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), disabled: disabled }, service.key))) }));
|
|
2922
2970
|
};
|
|
2923
2971
|
ServiceToggle.displayName = 'ServiceToggle';
|
|
2924
2972
|
ServiceToggleList.displayName = 'ServiceToggleList';
|
|
2925
2973
|
|
|
2926
|
-
var styles$
|
|
2974
|
+
var styles$19 = {"toggle":"SupplierTypeToggle-module_toggle__x4pTJ","active":"SupplierTypeToggle-module_active__8BGSe"};
|
|
2927
2975
|
|
|
2928
2976
|
const SUPPLIER_TYPE_OPTIONS = [
|
|
2929
2977
|
{ value: 'A', label: 'Air' },
|
|
@@ -2944,10 +2992,10 @@ const SupplierTypeToggle = ({ value, defaultValue = '', onChange, disabled = fal
|
|
|
2944
2992
|
setInternalValue(nextValue);
|
|
2945
2993
|
onChange?.(nextValue);
|
|
2946
2994
|
};
|
|
2947
|
-
return (jsxRuntime.jsx("div", { className: [styles$
|
|
2995
|
+
return (jsxRuntime.jsx("div", { className: [styles$19.toggle, className].filter(Boolean).join(' '), role: "group", "aria-label": "Supplier type", children: OPTIONS.map((option) => (jsxRuntime.jsx("button", { type: "button", disabled: disabled, "aria-pressed": activeValue === option.value, className: activeValue === option.value ? styles$19.active : '', onClick: () => handleSelect(option.value), children: option.label }, option.value || 'all'))) }));
|
|
2948
2996
|
};
|
|
2949
2997
|
|
|
2950
|
-
var styles$
|
|
2998
|
+
var styles$18 = {"header":"TeamCalendarHeader-module_header__j6QB7","row":"TeamCalendarHeader-module_row__g8ntG","identity":"TeamCalendarHeader-module_identity__cvHGq","code":"TeamCalendarHeader-module_code__ClYXC","name":"TeamCalendarHeader-module_name__wqku-","content":"TeamCalendarHeader-module_content__Aqt4I"};
|
|
2951
2999
|
|
|
2952
3000
|
/**
|
|
2953
3001
|
* The heading of a team's column in the travel calendar: the team's code, its
|
|
@@ -2956,10 +3004,10 @@ var styles$17 = {"header":"TeamCalendarHeader-module_header__j6QB7","row":"TeamC
|
|
|
2956
3004
|
* It sticks to the top of its column so the team stays identifiable while the
|
|
2957
3005
|
* schedule scrolls.
|
|
2958
3006
|
*/
|
|
2959
|
-
const TeamCalendarHeader = ({ teamCode, teamFullName, children, className = '', }) => (jsxRuntime.jsxs("div", { className: `${styles$
|
|
3007
|
+
const TeamCalendarHeader = ({ teamCode, teamFullName, children, className = '', }) => (jsxRuntime.jsxs("div", { className: `${styles$18.header} ${className}`, children: [jsxRuntime.jsx("div", { className: styles$18.row, children: jsxRuntime.jsxs("div", { className: styles$18.identity, children: [jsxRuntime.jsx("div", { className: styles$18.code, children: teamCode }), teamFullName && jsxRuntime.jsx("span", { className: styles$18.name, children: teamFullName })] }) }), jsxRuntime.jsx("div", { className: styles$18.content, children: children })] }));
|
|
2960
3008
|
TeamCalendarHeader.displayName = 'TeamCalendarHeader';
|
|
2961
3009
|
|
|
2962
|
-
var styles$
|
|
3010
|
+
var styles$17 = {"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"};
|
|
2963
3011
|
|
|
2964
3012
|
const BackIcon = () => (jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("line", { x1: "19", y1: "12", x2: "5", y2: "12" }), jsxRuntime.jsx("polyline", { points: "12 19 5 12 12 5" })] }));
|
|
2965
3013
|
/**
|
|
@@ -2970,8 +3018,8 @@ const TeamHeader = ({ title: suppliedTitle, teamCode, teamName, pretitle = 'Team
|
|
|
2970
3018
|
? `${teamCode} - ${teamName}`
|
|
2971
3019
|
: teamName || teamCode || '');
|
|
2972
3020
|
const headerClasses = [
|
|
2973
|
-
styles$
|
|
2974
|
-
!title ? styles$
|
|
3021
|
+
styles$17.header,
|
|
3022
|
+
!title ? styles$17.empty : '',
|
|
2975
3023
|
className,
|
|
2976
3024
|
].filter(Boolean).join(' ');
|
|
2977
3025
|
const handleBack = () => {
|
|
@@ -2983,7 +3031,7 @@ const TeamHeader = ({ title: suppliedTitle, teamCode, teamName, pretitle = 'Team
|
|
|
2983
3031
|
window.location.href = backHref;
|
|
2984
3032
|
}
|
|
2985
3033
|
};
|
|
2986
|
-
return (jsxRuntime.jsxs("div", { className: headerClasses, "data-test": "team-header", children: [jsxRuntime.jsxs("div", { className: styles$
|
|
3034
|
+
return (jsxRuntime.jsxs("div", { className: headerClasses, "data-test": "team-header", children: [jsxRuntime.jsxs("div", { className: styles$17.left, children: [(backHref || onBack) && (jsxRuntime.jsx("button", { type: "button", className: styles$17.backButton, onClick: handleBack, "aria-label": "Go back", "data-test": "team-header-back", children: jsxRuntime.jsx(BackIcon, {}) })), jsxRuntime.jsxs("div", { className: styles$17.titles, children: [pretitle && jsxRuntime.jsx("span", { className: styles$17.pretitle, children: pretitle }), jsxRuntime.jsxs("h1", { className: styles$17.title, children: [title, "\u00A0"] })] })] }), actions && (jsxRuntime.jsx("div", { className: styles$17.actions, children: actions }))] }));
|
|
2987
3035
|
};
|
|
2988
3036
|
const DEFAULT_TABS$1 = [
|
|
2989
3037
|
{ id: 'profile', label: 'Profile' },
|
|
@@ -2992,11 +3040,11 @@ const DEFAULT_TABS$1 = [
|
|
|
2992
3040
|
{ id: 'user-access', label: 'User Access' },
|
|
2993
3041
|
];
|
|
2994
3042
|
/** Router-agnostic counterpart of Hub's team-management submenu. */
|
|
2995
|
-
const TeamSubMenu = ({ tabs = DEFAULT_TABS$1, activeTab, onTabChange, className = '' }) => (jsxRuntime.jsx("nav", { className: [styles$
|
|
3043
|
+
const TeamSubMenu = ({ tabs = DEFAULT_TABS$1, activeTab, onTabChange, className = '' }) => (jsxRuntime.jsx("nav", { className: [styles$17.subMenu, className].filter(Boolean).join(' '), "aria-label": "Team management sections", "data-test": "team-management-tabs", children: tabs.map((tab) => (jsxRuntime.jsx("button", { type: "button", className: activeTab === tab.id ? styles$17.activeTab : '', "aria-current": activeTab === tab.id ? 'page' : undefined, "data-test": `team-management-tab-${tab.id}`, onClick: () => onTabChange?.(tab.id), children: tab.label }, tab.id))) }));
|
|
2996
3044
|
TeamHeader.displayName = 'TeamHeader';
|
|
2997
3045
|
TeamSubMenu.displayName = 'TeamSubMenu';
|
|
2998
3046
|
|
|
2999
|
-
var styles$
|
|
3047
|
+
var styles$16 = {"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"};
|
|
3000
3048
|
|
|
3001
3049
|
const PlaneIcon$2 = () => (jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: jsxRuntime.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" }) }));
|
|
3002
3050
|
const BusIcon$1 = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("rect", { x: "4", y: "4", width: "16", height: "14", rx: "2" }), jsxRuntime.jsx("path", { d: "M8 6v6" }), jsxRuntime.jsx("path", { d: "M16 6v6" }), jsxRuntime.jsx("circle", { cx: "8", cy: "16", r: "1" }), jsxRuntime.jsx("circle", { cx: "16", cy: "16", r: "1" })] }));
|
|
@@ -3006,41 +3054,41 @@ const ArrowIcon = () => (jsxRuntime.jsxs("svg", { width: "12", height: "12", vie
|
|
|
3006
3054
|
* Base TripSegment component wrapper
|
|
3007
3055
|
*/
|
|
3008
3056
|
const TripSegment = ({ type: _type, variant = 'light', className = '', children, }) => {
|
|
3009
|
-
return (jsxRuntime.jsx("div", { className: `${styles$
|
|
3057
|
+
return (jsxRuntime.jsx("div", { className: `${styles$16.segment} ${styles$16[variant]} ${className}`, children: children }));
|
|
3010
3058
|
};
|
|
3011
3059
|
/**
|
|
3012
3060
|
* AirSegment component for displaying flight information
|
|
3013
3061
|
*/
|
|
3014
3062
|
const AirSegment = ({ flights, variant = 'light', className = '', }) => {
|
|
3015
3063
|
if (!flights || flights.length === 0) {
|
|
3016
|
-
return (jsxRuntime.jsx(TripSegment, { type: "air", variant: variant, className: className, children: jsxRuntime.jsx("span", { className: styles$
|
|
3064
|
+
return (jsxRuntime.jsx(TripSegment, { type: "air", variant: variant, className: className, children: jsxRuntime.jsx("span", { className: styles$16.empty, children: "No flights" }) }));
|
|
3017
3065
|
}
|
|
3018
|
-
return (jsxRuntime.jsx(TripSegment, { type: "air", variant: variant, className: className, children: flights.map((flight, i) => (jsxRuntime.jsxs("div", { className: styles$
|
|
3066
|
+
return (jsxRuntime.jsx(TripSegment, { type: "air", variant: variant, className: className, children: flights.map((flight, i) => (jsxRuntime.jsxs("div", { className: styles$16.item, children: [jsxRuntime.jsxs("div", { className: styles$16.itemHeader, children: [jsxRuntime.jsx(PlaneIcon$2, {}), jsxRuntime.jsx("span", { className: styles$16.itemType, children: flight.type === 'charter' ? 'Charter' : 'Commercial' })] }), jsxRuntime.jsxs("div", { className: styles$16.route, children: [jsxRuntime.jsx("span", { className: styles$16.location, children: flight.departure }), jsxRuntime.jsx(ArrowIcon, {}), jsxRuntime.jsx("span", { className: styles$16.location, children: flight.arrival })] }), jsxRuntime.jsxs("div", { className: styles$16.details, children: [jsxRuntime.jsx("span", { children: flight.departureDate }), flight.departureTime && jsxRuntime.jsx("span", { children: flight.departureTime })] }), flight.airline && (jsxRuntime.jsxs("div", { className: styles$16.details, children: [jsxRuntime.jsx("span", { children: flight.airline }), flight.flightNumber && jsxRuntime.jsxs("span", { children: ["#", flight.flightNumber] })] }))] }, i))) }));
|
|
3019
3067
|
};
|
|
3020
3068
|
/**
|
|
3021
3069
|
* GroundSegment component for displaying ground transportation
|
|
3022
3070
|
*/
|
|
3023
3071
|
const GroundSegment = ({ segments, variant = 'light', className = '', }) => {
|
|
3024
3072
|
if (!segments || segments.length === 0) {
|
|
3025
|
-
return (jsxRuntime.jsx(TripSegment, { type: "ground", variant: variant, className: className, children: jsxRuntime.jsx("span", { className: styles$
|
|
3073
|
+
return (jsxRuntime.jsx(TripSegment, { type: "ground", variant: variant, className: className, children: jsxRuntime.jsx("span", { className: styles$16.empty, children: "No ground transportation" }) }));
|
|
3026
3074
|
}
|
|
3027
|
-
return (jsxRuntime.jsx(TripSegment, { type: "ground", variant: variant, className: className, children: segments.map((segment, i) => (jsxRuntime.jsxs("div", { className: styles$
|
|
3075
|
+
return (jsxRuntime.jsx(TripSegment, { type: "ground", variant: variant, className: className, children: segments.map((segment, i) => (jsxRuntime.jsxs("div", { className: styles$16.item, children: [jsxRuntime.jsxs("div", { className: styles$16.itemHeader, children: [jsxRuntime.jsx(BusIcon$1, {}), jsxRuntime.jsx("span", { className: styles$16.itemType, children: segment.type.charAt(0).toUpperCase() + segment.type.slice(1) })] }), jsxRuntime.jsxs("div", { className: styles$16.route, children: [jsxRuntime.jsx("span", { className: styles$16.location, children: segment.pickupLocation }), jsxRuntime.jsx(ArrowIcon, {}), jsxRuntime.jsx("span", { className: styles$16.location, children: segment.dropoffLocation })] }), jsxRuntime.jsxs("div", { className: styles$16.details, children: [jsxRuntime.jsx("span", { children: segment.pickupDate }), segment.pickupTime && jsxRuntime.jsx("span", { children: segment.pickupTime })] }), segment.company && (jsxRuntime.jsxs("div", { className: styles$16.details, children: [jsxRuntime.jsx("span", { children: segment.company }), segment.vehicleCount && jsxRuntime.jsxs("span", { children: [segment.vehicleCount, " vehicles"] })] }))] }, i))) }));
|
|
3028
3076
|
};
|
|
3029
3077
|
/**
|
|
3030
3078
|
* HotelSegment component for displaying hotel information
|
|
3031
3079
|
*/
|
|
3032
3080
|
const HotelSegment = ({ hotels, variant = 'light', className = '', }) => {
|
|
3033
3081
|
if (!hotels || hotels.length === 0) {
|
|
3034
|
-
return (jsxRuntime.jsx(TripSegment, { type: "hotel", variant: variant, className: className, children: jsxRuntime.jsx("span", { className: styles$
|
|
3082
|
+
return (jsxRuntime.jsx(TripSegment, { type: "hotel", variant: variant, className: className, children: jsxRuntime.jsx("span", { className: styles$16.empty, children: "No hotels" }) }));
|
|
3035
3083
|
}
|
|
3036
|
-
return (jsxRuntime.jsx(TripSegment, { type: "hotel", variant: variant, className: className, children: hotels.map((hotel, i) => (jsxRuntime.jsxs("div", { className: styles$
|
|
3084
|
+
return (jsxRuntime.jsx(TripSegment, { type: "hotel", variant: variant, className: className, children: hotels.map((hotel, i) => (jsxRuntime.jsxs("div", { className: styles$16.item, children: [jsxRuntime.jsxs("div", { className: styles$16.itemHeader, children: [jsxRuntime.jsx(HotelIcon$2, {}), jsxRuntime.jsx("span", { className: styles$16.itemName, children: hotel.name })] }), hotel.city && (jsxRuntime.jsx("div", { className: styles$16.details, children: jsxRuntime.jsx("span", { children: hotel.city }) })), jsxRuntime.jsxs("div", { className: styles$16.dates, children: [jsxRuntime.jsx("span", { children: hotel.checkIn }), jsxRuntime.jsx("span", { children: "\u2013" }), jsxRuntime.jsx("span", { children: hotel.checkOut })] }), hotel.roomCount && (jsxRuntime.jsx("div", { className: styles$16.details, children: jsxRuntime.jsxs("span", { children: [hotel.roomCount, " rooms"] }) }))] }, i))) }));
|
|
3037
3085
|
};
|
|
3038
3086
|
TripSegment.displayName = 'TripSegment';
|
|
3039
3087
|
AirSegment.displayName = 'AirSegment';
|
|
3040
3088
|
GroundSegment.displayName = 'GroundSegment';
|
|
3041
3089
|
HotelSegment.displayName = 'HotelSegment';
|
|
3042
3090
|
|
|
3043
|
-
var styles$
|
|
3091
|
+
var styles$15 = {"calculator":"AcmiQuoteCalculator-module_calculator__-6rXx","errorSummary":"AcmiQuoteCalculator-module_errorSummary__3UXtU","alertMessage":"AcmiQuoteCalculator-module_alertMessage__B-nGB","columns":"AcmiQuoteCalculator-module_columns__VlLlN","panel":"AcmiQuoteCalculator-module_panel__y5d5u","panelTitle":"AcmiQuoteCalculator-module_panelTitle__LSjm3","legs":"AcmiQuoteCalculator-module_legs__ULi1q","leg":"AcmiQuoteCalculator-module_leg__HJ-sm","automaticLeg":"AcmiQuoteCalculator-module_automaticLeg__Hvg55","legIndex":"AcmiQuoteCalculator-module_legIndex__Bkql5","legError":"AcmiQuoteCalculator-module_legError__nUX-M","actions":"AcmiQuoteCalculator-module_actions__fzH-d","results":"AcmiQuoteCalculator-module_results__U83fJ","resultGrid":"AcmiQuoteCalculator-module_resultGrid__f7Ktc","finalPrice":"AcmiQuoteCalculator-module_finalPrice__KGEGz","contractFacts":"AcmiQuoteCalculator-module_contractFacts__m55AN","pricedLegs":"AcmiQuoteCalculator-module_pricedLegs__AxxFS","pricedLegHeader":"AcmiQuoteCalculator-module_pricedLegHeader__e7bmc","pricedLeg":"AcmiQuoteCalculator-module_pricedLeg__I1XjZ"};
|
|
3044
3092
|
|
|
3045
3093
|
/** Carriers STM currently holds ACMI agreements with. */
|
|
3046
3094
|
const ACMI_CARRIER_OPTIONS = [
|
|
@@ -3156,19 +3204,19 @@ const AcmiQuoteCalculator = ({ carrierOptions = ACMI_CARRIER_OPTIONS, aircraftOp
|
|
|
3156
3204
|
const seatHint = specs
|
|
3157
3205
|
? `Maximum ${specs.seats} passengers for this aircraft`
|
|
3158
3206
|
: 'Select an aircraft to see seat capacity';
|
|
3159
|
-
return (jsxRuntime.jsxs("div", { className: [styles$
|
|
3160
|
-
styles$
|
|
3161
|
-
positioningMode === 'automatic' ? styles$
|
|
3162
|
-
].filter(Boolean).join(' '), "data-test": "acmi-leg", children: [jsxRuntime.jsxs("span", { className: styles$
|
|
3207
|
+
return (jsxRuntime.jsxs("div", { className: [styles$15.calculator, className].filter(Boolean).join(' '), "data-test": "acmi-quote-calculator", children: [showErrors && errorList.length > 0 && (jsxRuntime.jsx(Alert, { variant: "error", title: "Fix these before calculating", children: jsxRuntime.jsx("ul", { className: styles$15.errorSummary, "data-test": "acmi-error-summary", children: errorList.map(([field, message]) => (jsxRuntime.jsx("li", { children: message }, field))) }) })), calculationError && (jsxRuntime.jsx(Alert, { variant: "error", title: "Quote could not be calculated", children: jsxRuntime.jsx("p", { className: styles$15.alertMessage, "data-test": "acmi-calculation-error", children: calculationError }) })), jsxRuntime.jsxs("div", { className: styles$15.columns, children: [jsxRuntime.jsxs("section", { className: styles$15.panel, "aria-label": "Quote configuration", children: [jsxRuntime.jsx("h3", { className: styles$15.panelTitle, children: "Quote Configuration" }), jsxRuntime.jsx(Select, { id: "acmi-carrier", label: "Carrier", placeholder: "Select Carrier\u2026", options: carrierOptions, value: inputs.carrier, error: showErrors ? errors.carrier : undefined, onChange: (event) => updateCarrier(event.target.value), "data-test": "acmi-carrier" }), jsxRuntime.jsx(Select, { id: "acmi-aircraft", label: "Aircraft Type", placeholder: "Select Aircraft\u2026", options: availableAircraftOptions, value: inputs.aircraft, disabled: !inputs.carrier, error: showErrors ? errors.aircraft : undefined, onChange: (event) => update('aircraft', event.target.value), "data-test": "acmi-aircraft" }), jsxRuntime.jsx(Input, { id: "acmi-passengers", type: "number", label: "Number of Passengers", placeholder: "Enter passenger count", helperText: seatHint, value: inputs.passengers, error: showErrors ? errors.passengers : undefined, onChange: (event) => update('passengers', event.target.value), "data-test": "acmi-passengers" }), jsxRuntime.jsx(Input, { id: "acmi-fuel-price", type: "number", step: "0.01", label: "Fuel Price ($/gallon)", placeholder: "e.g. 5.50", value: inputs.fuelPrice, error: showErrors ? errors.fuelPrice : undefined, onChange: (event) => update('fuelPrice', event.target.value), "data-test": "acmi-fuel-price" }), jsxRuntime.jsx(Input, { id: "acmi-markup", type: "number", step: "0.1", label: "Markup %", helperText: "Standard is 7% \u2014 adjustable as needed", value: inputs.markupPercent, onChange: (event) => update('markupPercent', event.target.value), "data-test": "acmi-markup" }), jsxRuntime.jsx(Input, { id: "acmi-insurance", label: "Insurance (Flat Fee)", helperText: `${currency.format(insuranceFlat)} per trip (locked)`, value: currency.format(insuranceFlat), readOnly: true, disabled: true, "data-test": "acmi-insurance" }), jsxRuntime.jsx(Input, { id: "acmi-crew-nights", type: "number", label: "Crew Nights (RON)", helperText: "Number of nights crew stays away from base", value: inputs.crewNights, onChange: (event) => update('crewNights', event.target.value), "data-test": "acmi-crew-nights" }), showTripMonth && (jsxRuntime.jsx(Select, { id: "acmi-trip-month", label: "Trip Month (for Historic Winds)", options: TRIP_MONTH_OPTIONS, helperText: "Use this only when the configured pricing service applies a historic winds profile.", value: inputs.tripMonth, onChange: (event) => update('tripMonth', event.target.value), "data-test": "acmi-trip-month" }))] }), jsxRuntime.jsxs("section", { className: styles$15.panel, "aria-label": "Flight itinerary", children: [jsxRuntime.jsx("h3", { className: styles$15.panelTitle, children: "Flight Itinerary" }), jsxRuntime.jsx(Alert, { variant: "primary", children: positioningMode === 'automatic' ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: ["Enter ", jsxRuntime.jsx("strong", { children: "live legs only" }), ", in trip order. The host pricing engine adds positioning ferry legs automatically. Leave flight time blank to use its route estimate; an entered time is treated as an explicit contractual input."] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: ["Enter ", jsxRuntime.jsx("strong", { children: "every flown leg in order" }), ", including positioning. Mark each leg as live or ferry. Leave flight time blank to use the pricing engine\u2019s route estimate; an entered time is treated as an explicit contractual input."] })) }), showErrors && errors.legs && (jsxRuntime.jsx("p", { className: styles$15.legError, role: "alert", "data-test": "acmi-legs-error", children: errors.legs })), jsxRuntime.jsx("ol", { className: styles$15.legs, children: inputs.legs.map((leg, index) => (jsxRuntime.jsxs("li", { className: [
|
|
3208
|
+
styles$15.leg,
|
|
3209
|
+
positioningMode === 'automatic' ? styles$15.automaticLeg : '',
|
|
3210
|
+
].filter(Boolean).join(' '), "data-test": "acmi-leg", children: [jsxRuntime.jsxs("span", { className: styles$15.legIndex, children: ["Leg ", index + 1] }), positioningMode === 'explicit' && (jsxRuntime.jsx(Select, { id: `${leg.id}-type`, size: "sm", label: "Leg type", options: [
|
|
3163
3211
|
{ value: 'live', label: 'Live' },
|
|
3164
3212
|
{ value: 'ferry', label: 'Ferry' },
|
|
3165
|
-
], value: leg.type ?? 'live', onChange: (event) => updateLeg(leg.id, { type: event.target.value }), "data-test": "acmi-leg-type" })), jsxRuntime.jsx(Input, { id: `${leg.id}-origin`, size: "sm", label: "From", maxLength: 4, value: leg.origin, onChange: (event) => updateLeg(leg.id, { origin: event.target.value.toUpperCase() }), "data-test": "acmi-leg-origin" }), jsxRuntime.jsx(Input, { id: `${leg.id}-destination`, size: "sm", label: "To", maxLength: 4, value: leg.destination, onChange: (event) => updateLeg(leg.id, { destination: event.target.value.toUpperCase() }), "data-test": "acmi-leg-destination" }), jsxRuntime.jsx(Input, { id: `${leg.id}-flight-time`, size: "sm", type: "number", step: "0.1", label: "Flight time (h, optional)", value: leg.flightTime, onChange: (event) => updateLeg(leg.id, { flightTime: event.target.value }), "data-test": "acmi-leg-flight-time" }), jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Remove leg ${index + 1}`, disabled: inputs.legs.length === 1, onClick: () => removeLeg(leg.id), "data-test": "acmi-remove-leg", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) })] }, leg.id))) }), jsxRuntime.jsxs("div", { className: styles$
|
|
3213
|
+
], value: leg.type ?? 'live', onChange: (event) => updateLeg(leg.id, { type: event.target.value }), "data-test": "acmi-leg-type" })), jsxRuntime.jsx(Input, { id: `${leg.id}-origin`, size: "sm", label: "From", maxLength: 4, value: leg.origin, onChange: (event) => updateLeg(leg.id, { origin: event.target.value.toUpperCase() }), "data-test": "acmi-leg-origin" }), jsxRuntime.jsx(Input, { id: `${leg.id}-destination`, size: "sm", label: "To", maxLength: 4, value: leg.destination, onChange: (event) => updateLeg(leg.id, { destination: event.target.value.toUpperCase() }), "data-test": "acmi-leg-destination" }), jsxRuntime.jsx(Input, { id: `${leg.id}-flight-time`, size: "sm", type: "number", step: "0.1", label: "Flight time (h, optional)", value: leg.flightTime, onChange: (event) => updateLeg(leg.id, { flightTime: event.target.value }), "data-test": "acmi-leg-flight-time" }), jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Remove leg ${index + 1}`, disabled: inputs.legs.length === 1, onClick: () => removeLeg(leg.id), "data-test": "acmi-remove-leg", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) })] }, leg.id))) }), jsxRuntime.jsxs("div", { className: styles$15.actions, children: [jsxRuntime.jsx(Button, { variant: "outline", size: "sm", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 16 }), onClick: addLeg, "data-test": "acmi-add-leg", children: "Add Flight Leg" }), jsxRuntime.jsx(Button, { size: "sm", loading: calculating, onClick: calculate, "data-test": "acmi-calculate", children: calculating ? 'Calculating' : 'Calculate Quote' }), result && onSubmitForApproval && (jsxRuntime.jsx(Button, { variant: "secondary", size: "sm", onClick: () => onSubmitForApproval(inputs), "data-test": "acmi-submit-approval", children: "Use This Total" }))] })] })] }), result && (jsxRuntime.jsxs("section", { className: styles$15.results, "aria-label": "Quote summary", "data-test": "acmi-results", children: [jsxRuntime.jsx("h3", { className: styles$15.panelTitle, children: "Quote Summary" }), jsxRuntime.jsxs("dl", { className: styles$15.resultGrid, children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Operating Subtotal" }), jsxRuntime.jsx("dd", { children: currency.format(result.operatingSubtotal) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Markup Applied" }), jsxRuntime.jsx("dd", { children: currency.format(result.markupAmount) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Insurance (Flat Fee)" }), jsxRuntime.jsx("dd", { children: currency.format(result.insuranceAmount) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Pre-Tax Total" }), jsxRuntime.jsx("dd", { children: currency.format(result.preTaxTotal) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Federal Excise Tax" }), jsxRuntime.jsx("dd", { children: currency.format(result.fet) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Segment Fees" }), jsxRuntime.jsx("dd", { children: currency.format(result.segmentFees) })] })] }), jsxRuntime.jsxs("p", { className: styles$15.finalPrice, "data-test": "acmi-final-price", children: [jsxRuntime.jsx("span", { children: "Total Quoted Price" }), jsxRuntime.jsx("strong", { children: currency.format(result.finalPrice) })] }), result.pricingDetails && (jsxRuntime.jsxs("dl", { className: styles$15.contractFacts, "data-test": "acmi-pricing-details", children: [jsxRuntime.jsxs("div", { "data-test": "acmi-ferry-floor", children: [jsxRuntime.jsx("dt", { children: "Ferry block time" }), jsxRuntime.jsxs("dd", { children: [result.pricingDetails.ferryBlockHours.toFixed(2), " h", result.pricingDetails.ferryMinimumHours
|
|
3166
3214
|
? ` · ${result.pricingDetails.ferryMinimumHours.toFixed(2)} h minimum per estimated SkyWest ferry leg`
|
|
3167
|
-
: ''] })] }), jsxRuntime.jsxs("div", { "data-test": "acmi-fuel-buffer", children: [jsxRuntime.jsx("dt", { children: "Fuel buffer" }), jsxRuntime.jsxs("dd", { children: [(result.pricingDetails.fuelBufferPercent * 100).toFixed(0), "% \u00B7 ", currency.format(result.pricingDetails.fuelBufferAmount)] })] }), jsxRuntime.jsxs("div", { "data-test": "acmi-screening", children: [jsxRuntime.jsx("dt", { children: "Security screening" }), jsxRuntime.jsx("dd", { children: currency.format(result.pricingDetails.screeningAmount) })] })] })), result.legs && result.legs.length > 0 && (jsxRuntime.jsxs("div", { className: styles$
|
|
3215
|
+
: ''] })] }), jsxRuntime.jsxs("div", { "data-test": "acmi-fuel-buffer", children: [jsxRuntime.jsx("dt", { children: "Fuel buffer" }), jsxRuntime.jsxs("dd", { children: [(result.pricingDetails.fuelBufferPercent * 100).toFixed(0), "% \u00B7 ", currency.format(result.pricingDetails.fuelBufferAmount)] })] }), jsxRuntime.jsxs("div", { "data-test": "acmi-screening", children: [jsxRuntime.jsx("dt", { children: "Security screening" }), jsxRuntime.jsx("dd", { children: currency.format(result.pricingDetails.screeningAmount) })] })] })), result.legs && result.legs.length > 0 && (jsxRuntime.jsxs("div", { className: styles$15.pricedLegs, "data-test": "acmi-priced-legs", children: [jsxRuntime.jsx("h4", { children: "Backend-priced itinerary" }), jsxRuntime.jsxs("div", { className: styles$15.pricedLegHeader, "aria-hidden": "true", children: [jsxRuntime.jsx("span", { children: "Leg" }), jsxRuntime.jsx("span", { children: "Type" }), jsxRuntime.jsx("span", { children: "Block" }), jsxRuntime.jsx("span", { children: "Total" })] }), result.legs.map((leg) => (jsxRuntime.jsxs("div", { className: styles$15.pricedLeg, "data-test": "acmi-priced-leg", children: [jsxRuntime.jsxs("span", { children: [leg.origin, " \u2192 ", leg.destination] }), jsxRuntime.jsx("span", { "data-test": "acmi-priced-leg-type", children: leg.type === 'ferry' ? 'Ferry' : 'Live' }), jsxRuntime.jsxs("span", { "data-test": "acmi-priced-leg-block", children: [leg.blockHours.toFixed(2), " h"] }), jsxRuntime.jsx("span", { children: currency.format(leg.total) })] }, leg.id)))] }))] }))] }));
|
|
3168
3216
|
};
|
|
3169
3217
|
AcmiQuoteCalculator.displayName = 'AcmiQuoteCalculator';
|
|
3170
3218
|
|
|
3171
|
-
var styles$
|
|
3219
|
+
var styles$14 = {"wrapper":"AgentGroupTravelRequestsTable-module_wrapper__xKyhF","toolbar":"AgentGroupTravelRequestsTable-module_toolbar__VMiqx","showHideAll":"AgentGroupTravelRequestsTable-module_showHideAll__t6kBh","filters":"AgentGroupTravelRequestsTable-module_filters__c1W6C","filterField":"AgentGroupTravelRequestsTable-module_filterField__n9Qu8","tableScroll":"AgentGroupTravelRequestsTable-module_tableScroll__-rt-g","table":"AgentGroupTravelRequestsTable-module_table__Yb4lC","colExpand":"AgentGroupTravelRequestsTable-module_colExpand__WcfMW","colDelete":"AgentGroupTravelRequestsTable-module_colDelete__Yi5vY","colDate":"AgentGroupTravelRequestsTable-module_colDate__XyzfB","accountRow":"AgentGroupTravelRequestsTable-module_accountRow__4bDJV","requestRow":"AgentGroupTravelRequestsTable-module_requestRow__UJ5Mm","empty":"AgentGroupTravelRequestsTable-module_empty__XemcW","expander":"AgentGroupTravelRequestsTable-module_expander__fNedP","iconButton":"AgentGroupTravelRequestsTable-module_iconButton__2Yu4i","muted":"AgentGroupTravelRequestsTable-module_muted__Dy5as","idLink":"AgentGroupTravelRequestsTable-module_idLink__sEuEa","hasNotes":"AgentGroupTravelRequestsTable-module_hasNotes__W4TlG","startSoon":"AgentGroupTravelRequestsTable-module_startSoon__cbWHx","dueStatus":"AgentGroupTravelRequestsTable-module_dueStatus__E0FBZ","dueGreen":"AgentGroupTravelRequestsTable-module_dueGreen__5mSLo","dueRed":"AgentGroupTravelRequestsTable-module_dueRed__qgngM","dueGray":"AgentGroupTravelRequestsTable-module_dueGray__xH3dv","pnrButton":"AgentGroupTravelRequestsTable-module_pnrButton__5VKxA","pnrGreen":"AgentGroupTravelRequestsTable-module_pnrGreen__aBwwW","pnrBlue":"AgentGroupTravelRequestsTable-module_pnrBlue__gta71","pnrGray":"AgentGroupTravelRequestsTable-module_pnrGray__-SLa0","deleteButton":"AgentGroupTravelRequestsTable-module_deleteButton__oeLl9","subPnrRow":"AgentGroupTravelRequestsTable-module_subPnrRow__z8ctM","subPnrPanel":"AgentGroupTravelRequestsTable-module_subPnrPanel__jf5pq","legend":"AgentGroupTravelRequestsTable-module_legend__Wr9jV"};
|
|
3172
3220
|
|
|
3173
3221
|
const PNR_PLACEHOLDER = '111111';
|
|
3174
3222
|
const COLUMN_COUNT = 19;
|
|
@@ -3225,18 +3273,18 @@ const computeTravelTypeCodes = (request) => {
|
|
|
3225
3273
|
codes.push(request.groupHotel ? 'GH' : 'H');
|
|
3226
3274
|
return codes;
|
|
3227
3275
|
};
|
|
3228
|
-
const DUE_TONE_CLASS = { green: styles$
|
|
3229
|
-
const PNR_TONE_CLASS = { green: styles$
|
|
3276
|
+
const DUE_TONE_CLASS = { green: styles$14.dueGreen, red: styles$14.dueRed, gray: styles$14.dueGray };
|
|
3277
|
+
const PNR_TONE_CLASS = { green: styles$14.pnrGreen, blue: styles$14.pnrBlue, gray: styles$14.pnrGray };
|
|
3230
3278
|
const DueStatusCell = ({ status, today, onToggle, }) => {
|
|
3231
3279
|
const tone = dueStatusTone(status, today);
|
|
3232
3280
|
const canToggle = Boolean(onToggle) && (Boolean(status.dueDate) || status.complete);
|
|
3233
3281
|
const label = status.dueDate ? formatShortDate$1(status.dueDate) : status.complete ? 'Complete' : '—';
|
|
3234
|
-
const className = [styles$
|
|
3282
|
+
const className = [styles$14.dueStatus, DUE_TONE_CLASS[tone]].join(' ');
|
|
3235
3283
|
if (!canToggle)
|
|
3236
3284
|
return jsxRuntime.jsx("span", { className: className, children: label });
|
|
3237
3285
|
return (jsxRuntime.jsx("button", { type: "button", className: className, onClick: onToggle, title: "Click to toggle complete", children: label }));
|
|
3238
3286
|
};
|
|
3239
|
-
const PnrButton = ({ label, tone, onClick, dataTest, }) => (jsxRuntime.jsx("button", { type: "button", className: [styles$
|
|
3287
|
+
const PnrButton = ({ label, tone, onClick, dataTest, }) => (jsxRuntime.jsx("button", { type: "button", className: [styles$14.pnrButton, PNR_TONE_CLASS[tone]].join(' '), title: "Click to copy", onClick: onClick, "data-test": dataTest, children: label }));
|
|
3240
3288
|
/** Hub's agent-facing list of open Group Travel Requests, grouped by school, one row per PNR group. */
|
|
3241
3289
|
const AgentGroupTravelRequestsTable = ({ requests, sports = [], views = [], today = new Date().toISOString().slice(0, 10), onOpenRequest, onViewMasterTrip, onDeleteRequest, onCopyPnr, onToggleDueStatus, onSubmittedDateChange, onQuoteSentDateChange, className = '', }) => {
|
|
3242
3290
|
const [sportFilter, setSportFilter] = React.useState('');
|
|
@@ -3291,15 +3339,15 @@ const AgentGroupTravelRequestsTable = ({ requests, sports = [], views = [], toda
|
|
|
3291
3339
|
setDateEdits((current) => ({ ...current, [id]: { ...current[id], submittedDate: value } }));
|
|
3292
3340
|
onSubmittedDateChange?.(id, value);
|
|
3293
3341
|
};
|
|
3294
|
-
return (jsxRuntime.jsxs("div", { className: [styles$
|
|
3342
|
+
return (jsxRuntime.jsxs("div", { className: [styles$14.wrapper, className].filter(Boolean).join(' '), "data-test": "agent-gtr-table", children: [jsxRuntime.jsxs("div", { className: styles$14.toolbar, children: [jsxRuntime.jsxs("button", { type: "button", className: styles$14.showHideAll, title: "Show/Hide all PNRs", onClick: toggleExpandAll, disabled: multiPnrIds.length === 0, "data-test": "agent-gtr-toggle-all", children: [allExpanded ? jsxRuntime.jsx(ChevronUpIcon, { size: 16 }) : jsxRuntime.jsx(ChevronDownIcon$1, { size: 16 }), jsxRuntime.jsx("span", { children: allExpanded ? 'Collapse all PNRs' : 'Expand all PNRs' })] }), jsxRuntime.jsxs("div", { className: styles$14.filters, children: [jsxRuntime.jsxs("label", { className: styles$14.filterField, children: [jsxRuntime.jsx("span", { children: "Filter by sport" }), jsxRuntime.jsxs("select", { value: sportFilter, onChange: (event) => setSportFilter(event.target.value), "data-test": "agent-gtr-sport-filter", children: [jsxRuntime.jsx("option", { value: "", children: "All Sports" }), sports.map((sport) => (jsxRuntime.jsx("option", { value: sport.code, children: sport.label }, sport.code)))] })] }), views.length > 0 && (jsxRuntime.jsxs("label", { className: styles$14.filterField, children: [jsxRuntime.jsx("span", { children: "Filter by view" }), jsxRuntime.jsxs("select", { value: viewFilter, onChange: (event) => setViewFilter(event.target.value), "data-test": "agent-gtr-view-filter", children: [jsxRuntime.jsx("option", { value: "", children: "All Accounts" }), views.map((view) => (jsxRuntime.jsx("option", { value: view.id, children: view.label }, view.id)))] })] }))] })] }), jsxRuntime.jsx("div", { className: styles$14.tableScroll, children: jsxRuntime.jsxs("table", { className: styles$14.table, children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { className: styles$14.colExpand, children: jsxRuntime.jsx("span", { className: "sr-only", children: "Expand" }) }), jsxRuntime.jsx("th", { children: "Source" }), jsxRuntime.jsx("th", { children: "Master Trip" }), jsxRuntime.jsx("th", { children: "ID" }), jsxRuntime.jsx("th", { children: "Start Date" }), jsxRuntime.jsx("th", { children: "Name" }), jsxRuntime.jsx("th", { children: "Sport" }), jsxRuntime.jsxs("th", { children: [jsxRuntime.jsx(PlaneIcon$3, { size: 16 }), jsxRuntime.jsx("span", { className: "sr-only", children: "Carrier" })] }), jsxRuntime.jsx("th", { children: "Routing" }), jsxRuntime.jsx("th", { children: "Submitted" }), jsxRuntime.jsx("th", { children: "Type" }), jsxRuntime.jsx("th", { children: "Quote Sent" }), jsxRuntime.jsx("th", { children: "Confirmation" }), jsxRuntime.jsx("th", { children: "Deposit" }), jsxRuntime.jsx("th", { children: "Utilization" }), jsxRuntime.jsx("th", { children: "Names" }), jsxRuntime.jsx("th", { children: "Ticketing" }), jsxRuntime.jsx("th", { children: "PNR" }), jsxRuntime.jsx("th", { className: styles$14.colDelete, children: jsxRuntime.jsx("span", { className: "sr-only", children: "Delete" }) })] }) }), jsxRuntime.jsxs("tbody", { children: [!groups.length && (jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { colSpan: COLUMN_COUNT, className: styles$14.empty, "data-test": "agent-gtr-empty", children: "No open group travel requests match these filters." }) })), groups.map((group) => (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx("tr", { className: styles$14.accountRow, children: jsxRuntime.jsx("td", { colSpan: COLUMN_COUNT, children: group.accountName }) }), group.items.map((request) => {
|
|
3295
3343
|
const isMulti = request.pnrs.length > 1;
|
|
3296
3344
|
const isExpanded = expandedIds.has(request.id);
|
|
3297
3345
|
const startSoon = daysUntil(request.startDate, today) < 8;
|
|
3298
|
-
return (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsxs("tr", { className: styles$
|
|
3299
|
-
})] }, `account-${group.accountName}`)))] })] }) }), jsxRuntime.jsx("p", { className: styles$
|
|
3346
|
+
return (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsxs("tr", { className: styles$14.requestRow, "data-test": "agent-gtr-row", children: [jsxRuntime.jsx("td", { className: styles$14.colExpand, children: isMulti && (jsxRuntime.jsx("button", { type: "button", className: styles$14.expander, "aria-expanded": isExpanded, "aria-label": `${isExpanded ? 'Collapse' : 'Expand'} PNRs for ${request.name}`, onClick: () => toggleExpanded(request.id), "data-test": "agent-gtr-expand-row", children: isExpanded ? jsxRuntime.jsx(ChevronDownIcon$1, { size: 16 }) : jsxRuntime.jsx(ChevronRightIcon$1, { size: 16 }) })) }), jsxRuntime.jsx("td", { children: request.source === 'client' ? 'C' : 'A' }), jsxRuntime.jsx("td", { children: request.masterTripId ? (jsxRuntime.jsx("button", { type: "button", className: styles$14.iconButton, "aria-label": `View master trip ${request.masterTripId}`, title: `View Master Trip ${request.masterTripId}`, onClick: () => onViewMasterTrip?.(request.masterTripId), children: jsxRuntime.jsx(SearchIcon$1, { size: 16 }) })) : (jsxRuntime.jsx("span", { className: styles$14.muted, children: "\u2014" })) }), jsxRuntime.jsx("td", { children: jsxRuntime.jsx("button", { type: "button", className: [styles$14.idLink, request.notes ? styles$14.hasNotes : ''].filter(Boolean).join(' '), title: request.notes || undefined, onClick: () => onOpenRequest?.(request.id), "data-test": "agent-gtr-open-request", children: request.id }) }), jsxRuntime.jsx("td", { className: startSoon ? styles$14.startSoon : '', children: formatShortDate$1(request.startDate) }), jsxRuntime.jsx("td", { children: truncate(request.name) }), jsxRuntime.jsx("td", { children: truncate(request.sport) }), jsxRuntime.jsx("td", { children: isMulti ? 'Multi' : request.carrier || '' }), jsxRuntime.jsx("td", { children: isMulti ? 'Multi' : request.routing }), jsxRuntime.jsx("td", { className: styles$14.colDate, children: jsxRuntime.jsx(Datepicker, { "aria-label": `Submitted date for request ${request.id}`, size: "sm", value: dateEdits[request.id]?.submittedDate ?? request.submittedDate ?? '', onChange: (event) => handleSubmittedDateChange(request.id, event.target.value), "data-test": "agent-gtr-submitted-date" }) }), jsxRuntime.jsx("td", { children: computeTravelTypeCodes(request).join(', ') }), jsxRuntime.jsx("td", { className: styles$14.colDate, children: jsxRuntime.jsx(Datepicker, { "aria-label": `Quote sent date for request ${request.id}`, size: "sm", value: dateEdits[request.id]?.quoteSentDate ?? request.quoteSentDate ?? '', onChange: (event) => handleQuoteSentDateChange(request.id, event.target.value), "data-test": "agent-gtr-quote-sent-date" }) }), DUE_FIELDS.map(({ field }) => (jsxRuntime.jsx("td", { children: jsxRuntime.jsx(DueStatusCell, { status: request[field], today: today, onToggle: onToggleDueStatus ? () => onToggleDueStatus(request.id, field) : undefined }) }, field))), jsxRuntime.jsx("td", { children: isMulti ? (jsxRuntime.jsx(PnrButton, { label: "Multi", tone: groupPnrTone(request.pnrs), onClick: () => toggleExpanded(request.id), dataTest: "agent-gtr-pnr-multi" })) : (jsxRuntime.jsx(PnrButton, { label: request.pnrs[0].recordLocator.toUpperCase(), tone: pnrTone(request.pnrs[0]), onClick: () => handleCopyPnr(request.pnrs[0].recordLocator), dataTest: "agent-gtr-pnr" })) }), jsxRuntime.jsx("td", { className: styles$14.colDelete, children: !isMulti && onDeleteRequest && (jsxRuntime.jsx("button", { type: "button", className: styles$14.deleteButton, "aria-label": `Delete request ${request.id}`, title: "Click to delete this trip", onClick: () => onDeleteRequest(request.id), "data-test": "agent-gtr-delete", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) })) })] }), isMulti && isExpanded && (jsxRuntime.jsx("tr", { className: styles$14.subPnrRow, children: jsxRuntime.jsx("td", { colSpan: COLUMN_COUNT, children: jsxRuntime.jsx("div", { className: styles$14.subPnrPanel, "data-test": "agent-gtr-sub-pnrs", children: request.pnrs.map((pnr) => (jsxRuntime.jsx(PnrButton, { label: pnr.recordLocator.toUpperCase(), tone: pnrTone(pnr), onClick: () => handleCopyPnr(pnr.recordLocator), dataTest: "agent-gtr-sub-pnr" }, pnr.id))) }) }) }))] }, request.id));
|
|
3347
|
+
})] }, `account-${group.accountName}`)))] })] }) }), jsxRuntime.jsx("p", { className: styles$14.legend, children: "Types: A - Airline C - Car, H - Hotel" })] }));
|
|
3300
3348
|
};
|
|
3301
3349
|
|
|
3302
|
-
var styles$
|
|
3350
|
+
var styles$13 = {"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"};
|
|
3303
3351
|
|
|
3304
3352
|
/**
|
|
3305
3353
|
* Sidenav component for main navigation.
|
|
@@ -3308,8 +3356,8 @@ var styles$12 = {"sidenav":"Sidenav-module_sidenav__9DKVg","expanded":"Sidenav-m
|
|
|
3308
3356
|
const Sidenav = ({ logo, logoCollapsed, items, activeKey, onItemClick, defaultExpanded = true, footer, className = '', ...props }) => {
|
|
3309
3357
|
const [expanded, setExpanded] = React.useState(defaultExpanded);
|
|
3310
3358
|
const classNames = [
|
|
3311
|
-
styles$
|
|
3312
|
-
expanded ? styles$
|
|
3359
|
+
styles$13.sidenav,
|
|
3360
|
+
expanded ? styles$13.expanded : styles$13.collapsed,
|
|
3313
3361
|
className,
|
|
3314
3362
|
]
|
|
3315
3363
|
.filter(Boolean)
|
|
@@ -3322,20 +3370,20 @@ const Sidenav = ({ logo, logoCollapsed, items, activeKey, onItemClick, defaultEx
|
|
|
3322
3370
|
onItemClick(item.key);
|
|
3323
3371
|
}
|
|
3324
3372
|
};
|
|
3325
|
-
return (jsxRuntime.jsxs("aside", { className: classNames, ...props, children: [jsxRuntime.jsx("button", { className: styles$
|
|
3373
|
+
return (jsxRuntime.jsxs("aside", { className: classNames, ...props, children: [jsxRuntime.jsx("button", { className: styles$13.toggle, onClick: () => setExpanded(!expanded), "aria-label": expanded ? 'Collapse sidebar' : 'Expand sidebar', children: expanded ? (jsxRuntime.jsx(ChevronLeftIcon, { size: 16 })) : (jsxRuntime.jsx(ChevronRightIcon$1, { size: 16 })) }), jsxRuntime.jsx("div", { className: styles$13.logoContainer, children: expanded ? logo : logoCollapsed || logo }), jsxRuntime.jsx("nav", { className: styles$13.nav, children: items.map((item) => {
|
|
3326
3374
|
const isActive = item.key === activeKey;
|
|
3327
3375
|
const itemClasses = [
|
|
3328
|
-
styles$
|
|
3329
|
-
isActive ? styles$
|
|
3376
|
+
styles$13.navItem,
|
|
3377
|
+
isActive ? styles$13.active : '',
|
|
3330
3378
|
]
|
|
3331
3379
|
.filter(Boolean)
|
|
3332
3380
|
.join(' ');
|
|
3333
|
-
return (jsxRuntime.jsxs("button", { className: itemClasses, onClick: () => handleItemClick(item), "aria-current": isActive ? 'page' : undefined, title: !expanded ? item.label : undefined, children: [jsxRuntime.jsx("span", { className: styles$
|
|
3334
|
-
}) }), footer && jsxRuntime.jsx("div", { className: styles$
|
|
3381
|
+
return (jsxRuntime.jsxs("button", { className: itemClasses, onClick: () => handleItemClick(item), "aria-current": isActive ? 'page' : undefined, title: !expanded ? item.label : undefined, children: [jsxRuntime.jsx("span", { className: styles$13.icon, children: item.icon }), expanded && jsxRuntime.jsx("span", { className: styles$13.label, children: item.label })] }, item.key));
|
|
3382
|
+
}) }), footer && jsxRuntime.jsx("div", { className: styles$13.footer, children: footer })] }));
|
|
3335
3383
|
};
|
|
3336
3384
|
Sidenav.displayName = 'Sidenav';
|
|
3337
3385
|
|
|
3338
|
-
var styles$
|
|
3386
|
+
var styles$12 = {"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"};
|
|
3339
3387
|
|
|
3340
3388
|
/**
|
|
3341
3389
|
* Topbar component for the main header.
|
|
@@ -3346,7 +3394,7 @@ const Topbar = ({ account, accounts, onAccountSelect, onAccountClick, actions, l
|
|
|
3346
3394
|
const [searchQuery, setSearchQuery] = React.useState('');
|
|
3347
3395
|
const dropdownRef = React.useRef(null);
|
|
3348
3396
|
const searchInputRef = React.useRef(null);
|
|
3349
|
-
const classNames = [styles$
|
|
3397
|
+
const classNames = [styles$12.topbar, className].filter(Boolean).join(' ');
|
|
3350
3398
|
// Close dropdown on outside click
|
|
3351
3399
|
React.useEffect(() => {
|
|
3352
3400
|
if (!isOpen)
|
|
@@ -3395,27 +3443,27 @@ const Topbar = ({ account, accounts, onAccountSelect, onAccountClick, actions, l
|
|
|
3395
3443
|
const filteredAccounts = accounts?.filter(acc => acc.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
|
|
3396
3444
|
acc.code.toLowerCase().includes(searchQuery.toLowerCase())) || [];
|
|
3397
3445
|
const hasDropdown = accounts && accounts.length > 0;
|
|
3398
|
-
return (jsxRuntime.jsxs("header", { className: classNames, ...props, children: [jsxRuntime.jsxs("div", { className: styles$
|
|
3446
|
+
return (jsxRuntime.jsxs("header", { className: classNames, ...props, children: [jsxRuntime.jsxs("div", { className: styles$12.left, children: [leftContent, account && (jsxRuntime.jsxs("div", { className: styles$12.accountWrapper, ref: dropdownRef, children: [jsxRuntime.jsxs("button", { className: `${styles$12.accountSelector} ${isOpen ? styles$12.open : ''}`, onClick: handleToggle, "aria-expanded": isOpen, "aria-haspopup": hasDropdown ? 'listbox' : undefined, children: [jsxRuntime.jsx("span", { className: styles$12.accountCode, children: account.code }), jsxRuntime.jsx("span", { className: styles$12.accountName, children: account.name }), hasDropdown && (jsxRuntime.jsx(ChevronDownIcon$1, { size: 16, className: `${styles$12.chevron} ${isOpen ? styles$12.chevronOpen : ''}` }))] }), isOpen && hasDropdown && (jsxRuntime.jsxs("div", { className: styles$12.dropdown, role: "listbox", children: [jsxRuntime.jsxs("div", { className: styles$12.dropdownSearch, children: [jsxRuntime.jsxs("svg", { className: styles$12.searchIcon, width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })] }), jsxRuntime.jsx("input", { ref: searchInputRef, type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Search accounts...", className: styles$12.searchInput })] }), jsxRuntime.jsx("div", { className: styles$12.dropdownList, children: filteredAccounts.length > 0 ? (filteredAccounts.map((acc) => (jsxRuntime.jsxs("button", { className: `${styles$12.dropdownItem} ${acc.code === account.code ? styles$12.selected : ''}`, onClick: () => handleSelectAccount(acc), role: "option", "aria-selected": acc.code === account.code, children: [jsxRuntime.jsx("span", { className: styles$12.dropdownItemCode, children: acc.code }), jsxRuntime.jsx("span", { className: styles$12.dropdownItemName, children: acc.name })] }, acc.code)))) : (jsxRuntime.jsx("div", { className: styles$12.noResults, children: "No accounts found" })) })] }))] }))] }), actions && jsxRuntime.jsx("div", { className: styles$12.actions, children: actions })] }));
|
|
3399
3447
|
};
|
|
3400
3448
|
Topbar.displayName = 'Topbar';
|
|
3401
3449
|
|
|
3402
|
-
var styles$
|
|
3450
|
+
var styles$11 = {"appLayout":"AppLayout-module_appLayout__NFbZk","mainArea":"AppLayout-module_mainArea__t-6oq","content":"AppLayout-module_content__5kV7S"};
|
|
3403
3451
|
|
|
3404
3452
|
const AppLayout = ({ navItems = [], activeNavKey, logo, collapsedLogo, account, defaultExpanded = true, onNavItemClick, onAccountClick, children, navFooter, topbarActions, className, }) => {
|
|
3405
|
-
return (jsxRuntime.jsxs("div", { className: `${styles$
|
|
3453
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$11.appLayout} ${className || ''}`, children: [jsxRuntime.jsx(Sidenav, { items: navItems, activeKey: activeNavKey, defaultExpanded: defaultExpanded, onItemClick: onNavItemClick, logo: logo, logoCollapsed: collapsedLogo, footer: navFooter }), jsxRuntime.jsxs("div", { className: styles$11.mainArea, children: [jsxRuntime.jsx(Topbar, { account: account, onAccountClick: onAccountClick, actions: topbarActions }), jsxRuntime.jsx("main", { className: styles$11.content, children: children })] })] }));
|
|
3406
3454
|
};
|
|
3407
3455
|
|
|
3408
|
-
var styles
|
|
3456
|
+
var styles$10 = {"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"};
|
|
3409
3457
|
|
|
3410
3458
|
/**
|
|
3411
3459
|
* Card component for grouping related content.
|
|
3412
3460
|
*/
|
|
3413
3461
|
const Card = React.forwardRef(({ variant = 'default', padding = 'md', interactive = false, className = '', children, ...props }, ref) => {
|
|
3414
3462
|
const classNames = [
|
|
3415
|
-
styles
|
|
3416
|
-
styles
|
|
3417
|
-
styles
|
|
3418
|
-
interactive ? styles
|
|
3463
|
+
styles$10.card,
|
|
3464
|
+
styles$10[variant],
|
|
3465
|
+
styles$10[`padding-${padding}`],
|
|
3466
|
+
interactive ? styles$10.interactive : '',
|
|
3419
3467
|
className,
|
|
3420
3468
|
]
|
|
3421
3469
|
.filter(Boolean)
|
|
@@ -3424,22 +3472,22 @@ const Card = React.forwardRef(({ variant = 'default', padding = 'md', interactiv
|
|
|
3424
3472
|
});
|
|
3425
3473
|
Card.displayName = 'Card';
|
|
3426
3474
|
const CardHeader = ({ title, subtitle, actions, className = '', children, ...props }) => {
|
|
3427
|
-
const classNames = [styles
|
|
3428
|
-
return (jsxRuntime.jsxs("div", { className: classNames, ...props, children: [jsxRuntime.jsxs("div", { className: styles
|
|
3475
|
+
const classNames = [styles$10.header, className].filter(Boolean).join(' ');
|
|
3476
|
+
return (jsxRuntime.jsxs("div", { className: classNames, ...props, children: [jsxRuntime.jsxs("div", { className: styles$10.headerContent, children: [title && jsxRuntime.jsx("h3", { className: styles$10.title, children: title }), subtitle && jsxRuntime.jsx("p", { className: styles$10.subtitle, children: subtitle }), children] }), actions && jsxRuntime.jsx("div", { className: styles$10.actions, children: actions })] }));
|
|
3429
3477
|
};
|
|
3430
3478
|
CardHeader.displayName = 'CardHeader';
|
|
3431
3479
|
const CardBody = ({ className = '', children, ...props }) => {
|
|
3432
|
-
const classNames = [styles
|
|
3480
|
+
const classNames = [styles$10.body, className].filter(Boolean).join(' ');
|
|
3433
3481
|
return (jsxRuntime.jsx("div", { className: classNames, ...props, children: children }));
|
|
3434
3482
|
};
|
|
3435
3483
|
CardBody.displayName = 'CardBody';
|
|
3436
3484
|
const CardFooter = ({ className = '', children, ...props }) => {
|
|
3437
|
-
const classNames = [styles
|
|
3485
|
+
const classNames = [styles$10.footer, className].filter(Boolean).join(' ');
|
|
3438
3486
|
return (jsxRuntime.jsx("div", { className: classNames, ...props, children: children }));
|
|
3439
3487
|
};
|
|
3440
3488
|
CardFooter.displayName = 'CardFooter';
|
|
3441
3489
|
|
|
3442
|
-
var styles
|
|
3490
|
+
var styles$$ = {"email":"CharterSourcingEmailPreview-module_email__KlhIq","preheader":"CharterSourcingEmailPreview-module_preheader__04juv","visuallyHidden":"CharterSourcingEmailPreview-module_visuallyHidden__Qgs3N","layoutTable":"CharterSourcingEmailPreview-module_layoutTable__dEH4i","brandCell":"CharterSourcingEmailPreview-module_brandCell__xvKZF","bodyCell":"CharterSourcingEmailPreview-module_bodyCell__glIXA","heading":"CharterSourcingEmailPreview-module_heading__ClFhy","stackCell":"CharterSourcingEmailPreview-module_stackCell__ut6ko","footerCell":"CharterSourcingEmailPreview-module_footerCell__4PwiB"};
|
|
3443
3491
|
|
|
3444
3492
|
const VARIANT_CONTENT = {
|
|
3445
3493
|
'admin-review': {
|
|
@@ -3776,11 +3824,11 @@ const CharterSourcingEmailPreview = (props) => {
|
|
|
3776
3824
|
['Return Date', quote.returnDate],
|
|
3777
3825
|
['Submitted By', quote.submittedBy],
|
|
3778
3826
|
];
|
|
3779
|
-
return (jsxRuntime.jsxs("article", { className: [styles
|
|
3827
|
+
return (jsxRuntime.jsxs("article", { className: [styles$$.email, styles$$[variant], className].filter(Boolean).join(' '), "aria-labelledby": headingId, "data-test": `charter-sourcing-email-${variant}`, children: [jsxRuntime.jsx("span", { className: styles$$.preheader, "aria-hidden": "true", "data-test": "charter-sourcing-email-preheader", children: content.preheader }), jsxRuntime.jsx("table", { role: "presentation", cellPadding: 0, cellSpacing: 0, border: 0, width: "600", className: styles$$.layoutTable, style: EMAIL_STYLE.layout, "data-test": "charter-sourcing-email-layout", children: jsxRuntime.jsxs("tbody", { children: [jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { className: styles$$.brandCell, style: EMAIL_STYLE.brandCell, children: jsxRuntime.jsx("header", { "data-test": "charter-sourcing-email-brand", children: jsxRuntime.jsx("table", { role: "presentation", cellPadding: 0, cellSpacing: 0, border: 0, width: "100%", children: jsxRuntime.jsx("tbody", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { width: "54", style: { padding: 0, verticalAlign: 'middle' }, children: jsxRuntime.jsx("table", { role: "presentation", cellPadding: 0, cellSpacing: 0, border: 0, width: "42", style: EMAIL_STYLE.brandMarkTable, children: jsxRuntime.jsx("tbody", { children: jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { style: EMAIL_STYLE.brandMarkCell, "aria-hidden": "true", children: jsxRuntime.jsx(PlaneIcon$3, { size: 22 }) }) }) }) }) }), jsxRuntime.jsxs("td", { style: EMAIL_STYLE.brandCopyCell, children: [jsxRuntime.jsx("strong", { style: EMAIL_STYLE.brandName, children: "STM" }), jsxRuntime.jsx("br", {}), jsxRuntime.jsx("span", { style: EMAIL_STYLE.brandProduct, children: "Charters" })] })] }) }) }) }) }) }), jsxRuntime.jsx("tr", { children: jsxRuntime.jsxs("td", { className: styles$$.bodyCell, style: EMAIL_STYLE.bodyCell, "data-test": "charter-sourcing-email-body", children: [jsxRuntime.jsx("table", { role: "presentation", cellPadding: 0, cellSpacing: 0, border: 0, width: "48", style: { ...EMAIL_STYLE.statusTable, backgroundColor: theme.statusBackground }, children: jsxRuntime.jsx("tbody", { children: jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { style: { ...EMAIL_STYLE.statusCell, color: theme.accent }, "aria-hidden": "true", children: jsxRuntime.jsx(StatusIcon, { size: 24 }) }) }) }) }), jsxRuntime.jsx("p", { style: { ...EMAIL_STYLE.eyebrow, color: theme.accent }, "data-test": "charter-sourcing-email-status", children: content.eyebrow }), jsxRuntime.jsx("h1", { id: headingId, className: styles$$.heading, style: EMAIL_STYLE.heading, "data-test": "charter-sourcing-email-heading", children: content.heading }), jsxRuntime.jsx("p", { style: EMAIL_STYLE.greeting, children: "Hello," }), jsxRuntime.jsx("p", { style: EMAIL_STYLE.opening, children: content.opening }), jsxRuntime.jsxs("section", { style: EMAIL_STYLE.summary, "aria-labelledby": summaryHeadingId, children: [jsxRuntime.jsx("table", { role: "presentation", cellPadding: 0, cellSpacing: 0, border: 0, width: "100%", style: EMAIL_STYLE.routeTable, "data-test": "charter-sourcing-email-route", children: jsxRuntime.jsx("tbody", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { className: styles$$.stackCell, style: EMAIL_STYLE.routeLabel, children: "Trip route" }), jsxRuntime.jsx("td", { className: styles$$.stackCell, style: EMAIL_STYLE.routeValue, children: present(route) })] }) }) }), jsxRuntime.jsx("h2", { id: summaryHeadingId, className: styles$$.visuallyHidden, children: "Quote details" }), jsxRuntime.jsx("table", { cellPadding: 0, cellSpacing: 0, border: 0, width: "100%", style: EMAIL_STYLE.detailTable, "aria-labelledby": summaryHeadingId, "data-test": "charter-sourcing-email-summary", children: jsxRuntime.jsxs("tbody", { children: [detailFields.map(([label, value]) => (jsxRuntime.jsxs("tr", { "data-test": "charter-sourcing-email-summary-field", children: [jsxRuntime.jsx("th", { scope: "row", style: EMAIL_STYLE.detailLabel, children: label }), jsxRuntime.jsx("td", { style: EMAIL_STYLE.detailValue, children: present(value) })] }, label))), quote.totalCost !== undefined && (jsxRuntime.jsxs("tr", { "data-test": "charter-sourcing-email-total", children: [jsxRuntime.jsx("th", { scope: "row", style: { ...EMAIL_STYLE.detailLabel, ...EMAIL_STYLE.totalLabel }, children: "Total Cost" }), jsxRuntime.jsx("td", { style: { ...EMAIL_STYLE.detailValue, ...EMAIL_STYLE.totalValue }, children: present(quote.totalCost) })] }))] }) })] }), variant === 'submitter-updated' && (jsxRuntime.jsxs("section", { "data-test": "charter-sourcing-email-changes", children: [jsxRuntime.jsx("h2", { style: EMAIL_STYLE.changesHeading, children: "What changed" }), jsxRuntime.jsxs("table", { cellPadding: 0, cellSpacing: 0, border: 0, width: "100%", style: EMAIL_STYLE.changesTable, children: [jsxRuntime.jsx("caption", { className: styles$$.visuallyHidden, children: "Fields changed by the Charter Sourcing administrator" }), jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", style: { ...EMAIL_STYLE.changesHeader, width: '40%' }, children: "Field" }), jsxRuntime.jsx("th", { scope: "col", style: { ...EMAIL_STYLE.changesHeader, width: '30%' }, children: "Previous" }), jsxRuntime.jsx("th", { scope: "col", style: { ...EMAIL_STYLE.changesHeader, width: '30%' }, children: "Updated" })] }) }), jsxRuntime.jsx("tbody", { children: changes.map((change, index) => (jsxRuntime.jsxs("tr", { "data-test": "charter-sourcing-email-change", children: [jsxRuntime.jsx("th", { scope: "row", style: EMAIL_STYLE.changesRowHeader, children: change.label }), jsxRuntime.jsx("td", { style: { ...EMAIL_STYLE.changesValue, ...EMAIL_STYLE.previousValue }, children: present(change.previousValue) }), jsxRuntime.jsx("td", { style: { ...EMAIL_STYLE.changesValue, ...EMAIL_STYLE.updatedValue }, children: present(change.updatedValue) })] }, `${change.label}-${index}`))) })] })] })), jsxRuntime.jsx("table", { role: "presentation", cellPadding: 0, cellSpacing: 0, border: 0, width: "100%", style: EMAIL_STYLE.requestTable, children: jsxRuntime.jsx("tbody", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { className: styles$$.stackCell, style: EMAIL_STYLE.requestLabel, children: "Request ID" }), jsxRuntime.jsx("td", { className: styles$$.stackCell, style: EMAIL_STYLE.requestValue, "data-test": "charter-sourcing-email-request-id", children: present(quote.requestId) })] }) }) }), jsxRuntime.jsxs("p", { style: EMAIL_STYLE.signoff, children: ["Thanks,", jsxRuntime.jsx("br", {}), jsxRuntime.jsx("strong", { children: "STM Charters Team" })] }), testServerOriginalRecipient && (jsxRuntime.jsx("aside", { "data-test": "charter-sourcing-email-test-notice", children: jsxRuntime.jsx("table", { role: "presentation", cellPadding: 0, cellSpacing: 0, border: 0, width: "100%", style: EMAIL_STYLE.noticeTable, children: jsxRuntime.jsx("tbody", { children: jsxRuntime.jsx("tr", { children: jsxRuntime.jsxs("td", { style: EMAIL_STYLE.noticeCell, children: [jsxRuntime.jsx("strong", { children: "Test server delivery" }), jsxRuntime.jsx("br", {}), jsxRuntime.jsx("span", { children: "This message may not represent an actual charter quote." }), jsxRuntime.jsx("br", {}), jsxRuntime.jsxs("span", { children: ["Original recipient: ", testServerOriginalRecipient] })] }) }) }) }) }))] }) }), jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { className: styles$$.footerCell, style: EMAIL_STYLE.footerCell, children: jsxRuntime.jsxs("footer", { "data-test": "charter-sourcing-email-footer", children: [jsxRuntime.jsx("p", { style: EMAIL_STYLE.footerParagraph, children: "This transactional message was sent by STM Charters." }), jsxRuntime.jsx("p", { style: EMAIL_STYLE.footerParagraph, children: "Reply to contact the Charter Sourcing team." })] }) }) })] }) })] }));
|
|
3780
3828
|
};
|
|
3781
3829
|
CharterSourcingEmailPreview.displayName = 'CharterSourcingEmailPreview';
|
|
3782
3830
|
|
|
3783
|
-
var styles$
|
|
3831
|
+
var styles$_ = {"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"};
|
|
3784
3832
|
|
|
3785
3833
|
const InfoIcon = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }), jsxRuntime.jsx("line", { x1: "12", y1: "16", x2: "12", y2: "12" }), jsxRuntime.jsx("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })] }));
|
|
3786
3834
|
const EditIcon$1 = () => (jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }), jsxRuntime.jsx("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })] }));
|
|
@@ -3791,18 +3839,18 @@ const PlusIcon$1 = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", vi
|
|
|
3791
3839
|
*/
|
|
3792
3840
|
const ContactList = ({ title = 'Contacts', tooltip, contacts, onEdit, onRemove, onAdd, showAdd = true, addLabel = 'Add Contact', alert, className = '', }) => {
|
|
3793
3841
|
const listClasses = [
|
|
3794
|
-
styles$
|
|
3842
|
+
styles$_.container,
|
|
3795
3843
|
className,
|
|
3796
3844
|
].filter(Boolean).join(' ');
|
|
3797
|
-
return (jsxRuntime.jsxs("div", { className: listClasses, children: [alert && (jsxRuntime.jsx("div", { className: styles$
|
|
3845
|
+
return (jsxRuntime.jsxs("div", { className: listClasses, children: [alert && (jsxRuntime.jsx("div", { className: styles$_.alert, children: alert })), jsxRuntime.jsxs("div", { className: styles$_.card, children: [jsxRuntime.jsx("div", { className: styles$_.header, children: jsxRuntime.jsxs("div", { className: styles$_.titleRow, children: [jsxRuntime.jsx("h3", { className: styles$_.title, children: title }), tooltip && (jsxRuntime.jsx("span", { className: styles$_.tooltip, children: jsxRuntime.jsx(InfoIcon, {}) }))] }) }), jsxRuntime.jsxs("div", { className: styles$_.list, children: [contacts.map((contact) => (jsxRuntime.jsxs("div", { className: styles$_.contactItem, children: [jsxRuntime.jsxs("div", { className: styles$_.contactInfo, children: [jsxRuntime.jsxs("div", { className: styles$_.contactName, children: [contact.name, contact.isPrimary && (jsxRuntime.jsx("span", { className: styles$_.badge, children: "Primary" })), contact.isSecondary && (jsxRuntime.jsx("span", { className: `${styles$_.badge} ${styles$_.badgeSecondary}`, children: "Secondary" }))] }), contact.role && (jsxRuntime.jsx("div", { className: styles$_.contactRole, children: contact.role })), jsxRuntime.jsxs("div", { className: styles$_.contactDetails, children: [contact.email && (jsxRuntime.jsx("a", { href: `mailto:${contact.email}`, className: styles$_.contactLink, children: contact.email })), contact.phone && (jsxRuntime.jsx("span", { className: styles$_.contactPhone, children: contact.phone }))] })] }), jsxRuntime.jsxs("div", { className: styles$_.contactActions, children: [onEdit && (jsxRuntime.jsx("button", { type: "button", className: styles$_.actionButton, onClick: () => onEdit(contact), "aria-label": "Edit contact", children: jsxRuntime.jsx(EditIcon$1, {}) })), onRemove && (jsxRuntime.jsx("button", { type: "button", className: `${styles$_.actionButton} ${styles$_.actionButtonDanger}`, onClick: () => onRemove(contact), "aria-label": "Remove contact", children: jsxRuntime.jsx(TrashIcon$1, {}) }))] })] }, contact.id))), contacts.length === 0 && (jsxRuntime.jsx("div", { className: styles$_.empty, children: "No contacts added" }))] }), showAdd && onAdd && (jsxRuntime.jsx("div", { className: styles$_.footer, children: jsxRuntime.jsxs("button", { type: "button", className: styles$_.addButton, onClick: onAdd, children: [jsxRuntime.jsx(PlusIcon$1, {}), addLabel] }) }))] })] }));
|
|
3798
3846
|
};
|
|
3799
3847
|
ContactList.displayName = 'ContactList';
|
|
3800
3848
|
|
|
3801
|
-
var styles$
|
|
3849
|
+
var styles$Z = {"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"};
|
|
3802
3850
|
|
|
3803
|
-
const DrawerHeader = ({ title, children, showClose = true, onClose, className = '', }) => (jsxRuntime.jsxs("div", { className: `${styles$
|
|
3804
|
-
const DrawerBody = ({ children, className = '' }) => (jsxRuntime.jsx("div", { className: `${styles$
|
|
3805
|
-
const DrawerFooter = ({ children, className = '' }) => (jsxRuntime.jsx("div", { className: `${styles$
|
|
3851
|
+
const DrawerHeader = ({ title, children, showClose = true, onClose, className = '', }) => (jsxRuntime.jsxs("div", { className: `${styles$Z.header} ${className}`, children: [jsxRuntime.jsxs("div", { className: styles$Z.headerContent, children: [title && jsxRuntime.jsx("h2", { className: styles$Z.title, children: title }), children] }), showClose && (jsxRuntime.jsx("button", { type: "button", className: styles$Z.closeButton, onClick: onClose, "aria-label": "Close drawer", children: jsxRuntime.jsx("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }))] }));
|
|
3852
|
+
const DrawerBody = ({ children, className = '' }) => (jsxRuntime.jsx("div", { className: `${styles$Z.body} ${className}`, children: children }));
|
|
3853
|
+
const DrawerFooter = ({ children, className = '' }) => (jsxRuntime.jsx("div", { className: `${styles$Z.footer} ${className}`, children: children }));
|
|
3806
3854
|
const Drawer = ({ isOpen, onClose, position = 'right', size = 'md', children, closeOnBackdropClick = true, closeOnEscape = true, showBackdrop = true, className = '', }) => {
|
|
3807
3855
|
const handleEscape = React.useCallback((e) => {
|
|
3808
3856
|
if (closeOnEscape && e.key === 'Escape') {
|
|
@@ -3830,7 +3878,7 @@ const Drawer = ({ isOpen, onClose, position = 'right', size = 'md', children, cl
|
|
|
3830
3878
|
const customSize = isNamed ? undefined : size;
|
|
3831
3879
|
if (!isOpen)
|
|
3832
3880
|
return null;
|
|
3833
|
-
return (jsxRuntime.jsxs("div", { className: styles$
|
|
3881
|
+
return (jsxRuntime.jsxs("div", { className: styles$Z.container, children: [showBackdrop && (jsxRuntime.jsx("div", { className: `${styles$Z.backdrop} ${isOpen ? styles$Z.backdropOpen : ''}`, onClick: handleBackdropClick })), jsxRuntime.jsx("div", { className: `${styles$Z.drawer} ${styles$Z[position]} ${namedSize ? styles$Z[`size${namedSize.charAt(0).toUpperCase()}${namedSize.slice(1)}`] : ''} ${isOpen ? styles$Z.drawerOpen : ''} ${className}`, style: customSize ? (position === 'left' || position === 'right' ? { width: customSize } : { height: customSize }) : undefined, role: "dialog", "aria-modal": "true", children: React.Children.map(children, (child) => {
|
|
3834
3882
|
if (React.isValidElement(child) && child.type === DrawerHeader) {
|
|
3835
3883
|
return React.cloneElement(child, {
|
|
3836
3884
|
onClose,
|
|
@@ -3843,7 +3891,7 @@ Drawer.Header = DrawerHeader;
|
|
|
3843
3891
|
Drawer.Body = DrawerBody;
|
|
3844
3892
|
Drawer.Footer = DrawerFooter;
|
|
3845
3893
|
|
|
3846
|
-
var styles$
|
|
3894
|
+
var styles$Y = {"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","readOnlyStatus":"DueDatesDrawer-module_readOnlyStatus__23fdg"};
|
|
3847
3895
|
|
|
3848
3896
|
const isTravelDueDateCompleted = (item) => item.status.trim().toLowerCase() === 'completed' || !!item.completeddatetime;
|
|
3849
3897
|
const isTravelDueDateOverdue = (item) => !item.completeddatetime && !!item.pastdue;
|
|
@@ -3860,7 +3908,7 @@ const DueDateCard$1 = ({ item, onToggle, onTaskClick }) => {
|
|
|
3860
3908
|
const completed = isTravelDueDateCompleted(item);
|
|
3861
3909
|
const dueDate = parseLocalDate$1(item.duedate);
|
|
3862
3910
|
const pastDue = !!dueDate && dueDate < new Date() && !completed;
|
|
3863
|
-
return (jsxRuntime.jsxs("article", { className: styles$
|
|
3911
|
+
return (jsxRuntime.jsxs("article", { className: styles$Y.card, children: [jsxRuntime.jsxs("div", { className: styles$Y.cardTitle, children: [onToggle ? (jsxRuntime.jsx("button", { type: "button", "aria-label": `${completed ? 'Reopen' : 'Complete'} ${item.tasktitle}`, className: [styles$Y.status, completed ? styles$Y.completed : pastDue ? styles$Y.pastDue : ''].filter(Boolean).join(' '), onClick: () => onToggle(item), "data-test": `due-date-toggle-${item.taskid}`, children: completed ? jsxRuntime.jsx(CheckIcon$2, { size: 12 }) : null })) : (jsxRuntime.jsx("span", { "aria-label": `${completed ? 'Completed' : pastDue ? 'Past due' : 'Incomplete'}: ${item.tasktitle}`, className: [styles$Y.status, styles$Y.readOnlyStatus, completed ? styles$Y.completed : pastDue ? styles$Y.pastDue : ''].filter(Boolean).join(' '), "data-test": `due-date-status-${item.taskid}`, children: completed ? jsxRuntime.jsx(CheckIcon$2, { size: 12 }) : null })), jsxRuntime.jsx("h5", { children: item.tasktitle })] }), item.description && jsxRuntime.jsx("p", { children: item.description }), jsxRuntime.jsxs("div", { className: styles$Y.tags, children: [jsxRuntime.jsx("span", { style: { backgroundColor: sportColor$1(item.sportCode) }, children: item.sportCode }), jsxRuntime.jsx("button", { type: "button", disabled: !item.masterTripGUID || !onTaskClick, onClick: () => item.masterTripGUID && onTaskClick?.(item.masterTripGUID), children: item.tripName })] }), completed && item.completeddatetime && jsxRuntime.jsxs("div", { className: styles$Y.completion, children: [jsxRuntime.jsx(CheckIcon$2, { size: 14 }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("em", { children: "on" }), " ", formatDate$8(item.completeddatetime, { month: 'numeric', day: 'numeric', year: '2-digit' }), " ", jsxRuntime.jsx("em", { children: "by" }), " ", item.completedby] })] })] }));
|
|
3864
3912
|
};
|
|
3865
3913
|
/** Hub's searchable, status-aware due-dates drawer. */
|
|
3866
3914
|
const DueDatesDrawer = ({ isOpen, dueDates, selectedDate, selectedTrip, overdueOnly, onClose, onToggle, onTaskClick, className = '' }) => {
|
|
@@ -3872,9 +3920,32 @@ const DueDatesDrawer = ({ isOpen, dueDates, selectedDate, selectedTrip, overdueO
|
|
|
3872
3920
|
const matches = items.filter((item) => (!selectedTrip || item.masterTripGUID === String(selectedTrip)) && (!overdueOnly || isTravelDueDateOverdue(item)) && (!normalized || item.tasktitle.toLowerCase().includes(normalized) || item.sportCode.toLowerCase().includes(normalized) || item.description.toLowerCase().includes(normalized)));
|
|
3873
3921
|
return matches.length ? [[date, matches]] : [];
|
|
3874
3922
|
})), [dueDates, search, selectedDate, selectedTrip, overdueOnly]);
|
|
3875
|
-
return (jsxRuntime.jsxs("aside", { className: [styles$
|
|
3923
|
+
return (jsxRuntime.jsxs("aside", { className: [styles$Y.drawer, isOpen ? styles$Y.open : '', className].filter(Boolean).join(' '), "aria-hidden": !isOpen, "aria-label": "Due Dates", children: [jsxRuntime.jsxs("header", { children: [jsxRuntime.jsx("h3", { children: "Due Dates" }), jsxRuntime.jsx("button", { type: "button", "aria-label": "Close due dates", onClick: onClose, children: jsxRuntime.jsx(CloseIcon, { size: 24 }) })] }), jsxRuntime.jsxs("div", { className: styles$Y.body, children: [jsxRuntime.jsxs("label", { className: styles$Y.search, children: [jsxRuntime.jsx(SearchIcon$1, { size: 16 }), jsxRuntime.jsx("input", { type: "search", placeholder: "Search", value: search, onChange: (event) => setSearch(event.target.value) })] }), !Object.keys(filtered).length ? jsxRuntime.jsx("div", { className: styles$Y.empty, children: "No due dates found." }) : Object.entries(filtered).map(([date, items]) => (jsxRuntime.jsxs("section", { children: [jsxRuntime.jsx("h4", { children: formatDate$8(date, { month: 'long', day: 'numeric', year: 'numeric' }) }), jsxRuntime.jsx("div", { className: styles$Y.cards, children: items.map((item) => jsxRuntime.jsx(DueDateCard$1, { item: item, onToggle: onToggle, onTaskClick: onTaskClick }, `${date}-${item.taskid}`)) })] }, date)))] })] }));
|
|
3876
3924
|
};
|
|
3877
3925
|
|
|
3926
|
+
var styles$X = {"header":"GridHeaderRow-module_header__HaY4B","grid":"GridHeaderRow-module_grid__BvZkZ","heading":"GridHeaderRow-module_heading__fa7PW"};
|
|
3927
|
+
|
|
3928
|
+
/**
|
|
3929
|
+
* A grid heading strip on its own, without a table underneath it.
|
|
3930
|
+
*
|
|
3931
|
+
* GridTable renders its own headings and is the right answer whenever the
|
|
3932
|
+
* headings belong to the rows below them. This is for the cases where they do
|
|
3933
|
+
* not: two header strips side by side above one table, or a band that spans
|
|
3934
|
+
* several columns stacked over the real headings. Both need a heading row that
|
|
3935
|
+
* is not tied to a row set, which GridTable cannot express.
|
|
3936
|
+
*
|
|
3937
|
+
* Headings are plain text here, never sort controls — there are no rows to
|
|
3938
|
+
* sort. `sortable` on a column is ignored rather than rendering a button that
|
|
3939
|
+
* does nothing.
|
|
3940
|
+
*
|
|
3941
|
+
* Hidden below 768px, matching GridTable: at that width each row becomes a card
|
|
3942
|
+
* carrying its own labels, so a detached heading strip would caption nothing.
|
|
3943
|
+
*/
|
|
3944
|
+
function GridHeaderRow({ columns, gridTemplateColumns, above, below, className = '', style, }) {
|
|
3945
|
+
return (jsxRuntime.jsxs("div", { className: `${styles$X.header} ${className}`, style: style, "data-testid": "grid-header-row", children: [above, jsxRuntime.jsx("div", { className: styles$X.grid, style: { gridTemplateColumns }, role: "row", children: columns.map((column, i) => (jsxRuntime.jsxs("div", { role: "columnheader", className: `${styles$X.heading} ${column.labelClassName ?? ''}`, children: [column.icon, column.label, column.labelAs?.({ name: column.name })] }, column.name ?? i))) }), below] }));
|
|
3946
|
+
}
|
|
3947
|
+
GridHeaderRow.displayName = 'GridHeaderRow';
|
|
3948
|
+
|
|
3878
3949
|
var styles$W = {"table":"GridTable-module_table__eAyUR","grid":"GridTable-module_grid__Fas2-","header":"GridTable-module_header__Xlk1G","heading":"GridTable-module_heading__eQ0tp","sortable":"GridTable-module_sortable__3b0WI","headingInner":"GridTable-module_headingInner__mrWVH","headingIcon":"GridTable-module_headingIcon__0ezsg","sortIcon":"GridTable-module_sortIcon__pT9NY","body":"GridTable-module_body__rnNv7","row":"GridTable-module_row__5oYit","bordered":"GridTable-module_bordered__ONBuk","cellWrap":"GridTable-module_cellWrap__ioPRA","cell":"GridTable-module_cell__iciaC","value":"GridTable-module_value__qBeVT","stackedLabel":"GridTable-module_stackedLabel__snZdZ","empty":"GridTable-module_empty__sgW67","footer":"GridTable-module_footer__D-9Z4","totalCell":"GridTable-module_totalCell__zJPdZ","totalValue":"GridTable-module_totalValue__rqXX3"};
|
|
3879
3950
|
|
|
3880
3951
|
const ChevronUp = () => (jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", "aria-hidden": "true", children: jsxRuntime.jsx("polyline", { points: "18 15 12 9 6 15" }) }));
|
|
@@ -15511,6 +15582,7 @@ exports.ArrowUpRightIcon = ArrowUpRightIcon;
|
|
|
15511
15582
|
exports.Avatar = Avatar;
|
|
15512
15583
|
exports.AvatarGroup = AvatarGroup;
|
|
15513
15584
|
exports.BID_TYPE_HEADINGS = BID_TYPE_HEADINGS;
|
|
15585
|
+
exports.BackLink = BackLink;
|
|
15514
15586
|
exports.Badge = Badge;
|
|
15515
15587
|
exports.BuildingIcon = BuildingIcon;
|
|
15516
15588
|
exports.BusIcon = BusIcon$2;
|
|
@@ -15576,6 +15648,7 @@ exports.FormField = FormField;
|
|
|
15576
15648
|
exports.FormRow = FormRow;
|
|
15577
15649
|
exports.FormSection = FormSection;
|
|
15578
15650
|
exports.FormStack = FormStack;
|
|
15651
|
+
exports.GridHeaderRow = GridHeaderRow;
|
|
15579
15652
|
exports.GridIcon = GridIcon;
|
|
15580
15653
|
exports.GridTable = GridTable;
|
|
15581
15654
|
exports.GroundSegment = GroundSegment;
|
|
@@ -15652,6 +15725,7 @@ exports.RequestFormFooter = RequestFormFooter;
|
|
|
15652
15725
|
exports.RequestFormHeader = RequestFormHeader;
|
|
15653
15726
|
exports.RequestFormLayout = RequestFormLayout;
|
|
15654
15727
|
exports.RequestSummary = RequestSummary$1;
|
|
15728
|
+
exports.ResultCount = ResultCount;
|
|
15655
15729
|
exports.RosterProgramNumbersPage = RosterProgramNumbersPage;
|
|
15656
15730
|
exports.RosterReportsPage = RosterReportsPage;
|
|
15657
15731
|
exports.RosterToolbar = RosterToolbar;
|