@shortstravelmgmt/component-lib 0.3.0 → 0.3.1-canary.76.g68c014d

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.esm.js CHANGED
@@ -1078,7 +1078,7 @@ const iconStyle$h = {
1078
1078
  const bodyStyle$d = {
1079
1079
  label: 'Alert-bodyStyle', flex: 1, minWidth: 0
1080
1080
  };
1081
- const titleStyle$H = {
1081
+ const titleStyle$I = {
1082
1082
  label: 'Alert-titleStyle',
1083
1083
  color: 'var(--alert-ink)',
1084
1084
  fontWeight: 'var(--font-weight-semibold)',
@@ -1147,7 +1147,7 @@ const variantIcons = {
1147
1147
  */
1148
1148
  const Alert = ({ variant = 'primary', title, children, dismissible = false, onDismiss, className = '', }) => {
1149
1149
  const IconComponent = variantIcons[variant];
1150
- return (jsx("div", { className: cx(sx(alertStyle$5), sx(variantStyles$8[variant]), className), role: "alert", children: jsxs("div", { className: sx(contentStyle$e), children: [jsx(IconComponent, { className: sx(iconStyle$h), size: 20 }), jsxs("div", { className: sx(bodyStyle$d), children: [title && jsx("h4", { className: sx(titleStyle$H), children: title }), jsx("div", { className: sx(messageStyle$3), children: children })] }), dismissible && onDismiss && (jsx("button", { type: "button", onClick: onDismiss, className: sx(dismissButtonStyle), "aria-label": "Dismiss alert", children: jsx(CloseIcon, { size: 16 }) }))] }) }));
1150
+ return (jsx("div", { className: cx(sx(alertStyle$5), sx(variantStyles$8[variant]), className), role: "alert", children: jsxs("div", { className: sx(contentStyle$e), children: [jsx(IconComponent, { className: sx(iconStyle$h), size: 20 }), jsxs("div", { className: sx(bodyStyle$d), children: [title && jsx("h4", { className: sx(titleStyle$I), children: title }), jsx("div", { className: sx(messageStyle$3), children: children })] }), dismissible && onDismiss && (jsx("button", { type: "button", onClick: onDismiss, className: sx(dismissButtonStyle), "aria-label": "Dismiss alert", children: jsx(CloseIcon, { size: 16 }) }))] }) }));
1151
1151
  };
1152
1152
 
1153
1153
  const avatarSizeStyles = {
@@ -2840,7 +2840,7 @@ const textareaSizeStyles = {
2840
2840
  * The focus rules below restate the ring the base focus rules already set —
2841
2841
  * they did in the sheet too, and they are carried across unchanged.
2842
2842
  */
2843
- const errorStyle$4 = {
2843
+ const errorStyle$5 = {
2844
2844
  label: 'Input-errorStyle',
2845
2845
  '&&&': {
2846
2846
  borderColor: 'var(--color-danger-accent)',
@@ -2982,7 +2982,7 @@ const Input = forwardRef(({ size = 'md', sizing = 'fixed', label, helperText, er
2982
2982
  const inputWrapperClasses = cx(sx(inputWrapperStyle$3),
2983
2983
  // The fixed-height class still applies its horizontal padding and gap;
2984
2984
  // the padded classes that follow override height and the vertical rhythm.
2985
- sx(sizeStyles$8[size]), paddedClasses(sizing, size), error && sx(errorStyle$4), disabled && sx(disabledStyle$7));
2985
+ sx(sizeStyles$8[size]), paddedClasses(sizing, size), error && sx(errorStyle$5), disabled && sx(disabledStyle$7));
2986
2986
  return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: inputId, className: sx(labelStyle$g), children: label })), jsxs("div", { className: inputWrapperClasses, children: [leftIcon && jsx("span", { className: sx(iconStyle$d), children: leftIcon }), jsx("input", { ref: ref, id: inputId, className: sx(inputStyle$5), disabled: disabled, "aria-invalid": !!error, "aria-describedby": error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined, ...props }), rightIcon && jsx("span", { className: sx(iconStyle$d), children: rightIcon })] }), error && (jsx("span", { id: `${inputId}-error`, className: sx(errorTextStyle$4), children: error })), helperText && !error && (jsx("span", { id: `${inputId}-helper`, className: sx(helperTextStyle$4), children: helperText }))] }));
2987
2987
  });
2988
2988
  Input.displayName = 'Input';
@@ -2998,7 +2998,7 @@ const Textarea = forwardRef(({ size = 'md', sizing = 'fixed', label, helperText,
2998
2998
  sx(textareaSizeStyles[size]), paddedClasses(sizing, size),
2999
2999
  // `.textarea.paddedSm` — the type scale the padded rules put on a
3000
3000
  // descendant `.input` that a bare <textarea> does not have.
3001
- sizing === 'padded' && sx(textareaPaddedSizeStyles[size]), error && sx(errorStyle$4), disabled && sx(disabledStyle$7));
3001
+ sizing === 'padded' && sx(textareaPaddedSizeStyles[size]), error && sx(errorStyle$5), disabled && sx(disabledStyle$7));
3002
3002
  return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: textareaId, className: sx(labelStyle$g), children: label })), jsx("textarea", { ref: ref, id: textareaId, className: textareaClasses, disabled: disabled, rows: rows, "aria-invalid": !!error, "aria-describedby": error ? `${textareaId}-error` : helperText ? `${textareaId}-helper` : undefined, ...props }), error && (jsx("span", { id: `${textareaId}-error`, className: sx(errorTextStyle$4), children: error })), helperText && !error && (jsx("span", { id: `${textareaId}-helper`, className: sx(helperTextStyle$4), children: helperText }))] }));
3003
3003
  });
3004
3004
  Textarea.displayName = 'Textarea';
@@ -3246,7 +3246,7 @@ const chevron$1 = `.${sx(chevronStyle$6)}`;
3246
3246
  * `.selectWrapper:focus-within`, which is rewritten below as `&&:focus-within`
3247
3247
  * (0,3,0) so it still clears the plain `&&` error border.
3248
3248
  */
3249
- const errorStyle$3 = {
3249
+ const errorStyle$4 = {
3250
3250
  label: 'Select-errorStyle',
3251
3251
  '&&': { borderColor: 'var(--color-red-500)' },
3252
3252
  '&&&:focus-within': {
@@ -3254,7 +3254,7 @@ const errorStyle$3 = {
3254
3254
  boxShadow: '0 0 0 2px var(--color-accent-ink), 0 0 0 5px var(--color-accent-glow)',
3255
3255
  },
3256
3256
  };
3257
- const error = `.${sx(errorStyle$3)}`;
3257
+ const error = `.${sx(errorStyle$4)}`;
3258
3258
  /**
3259
3259
  * `&&` for the wrapper's own background/cursor, which beat `.selectWrapper` on
3260
3260
  * source order; `&& .select` (0,3,0) for the inner colour, which had to clear
@@ -3418,7 +3418,7 @@ const Select = forwardRef(({ options, optionGroups, size = 'md', label, placehol
3418
3418
  * their padded sizes separately, so Input's objects are not this
3419
3419
  * component's. The prop is the shared contract; the rules are local.
3420
3420
  */
3421
- const selectWrapperClasses = cx(sx(selectWrapperStyle), sx(sizeStyles$7[size]), sizing === 'padded' && cx(sx(paddedStyle), sx(paddedSizeStyles[size])), error && sx(errorStyle$3), disabled && sx(disabledStyle$6), Boolean(leftIcon) && sx(hasLeftIconStyle));
3421
+ const selectWrapperClasses = cx(sx(selectWrapperStyle), sx(sizeStyles$7[size]), sizing === 'padded' && cx(sx(paddedStyle), sx(paddedSizeStyles[size])), error && sx(errorStyle$4), disabled && sx(disabledStyle$6), Boolean(leftIcon) && sx(hasLeftIconStyle));
3422
3422
  const renderOptions = () => {
3423
3423
  // Render grouped options
3424
3424
  if (optionGroups && optionGroups.length > 0) {
@@ -3731,7 +3731,7 @@ const inputStyle$4 = {
3731
3731
  * `.inputWrapper:focus-within` on specificity and won on source order — here it
3732
3732
  * has to out-rank that rule's own `&&&:focus-within` (0,4,0) outright.
3733
3733
  */
3734
- const errorStyle$2 = {
3734
+ const errorStyle$3 = {
3735
3735
  label: 'Timepicker-errorStyle',
3736
3736
  '&&': {
3737
3737
  borderColor: 'var(--color-red-500)',
@@ -3781,7 +3781,7 @@ const inputWrapperStyle$2 = {
3781
3781
  borderColor: 'var(--color-primary-500)',
3782
3782
  boxShadow: '0 0 0 2px var(--color-accent-ink), 0 0 0 5px var(--color-accent-glow)',
3783
3783
  },
3784
- [`&&&&:hover:not(.${sx(disabledStyle$5)}):not(.${sx(errorStyle$2)})`]: {
3784
+ [`&&&&:hover:not(.${sx(disabledStyle$5)}):not(.${sx(errorStyle$3)})`]: {
3785
3785
  borderColor: 'var(--color-gray-400)',
3786
3786
  },
3787
3787
  };
@@ -3826,7 +3826,7 @@ const Timepicker = forwardRef(({ size = 'md', label, helperText, error, fullWidt
3826
3826
  const helperId = `${inputId}-helper`;
3827
3827
  const errorId = `${inputId}-error`;
3828
3828
  const wrapperClasses = cx(sx(wrapperStyle$6), fullWidth ? sx(fullWidthStyle$1) : '', className);
3829
- const inputWrapperClasses = cx(sx(inputWrapperStyle$2), sx(sizeStyles$5[size]), error ? sx(errorStyle$2) : '', disabled ? sx(disabledStyle$5) : '');
3829
+ const inputWrapperClasses = cx(sx(inputWrapperStyle$2), sx(sizeStyles$5[size]), error ? sx(errorStyle$3) : '', disabled ? sx(disabledStyle$5) : '');
3830
3830
  return (jsxs("div", { className: wrapperClasses, children: [label && (jsx("label", { htmlFor: inputId, className: sx(labelStyle$d), children: label })), jsxs("div", { className: inputWrapperClasses, children: [jsx("span", { className: sx(iconStyle$c), children: jsx(ClockIcon$1, {}) }), jsx("input", { ref: ref, type: "time", id: inputId, className: sx(inputStyle$4), disabled: disabled, "aria-invalid": !!error, "aria-describedby": [error ? errorId : null, helperText ? helperId : null]
3831
3831
  .filter(Boolean)
3832
3832
  .join(' ') || undefined, ...props })] }), error && (jsx("span", { id: errorId, className: sx(errorTextStyle$2), children: error })), helperText && !error && (jsx("span", { id: helperId, className: sx(helperTextStyle$2), children: helperText }))] }));
@@ -3834,7 +3834,7 @@ const Timepicker = forwardRef(({ size = 'md', label, helperText, error, fullWidt
3834
3834
  Timepicker.displayName = 'Timepicker';
3835
3835
 
3836
3836
  /** The page heading: display face, tightened tracking, and no default margin. */
3837
- const titleStyle$G = {
3837
+ const titleStyle$H = {
3838
3838
  label: 'Title-titleStyle',
3839
3839
  fontFamily: 'var(--font-family-display)',
3840
3840
  fontSize: 36,
@@ -3861,7 +3861,7 @@ const weightStyles = {
3861
3861
  * Large, prominent text for page titles.
3862
3862
  */
3863
3863
  const Title = ({ children, weight = 'light', className = '', }) => {
3864
- return (jsx("h1", { className: cx(sx(titleStyle$G), sx(weightStyles[weight]), className), children: children }));
3864
+ return (jsx("h1", { className: cx(sx(titleStyle$H), sx(weightStyles[weight]), className), children: children }));
3865
3865
  };
3866
3866
  Title.displayName = 'Title';
3867
3867
 
@@ -4718,11 +4718,11 @@ const identityStyle$2 = {
4718
4718
  display: 'flex',
4719
4719
  flexDirection: 'column',
4720
4720
  };
4721
- const nameStyle$6 = {
4721
+ const nameStyle$7 = {
4722
4722
  label: 'ContactCard-nameStyle',
4723
4723
  fontWeight: 600,
4724
4724
  };
4725
- const titleStyle$F = {
4725
+ const titleStyle$G = {
4726
4726
  label: 'ContactCard-titleStyle',
4727
4727
  fontSize: 12,
4728
4728
  color: 'var(--color-slate, #5c5c5c)',
@@ -4752,7 +4752,7 @@ const linkTextStyle = {
4752
4752
  const ContactCard$1 = ({ name, title, phone, email, action, showAvatar = true, className = '', }) => {
4753
4753
  if (!action && !name)
4754
4754
  return null;
4755
- return (jsxs("div", { className: cx(sx(contactStyle$1), className), children: [name && showAvatar && jsx(Avatar, { name: name, size: 36 }), jsxs("div", { className: sx(bodyStyle$b), children: [jsxs("div", { className: sx(identityStyle$2), children: [action || jsx("span", { className: sx(nameStyle$6), children: name }), title && jsx("span", { className: sx(titleStyle$F), children: title })] }), phone && (jsxs("a", { href: `tel:${phone}`, className: sx(linkStyle$1), children: [jsx(PhoneIcon, { size: 16, "aria-hidden": "true" }), jsx("span", { className: sx(linkTextStyle), children: phone })] })), email && (jsxs("a", { href: `mailto:${email}`, className: sx(linkStyle$1), children: [jsx(MailIcon, { size: 16, "aria-hidden": "true" }), jsx("span", { className: sx(linkTextStyle), children: email })] }))] })] }));
4755
+ return (jsxs("div", { className: cx(sx(contactStyle$1), className), children: [name && showAvatar && jsx(Avatar, { name: name, size: 36 }), jsxs("div", { className: sx(bodyStyle$b), children: [jsxs("div", { className: sx(identityStyle$2), children: [action || jsx("span", { className: sx(nameStyle$7), children: name }), title && jsx("span", { className: sx(titleStyle$G), children: title })] }), phone && (jsxs("a", { href: `tel:${phone}`, className: sx(linkStyle$1), children: [jsx(PhoneIcon, { size: 16, "aria-hidden": "true" }), jsx("span", { className: sx(linkTextStyle), children: phone })] })), email && (jsxs("a", { href: `mailto:${email}`, className: sx(linkStyle$1), children: [jsx(MailIcon, { size: 16, "aria-hidden": "true" }), jsx("span", { className: sx(linkTextStyle), children: email })] }))] })] }));
4756
4756
  };
4757
4757
  ContactCard$1.displayName = 'ContactCard';
4758
4758
 
@@ -5072,7 +5072,7 @@ const iconStyle$a = {
5072
5072
  backgroundColor: 'var(--bg-subtle)',
5073
5073
  color: 'var(--fg-4)',
5074
5074
  };
5075
- const titleStyle$E = {
5075
+ const titleStyle$F = {
5076
5076
  label: 'EmptyState-titleStyle',
5077
5077
  margin: 0,
5078
5078
  color: 'var(--fg-1)',
@@ -5088,7 +5088,7 @@ const descriptionStyle$a = {
5088
5088
  fontSize: 'var(--fs-sm)',
5089
5089
  lineHeight: 'var(--lh-sm)',
5090
5090
  };
5091
- const actionsStyle$d = {
5091
+ const actionsStyle$e = {
5092
5092
  label: 'EmptyState-actionsStyle',
5093
5093
  display: 'flex',
5094
5094
  flexWrap: 'wrap',
@@ -5098,7 +5098,7 @@ const actionsStyle$d = {
5098
5098
  };
5099
5099
 
5100
5100
  /** Placeholder shown when a list, table, or panel has nothing to display. */
5101
- const EmptyState$1 = ({ title, description, icon, actionLabel, onAction, secondaryActionLabel, onSecondaryAction, size = 'md', children, className = '', }) => (jsxs("div", { className: cx(sx(emptyStateStyle$1), sx(sizeStyles$4[size]), className), "data-test": "empty-state", children: [icon && jsx("div", { className: sx(iconStyle$a), "aria-hidden": "true", children: icon }), jsx("p", { className: sx(titleStyle$E), children: title }), description && jsx("p", { className: sx(descriptionStyle$a), children: description }), (actionLabel || secondaryActionLabel) && (jsxs("div", { className: sx(actionsStyle$d), children: [actionLabel && (jsx(Button, { size: "sm", onClick: onAction, "data-test": "empty-state-action", children: actionLabel })), secondaryActionLabel && (jsx(Button, { size: "sm", variant: "secondary", onClick: onSecondaryAction, "data-test": "empty-state-secondary-action", children: secondaryActionLabel }))] })), children] }));
5101
+ const EmptyState$1 = ({ title, description, icon, actionLabel, onAction, secondaryActionLabel, onSecondaryAction, size = 'md', children, className = '', }) => (jsxs("div", { className: cx(sx(emptyStateStyle$1), sx(sizeStyles$4[size]), className), "data-test": "empty-state", children: [icon && jsx("div", { className: sx(iconStyle$a), "aria-hidden": "true", children: icon }), jsx("p", { className: sx(titleStyle$F), children: title }), description && jsx("p", { className: sx(descriptionStyle$a), children: description }), (actionLabel || secondaryActionLabel) && (jsxs("div", { className: sx(actionsStyle$e), children: [actionLabel && (jsx(Button, { size: "sm", onClick: onAction, "data-test": "empty-state-action", children: actionLabel })), secondaryActionLabel && (jsx(Button, { size: "sm", variant: "secondary", onClick: onSecondaryAction, "data-test": "empty-state-secondary-action", children: secondaryActionLabel }))] })), children] }));
5102
5102
 
5103
5103
  /** FieldLayout's compiled rules. */
5104
5104
  const fieldStyle$4 = {
@@ -5178,11 +5178,11 @@ const messageStyle$2 = {
5178
5178
  label: 'FieldLayout-messageStyle', fontSize: 12
5179
5179
  };
5180
5180
  /** Paired with `messageStyle`, which sets no colour — no ranking to preserve. */
5181
- const errorStyle$1 = {
5181
+ const errorStyle$2 = {
5182
5182
  label: 'FieldLayout-errorStyle',
5183
5183
  color: 'var(--color-error, #940000)',
5184
5184
  };
5185
- const noteStyle$2 = {
5185
+ const noteStyle$3 = {
5186
5186
  label: 'FieldLayout-noteStyle',
5187
5187
  color: 'var(--color-stone, #787878)',
5188
5188
  };
@@ -5200,7 +5200,7 @@ const FieldLayout = ({ children, label, labelPosition = 'top', showLabel = true,
5200
5200
  const id = useId();
5201
5201
  const errorId = `${id}-error`;
5202
5202
  const hasError = Boolean(error);
5203
- return (jsxs("div", { className: cx(sx(fieldStyle$4), sx(labelPositionStyles[labelPosition]), className), children: [label && showLabel && (jsxs("label", { htmlFor: id, className: cx(sx(labelStyle$b), hasError ? sx(labelErrorStyle) : ''), children: [label, required && !disabled && (jsx("span", { className: sx(requiredStyle$2), "aria-hidden": "true", children: "*" })), tooltip && (jsx(Tooltip, { className: sx(tooltipStyle$1), content: tooltip, children: jsx(InfoIcon$1, { size: 16 }) }))] })), jsxs("div", { className: sx(controlStyle$2), children: [leftIcon && !disabled && (jsx("span", { className: cx(sx(iconStyle$9), sx(iconLeftStyle)), "aria-hidden": "true", children: leftIcon })), children({ id, describedBy: hasError ? errorId : undefined, hasError }), rightIcon && !disabled && (jsx("span", { className: cx(sx(iconStyle$9), sx(iconRightStyle)), "aria-hidden": "true", children: rightIcon }))] }), hasError && (jsx("p", { id: errorId, className: cx(sx(messageStyle$2), sx(errorStyle$1)), children: error })), note && jsx("p", { className: cx(sx(messageStyle$2), sx(noteStyle$2)), children: note })] }));
5203
+ return (jsxs("div", { className: cx(sx(fieldStyle$4), sx(labelPositionStyles[labelPosition]), className), children: [label && showLabel && (jsxs("label", { htmlFor: id, className: cx(sx(labelStyle$b), hasError ? sx(labelErrorStyle) : ''), children: [label, required && !disabled && (jsx("span", { className: sx(requiredStyle$2), "aria-hidden": "true", children: "*" })), tooltip && (jsx(Tooltip, { className: sx(tooltipStyle$1), content: tooltip, children: jsx(InfoIcon$1, { size: 16 }) }))] })), jsxs("div", { className: sx(controlStyle$2), children: [leftIcon && !disabled && (jsx("span", { className: cx(sx(iconStyle$9), sx(iconLeftStyle)), "aria-hidden": "true", children: leftIcon })), children({ id, describedBy: hasError ? errorId : undefined, hasError }), rightIcon && !disabled && (jsx("span", { className: cx(sx(iconStyle$9), sx(iconRightStyle)), "aria-hidden": "true", children: rightIcon }))] }), hasError && (jsx("p", { id: errorId, className: cx(sx(messageStyle$2), sx(errorStyle$2)), children: error })), note && jsx("p", { className: cx(sx(messageStyle$2), sx(noteStyle$3)), children: note })] }));
5204
5204
  };
5205
5205
  FieldLayout.displayName = 'FieldLayout';
5206
5206
 
@@ -5731,7 +5731,7 @@ const iconStyle$8 = {
5731
5731
  display: 'flex',
5732
5732
  },
5733
5733
  };
5734
- const titleStyle$D = {
5734
+ const titleStyle$E = {
5735
5735
  label: 'FormSection-titleStyle',
5736
5736
  margin: 0,
5737
5737
  fontSize: 16,
@@ -5798,7 +5798,7 @@ const statusStyles = {
5798
5798
  const FormSection = ({ title, icon, description, action, status, disabled = false, children, className, id, dataTest, }) => {
5799
5799
  const isSubmitted = status === 'submitted';
5800
5800
  const isDisabled = disabled || isSubmitted;
5801
- return (jsxs("div", { className: cx(sx(sectionStyle$a), className), id: id, "data-test": dataTest, children: [jsxs("div", { className: sx(headerStyle$J), children: [icon && jsx("span", { className: sx(iconStyle$8), children: icon }), jsxs("div", { className: sx(headingStyle$5), children: [jsx("h2", { className: sx(titleStyle$D), children: title }), description && jsx("p", { className: sx(descriptionStyle$9), children: description })] }), action && jsx("div", { className: sx(actionStyle$1), children: action })] }), jsxs("fieldset", { disabled: isDisabled, className: cx(sx(fieldsetStyle), isDisabled && sx(disabledStyle$4)), children: [status && (jsxs("div", { className: sx(statusStyle$6), children: [jsx("span", { className: sx(statusLabelStyle), children: "Status:" }), jsx("span", { className: cx(sx(statusValueStyle), sx(statusStyles[status])), children: status === 'submitted' ? 'Submitted' : status === 'draft' ? 'Draft' : 'Not Submitted' })] })), children] })] }));
5801
+ return (jsxs("div", { className: cx(sx(sectionStyle$a), className), id: id, "data-test": dataTest, children: [jsxs("div", { className: sx(headerStyle$J), children: [icon && jsx("span", { className: sx(iconStyle$8), children: icon }), jsxs("div", { className: sx(headingStyle$5), children: [jsx("h2", { className: sx(titleStyle$E), children: title }), description && jsx("p", { className: sx(descriptionStyle$9), children: description })] }), action && jsx("div", { className: sx(actionStyle$1), children: action })] }), jsxs("fieldset", { disabled: isDisabled, className: cx(sx(fieldsetStyle), isDisabled && sx(disabledStyle$4)), children: [status && (jsxs("div", { className: sx(statusStyle$6), children: [jsx("span", { className: sx(statusLabelStyle), children: "Status:" }), jsx("span", { className: cx(sx(statusValueStyle), sx(statusStyles[status])), children: status === 'submitted' ? 'Submitted' : status === 'draft' ? 'Draft' : 'Not Submitted' })] })), children] })] }));
5802
5802
  };
5803
5803
  FormSection.displayName = 'FormSection';
5804
5804
 
@@ -5946,7 +5946,7 @@ const lockedActiveStyle = {
5946
5946
  * and the tab picks one, which is exactly what the cascade resolved to and
5947
5947
  * needs no ordering between the rules to hold.
5948
5948
  */
5949
- const countStyle = {
5949
+ const countStyle$1 = {
5950
5950
  label: 'ManifestViewToggle-countStyle',
5951
5951
  fontSize: 11,
5952
5952
  fontWeight: 'var(--fw-bold)',
@@ -5973,7 +5973,7 @@ const ManifestViewToggle = ({ view, onView, paxCount, eqCount, locked, className
5973
5973
  // Locked reads before active, matching the descendant rules the
5974
5974
  // stylesheet ordered the same way.
5975
5975
  const countState = locked ? 'locked' : active ? 'active' : 'default';
5976
- return (jsxs("button", { type: "button", role: "tab", "aria-selected": active, onClick: () => onView(tab.key), className: cx(sx(tabStyle$3), active && sx(activeStyle), locked && sx(lockedStyle$1), locked && active && sx(lockedActiveStyle)), children: [jsx(Icon, { size: 16 }), tab.label, jsx("span", { className: cx(sx(countStyle), sx(countColorStyles[countState])), children: tab.count })] }, tab.key));
5976
+ return (jsxs("button", { type: "button", role: "tab", "aria-selected": active, onClick: () => onView(tab.key), className: cx(sx(tabStyle$3), active && sx(activeStyle), locked && sx(lockedStyle$1), locked && active && sx(lockedActiveStyle)), children: [jsx(Icon, { size: 16 }), tab.label, jsx("span", { className: cx(sx(countStyle$1), sx(countColorStyles[countState])), children: tab.count })] }, tab.key));
5977
5977
  }) }));
5978
5978
  };
5979
5979
 
@@ -6906,7 +6906,7 @@ const pretitleStyle$1 = {
6906
6906
  color: 'var(--color-slate, #5c5c5c)',
6907
6907
  margin: 0,
6908
6908
  };
6909
- const titleStyle$C = {
6909
+ const titleStyle$D = {
6910
6910
  label: 'PageHeader-titleStyle',
6911
6911
  fontSize: 36,
6912
6912
  lineHeight: '48px',
@@ -6926,7 +6926,7 @@ const titleStyle$C = {
6926
6926
  * The header keeps its height while `title` is empty and fades in once one
6927
6927
  * arrives, so pages do not jump as their data loads.
6928
6928
  */
6929
- const PageHeader = ({ title, pretitle, after, back, className = '', }) => (jsxs("div", { className: cx(sx(headerStyle$I), !title && sx(emptyStyle$m), className), children: [back, jsx("div", { className: sx(bodyStyle$a), children: jsxs("div", { className: sx(textStyle), children: [pretitle && jsx("h2", { className: sx(pretitleStyle$1), children: pretitle }), jsxs("h1", { className: sx(titleStyle$C), children: [title, "\u00A0"] }), after] }) })] }));
6929
+ const PageHeader = ({ title, pretitle, after, back, className = '', }) => (jsxs("div", { className: cx(sx(headerStyle$I), !title && sx(emptyStyle$m), className), children: [back, jsx("div", { className: sx(bodyStyle$a), children: jsxs("div", { className: sx(textStyle), children: [pretitle && jsx("h2", { className: sx(pretitleStyle$1), children: pretitle }), jsxs("h1", { className: sx(titleStyle$D), children: [title, "\u00A0"] }), after] }) })] }));
6930
6930
  PageHeader.displayName = 'PageHeader';
6931
6931
 
6932
6932
  /**
@@ -6982,7 +6982,7 @@ const sectionStyle$9 = {
6982
6982
  fontWeight: 400,
6983
6983
  lineHeight: '28px',
6984
6984
  };
6985
- const titleStyle$B = {
6985
+ const titleStyle$C = {
6986
6986
  label: 'PageHeaderSubsection-titleStyle',
6987
6987
  gridArea: 'title',
6988
6988
  margin: 0,
@@ -6999,7 +6999,7 @@ const metaStyle$1 = {
6999
6999
  minWidth: 0,
7000
7000
  marginTop: 4,
7001
7001
  };
7002
- const actionsStyle$c = {
7002
+ const actionsStyle$d = {
7003
7003
  label: 'PageHeaderSubsection-actionsStyle',
7004
7004
  gridArea: 'actions',
7005
7005
  display: 'flex',
@@ -7019,7 +7019,7 @@ const PageHeaderSubsection = ({ sectionName, pageName, meta, onBack, backLabel =
7019
7019
  else
7020
7020
  window.history.back();
7021
7021
  };
7022
- return (jsxs("div", { className: cx(sx(headerStyle$H), className), "data-test": "page-header-subsection", children: [jsxs("div", { className: sx(sectionRowStyle), children: [!hideBack && (jsx("button", { type: "button", className: sx(backButtonStyle$1), onClick: handleBack, "aria-label": backLabel, "data-test": "page-header-subsection-back", children: jsx(BackIcon$1, {}) })), jsx("p", { className: sx(sectionStyle$9), children: sectionName })] }), jsx("h1", { className: sx(titleStyle$B), children: pageName }), meta && jsx("div", { className: sx(metaStyle$1), children: meta }), actions && jsx("div", { className: sx(actionsStyle$c), children: actions })] }));
7022
+ return (jsxs("div", { className: cx(sx(headerStyle$H), className), "data-test": "page-header-subsection", children: [jsxs("div", { className: sx(sectionRowStyle), children: [!hideBack && (jsx("button", { type: "button", className: sx(backButtonStyle$1), onClick: handleBack, "aria-label": backLabel, "data-test": "page-header-subsection-back", children: jsx(BackIcon$1, {}) })), jsx("p", { className: sx(sectionStyle$9), children: sectionName })] }), jsx("h1", { className: sx(titleStyle$C), children: pageName }), meta && jsx("div", { className: sx(metaStyle$1), children: meta }), actions && jsx("div", { className: sx(actionsStyle$d), children: actions })] }));
7023
7023
  };
7024
7024
  PageHeaderSubsection.displayName = 'PageHeaderSubsection';
7025
7025
 
@@ -7117,7 +7117,7 @@ const focusRing = {
7117
7117
  * current page is matched on `[aria-current="page"]` instead — the component
7118
7118
  * sets that attribute from the same expression that sets `currentStyle`.
7119
7119
  */
7120
- const pageStyle$u = {
7120
+ const pageStyle$v = {
7121
7121
  label: 'Pagination-pageStyle',
7122
7122
  ...buttonBase,
7123
7123
  '&:hover:not([aria-current="page"])': {
@@ -7200,7 +7200,7 @@ const Pagination = ({ page, pageSize, totalItems, siblingCount = 1, pageSizeOpti
7200
7200
  return;
7201
7201
  onPageChange?.(next);
7202
7202
  };
7203
- return (jsxs("nav", { className: cx(sx(paginationStyle$3), className), "aria-label": ariaLabel, "data-test": "pagination", children: [!hideSummary && (jsxs("p", { className: sx(summaryStyle$6), "data-test": "pagination-summary", children: ["Showing ", firstItem, "\u2013", lastItem, " of ", totalItems, " ", itemLabel] })), jsxs("div", { className: sx(controlsStyle), children: [showSizeSelector && (jsxs("label", { className: sx(pageSizeStyle), children: [jsx("span", { children: "Rows per page" }), jsx("select", { value: pageSize, onChange: (event) => onPageSizeChange?.(Number(event.target.value)), "data-test": "pagination-page-size", children: pageSizeOptions.map((option) => (jsx("option", { value: option, children: option }, option))) })] })), jsxs("ul", { className: sx(pagesStyle), children: [jsx("li", { children: jsx("button", { type: "button", className: sx(stepStyle), onClick: () => goTo(currentPage - 1), disabled: currentPage <= 1, "aria-label": "Previous page", "data-test": "pagination-previous", children: jsx(ChevronLeftIcon, { size: 16 }) }) }), items.map((item, index) => item === 'ellipsis' ? (jsx("li", { className: sx(ellipsisStyle), "aria-hidden": "true", children: "\u2026" }, `ellipsis-${index}`)) : (jsx("li", { children: jsx("button", { type: "button", className: cx(sx(pageStyle$u), item === currentPage && sx(currentStyle)), onClick: () => goTo(item), "aria-label": `Page ${item}`, "aria-current": item === currentPage ? 'page' : undefined, "data-test": `pagination-page-${item}`, children: item }) }, item))), jsx("li", { children: jsx("button", { type: "button", className: sx(stepStyle), onClick: () => goTo(currentPage + 1), disabled: currentPage >= pageCount, "aria-label": "Next page", "data-test": "pagination-next", children: jsx(ChevronRightIcon$1, { size: 16 }) }) })] })] })] }));
7203
+ return (jsxs("nav", { className: cx(sx(paginationStyle$3), className), "aria-label": ariaLabel, "data-test": "pagination", children: [!hideSummary && (jsxs("p", { className: sx(summaryStyle$6), "data-test": "pagination-summary", children: ["Showing ", firstItem, "\u2013", lastItem, " of ", totalItems, " ", itemLabel] })), jsxs("div", { className: sx(controlsStyle), children: [showSizeSelector && (jsxs("label", { className: sx(pageSizeStyle), children: [jsx("span", { children: "Rows per page" }), jsx("select", { value: pageSize, onChange: (event) => onPageSizeChange?.(Number(event.target.value)), "data-test": "pagination-page-size", children: pageSizeOptions.map((option) => (jsx("option", { value: option, children: option }, option))) })] })), jsxs("ul", { className: sx(pagesStyle), children: [jsx("li", { children: jsx("button", { type: "button", className: sx(stepStyle), onClick: () => goTo(currentPage - 1), disabled: currentPage <= 1, "aria-label": "Previous page", "data-test": "pagination-previous", children: jsx(ChevronLeftIcon, { size: 16 }) }) }), items.map((item, index) => item === 'ellipsis' ? (jsx("li", { className: sx(ellipsisStyle), "aria-hidden": "true", children: "\u2026" }, `ellipsis-${index}`)) : (jsx("li", { children: jsx("button", { type: "button", className: cx(sx(pageStyle$v), item === currentPage && sx(currentStyle)), onClick: () => goTo(item), "aria-label": `Page ${item}`, "aria-current": item === currentPage ? 'page' : undefined, "data-test": `pagination-page-${item}`, children: item }) }, item))), jsx("li", { children: jsx("button", { type: "button", className: sx(stepStyle), onClick: () => goTo(currentPage + 1), disabled: currentPage >= pageCount, "aria-label": "Next page", "data-test": "pagination-next", children: jsx(ChevronRightIcon$1, { size: 16 }) }) })] })] })] }));
7204
7204
  };
7205
7205
 
7206
7206
  /* Progress Bar */
@@ -7371,7 +7371,7 @@ ResultCount.displayName = 'ResultCount';
7371
7371
  * - `@keyframes spin` was scoped by the module; injected at runtime it is
7372
7372
  * global, so it is namespaced `stm-spin` and the `animation` value follows.
7373
7373
  */
7374
- const toolbarStyle$4 = {
7374
+ const toolbarStyle$5 = {
7375
7375
  label: 'RosterToolbar-toolbarStyle',
7376
7376
  display: 'flex',
7377
7377
  alignItems: 'center',
@@ -7550,7 +7550,7 @@ const DropdownButton = ({ label, icon, options, }) => {
7550
7550
  * RosterToolbar - Toolbar for roster management with import/export/save actions
7551
7551
  */
7552
7552
  const RosterToolbar = ({ importOptions, exportOptions, lockToggle, saveButton, additionalActions, searchField, className = '', }) => {
7553
- const toolbarClasses = cx(sx(toolbarStyle$4), className);
7553
+ const toolbarClasses = cx(sx(toolbarStyle$5), className);
7554
7554
  return (jsxs("div", { className: toolbarClasses, children: [jsxs("div", { className: sx(leftSectionStyle), children: [searchField, additionalActions] }), jsxs("div", { className: sx(rightSectionStyle), children: [importOptions && importOptions.length > 0 && (jsx(DropdownButton, { label: "Import", icon: jsx(ImportIcon, {}), options: importOptions })), exportOptions && exportOptions.length > 0 && (jsx(DropdownButton, { label: "Export", icon: jsx(ExportIcon$1, {}), options: exportOptions })), lockToggle && (jsxs("button", { type: "button", className: cx(sx(lockButtonStyle), lockToggle.isLocked && sx(lockedStyle)), onClick: () => lockToggle.onToggle(!lockToggle.isLocked), disabled: lockToggle.disabled, "aria-label": lockToggle.isLocked ? 'Unlock roster' : 'Lock roster', children: [lockToggle.isLocked ? jsx(LockIcon, {}) : jsx(UnlockIcon, {}), jsx("span", { children: lockToggle.isLocked ? 'Locked' : 'Unlocked' })] })), saveButton && (jsxs("button", { type: "button", className: sx(saveButtonStyle), onClick: saveButton.onClick, disabled: saveButton.disabled || saveButton.loading, children: [saveButton.loading ? jsx(SpinnerIcon, {}) : jsx(SaveIcon, {}), jsx("span", { children: saveButton.label || 'Save' })] }))] })] }));
7555
7555
  };
7556
7556
  RosterToolbar.displayName = 'RosterToolbar';
@@ -7667,7 +7667,7 @@ const SearchField = forwardRef(({ placeholder = 'Search...', value, defaultValue
7667
7667
  SearchField.displayName = 'SearchField';
7668
7668
 
7669
7669
  /** The form's own vertical rhythm. */
7670
- const formStyle$5 = {
7670
+ const formStyle$6 = {
7671
7671
  label: 'SchoolContactForm-formStyle',
7672
7672
  display: 'grid',
7673
7673
  gap: 16,
@@ -7726,7 +7726,7 @@ const phoneFieldsStyle = {
7726
7726
  * Layout for Hub's school-contact editor. Field controls stay injectable so
7727
7727
  * consuming applications retain their form state, validation, and masking.
7728
7728
  */
7729
- const SchoolContactForm = ({ mode, createFromPortalUser, firstNameField, middleInitialField, lastNameField, businessPhoneField, cellPhoneField, emailField, className = '', }) => (jsxs("div", { className: cx(sx(formStyle$5), className), children: [mode === 'Add' && (jsxs(Fragment, { children: [jsxs("div", { children: [jsx("label", { className: sx(portalLabelStyle), children: "Create From Portal User" }), createFromPortalUser] }), jsx("div", { className: sx(dividerStyle$2), children: jsx("strong", { children: "OR" }) }), jsx("p", { className: sx(newContactLabelStyle), children: "Create New Contact Without Portal Access" })] })), jsxs("div", { className: sx(nameFieldsStyle), children: [firstNameField, middleInitialField, lastNameField] }), jsxs("div", { className: sx(phoneFieldsStyle), children: [businessPhoneField, cellPhoneField] }), jsx("div", { children: emailField })] }));
7729
+ const SchoolContactForm = ({ mode, createFromPortalUser, firstNameField, middleInitialField, lastNameField, businessPhoneField, cellPhoneField, emailField, className = '', }) => (jsxs("div", { className: cx(sx(formStyle$6), className), children: [mode === 'Add' && (jsxs(Fragment, { children: [jsxs("div", { children: [jsx("label", { className: sx(portalLabelStyle), children: "Create From Portal User" }), createFromPortalUser] }), jsx("div", { className: sx(dividerStyle$2), children: jsx("strong", { children: "OR" }) }), jsx("p", { className: sx(newContactLabelStyle), children: "Create New Contact Without Portal Access" })] })), jsxs("div", { className: sx(nameFieldsStyle), children: [firstNameField, middleInitialField, lastNameField] }), jsxs("div", { className: sx(phoneFieldsStyle), children: [businessPhoneField, cellPhoneField] }), jsx("div", { children: emailField })] }));
7730
7730
 
7731
7731
  const segmentStyle$2 = {
7732
7732
  label: 'Segment-segmentStyle',
@@ -7955,7 +7955,7 @@ const activeTabStyle$1 = {
7955
7955
  },
7956
7956
  };
7957
7957
  /* Actions */
7958
- const actionsStyle$b = {
7958
+ const actionsStyle$c = {
7959
7959
  label: 'SelectFilter-actionsStyle',
7960
7960
  display: 'flex',
7961
7961
  gap: 8,
@@ -8119,7 +8119,7 @@ const SelectFilter = ({ label, options = [], groupedOptions = {}, value = [], on
8119
8119
  }
8120
8120
  return `${selected.length} selected`;
8121
8121
  };
8122
- return (jsxs("div", { ref: dropdownRef, className: cx(sx(containerStyle$4), className), children: [jsxs("button", { type: "button", className: cx(sx(triggerStyle$1), disabled ? sx(disabledStyle) : '', isOpen ? sx(openStyle$2) : ''), onClick: () => !disabled && setIsOpen(!isOpen), children: [jsx("span", { className: cx(sx(triggerTextStyle), selectedValues.length === 0 ? sx(placeholderStyle) : ''), children: getDisplayText() }), jsx("span", { className: sx(chevronStyle$3), children: jsx(ChevronIcon$1, {}) })] }), isOpen && (jsxs("div", { className: sx(dropdownStyle$1), style: { width }, children: [grouped && tabs.length > 0 && (jsx("div", { className: sx(tabsStyle$8), children: tabs.map(tab => (jsx("button", { type: "button", className: cx(sx(tabStyle$2), activeTab === tab ? sx(activeTabStyle$1) : ''), onClick: () => setActiveTab(tab), children: tab.charAt(0).toUpperCase() + tab.slice(1) }, tab))) })), multiselect && (jsxs("div", { className: sx(actionsStyle$b), children: [jsx("button", { type: "button", className: sx(actionBtnStyle), onClick: handleSelectAll, children: "Select All" }), jsx("button", { type: "button", className: sx(actionBtnStyle), onClick: handleClear, children: "Clear" })] })), jsx("div", { className: sx(optionsStyle), children: currentOptions.map(option => (jsxs("div", { className: cx(sx(optionStyle), selectedValues.includes(option.value) ? sx(selectedStyle$3) : ''), onClick: () => handleSelect(option.value), children: [multiselect && (jsx("span", { className: sx(checkboxStyle$1), children: selectedValues.includes(option.value) && jsx(CheckIcon, {}) })), jsx("span", { className: sx(optionLabelStyle), children: option.label })] }, option.value))) }), multiselect && (jsx("div", { className: sx(footerStyle$d), children: jsx("button", { type: "button", className: sx(applyBtnStyle), onClick: () => setIsOpen(false), children: "Apply" }) }))] }))] }));
8122
+ return (jsxs("div", { ref: dropdownRef, className: cx(sx(containerStyle$4), className), children: [jsxs("button", { type: "button", className: cx(sx(triggerStyle$1), disabled ? sx(disabledStyle) : '', isOpen ? sx(openStyle$2) : ''), onClick: () => !disabled && setIsOpen(!isOpen), children: [jsx("span", { className: cx(sx(triggerTextStyle), selectedValues.length === 0 ? sx(placeholderStyle) : ''), children: getDisplayText() }), jsx("span", { className: sx(chevronStyle$3), children: jsx(ChevronIcon$1, {}) })] }), isOpen && (jsxs("div", { className: sx(dropdownStyle$1), style: { width }, children: [grouped && tabs.length > 0 && (jsx("div", { className: sx(tabsStyle$8), children: tabs.map(tab => (jsx("button", { type: "button", className: cx(sx(tabStyle$2), activeTab === tab ? sx(activeTabStyle$1) : ''), onClick: () => setActiveTab(tab), children: tab.charAt(0).toUpperCase() + tab.slice(1) }, tab))) })), multiselect && (jsxs("div", { className: sx(actionsStyle$c), children: [jsx("button", { type: "button", className: sx(actionBtnStyle), onClick: handleSelectAll, children: "Select All" }), jsx("button", { type: "button", className: sx(actionBtnStyle), onClick: handleClear, children: "Clear" })] })), jsx("div", { className: sx(optionsStyle), children: currentOptions.map(option => (jsxs("div", { className: cx(sx(optionStyle), selectedValues.includes(option.value) ? sx(selectedStyle$3) : ''), onClick: () => handleSelect(option.value), children: [multiselect && (jsx("span", { className: sx(checkboxStyle$1), children: selectedValues.includes(option.value) && jsx(CheckIcon, {}) })), jsx("span", { className: sx(optionLabelStyle), children: option.label })] }, option.value))) }), multiselect && (jsx("div", { className: sx(footerStyle$d), children: jsx("button", { type: "button", className: sx(applyBtnStyle), onClick: () => setIsOpen(false), children: "Apply" }) }))] }))] }));
8123
8123
  };
8124
8124
  SelectFilter.displayName = 'SelectFilter';
8125
8125
 
@@ -8621,7 +8621,7 @@ const toggleRowStyle = {
8621
8621
  '& [data-team-picker-only]': { opacity: 0 },
8622
8622
  '&:hover [data-team-picker-only], &:focus-within [data-team-picker-only]': { opacity: 1 },
8623
8623
  };
8624
- const nameStyle$5 = {
8624
+ const nameStyle$6 = {
8625
8625
  label: 'TeamPicker-nameStyle',
8626
8626
  flex: 1,
8627
8627
  // `&&`: see rootStyle — the name is a span, which host heading rules target.
@@ -8662,7 +8662,7 @@ const TeamPicker = ({ groups, groupOrder, activeGroup, onGroupChange, mode = 'si
8662
8662
  const row = (team) => {
8663
8663
  const chosen = selected.includes(team.code);
8664
8664
  if (!multiple) {
8665
- return (jsxs("button", { type: "button", className: [sx(pickRowStyle), chosen && sx(pickedStyle)].filter(Boolean).join(' '), "aria-label": `${team.name} (${team.code})`, "aria-pressed": chosen || undefined, onClick: () => onSelect?.(team.code), "data-testid": "team-picker-option", children: [jsx(SportCodeBadge, { code: team.code }), jsx("span", { className: sx(nameStyle$5), children: team.name })] }, team.code));
8665
+ return (jsxs("button", { type: "button", className: [sx(pickRowStyle), chosen && sx(pickedStyle)].filter(Boolean).join(' '), "aria-label": `${team.name} (${team.code})`, "aria-pressed": chosen || undefined, onClick: () => onSelect?.(team.code), "data-testid": "team-picker-option", children: [jsx(SportCodeBadge, { code: team.code }), jsx("span", { className: sx(nameStyle$6), children: team.name })] }, team.code));
8666
8666
  }
8667
8667
  return (jsxs("div", { className: sx(toggleRowStyle),
8668
8668
  // A click anywhere on the row toggles the team, except on the checkbox
@@ -8672,7 +8672,7 @@ const TeamPicker = ({ groups, groupOrder, activeGroup, onGroupChange, mode = 'si
8672
8672
  if (event.target.closest('input, label'))
8673
8673
  return;
8674
8674
  onToggle?.(team.code);
8675
- }, "data-testid": "team-picker-option", children: [jsx(Checkbox, { size: "sm", checked: chosen, onChange: () => onToggle?.(team.code), "aria-label": `${team.name} (${team.code})` }), jsx(SportCodeBadge, { code: team.code }), " ", jsx("span", { className: sx(nameStyle$5), children: team.name }), onOnly && (jsx(Button, { type: "button", variant: "secondary", size: "sm", "data-team-picker-only": "", onClick: (event) => {
8675
+ }, "data-testid": "team-picker-option", children: [jsx(Checkbox, { size: "sm", checked: chosen, onChange: () => onToggle?.(team.code), "aria-label": `${team.name} (${team.code})` }), jsx(SportCodeBadge, { code: team.code }), " ", jsx("span", { className: sx(nameStyle$6), children: team.name }), onOnly && (jsx(Button, { type: "button", variant: "secondary", size: "sm", "data-team-picker-only": "", onClick: (event) => {
8676
8676
  event.stopPropagation();
8677
8677
  onOnly(team.code);
8678
8678
  }, children: "Only" }))] }, team.code));
@@ -8728,7 +8728,7 @@ const identityStyle$1 = {
8728
8728
  gap: 12,
8729
8729
  },
8730
8730
  };
8731
- const codeStyle$3 = {
8731
+ const codeStyle$4 = {
8732
8732
  label: 'TeamCalendarHeader-codeStyle',
8733
8733
  background: '#fff',
8734
8734
  borderRadius: 12,
@@ -8739,7 +8739,7 @@ const codeStyle$3 = {
8739
8739
  fontWeight: 400,
8740
8740
  },
8741
8741
  };
8742
- const nameStyle$4 = {
8742
+ const nameStyle$5 = {
8743
8743
  label: 'TeamCalendarHeader-nameStyle',
8744
8744
  color: 'var(--color-slate, #5c5c5c)',
8745
8745
  fontSize: 20,
@@ -8765,7 +8765,7 @@ const contentStyle$8 = {
8765
8765
  * It sticks to the top of its column so the team stays identifiable while the
8766
8766
  * schedule scrolls.
8767
8767
  */
8768
- const TeamCalendarHeader = ({ teamCode, teamFullName, children, className = '', }) => (jsxs("div", { className: cx(sx(headerStyle$G), className), children: [jsx("div", { className: sx(rowStyle$7), children: jsxs("div", { className: sx(identityStyle$1), children: [jsx("div", { className: sx(codeStyle$3), children: teamCode }), teamFullName && jsx("span", { className: sx(nameStyle$4), children: teamFullName })] }) }), jsx("div", { className: sx(contentStyle$8), children: children })] }));
8768
+ const TeamCalendarHeader = ({ teamCode, teamFullName, children, className = '', }) => (jsxs("div", { className: cx(sx(headerStyle$G), className), children: [jsx("div", { className: sx(rowStyle$7), children: jsxs("div", { className: sx(identityStyle$1), children: [jsx("div", { className: sx(codeStyle$4), children: teamCode }), teamFullName && jsx("span", { className: sx(nameStyle$5), children: teamFullName })] }) }), jsx("div", { className: sx(contentStyle$8), children: children })] }));
8769
8769
  TeamCalendarHeader.displayName = 'TeamCalendarHeader';
8770
8770
 
8771
8771
  /**
@@ -8835,7 +8835,7 @@ const pretitleStyle = {
8835
8835
  fontSize: 20,
8836
8836
  lineHeight: '32px',
8837
8837
  };
8838
- const titleStyle$A = {
8838
+ const titleStyle$B = {
8839
8839
  label: 'TeamHeader-titleStyle',
8840
8840
  margin: 0,
8841
8841
  overflowWrap: 'anywhere',
@@ -8848,7 +8848,7 @@ const titleStyle$A = {
8848
8848
  lineHeight: '52px',
8849
8849
  },
8850
8850
  };
8851
- const actionsStyle$a = {
8851
+ const actionsStyle$b = {
8852
8852
  label: 'TeamHeader-actionsStyle',
8853
8853
  display: 'flex',
8854
8854
  alignItems: 'center',
@@ -8873,7 +8873,7 @@ const TeamHeader = ({ title: suppliedTitle, teamCode, teamName, pretitle = 'Team
8873
8873
  window.location.href = backHref;
8874
8874
  }
8875
8875
  };
8876
- return (jsxs("div", { className: headerClasses, "data-test": "team-header", children: [jsxs("div", { className: sx(leftStyle$1), children: [(backHref || onBack) && (jsx("button", { type: "button", className: sx(backButtonStyle), onClick: handleBack, "aria-label": "Go back", "data-test": "team-header-back", children: jsx(BackIcon, {}) })), jsxs("div", { className: sx(titlesStyle), children: [pretitle && jsx("span", { className: sx(pretitleStyle), children: pretitle }), jsxs("h1", { className: sx(titleStyle$A), children: [title, "\u00A0"] })] })] }), actions && (jsx("div", { className: sx(actionsStyle$a), children: actions }))] }));
8876
+ return (jsxs("div", { className: headerClasses, "data-test": "team-header", children: [jsxs("div", { className: sx(leftStyle$1), children: [(backHref || onBack) && (jsx("button", { type: "button", className: sx(backButtonStyle), onClick: handleBack, "aria-label": "Go back", "data-test": "team-header-back", children: jsx(BackIcon, {}) })), jsxs("div", { className: sx(titlesStyle), children: [pretitle && jsx("span", { className: sx(pretitleStyle), children: pretitle }), jsxs("h1", { className: sx(titleStyle$B), children: [title, "\u00A0"] })] })] }), actions && (jsx("div", { className: sx(actionsStyle$b), children: actions }))] }));
8877
8877
  };
8878
8878
  const DEFAULT_TABS$1 = [
8879
8879
  { id: 'profile', label: 'Profile' },
@@ -9226,7 +9226,7 @@ const legErrorStyle = {
9226
9226
  color: 'var(--color-error)',
9227
9227
  fontSize: 'var(--fs-sm)',
9228
9228
  };
9229
- const actionsStyle$9 = {
9229
+ const actionsStyle$a = {
9230
9230
  label: 'AcmiQuoteCalculator-actionsStyle',
9231
9231
  display: 'flex',
9232
9232
  flexWrap: 'wrap',
@@ -9467,7 +9467,7 @@ const AcmiQuoteCalculator = ({ carrierOptions = ACMI_CARRIER_OPTIONS, aircraftOp
9467
9467
  return (jsxs("div", { className: cx(sx(calculatorStyle$1), className), "data-test": "acmi-quote-calculator", children: [showErrors && errorList.length > 0 && (jsx(Alert, { variant: "error", title: "Fix these before calculating", children: jsx("ul", { className: sx(errorSummaryStyle$1), "data-test": "acmi-error-summary", children: errorList.map(([field, message]) => (jsx("li", { children: message }, field))) }) })), calculationError && (jsx(Alert, { variant: "error", title: "Quote could not be calculated", children: jsx("p", { className: sx(alertMessageStyle), "data-test": "acmi-calculation-error", children: calculationError }) })), jsxs("div", { className: sx(columnsStyle), children: [jsxs("section", { className: sx(panelStyle$6), "aria-label": "Quote configuration", children: [jsx("h3", { className: sx(panelTitleStyle), children: "Quote Configuration" }), 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" }), 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" }), 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" }), 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" }), 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" }), 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" }), 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 && (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" }))] }), jsxs("section", { className: sx(panelStyle$6), "aria-label": "Flight itinerary", children: [jsx("h3", { className: sx(panelTitleStyle), children: "Flight Itinerary" }), jsx(Alert, { variant: "primary", children: positioningMode === 'automatic' ? (jsxs(Fragment, { children: ["Enter ", 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."] })) : (jsxs(Fragment, { children: ["Enter ", 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 && (jsx("p", { className: sx(legErrorStyle), role: "alert", "data-test": "acmi-legs-error", children: errors.legs })), jsx("ol", { className: sx(legsStyle$3), children: inputs.legs.map((leg, index) => (jsxs("li", { className: cx(sx(legStyle$2), positioningMode === 'automatic' && sx(automaticLegStyle)), "data-test": "acmi-leg", children: [jsxs("span", { className: sx(legIndexStyle$1), children: ["Leg ", index + 1] }), positioningMode === 'explicit' && (jsx(Select, { id: `${leg.id}-type`, size: "sm", label: "Leg type", options: [
9468
9468
  { value: 'live', label: 'Live' },
9469
9469
  { value: 'ferry', label: 'Ferry' },
9470
- ], value: leg.type ?? 'live', onChange: (event) => updateLeg(leg.id, { type: event.target.value }), "data-test": "acmi-leg-type" })), 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" }), 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" }), 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" }), 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: jsx(TrashIcon$2, { size: 16 }) })] }, leg.id))) }), jsxs("div", { className: sx(actionsStyle$9), children: [jsx(Button, { variant: "outline", size: "sm", leftIcon: jsx(PlusIcon$2, { size: 16 }), onClick: addLeg, "data-test": "acmi-add-leg", children: "Add Flight Leg" }), jsx(Button, { size: "sm", loading: calculating, onClick: calculate, "data-test": "acmi-calculate", children: calculating ? 'Calculating' : 'Calculate Quote' }), result && onSubmitForApproval && (jsx(Button, { variant: "secondary", size: "sm", onClick: () => onSubmitForApproval(inputs), "data-test": "acmi-submit-approval", children: "Use This Total" }))] })] })] }), result && (jsxs("section", { className: sx(resultsStyle), "aria-label": "Quote summary", "data-test": "acmi-results", children: [jsx("h3", { className: sx(panelTitleStyle), children: "Quote Summary" }), jsxs("dl", { className: sx(resultGridStyle), children: [jsxs("div", { children: [jsx("dt", { children: "Operating Subtotal" }), jsx("dd", { children: currency.format(result.operatingSubtotal) })] }), jsxs("div", { children: [jsx("dt", { children: "Markup Applied" }), jsx("dd", { children: currency.format(result.markupAmount) })] }), jsxs("div", { children: [jsx("dt", { children: "Insurance (Flat Fee)" }), jsx("dd", { children: currency.format(result.insuranceAmount) })] }), jsxs("div", { children: [jsx("dt", { children: "Pre-Tax Total" }), jsx("dd", { children: currency.format(result.preTaxTotal) })] }), jsxs("div", { children: [jsx("dt", { children: "Federal Excise Tax" }), jsx("dd", { children: currency.format(result.fet) })] }), jsxs("div", { children: [jsx("dt", { children: "Segment Fees" }), jsx("dd", { children: currency.format(result.segmentFees) })] })] }), jsxs("p", { className: sx(finalPriceStyle), "data-test": "acmi-final-price", children: [jsx("span", { children: "Total Quoted Price" }), jsx("strong", { children: currency.format(result.finalPrice) })] }), result.pricingDetails && (jsxs("dl", { className: sx(contractFactsStyle), "data-test": "acmi-pricing-details", children: [jsxs("div", { "data-test": "acmi-ferry-floor", children: [jsx("dt", { children: "Ferry block time" }), jsxs("dd", { children: [result.pricingDetails.ferryBlockHours.toFixed(2), " h", result.pricingDetails.ferryMinimumHours
9470
+ ], value: leg.type ?? 'live', onChange: (event) => updateLeg(leg.id, { type: event.target.value }), "data-test": "acmi-leg-type" })), 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" }), 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" }), 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" }), 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: jsx(TrashIcon$2, { size: 16 }) })] }, leg.id))) }), jsxs("div", { className: sx(actionsStyle$a), children: [jsx(Button, { variant: "outline", size: "sm", leftIcon: jsx(PlusIcon$2, { size: 16 }), onClick: addLeg, "data-test": "acmi-add-leg", children: "Add Flight Leg" }), jsx(Button, { size: "sm", loading: calculating, onClick: calculate, "data-test": "acmi-calculate", children: calculating ? 'Calculating' : 'Calculate Quote' }), result && onSubmitForApproval && (jsx(Button, { variant: "secondary", size: "sm", onClick: () => onSubmitForApproval(inputs), "data-test": "acmi-submit-approval", children: "Use This Total" }))] })] })] }), result && (jsxs("section", { className: sx(resultsStyle), "aria-label": "Quote summary", "data-test": "acmi-results", children: [jsx("h3", { className: sx(panelTitleStyle), children: "Quote Summary" }), jsxs("dl", { className: sx(resultGridStyle), children: [jsxs("div", { children: [jsx("dt", { children: "Operating Subtotal" }), jsx("dd", { children: currency.format(result.operatingSubtotal) })] }), jsxs("div", { children: [jsx("dt", { children: "Markup Applied" }), jsx("dd", { children: currency.format(result.markupAmount) })] }), jsxs("div", { children: [jsx("dt", { children: "Insurance (Flat Fee)" }), jsx("dd", { children: currency.format(result.insuranceAmount) })] }), jsxs("div", { children: [jsx("dt", { children: "Pre-Tax Total" }), jsx("dd", { children: currency.format(result.preTaxTotal) })] }), jsxs("div", { children: [jsx("dt", { children: "Federal Excise Tax" }), jsx("dd", { children: currency.format(result.fet) })] }), jsxs("div", { children: [jsx("dt", { children: "Segment Fees" }), jsx("dd", { children: currency.format(result.segmentFees) })] })] }), jsxs("p", { className: sx(finalPriceStyle), "data-test": "acmi-final-price", children: [jsx("span", { children: "Total Quoted Price" }), jsx("strong", { children: currency.format(result.finalPrice) })] }), result.pricingDetails && (jsxs("dl", { className: sx(contractFactsStyle), "data-test": "acmi-pricing-details", children: [jsxs("div", { "data-test": "acmi-ferry-floor", children: [jsx("dt", { children: "Ferry block time" }), jsxs("dd", { children: [result.pricingDetails.ferryBlockHours.toFixed(2), " h", result.pricingDetails.ferryMinimumHours
9471
9471
  ? ` · ${result.pricingDetails.ferryMinimumHours.toFixed(2)} h minimum per estimated SkyWest ferry leg`
9472
9472
  : ''] })] }), jsxs("div", { "data-test": "acmi-fuel-buffer", children: [jsx("dt", { children: "Fuel buffer" }), jsxs("dd", { children: [(result.pricingDetails.fuelBufferPercent * 100).toFixed(0), "% \u00B7 ", currency.format(result.pricingDetails.fuelBufferAmount)] })] }), jsxs("div", { "data-test": "acmi-screening", children: [jsx("dt", { children: "Security screening" }), jsx("dd", { children: currency.format(result.pricingDetails.screeningAmount) })] })] })), result.legs && result.legs.length > 0 && (jsxs("div", { className: sx(pricedLegsStyle), "data-test": "acmi-priced-legs", children: [jsx("h4", { children: "Backend-priced itinerary" }), jsxs("div", { className: sx(pricedLegHeaderStyle), "aria-hidden": "true", children: [jsx("span", { children: "Leg" }), jsx("span", { children: "Type" }), jsx("span", { children: "Block" }), jsx("span", { children: "Total" })] }), result.legs.map((leg) => (jsxs("div", { className: sx(pricedLegStyle), "data-test": "acmi-priced-leg", children: [jsxs("span", { children: [leg.origin, " \u2192 ", leg.destination] }), jsx("span", { "data-test": "acmi-priced-leg-type", children: leg.type === 'ferry' ? 'Ferry' : 'Live' }), jsxs("span", { "data-test": "acmi-priced-leg-block", children: [leg.blockHours.toFixed(2), " h"] }), jsx("span", { children: currency.format(leg.total) })] }, leg.id)))] }))] }))] }));
9473
9473
  };
@@ -9480,7 +9480,7 @@ const wrapperStyle$2 = {
9480
9480
  gap: 'var(--space-3)',
9481
9481
  fontFamily: 'var(--font-family-base)',
9482
9482
  };
9483
- const toolbarStyle$3 = {
9483
+ const toolbarStyle$4 = {
9484
9484
  label: 'AgentGroupTravelRequestsTable-toolbarStyle',
9485
9485
  display: 'flex',
9486
9486
  flexWrap: 'wrap',
@@ -9869,7 +9869,7 @@ const AgentGroupTravelRequestsTable = ({ requests, sports = [], views = [], toda
9869
9869
  setDateEdits((current) => ({ ...current, [id]: { ...current[id], submittedDate: value } }));
9870
9870
  onSubmittedDateChange?.(id, value);
9871
9871
  };
9872
- return (jsxs("div", { className: cx(sx(wrapperStyle$2), className), "data-test": "agent-gtr-table", children: [jsxs("div", { className: sx(toolbarStyle$3), children: [jsxs("button", { type: "button", className: sx(showHideAllStyle), title: "Show/Hide all PNRs", onClick: toggleExpandAll, disabled: multiPnrIds.length === 0, "data-test": "agent-gtr-toggle-all", children: [allExpanded ? jsx(ChevronUpIcon, { size: 16 }) : jsx(ChevronDownIcon$1, { size: 16 }), jsx("span", { children: allExpanded ? 'Collapse all PNRs' : 'Expand all PNRs' })] }), jsxs("div", { className: sx(filtersStyle$5), children: [jsxs("label", { className: sx(filterFieldStyle$1), children: [jsx("span", { children: "Filter by sport" }), jsxs("select", { value: sportFilter, onChange: (event) => setSportFilter(event.target.value), "data-test": "agent-gtr-sport-filter", children: [jsx("option", { value: "", children: "All Sports" }), sports.map((sport) => (jsx("option", { value: sport.code, children: sport.label }, sport.code)))] })] }), views.length > 0 && (jsxs("label", { className: sx(filterFieldStyle$1), children: [jsx("span", { children: "Filter by view" }), jsxs("select", { value: viewFilter, onChange: (event) => setViewFilter(event.target.value), "data-test": "agent-gtr-view-filter", children: [jsx("option", { value: "", children: "All Accounts" }), views.map((view) => (jsx("option", { value: view.id, children: view.label }, view.id)))] })] }))] })] }), jsx("div", { className: sx(tableScrollStyle$2), children: jsxs("table", { className: sx(tableStyle$b), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { className: sx(colExpandStyle), children: jsx("span", { className: "sr-only", children: "Expand" }) }), jsx("th", { children: "Source" }), jsx("th", { children: "Master Trip" }), jsx("th", { children: "ID" }), jsx("th", { children: "Start Date" }), jsx("th", { children: "Name" }), jsx("th", { children: "Sport" }), jsxs("th", { children: [jsx(PlaneIcon$3, { size: 16 }), jsx("span", { className: "sr-only", children: "Carrier" })] }), jsx("th", { children: "Routing" }), jsx("th", { children: "Submitted" }), jsx("th", { children: "Type" }), jsx("th", { children: "Quote Sent" }), jsx("th", { children: "Confirmation" }), jsx("th", { children: "Deposit" }), jsx("th", { children: "Utilization" }), jsx("th", { children: "Names" }), jsx("th", { children: "Ticketing" }), jsx("th", { children: "PNR" }), jsx("th", { className: sx(colDeleteStyle), children: jsx("span", { className: "sr-only", children: "Delete" }) })] }) }), jsxs("tbody", { children: [!groups.length && (jsx("tr", { children: jsx("td", { colSpan: COLUMN_COUNT, className: sx(emptyStyle$i), "data-test": "agent-gtr-empty", children: "No open group travel requests match these filters." }) })), groups.map((group) => (jsxs(Fragment$1, { children: [jsx("tr", { className: sx(accountRowStyle), children: jsx("td", { colSpan: COLUMN_COUNT, children: group.accountName }) }), group.items.map((request) => {
9872
+ return (jsxs("div", { className: cx(sx(wrapperStyle$2), className), "data-test": "agent-gtr-table", children: [jsxs("div", { className: sx(toolbarStyle$4), children: [jsxs("button", { type: "button", className: sx(showHideAllStyle), title: "Show/Hide all PNRs", onClick: toggleExpandAll, disabled: multiPnrIds.length === 0, "data-test": "agent-gtr-toggle-all", children: [allExpanded ? jsx(ChevronUpIcon, { size: 16 }) : jsx(ChevronDownIcon$1, { size: 16 }), jsx("span", { children: allExpanded ? 'Collapse all PNRs' : 'Expand all PNRs' })] }), jsxs("div", { className: sx(filtersStyle$5), children: [jsxs("label", { className: sx(filterFieldStyle$1), children: [jsx("span", { children: "Filter by sport" }), jsxs("select", { value: sportFilter, onChange: (event) => setSportFilter(event.target.value), "data-test": "agent-gtr-sport-filter", children: [jsx("option", { value: "", children: "All Sports" }), sports.map((sport) => (jsx("option", { value: sport.code, children: sport.label }, sport.code)))] })] }), views.length > 0 && (jsxs("label", { className: sx(filterFieldStyle$1), children: [jsx("span", { children: "Filter by view" }), jsxs("select", { value: viewFilter, onChange: (event) => setViewFilter(event.target.value), "data-test": "agent-gtr-view-filter", children: [jsx("option", { value: "", children: "All Accounts" }), views.map((view) => (jsx("option", { value: view.id, children: view.label }, view.id)))] })] }))] })] }), jsx("div", { className: sx(tableScrollStyle$2), children: jsxs("table", { className: sx(tableStyle$b), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { className: sx(colExpandStyle), children: jsx("span", { className: "sr-only", children: "Expand" }) }), jsx("th", { children: "Source" }), jsx("th", { children: "Master Trip" }), jsx("th", { children: "ID" }), jsx("th", { children: "Start Date" }), jsx("th", { children: "Name" }), jsx("th", { children: "Sport" }), jsxs("th", { children: [jsx(PlaneIcon$3, { size: 16 }), jsx("span", { className: "sr-only", children: "Carrier" })] }), jsx("th", { children: "Routing" }), jsx("th", { children: "Submitted" }), jsx("th", { children: "Type" }), jsx("th", { children: "Quote Sent" }), jsx("th", { children: "Confirmation" }), jsx("th", { children: "Deposit" }), jsx("th", { children: "Utilization" }), jsx("th", { children: "Names" }), jsx("th", { children: "Ticketing" }), jsx("th", { children: "PNR" }), jsx("th", { className: sx(colDeleteStyle), children: jsx("span", { className: "sr-only", children: "Delete" }) })] }) }), jsxs("tbody", { children: [!groups.length && (jsx("tr", { children: jsx("td", { colSpan: COLUMN_COUNT, className: sx(emptyStyle$i), "data-test": "agent-gtr-empty", children: "No open group travel requests match these filters." }) })), groups.map((group) => (jsxs(Fragment$1, { children: [jsx("tr", { className: sx(accountRowStyle), children: jsx("td", { colSpan: COLUMN_COUNT, children: group.accountName }) }), group.items.map((request) => {
9873
9873
  const isMulti = request.pnrs.length > 1;
9874
9874
  const isExpanded = expandedIds.has(request.id);
9875
9875
  const startSoon = daysUntil(request.startDate, today) < 8;
@@ -10165,7 +10165,7 @@ const Table = ({ columns, data, rowKey = 'id', bordered = false, striped = false
10165
10165
  * A bordered card: a header band with the title and Version control, then the
10166
10166
  * invoice table with its total row and legend.
10167
10167
  */
10168
- const cardStyle$f = {
10168
+ const cardStyle$g = {
10169
10169
  label: 'AirInvoiceCard-cardStyle',
10170
10170
  overflow: 'hidden',
10171
10171
  backgroundColor: 'var(--bg-surface, #fff)',
@@ -10191,7 +10191,7 @@ const headerStyle$D = {
10191
10191
  padding: '12px 24px',
10192
10192
  borderBottom: '1px solid var(--border-color-dark, #d5d5d5)',
10193
10193
  };
10194
- const titleStyle$z = {
10194
+ const titleStyle$A = {
10195
10195
  label: 'AirInvoiceCard-titleStyle',
10196
10196
  margin: 0,
10197
10197
  color: 'var(--fg-3, #6b7785)',
@@ -10348,7 +10348,7 @@ const AirInvoiceCard = ({ title, lines, paymentStatus, total, versions = [], sel
10348
10348
  const legend = (jsxs("span", { className: sx(legendStyle$1), "data-test": "air-invoice-legend", children: [jsx("span", { className: sx(knownTravelerStyle), children: jsx(CheckIcon$2, { size: 16 }) }), "= Known Traveler Number Loaded"] }));
10349
10349
  const hasHeader = Boolean(title || versionControlShown(versions));
10350
10350
  const versionControl = versionControlShown(versions) && (jsx(Dropdown, { label: "Version", alignment: "right", trigger: ({ isOpen, toggle }) => (jsxs("button", { type: "button", className: sx(versionButtonStyle), onClick: toggle, "aria-expanded": isOpen, "aria-haspopup": "menu", "data-test": "air-invoice-version", children: [jsx(LayersIcon, {}), "Version", jsx("span", { className: sx(versionCountStyle), children: versions.length }), jsx(ChevronDownIcon$1, { size: 16 })] })), children: versions.map((version) => (jsx(Dropdown.Item, { icon: version.id === selectedVersionId ? jsx(CheckIcon$2, { size: 14 }) : undefined, onClick: () => onVersionChange?.(version.id), children: version.label }, version.id))) }));
10351
- return (jsxs("section", { className: cx(sx(cardStyle$f), className), "aria-label": "Air invoice", "data-test": "air-invoice-card", children: [hasHeader && (jsxs("div", { className: sx(headerStyle$D), children: [title && jsx("h2", { className: sx(titleStyle$z), children: title }), jsx("div", { className: sx(headerEndStyle), children: versionControl })] })), jsx(Table, { className: sx(tableStyle$9), columns: columns, data: lines, hoverable: false, rowClassName: (line) => cx(line.isVoid && sx(voidRowStyle), line.struckThrough && sx(struckRowStyle)) || undefined, footer: total && (jsxs("tr", { children: [jsx("td", { colSpan: 6, children: jsxs("span", { className: sx(totalCellStyle$1), children: ["Total", showLegend && legend] }) }), jsx("td", { className: sx(upperStyle), children: paymentStatus }), jsx("td", { "data-test": "air-invoice-total", children: total })] })) }), showLegend && !total && (jsx("p", { className: sx(legendBlockStyle), children: legend }))] }));
10351
+ return (jsxs("section", { className: cx(sx(cardStyle$g), className), "aria-label": "Air invoice", "data-test": "air-invoice-card", children: [hasHeader && (jsxs("div", { className: sx(headerStyle$D), children: [title && jsx("h2", { className: sx(titleStyle$A), children: title }), jsx("div", { className: sx(headerEndStyle), children: versionControl })] })), jsx(Table, { className: sx(tableStyle$9), columns: columns, data: lines, hoverable: false, rowClassName: (line) => cx(line.isVoid && sx(voidRowStyle), line.struckThrough && sx(struckRowStyle)) || undefined, footer: total && (jsxs("tr", { children: [jsx("td", { colSpan: 6, children: jsxs("span", { className: sx(totalCellStyle$1), children: ["Total", showLegend && legend] }) }), jsx("td", { className: sx(upperStyle), children: paymentStatus }), jsx("td", { "data-test": "air-invoice-total", children: total })] })) }), showLegend && !total && (jsx("p", { className: sx(legendBlockStyle), children: legend }))] }));
10352
10352
  };
10353
10353
  AirInvoiceCard.displayName = 'AirInvoiceCard';
10354
10354
 
@@ -10801,7 +10801,7 @@ const noResultsStyle = {
10801
10801
  fontSize: 14,
10802
10802
  };
10803
10803
  /* Actions */
10804
- const actionsStyle$8 = {
10804
+ const actionsStyle$9 = {
10805
10805
  label: 'Topbar-actionsStyle',
10806
10806
  display: 'flex',
10807
10807
  gap: 'var(--space-2, 8px)',
@@ -10866,7 +10866,7 @@ const Topbar = ({ account, accounts, onAccountSelect, onAccountClick, actions, l
10866
10866
  const filteredAccounts = accounts?.filter(acc => acc.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
10867
10867
  acc.code.toLowerCase().includes(searchQuery.toLowerCase())) || [];
10868
10868
  const hasDropdown = accounts && accounts.length > 0;
10869
- return (jsxs("header", { className: classNames, ...props, children: [jsxs("div", { className: sx(leftStyle), children: [leftContent, account && (jsxs("div", { className: sx(accountWrapperStyle), ref: dropdownRef, children: [jsxs("button", { className: cx(sx(accountSelectorStyle), isOpen && sx(openStyle$1)), onClick: handleToggle, "aria-expanded": isOpen, "aria-haspopup": hasDropdown ? 'listbox' : undefined, children: [jsx("span", { className: sx(accountCodeStyle), children: account.code }), jsx("span", { className: sx(accountNameStyle), children: account.name }), hasDropdown && (jsx(ChevronDownIcon$1, { size: 16, className: cx(sx(chevronStyle$2), isOpen && sx(chevronOpenStyle)) }))] }), isOpen && hasDropdown && (jsxs("div", { className: sx(dropdownStyle), role: "listbox", children: [jsxs("div", { className: sx(dropdownSearchStyle), children: [jsxs("svg", { className: sx(searchIconStyle$1), width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "11", cy: "11", r: "8" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })] }), jsx("input", { ref: searchInputRef, type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Search accounts...", className: sx(searchInputStyle$1) })] }), jsx("div", { className: sx(dropdownListStyle), children: filteredAccounts.length > 0 ? (filteredAccounts.map((acc) => (jsxs("button", { className: cx(sx(dropdownItemStyle), acc.code === account.code && sx(selectedStyle$2)), onClick: () => handleSelectAccount(acc), role: "option", "aria-selected": acc.code === account.code, children: [jsx("span", { className: sx(dropdownItemCodeStyle), children: acc.code }), jsx("span", { className: sx(dropdownItemNameStyle), children: acc.name })] }, acc.code)))) : (jsx("div", { className: sx(noResultsStyle), children: "No accounts found" })) })] }))] }))] }), actions && jsx("div", { className: sx(actionsStyle$8), children: actions })] }));
10869
+ return (jsxs("header", { className: classNames, ...props, children: [jsxs("div", { className: sx(leftStyle), children: [leftContent, account && (jsxs("div", { className: sx(accountWrapperStyle), ref: dropdownRef, children: [jsxs("button", { className: cx(sx(accountSelectorStyle), isOpen && sx(openStyle$1)), onClick: handleToggle, "aria-expanded": isOpen, "aria-haspopup": hasDropdown ? 'listbox' : undefined, children: [jsx("span", { className: sx(accountCodeStyle), children: account.code }), jsx("span", { className: sx(accountNameStyle), children: account.name }), hasDropdown && (jsx(ChevronDownIcon$1, { size: 16, className: cx(sx(chevronStyle$2), isOpen && sx(chevronOpenStyle)) }))] }), isOpen && hasDropdown && (jsxs("div", { className: sx(dropdownStyle), role: "listbox", children: [jsxs("div", { className: sx(dropdownSearchStyle), children: [jsxs("svg", { className: sx(searchIconStyle$1), width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsx("circle", { cx: "11", cy: "11", r: "8" }), jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })] }), jsx("input", { ref: searchInputRef, type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Search accounts...", className: sx(searchInputStyle$1) })] }), jsx("div", { className: sx(dropdownListStyle), children: filteredAccounts.length > 0 ? (filteredAccounts.map((acc) => (jsxs("button", { className: cx(sx(dropdownItemStyle), acc.code === account.code && sx(selectedStyle$2)), onClick: () => handleSelectAccount(acc), role: "option", "aria-selected": acc.code === account.code, children: [jsx("span", { className: sx(dropdownItemCodeStyle), children: acc.code }), jsx("span", { className: sx(dropdownItemNameStyle), children: acc.name })] }, acc.code)))) : (jsx("div", { className: sx(noResultsStyle), children: "No accounts found" })) })] }))] }))] }), actions && jsx("div", { className: sx(actionsStyle$9), children: actions })] }));
10870
10870
  };
10871
10871
  Topbar.displayName = 'Topbar';
10872
10872
 
@@ -10919,7 +10919,7 @@ const AppLayout = ({ navItems = [], activeNavKey, logo, collapsedLogo, account,
10919
10919
  * Shares the AirInvoiceCard's shell — bordered card, header band with a small
10920
10920
  * uppercase title — so the two read as a set when stacked on a page.
10921
10921
  */
10922
- const cardStyle$e = {
10922
+ const cardStyle$f = {
10923
10923
  label: 'BookingDetailsCard-cardStyle',
10924
10924
  overflow: 'hidden',
10925
10925
  backgroundColor: 'var(--bg-surface, #fff)',
@@ -10944,7 +10944,7 @@ const headerStyle$C = {
10944
10944
  padding: '12px 24px',
10945
10945
  borderBottom: '1px solid var(--border-color-dark, #d5d5d5)',
10946
10946
  };
10947
- const titleStyle$y = {
10947
+ const titleStyle$z = {
10948
10948
  label: 'BookingDetailsCard-titleStyle',
10949
10949
  margin: 0,
10950
10950
  color: 'var(--fg-3, #6b7785)',
@@ -11020,12 +11020,12 @@ const BookingDetailsCard = ({ details, title = 'Booking Details', refId, childre
11020
11020
  if (details.length === 0 && !children)
11021
11021
  return null;
11022
11022
  const rows = Math.ceil(details.length / 2);
11023
- return (jsxs("section", { className: cx(sx(cardStyle$e), className), "aria-label": "Booking details", "data-test": "booking-details-card", children: [jsxs("div", { className: sx(headerStyle$C), children: [jsx("h2", { className: sx(titleStyle$y), children: title }), refId && (jsxs("p", { className: sx(refStyle), "data-test": "booking-details-ref", children: ["Short\u2019s ID: ", jsx("span", { className: sx(refValueStyle), children: refId })] }))] }), details.length > 0 && (jsx("dl", { className: sx(detailsStyle$2), style: { gridTemplateRows: `repeat(${rows}, auto)` }, children: details.map((detail) => (jsxs("div", { className: sx(detailStyle$2), children: [jsx("dt", { className: sx(detailLabelStyle$1), children: detail.label }), jsx("dd", { className: sx(detailValueStyle$1), children: detail.value })] }, detail.label))) })), children && jsx("div", { className: cx(sx(sectionStyle$8), details.length > 0 && sx(sectionRuleStyle)), "data-test": "booking-details-section", children: children })] }));
11023
+ return (jsxs("section", { className: cx(sx(cardStyle$f), className), "aria-label": "Booking details", "data-test": "booking-details-card", children: [jsxs("div", { className: sx(headerStyle$C), children: [jsx("h2", { className: sx(titleStyle$z), children: title }), refId && (jsxs("p", { className: sx(refStyle), "data-test": "booking-details-ref", children: ["Short\u2019s ID: ", jsx("span", { className: sx(refValueStyle), children: refId })] }))] }), details.length > 0 && (jsx("dl", { className: sx(detailsStyle$2), style: { gridTemplateRows: `repeat(${rows}, auto)` }, children: details.map((detail) => (jsxs("div", { className: sx(detailStyle$2), children: [jsx("dt", { className: sx(detailLabelStyle$1), children: detail.label }), jsx("dd", { className: sx(detailValueStyle$1), children: detail.value })] }, detail.label))) })), children && jsx("div", { className: cx(sx(sectionStyle$8), details.length > 0 && sx(sectionRuleStyle)), "data-test": "booking-details-section", children: children })] }));
11024
11024
  };
11025
11025
  BookingDetailsCard.displayName = 'BookingDetailsCard';
11026
11026
 
11027
11027
  /* Card Component Styles */
11028
- const cardStyle$d = {
11028
+ const cardStyle$e = {
11029
11029
  label: 'Card-cardStyle',
11030
11030
  background: 'var(--bg-surface)',
11031
11031
  borderRadius: 'var(--radius-2xl)',
@@ -11087,7 +11087,7 @@ const headerContentStyle$1 = {
11087
11087
  flex: 1,
11088
11088
  minWidth: 0,
11089
11089
  };
11090
- const titleStyle$x = {
11090
+ const titleStyle$y = {
11091
11091
  label: 'Card-titleStyle',
11092
11092
  margin: 0,
11093
11093
  fontSize: 'var(--fs-lg)',
@@ -11101,7 +11101,7 @@ const subtitleStyle$7 = {
11101
11101
  fontSize: 'var(--fs-sm)',
11102
11102
  color: 'var(--fg-3)',
11103
11103
  };
11104
- const actionsStyle$7 = {
11104
+ const actionsStyle$8 = {
11105
11105
  label: 'Card-actionsStyle',
11106
11106
  display: 'flex',
11107
11107
  gap: 'var(--space-2)',
@@ -11136,7 +11136,7 @@ const footerStyle$b = {
11136
11136
  * Card component for grouping related content.
11137
11137
  */
11138
11138
  const Card = forwardRef(({ variant = 'default', padding = 'md', interactive = false, className = '', children, ...props }, ref) => {
11139
- const classNames = cx(sx(cardStyle$d), sx(variantStyles[variant]), sx(paddingStyles[padding]), interactive && sx(interactiveStyle), className);
11139
+ const classNames = cx(sx(cardStyle$e), sx(variantStyles[variant]), sx(paddingStyles[padding]), interactive && sx(interactiveStyle), className);
11140
11140
  return (jsx("div", { ref: ref, className: classNames, ...props, children: children }));
11141
11141
  });
11142
11142
  Card.displayName = 'Card';
@@ -11145,7 +11145,7 @@ Card.displayName = 'Card';
11145
11145
  */
11146
11146
  const CardHeader = ({ title, subtitle, actions, className = '', children, ...props }) => {
11147
11147
  const classNames = cx(sx(headerStyle$B), className);
11148
- return (jsxs("div", { className: classNames, ...props, children: [jsxs("div", { className: sx(headerContentStyle$1), children: [title && jsx("h3", { className: sx(titleStyle$x), children: title }), subtitle && jsx("p", { className: sx(subtitleStyle$7), children: subtitle }), children] }), actions && jsx("div", { className: sx(actionsStyle$7), children: actions })] }));
11148
+ return (jsxs("div", { className: classNames, ...props, children: [jsxs("div", { className: sx(headerContentStyle$1), children: [title && jsx("h3", { className: sx(titleStyle$y), children: title }), subtitle && jsx("p", { className: sx(subtitleStyle$7), children: subtitle }), children] }), actions && jsx("div", { className: sx(actionsStyle$8), children: actions })] }));
11149
11149
  };
11150
11150
  CardHeader.displayName = 'CardHeader';
11151
11151
  /**
@@ -11848,7 +11848,7 @@ const alertStyle$4 = {
11848
11848
  label: 'ContactList-alertStyle', width: '100%'
11849
11849
  };
11850
11850
  /* Card */
11851
- const cardStyle$c = {
11851
+ const cardStyle$d = {
11852
11852
  label: 'ContactList-cardStyle',
11853
11853
  backgroundColor: 'var(--color-white)',
11854
11854
  border: '1px solid var(--color-gray-200)',
@@ -11867,7 +11867,7 @@ const titleRowStyle$3 = {
11867
11867
  alignItems: 'center',
11868
11868
  gap: 'var(--space-2)',
11869
11869
  };
11870
- const titleStyle$w = {
11870
+ const titleStyle$x = {
11871
11871
  label: 'ContactList-titleStyle',
11872
11872
  fontSize: 'var(--text-base)',
11873
11873
  fontWeight: 'var(--font-semibold)',
@@ -12053,7 +12053,7 @@ const PlusIcon$1 = () => (jsxs("svg", { width: "16", height: "16", viewBox: "0 0
12053
12053
  */
12054
12054
  const ContactList = ({ title = 'Contacts', tooltip, contacts, onEdit, onRemove, onAdd, showAdd = true, addLabel = 'Add Contact', alert, className = '', }) => {
12055
12055
  const listClasses = cx(sx(containerStyle$3), className);
12056
- return (jsxs("div", { className: listClasses, children: [alert && (jsx("div", { className: sx(alertStyle$4), children: alert })), jsxs("div", { className: sx(cardStyle$c), children: [jsx("div", { className: sx(headerStyle$A), children: jsxs("div", { className: sx(titleRowStyle$3), children: [jsx("h3", { className: sx(titleStyle$w), children: title }), tooltip && (jsx("span", { className: sx(tooltipStyle), children: jsx(InfoIcon, {}) }))] }) }), jsxs("div", { className: sx(listStyle$4), children: [contacts.map((contact) => (jsxs("div", { className: sx(contactItemStyle), children: [jsxs("div", { className: sx(contactInfoStyle), children: [jsxs("div", { className: sx(contactNameStyle$1), children: [contact.name, contact.isPrimary && (jsx("span", { className: sx(badgeStyle$2), children: "Primary" })), contact.isSecondary && (jsx("span", { className: cx(sx(badgeStyle$2), sx(badgeSecondaryStyle)), children: "Secondary" }))] }), contact.role && (jsx("div", { className: sx(contactRoleStyle$1), children: contact.role })), jsxs("div", { className: sx(contactDetailsStyle$1), children: [contact.email && (jsx("a", { href: `mailto:${contact.email}`, className: sx(contactLinkStyle$2), children: contact.email })), contact.phone && (jsx("span", { className: sx(contactPhoneStyle), children: contact.phone }))] })] }), jsxs("div", { className: sx(contactActionsStyle), children: [onEdit && (jsx("button", { type: "button", className: sx(actionButtonStyle$1), onClick: () => onEdit(contact), "aria-label": "Edit contact", children: jsx(EditIcon$1, {}) })), onRemove && (jsx("button", { type: "button", className: cx(sx(actionButtonStyle$1), sx(actionButtonDangerStyle)), onClick: () => onRemove(contact), "aria-label": "Remove contact", children: jsx(TrashIcon$1, {}) }))] })] }, contact.id))), contacts.length === 0 && (jsx("div", { className: sx(emptyStyle$f), children: "No contacts added" }))] }), showAdd && onAdd && (jsx("div", { className: sx(footerStyle$a), children: jsxs("button", { type: "button", className: sx(addButtonStyle$1), onClick: onAdd, children: [jsx(PlusIcon$1, {}), addLabel] }) }))] })] }));
12056
+ return (jsxs("div", { className: listClasses, children: [alert && (jsx("div", { className: sx(alertStyle$4), children: alert })), jsxs("div", { className: sx(cardStyle$d), children: [jsx("div", { className: sx(headerStyle$A), children: jsxs("div", { className: sx(titleRowStyle$3), children: [jsx("h3", { className: sx(titleStyle$x), children: title }), tooltip && (jsx("span", { className: sx(tooltipStyle), children: jsx(InfoIcon, {}) }))] }) }), jsxs("div", { className: sx(listStyle$4), children: [contacts.map((contact) => (jsxs("div", { className: sx(contactItemStyle), children: [jsxs("div", { className: sx(contactInfoStyle), children: [jsxs("div", { className: sx(contactNameStyle$1), children: [contact.name, contact.isPrimary && (jsx("span", { className: sx(badgeStyle$2), children: "Primary" })), contact.isSecondary && (jsx("span", { className: cx(sx(badgeStyle$2), sx(badgeSecondaryStyle)), children: "Secondary" }))] }), contact.role && (jsx("div", { className: sx(contactRoleStyle$1), children: contact.role })), jsxs("div", { className: sx(contactDetailsStyle$1), children: [contact.email && (jsx("a", { href: `mailto:${contact.email}`, className: sx(contactLinkStyle$2), children: contact.email })), contact.phone && (jsx("span", { className: sx(contactPhoneStyle), children: contact.phone }))] })] }), jsxs("div", { className: sx(contactActionsStyle), children: [onEdit && (jsx("button", { type: "button", className: sx(actionButtonStyle$1), onClick: () => onEdit(contact), "aria-label": "Edit contact", children: jsx(EditIcon$1, {}) })), onRemove && (jsx("button", { type: "button", className: cx(sx(actionButtonStyle$1), sx(actionButtonDangerStyle)), onClick: () => onRemove(contact), "aria-label": "Remove contact", children: jsx(TrashIcon$1, {}) }))] })] }, contact.id))), contacts.length === 0 && (jsx("div", { className: sx(emptyStyle$f), children: "No contacts added" }))] }), showAdd && onAdd && (jsx("div", { className: sx(footerStyle$a), children: jsxs("button", { type: "button", className: sx(addButtonStyle$1), onClick: onAdd, children: [jsx(PlusIcon$1, {}), addLabel] }) }))] })] }));
12057
12057
  };
12058
12058
  ContactList.displayName = 'ContactList';
12059
12059
 
@@ -12189,7 +12189,7 @@ const headerContentStyle = {
12189
12189
  label: 'Drawer-headerContentStyle',
12190
12190
  flex: 1,
12191
12191
  };
12192
- const titleStyle$v = {
12192
+ const titleStyle$w = {
12193
12193
  label: 'Drawer-titleStyle',
12194
12194
  margin: 0,
12195
12195
  fontSize: 18,
@@ -12235,7 +12235,7 @@ const footerStyle$9 = {
12235
12235
  /**
12236
12236
  * Top of a Drawer: title and the close affordance.
12237
12237
  */
12238
- const DrawerHeader = ({ title, children, showClose = true, onClose, className = '', }) => (jsxs("div", { className: cx(sx(headerStyle$z), className), children: [jsxs("div", { className: sx(headerContentStyle), children: [title && jsx("h2", { className: sx(titleStyle$v), children: title }), children] }), showClose && (jsx("button", { type: "button", className: sx(closeButtonStyle$2), onClick: onClose, "aria-label": "Close drawer", children: jsx("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }))] }));
12238
+ const DrawerHeader = ({ title, children, showClose = true, onClose, className = '', }) => (jsxs("div", { className: cx(sx(headerStyle$z), className), children: [jsxs("div", { className: sx(headerContentStyle), children: [title && jsx("h2", { className: sx(titleStyle$w), children: title }), children] }), showClose && (jsx("button", { type: "button", className: sx(closeButtonStyle$2), onClick: onClose, "aria-label": "Close drawer", children: jsx("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }))] }));
12239
12239
  /**
12240
12240
  * Scrollable content region of a Drawer.
12241
12241
  */
@@ -12370,7 +12370,7 @@ const bodyStyle$6 = {
12370
12370
  fontWeight: 500,
12371
12371
  },
12372
12372
  };
12373
- const searchStyle$1 = {
12373
+ const searchStyle$2 = {
12374
12374
  label: 'DueDatesDrawer-searchStyle',
12375
12375
  display: 'flex',
12376
12376
  width: '100%',
@@ -12405,7 +12405,7 @@ const emptyStyle$e = {
12405
12405
  padding: '16px 8px 0',
12406
12406
  color: 'var(--color-stone, #787878)',
12407
12407
  };
12408
- const cardStyle$b = {
12408
+ const cardStyle$c = {
12409
12409
  label: 'DueDatesDrawer-cardStyle',
12410
12410
  display: 'flex',
12411
12411
  flexDirection: 'column',
@@ -12529,7 +12529,7 @@ const DueDateCard$1 = ({ item, onToggle, onTaskClick }) => {
12529
12529
  const completed = isTravelDueDateCompleted(item);
12530
12530
  const dueDate = parseLocalDate$1(item.duedate);
12531
12531
  const pastDue = !!dueDate && dueDate < new Date() && !completed;
12532
- return (jsxs("article", { className: sx(cardStyle$b), children: [jsxs("div", { className: sx(cardTitleStyle$3), children: [onToggle ? (jsx("button", { type: "button", "aria-label": `${completed ? 'Reopen' : 'Complete'} ${item.tasktitle}`, className: cx(sx(statusStyle$5), completed ? sx(completedStyle) : pastDue ? sx(pastDueStyle) : ''), onClick: () => onToggle(item), "data-test": `due-date-toggle-${item.taskid}`, children: completed ? jsx(CheckIcon$2, { size: 12 }) : null })) : (jsx("span", { "aria-label": `${completed ? 'Completed' : pastDue ? 'Past due' : 'Incomplete'}: ${item.tasktitle}`, className: cx(sx(statusStyle$5), sx(readOnlyStatusStyle), completed ? sx(completedStyle) : pastDue ? sx(pastDueStyle) : ''), "data-test": `due-date-status-${item.taskid}`, children: completed ? jsx(CheckIcon$2, { size: 12 }) : null })), jsx("h5", { children: item.tasktitle })] }), item.description && jsx("p", { children: item.description }), jsxs("div", { className: sx(tagsStyle), children: [jsx("span", { style: { backgroundColor: sportColor$1(item.sportCode) }, children: item.sportCode }), jsx("button", { type: "button", disabled: !item.masterTripGUID || !onTaskClick, onClick: () => item.masterTripGUID && onTaskClick?.(item.masterTripGUID), children: item.tripName })] }), completed && item.completeddatetime && jsxs("div", { className: sx(completionStyle), children: [jsx(CheckIcon$2, { size: 14 }), jsxs("span", { children: [jsx("em", { children: "on" }), " ", formatDate$8(item.completeddatetime, { month: 'numeric', day: 'numeric', year: '2-digit' }), " ", jsx("em", { children: "by" }), " ", item.completedby] })] })] }));
12532
+ return (jsxs("article", { className: sx(cardStyle$c), children: [jsxs("div", { className: sx(cardTitleStyle$3), children: [onToggle ? (jsx("button", { type: "button", "aria-label": `${completed ? 'Reopen' : 'Complete'} ${item.tasktitle}`, className: cx(sx(statusStyle$5), completed ? sx(completedStyle) : pastDue ? sx(pastDueStyle) : ''), onClick: () => onToggle(item), "data-test": `due-date-toggle-${item.taskid}`, children: completed ? jsx(CheckIcon$2, { size: 12 }) : null })) : (jsx("span", { "aria-label": `${completed ? 'Completed' : pastDue ? 'Past due' : 'Incomplete'}: ${item.tasktitle}`, className: cx(sx(statusStyle$5), sx(readOnlyStatusStyle), completed ? sx(completedStyle) : pastDue ? sx(pastDueStyle) : ''), "data-test": `due-date-status-${item.taskid}`, children: completed ? jsx(CheckIcon$2, { size: 12 }) : null })), jsx("h5", { children: item.tasktitle })] }), item.description && jsx("p", { children: item.description }), jsxs("div", { className: sx(tagsStyle), children: [jsx("span", { style: { backgroundColor: sportColor$1(item.sportCode) }, children: item.sportCode }), jsx("button", { type: "button", disabled: !item.masterTripGUID || !onTaskClick, onClick: () => item.masterTripGUID && onTaskClick?.(item.masterTripGUID), children: item.tripName })] }), completed && item.completeddatetime && jsxs("div", { className: sx(completionStyle), children: [jsx(CheckIcon$2, { size: 14 }), jsxs("span", { children: [jsx("em", { children: "on" }), " ", formatDate$8(item.completeddatetime, { month: 'numeric', day: 'numeric', year: '2-digit' }), " ", jsx("em", { children: "by" }), " ", item.completedby] })] })] }));
12533
12533
  };
12534
12534
  /** Hub's searchable, status-aware due-dates drawer. */
12535
12535
  const DueDatesDrawer = ({ isOpen, dueDates, selectedDate, selectedTrip, overdueOnly, onClose, onToggle, onTaskClick, className = '' }) => {
@@ -12541,7 +12541,7 @@ const DueDatesDrawer = ({ isOpen, dueDates, selectedDate, selectedTrip, overdueO
12541
12541
  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)));
12542
12542
  return matches.length ? [[date, matches]] : [];
12543
12543
  })), [dueDates, search, selectedDate, selectedTrip, overdueOnly]);
12544
- return (jsxs("aside", { className: cx(sx(drawerStyle), isOpen && sx(openStyle), className), "aria-hidden": !isOpen, "aria-label": "Due Dates", children: [jsxs("header", { children: [jsx("h3", { children: "Due Dates" }), jsx("button", { type: "button", "aria-label": "Close due dates", onClick: onClose, children: jsx(CloseIcon, { size: 24 }) })] }), jsxs("div", { className: sx(bodyStyle$6), children: [jsxs("label", { className: sx(searchStyle$1), children: [jsx(SearchIcon$1, { size: 16 }), jsx("input", { type: "search", placeholder: "Search", value: search, onChange: (event) => setSearch(event.target.value) })] }), !Object.keys(filtered).length ? jsx("div", { className: sx(emptyStyle$e), children: "No due dates found." }) : Object.entries(filtered).map(([date, items]) => (jsxs("section", { children: [jsx("h4", { children: formatDate$8(date, { month: 'long', day: 'numeric', year: 'numeric' }) }), jsx("div", { className: sx(cardsStyle$2), children: items.map((item) => jsx(DueDateCard$1, { item: item, onToggle: onToggle, onTaskClick: onTaskClick }, `${date}-${item.taskid}`)) })] }, date)))] })] }));
12544
+ return (jsxs("aside", { className: cx(sx(drawerStyle), isOpen && sx(openStyle), className), "aria-hidden": !isOpen, "aria-label": "Due Dates", children: [jsxs("header", { children: [jsx("h3", { children: "Due Dates" }), jsx("button", { type: "button", "aria-label": "Close due dates", onClick: onClose, children: jsx(CloseIcon, { size: 24 }) })] }), jsxs("div", { className: sx(bodyStyle$6), children: [jsxs("label", { className: sx(searchStyle$2), children: [jsx(SearchIcon$1, { size: 16 }), jsx("input", { type: "search", placeholder: "Search", value: search, onChange: (event) => setSearch(event.target.value) })] }), !Object.keys(filtered).length ? jsx("div", { className: sx(emptyStyle$e), children: "No due dates found." }) : Object.entries(filtered).map(([date, items]) => (jsxs("section", { children: [jsx("h4", { children: formatDate$8(date, { month: 'long', day: 'numeric', year: 'numeric' }) }), jsx("div", { className: sx(cardsStyle$2), children: items.map((item) => jsx(DueDateCard$1, { item: item, onToggle: onToggle, onTaskClick: onTaskClick }, `${date}-${item.taskid}`)) })] }, date)))] })] }));
12545
12545
  };
12546
12546
 
12547
12547
  /**
@@ -13829,7 +13829,7 @@ const HubAppShell = ({ children, navItems, individualTravelItem, agentsItem, sou
13829
13829
  * Explicit specificity keeps service and cancellation border colors stable
13830
13830
  * regardless of style injection order: base < type (`&&`) < cancelled (`&&&`).
13831
13831
  */
13832
- const cardStyle$a = {
13832
+ const cardStyle$b = {
13833
13833
  label: 'ItinerarySegmentCard-cardStyle',
13834
13834
  display: 'flex',
13835
13835
  flexDirection: 'column',
@@ -13907,7 +13907,7 @@ const confirmationHeaderStyle = {
13907
13907
  },
13908
13908
  },
13909
13909
  };
13910
- const eyebrowStyle$8 = {
13910
+ const eyebrowStyle$9 = {
13911
13911
  label: 'ItinerarySegmentCard-eyebrowStyle',
13912
13912
  fontSize: 'var(--fs-xs)',
13913
13913
  lineHeight: 'var(--lh-xs)',
@@ -13917,7 +13917,7 @@ const eyebrowStyle$8 = {
13917
13917
  letterSpacing: '0.06em',
13918
13918
  };
13919
13919
  /** Declared before `isCancelledStyle`, which reaches it as a descendant. */
13920
- const titleStyle$u = {
13920
+ const titleStyle$v = {
13921
13921
  label: 'ItinerarySegmentCard-titleStyle',
13922
13922
  margin: 0,
13923
13923
  fontSize: 'var(--fs-lg)',
@@ -13951,7 +13951,7 @@ const isCancelledStyle = {
13951
13951
  backgroundColor: 'var(--bg-subtle)',
13952
13952
  },
13953
13953
  /* `.isCancelled .title` */
13954
- [`&&& .${sx(titleStyle$u)}`]: {
13954
+ [`&&& .${sx(titleStyle$v)}`]: {
13955
13955
  textDecoration: 'line-through',
13956
13956
  },
13957
13957
  };
@@ -14143,7 +14143,7 @@ const flightStatusStyle = {
14143
14143
  lineHeight: 'var(--lh-sm)',
14144
14144
  fontWeight: 'var(--fw-medium)',
14145
14145
  };
14146
- const actionsStyle$6 = {
14146
+ const actionsStyle$7 = {
14147
14147
  label: 'ItinerarySegmentCard-actionsStyle',
14148
14148
  display: 'flex',
14149
14149
  flexWrap: 'wrap',
@@ -14449,7 +14449,7 @@ const ItinerarySegmentCard = ({ segment, headingLevel = 3, onCheckIn, showCheckI
14449
14449
  ...(segment.type === 'limo' ? [{ label: 'Cancellation policy', lines: segment.cancellationPolicies }] : []),
14450
14450
  { label: 'Segment Notes', lines: segment.type === 'limo' ? [...(segment.comments ?? []), ...(segment.notes ?? [])] : segment.notes },
14451
14451
  ];
14452
- return (jsxs("article", { className: cx(sx(cardStyle$a), sx(typeStyles$1[segment.type]), segment.status === 'cancelled' && sx(isCancelledStyle), variant === 'section' && sx(sectionVariantStyle), className), "data-test": `itinerary-segment-${segment.id}`, "aria-label": `${meta.label} — ${getSegmentTitle(segment)}`, children: [jsxs("div", { className: cx(sx(headerStyle$w), pillConfirmation && sx(confirmationHeaderStyle)), children: [jsx("span", { className: sx(iconStyle$2), "aria-hidden": "true", children: jsx(TravelServiceIcon, { type: meta.code, vendor: vendorCode, size: 48 }) }), jsxs("span", { className: sx(headingsStyle), children: [jsx("span", { className: sx(eyebrowStyle$8), children: meta.label }), jsx("span", { className: sx(titleRowStyle$2), children: jsx(Heading, { className: sx(titleStyle$u), children: getSegmentTitle(segment) }) }), segment.type === 'air' && segment.operatedBy?.trim() && jsxs("span", { className: sx(operatedByStyle), children: ["Operated by ", segment.operatedBy] }), (segment.type === 'car' || segment.type === 'hotel') && segment.reservationName?.trim() && (jsxs("span", { className: sx(operatedByStyle), "data-test": `itinerary-reserved-for-${segment.id}`, children: ["Reserved for ", segment.reservationName] }))] }), headerCheckIn && (jsx(Button, { size: "sm", variant: "primary", "aria-label": checkInLabel, "data-test": `itinerary-check-in-${segment.id}`, onClick: () => onCheckIn?.(segment), children: "Check In" })), jsx(StatusBadge, { status: badge.variant, label: pillConfirmation ? `${badge.label}: ${pillConfirmation}` : badge.label, className: sx(statusStyle$4), style: pillConfirmation ? { maxWidth: '100%', whiteSpace: 'normal', overflowWrap: 'anywhere', lineHeight: 'var(--lh-sm)' } : undefined })] }), (hasStart || hasEnd) && jsxs("div", { className: sx(routeStyle$2), children: [hasStart && jsxs("div", { className: sx(endpointStyle), children: [jsx("span", { className: sx(endpointLabelStyle), children: endpoints.startLabel }), segment.type === 'car' && jsx("span", { className: sx(endpointTimeStyle), children: endpoints.startCode }), endpoints.startTime && jsx("span", { className: sx(segment.type === 'car' ? endpointCodeStyle : endpointTimeStyle), children: endpoints.startTime }), segment.type !== 'car' && endpoints.startCode && jsx("span", { className: sx(endpointCodeStyle), children: endpoints.startCode }), endpoints.startPlace && jsx("span", { className: sx(endpointPlaceStyle), children: endpoints.startPlace })] }), hasStart && hasEnd && jsxs("div", { className: sx(connectorStyle), children: [duration && jsx("span", { className: sx(connectorLabelStyle), children: duration }), jsx("span", { className: sx(connectorArrowStyle), "aria-hidden": "true", children: jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsx("line", { x1: "5", y1: "12", x2: "19", y2: "12" }), jsx("polyline", { points: "12 5 19 12 12 19" })] }) }), (segment.type === 'air' || segment.type === 'rail') && !!segment.miles && jsxs("span", { className: sx(connectorLabelStyle), children: [segment.miles.toLocaleString('en-US'), " miles"] }), segment.type === 'car' && !!segment.carCount && jsxs("span", { className: sx(connectorLabelStyle), children: [segment.carCount, " ", segment.carCount === 1 ? 'Vehicle' : 'Vehicles'] }), segment.type === 'hotel' && !!segment.rooms && jsxs("span", { className: sx(connectorLabelStyle), children: [segment.rooms, " ", segment.rooms === 1 ? 'Room' : 'Rooms'] })] }), hasEnd && jsxs("div", { className: sx(endpointStyle), children: [jsx("span", { className: sx(endpointLabelStyle), children: endpoints.endLabel }), segment.type === 'car' && jsx("span", { className: sx(endpointTimeStyle), children: endpoints.endCode }), endpoints.endTime && (jsxs("span", { className: sx(segment.type === 'car' ? endpointCodeStyle : endpointTimeStyle), children: [endpoints.endTime, dayOffset > 0 && jsxs("span", { className: sx(nextDayStyle), children: ["+", dayOffset, " day", dayOffset === 1 ? '' : 's'] })] })), segment.type !== 'car' && endpoints.endCode && jsx("span", { className: sx(endpointCodeStyle), children: endpoints.endCode }), endpoints.endPlace && jsx("span", { className: sx(endpointPlaceStyle), children: endpoints.endPlace })] })] }), details.length > 0 && (jsx("dl", { className: sx(detailsStyle$1), children: details.map((detail) => (jsxs("div", { className: cx(sx(detailStyle$1), detail.fullRow && sx(detailFullRowStyle)), children: [jsx("dt", { className: sx(detailLabelStyle), children: detail.label }), jsx("dd", { className: cx(sx(detailValueStyle), detail.mono && sx(monoStyle$2)), children: detail.value }), detail.below && jsxs(Fragment, { children: [jsx("dt", { className: cx(sx(detailLabelStyle), sx(detailBelowLabelStyle)), children: detail.below.label }), jsx("dd", { className: sx(detailValueStyle), children: detail.below.value })] })] }, detail.label))) })), segment.type === 'air' && segment.flightStatus && (jsx("p", { className: sx(flightStatusStyle), "data-test": `itinerary-flight-status-${segment.id}`, children: segment.flightStatus })), segment.type === 'air' && segment.checkInAvailable && onCheckIn && !headerCheckIn && (jsx("div", { className: sx(actionsStyle$6), children: jsxs(Button, { size: "sm", variant: "secondary", "data-test": `itinerary-check-in-${segment.id}`, onClick: () => onCheckIn?.(segment), children: ["Check in for ", segment.carrierCode ?? segment.carrier, " ", segment.flightNumber] }) })), noteSections.map(({ label, lines }) => {
14452
+ return (jsxs("article", { className: cx(sx(cardStyle$b), sx(typeStyles$1[segment.type]), segment.status === 'cancelled' && sx(isCancelledStyle), variant === 'section' && sx(sectionVariantStyle), className), "data-test": `itinerary-segment-${segment.id}`, "aria-label": `${meta.label} — ${getSegmentTitle(segment)}`, children: [jsxs("div", { className: cx(sx(headerStyle$w), pillConfirmation && sx(confirmationHeaderStyle)), children: [jsx("span", { className: sx(iconStyle$2), "aria-hidden": "true", children: jsx(TravelServiceIcon, { type: meta.code, vendor: vendorCode, size: 48 }) }), jsxs("span", { className: sx(headingsStyle), children: [jsx("span", { className: sx(eyebrowStyle$9), children: meta.label }), jsx("span", { className: sx(titleRowStyle$2), children: jsx(Heading, { className: sx(titleStyle$v), children: getSegmentTitle(segment) }) }), segment.type === 'air' && segment.operatedBy?.trim() && jsxs("span", { className: sx(operatedByStyle), children: ["Operated by ", segment.operatedBy] }), (segment.type === 'car' || segment.type === 'hotel') && segment.reservationName?.trim() && (jsxs("span", { className: sx(operatedByStyle), "data-test": `itinerary-reserved-for-${segment.id}`, children: ["Reserved for ", segment.reservationName] }))] }), headerCheckIn && (jsx(Button, { size: "sm", variant: "primary", "aria-label": checkInLabel, "data-test": `itinerary-check-in-${segment.id}`, onClick: () => onCheckIn?.(segment), children: "Check In" })), jsx(StatusBadge, { status: badge.variant, label: pillConfirmation ? `${badge.label}: ${pillConfirmation}` : badge.label, className: sx(statusStyle$4), style: pillConfirmation ? { maxWidth: '100%', whiteSpace: 'normal', overflowWrap: 'anywhere', lineHeight: 'var(--lh-sm)' } : undefined })] }), (hasStart || hasEnd) && jsxs("div", { className: sx(routeStyle$2), children: [hasStart && jsxs("div", { className: sx(endpointStyle), children: [jsx("span", { className: sx(endpointLabelStyle), children: endpoints.startLabel }), segment.type === 'car' && jsx("span", { className: sx(endpointTimeStyle), children: endpoints.startCode }), endpoints.startTime && jsx("span", { className: sx(segment.type === 'car' ? endpointCodeStyle : endpointTimeStyle), children: endpoints.startTime }), segment.type !== 'car' && endpoints.startCode && jsx("span", { className: sx(endpointCodeStyle), children: endpoints.startCode }), endpoints.startPlace && jsx("span", { className: sx(endpointPlaceStyle), children: endpoints.startPlace })] }), hasStart && hasEnd && jsxs("div", { className: sx(connectorStyle), children: [duration && jsx("span", { className: sx(connectorLabelStyle), children: duration }), jsx("span", { className: sx(connectorArrowStyle), "aria-hidden": "true", children: jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsx("line", { x1: "5", y1: "12", x2: "19", y2: "12" }), jsx("polyline", { points: "12 5 19 12 12 19" })] }) }), (segment.type === 'air' || segment.type === 'rail') && !!segment.miles && jsxs("span", { className: sx(connectorLabelStyle), children: [segment.miles.toLocaleString('en-US'), " miles"] }), segment.type === 'car' && !!segment.carCount && jsxs("span", { className: sx(connectorLabelStyle), children: [segment.carCount, " ", segment.carCount === 1 ? 'Vehicle' : 'Vehicles'] }), segment.type === 'hotel' && !!segment.rooms && jsxs("span", { className: sx(connectorLabelStyle), children: [segment.rooms, " ", segment.rooms === 1 ? 'Room' : 'Rooms'] })] }), hasEnd && jsxs("div", { className: sx(endpointStyle), children: [jsx("span", { className: sx(endpointLabelStyle), children: endpoints.endLabel }), segment.type === 'car' && jsx("span", { className: sx(endpointTimeStyle), children: endpoints.endCode }), endpoints.endTime && (jsxs("span", { className: sx(segment.type === 'car' ? endpointCodeStyle : endpointTimeStyle), children: [endpoints.endTime, dayOffset > 0 && jsxs("span", { className: sx(nextDayStyle), children: ["+", dayOffset, " day", dayOffset === 1 ? '' : 's'] })] })), segment.type !== 'car' && endpoints.endCode && jsx("span", { className: sx(endpointCodeStyle), children: endpoints.endCode }), endpoints.endPlace && jsx("span", { className: sx(endpointPlaceStyle), children: endpoints.endPlace })] })] }), details.length > 0 && (jsx("dl", { className: sx(detailsStyle$1), children: details.map((detail) => (jsxs("div", { className: cx(sx(detailStyle$1), detail.fullRow && sx(detailFullRowStyle)), children: [jsx("dt", { className: sx(detailLabelStyle), children: detail.label }), jsx("dd", { className: cx(sx(detailValueStyle), detail.mono && sx(monoStyle$2)), children: detail.value }), detail.below && jsxs(Fragment, { children: [jsx("dt", { className: cx(sx(detailLabelStyle), sx(detailBelowLabelStyle)), children: detail.below.label }), jsx("dd", { className: sx(detailValueStyle), children: detail.below.value })] })] }, detail.label))) })), segment.type === 'air' && segment.flightStatus && (jsx("p", { className: sx(flightStatusStyle), "data-test": `itinerary-flight-status-${segment.id}`, children: segment.flightStatus })), segment.type === 'air' && segment.checkInAvailable && onCheckIn && !headerCheckIn && (jsx("div", { className: sx(actionsStyle$7), children: jsxs(Button, { size: "sm", variant: "secondary", "data-test": `itinerary-check-in-${segment.id}`, onClick: () => onCheckIn?.(segment), children: ["Check in for ", segment.carrierCode ?? segment.carrier, " ", segment.flightNumber] }) })), noteSections.map(({ label, lines }) => {
14453
14453
  const content = lines?.filter((line) => line.trim());
14454
14454
  return content?.length ? (jsxs("section", { "aria-label": label, className: sx(footerStyle$7), children: [jsx("div", { className: sx(noteLabelStyle), children: label }), content.map((line, index) => jsx("p", { className: sx(noteLineStyle), children: line }, index))] }, label)) : null;
14455
14455
  }), footer && jsx("div", { className: sx(footerStyle$7), children: footer })] }));
@@ -14756,7 +14756,7 @@ const headerStyle$v = {
14756
14756
  justifyContent: 'space-between',
14757
14757
  gap: 'var(--space-4)',
14758
14758
  };
14759
- const titleStyle$t = {
14759
+ const titleStyle$u = {
14760
14760
  label: 'MembershipPrograms-titleStyle',
14761
14761
  fontSize: 'var(--text-lg)',
14762
14762
  fontWeight: 'var(--font-semibold)',
@@ -14952,7 +14952,7 @@ const MembershipPrograms = ({ title = 'Membership Programs', programs, onEdit, o
14952
14952
  return acc;
14953
14953
  }, {});
14954
14954
  const typeOrder = ['airline', 'hotel', 'car', 'other'];
14955
- return (jsxs("div", { className: containerClasses, children: [alert && jsx("div", { className: sx(alertStyle$3), children: alert }), jsxs("div", { className: sx(headerStyle$v), children: [jsx("h2", { className: sx(titleStyle$t), children: title }), onAdd && (jsxs("button", { type: "button", className: sx(addButtonStyle), onClick: onAdd, "aria-label": "Add membership program", children: [jsx(PlusIcon, {}), jsx("span", { children: "Add Program" })] }))] }), programs.length === 0 ? (jsx("div", { className: sx(emptyStyle$c), children: jsx("p", { children: emptyMessage }) })) : (jsx("div", { className: sx(listStyle$3), children: typeOrder.map((type) => {
14955
+ return (jsxs("div", { className: containerClasses, children: [alert && jsx("div", { className: sx(alertStyle$3), children: alert }), jsxs("div", { className: sx(headerStyle$v), children: [jsx("h2", { className: sx(titleStyle$u), children: title }), onAdd && (jsxs("button", { type: "button", className: sx(addButtonStyle), onClick: onAdd, "aria-label": "Add membership program", children: [jsx(PlusIcon, {}), jsx("span", { children: "Add Program" })] }))] }), programs.length === 0 ? (jsx("div", { className: sx(emptyStyle$c), children: jsx("p", { children: emptyMessage }) })) : (jsx("div", { className: sx(listStyle$3), children: typeOrder.map((type) => {
14956
14956
  const typePrograms = groupedPrograms[type];
14957
14957
  if (!typePrograms || typePrograms.length === 0)
14958
14958
  return null;
@@ -15121,7 +15121,7 @@ const dialogStyle = {
15121
15121
  },
15122
15122
  };
15123
15123
  /** The Module card inside it: fills the box and lets its body scroll. */
15124
- const cardStyle$9 = {
15124
+ const cardStyle$a = {
15125
15125
  label: 'Modal-cardStyle',
15126
15126
  flex: 1,
15127
15127
  minHeight: 0,
@@ -15140,7 +15140,7 @@ const sizeStyles$1 = {
15140
15140
  },
15141
15141
  };
15142
15142
  /** The title inherits the Module header's type (16px semibold, ink). */
15143
- const titleStyle$s = {
15143
+ const titleStyle$t = {
15144
15144
  label: 'Modal-titleStyle',
15145
15145
  margin: 0,
15146
15146
  font: 'inherit',
@@ -15245,7 +15245,7 @@ const iconStyle$1 = {
15245
15245
  const iconSpacedStyle = {
15246
15246
  label: 'Module-iconSpacedStyle', margin: 4
15247
15247
  };
15248
- const titleStyle$r = {
15248
+ const titleStyle$s = {
15249
15249
  label: 'Module-titleStyle', color: 'var(--fg-1, #282828)'
15250
15250
  };
15251
15251
  const badgeStyle$1 = {
@@ -15363,7 +15363,7 @@ const Module = ({ title, icon, iconClassName = '', badge, before, children, afte
15363
15363
  setOpen(!open);
15364
15364
  }
15365
15365
  };
15366
- return (jsxs("div", { className: cx(sx(moduleStyle), className), children: [title && (jsx("div", { className: cx(sx(headerStyle$u), sx(headerSizeStyles[size]), !open && sx(closedStyle), headerClassName), children: jsxs("div", { className: cx(sx(titleRowStyle$1), sx(titleRowSizeStyles[size]), titleClassName), children: [icon && (jsx("span", { className: cx(sx(iconStyle$1), size !== 'sm' && sx(iconSpacedStyle), iconClassName), children: icon })), jsx("div", { className: sx(titleStyle$r), children: title }), badge && jsx("span", { className: sx(badgeStyle$1), children: badge }), jsxs("div", { className: sx(toolsStyle), children: [tools, useToggle && (jsx("button", { type: "button", className: sx(toggleBtnStyle), onClick: handleToggle, "aria-expanded": open, children: jsx(ChevronIcon, { direction: open ? 'up' : 'down' }) }))] })] }) })), jsxs("div", { className: cx(sx(bodyWrapperStyle), scrollBody && sx(scrollBodyStyle)), children: [before, jsx("div", { className: cx(sx(bodyStyle$4), sx(bodySizeStyles[size]), !open && sx(hiddenStyle), bodyClassName), children: children }), after] }), footer && (jsx("div", { className: cx(sx(footerStyle$6), !open && sx(hiddenStyle)), children: footer }))] }));
15366
+ return (jsxs("div", { className: cx(sx(moduleStyle), className), children: [title && (jsx("div", { className: cx(sx(headerStyle$u), sx(headerSizeStyles[size]), !open && sx(closedStyle), headerClassName), children: jsxs("div", { className: cx(sx(titleRowStyle$1), sx(titleRowSizeStyles[size]), titleClassName), children: [icon && (jsx("span", { className: cx(sx(iconStyle$1), size !== 'sm' && sx(iconSpacedStyle), iconClassName), children: icon })), jsx("div", { className: sx(titleStyle$s), children: title }), badge && jsx("span", { className: sx(badgeStyle$1), children: badge }), jsxs("div", { className: sx(toolsStyle), children: [tools, useToggle && (jsx("button", { type: "button", className: sx(toggleBtnStyle), onClick: handleToggle, "aria-expanded": open, children: jsx(ChevronIcon, { direction: open ? 'up' : 'down' }) }))] })] }) })), jsxs("div", { className: cx(sx(bodyWrapperStyle), scrollBody && sx(scrollBodyStyle)), children: [before, jsx("div", { className: cx(sx(bodyStyle$4), sx(bodySizeStyles[size]), !open && sx(hiddenStyle), bodyClassName), children: children }), after] }), footer && (jsx("div", { className: cx(sx(footerStyle$6), !open && sx(hiddenStyle)), children: footer }))] }));
15367
15367
  };
15368
15368
  /**
15369
15369
  * Horizontal divider for Module content
@@ -15415,8 +15415,8 @@ const Modal = ({ isOpen, onClose, title, subtitle, icon, children, size = 'md',
15415
15415
  const close = showCloseButton ? (jsx(Button, { type: "button", variant: "secondary", size: "sm", square: true, className: sx(closeButtonStyle$1), onClick: onClose, "aria-label": "Close modal", children: jsx(CloseIcon, { size: 16 }) })) : undefined;
15416
15416
  // Module draws its header only when it has a title; a close button alone
15417
15417
  // still needs one, so it gets an empty title slot.
15418
- const heading = title || subtitle ? (jsxs("div", { children: [title && (jsx("h2", { id: titleId, className: sx(titleStyle$s), children: title })), subtitle && jsx("p", { className: sx(subtitleStyle$6), children: subtitle })] })) : close ? (jsx("span", {})) : undefined;
15419
- return (jsx("div", { className: [sx(overlayStyle), overlayClassName].filter(Boolean).join(' '), onClick: handleBackdropClick, children: jsx("div", { className: cx(sx(dialogStyle), sx(sizeStyles$1[size]), className), style: width ? { maxWidth: width } : undefined, role: "dialog", "aria-modal": "true", "aria-labelledby": title ? titleId : undefined, children: jsx(Module, { className: sx(cardStyle$9), title: heading, icon: icon, tools: close, footer: footer, useToggle: false, scrollBody: true, bodyClassName: bodyClassName, children: children }) }) }));
15418
+ const heading = title || subtitle ? (jsxs("div", { children: [title && (jsx("h2", { id: titleId, className: sx(titleStyle$t), children: title })), subtitle && jsx("p", { className: sx(subtitleStyle$6), children: subtitle })] })) : close ? (jsx("span", {})) : undefined;
15419
+ return (jsx("div", { className: [sx(overlayStyle), overlayClassName].filter(Boolean).join(' '), onClick: handleBackdropClick, children: jsx("div", { className: cx(sx(dialogStyle), sx(sizeStyles$1[size]), className), style: width ? { maxWidth: width } : undefined, role: "dialog", "aria-modal": "true", "aria-labelledby": title ? titleId : undefined, children: jsx(Module, { className: sx(cardStyle$a), title: heading, icon: icon, tools: close, footer: footer, useToggle: false, scrollBody: true, bodyClassName: bodyClassName, children: children }) }) }));
15420
15420
  };
15421
15421
  /**
15422
15422
  * Action row for the bottom of a Modal, keeping button order consistent across dialogs.
@@ -15436,7 +15436,7 @@ const ConfirmModal = ({ message, confirmText = 'Confirm', cancelText = 'Cancel',
15436
15436
 
15437
15437
  The three `--nt-*` custom properties are declared on the card and inherited
15438
15438
  by everything below it, so their names are carried across verbatim. */
15439
- const cardStyle$8 = {
15439
+ const cardStyle$9 = {
15440
15440
  label: 'NextTripCard-cardStyle',
15441
15441
  '--nt-sky': '#5bade6',
15442
15442
  '--nt-muted': 'rgb(255 255 255 / 55%)',
@@ -15460,7 +15460,7 @@ const topStyle = {
15460
15460
  justifyContent: 'space-between',
15461
15461
  gap: 12,
15462
15462
  };
15463
- const eyebrowStyle$7 = {
15463
+ const eyebrowStyle$8 = {
15464
15464
  label: 'NextTripCard-eyebrowStyle',
15465
15465
  color: 'var(--color-accent, #00bcd0)',
15466
15466
  fontFamily: 'var(--font-family-label)',
@@ -15554,7 +15554,7 @@ const travelerStyle$1 = {
15554
15554
  gap: 10,
15555
15555
  marginBottom: 8,
15556
15556
  };
15557
- const nameStyle$3 = {
15557
+ const nameStyle$4 = {
15558
15558
  label: 'NextTripCard-nameStyle',
15559
15559
  fontSize: 17,
15560
15560
  fontWeight: 700,
@@ -15723,7 +15723,7 @@ const btnStyle = {
15723
15723
  fontWeight: 700,
15724
15724
  cursor: 'pointer',
15725
15725
  };
15726
- const actionsStyle$5 = {
15726
+ const actionsStyle$6 = {
15727
15727
  label: 'NextTripCard-actionsStyle',
15728
15728
  display: 'flex',
15729
15729
  flexWrap: 'wrap',
@@ -15787,7 +15787,7 @@ const NextTripCard = ({ eyebrow = 'Your Next Trip', countdownLabel, date, origin
15787
15787
  const expanded = expandedProp ?? autoExpanded;
15788
15788
  const hasDetail = expanded && (details.length > 0 || !!checkIn || !!onAddToCalendar);
15789
15789
  const viewItineraryButton = (jsxs("button", { type: "button", className: cx(sx(btnStyle), sx(btnPrimaryStyle)), onClick: onViewItinerary, children: [viewItineraryLabel, " \u2192"] }));
15790
- return (jsxs("div", { ref: ref, className: cx(sx(cardStyle$8), className), ...props, children: [jsxs("div", { className: sx(topStyle), children: [jsx("span", { className: sx(eyebrowStyle$7), children: eyebrow }), countdownLabel != null && (jsxs("span", { className: sx(countdownStyle), children: [jsx(ClockGlyph, {}), countdownLabel] }))] }), jsxs("div", { className: sx(headStyle), children: [jsx("span", { className: sx(dateStyle), children: date }), jsxs("div", { className: sx(routeStyle$1), children: [jsxs("div", { style: { textAlign: 'right' }, children: [jsx("div", { className: sx(aptCodeStyle), children: origin.code }), jsx("div", { className: sx(aptCityStyle), children: origin.city.toUpperCase() })] }), jsxs("div", { className: sx(pathStyle), children: [jsxs("svg", { width: "92", height: "34", viewBox: "0 0 92 34", fill: "none", "aria-hidden": "true", children: [jsx("circle", { cx: "5", cy: "27", r: "3.5", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "2" }), jsx("circle", { cx: "87", cy: "27", r: "3.5", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "2" }), jsx("path", { d: "M8 26 C 30 3, 62 3, 84 26", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "1.5", strokeDasharray: "3 4", fill: "none" })] }), jsx("span", { className: sx(planeStyle), children: jsx(PlaneIcon$3, { size: 16 }) })] }), jsxs("div", { children: [jsx("div", { className: sx(aptCodeStyle), children: destination.code }), jsx("div", { className: sx(aptCityStyle), children: destination.city.toUpperCase() })] })] })] }), jsx("div", { className: sx(dividerStyle) }), jsxs("div", { className: sx(summaryStyle$5), children: [jsxs("div", { children: [jsxs("div", { className: sx(travelerStyle$1), children: [jsx("span", { className: sx(nameStyle$3), children: traveler }), status && (jsxs("span", { className: cx(sx(statusStyle$3), sx(toneStyles$1[status.tone ?? 'ontime'])), children: [jsx("span", { className: sx(statusDotStyle$1) }), status.label] }))] }), jsxs("div", { className: sx(timesStyle), children: [jsx("span", { className: sx(timeStyle), children: departTime }), jsx("span", { className: sx(arrowStyle), children: "\u2192" }), jsx("span", { className: sx(timeStyle), children: arriveTime })] }), jsxs("div", { className: sx(legsStyle$2), children: [jsxs("span", { children: ["Depart \u00B7 ", origin.code] }), jsxs("span", { children: ["Arrive \u00B7 ", destination.code] })] })] }), !hasDetail && viewItineraryButton] }), hasDetail && (jsxs("div", { className: sx(moreStyle), children: [details.length > 0 && (jsxs(Fragment, { children: [jsxs("div", { className: sx(moreLabelStyle), children: [jsx("span", { children: "Flight details" }), jsx("span", { className: sx(ruleStyle) })] }), jsx("div", { className: sx(gridStyle$6), children: details.map((f) => (jsxs("div", { children: [jsx("div", { className: sx(fieldKStyle), children: f.label }), jsxs("div", { className: sx(fieldVStyle), children: [f.value, f.note && jsxs("span", { className: sx(fieldNoteStyle), children: [" ", f.note] })] })] }, f.label))) })] })), checkIn && (jsxs("div", { className: sx(checkinStyle), children: [jsx("span", { className: sx(checkinIconStyle), children: jsx(CalendarGlyph$1, {}) }), jsxs("span", { className: sx(checkinTextStyle), children: [jsx("strong", { children: checkIn.title }), checkIn.note && jsxs(Fragment, { children: [" ", jsx("span", { children: checkIn.note })] })] })] })), jsxs("div", { className: sx(actionsStyle$5), children: [viewItineraryButton, onAddToCalendar && (jsx("button", { type: "button", className: cx(sx(btnStyle), sx(btnGhostStyle)), onClick: onAddToCalendar, children: addToCalendarLabel }))] })] }))] }));
15790
+ return (jsxs("div", { ref: ref, className: cx(sx(cardStyle$9), className), ...props, children: [jsxs("div", { className: sx(topStyle), children: [jsx("span", { className: sx(eyebrowStyle$8), children: eyebrow }), countdownLabel != null && (jsxs("span", { className: sx(countdownStyle), children: [jsx(ClockGlyph, {}), countdownLabel] }))] }), jsxs("div", { className: sx(headStyle), children: [jsx("span", { className: sx(dateStyle), children: date }), jsxs("div", { className: sx(routeStyle$1), children: [jsxs("div", { style: { textAlign: 'right' }, children: [jsx("div", { className: sx(aptCodeStyle), children: origin.code }), jsx("div", { className: sx(aptCityStyle), children: origin.city.toUpperCase() })] }), jsxs("div", { className: sx(pathStyle), children: [jsxs("svg", { width: "92", height: "34", viewBox: "0 0 92 34", fill: "none", "aria-hidden": "true", children: [jsx("circle", { cx: "5", cy: "27", r: "3.5", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "2" }), jsx("circle", { cx: "87", cy: "27", r: "3.5", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "2" }), jsx("path", { d: "M8 26 C 30 3, 62 3, 84 26", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "1.5", strokeDasharray: "3 4", fill: "none" })] }), jsx("span", { className: sx(planeStyle), children: jsx(PlaneIcon$3, { size: 16 }) })] }), jsxs("div", { children: [jsx("div", { className: sx(aptCodeStyle), children: destination.code }), jsx("div", { className: sx(aptCityStyle), children: destination.city.toUpperCase() })] })] })] }), jsx("div", { className: sx(dividerStyle) }), jsxs("div", { className: sx(summaryStyle$5), children: [jsxs("div", { children: [jsxs("div", { className: sx(travelerStyle$1), children: [jsx("span", { className: sx(nameStyle$4), children: traveler }), status && (jsxs("span", { className: cx(sx(statusStyle$3), sx(toneStyles$1[status.tone ?? 'ontime'])), children: [jsx("span", { className: sx(statusDotStyle$1) }), status.label] }))] }), jsxs("div", { className: sx(timesStyle), children: [jsx("span", { className: sx(timeStyle), children: departTime }), jsx("span", { className: sx(arrowStyle), children: "\u2192" }), jsx("span", { className: sx(timeStyle), children: arriveTime })] }), jsxs("div", { className: sx(legsStyle$2), children: [jsxs("span", { children: ["Depart \u00B7 ", origin.code] }), jsxs("span", { children: ["Arrive \u00B7 ", destination.code] })] })] }), !hasDetail && viewItineraryButton] }), hasDetail && (jsxs("div", { className: sx(moreStyle), children: [details.length > 0 && (jsxs(Fragment, { children: [jsxs("div", { className: sx(moreLabelStyle), children: [jsx("span", { children: "Flight details" }), jsx("span", { className: sx(ruleStyle) })] }), jsx("div", { className: sx(gridStyle$6), children: details.map((f) => (jsxs("div", { children: [jsx("div", { className: sx(fieldKStyle), children: f.label }), jsxs("div", { className: sx(fieldVStyle), children: [f.value, f.note && jsxs("span", { className: sx(fieldNoteStyle), children: [" ", f.note] })] })] }, f.label))) })] })), checkIn && (jsxs("div", { className: sx(checkinStyle), children: [jsx("span", { className: sx(checkinIconStyle), children: jsx(CalendarGlyph$1, {}) }), jsxs("span", { className: sx(checkinTextStyle), children: [jsx("strong", { children: checkIn.title }), checkIn.note && jsxs(Fragment, { children: [" ", jsx("span", { children: checkIn.note })] })] })] })), jsxs("div", { className: sx(actionsStyle$6), children: [viewItineraryButton, onAddToCalendar && (jsx("button", { type: "button", className: cx(sx(btnStyle), sx(btnGhostStyle)), onClick: onAddToCalendar, children: addToCalendarLabel }))] })] }))] }));
15791
15791
  };
15792
15792
 
15793
15793
  /* "Your travel board": a full-width (L-only) home widget showing the week's
@@ -15795,7 +15795,7 @@ const NextTripCard = ({ eyebrow = 'Your Next Trip', countdownLabel, date, origin
15795
15795
  Individual view is flight-centric (route + time + traveller). Team view, drawn
15796
15796
  from the Team Travel Calendar, de-emphasises flights and shows each team trip
15797
15797
  as a bar spanning its travel dates. Selecting an item fills the footer. */
15798
- const cardStyle$7 = {
15798
+ const cardStyle$8 = {
15799
15799
  label: 'TravelBoard-cardStyle',
15800
15800
  display: 'flex',
15801
15801
  width: '100%',
@@ -15818,7 +15818,7 @@ const headerStyle$t = {
15818
15818
  gap: '14px 20px',
15819
15819
  padding: '18px 22px',
15820
15820
  };
15821
- const titleStyle$q = {
15821
+ const titleStyle$r = {
15822
15822
  label: 'TravelBoard-titleStyle',
15823
15823
  margin: 0,
15824
15824
  flex: '0 0 auto',
@@ -16222,7 +16222,7 @@ const footerEyebrowStyle = {
16222
16222
  * `footerTitleStyle`, which resolves this class name to build that descendant
16223
16223
  * selector.
16224
16224
  */
16225
- const codeStyle$2 = {
16225
+ const codeStyle$3 = {
16226
16226
  label: 'TravelBoard-codeStyle',
16227
16227
  };
16228
16228
  const footerTitleStyle = {
@@ -16235,7 +16235,7 @@ const footerTitleStyle = {
16235
16235
  whiteSpace: 'nowrap',
16236
16236
  /* `.footerTitle .code` — the child's class is content-hashed, so it is
16237
16237
  resolved here rather than written out. */
16238
- [`& .${sx(codeStyle$2)}`]: {
16238
+ [`& .${sx(codeStyle$3)}`]: {
16239
16239
  color: 'var(--color-accent-strong, #0097a8)',
16240
16240
  },
16241
16241
  };
@@ -16371,14 +16371,14 @@ const TravelBoard = ({ title = "This Week's Travel", weekDays, periodLabel, trip
16371
16371
  if (!selectedTrip)
16372
16372
  return jsx("span", { className: sx(footerEmptyStyle), children: "Select a trip to see its details." });
16373
16373
  const t = selectedTrip;
16374
- return (jsxs(Fragment, { children: [jsx("span", { className: sx(footerAvatarStyle), "aria-hidden": true, children: t.travelerInitials ?? initialsOf(t.travelerFull ?? t.traveler) }), jsxs("span", { className: sx(footerMetaStyle), children: [jsxs("span", { className: sx(footerEyebrowStyle), children: [t.travelerFull ?? t.traveler, t.sportCode ? ` - ${t.sportCode}` : ''] }), jsxs("span", { className: sx(footerTitleStyle), children: [t.originCity ?? t.origin, " ", jsx("span", { className: sx(codeStyle$2), children: t.origin }), " \u2192 ", t.destinationCity ?? t.destination, " ", jsx("span", { className: sx(codeStyle$2), children: t.destination })] }), jsxs("span", { className: sx(footerSubStyle), children: [t.time, t.arriveTime ? ` – ${t.arriveTime}` : '', t.airline ? jsxs(Fragment, { children: [" \u00B7 ", t.airline] }) : null, t.confirmation ? jsxs(Fragment, { children: [" \u00B7 Confirmation: ", jsx("b", { children: t.confirmation })] }) : null] })] }), jsxs("button", { type: "button", className: sx(footerBtnStyle), onClick: () => onViewItinerary?.(t), children: ["View itinerary ", chevron] })] }));
16374
+ return (jsxs(Fragment, { children: [jsx("span", { className: sx(footerAvatarStyle), "aria-hidden": true, children: t.travelerInitials ?? initialsOf(t.travelerFull ?? t.traveler) }), jsxs("span", { className: sx(footerMetaStyle), children: [jsxs("span", { className: sx(footerEyebrowStyle), children: [t.travelerFull ?? t.traveler, t.sportCode ? ` - ${t.sportCode}` : ''] }), jsxs("span", { className: sx(footerTitleStyle), children: [t.originCity ?? t.origin, " ", jsx("span", { className: sx(codeStyle$3), children: t.origin }), " \u2192 ", t.destinationCity ?? t.destination, " ", jsx("span", { className: sx(codeStyle$3), children: t.destination })] }), jsxs("span", { className: sx(footerSubStyle), children: [t.time, t.arriveTime ? ` – ${t.arriveTime}` : '', t.airline ? jsxs(Fragment, { children: [" \u00B7 ", t.airline] }) : null, t.confirmation ? jsxs(Fragment, { children: [" \u00B7 Confirmation: ", jsx("b", { children: t.confirmation })] }) : null] })] }), jsxs("button", { type: "button", className: sx(footerBtnStyle), onClick: () => onViewItinerary?.(t), children: ["View itinerary ", chevron] })] }));
16375
16375
  }
16376
16376
  if (!selectedTeamTrip)
16377
16377
  return jsx("span", { className: sx(footerEmptyStyle), children: "Select a team trip to see its details." });
16378
16378
  const t = selectedTeamTrip;
16379
16379
  return (jsxs(Fragment, { children: [jsx("span", { className: sx(footerAvatarStyle), "aria-hidden": true, style: t.accent ? { color: t.accent } : undefined, children: t.teamInitials ?? initialsOf(t.team) }), jsxs("span", { className: sx(footerMetaStyle), children: [jsx("span", { className: sx(footerEyebrowStyle), children: "Team Travel" }), jsxs("span", { className: sx(footerTitleStyle), children: [t.team, t.destination ? jsxs(Fragment, { children: [" \u00B7 ", t.destination] }) : null] }), jsxs("span", { className: sx(footerSubStyle), children: [periodLabelForTeam(t), t.travelerCount != null ? jsxs(Fragment, { children: [" \u00B7 ", jsx("b", { children: t.travelerCount }), " travelers"] }) : null] })] }), jsxs("button", { type: "button", className: sx(footerBtnStyle), onClick: () => onViewTeamTrip?.(t), children: ["View trip ", chevron] })] }));
16380
16380
  };
16381
- return (jsxs("div", { className: cx(sx(cardStyle$7), className), "data-test": "travel-board", ...props, children: [jsxs("div", { className: sx(headerStyle$t), children: [jsx("h3", { className: sx(titleStyle$q), children: title }), jsx("div", { className: sx(togglesStyle), children: jsx(SegmentedSelector, { ariaLabel: "Traveller scope", dataTest: "travel-board-mode", value: mode, onChange: (v) => changeMode(v), activeItemClassName: sx(modeActiveStyle), options: [{ id: 'individual', label: 'Individual' }, { id: 'team', label: 'Team' }] }) }), jsxs("div", { className: sx(periodStyle), children: [jsx("span", { className: sx(periodLabelStyle), children: periodLabel }), jsx("button", { type: "button", className: sx(navBtnStyle), "aria-label": "Previous week", onClick: onPrev, children: jsx(ChevronLeftIcon, { size: 18 }) }), jsx("button", { type: "button", className: sx(navBtnStyle), "aria-label": "Next week", onClick: onNext, children: jsx(ChevronRightIcon$1, { size: 18 }) })] })] }), mode === 'individual' ? renderIndividualBoard() : renderTeamBoard(), jsx("div", { className: sx(footerStyle$5), children: renderFooter() })] }));
16381
+ return (jsxs("div", { className: cx(sx(cardStyle$8), className), "data-test": "travel-board", ...props, children: [jsxs("div", { className: sx(headerStyle$t), children: [jsx("h3", { className: sx(titleStyle$r), children: title }), jsx("div", { className: sx(togglesStyle), children: jsx(SegmentedSelector, { ariaLabel: "Traveller scope", dataTest: "travel-board-mode", value: mode, onChange: (v) => changeMode(v), activeItemClassName: sx(modeActiveStyle), options: [{ id: 'individual', label: 'Individual' }, { id: 'team', label: 'Team' }] }) }), jsxs("div", { className: sx(periodStyle), children: [jsx("span", { className: sx(periodLabelStyle), children: periodLabel }), jsx("button", { type: "button", className: sx(navBtnStyle), "aria-label": "Previous week", onClick: onPrev, children: jsx(ChevronLeftIcon, { size: 18 }) }), jsx("button", { type: "button", className: sx(navBtnStyle), "aria-label": "Next week", onClick: onNext, children: jsx(ChevronRightIcon$1, { size: 18 }) })] })] }), mode === 'individual' ? renderIndividualBoard() : renderTeamBoard(), jsx("div", { className: sx(footerStyle$5), children: renderFooter() })] }));
16382
16382
  };
16383
16383
  /** Formats a team trip's travel span for the footer, collapsing the repeated month. */
16384
16384
  const periodLabelForTeam = (t) => {
@@ -16476,7 +16476,7 @@ const contentStyle$5 = {
16476
16476
  flex: 1,
16477
16477
  minWidth: 0,
16478
16478
  };
16479
- const titleStyle$p = {
16479
+ const titleStyle$q = {
16480
16480
  label: 'PageBanners-titleStyle',
16481
16481
  '&&': {
16482
16482
  margin: 0,
@@ -16590,8 +16590,8 @@ const PageBanners = ({ systemBanners, alertBanners, fullWidth = false, className
16590
16590
  const visibleAlerts = alertBanners.filter((banner) => !dismissed.has(banner.id));
16591
16591
  if (!visibleSystem.length && !visibleAlerts.length)
16592
16592
  return null;
16593
- return (jsxs("div", { className: classes(sx(stackStyle$3), fullWidth && sx(flushStyle), className), role: "region", "aria-label": "Page notices", children: [visibleSystem.map((banner) => (jsxs("div", { className: classes(sx(bannerStyle$1), sx(systemStyle)), role: "status", children: [jsx(InfoIcon$1, { className: sx(systemIconStyle), size: 20, "aria-hidden": "true" }), jsxs("div", { className: sx(contentStyle$5), children: [jsx("p", { className: sx(titleStyle$p), children: decodeEntities(banner.html) }), banner.detailHtml && jsx("p", { className: sx(detailStyle), children: decodeEntities(banner.detailHtml) })] }), jsx("button", { type: "button", className: sx(dismissStyle), "aria-label": "Dismiss notice", onClick: () => dismiss(banner.id), children: jsx(CloseIcon, { size: 16 }) })] }, banner.id))), visibleAlerts.map((banner) => {
16594
- const content = (jsxs("div", { className: sx(contentStyle$5), children: [jsx("p", { className: classes(sx(titleStyle$p), sx(alertTitleStyle)), children: decodeEntities(banner.title) }), banner.body && jsx("p", { className: classes(sx(detailStyle), sx(clampStyle)), children: decodeEntities(banner.body) })] }));
16593
+ return (jsxs("div", { className: classes(sx(stackStyle$3), fullWidth && sx(flushStyle), className), role: "region", "aria-label": "Page notices", children: [visibleSystem.map((banner) => (jsxs("div", { className: classes(sx(bannerStyle$1), sx(systemStyle)), role: "status", children: [jsx(InfoIcon$1, { className: sx(systemIconStyle), size: 20, "aria-hidden": "true" }), jsxs("div", { className: sx(contentStyle$5), children: [jsx("p", { className: sx(titleStyle$q), children: decodeEntities(banner.html) }), banner.detailHtml && jsx("p", { className: sx(detailStyle), children: decodeEntities(banner.detailHtml) })] }), jsx("button", { type: "button", className: sx(dismissStyle), "aria-label": "Dismiss notice", onClick: () => dismiss(banner.id), children: jsx(CloseIcon, { size: 16 }) })] }, banner.id))), visibleAlerts.map((banner) => {
16594
+ const content = (jsxs("div", { className: sx(contentStyle$5), children: [jsx("p", { className: classes(sx(titleStyle$q), sx(alertTitleStyle)), children: decodeEntities(banner.title) }), banner.body && jsx("p", { className: classes(sx(detailStyle), sx(clampStyle)), children: decodeEntities(banner.body) })] }));
16595
16595
  return (jsxs("div", { className: classes(sx(bannerStyle$1), sx(alertStyle$1)), role: "alert", children: [jsx(WarningIcon$1, { className: sx(alertIconStyle), size: 20, "aria-hidden": "true" }), banner.href ? (jsx("a", { href: banner.href, className: sx(alertLinkStyle), children: content })) : (content), jsx("button", { type: "button", className: classes(sx(dismissStyle), sx(alertDismissStyle)), "aria-label": "Dismiss alert", onClick: () => dismiss(banner.id), children: jsx(CloseIcon, { size: 16 }) })] }, banner.id));
16596
16596
  })] }));
16597
16597
  };
@@ -16623,7 +16623,7 @@ const alertStyle = {
16623
16623
  label: 'PreferencesPanel-alertStyle',
16624
16624
  width: '100%',
16625
16625
  };
16626
- const titleStyle$o = {
16626
+ const titleStyle$p = {
16627
16627
  label: 'PreferencesPanel-titleStyle',
16628
16628
  fontSize: 'var(--text-lg)',
16629
16629
  fontWeight: 'var(--font-semibold)',
@@ -16732,7 +16732,7 @@ const DEFAULT_ICONS = {
16732
16732
  */
16733
16733
  const PreferencesPanel = ({ title, sections, alert, footer, isLoading = false, className = '', }) => {
16734
16734
  const panelClasses = cx(sx(panelStyle$4), isLoading && sx(loadingStyle$2), className);
16735
- return (jsxs("div", { className: panelClasses, children: [alert && (jsx("div", { className: sx(alertStyle), children: alert })), title && jsx("h2", { className: sx(titleStyle$o), children: title }), jsx("div", { className: sx(gridStyle$5), children: sections.map((section, i) => (jsxs("div", { className: sx(sectionStyle$7), children: [jsxs("div", { className: sx(sectionHeaderStyle$2), children: [(section.icon || DEFAULT_ICONS[section.title.toLowerCase()]) && (jsx("span", { className: sx(sectionIconStyle$2), children: section.icon || DEFAULT_ICONS[section.title.toLowerCase()] })), jsx("h3", { className: sx(sectionTitleStyle$a), children: section.title })] }), jsx("div", { className: sx(fieldsStyle$1), children: section.fields.map((field, j) => (jsxs("div", { className: sx(fieldStyle$3), children: [jsx("label", { className: sx(fieldLabelStyle$1), children: field.label }), field.input ? (jsx("div", { className: sx(fieldInputStyle), children: field.input })) : (jsx("div", { className: sx(fieldValueStyle$1), children: field.value || '—' }))] }, j))) })] }, i))) }), footer && (jsx("div", { className: sx(footerStyle$4), children: footer }))] }));
16735
+ return (jsxs("div", { className: panelClasses, children: [alert && (jsx("div", { className: sx(alertStyle), children: alert })), title && jsx("h2", { className: sx(titleStyle$p), children: title }), jsx("div", { className: sx(gridStyle$5), children: sections.map((section, i) => (jsxs("div", { className: sx(sectionStyle$7), children: [jsxs("div", { className: sx(sectionHeaderStyle$2), children: [(section.icon || DEFAULT_ICONS[section.title.toLowerCase()]) && (jsx("span", { className: sx(sectionIconStyle$2), children: section.icon || DEFAULT_ICONS[section.title.toLowerCase()] })), jsx("h3", { className: sx(sectionTitleStyle$a), children: section.title })] }), jsx("div", { className: sx(fieldsStyle$1), children: section.fields.map((field, j) => (jsxs("div", { className: sx(fieldStyle$3), children: [jsx("label", { className: sx(fieldLabelStyle$1), children: field.label }), field.input ? (jsx("div", { className: sx(fieldInputStyle), children: field.input })) : (jsx("div", { className: sx(fieldValueStyle$1), children: field.value || '—' }))] }, j))) })] }, i))) }), footer && (jsx("div", { className: sx(footerStyle$4), children: footer }))] }));
16736
16736
  };
16737
16737
  PreferencesPanel.displayName = 'PreferencesPanel';
16738
16738
 
@@ -16784,7 +16784,7 @@ const identityTextStyle = {
16784
16784
  flexDirection: 'column',
16785
16785
  gap: 2,
16786
16786
  };
16787
- const nameStyle$2 = {
16787
+ const nameStyle$3 = {
16788
16788
  label: 'ProfileMenu-nameStyle',
16789
16789
  overflow: 'hidden',
16790
16790
  fontSize: 18,
@@ -16858,7 +16858,7 @@ const dangerStyle$1 = {
16858
16858
  * user, the rows, and their handlers, and positions the menu (e.g. as the
16859
16859
  * `profileMenu` popover of HubAppShell).
16860
16860
  */
16861
- const ProfileMenu = ({ name, email, initials, avatarSrc, profileLabel = 'Profile', accountLabel = 'Account', items, className = '', ...props }) => (jsxs("div", { className: cx(sx(menuStyle), className), role: "menu", "aria-label": profileLabel, "data-test": "profile-menu", ...props, children: [jsxs("div", { className: sx(identityBlockStyle), children: [jsx("p", { className: sx(sectionLabelStyle), children: profileLabel }), jsxs("div", { className: sx(identityStyle), children: [jsx(Avatar, { name: name, initials: initials, src: avatarSrc, size: "lg" }), jsxs("div", { className: sx(identityTextStyle), children: [jsx("span", { className: sx(nameStyle$2), children: name }), jsx("span", { className: sx(emailStyle), children: email })] })] })] }), jsxs("div", { className: sx(sectionStyle$6), children: [jsx("p", { className: sx(sectionLabelStyle), children: accountLabel }), items.map((item) => (jsxs("button", { type: "button", role: "menuitem", className: cx(sx(itemStyle$1), item.variant === 'danger' && sx(dangerStyle$1)), onClick: item.onClick, "data-test": `profile-menu-${item.key}`, children: [item.icon && jsx("span", { className: sx(itemIconStyle), children: item.icon }), jsx("span", { children: item.label })] }, item.key)))] })] }));
16861
+ const ProfileMenu = ({ name, email, initials, avatarSrc, profileLabel = 'Profile', accountLabel = 'Account', items, className = '', ...props }) => (jsxs("div", { className: cx(sx(menuStyle), className), role: "menu", "aria-label": profileLabel, "data-test": "profile-menu", ...props, children: [jsxs("div", { className: sx(identityBlockStyle), children: [jsx("p", { className: sx(sectionLabelStyle), children: profileLabel }), jsxs("div", { className: sx(identityStyle), children: [jsx(Avatar, { name: name, initials: initials, src: avatarSrc, size: "lg" }), jsxs("div", { className: sx(identityTextStyle), children: [jsx("span", { className: sx(nameStyle$3), children: name }), jsx("span", { className: sx(emailStyle), children: email })] })] })] }), jsxs("div", { className: sx(sectionStyle$6), children: [jsx("p", { className: sx(sectionLabelStyle), children: accountLabel }), items.map((item) => (jsxs("button", { type: "button", role: "menuitem", className: cx(sx(itemStyle$1), item.variant === 'danger' && sx(dangerStyle$1)), onClick: item.onClick, "data-test": `profile-menu-${item.key}`, children: [item.icon && jsx("span", { className: sx(itemIconStyle), children: item.icon }), jsx("span", { children: item.label })] }, item.key)))] })] }));
16862
16862
 
16863
16863
  /**
16864
16864
  * QuoteCostBreakdown's compiled rules.
@@ -16882,7 +16882,7 @@ const breakdownStyle = {
16882
16882
  flexDirection: 'column',
16883
16883
  gap: 'var(--space-3)',
16884
16884
  };
16885
- const titleStyle$n = {
16885
+ const titleStyle$o = {
16886
16886
  label: 'QuoteCostBreakdown-titleStyle',
16887
16887
  margin: 0,
16888
16888
  color: 'var(--fg-1)',
@@ -17028,11 +17028,11 @@ const QuoteCostBreakdown = ({ lineItems, adjustments = [], currency = 'USD', loc
17028
17028
  const quantityFormatter = useMemo(() => new Intl.NumberFormat(locale), [locale]);
17029
17029
  const totals = useMemo(() => computeQuoteTotals(lineItems, adjustments), [lineItems, adjustments]);
17030
17030
  const perPassenger = passengerCount && passengerCount > 0 ? totals.total / passengerCount : undefined;
17031
- return (jsxs("section", { className: cx(sx(breakdownStyle), className), "aria-label": title || 'Cost breakdown', "data-test": "quote-cost-breakdown", children: [title && jsx("h3", { className: sx(titleStyle$n), children: title }), jsx("div", { className: sx(tableScrollStyle$1), children: jsxs("table", { className: sx(tableStyle$7), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Item" }), jsx("th", { scope: "col", className: sx(numericStyle), children: "Qty" }), jsx("th", { scope: "col", className: sx(numericStyle), children: "Unit price" }), jsx("th", { scope: "col", className: sx(numericStyle), children: "Amount" })] }) }), jsxs("tbody", { children: [lineItems.length === 0 && (jsx("tr", { children: jsx("td", { colSpan: 4, className: sx(emptyStyle$a), "data-test": "quote-cost-empty", children: "This quote has no cost line items yet." }) })), lineItems.map((lineItem) => (jsxs("tr", { "data-test": "quote-cost-line-item", children: [jsxs("th", { scope: "row", className: sx(itemCellStyle), children: [jsx("span", { className: sx(itemLabelStyle), children: lineItem.label }), jsxs("span", { className: sx(itemMetaStyle), children: [CATEGORY_LABELS[lineItem.category ?? 'other'], lineItem.description ? ` · ${lineItem.description}` : ''] })] }), jsxs("td", { className: sx(numericStyle), children: [quantityFormatter.format(lineItem.quantity), " ", lineItem.unit] }), jsx("td", { className: sx(numericStyle), children: currencyFormatter.format(lineItem.unitPrice) }), jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), children: currencyFormatter.format(computeLineItemTotal(lineItem)) })] }, lineItem.id)))] }), jsxs("tfoot", { children: [jsxs("tr", { className: sx(subtotalRowStyle), children: [jsx("th", { scope: "row", colSpan: 3, children: "Subtotal" }), jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), "data-test": "quote-cost-subtotal", children: currencyFormatter.format(totals.subtotal) })] }), adjustments.map((adjustment) => (jsxs("tr", { "data-test": "quote-cost-adjustment", children: [jsxs("th", { scope: "row", colSpan: 3, className: sx(itemCellStyle), children: [jsx("span", { className: sx(itemLabelStyle), children: adjustment.label }), adjustment.note && jsx("span", { className: sx(itemMetaStyle), children: adjustment.note })] }), jsx("td", { className: cx(sx(numericStyle), sx(amountStyle), adjustment.amount < 0 && sx(creditStyle)), children: currencyFormatter.format(adjustment.amount) })] }, adjustment.id))), jsxs("tr", { className: sx(totalRowStyle), children: [jsx("th", { scope: "row", colSpan: 3, children: "Quoted total" }), jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), "data-test": "quote-cost-total", children: currencyFormatter.format(totals.total) })] }), perPassenger !== undefined && (jsxs("tr", { className: sx(perPassengerRowStyle), children: [jsxs("th", { scope: "row", colSpan: 3, children: ["Per passenger (", quantityFormatter.format(passengerCount), " pax)"] }), jsx("td", { className: sx(numericStyle), "data-test": "quote-cost-per-passenger", children: currencyFormatter.format(perPassenger) })] }))] })] }) })] }));
17031
+ return (jsxs("section", { className: cx(sx(breakdownStyle), className), "aria-label": title || 'Cost breakdown', "data-test": "quote-cost-breakdown", children: [title && jsx("h3", { className: sx(titleStyle$o), children: title }), jsx("div", { className: sx(tableScrollStyle$1), children: jsxs("table", { className: sx(tableStyle$7), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Item" }), jsx("th", { scope: "col", className: sx(numericStyle), children: "Qty" }), jsx("th", { scope: "col", className: sx(numericStyle), children: "Unit price" }), jsx("th", { scope: "col", className: sx(numericStyle), children: "Amount" })] }) }), jsxs("tbody", { children: [lineItems.length === 0 && (jsx("tr", { children: jsx("td", { colSpan: 4, className: sx(emptyStyle$a), "data-test": "quote-cost-empty", children: "This quote has no cost line items yet." }) })), lineItems.map((lineItem) => (jsxs("tr", { "data-test": "quote-cost-line-item", children: [jsxs("th", { scope: "row", className: sx(itemCellStyle), children: [jsx("span", { className: sx(itemLabelStyle), children: lineItem.label }), jsxs("span", { className: sx(itemMetaStyle), children: [CATEGORY_LABELS[lineItem.category ?? 'other'], lineItem.description ? ` · ${lineItem.description}` : ''] })] }), jsxs("td", { className: sx(numericStyle), children: [quantityFormatter.format(lineItem.quantity), " ", lineItem.unit] }), jsx("td", { className: sx(numericStyle), children: currencyFormatter.format(lineItem.unitPrice) }), jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), children: currencyFormatter.format(computeLineItemTotal(lineItem)) })] }, lineItem.id)))] }), jsxs("tfoot", { children: [jsxs("tr", { className: sx(subtotalRowStyle), children: [jsx("th", { scope: "row", colSpan: 3, children: "Subtotal" }), jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), "data-test": "quote-cost-subtotal", children: currencyFormatter.format(totals.subtotal) })] }), adjustments.map((adjustment) => (jsxs("tr", { "data-test": "quote-cost-adjustment", children: [jsxs("th", { scope: "row", colSpan: 3, className: sx(itemCellStyle), children: [jsx("span", { className: sx(itemLabelStyle), children: adjustment.label }), adjustment.note && jsx("span", { className: sx(itemMetaStyle), children: adjustment.note })] }), jsx("td", { className: cx(sx(numericStyle), sx(amountStyle), adjustment.amount < 0 && sx(creditStyle)), children: currencyFormatter.format(adjustment.amount) })] }, adjustment.id))), jsxs("tr", { className: sx(totalRowStyle), children: [jsx("th", { scope: "row", colSpan: 3, children: "Quoted total" }), jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), "data-test": "quote-cost-total", children: currencyFormatter.format(totals.total) })] }), perPassenger !== undefined && (jsxs("tr", { className: sx(perPassengerRowStyle), children: [jsxs("th", { scope: "row", colSpan: 3, children: ["Per passenger (", quantityFormatter.format(passengerCount), " pax)"] }), jsx("td", { className: sx(numericStyle), "data-test": "quote-cost-per-passenger", children: currencyFormatter.format(perPassenger) })] }))] })] }) })] }));
17032
17032
  };
17033
17033
 
17034
17034
  /** The button row itself; it wraps so the disabled reason can take a line of its own. */
17035
- const actionsStyle$4 = {
17035
+ const actionsStyle$5 = {
17036
17036
  label: 'QuoteReviewActions-actionsStyle',
17037
17037
  display: 'flex',
17038
17038
  flexWrap: 'wrap',
@@ -17191,7 +17191,7 @@ const QuoteReviewActions = ({ quoteId, carrier, formattedTotal, changes = [], di
17191
17191
  const appendReason = (reason) => {
17192
17192
  setNote((current) => (current.trim() ? `${current.trim()}\n${reason}` : reason));
17193
17193
  };
17194
- return (jsxs("div", { className: cx(sx(actionsStyle$4), className), "data-test": "quote-review-actions", children: [jsx(Button, { disabled: disabled, onClick: () => setIsApproveOpen(true), "data-test": "quote-review-approve", children: approveLabel }), jsx(Button, { variant: "secondary", disabled: disabled, onClick: () => setIsRejectOpen(true), "data-test": "quote-review-reject", children: rejectLabel }), changes.length > 0 && (jsxs("span", { className: sx(changeCountStyle), "data-test": "quote-review-change-count", children: [changes.length, " field", changes.length === 1 ? '' : 's', " edited"] })), disabled && disabledReason && (jsx("p", { className: sx(disabledReasonStyle), "data-test": "quote-review-disabled-reason", children: disabledReason })), jsx(ConfirmModal, { isOpen: isApproveOpen, onClose: () => setIsApproveOpen(false), title: "Approve this quote?", confirmText: approveLabel, cancelText: "Cancel", loading: loading, onConfirm: confirmApprove, message: jsxs("span", { "data-test": "quote-review-approve-message", children: [jsxs("span", { className: sx(approveIntroStyle), children: ["Approving ", quoteId, " records ", carrier, formattedTotal ? `'s ${formattedTotal} quote` : "'s quote", " as approved. This cannot be undone from Hub."] }), changes.length > 0 ? (jsxs(Fragment, { children: [jsxs("span", { className: sx(changeIntroStyle), "data-test": "quote-review-change-intro", children: ["You changed ", changes.length, " field", changes.length === 1 ? '' : 's', " \u2014 the submitter is notified when these edits are stored."] }), jsx("span", { className: sx(changeListStyle), "data-test": "quote-review-change-list", children: changes.map((change) => (jsxs("span", { className: sx(changeStyle), "data-test": "quote-review-change", children: [jsx("span", { className: sx(changeLabelStyle), children: change.label }), jsxs("span", { className: sx(changeValuesStyle), children: [jsx("s", { className: sx(changeFromStyle), children: change.from }), jsx("span", { "aria-hidden": "true", children: "\u2192" }), jsx("strong", { className: sx(changeToStyle), children: change.to })] })] }, change.field))) })] })) : (jsx("span", { className: sx(changeIntroStyle), "data-test": "quote-review-no-changes", children: "You have not changed anything \u2014 the quote is approved exactly as the carrier submitted it." }))] }) }), jsxs(Drawer, { isOpen: isRejectOpen, onClose: closeReject, position: "right", size: "md", children: [jsx(Drawer.Header, { title: `Reject ${quoteId}` }), jsx(Drawer.Body, { children: jsxs("div", { className: sx(changesBodyStyle), children: [jsx("p", { className: sx(changesIntroStyle), children: "Rejecting closes the quote outright. The note is stored with the decision for the Charter Sourcing team; the current workflow does not send a rejection email." }), rejectReasons.length > 0 && (jsx("div", { className: sx(reasonsStyle), role: "group", "aria-label": "Common reasons", children: rejectReasons.map((reason) => (jsx("button", { type: "button", className: sx(reasonStyle$2), onClick: () => appendReason(reason), "data-test": "quote-review-reason", children: reason }, reason))) })), jsx(Textarea, { id: "quote-review-reject-note", label: "Why is this being rejected?", helperText: "Stored with the rejection for the Charter Sourcing team.", rows: 6, fullWidth: true, value: note, onChange: (event) => setNote(event.target.value), placeholder: "Explain why this quote cannot be approved\u2026", "data-test": "quote-review-message" })] }) }), jsx(Drawer.Footer, { children: jsxs("div", { className: sx(drawerFooterStyle), children: [jsx(Button, { variant: "secondary", onClick: closeReject, "data-test": "quote-review-cancel-reject", children: "Cancel" }), jsx(Button, { variant: "danger", disabled: !note.trim(), onClick: submitReject, "data-test": "quote-review-send-reject", children: "Confirm rejection" })] }) })] })] }));
17194
+ return (jsxs("div", { className: cx(sx(actionsStyle$5), className), "data-test": "quote-review-actions", children: [jsx(Button, { disabled: disabled, onClick: () => setIsApproveOpen(true), "data-test": "quote-review-approve", children: approveLabel }), jsx(Button, { variant: "secondary", disabled: disabled, onClick: () => setIsRejectOpen(true), "data-test": "quote-review-reject", children: rejectLabel }), changes.length > 0 && (jsxs("span", { className: sx(changeCountStyle), "data-test": "quote-review-change-count", children: [changes.length, " field", changes.length === 1 ? '' : 's', " edited"] })), disabled && disabledReason && (jsx("p", { className: sx(disabledReasonStyle), "data-test": "quote-review-disabled-reason", children: disabledReason })), jsx(ConfirmModal, { isOpen: isApproveOpen, onClose: () => setIsApproveOpen(false), title: "Approve this quote?", confirmText: approveLabel, cancelText: "Cancel", loading: loading, onConfirm: confirmApprove, message: jsxs("span", { "data-test": "quote-review-approve-message", children: [jsxs("span", { className: sx(approveIntroStyle), children: ["Approving ", quoteId, " records ", carrier, formattedTotal ? `'s ${formattedTotal} quote` : "'s quote", " as approved. This cannot be undone from Hub."] }), changes.length > 0 ? (jsxs(Fragment, { children: [jsxs("span", { className: sx(changeIntroStyle), "data-test": "quote-review-change-intro", children: ["You changed ", changes.length, " field", changes.length === 1 ? '' : 's', " \u2014 the submitter is notified when these edits are stored."] }), jsx("span", { className: sx(changeListStyle), "data-test": "quote-review-change-list", children: changes.map((change) => (jsxs("span", { className: sx(changeStyle), "data-test": "quote-review-change", children: [jsx("span", { className: sx(changeLabelStyle), children: change.label }), jsxs("span", { className: sx(changeValuesStyle), children: [jsx("s", { className: sx(changeFromStyle), children: change.from }), jsx("span", { "aria-hidden": "true", children: "\u2192" }), jsx("strong", { className: sx(changeToStyle), children: change.to })] })] }, change.field))) })] })) : (jsx("span", { className: sx(changeIntroStyle), "data-test": "quote-review-no-changes", children: "You have not changed anything \u2014 the quote is approved exactly as the carrier submitted it." }))] }) }), jsxs(Drawer, { isOpen: isRejectOpen, onClose: closeReject, position: "right", size: "md", children: [jsx(Drawer.Header, { title: `Reject ${quoteId}` }), jsx(Drawer.Body, { children: jsxs("div", { className: sx(changesBodyStyle), children: [jsx("p", { className: sx(changesIntroStyle), children: "Rejecting closes the quote outright. The note is stored with the decision for the Charter Sourcing team; the current workflow does not send a rejection email." }), rejectReasons.length > 0 && (jsx("div", { className: sx(reasonsStyle), role: "group", "aria-label": "Common reasons", children: rejectReasons.map((reason) => (jsx("button", { type: "button", className: sx(reasonStyle$2), onClick: () => appendReason(reason), "data-test": "quote-review-reason", children: reason }, reason))) })), jsx(Textarea, { id: "quote-review-reject-note", label: "Why is this being rejected?", helperText: "Stored with the rejection for the Charter Sourcing team.", rows: 6, fullWidth: true, value: note, onChange: (event) => setNote(event.target.value), placeholder: "Explain why this quote cannot be approved\u2026", "data-test": "quote-review-message" })] }) }), jsx(Drawer.Footer, { children: jsxs("div", { className: sx(drawerFooterStyle), children: [jsx(Button, { variant: "secondary", onClick: closeReject, "data-test": "quote-review-cancel-reject", children: "Cancel" }), jsx(Button, { variant: "danger", disabled: !note.trim(), onClick: submitReject, "data-test": "quote-review-send-reject", children: "Confirm rejection" })] }) })] })] }));
17195
17195
  };
17196
17196
  QuoteReviewActions.displayName = 'QuoteReviewActions';
17197
17197
 
@@ -17212,7 +17212,7 @@ const summaryStyle$4 = {
17212
17212
  background: 'var(--color-white, #fff)',
17213
17213
  boxShadow: '0 1px 3px rgb(0 0 0 / 5%)',
17214
17214
  };
17215
- const titleStyle$m = {
17215
+ const titleStyle$n = {
17216
17216
  label: 'RequestSummary-titleStyle',
17217
17217
  fontSize: 18,
17218
17218
  fontWeight: 600,
@@ -17330,7 +17330,7 @@ const RequestSummary = ({ sections, values, enabledSections = {}, submissionInfo
17330
17330
  const visibleSections = sections.filter(section => enabledSections[section.key] !== false);
17331
17331
  const populatedSections = visibleSections.filter((section) => (section.items?.some((item) => hasDisplayValue(resolveItemValue(item, values, `${section.key}_${item.label}`)))
17332
17332
  || section.segments?.some((segment) => segment.items.some((item) => (hasDisplayValue(resolveItemValue(item, values, `${section.key}_${segment.label}_${item.label}`)))))));
17333
- return (jsxs("div", { className: cx(sx(summaryStyle$4), className), "data-test": dataTest, children: [jsx("h2", { className: sx(titleStyle$m), children: title }), submissionInfo && (jsxs("div", { className: sx(submissionInfoStyle), children: [jsx("span", { className: sx(labelStyle$3), children: "Submitted by" }), jsx("span", { className: sx(valueStyle), children: submissionInfo.submittedBy }), jsx("span", { className: sx(labelStyle$3), children: "on" }), jsx("span", { className: sx(valueStyle), children: submissionInfo.submittedOn })] })), jsx("div", { className: sx(sectionsStyle$1), children: populatedSections.map((section) => (jsx(SummarySection, { section: section, values: values }, section.key))) }), populatedSections.length === 0 && (jsx("p", { className: sx(emptyStyle$9), children: "No services selected" }))] }));
17333
+ return (jsxs("div", { className: cx(sx(summaryStyle$4), className), "data-test": dataTest, children: [jsx("h2", { className: sx(titleStyle$n), children: title }), submissionInfo && (jsxs("div", { className: sx(submissionInfoStyle), children: [jsx("span", { className: sx(labelStyle$3), children: "Submitted by" }), jsx("span", { className: sx(valueStyle), children: submissionInfo.submittedBy }), jsx("span", { className: sx(labelStyle$3), children: "on" }), jsx("span", { className: sx(valueStyle), children: submissionInfo.submittedOn })] })), jsx("div", { className: sx(sectionsStyle$1), children: populatedSections.map((section) => (jsx(SummarySection, { section: section, values: values }, section.key))) }), populatedSections.length === 0 && (jsx("p", { className: sx(emptyStyle$9), children: "No services selected" }))] }));
17334
17334
  };
17335
17335
  RequestSummary.displayName = 'RequestSummary';
17336
17336
 
@@ -18248,14 +18248,14 @@ const selectedStyle = {
18248
18248
  fontWeight: 500,
18249
18249
  },
18250
18250
  };
18251
- const nameStyle$1 = {
18251
+ const nameStyle$2 = {
18252
18252
  label: 'SingleTeamPanelSelector-nameStyle',
18253
18253
  overflow: 'hidden',
18254
18254
  textOverflow: 'ellipsis',
18255
18255
  whiteSpace: 'nowrap',
18256
18256
  };
18257
18257
  /* The sport code, held a step back from the name. */
18258
- const codeStyle$1 = {
18258
+ const codeStyle$2 = {
18259
18259
  label: 'SingleTeamPanelSelector-codeStyle',
18260
18260
  flex: '0 0 auto',
18261
18261
  color: 'var(--color-slate, #5c5c5c)',
@@ -18287,7 +18287,7 @@ const SingleTeamPanelSelector = ({ categories, activeCategoryKey, defaultCategor
18287
18287
  setInternalKey(key);
18288
18288
  onCategoryChange?.(key);
18289
18289
  };
18290
- return (jsxs("div", { className: cx(sx(panelStyle$3), className), role: "dialog", "aria-label": "Book team travel", "data-test": "single-team-panel-selector", ...props, children: [jsx("div", { className: sx(tabsStyle$7), children: jsx(Segment, { options: options, value: activeCategory?.key ?? '', onChange: changeCategory, fullWidth: true, "aria-label": tabsLabel }) }), jsx("div", { className: sx(listStyle$2), role: "listbox", "aria-label": activeCategory ? `${activeCategory.label} teams` : 'Teams', children: activeCategory && activeCategory.teams.length > 0 ? (activeCategory.teams.map((team) => (jsxs("button", { type: "button", role: "option", "aria-selected": team.id === selectedTeamId, className: cx(sx(itemStyle), team.id === selectedTeamId && sx(selectedStyle)), onClick: () => onSelectTeam?.(team, activeCategory), "data-test": `single-team-panel-selector-option-${team.id}`, children: [jsx("span", { className: sx(nameStyle$1), children: team.name }), jsxs("span", { className: sx(codeStyle$1), children: ["(", team.code, ")"] })] }, team.id)))) : (jsx("p", { className: sx(emptyStyle$8), role: "status", children: emptyMessage })) })] }));
18290
+ return (jsxs("div", { className: cx(sx(panelStyle$3), className), role: "dialog", "aria-label": "Book team travel", "data-test": "single-team-panel-selector", ...props, children: [jsx("div", { className: sx(tabsStyle$7), children: jsx(Segment, { options: options, value: activeCategory?.key ?? '', onChange: changeCategory, fullWidth: true, "aria-label": tabsLabel }) }), jsx("div", { className: sx(listStyle$2), role: "listbox", "aria-label": activeCategory ? `${activeCategory.label} teams` : 'Teams', children: activeCategory && activeCategory.teams.length > 0 ? (activeCategory.teams.map((team) => (jsxs("button", { type: "button", role: "option", "aria-selected": team.id === selectedTeamId, className: cx(sx(itemStyle), team.id === selectedTeamId && sx(selectedStyle)), onClick: () => onSelectTeam?.(team, activeCategory), "data-test": `single-team-panel-selector-option-${team.id}`, children: [jsx("span", { className: sx(nameStyle$2), children: team.name }), jsxs("span", { className: sx(codeStyle$2), children: ["(", team.code, ")"] })] }, team.id)))) : (jsx("p", { className: sx(emptyStyle$8), role: "status", children: emptyMessage })) })] }));
18291
18291
  };
18292
18292
 
18293
18293
  /**
@@ -18304,7 +18304,7 @@ const queueStyle = {
18304
18304
  flexDirection: 'column',
18305
18305
  gap: 'var(--space-3)',
18306
18306
  };
18307
- const toolbarStyle$2 = {
18307
+ const toolbarStyle$3 = {
18308
18308
  label: 'SourcingReviewQueueTable-toolbarStyle',
18309
18309
  display: 'flex',
18310
18310
  flexWrap: 'wrap',
@@ -18520,7 +18520,7 @@ const SourcingReviewQueueTable = ({ quotes, selectedQuoteIds, onSelectionChange,
18520
18520
  render: (_value, quote) => jsx(StatusBadge, { status: quote.status }),
18521
18521
  },
18522
18522
  ];
18523
- return (jsxs("div", { className: cx(sx(queueStyle), className), "data-test": "sourcing-review-queue", children: [jsxs("div", { className: sx(toolbarStyle$2), children: [!hideFilters && (jsxs("div", { className: sx(filtersStyle$3), children: [jsx(Input, { size: "sm", type: "search", "aria-label": "Search quotes", placeholder: "Search carrier, trip, or school", leftIcon: jsx(SearchIcon$1, { size: 16 }), value: searchTerm, onChange: (event) => {
18523
+ return (jsxs("div", { className: cx(sx(queueStyle), className), "data-test": "sourcing-review-queue", children: [jsxs("div", { className: sx(toolbarStyle$3), children: [!hideFilters && (jsxs("div", { className: sx(filtersStyle$3), children: [jsx(Input, { size: "sm", type: "search", "aria-label": "Search quotes", placeholder: "Search carrier, trip, or school", leftIcon: jsx(SearchIcon$1, { size: 16 }), value: searchTerm, onChange: (event) => {
18524
18524
  setSearchTerm(event.target.value);
18525
18525
  setPage(1);
18526
18526
  }, "data-test": "sourcing-queue-search" }), jsxs("label", { className: sx(statusFilterStyle), children: [jsx("span", { className: sx(statusFilterLabelStyle), children: "Status" }), jsx("select", { value: statusFilter, onChange: (event) => {
@@ -18548,7 +18548,7 @@ const SourcingReviewQueueTable = ({ quotes, selectedQuoteIds, onSelectionChange,
18548
18548
  * - `.teamItem:hover .chevron` names two generated classes, so the chevron's
18549
18549
  * name is resolved here and used as a computed key.
18550
18550
  */
18551
- const cardStyle$6 = {
18551
+ const cardStyle$7 = {
18552
18552
  label: 'TeamCard-cardStyle',
18553
18553
  overflow: 'hidden',
18554
18554
  border: '1px solid var(--border-color-dark, #ababab)',
@@ -18569,7 +18569,7 @@ const iconStyle = {
18569
18569
  display: 'flex',
18570
18570
  color: 'var(--color-primary, #005eb8)',
18571
18571
  };
18572
- const titleStyle$l = {
18572
+ const titleStyle$m = {
18573
18573
  label: 'TeamCard-titleStyle',
18574
18574
  margin: 0,
18575
18575
  color: 'var(--color-slate, #5c5c5c)',
@@ -18719,8 +18719,8 @@ const TeamCard = ({ title = 'Administer Teams', icon, teams, onTeamSelect, class
18719
18719
  return teams;
18720
18720
  return teams.filter(team => team.category === activeTab);
18721
18721
  }, [teams, activeTab]);
18722
- const cardClasses = cx(sx(cardStyle$6), className);
18723
- return (jsxs("div", { className: cardClasses, "data-test": "team-card", children: [jsxs("div", { className: sx(headerStyle$r), children: [jsx("span", { className: sx(iconStyle), children: icon || jsx(UsersIcon, {}) }), jsx("h3", { className: sx(titleStyle$l), children: title })] }), jsxs("div", { className: sx(bodyStyle$3), children: [jsx("div", { className: sx(tabsStyle$6), children: TEAM_GROUPS.map(({ label, key }) => (jsx("button", { type: "button", onClick: () => setActiveTab(key), className: cx(sx(tabStyle), activeTab === key && sx(tabActiveStyle)), "data-test": `team-card-filter-${key ?? 'all'}`, children: label }, label))) }), jsxs("div", { className: sx(listStyle$1), children: [filteredTeams.map((team) => (jsxs("button", { type: "button", className: sx(teamItemStyle), "data-test": `team-card-team-${team.id}`, onClick: () => onTeamSelect?.(team), children: [jsx("span", { className: sx(teamCodeStyle$1), style: { backgroundColor: getTeamColor(team.code) }, children: team.code }), jsx("span", { className: sx(teamNameStyle), children: team.description }), jsx("span", { className: sx(chevronStyle$1), children: jsx(ChevronRightIcon, {}) })] }, team.id))), filteredTeams.length === 0 && (jsx("div", { className: sx(emptyStyle$7), children: "No teams found" }))] })] })] }));
18722
+ const cardClasses = cx(sx(cardStyle$7), className);
18723
+ return (jsxs("div", { className: cardClasses, "data-test": "team-card", children: [jsxs("div", { className: sx(headerStyle$r), children: [jsx("span", { className: sx(iconStyle), children: icon || jsx(UsersIcon, {}) }), jsx("h3", { className: sx(titleStyle$m), children: title })] }), jsxs("div", { className: sx(bodyStyle$3), children: [jsx("div", { className: sx(tabsStyle$6), children: TEAM_GROUPS.map(({ label, key }) => (jsx("button", { type: "button", onClick: () => setActiveTab(key), className: cx(sx(tabStyle), activeTab === key && sx(tabActiveStyle)), "data-test": `team-card-filter-${key ?? 'all'}`, children: label }, label))) }), jsxs("div", { className: sx(listStyle$1), children: [filteredTeams.map((team) => (jsxs("button", { type: "button", className: sx(teamItemStyle), "data-test": `team-card-team-${team.id}`, onClick: () => onTeamSelect?.(team), children: [jsx("span", { className: sx(teamCodeStyle$1), style: { backgroundColor: getTeamColor(team.code) }, children: team.code }), jsx("span", { className: sx(teamNameStyle), children: team.description }), jsx("span", { className: sx(chevronStyle$1), children: jsx(ChevronRightIcon, {}) })] }, team.id))), filteredTeams.length === 0 && (jsx("div", { className: sx(emptyStyle$7), children: "No teams found" }))] })] })] }));
18724
18724
  };
18725
18725
  TeamCard.displayName = 'TeamCard';
18726
18726
 
@@ -19120,7 +19120,7 @@ const TeamContactsPanel = ({ contacts, value, onChange, disabled = false, loadin
19120
19120
  };
19121
19121
  TeamContactsPanel.displayName = 'TeamContactsPanel';
19122
19122
 
19123
- const actionsStyle$3 = {
19123
+ const actionsStyle$4 = {
19124
19124
  label: 'TeamScheduleActions-actionsStyle', margin: '16px 0'
19125
19125
  };
19126
19126
  const primaryRowStyle = {
@@ -19209,7 +19209,7 @@ const secondaryRowStyle = {
19209
19209
  };
19210
19210
 
19211
19211
  /** Exact presentational counterpart of Hub's Team Schedule action controls. */
19212
- const TeamScheduleActions = ({ isCompactView, tripCount, seasonLabel, seasonValue, seasonOptions = [], previousSeasonDisabled = false, exportDisabled = false, exporting = false, groupTravelDisabled = false, mergeDisabled = false, unmergeDisabled = false, merging = false, unmerging = false, onViewSchedule, onBack, onPreviousSeason, onNextSeason, onSeasonChange, onExport, onGroupTravelRequest, onMergeEvents, onUnmergeEvents, className = '', }) => (jsxs("div", { className: cx(sx(actionsStyle$3), className), "data-test": "team-schedule-actions", children: [jsxs("div", { className: sx(primaryRowStyle), children: [!isCompactView ? (onViewSchedule && jsx(Button, { "data-test": "team-schedule-view-edit", size: "sm", onClick: onViewSchedule, children: "View/Edit Schedule" })) : (onBack && jsx(Button, { "data-test": "team-schedule-back", size: "sm", onClick: onBack, leftIcon: jsx(ChevronLeftIcon, { size: 14 }), children: "Back" })), jsxs("div", { className: sx(seasonNavigatorStyle), children: [onPreviousSeason && jsx(Button, { "data-test": "team-schedule-previous-season", variant: "secondary", size: "sm", square: true, "aria-label": "Previous Season", disabled: previousSeasonDisabled, onClick: onPreviousSeason, children: jsx(ChevronLeftIcon, { size: 18 }) }), jsxs("div", { className: sx(seasonLabelStyle), children: [jsx("span", { className: sx(seasonValueStyle), children: seasonLabel }), !!seasonOptions.length && onSeasonChange && (jsx("select", { "data-test": "team-schedule-season", "aria-label": "Season", value: seasonValue, onChange: (event) => onSeasonChange(event.target.value), children: seasonOptions.map((option) => jsx("option", { value: option.value, children: option.label }, option.value)) }))] }), onNextSeason && jsx(Button, { "data-test": "team-schedule-next-season", variant: "secondary", size: "sm", square: true, "aria-label": "Next Season", onClick: onNextSeason, children: jsx(ChevronRightIcon$1, { size: 18 }) })] }), onExport && jsx(Button, { "data-test": "team-schedule-export", variant: "outline", size: "sm", loading: exporting, disabled: exportDisabled, rightIcon: jsx(ArrowUpRightIcon, { size: 14 }), onClick: onExport, children: "Export XLS" }), jsxs("span", { className: sx(tripCountStyle), "data-test": "team-schedule-trip-count", children: [tripCount, " trips displayed"] })] }), isCompactView && (onGroupTravelRequest || onMergeEvents || onUnmergeEvents) && (jsxs("div", { className: sx(secondaryRowStyle), children: [onGroupTravelRequest && jsx(Button, { "data-test": "team-schedule-group-travel-request", variant: "outline", size: "sm", disabled: groupTravelDisabled, onClick: onGroupTravelRequest, children: "Group Travel Request" }), onMergeEvents && jsx(Button, { "data-test": "team-schedule-merge-events", variant: "outline", size: "sm", disabled: mergeDisabled, loading: merging, onClick: onMergeEvents, children: "Merge Events" }), onUnmergeEvents && jsx(Button, { "data-test": "team-schedule-unmerge-events", variant: "outline", size: "sm", disabled: unmergeDisabled, loading: unmerging, onClick: onUnmergeEvents, children: "Unmerge Events" })] }))] }));
19212
+ const TeamScheduleActions = ({ isCompactView, tripCount, seasonLabel, seasonValue, seasonOptions = [], previousSeasonDisabled = false, exportDisabled = false, exporting = false, groupTravelDisabled = false, mergeDisabled = false, unmergeDisabled = false, merging = false, unmerging = false, onViewSchedule, onBack, onPreviousSeason, onNextSeason, onSeasonChange, onExport, onGroupTravelRequest, onMergeEvents, onUnmergeEvents, className = '', }) => (jsxs("div", { className: cx(sx(actionsStyle$4), className), "data-test": "team-schedule-actions", children: [jsxs("div", { className: sx(primaryRowStyle), children: [!isCompactView ? (onViewSchedule && jsx(Button, { "data-test": "team-schedule-view-edit", size: "sm", onClick: onViewSchedule, children: "View/Edit Schedule" })) : (onBack && jsx(Button, { "data-test": "team-schedule-back", size: "sm", onClick: onBack, leftIcon: jsx(ChevronLeftIcon, { size: 14 }), children: "Back" })), jsxs("div", { className: sx(seasonNavigatorStyle), children: [onPreviousSeason && jsx(Button, { "data-test": "team-schedule-previous-season", variant: "secondary", size: "sm", square: true, "aria-label": "Previous Season", disabled: previousSeasonDisabled, onClick: onPreviousSeason, children: jsx(ChevronLeftIcon, { size: 18 }) }), jsxs("div", { className: sx(seasonLabelStyle), children: [jsx("span", { className: sx(seasonValueStyle), children: seasonLabel }), !!seasonOptions.length && onSeasonChange && (jsx("select", { "data-test": "team-schedule-season", "aria-label": "Season", value: seasonValue, onChange: (event) => onSeasonChange(event.target.value), children: seasonOptions.map((option) => jsx("option", { value: option.value, children: option.label }, option.value)) }))] }), onNextSeason && jsx(Button, { "data-test": "team-schedule-next-season", variant: "secondary", size: "sm", square: true, "aria-label": "Next Season", onClick: onNextSeason, children: jsx(ChevronRightIcon$1, { size: 18 }) })] }), onExport && jsx(Button, { "data-test": "team-schedule-export", variant: "outline", size: "sm", loading: exporting, disabled: exportDisabled, rightIcon: jsx(ArrowUpRightIcon, { size: 14 }), onClick: onExport, children: "Export XLS" }), jsxs("span", { className: sx(tripCountStyle), "data-test": "team-schedule-trip-count", children: [tripCount, " trips displayed"] })] }), isCompactView && (onGroupTravelRequest || onMergeEvents || onUnmergeEvents) && (jsxs("div", { className: sx(secondaryRowStyle), children: [onGroupTravelRequest && jsx(Button, { "data-test": "team-schedule-group-travel-request", variant: "outline", size: "sm", disabled: groupTravelDisabled, onClick: onGroupTravelRequest, children: "Group Travel Request" }), onMergeEvents && jsx(Button, { "data-test": "team-schedule-merge-events", variant: "outline", size: "sm", disabled: mergeDisabled, loading: merging, onClick: onMergeEvents, children: "Merge Events" }), onUnmergeEvents && jsx(Button, { "data-test": "team-schedule-unmerge-events", variant: "outline", size: "sm", disabled: unmergeDisabled, loading: unmerging, onClick: onUnmergeEvents, children: "Unmerge Events" })] }))] }));
19213
19213
 
19214
19214
  //#region src/FlexRender.tsx
19215
19215
  function isReactComponent(component) {
@@ -26000,7 +26000,7 @@ const addRowStyle = {
26000
26000
  paddingLeft: 0,
26001
26001
  },
26002
26002
  };
26003
- const toolbarStyle$1 = {
26003
+ const toolbarStyle$2 = {
26004
26004
  label: 'TeamScheduleCompactTable-toolbarStyle',
26005
26005
  display: 'flex',
26006
26006
  alignItems: 'center',
@@ -26011,7 +26011,7 @@ const toolbarStyle$1 = {
26011
26011
  flexWrap: 'wrap',
26012
26012
  },
26013
26013
  };
26014
- const searchStyle = {
26014
+ const searchStyle$1 = {
26015
26015
  label: 'TeamScheduleCompactTable-searchStyle',
26016
26016
  display: 'inline-flex',
26017
26017
  alignItems: 'center',
@@ -26430,7 +26430,7 @@ const TeamScheduleCompactTable = ({ data, rows, tripHeaders = DEFAULT_TRIP_HEADE
26430
26430
  return (jsxs("div", {
26431
26431
  // The stylesheet never carried a `.schedule` rule, so this wrapper only
26432
26432
  // ever wore the caller's class.
26433
- className: className, "data-test": "team-schedule-editor", children: [(enableGlobalFilter || enableColumnVisibility) && (jsxs("div", { className: sx(toolbarStyle$1), children: [enableGlobalFilter ? (jsxs("label", { className: sx(searchStyle), children: [jsx(SearchIcon$1, { size: 16 }), jsx("input", { type: "search", value: globalFilter, onChange: (event) => table.setGlobalFilter(event.target.value), placeholder: globalFilterPlaceholder, "aria-label": "Search trips and events", "data-test": "team-schedule-search" })] })) : (jsx("span", {})), enableColumnVisibility && (jsxs("details", { className: sx(columnMenuStyle), "data-test": "team-schedule-column-menu", children: [jsxs("summary", { children: ["Columns ", jsx(ChevronDownIcon$1, { size: 14 })] }), jsx("div", { className: sx(columnMenuListStyle), children: table
26433
+ className: className, "data-test": "team-schedule-editor", children: [(enableGlobalFilter || enableColumnVisibility) && (jsxs("div", { className: sx(toolbarStyle$2), children: [enableGlobalFilter ? (jsxs("label", { className: sx(searchStyle$1), children: [jsx(SearchIcon$1, { size: 16 }), jsx("input", { type: "search", value: globalFilter, onChange: (event) => table.setGlobalFilter(event.target.value), placeholder: globalFilterPlaceholder, "aria-label": "Search trips and events", "data-test": "team-schedule-search" })] })) : (jsx("span", {})), enableColumnVisibility && (jsxs("details", { className: sx(columnMenuStyle), "data-test": "team-schedule-column-menu", children: [jsxs("summary", { children: ["Columns ", jsx(ChevronDownIcon$1, { size: 14 })] }), jsx("div", { className: sx(columnMenuListStyle), children: table
26434
26434
  .getAllLeafColumns()
26435
26435
  .filter((column) => column.getCanHide())
26436
26436
  .map((column) => (jsxs("label", { children: [jsx("input", { type: "checkbox", className: sx(checkboxStyle), checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }), typeof column.columnDef.header === "string" &&
@@ -27016,7 +27016,7 @@ const TeamScheduleEditor = ({ rows, initialRows = [], opponentOptions = [], onCh
27016
27016
  /** The two responsive breakpoints, spelled exactly as the stylesheet had them. */
27017
27017
  const COMPACT = '@media (max-width: 900px)';
27018
27018
  const NARROW = '@media (max-width: 640px)';
27019
- const toolbarStyle = {
27019
+ const toolbarStyle$1 = {
27020
27020
  label: 'TeamTravelCalendarViews-toolbarStyle',
27021
27021
  display: 'flex',
27022
27022
  minWidth: 0,
@@ -27895,7 +27895,7 @@ const sportColor = (sportCode) => {
27895
27895
  * Period controls shared by the calendar views: previous, next, today, and month/week.
27896
27896
  * Stateless -- the host owns the active date and passes the label back in.
27897
27897
  */
27898
- const TeamTravelCalendarToolbar = ({ duration, label = '', navigation, onDurationChange, onToday, onPrevious, onNext, className = '', }) => (jsxs("div", { className: cx(sx(toolbarStyle), className), "data-test": "calendar-toolbar", children: [jsx("button", { type: "button", className: sx(todayButtonStyle), onClick: onToday, "data-test": "calendar-today", children: "Today" }), jsx(SegmentedSelector, { value: duration, size: "sm", ariaLabel: "Calendar duration", onChange: (value) => onDurationChange?.(value), options: [{ id: 'month', label: 'Month' }, { id: 'week', label: 'Week' }] }), navigation ?? (jsxs("div", { className: sx(periodNavigationStyle), children: [jsx("button", { type: "button", className: sx(navigationButtonStyle), "aria-label": `Previous ${duration}`, onClick: onPrevious, children: jsx(ChevronLeft$1, {}) }), jsx("button", { type: "button", className: sx(periodButtonStyle), children: label }), jsx("button", { type: "button", className: sx(navigationButtonStyle), "aria-label": `Next ${duration}`, onClick: onNext, children: jsx(ChevronRight$2, {}) })] }))] }));
27898
+ const TeamTravelCalendarToolbar = ({ duration, label = '', navigation, onDurationChange, onToday, onPrevious, onNext, className = '', }) => (jsxs("div", { className: cx(sx(toolbarStyle$1), className), "data-test": "calendar-toolbar", children: [jsx("button", { type: "button", className: sx(todayButtonStyle), onClick: onToday, "data-test": "calendar-today", children: "Today" }), jsx(SegmentedSelector, { value: duration, size: "sm", ariaLabel: "Calendar duration", onChange: (value) => onDurationChange?.(value), options: [{ id: 'month', label: 'Month' }, { id: 'week', label: 'Week' }] }), navigation ?? (jsxs("div", { className: sx(periodNavigationStyle), children: [jsx("button", { type: "button", className: sx(navigationButtonStyle), "aria-label": `Previous ${duration}`, onClick: onPrevious, children: jsx(ChevronLeft$1, {}) }), jsx("button", { type: "button", className: sx(periodButtonStyle), children: label }), jsx("button", { type: "button", className: sx(navigationButtonStyle), "aria-label": `Next ${duration}`, onClick: onNext, children: jsx(ChevronRight$2, {}) })] }))] }));
27899
27899
  const getVisibleDates = (activeDate, duration) => {
27900
27900
  const active = parseDate(activeDate);
27901
27901
  if (duration === 'week') {
@@ -28040,7 +28040,7 @@ const moveTeamTravelCalendarPeriod = (activeDate, duration, amount) => {
28040
28040
  * later. Injected classes tie there, so the winner would be whichever object was
28041
28041
  * injected first. Doubling the selector on the override restores the ranking.
28042
28042
  */
28043
- const formStyle$4 = {
28043
+ const formStyle$5 = {
28044
28044
  label: 'TeamManagementForms-formStyle',
28045
28045
  display: 'flex',
28046
28046
  flexDirection: 'column',
@@ -28072,7 +28072,7 @@ const threeColumnGridStyle = {
28072
28072
  gridTemplateColumns: 'repeat(3, minmax(0, 1fr))',
28073
28073
  },
28074
28074
  };
28075
- const actionsStyle$2 = {
28075
+ const actionsStyle$3 = {
28076
28076
  label: 'TeamManagementForms-actionsStyle',
28077
28077
  display: 'flex',
28078
28078
  justifyContent: 'flex-end',
@@ -28243,10 +28243,10 @@ const useManagedValues = (controlledValues, initialValues, onChange) => {
28243
28243
  };
28244
28244
  const numericValue$1 = (value) => value === '' ? '' : Number(value);
28245
28245
  const FormShell = ({ ariaLabel, children, className = '', disabled = false, onCancel, onSubmit, showActions = true, values, }) => {
28246
- const content = (jsxs(Fragment, { children: [children, showActions && (jsxs("div", { className: sx(actionsStyle$2), children: [jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsx(Button, { type: "submit", disabled: disabled, children: "Save" })] }))] }));
28246
+ const content = (jsxs(Fragment, { children: [children, showActions && (jsxs("div", { className: sx(actionsStyle$3), children: [jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsx(Button, { type: "submit", disabled: disabled, children: "Save" })] }))] }));
28247
28247
  if (!showActions)
28248
- return jsx("div", { className: cx(sx(formStyle$4), className), children: content });
28249
- return (jsx("form", { "aria-label": ariaLabel, className: cx(sx(formStyle$4), className), onSubmit: (event) => {
28248
+ return jsx("div", { className: cx(sx(formStyle$5), className), children: content });
28249
+ return (jsx("form", { "aria-label": ariaLabel, className: cx(sx(formStyle$5), className), onSubmit: (event) => {
28250
28250
  event.preventDefault();
28251
28251
  onSubmit?.(values);
28252
28252
  }, children: content }));
@@ -28400,11 +28400,11 @@ const IMPORT_COPY = {
28400
28400
  const TeamImportForm = ({ kind, onSubmit, onCancel, disabled = false, className = '' }) => {
28401
28401
  const [file, setFile] = useState(null);
28402
28402
  const copy = IMPORT_COPY[kind];
28403
- return (jsxs("form", { "aria-label": `Import ${kind}`, className: cx(sx(formStyle$4), className), onSubmit: (event) => {
28403
+ return (jsxs("form", { "aria-label": `Import ${kind}`, className: cx(sx(formStyle$5), className), onSubmit: (event) => {
28404
28404
  event.preventDefault();
28405
28405
  if (file)
28406
28406
  onSubmit?.(file);
28407
- }, children: [jsx("ol", { className: sx(instructionsStyle), children: copy.instructions.map((instruction, index) => jsxs("li", { children: [index + 1, ". ", instruction] }, instruction)) }), jsx("a", { className: sx(sampleLinkStyle), href: `/${copy.sample}`, download: true, children: copy.sample }), jsxs("label", { className: sx(fileFieldStyle), children: [jsx(UploadIcon, { size: 24 }), jsx("span", { children: file?.name ?? 'Choose an Excel spreadsheet' }), jsx("input", { "aria-label": "Spreadsheet file", type: "file", accept: ".xlsx,.xls", onChange: (event) => setFile(event.target.files?.[0] ?? null), required: true, disabled: disabled })] }), jsxs("div", { className: sx(actionsStyle$2), children: [jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsx(Button, { type: "submit", disabled: disabled || !file, children: "Import" })] })] }));
28407
+ }, children: [jsx("ol", { className: sx(instructionsStyle), children: copy.instructions.map((instruction, index) => jsxs("li", { children: [index + 1, ". ", instruction] }, instruction)) }), jsx("a", { className: sx(sampleLinkStyle), href: `/${copy.sample}`, download: true, children: copy.sample }), jsxs("label", { className: sx(fileFieldStyle), children: [jsx(UploadIcon, { size: 24 }), jsx("span", { children: file?.name ?? 'Choose an Excel spreadsheet' }), jsx("input", { "aria-label": "Spreadsheet file", type: "file", accept: ".xlsx,.xls", onChange: (event) => setFile(event.target.files?.[0] ?? null), required: true, disabled: disabled })] }), jsxs("div", { className: sx(actionsStyle$3), children: [jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsx(Button, { type: "submit", disabled: disabled || !file, children: "Import" })] })] }));
28408
28408
  };
28409
28409
 
28410
28410
  /**
@@ -28458,7 +28458,7 @@ const TravelSummaryMetrics = ({ tripsTraveled, remainingTrips, seasonTripCosts,
28458
28458
  };
28459
28459
 
28460
28460
  /** The form column: header, content/sections and footer stacked with one gap. */
28461
- const formStyle$3 = {
28461
+ const formStyle$4 = {
28462
28462
  label: 'TravelerForm-formStyle',
28463
28463
  display: 'flex',
28464
28464
  flexDirection: 'column',
@@ -28486,7 +28486,7 @@ const headerStyle$p = {
28486
28486
  flexDirection: 'column',
28487
28487
  gap: 'var(--space-1)',
28488
28488
  };
28489
- const titleStyle$k = {
28489
+ const titleStyle$l = {
28490
28490
  label: 'TravelerForm-titleStyle',
28491
28491
  fontSize: 'var(--text-lg)',
28492
28492
  fontWeight: 'var(--font-semibold)',
@@ -28549,11 +28549,84 @@ const footerStyle$2 = {
28549
28549
  * TravelerForm - Form layout for editing traveler/roster member details
28550
28550
  */
28551
28551
  const TravelerForm = ({ values = {}, title, subtitle, children, renderNameSection, renderDetailsSection, renderPreferencesSection, footer, isLoading = false, className = '', }) => {
28552
- const formClasses = cx(sx(formStyle$3), isLoading && sx(loadingStyle$1), className);
28553
- return (jsxs("div", { className: formClasses, children: [(title || subtitle) && (jsxs("div", { className: sx(headerStyle$p), children: [title && jsx("h2", { className: sx(titleStyle$k), children: title }), subtitle && jsx("p", { className: sx(subtitleStyle$5), children: subtitle })] })), children ? (jsx("div", { className: sx(contentStyle$4), children: children })) : (jsxs("div", { className: sx(sectionsStyle), children: [renderNameSection && (jsxs("div", { className: sx(sectionStyle$4), children: [jsx("h3", { className: sx(sectionTitleStyle$8), children: "Name" }), jsx("div", { className: sx(sectionContentStyle), children: renderNameSection(values) })] })), renderDetailsSection && (jsxs("div", { className: sx(sectionStyle$4), children: [jsx("h3", { className: sx(sectionTitleStyle$8), children: "Details" }), jsx("div", { className: sx(sectionContentStyle), children: renderDetailsSection(values) })] })), renderPreferencesSection && (jsxs("div", { className: sx(sectionStyle$4), children: [jsx("h3", { className: sx(sectionTitleStyle$8), children: "Travel Preferences" }), jsx("div", { className: sx(sectionContentStyle), children: renderPreferencesSection(values) })] }))] })), footer && (jsx("div", { className: sx(footerStyle$2), children: footer }))] }));
28552
+ const formClasses = cx(sx(formStyle$4), isLoading && sx(loadingStyle$1), className);
28553
+ return (jsxs("div", { className: formClasses, children: [(title || subtitle) && (jsxs("div", { className: sx(headerStyle$p), children: [title && jsx("h2", { className: sx(titleStyle$l), children: title }), subtitle && jsx("p", { className: sx(subtitleStyle$5), children: subtitle })] })), children ? (jsx("div", { className: sx(contentStyle$4), children: children })) : (jsxs("div", { className: sx(sectionsStyle), children: [renderNameSection && (jsxs("div", { className: sx(sectionStyle$4), children: [jsx("h3", { className: sx(sectionTitleStyle$8), children: "Name" }), jsx("div", { className: sx(sectionContentStyle), children: renderNameSection(values) })] })), renderDetailsSection && (jsxs("div", { className: sx(sectionStyle$4), children: [jsx("h3", { className: sx(sectionTitleStyle$8), children: "Details" }), jsx("div", { className: sx(sectionContentStyle), children: renderDetailsSection(values) })] })), renderPreferencesSection && (jsxs("div", { className: sx(sectionStyle$4), children: [jsx("h3", { className: sx(sectionTitleStyle$8), children: "Travel Preferences" }), jsx("div", { className: sx(sectionContentStyle), children: renderPreferencesSection(values) })] }))] })), footer && (jsx("div", { className: sx(footerStyle$2), children: footer }))] }));
28554
28554
  };
28555
28555
  TravelerForm.displayName = 'TravelerForm';
28556
28556
 
28557
+ const formStyle$3 = {
28558
+ label: 'ViHeaderForm-formStyle',
28559
+ display: 'flex',
28560
+ flexDirection: 'column',
28561
+ gap: 'var(--space-6)',
28562
+ fontFamily: 'var(--font-family-base)',
28563
+ color: 'var(--fg-1)',
28564
+ };
28565
+ const noteStyle$2 = {
28566
+ label: 'ViHeaderForm-noteStyle',
28567
+ margin: 0,
28568
+ fontSize: 'var(--fs-sm)',
28569
+ color: 'var(--fg-3)',
28570
+ lineHeight: 1.5,
28571
+ };
28572
+ const eyebrowNoteStyle = {
28573
+ label: 'ViHeaderForm-eyebrowNoteStyle',
28574
+ margin: 0,
28575
+ padding: 'var(--space-2) var(--space-3)',
28576
+ borderLeft: '3px solid var(--color-accent-ink)',
28577
+ background: 'var(--bg-subtle)',
28578
+ borderRadius: 'var(--radius-md)',
28579
+ fontSize: 'var(--fs-sm)',
28580
+ color: 'var(--fg-2)',
28581
+ };
28582
+ const errorStyle$1 = {
28583
+ label: 'ViHeaderForm-errorStyle',
28584
+ margin: 0,
28585
+ fontSize: 'var(--fs-sm)',
28586
+ fontWeight: 'var(--fw-medium)',
28587
+ color: 'var(--color-error)',
28588
+ };
28589
+ const actionsStyle$2 = {
28590
+ label: 'ViHeaderForm-actionsStyle',
28591
+ display: 'flex',
28592
+ justifyContent: 'flex-end',
28593
+ gap: 'var(--space-3)',
28594
+ paddingTop: 'var(--space-4)',
28595
+ borderTop: '1px solid var(--border-color)',
28596
+ };
28597
+
28598
+ /**
28599
+ * Editor for a virtual-invoice header: who the invoice comes from, how to reach
28600
+ * them, and the survey and message that go with it. An account or a branch is
28601
+ * required, and a branch header wins over its account's.
28602
+ */
28603
+ const ViHeaderForm = ({ value, onSave, onCancel, saveLabel = 'Save header', className = '', }) => {
28604
+ const [draft, setDraft] = useState(value);
28605
+ const [error, setError] = useState('');
28606
+ const field = (key, label, extra = {}) => (jsx(FormField, { label: label, inputProps: {
28607
+ value: draft[key],
28608
+ onChange: (e) => setDraft({ ...draft, [key]: e.target.value }),
28609
+ 'data-test': `vi-header-${String(key).replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`)}`,
28610
+ ...extra,
28611
+ } }));
28612
+ const handleSubmit = (e) => {
28613
+ e.preventDefault();
28614
+ if (!draft.accountId.trim() && !draft.branch.trim()) {
28615
+ setError('Enter an Account ID or a Branch.');
28616
+ return;
28617
+ }
28618
+ setError('');
28619
+ onSave?.(draft);
28620
+ };
28621
+ return (jsxs("form", { className: cx(sx(formStyle$3), className), onSubmit: handleSubmit, noValidate: true, children: [jsx("p", { className: sx(eyebrowNoteStyle), children: "Enter an Account OR a Branch. The header configured for a branch takes precedence." }), jsxs(FormSection, { title: "Applies to", children: [jsxs(FormRow, { columns: 2, stackOnMobile: false, children: [field('accountId', 'Account ID'), field('branch', 'Branch')] }), error && (jsx("p", { className: sx(errorStyle$1), role: "alert", children: error }))] }), jsxs(FormSection, { title: "Company & contact", children: [field('companyName', 'Company name'), field('address', 'Address'), jsxs(FormRow, { columns: 3, stackOnMobile: false, children: [field('city', 'City'), field('state', 'State'), field('zipCode', 'Zip code')] }), jsxs(FormRow, { columns: 2, stackOnMobile: false, children: [field('phone', 'Phone number'), field('tollFree', 'Toll-free number'), field('afterHoursPhone', 'After-hours phone'), field('fax', 'Fax number')] })] }), jsxs(FormSection, { title: "Web & hours", children: [field('defaultWebsite', 'Default website'), jsx("p", { className: sx(noteStyle$2), children: "For headers configured by branch, the client\u2019s Portal Redirector is used instead." }), field('email', 'Email address'), field('hoursOfOperation', 'Hours of operation')] }), jsxs(FormSection, { title: "Survey Sparrow", children: [field('agentSurveyEndpoint', 'Agent survey API endpoint'), field('onlineSurveyEndpoint', 'Online survey API endpoint'), jsx(FormRow, { columns: 3, stackOnMobile: false, children: field('surveyDelayDays', 'Survey delay (days)', { type: 'number', min: 0 }) })] }), jsx(FormSection, { title: "Invoice message", children: jsx(FormField, { label: "Description", helperText: "Printed on the invoice. Paste one line at a time.", as: "textarea", textareaProps: {
28622
+ value: draft.description,
28623
+ rows: 5,
28624
+ onChange: (e) => setDraft({ ...draft, description: e.target.value }),
28625
+ 'data-test': 'vi-header-description',
28626
+ } }) }), jsxs("div", { className: sx(actionsStyle$2), children: [jsx(Button, { type: "button", variant: "outline", onClick: onCancel, "data-test": "vi-header-cancel", children: "Cancel" }), jsx(Button, { type: "submit", variant: "primary", "data-test": "vi-header-save", children: saveLabel })] })] }));
28627
+ };
28628
+ ViHeaderForm.displayName = 'ViHeaderForm';
28629
+
28557
28630
  /**
28558
28631
  * TripTable's compiled rules.
28559
28632
  *
@@ -28888,7 +28961,7 @@ const TripTable = ({ trips, variant = 'current', density = 'comfortable', vendor
28888
28961
  * `.card:hover .chevron`), so the icon and the chevron are declared first and
28889
28962
  * their generated class names resolved into `cardStyle` as computed keys.
28890
28963
  */
28891
- const pageStyle$t = {
28964
+ const pageStyle$u = {
28892
28965
  label: 'AdministrationPage-pageStyle',
28893
28966
  color: 'var(--color-ink)',
28894
28967
  };
@@ -28943,7 +29016,7 @@ const chevronStyle = {
28943
29016
  flex: '0 0 auto',
28944
29017
  color: 'var(--border-color-dark)',
28945
29018
  };
28946
- const cardStyle$5 = {
29019
+ const cardStyle$6 = {
28947
29020
  label: 'AdministrationPage-cardStyle',
28948
29021
  display: 'flex',
28949
29022
  alignItems: 'center',
@@ -29025,10 +29098,10 @@ const AdministrationPage = ({ activeTab = 'system', enabledTabs = ADMINISTRATION
29025
29098
  const resolvedActiveTab = visibleTabs.some((tab) => tab.key === activeTab)
29026
29099
  ? activeTab
29027
29100
  : visibleTabs[0]?.key;
29028
- return jsxs("div", { className: cx(sx(pageStyle$t), className), children: [jsx("header", { className: sx(headerStyle$n), children: jsx("h1", { children: "Administration\u00A0" }) }), visibleTabs.length > 0 && (jsx(TabStrip, { className: sx(tabsStyle$5), tabs: visibleTabs.map((tab) => ({ id: tab.key, label: tab.label })), activeTab: resolvedActiveTab, onTabChange: (id) => onTabChange?.(id), "aria-label": "Administration sections" })), children ?? (resolvedActiveTab === 'system' ? (jsx("div", { className: sx(cardsStyle$1), children: resolvedCards.map((card) => (jsxs("button", { type: "button", className: sx(cardStyle$5), onClick: () => onCardClick?.(card), children: [jsx("span", { className: sx(cardIconStyle$1), children: card.icon }), jsxs("span", { className: sx(cardCopyStyle), children: [jsx("span", { className: sx(cardTitleStyle$2), children: card.title }), jsx("span", { className: sx(cardDescriptionStyle$1), children: card.description })] }), jsx(ChevronRightIcon$1, { className: sx(chevronStyle), size: 14 })] }, card.key))) })) : resolvedActiveTab === 'client' ? (jsx("p", { className: sx(comingSoonStyle), children: "Client administration settings coming soon." })) : (jsx("p", { className: sx(comingSoonStyle), "data-test": "administration-empty-tabs", children: "No administration sections are available." })))] });
29101
+ return jsxs("div", { className: cx(sx(pageStyle$u), className), children: [jsx("header", { className: sx(headerStyle$n), children: jsx("h1", { children: "Administration\u00A0" }) }), visibleTabs.length > 0 && (jsx(TabStrip, { className: sx(tabsStyle$5), tabs: visibleTabs.map((tab) => ({ id: tab.key, label: tab.label })), activeTab: resolvedActiveTab, onTabChange: (id) => onTabChange?.(id), "aria-label": "Administration sections" })), children ?? (resolvedActiveTab === 'system' ? (jsx("div", { className: sx(cardsStyle$1), children: resolvedCards.map((card) => (jsxs("button", { type: "button", className: sx(cardStyle$6), onClick: () => onCardClick?.(card), children: [jsx("span", { className: sx(cardIconStyle$1), children: card.icon }), jsxs("span", { className: sx(cardCopyStyle), children: [jsx("span", { className: sx(cardTitleStyle$2), children: card.title }), jsx("span", { className: sx(cardDescriptionStyle$1), children: card.description })] }), jsx(ChevronRightIcon$1, { className: sx(chevronStyle), size: 14 })] }, card.key))) })) : resolvedActiveTab === 'client' ? (jsx("p", { className: sx(comingSoonStyle), children: "Client administration settings coming soon." })) : (jsx("p", { className: sx(comingSoonStyle), "data-test": "administration-empty-tabs", children: "No administration sections are available." })))] });
29029
29102
  };
29030
29103
 
29031
- const pageStyle$s = {
29104
+ const pageStyle$t = {
29032
29105
  label: 'AgentGroupTravelRequestsPage-pageStyle',
29033
29106
  display: 'flex',
29034
29107
  flexDirection: 'column',
@@ -29044,7 +29117,7 @@ const breadcrumbStyle$9 = {
29044
29117
  alignSelf: 'flex-start',
29045
29118
  paddingLeft: '0 !important',
29046
29119
  };
29047
- const titleStyle$j = {
29120
+ const titleStyle$k = {
29048
29121
  label: 'AgentGroupTravelRequestsPage-titleStyle',
29049
29122
  margin: 0,
29050
29123
  color: 'var(--fg-1)',
@@ -29065,12 +29138,12 @@ const quickLinksStyle = {
29065
29138
  };
29066
29139
 
29067
29140
  /** Hub's agent-facing Group Travel Request screen — the "Book a Trip" quick links plus the open-requests list. */
29068
- const AgentGroupTravelRequestsPage = ({ title = 'Group Travel Request', requests, sports, views, today, isStmEmployee = true, onBackToBookATrip, onSubmitNewRequest, onSubmitAgentRequest, onSearchPastRequests, onShowCdsRequests, onShowActionableItems, onAdministerViews, onOpenRequest, onViewMasterTrip, onDeleteRequest, onCopyPnr, onToggleDueStatus, onSubmittedDateChange, onQuoteSentDateChange, className = '', }) => (jsxs("div", { className: cx(sx(pageStyle$s), className), "data-test": "agent-gtr-page", children: [jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$9), onClick: onBackToBookATrip, children: "Book a Trip" }), jsx("h1", { className: sx(titleStyle$j), children: title }), jsxs("ul", { className: sx(quickLinksStyle), children: [jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onSubmitNewRequest, children: "Submit a new group travel request" }) }), isStmEmployee && (jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onSubmitAgentRequest, children: "Submit a new group travel request (agent use only)" }) })), jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onSearchPastRequests, children: "Search past travel requests/Non-agent-only requests" }) }), isStmEmployee && (jsxs(Fragment, { children: [jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onShowCdsRequests, children: "Show all open CDS group travel requests" }) }), jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onShowActionableItems, children: "Show this week's actionable items" }) }), jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onAdministerViews, children: "Administer your views" }) })] }))] }), jsx(AgentGroupTravelRequestsTable, { requests: requests, sports: sports, views: views, today: today, onOpenRequest: onOpenRequest, onViewMasterTrip: onViewMasterTrip, onDeleteRequest: onDeleteRequest, onCopyPnr: onCopyPnr, onToggleDueStatus: onToggleDueStatus, onSubmittedDateChange: onSubmittedDateChange, onQuoteSentDateChange: onQuoteSentDateChange })] }));
29141
+ const AgentGroupTravelRequestsPage = ({ title = 'Group Travel Request', requests, sports, views, today, isStmEmployee = true, onBackToBookATrip, onSubmitNewRequest, onSubmitAgentRequest, onSearchPastRequests, onShowCdsRequests, onShowActionableItems, onAdministerViews, onOpenRequest, onViewMasterTrip, onDeleteRequest, onCopyPnr, onToggleDueStatus, onSubmittedDateChange, onQuoteSentDateChange, className = '', }) => (jsxs("div", { className: cx(sx(pageStyle$t), className), "data-test": "agent-gtr-page", children: [jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$9), onClick: onBackToBookATrip, children: "Book a Trip" }), jsx("h1", { className: sx(titleStyle$k), children: title }), jsxs("ul", { className: sx(quickLinksStyle), children: [jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onSubmitNewRequest, children: "Submit a new group travel request" }) }), isStmEmployee && (jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onSubmitAgentRequest, children: "Submit a new group travel request (agent use only)" }) })), jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onSearchPastRequests, children: "Search past travel requests/Non-agent-only requests" }) }), isStmEmployee && (jsxs(Fragment, { children: [jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onShowCdsRequests, children: "Show all open CDS group travel requests" }) }), jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onShowActionableItems, children: "Show this week's actionable items" }) }), jsx("li", { children: jsx(Button, { variant: "ghost", onClick: onAdministerViews, children: "Administer your views" }) })] }))] }), jsx(AgentGroupTravelRequestsTable, { requests: requests, sports: sports, views: views, today: today, onOpenRequest: onOpenRequest, onViewMasterTrip: onViewMasterTrip, onDeleteRequest: onDeleteRequest, onCopyPnr: onCopyPnr, onToggleDueStatus: onToggleDueStatus, onSubmittedDateChange: onSubmittedDateChange, onQuoteSentDateChange: onQuoteSentDateChange })] }));
29069
29142
 
29070
29143
  /** CarrierProfilePage's compiled rules. A straight translation: the only
29071
29144
  * overrides are the mobile media query, which is nested into the two styles
29072
29145
  * it repadded, and an at-rule always outranks the declaration beside it. */
29073
- const pageStyle$r = {
29146
+ const pageStyle$s = {
29074
29147
  label: 'CarrierProfilePage-pageStyle',
29075
29148
  display: 'flex',
29076
29149
  flexDirection: 'column',
@@ -29091,7 +29164,7 @@ const headerStyle$m = {
29091
29164
  flexDirection: 'column',
29092
29165
  gap: 'var(--space-1)',
29093
29166
  };
29094
- const titleStyle$i = {
29167
+ const titleStyle$j = {
29095
29168
  label: 'CarrierProfilePage-titleStyle',
29096
29169
  margin: 0,
29097
29170
  color: 'var(--fg-1)',
@@ -29157,7 +29230,7 @@ const formStyle$2 = {
29157
29230
  const saveStyle = {
29158
29231
  label: 'CarrierProfilePage-saveStyle', alignSelf: 'flex-start'
29159
29232
  };
29160
- const rowActionsStyle = {
29233
+ const rowActionsStyle$1 = {
29161
29234
  label: 'CarrierProfilePage-rowActionsStyle',
29162
29235
  display: 'inline-flex',
29163
29236
  gap: 'var(--space-1)',
@@ -29289,7 +29362,7 @@ const CarrierProfilePage = ({ carrierName, preferences: initialPreferences, cate
29289
29362
  key: 'contactId',
29290
29363
  label: 'Actions',
29291
29364
  align: 'right',
29292
- render: (_value, contact) => (jsxs("span", { className: sx(rowActionsStyle), children: [canEditContacts && (jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${contact.name}`, onClick: () => onEditContact?.(contact.contactId), "data-test": "carrier-contact-edit", children: jsx(EditIcon$2, { size: 16 }) })), canDeleteContacts && (jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${contact.name}`, onClick: () => onDeleteContact?.(contact.contactId), "data-test": "carrier-contact-delete", children: jsx(TrashIcon$2, { size: 16 }) }))] })),
29365
+ render: (_value, contact) => (jsxs("span", { className: sx(rowActionsStyle$1), children: [canEditContacts && (jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${contact.name}`, onClick: () => onEditContact?.(contact.contactId), "data-test": "carrier-contact-edit", children: jsx(EditIcon$2, { size: 16 }) })), canDeleteContacts && (jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${contact.name}`, onClick: () => onDeleteContact?.(contact.contactId), "data-test": "carrier-contact-delete", children: jsx(TrashIcon$2, { size: 16 }) }))] })),
29293
29366
  }] : []),
29294
29367
  ];
29295
29368
  const aircraftColumns = [
@@ -29318,15 +29391,15 @@ const CarrierProfilePage = ({ carrierName, preferences: initialPreferences, cate
29318
29391
  key: 'aircraftId',
29319
29392
  label: 'Actions',
29320
29393
  align: 'right',
29321
- render: (_value, item) => (jsxs("span", { className: sx(rowActionsStyle), children: [canEditAircraft && (jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${item.name}`, onClick: () => onEditAircraft?.(item.aircraftId), "data-test": "carrier-aircraft-edit", children: jsx(EditIcon$2, { size: 16 }) })), canDeleteAircraft && (jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${item.name}`, onClick: () => onDeleteAircraft?.(item.aircraftId), "data-test": "carrier-aircraft-delete", children: jsx(TrashIcon$2, { size: 16 }) }))] })),
29394
+ render: (_value, item) => (jsxs("span", { className: sx(rowActionsStyle$1), children: [canEditAircraft && (jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${item.name}`, onClick: () => onEditAircraft?.(item.aircraftId), "data-test": "carrier-aircraft-edit", children: jsx(EditIcon$2, { size: 16 }) })), canDeleteAircraft && (jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${item.name}`, onClick: () => onDeleteAircraft?.(item.aircraftId), "data-test": "carrier-aircraft-delete", children: jsx(TrashIcon$2, { size: 16 }) }))] })),
29322
29395
  }] : []),
29323
29396
  ];
29324
- return (jsxs("div", { className: cx(sx(pageStyle$r), className), "data-test": "carrier-profile-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$8), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "carrier-profile-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$m), children: [jsx("h1", { className: sx(titleStyle$i), children: "My Profile" }), jsx("p", { className: sx(descriptionStyle$8), children: "Keep your default bid values, bid contacts, and aircraft up to date \u2014 STM quotes you from exactly what is here." })] }), jsx(Segment, { options: TAB_OPTIONS$2, value: tab, onChange: selectTab, "aria-label": "Profile section", className: sx(tabsStyle$4) }), tab === 'profile' && (jsxs("section", { className: sx(panelStyle$1), "aria-label": "Preferences", children: [jsx("h2", { className: sx(sectionTitleStyle$7), children: "Preferences" }), jsx("p", { className: sx(sectionCopyStyle$1), children: "These values pre-fill every bid response form, so you only change them when a bid differs from your norm." }), jsxs("div", { className: sx(formStyle$2), children: [jsx(Input, { id: "carrier-available-seats", type: "number", label: "# of Available Seats", value: preferences.availableSeats, disabled: !canSavePreferences, onChange: (event) => updatePreference('availableSeats', event.target.value), "data-test": "carrier-available-seats" }), jsx(Input, { id: "carrier-max-payload", type: "number", label: "Max Payload (lbs)", value: preferences.maxPayload, disabled: !canSavePreferences, onChange: (event) => updatePreference('maxPayload', event.target.value), "data-test": "carrier-max-payload" }), jsx(Input, { id: "carrier-fuel-base", label: "Fuel Base ($)", inputMode: "decimal", value: preferences.fuelBase, disabled: !canSavePreferences, onChange: (event) => updatePreference('fuelBase', event.target.value), "data-test": "carrier-fuel-base" }), jsx(Select, { id: "carrier-catering", label: "Catering Options Included", placeholder: "Select a catering option", options: cateringOptions.map((option) => ({ value: option, label: option })), value: preferences.cateringOptions, disabled: !canSavePreferences, onChange: (event) => updatePreference('cateringOptions', event.target.value), "data-test": "carrier-catering" })] }), canSavePreferences && (jsx(Button, { className: sx(saveStyle), onClick: () => onSavePreferences?.(preferences), "data-test": "carrier-save-preferences", children: "Save" }))] })), tab === 'contacts' && (jsxs("section", { className: sx(panelStyle$1), "aria-label": "Contacts", children: [jsxs("h2", { className: sx(sectionTitleStyle$7), children: [carrierName, " contacts"] }), jsx(Table, { columns: contactColumns, data: contacts, rowKey: "contactId", emptyContent: jsx(EmptyState$1, { size: "sm", title: "No contacts currently exist.", description: "Add at least one bid contact so STM knows who to email about new opportunities." }) }), canAddContact && (jsxs(Fragment, { children: [jsx("h3", { className: sx(subTitleStyle), children: "Add a contact" }), jsxs("div", { className: sx(formStyle$2), children: [jsx(Input, { id: "carrier-contact-name", label: "Name", maxLength: 50, required: true, value: newContact.name, error: contactErrors.name, onChange: (event) => setNewContact({ ...newContact, name: event.target.value }), "data-test": "carrier-contact-name" }), jsx(Select, { id: "carrier-contact-type", label: "Contact type", options: contactTypes.map((type) => ({ value: type, label: type })), value: newContact.contactType, onChange: (event) => setNewContact({ ...newContact, contactType: event.target.value }), "data-test": "carrier-contact-type" }), jsx(Input, { id: "carrier-contact-phone", label: "Work phone", maxLength: 20, required: true, value: newContact.workPhone, error: contactErrors.workPhone, onChange: (event) => setNewContact({ ...newContact, workPhone: event.target.value }), "data-test": "carrier-contact-phone" }), jsx(Input, { id: "carrier-contact-email", type: "email", label: "Email address", maxLength: 255, required: true, value: newContact.email, error: contactErrors.email, onChange: (event) => setNewContact({ ...newContact, email: event.target.value }), "data-test": "carrier-contact-email" })] }), jsx(Checkbox, { label: "Contact for new bids", helperText: "New bid opportunities are emailed to every contact with this checked.", checked: newContact.bidContact, onChange: (event) => setNewContact({ ...newContact, bidContact: event.target.checked }), "data-test": "carrier-contact-bid-contact" }), jsx(Button, { className: sx(saveStyle), onClick: submitContact, "data-test": "carrier-contact-submit", children: "Add contact" })] }))] })), tab === 'aircraft' && (jsxs("section", { className: sx(panelStyle$1), "aria-label": "Aircraft", children: [jsx("h2", { className: sx(sectionTitleStyle$7), children: "Aircraft and seat maps" }), jsx("p", { className: sx(sectionCopyStyle$1), children: "Only aircraft listed here can be offered on a bid, and their seat counts and payloads pre-fill the bid response form." }), jsx(Table, { columns: aircraftColumns, data: aircraft, rowKey: "aircraftId", emptyContent: jsx(EmptyState$1, { size: "sm", title: "No aircraft on file", description: "Add the airframes you operate so they appear in the Aircraft Type picker when you bid." }) })] }))] }));
29397
+ return (jsxs("div", { className: cx(sx(pageStyle$s), className), "data-test": "carrier-profile-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$8), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "carrier-profile-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$m), children: [jsx("h1", { className: sx(titleStyle$j), children: "My Profile" }), jsx("p", { className: sx(descriptionStyle$8), children: "Keep your default bid values, bid contacts, and aircraft up to date \u2014 STM quotes you from exactly what is here." })] }), jsx(Segment, { options: TAB_OPTIONS$2, value: tab, onChange: selectTab, "aria-label": "Profile section", className: sx(tabsStyle$4) }), tab === 'profile' && (jsxs("section", { className: sx(panelStyle$1), "aria-label": "Preferences", children: [jsx("h2", { className: sx(sectionTitleStyle$7), children: "Preferences" }), jsx("p", { className: sx(sectionCopyStyle$1), children: "These values pre-fill every bid response form, so you only change them when a bid differs from your norm." }), jsxs("div", { className: sx(formStyle$2), children: [jsx(Input, { id: "carrier-available-seats", type: "number", label: "# of Available Seats", value: preferences.availableSeats, disabled: !canSavePreferences, onChange: (event) => updatePreference('availableSeats', event.target.value), "data-test": "carrier-available-seats" }), jsx(Input, { id: "carrier-max-payload", type: "number", label: "Max Payload (lbs)", value: preferences.maxPayload, disabled: !canSavePreferences, onChange: (event) => updatePreference('maxPayload', event.target.value), "data-test": "carrier-max-payload" }), jsx(Input, { id: "carrier-fuel-base", label: "Fuel Base ($)", inputMode: "decimal", value: preferences.fuelBase, disabled: !canSavePreferences, onChange: (event) => updatePreference('fuelBase', event.target.value), "data-test": "carrier-fuel-base" }), jsx(Select, { id: "carrier-catering", label: "Catering Options Included", placeholder: "Select a catering option", options: cateringOptions.map((option) => ({ value: option, label: option })), value: preferences.cateringOptions, disabled: !canSavePreferences, onChange: (event) => updatePreference('cateringOptions', event.target.value), "data-test": "carrier-catering" })] }), canSavePreferences && (jsx(Button, { className: sx(saveStyle), onClick: () => onSavePreferences?.(preferences), "data-test": "carrier-save-preferences", children: "Save" }))] })), tab === 'contacts' && (jsxs("section", { className: sx(panelStyle$1), "aria-label": "Contacts", children: [jsxs("h2", { className: sx(sectionTitleStyle$7), children: [carrierName, " contacts"] }), jsx(Table, { columns: contactColumns, data: contacts, rowKey: "contactId", emptyContent: jsx(EmptyState$1, { size: "sm", title: "No contacts currently exist.", description: "Add at least one bid contact so STM knows who to email about new opportunities." }) }), canAddContact && (jsxs(Fragment, { children: [jsx("h3", { className: sx(subTitleStyle), children: "Add a contact" }), jsxs("div", { className: sx(formStyle$2), children: [jsx(Input, { id: "carrier-contact-name", label: "Name", maxLength: 50, required: true, value: newContact.name, error: contactErrors.name, onChange: (event) => setNewContact({ ...newContact, name: event.target.value }), "data-test": "carrier-contact-name" }), jsx(Select, { id: "carrier-contact-type", label: "Contact type", options: contactTypes.map((type) => ({ value: type, label: type })), value: newContact.contactType, onChange: (event) => setNewContact({ ...newContact, contactType: event.target.value }), "data-test": "carrier-contact-type" }), jsx(Input, { id: "carrier-contact-phone", label: "Work phone", maxLength: 20, required: true, value: newContact.workPhone, error: contactErrors.workPhone, onChange: (event) => setNewContact({ ...newContact, workPhone: event.target.value }), "data-test": "carrier-contact-phone" }), jsx(Input, { id: "carrier-contact-email", type: "email", label: "Email address", maxLength: 255, required: true, value: newContact.email, error: contactErrors.email, onChange: (event) => setNewContact({ ...newContact, email: event.target.value }), "data-test": "carrier-contact-email" })] }), jsx(Checkbox, { label: "Contact for new bids", helperText: "New bid opportunities are emailed to every contact with this checked.", checked: newContact.bidContact, onChange: (event) => setNewContact({ ...newContact, bidContact: event.target.checked }), "data-test": "carrier-contact-bid-contact" }), jsx(Button, { className: sx(saveStyle), onClick: submitContact, "data-test": "carrier-contact-submit", children: "Add contact" })] }))] })), tab === 'aircraft' && (jsxs("section", { className: sx(panelStyle$1), "aria-label": "Aircraft", children: [jsx("h2", { className: sx(sectionTitleStyle$7), children: "Aircraft and seat maps" }), jsx("p", { className: sx(sectionCopyStyle$1), children: "Only aircraft listed here can be offered on a bid, and their seat counts and payloads pre-fill the bid response form." }), jsx(Table, { columns: aircraftColumns, data: aircraft, rowKey: "aircraftId", emptyContent: jsx(EmptyState$1, { size: "sm", title: "No aircraft on file", description: "Add the airframes you operate so they appear in the Aircraft Type picker when you bid." }) })] }))] }));
29325
29398
  };
29326
29399
  CarrierProfilePage.displayName = 'CarrierProfilePage';
29327
29400
 
29328
29401
  /** ChampionshipBidDetailPage's compiled rules. */
29329
- const pageStyle$q = {
29402
+ const pageStyle$r = {
29330
29403
  label: 'ChampionshipBidDetailPage-pageStyle',
29331
29404
  display: 'flex',
29332
29405
  flexDirection: 'column',
@@ -29352,7 +29425,7 @@ const headerStyle$l = {
29352
29425
  flexDirection: 'column',
29353
29426
  },
29354
29427
  };
29355
- const eyebrowStyle$6 = {
29428
+ const eyebrowStyle$7 = {
29356
29429
  label: 'ChampionshipBidDetailPage-eyebrowStyle',
29357
29430
  color: 'var(--fg-4)',
29358
29431
  fontSize: 'var(--fs-xs)',
@@ -29360,7 +29433,7 @@ const eyebrowStyle$6 = {
29360
29433
  letterSpacing: '.06em',
29361
29434
  textTransform: 'uppercase',
29362
29435
  };
29363
- const titleStyle$h = {
29436
+ const titleStyle$i = {
29364
29437
  label: 'ChampionshipBidDetailPage-titleStyle',
29365
29438
  margin: 'var(--space-1) 0 0',
29366
29439
  color: 'var(--fg-1)',
@@ -29481,7 +29554,7 @@ const ChampionshipBidDetailPage = ({ bid, loading = false, backLabel = 'NCAA Cha
29481
29554
  const currency = useMemo(() => new Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }), [locale]);
29482
29555
  const numbers = useMemo(() => new Intl.NumberFormat(locale), [locale]);
29483
29556
  const status = bid ? detailStatus(bid) : undefined;
29484
- return (jsxs("div", { className: cx(sx(pageStyle$q), className), "data-test": "championship-bid-detail-page", children: [onBack && (jsx(Button, { type: "button", variant: "ghost", size: "sm", className: sx(breadcrumbStyle$7), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "championship-bid-detail-back", children: backLabel })), loading ? (jsxs("div", { className: sx(loadingStyle), "data-test": "championship-bid-detail-loading", children: [jsx(Spinner, { size: "lg", label: "Loading championship bid detail" }), jsx("p", { children: "Loading championship bid detail\u2026" })] })) : bid && status ? (jsxs(Fragment, { children: [jsxs("header", { className: sx(headerStyle$l), children: [jsxs("div", { children: [jsxs("span", { className: sx(eyebrowStyle$6), children: ["NCAA Championship bid \u00B7 ", bid.bidId] }), jsx("h1", { className: sx(titleStyle$h), children: bid.bidName })] }), jsx("span", { "data-test": "championship-bid-detail-status", children: jsx(StatusBadge, { status: status.status, label: status.label }) })] }), jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-details-heading", children: [jsx("h2", { id: "championship-bid-details-heading", children: "Bid details" }), jsxs("dl", { className: sx(factsStyle$4), children: [jsxs("div", { children: [jsx("dt", { children: "Aircraft" }), jsx("dd", { children: bid.aircraftName || 'Not provided' })] }), jsxs("div", { children: [jsx("dt", { children: "Seats" }), jsx("dd", { children: bid.seats === undefined ? 'Not provided' : numbers.format(bid.seats) })] }), jsxs("div", { className: sx(totalFactStyle$1), children: [jsx("dt", { children: "Total cost" }), jsx("dd", { "data-test": "championship-bid-detail-total", children: bid.totalCost === undefined ? 'Not provided' : currency.format(bid.totalCost) })] }), jsxs("div", { children: [jsx("dt", { children: "Cities" }), jsx("dd", { children: bid.cities || 'Not provided' })] })] })] }), jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-notes-heading", children: [jsx("h2", { id: "championship-bid-notes-heading", children: "Carrier notes" }), jsxs("div", { className: sx(notesGridStyle), children: [jsxs("div", { children: [jsx("h3", { children: "Restrictions" }), jsx("p", { children: bid.restrictions || 'No restrictions provided.' })] }), jsxs("div", { children: [jsx("h3", { children: "Comments" }), jsx("p", { children: bid.comments || 'No comments provided.' })] })] })] }), jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-contract-heading", children: [jsx("h2", { id: "championship-bid-contract-heading", children: "Contract" }), jsxs("div", { className: sx(contractStyle), "data-test": "championship-bid-detail-contract", children: [jsx(DocumentIcon, { size: 20, "aria-hidden": "true" }), jsx("span", { children: bid.contractFileName || 'No contract on file' })] })] })] })) : (jsx("div", { "data-test": "championship-bid-detail-empty", children: jsx(EmptyState$1, { title: "Championship bid detail unavailable", description: "Return to the championship queue and select an available opportunity.", icon: jsx(DocumentIcon, { size: 30 }) }) }))] }));
29557
+ return (jsxs("div", { className: cx(sx(pageStyle$r), className), "data-test": "championship-bid-detail-page", children: [onBack && (jsx(Button, { type: "button", variant: "ghost", size: "sm", className: sx(breadcrumbStyle$7), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "championship-bid-detail-back", children: backLabel })), loading ? (jsxs("div", { className: sx(loadingStyle), "data-test": "championship-bid-detail-loading", children: [jsx(Spinner, { size: "lg", label: "Loading championship bid detail" }), jsx("p", { children: "Loading championship bid detail\u2026" })] })) : bid && status ? (jsxs(Fragment, { children: [jsxs("header", { className: sx(headerStyle$l), children: [jsxs("div", { children: [jsxs("span", { className: sx(eyebrowStyle$7), children: ["NCAA Championship bid \u00B7 ", bid.bidId] }), jsx("h1", { className: sx(titleStyle$i), children: bid.bidName })] }), jsx("span", { "data-test": "championship-bid-detail-status", children: jsx(StatusBadge, { status: status.status, label: status.label }) })] }), jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-details-heading", children: [jsx("h2", { id: "championship-bid-details-heading", children: "Bid details" }), jsxs("dl", { className: sx(factsStyle$4), children: [jsxs("div", { children: [jsx("dt", { children: "Aircraft" }), jsx("dd", { children: bid.aircraftName || 'Not provided' })] }), jsxs("div", { children: [jsx("dt", { children: "Seats" }), jsx("dd", { children: bid.seats === undefined ? 'Not provided' : numbers.format(bid.seats) })] }), jsxs("div", { className: sx(totalFactStyle$1), children: [jsx("dt", { children: "Total cost" }), jsx("dd", { "data-test": "championship-bid-detail-total", children: bid.totalCost === undefined ? 'Not provided' : currency.format(bid.totalCost) })] }), jsxs("div", { children: [jsx("dt", { children: "Cities" }), jsx("dd", { children: bid.cities || 'Not provided' })] })] })] }), jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-notes-heading", children: [jsx("h2", { id: "championship-bid-notes-heading", children: "Carrier notes" }), jsxs("div", { className: sx(notesGridStyle), children: [jsxs("div", { children: [jsx("h3", { children: "Restrictions" }), jsx("p", { children: bid.restrictions || 'No restrictions provided.' })] }), jsxs("div", { children: [jsx("h3", { children: "Comments" }), jsx("p", { children: bid.comments || 'No comments provided.' })] })] })] }), jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-contract-heading", children: [jsx("h2", { id: "championship-bid-contract-heading", children: "Contract" }), jsxs("div", { className: sx(contractStyle), "data-test": "championship-bid-detail-contract", children: [jsx(DocumentIcon, { size: 20, "aria-hidden": "true" }), jsx("span", { children: bid.contractFileName || 'No contract on file' })] })] })] })) : (jsx("div", { "data-test": "championship-bid-detail-empty", children: jsx(EmptyState$1, { title: "Championship bid detail unavailable", description: "Return to the championship queue and select an available opportunity.", icon: jsx(DocumentIcon, { size: 30 }) }) }))] }));
29485
29558
  };
29486
29559
  ChampionshipBidDetailPage.displayName = 'ChampionshipBidDetailPage';
29487
29560
 
@@ -29493,7 +29566,7 @@ ChampionshipBidDetailPage.displayName = 'ChampionshipBidDetailPage';
29493
29566
  * declaration block in the sheet; they are separate elements, so each keeps its
29494
29567
  * own object.
29495
29568
  */
29496
- const pageStyle$p = {
29569
+ const pageStyle$q = {
29497
29570
  label: 'ChampionshipBidsPage-pageStyle',
29498
29571
  display: 'flex',
29499
29572
  flexDirection: 'column',
@@ -29514,7 +29587,7 @@ const headerStyle$k = {
29514
29587
  flexDirection: 'column',
29515
29588
  gap: 'var(--space-1)',
29516
29589
  };
29517
- const titleStyle$g = {
29590
+ const titleStyle$h = {
29518
29591
  label: 'ChampionshipBidsPage-titleStyle',
29519
29592
  margin: 0,
29520
29593
  color: 'var(--fg-1)',
@@ -29692,7 +29765,7 @@ const ChampionshipBidsPage = ({ bids, bidType: controlledBidType, defaultBidType
29692
29765
  render: (_value, bid) => onOpenBid ? (jsx(Button, { variant: "outline", size: "sm", onClick: () => onOpenBid(bid.bidId), "data-test": "championship-rebid", children: "Bid anyway" })) : jsx("span", { className: sx(mutedStyle), children: "\u2014" }),
29693
29766
  });
29694
29767
  }
29695
- return (jsxs("div", { className: cx(sx(pageStyle$p), className), "data-test": "championship-bids-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$6), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "championship-bids-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$k), children: [jsx("h1", { className: sx(titleStyle$g), children: CHAMPIONSHIP_HEADINGS[bidType] }), jsx("p", { className: sx(descriptionStyle$7), children: "NCAA championship charter opportunities released to you. Award confirmations and signed contracts live in the Awarded queue." })] }), jsx(Segment, { options: TAB_OPTIONS$1, value: bidType, onChange: selectBidType, "aria-label": "Championship bid queue", className: sx(tabsStyle$3) }), jsx(Table, { columns: columns, data: pageBids, rowKey: "bidId", loading: loading, emptyContent: jsx(EmptyState$1, { size: "sm", title: "No such bids currently exist.", description: "Championship opportunities appear here as soon as the NCAA releases them to your carrier." }) }), jsx(Pagination, { page: currentPage, pageSize: pageSize, totalItems: bids.length, itemLabel: "bids", ariaLabel: "Championship bids pagination", onPageChange: setPage, onPageSizeChange: (nextSize) => {
29768
+ return (jsxs("div", { className: cx(sx(pageStyle$q), className), "data-test": "championship-bids-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$6), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "championship-bids-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$k), children: [jsx("h1", { className: sx(titleStyle$h), children: CHAMPIONSHIP_HEADINGS[bidType] }), jsx("p", { className: sx(descriptionStyle$7), children: "NCAA championship charter opportunities released to you. Award confirmations and signed contracts live in the Awarded queue." })] }), jsx(Segment, { options: TAB_OPTIONS$1, value: bidType, onChange: selectBidType, "aria-label": "Championship bid queue", className: sx(tabsStyle$3) }), jsx(Table, { columns: columns, data: pageBids, rowKey: "bidId", loading: loading, emptyContent: jsx(EmptyState$1, { size: "sm", title: "No such bids currently exist.", description: "Championship opportunities appear here as soon as the NCAA releases them to your carrier." }) }), jsx(Pagination, { page: currentPage, pageSize: pageSize, totalItems: bids.length, itemLabel: "bids", ariaLabel: "Championship bids pagination", onPageChange: setPage, onPageSizeChange: (nextSize) => {
29696
29769
  setPageSize(nextSize);
29697
29770
  setPage(1);
29698
29771
  } })] }));
@@ -29707,7 +29780,7 @@ ChampionshipBidsPage.displayName = 'ChampionshipBidsPage';
29707
29780
  * eye on is `.breadcrumb`'s `!important`, which overrides the Breadcrumb
29708
29781
  * component's own padding and has to survive the move verbatim.
29709
29782
  */
29710
- const pageStyle$o = {
29783
+ const pageStyle$p = {
29711
29784
  label: 'CharterBidResponsePage-pageStyle',
29712
29785
  display: 'flex',
29713
29786
  flexDirection: 'column',
@@ -29728,7 +29801,7 @@ const headerStyle$j = {
29728
29801
  flexDirection: 'column',
29729
29802
  gap: 'var(--space-1)',
29730
29803
  };
29731
- const eyebrowStyle$5 = {
29804
+ const eyebrowStyle$6 = {
29732
29805
  label: 'CharterBidResponsePage-eyebrowStyle',
29733
29806
  color: 'var(--fg-4)',
29734
29807
  fontSize: 'var(--fs-xs)',
@@ -29736,7 +29809,7 @@ const eyebrowStyle$5 = {
29736
29809
  letterSpacing: '0.06em',
29737
29810
  textTransform: 'uppercase',
29738
29811
  };
29739
- const titleStyle$f = {
29812
+ const titleStyle$g = {
29740
29813
  label: 'CharterBidResponsePage-titleStyle',
29741
29814
  margin: 0,
29742
29815
  color: 'var(--fg-1)',
@@ -29855,12 +29928,12 @@ const CharterBidResponsePage = ({ program, trips, accountName, tripLevel = true,
29855
29928
  const blockedReason = noBid || pricedInputs
29856
29929
  ? undefined
29857
29930
  : 'Price the trip with the calculator before submitting, or tick “No Bid” to decline.';
29858
- return (jsxs("div", { className: cx(sx(pageStyle$o), className), "data-test": "charter-bid-response-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$5), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charter-bid-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$j), children: [jsx("span", { className: sx(eyebrowStyle$5), children: "Bid response" }), jsx("h1", { className: sx(titleStyle$f), children: tripLevel ? trips[0]?.tripName : program.bidName })] }), jsxs("section", { className: sx(summaryStyle$3), "aria-label": "Team overview", children: [jsx("h2", { className: sx(sectionTitleStyle$6), children: "Team Overview" }), jsxs("dl", { className: sx(factsStyle$3), children: [jsxs("div", { children: [jsx("dt", { children: "Team" }), jsx("dd", { children: accountName })] }), jsxs("div", { children: [jsx("dt", { children: "Sport" }), jsx("dd", { children: program.sport })] }), jsxs("div", { children: [jsx("dt", { children: "Season" }), jsx("dd", { children: program.season })] }), jsxs("div", { children: [jsx("dt", { children: "Year" }), jsx("dd", { children: program.year })] }), jsxs("div", { children: [jsx("dt", { children: "Due Date" }), jsx("dd", { children: formatDate$3(program.dueDate, locale) })] })] })] }), trips.map((trip, index) => (jsxs("section", { className: sx(summaryStyle$3), "aria-label": `Trip ${index + 1}`, children: [jsxs("h2", { className: sx(sectionTitleStyle$6), children: ["Trip ", index + 1] }), jsxs("p", { className: sx(tripMetaStyle), children: [jsxs("span", { children: [jsx("strong", { children: "Bid Type:" }), " ", trip.bidType] }), acmiCarrier && requestedCarrier && (jsxs("span", { "data-test": "charter-bid-requested-carrier", children: [jsx("strong", { children: "Requested Carrier:" }), " ", requestedCarrier] }))] }), jsxs("dl", { className: sx(factsStyle$3), children: [jsxs("div", { children: [jsx("dt", { children: "Depart Date" }), jsx("dd", { children: formatDate$3(trip.departureDate, locale) })] }), jsxs("div", { children: [jsx("dt", { children: "Travel Party Size" }), jsx("dd", { children: trip.travelPartySize })] }), jsxs("div", { children: [jsx("dt", { children: "Route" }), jsx("dd", { children: trip.route })] }), jsxs("div", { children: [jsx("dt", { children: "Expires" }), jsx("dd", { children: formatDate$3(trip.expirationDate, locale) })] })] })] }, trip.tripGuid))), jsxs("section", { className: sx(calculatorStyle), "aria-label": "ACMI calculator", children: [jsxs("div", { className: sx(calculatorHeaderStyle), children: [jsx("h2", { className: sx(sectionTitleStyle$6), children: "Price this trip" }), jsx("p", { className: sx(sectionCopyStyle), children: "Every bid is priced here, so the total you submit is always built from the same carrier, aircraft, fuel, and leg inputs." })] }), noBid ? (jsx(Alert, { variant: "warning", title: "You are declining this opportunity", children: "Pricing is switched off while \u201CNo Bid\u201D is ticked. Untick it to build a quote instead." })) : (jsx(AcmiQuoteCalculator, { defaultInputs: defaultInputs, result: acmiResult, onCalculate: handleCalculate, locale: locale }))] }), jsxs("div", { className: sx(submitBarStyle), children: [jsx(Checkbox, { label: "No Bid Submitted for this Request", helperText: "Declines the opportunity. Pricing is switched off and nothing is quoted.", checked: noBid, onChange: (event) => setNoBid(event.target.checked), "data-test": "charter-bid-no-bid" }), jsx(Button, { fullWidth: true, loading: submitting, disabled: Boolean(blockedReason), onClick: () => onSubmitBid?.({ inputs: noBid ? null : pricedInputs, noBid }), "data-test": "charter-bid-submit", children: noBid ? 'Submit No Bid' : 'Submit Bid' }), blockedReason && (jsx("p", { className: sx(blockedReasonStyle$1), "data-test": "charter-bid-blocked-reason", children: blockedReason }))] })] }));
29931
+ return (jsxs("div", { className: cx(sx(pageStyle$p), className), "data-test": "charter-bid-response-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$5), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charter-bid-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$j), children: [jsx("span", { className: sx(eyebrowStyle$6), children: "Bid response" }), jsx("h1", { className: sx(titleStyle$g), children: tripLevel ? trips[0]?.tripName : program.bidName })] }), jsxs("section", { className: sx(summaryStyle$3), "aria-label": "Team overview", children: [jsx("h2", { className: sx(sectionTitleStyle$6), children: "Team Overview" }), jsxs("dl", { className: sx(factsStyle$3), children: [jsxs("div", { children: [jsx("dt", { children: "Team" }), jsx("dd", { children: accountName })] }), jsxs("div", { children: [jsx("dt", { children: "Sport" }), jsx("dd", { children: program.sport })] }), jsxs("div", { children: [jsx("dt", { children: "Season" }), jsx("dd", { children: program.season })] }), jsxs("div", { children: [jsx("dt", { children: "Year" }), jsx("dd", { children: program.year })] }), jsxs("div", { children: [jsx("dt", { children: "Due Date" }), jsx("dd", { children: formatDate$3(program.dueDate, locale) })] })] })] }), trips.map((trip, index) => (jsxs("section", { className: sx(summaryStyle$3), "aria-label": `Trip ${index + 1}`, children: [jsxs("h2", { className: sx(sectionTitleStyle$6), children: ["Trip ", index + 1] }), jsxs("p", { className: sx(tripMetaStyle), children: [jsxs("span", { children: [jsx("strong", { children: "Bid Type:" }), " ", trip.bidType] }), acmiCarrier && requestedCarrier && (jsxs("span", { "data-test": "charter-bid-requested-carrier", children: [jsx("strong", { children: "Requested Carrier:" }), " ", requestedCarrier] }))] }), jsxs("dl", { className: sx(factsStyle$3), children: [jsxs("div", { children: [jsx("dt", { children: "Depart Date" }), jsx("dd", { children: formatDate$3(trip.departureDate, locale) })] }), jsxs("div", { children: [jsx("dt", { children: "Travel Party Size" }), jsx("dd", { children: trip.travelPartySize })] }), jsxs("div", { children: [jsx("dt", { children: "Route" }), jsx("dd", { children: trip.route })] }), jsxs("div", { children: [jsx("dt", { children: "Expires" }), jsx("dd", { children: formatDate$3(trip.expirationDate, locale) })] })] })] }, trip.tripGuid))), jsxs("section", { className: sx(calculatorStyle), "aria-label": "ACMI calculator", children: [jsxs("div", { className: sx(calculatorHeaderStyle), children: [jsx("h2", { className: sx(sectionTitleStyle$6), children: "Price this trip" }), jsx("p", { className: sx(sectionCopyStyle), children: "Every bid is priced here, so the total you submit is always built from the same carrier, aircraft, fuel, and leg inputs." })] }), noBid ? (jsx(Alert, { variant: "warning", title: "You are declining this opportunity", children: "Pricing is switched off while \u201CNo Bid\u201D is ticked. Untick it to build a quote instead." })) : (jsx(AcmiQuoteCalculator, { defaultInputs: defaultInputs, result: acmiResult, onCalculate: handleCalculate, locale: locale }))] }), jsxs("div", { className: sx(submitBarStyle), children: [jsx(Checkbox, { label: "No Bid Submitted for this Request", helperText: "Declines the opportunity. Pricing is switched off and nothing is quoted.", checked: noBid, onChange: (event) => setNoBid(event.target.checked), "data-test": "charter-bid-no-bid" }), jsx(Button, { fullWidth: true, loading: submitting, disabled: Boolean(blockedReason), onClick: () => onSubmitBid?.({ inputs: noBid ? null : pricedInputs, noBid }), "data-test": "charter-bid-submit", children: noBid ? 'Submit No Bid' : 'Submit Bid' }), blockedReason && (jsx("p", { className: sx(blockedReasonStyle$1), "data-test": "charter-bid-blocked-reason", children: blockedReason }))] })] }));
29859
29932
  };
29860
29933
  CharterBidResponsePage.displayName = 'CharterBidResponsePage';
29861
29934
 
29862
29935
  /** CharterBidViewPage's compiled rules. */
29863
- const pageStyle$n = {
29936
+ const pageStyle$o = {
29864
29937
  label: 'CharterBidViewPage-pageStyle',
29865
29938
  display: 'flex',
29866
29939
  flexDirection: 'column',
@@ -29881,7 +29954,7 @@ const headerStyle$i = {
29881
29954
  flexDirection: 'column',
29882
29955
  gap: 'var(--space-1)',
29883
29956
  };
29884
- const eyebrowStyle$4 = {
29957
+ const eyebrowStyle$5 = {
29885
29958
  label: 'CharterBidViewPage-eyebrowStyle',
29886
29959
  color: 'var(--fg-4)',
29887
29960
  fontSize: 'var(--fs-xs)',
@@ -29889,7 +29962,7 @@ const eyebrowStyle$4 = {
29889
29962
  letterSpacing: '0.06em',
29890
29963
  textTransform: 'uppercase',
29891
29964
  };
29892
- const titleStyle$e = {
29965
+ const titleStyle$f = {
29893
29966
  label: 'CharterBidViewPage-titleStyle',
29894
29967
  margin: 0,
29895
29968
  color: 'var(--fg-1)',
@@ -30044,7 +30117,7 @@ const SUBMISSION_LABELS = {
30044
30117
  const CharterBidViewPage = ({ program, trip, bids = [], processingSubmission, onRefresh, backLabel = 'Regular Season Bids', onBack, locale = 'en-US', className = '', }) => {
30045
30118
  const currency = useMemo(() => new Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }), [locale]);
30046
30119
  const numbers = useMemo(() => new Intl.NumberFormat(locale), [locale]);
30047
- return (jsxs("div", { className: cx(sx(pageStyle$n), className), "data-test": "charter-bid-view-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$4), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charter-bid-view-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$i), children: [jsx("span", { className: sx(eyebrowStyle$4), children: "Bid response" }), jsx("h1", { className: sx(titleStyle$e), children: trip ? trip.tripName : program.bidName }), jsxs("p", { className: sx(subtitleStyle$4), children: [program.team, " \u00B7 ", program.sport, " \u00B7 ", program.season, " ", program.year] })] }), bids.length > 0 && (jsx("ol", { className: sx(bidsStyle), children: bids.map((bid, index) => (jsxs("li", { className: sx(bidStyle), "data-test": "charter-submitted-bid", children: [jsxs("div", { className: sx(bidHeaderStyle), children: [jsxs("h2", { className: sx(bidTitleStyle), children: ["Bid ", index + 1] }), jsx(StatusBadge, { status: "submitted" })] }), jsxs("dl", { className: sx(factsStyle$2), children: [jsxs("div", { children: [jsx("dt", { children: "Seats" }), jsx("dd", { children: bid.seats })] }), jsxs("div", { children: [jsx("dt", { children: "Max Payload (lbs)" }), jsx("dd", { children: numbers.format(bid.maxPayloadLbs) })] }), jsxs("div", { children: [jsx("dt", { children: "Fuel Base ($)" }), jsx("dd", { children: currency.format(bid.fuelBasePrice) })] }), jsxs("div", { className: sx(totalFactStyle), children: [jsx("dt", { children: "Total Cost ($)" }), jsx("dd", { "data-test": "charter-bid-total", children: currency.format(bid.totalCost) })] }), jsxs("div", { children: [jsx("dt", { children: "Catering Options" }), jsx("dd", { children: bid.cateringAvailable })] })] }), bid.notesFromOperator && bid.notesFromOperator.length > 0 && (jsxs("div", { className: sx(notesStyle), children: [jsx("h3", { className: sx(notesTitleStyle), children: "Notes from Operator" }), jsx("ul", { className: sx(notesListStyle), "data-test": "charter-bid-notes", children: bid.notesFromOperator.map((note) => (jsx("li", { children: note }, note))) })] }))] }, bid.id))) })), bids.length === 0 && processingSubmission && (jsxs("div", { className: sx(processingStyle), "data-test": "charter-bid-processing", children: [jsx(Spinner, { size: "lg", label: "Parsing your submission" }), jsx("h2", { className: sx(processingTitleStyle), children: "We are still reading your bid" }), jsxs("p", { className: sx(processingCopyStyle), children: ["Your ", SUBMISSION_LABELS[processingSubmission], " arrived and is being parsed into a quote. This normally takes a couple of minutes \u2014 nothing is lost while it runs, and you do not need to submit it again."] }), onRefresh && (jsx(Button, { variant: "outline", size: "sm", onClick: onRefresh, "data-test": "charter-bid-refresh", children: "Check again" }))] })), bids.length === 0 && !processingSubmission && (jsx(EmptyState$1, { title: "No bid submitted for this opportunity.", description: "Nothing has been received against this trip yet. Submit a bid from the Open queue while it is still live." }))] }));
30120
+ return (jsxs("div", { className: cx(sx(pageStyle$o), className), "data-test": "charter-bid-view-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$4), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charter-bid-view-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$i), children: [jsx("span", { className: sx(eyebrowStyle$5), children: "Bid response" }), jsx("h1", { className: sx(titleStyle$f), children: trip ? trip.tripName : program.bidName }), jsxs("p", { className: sx(subtitleStyle$4), children: [program.team, " \u00B7 ", program.sport, " \u00B7 ", program.season, " ", program.year] })] }), bids.length > 0 && (jsx("ol", { className: sx(bidsStyle), children: bids.map((bid, index) => (jsxs("li", { className: sx(bidStyle), "data-test": "charter-submitted-bid", children: [jsxs("div", { className: sx(bidHeaderStyle), children: [jsxs("h2", { className: sx(bidTitleStyle), children: ["Bid ", index + 1] }), jsx(StatusBadge, { status: "submitted" })] }), jsxs("dl", { className: sx(factsStyle$2), children: [jsxs("div", { children: [jsx("dt", { children: "Seats" }), jsx("dd", { children: bid.seats })] }), jsxs("div", { children: [jsx("dt", { children: "Max Payload (lbs)" }), jsx("dd", { children: numbers.format(bid.maxPayloadLbs) })] }), jsxs("div", { children: [jsx("dt", { children: "Fuel Base ($)" }), jsx("dd", { children: currency.format(bid.fuelBasePrice) })] }), jsxs("div", { className: sx(totalFactStyle), children: [jsx("dt", { children: "Total Cost ($)" }), jsx("dd", { "data-test": "charter-bid-total", children: currency.format(bid.totalCost) })] }), jsxs("div", { children: [jsx("dt", { children: "Catering Options" }), jsx("dd", { children: bid.cateringAvailable })] })] }), bid.notesFromOperator && bid.notesFromOperator.length > 0 && (jsxs("div", { className: sx(notesStyle), children: [jsx("h3", { className: sx(notesTitleStyle), children: "Notes from Operator" }), jsx("ul", { className: sx(notesListStyle), "data-test": "charter-bid-notes", children: bid.notesFromOperator.map((note) => (jsx("li", { children: note }, note))) })] }))] }, bid.id))) })), bids.length === 0 && processingSubmission && (jsxs("div", { className: sx(processingStyle), "data-test": "charter-bid-processing", children: [jsx(Spinner, { size: "lg", label: "Parsing your submission" }), jsx("h2", { className: sx(processingTitleStyle), children: "We are still reading your bid" }), jsxs("p", { className: sx(processingCopyStyle), children: ["Your ", SUBMISSION_LABELS[processingSubmission], " arrived and is being parsed into a quote. This normally takes a couple of minutes \u2014 nothing is lost while it runs, and you do not need to submit it again."] }), onRefresh && (jsx(Button, { variant: "outline", size: "sm", onClick: onRefresh, "data-test": "charter-bid-refresh", children: "Check again" }))] })), bids.length === 0 && !processingSubmission && (jsx(EmptyState$1, { title: "No bid submitted for this opportunity.", description: "Nothing has been received against this trip yet. Submit a bid from the Open queue while it is still live." }))] }));
30048
30121
  };
30049
30122
  CharterBidViewPage.displayName = 'CharterBidViewPage';
30050
30123
 
@@ -30057,7 +30130,7 @@ CharterBidViewPage.displayName = 'CharterBidViewPage';
30057
30130
  * members here, with the group's declarations first and the member's own after,
30058
30131
  * so the last value still wins.
30059
30132
  */
30060
- const pageStyle$m = {
30133
+ const pageStyle$n = {
30061
30134
  label: 'CharterManifestPage-pageStyle',
30062
30135
  display: 'flex',
30063
30136
  flexDirection: 'column',
@@ -30192,7 +30265,7 @@ const railStyle = {
30192
30265
  width: '100%',
30193
30266
  },
30194
30267
  };
30195
- const eyebrowStyle$3 = {
30268
+ const eyebrowStyle$4 = {
30196
30269
  label: 'CharterManifestPage-eyebrowStyle',
30197
30270
  marginBottom: 8,
30198
30271
  color: 'var(--color-slate)',
@@ -30477,7 +30550,7 @@ const CharterManifestPage = ({ tripName, travelStartDate, travelEndDate, seats,
30477
30550
  }
30478
30551
  return a.lastName.localeCompare(b.lastName);
30479
30552
  }), [passengers, sort]);
30480
- return (jsxs("div", { className: cx(sx(pageStyle$m), className), "data-screen-label": "Charter Trip Manifest", children: [jsxs("header", { className: sx(headerStyle$h), children: [jsxs("div", { className: sx(headerRowStyle$1), children: [jsx("button", { type: "button", "aria-label": "Back", className: sx(backStyle), onClick: onBack, children: jsx(ChevronLeftIcon, { size: 28 }) }), jsxs("h1", { children: [jsx("strong", { children: "Manifest" }), jsx(ChevronRightIcon$1, { size: 24 }), jsx("span", { children: tripName })] }), jsxs("div", { className: sx(headerActionsStyle), children: [jsx(StatusPill, { sendState: sendState, locked: locked }), jsx(Button, { variant: "outline", leftIcon: jsx(DocumentIcon, { size: 16 }), disabled: carrierName === 'No carrier selected', onClick: onGenerateFile, children: "Generate File" })] })] }), (travelStartDate || travelEndDate) && (jsxs("div", { className: sx(dateRowStyle), children: [jsx("span", { children: formatDate$2(travelStartDate) }), jsx("span", { className: sx(dateLineStyle), children: "\u25B6" }), jsx("span", { children: formatDate$2(travelEndDate) })] })), jsxs("div", { className: sx(metaRowStyle), children: [jsxs("span", { children: [jsx(PlaneIcon$3, { size: 16 }), seats, " seats"] }), jsxs("span", { children: [jsx(CubeIcon, { size: 16 }), "Payload limit ", payloadLimit.toLocaleString(), " lb"] })] })] }), jsxs("div", { className: sx(layoutStyle), children: [jsxs("aside", { className: sx(railStyle), children: [jsxs("div", { children: [jsx("div", { className: sx(eyebrowStyle$3), children: "Flight Manifest" }), jsx("div", { className: sx(scopeListStyle), children: [{ id: 'all', label: 'Full Trip', detail: 'All flight segments' }, ...segments].map((item) => (jsxs("button", { type: "button", className: cx(sx(scopeStyle), scope === item.id ? sx(activeScopeStyle) : ''), onClick: () => setScope(item.id), children: [jsx("strong", { children: item.label }), jsx("span", { children: item.detail })] }, item.id))) })] }), segments.length > 0 && (jsx(Button, { variant: "outline", size: "sm", disabled: locked, onClick: onSplitSegments, children: "Split by Segment" })), jsxs("div", { className: sx(carrierCardStyle), children: [jsx("div", { className: sx(eyebrowStyle$3), children: "Carrier" }), jsx("strong", { children: carrierName }), jsx("p", { children: carrierNote }), jsx(Button, { variant: "outline", size: "sm", fullWidth: true, disabled: locked, leftIcon: jsx(SettingsIcon, { size: 15 }), onClick: onChangeCarrier, children: "Change Carrier" })] })] }), jsxs("main", { className: sx(mainStyle$2), children: [jsx("section", { className: sx(capacityCardStyle), children: jsx(ManifestCapacityStats, { paxCount: passengers.length, seats: seats, paxWeight: passengerWeight, cargoWeight: cargoWeight, payloadLimit: payloadLimit }) }), jsxs("div", { className: sx(viewRowStyle), children: [jsx(ManifestViewToggle, { view: view, onView: setView, paxCount: passengers.length, eqCount: equipment.length, locked: locked }), locked && jsx("span", { className: sx(lockedMessageStyle), children: "Locked \u2014 coordinate any changes directly with the carrier." })] }), view === 'passengers' ? (jsxs("section", { children: [!locked && (jsxs("div", { className: sx(tableActionsStyle), children: [jsxs("strong", { children: [passengers.length, " Passengers"] }), jsxs("div", { children: [jsx("span", { children: "Order by" }), jsx("span", { className: sx(sortToggleStyle), children: ['name', 'type'].map((option) => (jsx("button", { type: "button", className: sort === option ? sx(activeSortStyle) : '', onClick: () => setSort(option), children: option }, option))) }), jsx(Button, { size: "sm", leftIcon: jsx(PlusIcon$2, { size: 15 }), onClick: onAddPassengers, children: "Add Passengers" })] })] })), jsx("div", { className: sx(tableWrapStyle$3), children: jsxs("table", { children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { children: "#" }), jsx("th", { children: "Passenger" }), jsx("th", { children: "Type" }), jsx("th", { children: "TSA Screening" }), jsx("th", { children: "Personal" }), jsx("th", { children: "Carry-On" }), jsx("th", { children: "Checked" }), jsx("th", { children: "Seat" }), jsx("th", {})] }) }), jsxs("tbody", { children: [!sortedPassengers.length && jsx("tr", { children: jsx("td", { colSpan: 9, className: sx(emptyStyle$3), children: "No passengers on this manifest yet. Add passengers from the master list." }) }), sortedPassengers.map((passenger, index) => (jsxs("tr", { children: [jsx("td", { children: index + 1 }), jsxs("td", { children: [jsx("strong", { children: passenger.lastName }), jsxs("span", { children: [", ", passenger.firstName] })] }), jsx("td", { children: jsx(TypeTag, { type: passenger.travelerType }) }), jsx("td", { children: passenger.screeningType || '—' }), jsxs("td", { children: [passenger.personalWeight ?? 0, " lb"] }), jsxs("td", { children: [passenger.carryOnWeight ?? 0, " lb"] }), jsxs("td", { children: [passenger.checkedWeight ?? 0, " lb"] }), jsx("td", { children: passenger.seatAssignment || '—' }), jsx("td", { children: !locked && jsx("button", { type: "button", "aria-label": `Remove ${passenger.firstName} ${passenger.lastName}`, className: sx(removeStyle), onClick: () => onRemovePassenger?.(passenger), children: jsx(TrashIcon$2, { size: 16 }) }) })] }, passenger.id)))] })] }) })] })) : (jsxs("section", { children: [!locked && jsxs("div", { className: sx(tableActionsStyle), children: [jsxs("strong", { children: [equipment.length, " Equipment Items"] }), jsx(Button, { size: "sm", leftIcon: jsx(PlusIcon$2, { size: 15 }), onClick: onAddEquipment, children: "Add Equipment" })] }), jsx("div", { className: sx(tableWrapStyle$3), children: jsxs("table", { children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { children: "Equipment" }), jsx("th", { children: "Quantity" }), jsx("th", { children: "Weight" }), jsx("th", { children: "Total" }), jsx("th", {})] }) }), jsx("tbody", { children: equipment.map((item) => jsxs("tr", { children: [jsx("td", { children: jsx("strong", { children: item.name }) }), jsx("td", { children: item.quantity }), jsxs("td", { children: [item.weight.toLocaleString(), " lb"] }), jsxs("td", { children: [(item.quantity * item.weight).toLocaleString(), " lb"] }), jsx("td", { children: !locked && jsx("button", { type: "button", "aria-label": `Remove ${item.name}`, className: sx(removeStyle), onClick: () => onRemoveEquipment?.(item), children: jsx(TrashIcon$2, { size: 16 }) }) })] }, item.id)) })] }) })] })), !locked && (jsxs("section", { className: sx(finalizeStyle), children: [jsx(StatusPill, { sendState: sendState, locked: false }), jsx("p", { children: sendState === 'initial-sent' ? 'Initial manifest sent. The final manifest may be sent within 3 days of departure.' : 'No manifest has been transmitted to the carrier yet.' }), jsxs("div", { className: sx(finalizeActionsStyle), children: [sendState === 'none' && jsx(Button, { onClick: onSendInitial, children: "Send Initial Manifest" }), sendState === 'initial-sent' && jsxs(Fragment, { children: [jsx(Button, { onClick: onSendFinal, children: "Send Final Manifest" }), jsx(Button, { variant: "ghost", size: "sm", onClick: onUndoInitial, children: "Undo initial" })] })] })] }))] })] })] }));
30553
+ return (jsxs("div", { className: cx(sx(pageStyle$n), className), "data-screen-label": "Charter Trip Manifest", children: [jsxs("header", { className: sx(headerStyle$h), children: [jsxs("div", { className: sx(headerRowStyle$1), children: [jsx("button", { type: "button", "aria-label": "Back", className: sx(backStyle), onClick: onBack, children: jsx(ChevronLeftIcon, { size: 28 }) }), jsxs("h1", { children: [jsx("strong", { children: "Manifest" }), jsx(ChevronRightIcon$1, { size: 24 }), jsx("span", { children: tripName })] }), jsxs("div", { className: sx(headerActionsStyle), children: [jsx(StatusPill, { sendState: sendState, locked: locked }), jsx(Button, { variant: "outline", leftIcon: jsx(DocumentIcon, { size: 16 }), disabled: carrierName === 'No carrier selected', onClick: onGenerateFile, children: "Generate File" })] })] }), (travelStartDate || travelEndDate) && (jsxs("div", { className: sx(dateRowStyle), children: [jsx("span", { children: formatDate$2(travelStartDate) }), jsx("span", { className: sx(dateLineStyle), children: "\u25B6" }), jsx("span", { children: formatDate$2(travelEndDate) })] })), jsxs("div", { className: sx(metaRowStyle), children: [jsxs("span", { children: [jsx(PlaneIcon$3, { size: 16 }), seats, " seats"] }), jsxs("span", { children: [jsx(CubeIcon, { size: 16 }), "Payload limit ", payloadLimit.toLocaleString(), " lb"] })] })] }), jsxs("div", { className: sx(layoutStyle), children: [jsxs("aside", { className: sx(railStyle), children: [jsxs("div", { children: [jsx("div", { className: sx(eyebrowStyle$4), children: "Flight Manifest" }), jsx("div", { className: sx(scopeListStyle), children: [{ id: 'all', label: 'Full Trip', detail: 'All flight segments' }, ...segments].map((item) => (jsxs("button", { type: "button", className: cx(sx(scopeStyle), scope === item.id ? sx(activeScopeStyle) : ''), onClick: () => setScope(item.id), children: [jsx("strong", { children: item.label }), jsx("span", { children: item.detail })] }, item.id))) })] }), segments.length > 0 && (jsx(Button, { variant: "outline", size: "sm", disabled: locked, onClick: onSplitSegments, children: "Split by Segment" })), jsxs("div", { className: sx(carrierCardStyle), children: [jsx("div", { className: sx(eyebrowStyle$4), children: "Carrier" }), jsx("strong", { children: carrierName }), jsx("p", { children: carrierNote }), jsx(Button, { variant: "outline", size: "sm", fullWidth: true, disabled: locked, leftIcon: jsx(SettingsIcon, { size: 15 }), onClick: onChangeCarrier, children: "Change Carrier" })] })] }), jsxs("main", { className: sx(mainStyle$2), children: [jsx("section", { className: sx(capacityCardStyle), children: jsx(ManifestCapacityStats, { paxCount: passengers.length, seats: seats, paxWeight: passengerWeight, cargoWeight: cargoWeight, payloadLimit: payloadLimit }) }), jsxs("div", { className: sx(viewRowStyle), children: [jsx(ManifestViewToggle, { view: view, onView: setView, paxCount: passengers.length, eqCount: equipment.length, locked: locked }), locked && jsx("span", { className: sx(lockedMessageStyle), children: "Locked \u2014 coordinate any changes directly with the carrier." })] }), view === 'passengers' ? (jsxs("section", { children: [!locked && (jsxs("div", { className: sx(tableActionsStyle), children: [jsxs("strong", { children: [passengers.length, " Passengers"] }), jsxs("div", { children: [jsx("span", { children: "Order by" }), jsx("span", { className: sx(sortToggleStyle), children: ['name', 'type'].map((option) => (jsx("button", { type: "button", className: sort === option ? sx(activeSortStyle) : '', onClick: () => setSort(option), children: option }, option))) }), jsx(Button, { size: "sm", leftIcon: jsx(PlusIcon$2, { size: 15 }), onClick: onAddPassengers, children: "Add Passengers" })] })] })), jsx("div", { className: sx(tableWrapStyle$3), children: jsxs("table", { children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { children: "#" }), jsx("th", { children: "Passenger" }), jsx("th", { children: "Type" }), jsx("th", { children: "TSA Screening" }), jsx("th", { children: "Personal" }), jsx("th", { children: "Carry-On" }), jsx("th", { children: "Checked" }), jsx("th", { children: "Seat" }), jsx("th", {})] }) }), jsxs("tbody", { children: [!sortedPassengers.length && jsx("tr", { children: jsx("td", { colSpan: 9, className: sx(emptyStyle$3), children: "No passengers on this manifest yet. Add passengers from the master list." }) }), sortedPassengers.map((passenger, index) => (jsxs("tr", { children: [jsx("td", { children: index + 1 }), jsxs("td", { children: [jsx("strong", { children: passenger.lastName }), jsxs("span", { children: [", ", passenger.firstName] })] }), jsx("td", { children: jsx(TypeTag, { type: passenger.travelerType }) }), jsx("td", { children: passenger.screeningType || '—' }), jsxs("td", { children: [passenger.personalWeight ?? 0, " lb"] }), jsxs("td", { children: [passenger.carryOnWeight ?? 0, " lb"] }), jsxs("td", { children: [passenger.checkedWeight ?? 0, " lb"] }), jsx("td", { children: passenger.seatAssignment || '—' }), jsx("td", { children: !locked && jsx("button", { type: "button", "aria-label": `Remove ${passenger.firstName} ${passenger.lastName}`, className: sx(removeStyle), onClick: () => onRemovePassenger?.(passenger), children: jsx(TrashIcon$2, { size: 16 }) }) })] }, passenger.id)))] })] }) })] })) : (jsxs("section", { children: [!locked && jsxs("div", { className: sx(tableActionsStyle), children: [jsxs("strong", { children: [equipment.length, " Equipment Items"] }), jsx(Button, { size: "sm", leftIcon: jsx(PlusIcon$2, { size: 15 }), onClick: onAddEquipment, children: "Add Equipment" })] }), jsx("div", { className: sx(tableWrapStyle$3), children: jsxs("table", { children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { children: "Equipment" }), jsx("th", { children: "Quantity" }), jsx("th", { children: "Weight" }), jsx("th", { children: "Total" }), jsx("th", {})] }) }), jsx("tbody", { children: equipment.map((item) => jsxs("tr", { children: [jsx("td", { children: jsx("strong", { children: item.name }) }), jsx("td", { children: item.quantity }), jsxs("td", { children: [item.weight.toLocaleString(), " lb"] }), jsxs("td", { children: [(item.quantity * item.weight).toLocaleString(), " lb"] }), jsx("td", { children: !locked && jsx("button", { type: "button", "aria-label": `Remove ${item.name}`, className: sx(removeStyle), onClick: () => onRemoveEquipment?.(item), children: jsx(TrashIcon$2, { size: 16 }) }) })] }, item.id)) })] }) })] })), !locked && (jsxs("section", { className: sx(finalizeStyle), children: [jsx(StatusPill, { sendState: sendState, locked: false }), jsx("p", { children: sendState === 'initial-sent' ? 'Initial manifest sent. The final manifest may be sent within 3 days of departure.' : 'No manifest has been transmitted to the carrier yet.' }), jsxs("div", { className: sx(finalizeActionsStyle), children: [sendState === 'none' && jsx(Button, { onClick: onSendInitial, children: "Send Initial Manifest" }), sendState === 'initial-sent' && jsxs(Fragment, { children: [jsx(Button, { onClick: onSendFinal, children: "Send Final Manifest" }), jsx(Button, { variant: "ghost", size: "sm", onClick: onUndoInitial, children: "Undo initial" })] })] })] }))] })] })] }));
30481
30554
  };
30482
30555
 
30483
30556
  /**
@@ -30496,7 +30569,7 @@ const mutedCopy = {
30496
30569
  margin: 0,
30497
30570
  color: 'var(--color-slate)',
30498
30571
  };
30499
- const pageStyle$l = {
30572
+ const pageStyle$m = {
30500
30573
  label: 'ChartersAccessManagementPage-pageStyle',
30501
30574
  maxWidth: 1180,
30502
30575
  margin: '0 auto',
@@ -30531,7 +30604,7 @@ const headingRowStyle = {
30531
30604
  flexDirection: 'column',
30532
30605
  },
30533
30606
  };
30534
- const eyebrowStyle$2 = {
30607
+ const eyebrowStyle$3 = {
30535
30608
  label: 'ChartersAccessManagementPage-eyebrowStyle',
30536
30609
  ...mutedCopy,
30537
30610
  marginBottom: 8,
@@ -30714,14 +30787,14 @@ const avatarStyle = {
30714
30787
  fontSize: 12,
30715
30788
  fontWeight: 'var(--fw-semibold)',
30716
30789
  };
30717
- const nameStyle = {
30790
+ const nameStyle$1 = {
30718
30791
  label: 'ChartersAccessManagementPage-nameStyle',
30719
30792
  display: 'flex',
30720
30793
  alignItems: 'center',
30721
30794
  gap: 7,
30722
30795
  fontWeight: 'var(--fw-semibold)',
30723
30796
  };
30724
- const titleStyle$d = {
30797
+ const titleStyle$e = {
30725
30798
  label: 'ChartersAccessManagementPage-titleStyle',
30726
30799
  display: 'block',
30727
30800
  marginTop: 2,
@@ -30868,7 +30941,7 @@ const ChartersAccessManagementPage = ({ accountName, memberships, availableAccou
30868
30941
  const addUnavailableReason = !onAddAccess
30869
30942
  ? 'Adding STM Charters access is not available in this view.'
30870
30943
  : undefined;
30871
- return (jsxs("div", { className: cx(sx(pageStyle$l), className), "data-test": "charters-access-management-page", children: [jsxs("header", { className: sx(headerStyle$g), children: [onBack && (jsx(Button, { type: "button", variant: "ghost", size: "sm", leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charters-access-back", children: "STM Charters" })), jsxs("div", { className: sx(headingRowStyle), children: [jsxs("div", { children: [jsxs("p", { className: sx(eyebrowStyle$2), children: ["STM Charters \u00B7 ", accountName] }), jsx("h1", { children: "Access Management" }), jsx("p", { className: sx(descriptionStyle$6), children: "Grant account users access to charter bids and choose who can manage membership." })] }), jsxs("div", { className: sx(summaryStyle$2), "aria-label": "Access summary", children: [jsxs("span", { children: [jsx("strong", { children: memberships.length }), " members"] }), jsxs("span", { children: [jsx("strong", { children: adminCount }), " admins"] })] })] })] }), loading && (jsxs("div", { className: sx(pageStateStyle$1), "data-test": "charters-access-loading", children: [jsx(Spinner, { size: "lg", label: "Loading STM Charters access" }), jsx("p", { children: "Loading STM Charters access\u2026" })] })), !loading && error && (jsxs("div", { className: sx(pageStateStyle$1), "data-test": "charters-access-error", children: [jsx(Alert, { variant: "error", title: "Access could not be loaded", children: error }), onRetry && (jsx(Button, { type: "button", variant: "outline", onClick: onRetry, "data-test": "charters-access-retry", children: "Try again" }))] })), !loading && !error && (jsxs(Fragment, { children: [actionError && (jsx(Alert, { variant: "error", title: "Access change failed", dismissible: true, onDismiss: () => setActionError(undefined), className: sx(actionErrorStyle$1), children: jsx("span", { "data-test": "charters-access-action-error", children: actionError }) })), canManageAccess ? (jsxs("section", { className: sx(addPanelStyle), "data-test": "charters-access-add-panel", children: [jsxs("div", { className: sx(sectionHeadingStyle$1), children: [jsx("span", { className: sx(sectionIconStyle), children: jsx(UsersIcon$1, { size: 20 }) }), jsxs("div", { children: [jsx("h2", { children: "Add account users" }), jsxs("p", { children: ["Search and select one or more existing users of ", accountName, " to grant STM Charters access."] })] })] }), jsxs("div", { className: sx(addControlsStyle), children: [jsx(MultiUserSearch, { label: "Search account users", placeholder: "Type to search by name or email", options: userSearchOptions, selectedIds: selectedUserIds, onSearch: handleUserSearch, onSelectionChange: setSelectedUserIds, loading: accountUserSearchLoading, disabled: Boolean(pendingAction), error: accountUserSearchError, helperText: "Select one or more users, then choose their role below.", "data-test": "charters-access-user-search" }), jsxs("div", { className: sx(addActionsRowStyle), children: [jsx(Select, { label: "STM Charters role", options: ROLE_OPTIONS, value: newRole, onChange: (event) => setNewRole(event.target.value), disabled: Boolean(pendingAction), "data-test": "charters-access-new-role" }), jsx(Button, { type: "button", onClick: addSelectedUsers, disabled: !hasSelectedUsers || Boolean(addUnavailableReason), loading: pendingAction === 'add', title: addUnavailableReason, "data-test": "charters-access-add", children: selectedUsers.length > 1
30944
+ return (jsxs("div", { className: cx(sx(pageStyle$m), className), "data-test": "charters-access-management-page", children: [jsxs("header", { className: sx(headerStyle$g), children: [onBack && (jsx(Button, { type: "button", variant: "ghost", size: "sm", leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charters-access-back", children: "STM Charters" })), jsxs("div", { className: sx(headingRowStyle), children: [jsxs("div", { children: [jsxs("p", { className: sx(eyebrowStyle$3), children: ["STM Charters \u00B7 ", accountName] }), jsx("h1", { children: "Access Management" }), jsx("p", { className: sx(descriptionStyle$6), children: "Grant account users access to charter bids and choose who can manage membership." })] }), jsxs("div", { className: sx(summaryStyle$2), "aria-label": "Access summary", children: [jsxs("span", { children: [jsx("strong", { children: memberships.length }), " members"] }), jsxs("span", { children: [jsx("strong", { children: adminCount }), " admins"] })] })] })] }), loading && (jsxs("div", { className: sx(pageStateStyle$1), "data-test": "charters-access-loading", children: [jsx(Spinner, { size: "lg", label: "Loading STM Charters access" }), jsx("p", { children: "Loading STM Charters access\u2026" })] })), !loading && error && (jsxs("div", { className: sx(pageStateStyle$1), "data-test": "charters-access-error", children: [jsx(Alert, { variant: "error", title: "Access could not be loaded", children: error }), onRetry && (jsx(Button, { type: "button", variant: "outline", onClick: onRetry, "data-test": "charters-access-retry", children: "Try again" }))] })), !loading && !error && (jsxs(Fragment, { children: [actionError && (jsx(Alert, { variant: "error", title: "Access change failed", dismissible: true, onDismiss: () => setActionError(undefined), className: sx(actionErrorStyle$1), children: jsx("span", { "data-test": "charters-access-action-error", children: actionError }) })), canManageAccess ? (jsxs("section", { className: sx(addPanelStyle), "data-test": "charters-access-add-panel", children: [jsxs("div", { className: sx(sectionHeadingStyle$1), children: [jsx("span", { className: sx(sectionIconStyle), children: jsx(UsersIcon$1, { size: 20 }) }), jsxs("div", { children: [jsx("h2", { children: "Add account users" }), jsxs("p", { children: ["Search and select one or more existing users of ", accountName, " to grant STM Charters access."] })] })] }), jsxs("div", { className: sx(addControlsStyle), children: [jsx(MultiUserSearch, { label: "Search account users", placeholder: "Type to search by name or email", options: userSearchOptions, selectedIds: selectedUserIds, onSearch: handleUserSearch, onSelectionChange: setSelectedUserIds, loading: accountUserSearchLoading, disabled: Boolean(pendingAction), error: accountUserSearchError, helperText: "Select one or more users, then choose their role below.", "data-test": "charters-access-user-search" }), jsxs("div", { className: sx(addActionsRowStyle), children: [jsx(Select, { label: "STM Charters role", options: ROLE_OPTIONS, value: newRole, onChange: (event) => setNewRole(event.target.value), disabled: Boolean(pendingAction), "data-test": "charters-access-new-role" }), jsx(Button, { type: "button", onClick: addSelectedUsers, disabled: !hasSelectedUsers || Boolean(addUnavailableReason), loading: pendingAction === 'add', title: addUnavailableReason, "data-test": "charters-access-add", children: selectedUsers.length > 1
30872
30945
  ? `Add ${selectedUsers.length} users`
30873
30946
  : 'Add access' })] })] })] })) : (jsx(Alert, { variant: "primary", title: "Read-only access", className: sx(readOnlyNoticeStyle$1), children: jsx("span", { "data-test": "charters-access-read-only", children: readOnlyMessage }) })), jsxs("section", { className: sx(membersPanelStyle), "aria-labelledby": "charters-access-members-heading", children: [jsxs("div", { className: sx(membersHeadingStyle), children: [jsxs("div", { children: [jsx("h2", { id: "charters-access-members-heading", children: "People with STM Charters access" }), jsx("p", { children: "Members use carrier workflows. Admins can also manage this list." })] }), jsx(LockIcon$1, { size: 20, "aria-hidden": "true" })] }), memberships.length === 0 ? (jsx("div", { "data-test": "charters-access-empty", children: jsx(EmptyState$1, { title: "No STM Charters members", description: canManageAccess
30874
30947
  ? 'Search for an existing account user above to grant the first membership.'
@@ -30882,7 +30955,7 @@ const ChartersAccessManagementPage = ({ accountName, memberships, availableAccou
30882
30955
  ?? (!onChangeRole ? 'Changing roles is not available in this view.' : undefined);
30883
30956
  const removeDisabledReason = membership.removeDisabledReason
30884
30957
  ?? (!onRemoveAccess ? 'Removing access is not available in this view.' : undefined);
30885
- return (jsxs("tr", { "data-test": `charters-access-row-${membershipKey}`, children: [jsx("td", { children: jsxs("div", { className: sx(personStyle$1), children: [jsx("span", { className: sx(avatarStyle), "aria-hidden": "true", children: membership.name.split(/\s+/).map((part) => part[0]).join('').slice(0, 2) }), jsxs("span", { children: [jsxs("span", { className: sx(nameStyle), children: [membership.name, isCurrentUser && jsx(Badge, { variant: "info", size: "sm", children: "You" })] }), membership.title && jsx("span", { className: sx(titleStyle$d), children: membership.title })] })] }) }), jsx("td", { children: jsx("a", { href: `mailto:${membership.email}`, children: membership.email }) }), jsx("td", { children: canManageAccess ? (jsxs("div", { className: sx(roleControlStyle), children: [jsx(Select, { "aria-label": `Role for ${membership.name}`, options: ROLE_OPTIONS, value: membership.role, onChange: (event) => changeRole(membership, event.target.value), disabled: Boolean(roleDisabledReason) || Boolean(pendingAction), "data-test": `charters-access-role-${membershipKey}` }), rolePending && jsx(Spinner, { size: "xs", label: `Saving ${membership.name}'s role` }), roleDisabledReason && jsx("span", { className: sx(guardStyle), children: roleDisabledReason })] })) : (jsx(Badge, { variant: membership.role === 'admin' ? 'info' : 'default', children: membership.role === 'admin' ? 'Admin' : 'Member' })) }), canManageAccess && (jsxs("td", { className: sx(actionCellStyle$1), children: [jsx(Button, { type: "button", variant: "ghost", size: "sm", square: true, "aria-label": `Remove ${membership.name} from STM Charters`, title: removeDisabledReason, leftIcon: jsx(TrashIcon$2, { size: 16 }), disabled: Boolean(removeDisabledReason) || Boolean(pendingAction), loading: removePending, onClick: () => setRemoveTarget(membership), "data-test": `charters-access-remove-${membershipKey}` }), removeDisabledReason && (jsx("span", { className: cx(sx(guardStyle), sx(guardInActionCellStyle)), children: removeDisabledReason }))] }))] }, membership.membershipId));
30958
+ return (jsxs("tr", { "data-test": `charters-access-row-${membershipKey}`, children: [jsx("td", { children: jsxs("div", { className: sx(personStyle$1), children: [jsx("span", { className: sx(avatarStyle), "aria-hidden": "true", children: membership.name.split(/\s+/).map((part) => part[0]).join('').slice(0, 2) }), jsxs("span", { children: [jsxs("span", { className: sx(nameStyle$1), children: [membership.name, isCurrentUser && jsx(Badge, { variant: "info", size: "sm", children: "You" })] }), membership.title && jsx("span", { className: sx(titleStyle$e), children: membership.title })] })] }) }), jsx("td", { children: jsx("a", { href: `mailto:${membership.email}`, children: membership.email }) }), jsx("td", { children: canManageAccess ? (jsxs("div", { className: sx(roleControlStyle), children: [jsx(Select, { "aria-label": `Role for ${membership.name}`, options: ROLE_OPTIONS, value: membership.role, onChange: (event) => changeRole(membership, event.target.value), disabled: Boolean(roleDisabledReason) || Boolean(pendingAction), "data-test": `charters-access-role-${membershipKey}` }), rolePending && jsx(Spinner, { size: "xs", label: `Saving ${membership.name}'s role` }), roleDisabledReason && jsx("span", { className: sx(guardStyle), children: roleDisabledReason })] })) : (jsx(Badge, { variant: membership.role === 'admin' ? 'info' : 'default', children: membership.role === 'admin' ? 'Admin' : 'Member' })) }), canManageAccess && (jsxs("td", { className: sx(actionCellStyle$1), children: [jsx(Button, { type: "button", variant: "ghost", size: "sm", square: true, "aria-label": `Remove ${membership.name} from STM Charters`, title: removeDisabledReason, leftIcon: jsx(TrashIcon$2, { size: 16 }), disabled: Boolean(removeDisabledReason) || Boolean(pendingAction), loading: removePending, onClick: () => setRemoveTarget(membership), "data-test": `charters-access-remove-${membershipKey}` }), removeDisabledReason && (jsx("span", { className: cx(sx(guardStyle), sx(guardInActionCellStyle)), children: removeDisabledReason }))] }))] }, membership.membershipId));
30886
30959
  }) })] }) }))] })] })), jsx(Modal, { isOpen: Boolean(removeTarget), onClose: () => {
30887
30960
  if (!pendingAction)
30888
30961
  setRemoveTarget(undefined);
@@ -30896,7 +30969,7 @@ ChartersAccessManagementPage.displayName = 'ChartersAccessManagementPage';
30896
30969
  * `@media` block at the foot of the file is now nested inside `pageStyle`,
30897
30970
  * which is the only rule it applied to.
30898
30971
  */
30899
- const pageStyle$k = {
30972
+ const pageStyle$l = {
30900
30973
  label: 'ChartersHomePage-pageStyle',
30901
30974
  display: 'flex',
30902
30975
  flexDirection: 'column',
@@ -30913,7 +30986,7 @@ const headerStyle$f = {
30913
30986
  alignItems: 'flex-start',
30914
30987
  gap: 'var(--space-2)',
30915
30988
  };
30916
- const titleStyle$c = {
30989
+ const titleStyle$d = {
30917
30990
  label: 'ChartersHomePage-titleStyle',
30918
30991
  margin: 0,
30919
30992
  color: 'var(--fg-1)',
@@ -30942,7 +31015,7 @@ const cardsStyle = {
30942
31015
  padding: 0,
30943
31016
  listStyle: 'none',
30944
31017
  };
30945
- const cardStyle$4 = {
31018
+ const cardStyle$5 = {
30946
31019
  label: 'ChartersHomePage-cardStyle',
30947
31020
  display: 'flex',
30948
31021
  alignItems: 'flex-start',
@@ -31164,7 +31237,7 @@ const CHARTER_CONTACT_GROUPS = [
31164
31237
  * welcome paragraph and a PDF link; this keeps the same information architecture but
31165
31238
  * puts a real card into each section with the queue count already visible.
31166
31239
  */
31167
- const ChartersHomePage = ({ title = 'STM Charters', description = 'Bid on flight opportunities for regular season and NCAA championship travel.', sections = CHARTER_SECTIONS, contactGroups = CHARTER_CONTACT_GROUPS, tutorialLabel = 'Portal overview (PDF)', onOpenTutorial, onOpenSection, className = '', }) => (jsxs("div", { className: cx(sx(pageStyle$k), className), "data-test": "charters-home-page", children: [jsxs("header", { className: sx(headerStyle$f), children: [jsx("h1", { className: sx(titleStyle$c), children: title }), description && jsx("p", { className: sx(descriptionStyle$5), children: description }), onOpenTutorial && (jsx(Button, { variant: "outline", size: "sm", className: sx(tutorialStyle), leftIcon: jsx(DocumentIcon, { size: 16 }), onClick: onOpenTutorial, "data-test": "charters-tutorial", children: tutorialLabel }))] }), jsx("ul", { className: sx(cardsStyle), children: sections.map((section) => (jsx("li", { children: jsxs("button", { type: "button", className: sx(cardStyle$4), onClick: () => onOpenSection?.(section.key), "data-test": `charters-section-${section.key}`, children: [jsx("span", { className: sx(cardIconStyle), "aria-hidden": "true", children: section.icon ?? SECTION_ICONS[section.key] ?? jsx(PlaneIcon$3, { size: 20 }) }), jsxs("span", { className: sx(cardBodyStyle$2), children: [jsx("span", { className: sx(cardTitleStyle$1), children: section.title }), jsx("span", { className: sx(cardDescriptionStyle), children: section.description }), section.loading ? (jsx("span", { className: sx(cardLoadingStyle), "data-test": `charters-section-${section.key}-loading`, children: jsx(Spinner, { size: "xs", label: `Loading ${section.title}` }) })) : section.count !== undefined ? (jsxs("span", { className: sx(cardCountStyle), children: [jsx("strong", { children: section.count }), " ", section.countLabel ?? 'items'] })) : null] }), jsx("span", { className: sx(cardArrowStyle), "aria-hidden": "true", children: jsx(ArrowUpRightIcon, { size: 16 }) })] }) }, section.key))) }), jsxs("section", { className: sx(contactsStyle), "aria-label": "Contact us", children: [jsx("h2", { className: sx(sectionTitleStyle$5), children: "Questions? Talk to us" }), jsx("div", { className: sx(contactGroupsStyle), children: contactGroups.map((group) => (jsxs("div", { className: sx(contactGroupStyle$1), children: [jsx("h3", { className: sx(contactGroupTitleStyle), children: group.title }), jsx("ul", { className: sx(contactListStyle), children: group.contacts.map((contact) => (jsxs("li", { className: sx(contactStyle), children: [jsx("span", { className: sx(contactNameStyle), children: contact.name }), contact.role && jsx("span", { className: sx(contactRoleStyle), children: contact.role }), jsxs("span", { className: sx(contactLinksStyle), children: [contact.email && (jsxs("a", { href: `mailto:${contact.email}`, className: sx(contactLinkStyle), children: [jsx(MailIcon, { size: 14, "aria-hidden": "true" }), contact.email] })), contact.phone && (jsxs("a", { href: `tel:${contact.phone}`, className: sx(contactLinkStyle), children: [jsx(PhoneIcon, { size: 14, "aria-hidden": "true" }), contact.phone] }))] })] }, contact.name))) })] }, group.title))) })] })] }));
31240
+ const ChartersHomePage = ({ title = 'STM Charters', description = 'Bid on flight opportunities for regular season and NCAA championship travel.', sections = CHARTER_SECTIONS, contactGroups = CHARTER_CONTACT_GROUPS, tutorialLabel = 'Portal overview (PDF)', onOpenTutorial, onOpenSection, className = '', }) => (jsxs("div", { className: cx(sx(pageStyle$l), className), "data-test": "charters-home-page", children: [jsxs("header", { className: sx(headerStyle$f), children: [jsx("h1", { className: sx(titleStyle$d), children: title }), description && jsx("p", { className: sx(descriptionStyle$5), children: description }), onOpenTutorial && (jsx(Button, { variant: "outline", size: "sm", className: sx(tutorialStyle), leftIcon: jsx(DocumentIcon, { size: 16 }), onClick: onOpenTutorial, "data-test": "charters-tutorial", children: tutorialLabel }))] }), jsx("ul", { className: sx(cardsStyle), children: sections.map((section) => (jsx("li", { children: jsxs("button", { type: "button", className: sx(cardStyle$5), onClick: () => onOpenSection?.(section.key), "data-test": `charters-section-${section.key}`, children: [jsx("span", { className: sx(cardIconStyle), "aria-hidden": "true", children: section.icon ?? SECTION_ICONS[section.key] ?? jsx(PlaneIcon$3, { size: 20 }) }), jsxs("span", { className: sx(cardBodyStyle$2), children: [jsx("span", { className: sx(cardTitleStyle$1), children: section.title }), jsx("span", { className: sx(cardDescriptionStyle), children: section.description }), section.loading ? (jsx("span", { className: sx(cardLoadingStyle), "data-test": `charters-section-${section.key}-loading`, children: jsx(Spinner, { size: "xs", label: `Loading ${section.title}` }) })) : section.count !== undefined ? (jsxs("span", { className: sx(cardCountStyle), children: [jsx("strong", { children: section.count }), " ", section.countLabel ?? 'items'] })) : null] }), jsx("span", { className: sx(cardArrowStyle), "aria-hidden": "true", children: jsx(ArrowUpRightIcon, { size: 16 }) })] }) }, section.key))) }), jsxs("section", { className: sx(contactsStyle), "aria-label": "Contact us", children: [jsx("h2", { className: sx(sectionTitleStyle$5), children: "Questions? Talk to us" }), jsx("div", { className: sx(contactGroupsStyle), children: contactGroups.map((group) => (jsxs("div", { className: sx(contactGroupStyle$1), children: [jsx("h3", { className: sx(contactGroupTitleStyle), children: group.title }), jsx("ul", { className: sx(contactListStyle), children: group.contacts.map((contact) => (jsxs("li", { className: sx(contactStyle), children: [jsx("span", { className: sx(contactNameStyle), children: contact.name }), contact.role && jsx("span", { className: sx(contactRoleStyle), children: contact.role }), jsxs("span", { className: sx(contactLinksStyle), children: [contact.email && (jsxs("a", { href: `mailto:${contact.email}`, className: sx(contactLinkStyle), children: [jsx(MailIcon, { size: 14, "aria-hidden": "true" }), contact.email] })), contact.phone && (jsxs("a", { href: `tel:${contact.phone}`, className: sx(contactLinkStyle), children: [jsx(PhoneIcon, { size: 14, "aria-hidden": "true" }), contact.phone] }))] })] }, contact.name))) })] }, group.title))) })] })] }));
31168
31241
  ChartersHomePage.displayName = 'ChartersHomePage';
31169
31242
 
31170
31243
  /**
@@ -31182,7 +31255,7 @@ ChartersHomePage.displayName = 'ChartersHomePage';
31182
31255
  * rather than classes stacked on one element, so `emergencyLabelStyle` simply
31183
31256
  * carries the merged result.
31184
31257
  */
31185
- const pageStyle$j = {
31258
+ const pageStyle$k = {
31186
31259
  label: 'ContactUsPage-pageStyle',
31187
31260
  color: 'var(--color-ink, #282828)',
31188
31261
  '@media print': {
@@ -31243,7 +31316,7 @@ const stackStyle$1 = {
31243
31316
  };
31244
31317
  /* Outline card: a hairline border on white with a navy accent down the left
31245
31318
  edge, and the section name as a small uppercase eyebrow over the content. */
31246
- const cardStyle$3 = {
31319
+ const cardStyle$4 = {
31247
31320
  label: 'ContactUsPage-cardStyle',
31248
31321
  border: '1px solid var(--color-line, #dce5ef)',
31249
31322
  borderLeft: '6px solid var(--color-primary, #19345f)',
@@ -31473,7 +31546,7 @@ const warningStyle = {
31473
31546
 
31474
31547
  const cleanEmail = (email) => email?.replace('.invalid', '');
31475
31548
  const ContactField = ({ label, children, emergency = false }) => (jsxs("div", { className: sx(fieldStyle$2), children: [jsxs("span", { className: emergency ? sx(emergencyLabelStyle) : sx(labelStyle$2), children: [label, emergency && jsx("span", { className: sx(emergencyDotStyle) })] }), jsx("div", { className: sx(fieldValueStyle), children: children })] }));
31476
- const ContactCard = ({ title, children }) => (jsxs("section", { className: sx(cardStyle$3), children: [title && jsx("h2", { children: title }), jsx("div", { className: sx(cardBodyStyle$1), children: children })] }));
31549
+ const ContactCard = ({ title, children }) => (jsxs("section", { className: sx(cardStyle$4), children: [title && jsx("h2", { children: title }), jsx("div", { className: sx(cardBodyStyle$1), children: children })] }));
31477
31550
  /**
31478
31551
  * One account contact card: the row's own labels and values, in the order the
31479
31552
  * caller put them in. Blank values are the caller's to drop — an empty line
@@ -31499,7 +31572,7 @@ const ContactUsPage = ({ title = 'Your Team of Experts', state, errorMessage = '
31499
31572
  if (resolvedState === 'error' || resolvedState === 'empty') {
31500
31573
  return (jsx("div", { className: sx(centeredStateStyle), "data-test": "contact-us-page", children: jsx("div", { "data-test": `contact-us-${resolvedState}`, role: resolvedState === 'error' ? 'alert' : 'status', className: resolvedState === 'error' ? sx(errorStyle) : sx(warningStyle), children: resolvedState === 'error' ? errorMessage : 'No contact information available.' }) }));
31501
31574
  }
31502
- return (jsx("div", { className: cx(sx(pageStyle$j), className), "data-test": "contact-us-page", children: jsxs("div", { className: sx(containerStyle), children: [jsxs("div", { className: sx(headerRowStyle), children: [jsx(PageHeader, { title: title }), jsx("div", { className: sx(printRowStyle), children: jsxs("button", { type: "button", onClick: onPrint ?? (() => window.print()), children: [jsx(PrinterIcon, { size: 16 }), "Print"] }) })] }), children ?? (data ? (jsxs(Fragment, { children: [!!(data.accountManagers?.length || data.travelAgents?.length) && (jsxs("div", { className: sx(primaryGridStyle), children: [jsx(SimpleContactCard, { title: "Account Manager", contacts: data.accountManagers }), jsx(SimpleContactCard, { title: "Travel Agent", contacts: data.travelAgents })] })), jsxs("div", { className: sx(stackStyle$1), children: [data.accountContacts ? (data.accountContacts.map((section, index) => (
31575
+ return (jsx("div", { className: cx(sx(pageStyle$k), className), "data-test": "contact-us-page", children: jsxs("div", { className: sx(containerStyle), children: [jsxs("div", { className: sx(headerRowStyle), children: [jsx(PageHeader, { title: title }), jsx("div", { className: sx(printRowStyle), children: jsxs("button", { type: "button", onClick: onPrint ?? (() => window.print()), children: [jsx(PrinterIcon, { size: 16 }), "Print"] }) })] }), children ?? (data ? (jsxs(Fragment, { children: [!!(data.accountManagers?.length || data.travelAgents?.length) && (jsxs("div", { className: sx(primaryGridStyle), children: [jsx(SimpleContactCard, { title: "Account Manager", contacts: data.accountManagers }), jsx(SimpleContactCard, { title: "Travel Agent", contacts: data.travelAgents })] })), jsxs("div", { className: sx(stackStyle$1), children: [data.accountContacts ? (data.accountContacts.map((section, index) => (
31503
31576
  // Two rows can share a description, so position is the stable key.
31504
31577
  jsx(AccountContactCard, { section: section }, `${section.title}-${index}`)))) : (jsxs(Fragment, { children: [jsxs(ContactCard, { title: "Group/Team Commercial Reservation Specialists", children: [jsx(ContactField, { label: "Business Hours:", children: jsx("span", { children: "Monday \u2013 Friday 8am-8pm ET" }) }), jsx(ContactField, { label: "Toll-Free Number:", children: jsx("span", { children: "866-902-9654" }) }), jsx(ContactField, { label: "After Hours/Emergency (24/7):", emergency: true, children: jsx("span", { className: sx(emergencyStyle), children: "866-902-9654" }) }), jsx(ContactField, { label: "Email:", children: jsx("a", { href: "mailto:teamtravel@shortstravel.com", children: "teamtravel@shortstravel.com" }) })] }), jsxs(ContactCard, { title: "Recruiting Travel Specialists", children: [jsx(ContactField, { label: "Business Hours:", children: jsx("span", { children: "Monday \u2013 Friday 8am-8pm ET" }) }), jsx(ContactField, { label: "Toll-Free Number:", children: jsx("span", { children: "866-902-9654" }) }), jsx(ContactField, { label: "After Hours/Emergency (24/7):", emergency: true, children: jsx("span", { className: sx(emergencyStyle), children: "866-902-9654" }) }), jsx(ContactField, { label: "Email:", children: jsx("a", { href: "mailto:recruiting@shortstravel.com", children: "recruiting@shortstravel.com" }) })] })] })), !!data.charterAirContacts?.length && jsx(ContactCard, { title: "Charter Air", children: jsx(PairedContacts, { contacts: data.charterAirContacts }) }), !!data.motorcoachContacts?.length && (jsxs(ContactCard, { title: "Charter Bus / Motorcoach", children: [jsx(PairedContacts, { contacts: data.motorcoachContacts }), jsx("p", { className: sx(motorcoachEmergencyStyle), children: "After Hours/Emergency (24/7): 319-423-3007" })] })), !!data.groupHotelContacts?.length && (jsx(ContactCard, { title: "Group Hotel", children: data.groupHotelContacts.map((contact, index) => (jsxs("div", { className: sx(contactPairStyle), children: [jsx(ContactColumn, { title: "Sales Contact", contact: contact }), jsx("div", { className: sx(contactColumnStyle) })] }, `${contact.email ?? contact.name}-${index}`))) }))] })] })) : jsx(GenericCards, { cards: cards })), showSupportFooter && (jsxs("footer", { className: sx(supportStyle), children: [jsx("h2", { children: "Short's Travel Website and Online Booking Tool Support" }), jsx("p", { children: "Monday \u2013 Friday 9am-9pm ET, except major holidays" }), jsxs("div", { children: [jsx("span", { children: "319-257-5309" }), jsx("a", { href: "mailto:onlinesupport@shortstravel.com", children: "onlinesupport@shortstravel.com" })] })] }))] }) }));
31505
31578
  };
@@ -31521,7 +31594,7 @@ const ContactUsPage = ({ title = 'Your Team of Experts', state, errorMessage = '
31521
31594
  * The `pulse` keyframes are namespaced `stm-pulse` — injected at runtime they
31522
31595
  * would otherwise be global and collide with a host's own `pulse`.
31523
31596
  */
31524
- const pageStyle$i = {
31597
+ const pageStyle$j = {
31525
31598
  label: 'DashboardPage-pageStyle',
31526
31599
  color: 'var(--color-ink, #282828)',
31527
31600
  };
@@ -32414,7 +32487,7 @@ const DashboardPage = ({ greeting = 'Good morning', firstName, accountName, widg
32414
32487
  const [dragFrom, setDragFrom] = useState(null);
32415
32488
  const dragGhost = useRef(null);
32416
32489
  const presentTypes = new Set(widgets.map((widget) => widget.type));
32417
- return (jsxs("div", { className: cx(sx(pageStyle$i), className), children: [welcomeHero && heroOpen && (jsxs("section", { className: sx(welcomeHeroStyle), "aria-label": "Welcome", children: [jsx("button", { type: "button", className: sx(welcomeCloseStyle), "aria-label": "Dismiss welcome", onClick: () => setHeroOpen(false), children: jsx(CloseIcon, { size: 20 }) }), welcomeHero] })), jsx("div", { className: sx(pageBannersStyle), children: jsx(PageBanners, { systemBanners: systemBanners, alertBanners: alertBanners, fullWidth: true, onDismiss: onBannerDismiss }) }), standingMessage && (jsx("section", { className: sx(standingMessageStyle), "aria-label": "Message", children: standingMessage })), jsxs("header", { className: sx(pageHeaderStyle$1), children: [jsxs("div", { children: [jsxs("h1", { children: [greeting, firstName ? `, ${firstName}` : ''] }), accountName && jsxs("p", { children: ["Here's your personalized travel overview for ", accountName, "."] })] }), jsx("div", { className: sx(pageActionsStyle), children: editMode ? jsxs(Fragment, { children: [jsxs("button", { type: "button", className: sx(outlineButtonStyle), onClick: () => setCatalogOpen(true), children: [jsx(PlusIcon$2, { size: 20 }), "Add card"] }), jsx("button", { type: "button", className: sx(textButtonStyle$1), onClick: onReset, children: "Reset to default" }), jsxs("button", { type: "button", className: sx(primaryButtonStyle), onClick: () => { setEditMode(false); setCatalogOpen(false); }, children: [jsx(CheckIcon$2, { size: 20 }), "Done"] })] }) : jsxs("button", { type: "button", className: sx(customizeButtonStyle), onClick: () => setEditMode(true), children: [jsx(SettingsIcon, { size: 20 }), "Customize Your Home Page"] }) })] }), editMode && jsxs("div", { className: sx(editBannerStyle), children: [jsx(EditIcon$2, { size: 20 }), jsxs("span", { children: [jsx("strong", { children: "Customizing your home page." }), " Drag cards to reorder, resize with S / M / L, or remove cards. Your layout saves automatically."] })] }), syncStatus === 'saving' && jsx("p", { className: sx(syncStatusStyle), "aria-live": "polite", children: "Saving layout\u2026" }), syncStatus === 'error' && jsx("p", { className: cx(sx(syncStatusStyle), sx(syncErrorStyle)), role: "alert", children: "Layout couldn't be saved. Changes are preserved locally." }), widgets.length ? jsx("div", { className: sx(gridStyle$2), children: widgets.map((widget, index) => jsx("div", { className: sx(sizeStyles[widget.size]), draggable: editMode, onDragStart: (event) => { if (!editMode)
32490
+ return (jsxs("div", { className: cx(sx(pageStyle$j), className), children: [welcomeHero && heroOpen && (jsxs("section", { className: sx(welcomeHeroStyle), "aria-label": "Welcome", children: [jsx("button", { type: "button", className: sx(welcomeCloseStyle), "aria-label": "Dismiss welcome", onClick: () => setHeroOpen(false), children: jsx(CloseIcon, { size: 20 }) }), welcomeHero] })), jsx("div", { className: sx(pageBannersStyle), children: jsx(PageBanners, { systemBanners: systemBanners, alertBanners: alertBanners, fullWidth: true, onDismiss: onBannerDismiss }) }), standingMessage && (jsx("section", { className: sx(standingMessageStyle), "aria-label": "Message", children: standingMessage })), jsxs("header", { className: sx(pageHeaderStyle$1), children: [jsxs("div", { children: [jsxs("h1", { children: [greeting, firstName ? `, ${firstName}` : ''] }), accountName && jsxs("p", { children: ["Here's your personalized travel overview for ", accountName, "."] })] }), jsx("div", { className: sx(pageActionsStyle), children: editMode ? jsxs(Fragment, { children: [jsxs("button", { type: "button", className: sx(outlineButtonStyle), onClick: () => setCatalogOpen(true), children: [jsx(PlusIcon$2, { size: 20 }), "Add card"] }), jsx("button", { type: "button", className: sx(textButtonStyle$1), onClick: onReset, children: "Reset to default" }), jsxs("button", { type: "button", className: sx(primaryButtonStyle), onClick: () => { setEditMode(false); setCatalogOpen(false); }, children: [jsx(CheckIcon$2, { size: 20 }), "Done"] })] }) : jsxs("button", { type: "button", className: sx(customizeButtonStyle), onClick: () => setEditMode(true), children: [jsx(SettingsIcon, { size: 20 }), "Customize Your Home Page"] }) })] }), editMode && jsxs("div", { className: sx(editBannerStyle), children: [jsx(EditIcon$2, { size: 20 }), jsxs("span", { children: [jsx("strong", { children: "Customizing your home page." }), " Drag cards to reorder, resize with S / M / L, or remove cards. Your layout saves automatically."] })] }), syncStatus === 'saving' && jsx("p", { className: sx(syncStatusStyle), "aria-live": "polite", children: "Saving layout\u2026" }), syncStatus === 'error' && jsx("p", { className: cx(sx(syncStatusStyle), sx(syncErrorStyle)), role: "alert", children: "Layout couldn't be saved. Changes are preserved locally." }), widgets.length ? jsx("div", { className: sx(gridStyle$2), children: widgets.map((widget, index) => jsx("div", { className: sx(sizeStyles[widget.size]), draggable: editMode, onDragStart: (event) => { if (!editMode)
32418
32491
  return; setDragFrom(index); const ghost = document.createElement('div'); ghost.className = sx(dragGhostStyle); document.body.appendChild(ghost); dragGhost.current = ghost; event.dataTransfer.setDragImage(ghost, 0, 0); }, onDragOver: (event) => event.preventDefault(), onDrop: () => { if (dragFrom !== null && dragFrom !== index)
32419
32492
  onReorder?.(dragFrom, index); setDragFrom(null); }, onDragEnd: () => { setDragFrom(null); dragGhost.current?.remove(); dragGhost.current = null; }, children: jsx(WidgetCard, { widget: widget, editMode: editMode, index: index, count: widgets.length, onRefresh: onRefresh, onRemove: onRemove, onResize: onResize, onReorder: onReorder, onTravelerRangeChange: onTravelerRangeChange, onNavigate: onNavigate }) }, widget.id)) }) : jsxs("div", { className: sx(emptyPageStyle), children: [jsx(PlusIcon$2, { size: 28 }), jsx("strong", { children: "Your home page is empty" }), jsx("span", { children: "Use \"Customize\" to add cards from the catalog." })] }), catalogOpen && jsxs(Fragment, { children: [jsx("button", { type: "button", className: sx(scrimStyle), "aria-label": "Close card catalog", onClick: () => setCatalogOpen(false) }), jsxs("aside", { className: sx(catalogStyle), role: "dialog", "aria-modal": "true", "aria-label": "Add cards", children: [jsxs("header", { children: [jsxs("div", { children: [jsx("h2", { children: "Add a card" }), jsx("p", { children: "Cards available to your role for this account" })] }), jsx("button", { type: "button", "aria-label": "Close card catalog", onClick: () => setCatalogOpen(false), children: jsx(CloseIcon, { size: 20 }) })] }), jsx("div", { className: sx(catalogBodyStyle), children: CATALOG.map((item) => jsxs("div", { className: sx(catalogItemStyle), children: [jsx("span", { className: sx(catalogIconStyle), children: jsx(WidgetIcon, { type: item.type }) }), jsxs("div", { children: [jsx("strong", { children: item.title }), jsx("span", { children: "Account" }), jsx("p", { children: item.description })] }), presentTypes.has(item.type) ? jsxs("span", { className: sx(addedStyle), children: [jsx(CheckIcon$2, { size: 16 }), "Added"] }) : jsxs("button", { type: "button", onClick: () => onAddWidget?.(item.type), children: [jsx(PlusIcon$2, { size: 16 }), "Add"] })] }, item.type)) }), jsx("footer", { children: "Each card can appear once on your home page." })] })] })] }));
32420
32493
  };
@@ -32427,7 +32500,7 @@ const DashboardPage = ({ greeting = 'Good morning', firstName, accountName, widg
32427
32500
  * object, and the single `@media (max-width: 767px)` block is split across the
32428
32501
  * nine objects it used to style.
32429
32502
  */
32430
- const pageStyle$h = {
32503
+ const pageStyle$i = {
32431
32504
  label: 'FeatureFlagManagementPage-pageStyle',
32432
32505
  maxWidth: 1440,
32433
32506
  margin: '0 auto',
@@ -32453,7 +32526,7 @@ const headerStyle$e = {
32453
32526
  '& h1': { fontSize: 36 },
32454
32527
  },
32455
32528
  };
32456
- const eyebrowStyle$1 = {
32529
+ const eyebrowStyle$2 = {
32457
32530
  label: 'FeatureFlagManagementPage-eyebrowStyle',
32458
32531
  margin: '0 0 8px',
32459
32532
  color: 'var(--color-primary, #0a53ef)',
@@ -33134,7 +33207,7 @@ const FeatureFlagManagementPage = ({ definitions, rules, targetOptions, loading
33134
33207
  const hasRuleActions = Boolean(onEditRule || onDeactivateRule);
33135
33208
  const currentUserSearchError = userSearchError ?? internalUserSearchError;
33136
33209
  const currentAudienceError = audienceError ?? internalAudienceError;
33137
- return (jsxs("div", { className: cx(sx(pageStyle$h), className), "data-test": "feature-flag-management-page", "aria-busy": busy, children: [jsxs("header", { className: sx(headerStyle$e), children: [jsxs("div", { children: [jsx("p", { className: sx(eyebrowStyle$1), children: "Administration \u00B7 System" }), jsx("h1", { children: "Feature Flags" }), jsx("p", { className: sx(descriptionStyle$4), children: "Review the immutable feature catalog and manage prioritized audience rules." })] }), onCreateRule && !editor && !loading && !error && hasActiveDefinitions && rules.length > 0 && (jsx(Button, { type: "button", leftIcon: jsx(PlusIcon$2, { size: 16 }), onClick: openCreate, disabled: busy, "data-test": "feature-flag-create-rule", children: "Create rule" }))] }), busy && (jsxs("div", { className: sx(submittingStyle), role: "status", "data-test": "feature-flag-submitting", children: [jsx(Spinner, { size: "sm", label: "Saving feature rule" }), jsx("span", { children: "Saving feature rule\u2026" })] })), loading && (jsxs("div", { className: sx(pageStateStyle), "data-test": "feature-flag-loading", children: [jsx(Spinner, { size: "lg", label: "Loading feature flags" }), jsx("p", { children: "Loading feature flags\u2026" })] })), !loading && error && (jsxs("div", { className: sx(pageStateStyle), "data-test": "feature-flag-error", children: [jsx(Alert, { variant: "error", title: "Feature flags could not be loaded", children: error }), onRetry && (jsx(Button, { type: "button", variant: "outline", onClick: onRetry, "data-test": "feature-flag-retry", children: "Try again" }))] })), !loading && !error && definitions.length === 0 && (jsx("div", { "data-test": "feature-flag-definitions-empty", children: jsx(EmptyState$1, { title: "No feature definitions", description: "Publish immutable feature definitions before creating audience rules.", icon: jsx(SettingsIcon, { size: 30 }), size: "lg" }) })), !loading && !error && definitions.length > 0 && (jsxs(Fragment, { children: [actionError && (jsx(Alert, { variant: "error", title: "Feature rule change failed", dismissible: true, onDismiss: () => setActionError(undefined), className: sx(actionErrorStyle), children: jsx("span", { "data-test": "feature-flag-action-error", children: actionError }) })), jsxs("section", { className: sx(catalogPanelStyle), "aria-labelledby": "feature-catalog-heading", children: [jsxs("div", { className: sx(sectionHeadingStyle), children: [jsxs("div", { children: [jsx("h2", { id: "feature-catalog-heading", children: "Feature catalog" }), jsx("p", { children: "Definitions and hierarchy are read-only in this view." })] }), jsxs(Badge, { size: "sm", children: [definitions.length, " definitions"] })] }), jsx("div", { className: sx(definitionListStyle), "data-test": "feature-flag-definitions", children: definitionRows.map(({ definition, depth }) => (jsxs("article", { className: cx(sx(definitionStyle), definition.isActive === false && sx(inactiveDefinitionStyle)), style: { marginInlineStart: `${depth * 24}px` }, "data-test": `feature-flag-definition-${definition.featureKey}`, "data-depth": depth, children: [jsxs("div", { className: sx(definitionCopyStyle), children: [jsxs("div", { className: sx(definitionTitleStyle), children: [jsx("strong", { children: definition.name }), jsx("code", { children: definition.featureKey })] }), jsx("p", { children: definition.description }), definition.isActive === false && (jsx("p", { className: sx(killSwitchStyle), children: "Kill switch active. Targeting rules cannot enable this feature." }))] }), jsxs("div", { className: sx(definitionBadgesStyle), children: [jsx(Badge, { variant: definition.isActive === false ? 'error' : 'success', size: "sm", children: definition.isActive === false ? 'Inactive kill switch' : 'Active definition' }), jsxs(Badge, { variant: definition.defaultEnabled ? 'success' : 'default', size: "sm", children: ["Default ", definition.defaultEnabled ? 'enabled' : 'disabled'] })] })] }, definition.featureKey))) })] }), editor && (jsxs("section", { className: sx(editorPanelStyle), "data-test": "feature-flag-rule-editor", children: [jsxs("div", { className: sx(sectionHeadingStyle), children: [jsxs("div", { children: [jsx("h2", { children: editor.mode === 'create' ? 'Create targeting rule' : 'Edit targeting rule' }), jsx("p", { children: "The most specific target wins, then account scope, then priority; deny wins an exact tie. Changes require an audit reason." })] }), editor.mode === 'edit' && (jsxs("code", { className: sx(versionStyle), children: ["Version ", editor.rule.rowVersion] }))] }), jsxs("form", { className: sx(ruleFormStyle), onSubmit: submitRule, noValidate: true, children: [jsx(Select, { label: "Feature", options: definitions.map((definition) => ({
33210
+ return (jsxs("div", { className: cx(sx(pageStyle$i), className), "data-test": "feature-flag-management-page", "aria-busy": busy, children: [jsxs("header", { className: sx(headerStyle$e), children: [jsxs("div", { children: [jsx("p", { className: sx(eyebrowStyle$2), children: "Administration \u00B7 System" }), jsx("h1", { children: "Feature Flags" }), jsx("p", { className: sx(descriptionStyle$4), children: "Review the immutable feature catalog and manage prioritized audience rules." })] }), onCreateRule && !editor && !loading && !error && hasActiveDefinitions && rules.length > 0 && (jsx(Button, { type: "button", leftIcon: jsx(PlusIcon$2, { size: 16 }), onClick: openCreate, disabled: busy, "data-test": "feature-flag-create-rule", children: "Create rule" }))] }), busy && (jsxs("div", { className: sx(submittingStyle), role: "status", "data-test": "feature-flag-submitting", children: [jsx(Spinner, { size: "sm", label: "Saving feature rule" }), jsx("span", { children: "Saving feature rule\u2026" })] })), loading && (jsxs("div", { className: sx(pageStateStyle), "data-test": "feature-flag-loading", children: [jsx(Spinner, { size: "lg", label: "Loading feature flags" }), jsx("p", { children: "Loading feature flags\u2026" })] })), !loading && error && (jsxs("div", { className: sx(pageStateStyle), "data-test": "feature-flag-error", children: [jsx(Alert, { variant: "error", title: "Feature flags could not be loaded", children: error }), onRetry && (jsx(Button, { type: "button", variant: "outline", onClick: onRetry, "data-test": "feature-flag-retry", children: "Try again" }))] })), !loading && !error && definitions.length === 0 && (jsx("div", { "data-test": "feature-flag-definitions-empty", children: jsx(EmptyState$1, { title: "No feature definitions", description: "Publish immutable feature definitions before creating audience rules.", icon: jsx(SettingsIcon, { size: 30 }), size: "lg" }) })), !loading && !error && definitions.length > 0 && (jsxs(Fragment, { children: [actionError && (jsx(Alert, { variant: "error", title: "Feature rule change failed", dismissible: true, onDismiss: () => setActionError(undefined), className: sx(actionErrorStyle), children: jsx("span", { "data-test": "feature-flag-action-error", children: actionError }) })), jsxs("section", { className: sx(catalogPanelStyle), "aria-labelledby": "feature-catalog-heading", children: [jsxs("div", { className: sx(sectionHeadingStyle), children: [jsxs("div", { children: [jsx("h2", { id: "feature-catalog-heading", children: "Feature catalog" }), jsx("p", { children: "Definitions and hierarchy are read-only in this view." })] }), jsxs(Badge, { size: "sm", children: [definitions.length, " definitions"] })] }), jsx("div", { className: sx(definitionListStyle), "data-test": "feature-flag-definitions", children: definitionRows.map(({ definition, depth }) => (jsxs("article", { className: cx(sx(definitionStyle), definition.isActive === false && sx(inactiveDefinitionStyle)), style: { marginInlineStart: `${depth * 24}px` }, "data-test": `feature-flag-definition-${definition.featureKey}`, "data-depth": depth, children: [jsxs("div", { className: sx(definitionCopyStyle), children: [jsxs("div", { className: sx(definitionTitleStyle), children: [jsx("strong", { children: definition.name }), jsx("code", { children: definition.featureKey })] }), jsx("p", { children: definition.description }), definition.isActive === false && (jsx("p", { className: sx(killSwitchStyle), children: "Kill switch active. Targeting rules cannot enable this feature." }))] }), jsxs("div", { className: sx(definitionBadgesStyle), children: [jsx(Badge, { variant: definition.isActive === false ? 'error' : 'success', size: "sm", children: definition.isActive === false ? 'Inactive kill switch' : 'Active definition' }), jsxs(Badge, { variant: definition.defaultEnabled ? 'success' : 'default', size: "sm", children: ["Default ", definition.defaultEnabled ? 'enabled' : 'disabled'] })] })] }, definition.featureKey))) })] }), editor && (jsxs("section", { className: sx(editorPanelStyle), "data-test": "feature-flag-rule-editor", children: [jsxs("div", { className: sx(sectionHeadingStyle), children: [jsxs("div", { children: [jsx("h2", { children: editor.mode === 'create' ? 'Create targeting rule' : 'Edit targeting rule' }), jsx("p", { children: "The most specific target wins, then account scope, then priority; deny wins an exact tie. Changes require an audit reason." })] }), editor.mode === 'edit' && (jsxs("code", { className: sx(versionStyle), children: ["Version ", editor.rule.rowVersion] }))] }), jsxs("form", { className: sx(ruleFormStyle), onSubmit: submitRule, noValidate: true, children: [jsx(Select, { label: "Feature", options: definitions.map((definition) => ({
33138
33211
  value: definition.featureKey,
33139
33212
  label: `${definition.name} · ${definition.featureKey}`,
33140
33213
  disabled: definition.isActive === false,
@@ -33675,7 +33748,7 @@ GroupTravelRequestPage.displayName = 'GroupTravelRequestPage';
33675
33748
  * split across the objects it styled: each `@media` lives inside the one style
33676
33749
  * it applies to, so a rule and its responsive override stay together.
33677
33750
  */
33678
- const pageStyle$g = {
33751
+ const pageStyle$h = {
33679
33752
  label: 'IndividualTravelPage-pageStyle',
33680
33753
  minHeight: '100%',
33681
33754
  padding: 24,
@@ -33699,7 +33772,7 @@ const headerStyle$d = {
33699
33772
  flexDirection: 'column',
33700
33773
  },
33701
33774
  };
33702
- const titleStyle$b = {
33775
+ const titleStyle$c = {
33703
33776
  label: 'IndividualTravelPage-titleStyle',
33704
33777
  margin: 0,
33705
33778
  color: 'var(--fg-1, #282828)',
@@ -34413,7 +34486,7 @@ const IndividualTravelPage = ({ trips, tabCounts, enabledTabs = ['current', 'pas
34413
34486
  : activeFilters
34414
34487
  ? 'No trips match the selected filters. Clear a filter or widen the date range.'
34415
34488
  : emptyMessage;
34416
- return (jsxs("div", { className: cx(sx(pageStyle$g), className), "data-test": "individual-travel-page", "aria-busy": loading || refreshing, children: [jsxs("div", { className: sx(headerStyle$d), children: [jsx("h1", { className: sx(titleStyle$b), children: "Individual & Small Group Travel" }), onCreateRequest && (jsx(Button
34489
+ return (jsxs("div", { className: cx(sx(pageStyle$h), className), "data-test": "individual-travel-page", "aria-busy": loading || refreshing, children: [jsxs("div", { className: sx(headerStyle$d), children: [jsx("h1", { className: sx(titleStyle$c), children: "Individual & Small Group Travel" }), onCreateRequest && (jsx(Button
34417
34490
  // Explicit: the atom has no default, and inside a host form a
34418
34491
  // bare <button> would submit it.
34419
34492
  , {
@@ -34439,7 +34512,7 @@ const IndividualTravelPage = ({ trips, tabCounts, enabledTabs = ['current', 'pas
34439
34512
  * the three columns and the narrow-screen tab strip — still comes from the
34440
34513
  * RequestFormLayout organism, and the blocks from the FormSection molecule.
34441
34514
  */
34442
- const pageStyle$f = {
34515
+ const pageStyle$g = {
34443
34516
  label: 'IndividualTravelRequestPage-pageStyle',
34444
34517
  color: 'var(--color-ink, #282828)',
34445
34518
  };
@@ -34533,14 +34606,14 @@ const pageHeaderStyle = {
34533
34606
  flexDirection: 'column',
34534
34607
  },
34535
34608
  };
34536
- const eyebrowStyle = {
34609
+ const eyebrowStyle$1 = {
34537
34610
  label: 'IndividualTravelRequestPage-eyebrowStyle',
34538
34611
  margin: '0 0 4px',
34539
34612
  color: 'var(--color-slate, #5c5c5c)',
34540
34613
  fontSize: 13,
34541
34614
  fontWeight: 600,
34542
34615
  };
34543
- const titleStyle$a = {
34616
+ const titleStyle$b = {
34544
34617
  label: 'IndividualTravelRequestPage-titleStyle',
34545
34618
  margin: 0,
34546
34619
  color: 'var(--color-ink, #282828)',
@@ -34879,17 +34952,17 @@ const choiceTextStyle = {
34879
34952
  },
34880
34953
  };
34881
34954
  /** `.travelerCard, .segmentCard` — one selector list, two homes. */
34882
- const cardStyle$2 = {
34955
+ const cardStyle$3 = {
34883
34956
  padding: 18,
34884
34957
  border: '1px solid var(--border-color, #ededed)',
34885
34958
  borderRadius: 9,
34886
34959
  background: 'var(--color-basecolor, #fafafa)',
34887
34960
  };
34888
34961
  const travelerCardStyle = {
34889
- label: 'IndividualTravelRequestPage-travelerCardStyle', ...cardStyle$2
34962
+ label: 'IndividualTravelRequestPage-travelerCardStyle', ...cardStyle$3
34890
34963
  };
34891
34964
  const segmentCardStyle$1 = {
34892
- label: 'IndividualTravelRequestPage-segmentCardStyle', ...cardStyle$2
34965
+ label: 'IndividualTravelRequestPage-segmentCardStyle', ...cardStyle$3
34893
34966
  };
34894
34967
  const cardHeaderStyle = {
34895
34968
  label: 'IndividualTravelRequestPage-cardHeaderStyle',
@@ -35907,9 +35980,9 @@ const IndividualTravelRequestFormPage = ({ currentTraveler, configuration, value
35907
35980
  }
35908
35981
  };
35909
35982
  if (loading) {
35910
- return (jsx(RequestFormLayout, { className: cx(sx(pageStyle$f), className), header: jsx(RequestFormHeader, { title: "Individual Travel Request" }), children: jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-form-loading", children: [jsx(Spinner, { label: "Loading travel request form" }), jsx("span", { children: "Loading request options\u2026" })] }) }));
35983
+ return (jsx(RequestFormLayout, { className: cx(sx(pageStyle$g), className), header: jsx(RequestFormHeader, { title: "Individual Travel Request" }), children: jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-form-loading", children: [jsx(Spinner, { label: "Loading travel request form" }), jsx("span", { children: "Loading request options\u2026" })] }) }));
35911
35984
  }
35912
- return (jsx("form", { ref: formRef, className: sx(formStyle), onSubmit: (event) => void handleSubmit(event), noValidate: true, "data-test": "individual-travel-request-form", "aria-busy": busy, children: jsxs(RequestFormLayout, { className: cx(sx(pageStyle$f), className), header: jsx(RequestFormHeader, { title: "Individual Travel Request", eventName: currentTraveler.displayName }), activePane: activePane, onPaneChange: setActivePane, mobileServices: availableServices.map((service) => (jsxs("button", { type: "button", "aria-pressed": activeService === service.key, onClick: () => navigateToService(service.key), "data-test": `individual-travel-request-mobile-service-${service.key}`, children: [service.icon, jsx("span", { children: service.label })] }, service.key))), sidebar: (jsxs("div", { "aria-label": "Travel types", "data-test": "individual-travel-request-service-sidebar", children: [jsx(ServiceToggleList, { services: availableServices, enabledServices: selectedServices, onToggle: (service, checked) => toggleService(service, checked), onClick: navigateToService, className: sx(serviceNavigationStyle), disabled: disabled }), jsxs("div", { className: sx(travelerRailStyle), children: [jsx("h3", { children: "Travelling" }), jsxs("p", { children: [jsx(UsersIcon$1, { size: 17 }), " ", travelerRailSummary] })] })] })), summary: (jsx(RequestSummary, { sections: summarySections, values: {}, dataTest: "individual-travel-request-summary" })), footer: (onCancel || onSubmit) ? (jsx(RequestFormFooter, { onPrevious: onCancel, submitsForm: Boolean(onSubmit), isFirstPage: true, isLastPage: true, isSubmitting: busy, previousText: "Cancel", nextText: submitLabel, previousButtonDataTest: "individual-travel-request-cancel", nextButtonDataTest: "individual-travel-request-submit" })) : undefined, children: [notice && jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-form-notice", children: jsx(Alert, { variant: "warning", children: notice }) }), error && (jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-form-error", children: jsxs(Alert, { variant: "error", title: "The request form needs attention", children: [jsx("div", { children: error }), onRetry && jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onRetry, "data-test": "individual-travel-request-form-retry", children: "Try again" })] }) })), readOnly && (jsx("p", { className: sx(readOnlyNoticeStyle), "data-test": "individual-travel-request-form-read-only", children: "Request submission is unavailable. Form fields are shown for reference only." })), (Object.keys(allErrors).length > 0 || submitError) && (jsxs("div", { ref: errorSummaryRef, className: sx(errorSummaryStyle), role: "alert", tabIndex: -1, "data-test": "individual-travel-request-form-validation", children: [jsx("h2", { children: "Review the request before submitting" }), submitError && jsx("p", { "data-test": "individual-travel-request-form-submit-error", children: submitError }), Object.keys(allErrors).length > 0 && jsx("ul", { children: Object.values(allErrors).map((message, index) => jsx("li", { children: message }, `${message}-${index}`)) })] })), activeService !== 'general' && !selectedServices[activeService] && (jsxs("div", { className: sx(mobileEnableStyle), "data-test": "individual-travel-request-mobile-enable", children: [jsxs("span", { children: ["Add ", SERVICE_LABELS[activeService], " to this request"] }), jsx(Toggle, { "aria-label": `Enable ${SERVICE_LABELS[activeService]}`, checked: false, onChange: () => enableFromStrip(activeService), size: "sm" })] })), jsxs(Section, { title: "Traveler information", description: "Tell the travel team who is traveling. Required fields are marked with an asterisk.", icon: jsx(UsersIcon$1, { size: 24 }), dataTest: "individual-travel-request-section-travelers", children: [jsxs("fieldset", { className: sx(choiceGroupStyle), children: [jsx("legend", { className: sx(legendStyle), children: "Travel for" }), jsxs("label", { className: sx(choiceStyle), children: [jsx("input", { type: "radio", name: "travelerType", value: "self", checked: resolvedValues.travelerType === 'self' || !configuration.allowOtherTravelers, disabled: disabled, onChange: () => commit({ ...resolvedValues, travelerType: 'self', travelers: [] }), "data-test": "individual-travel-request-traveler-self" }), jsxs("span", { className: sx(choiceTextStyle), children: [jsx("strong", { children: currentTraveler.displayName }), jsx("small", { children: currentTraveler.email || 'Authenticated traveler' })] })] }), configuration.allowOtherTravelers && (jsxs("label", { className: sx(choiceStyle), children: [jsx("input", { type: "radio", name: "travelerType", value: "other", checked: resolvedValues.travelerType === 'other', disabled: disabled, onChange: () => commit({
35985
+ return (jsx("form", { ref: formRef, className: sx(formStyle), onSubmit: (event) => void handleSubmit(event), noValidate: true, "data-test": "individual-travel-request-form", "aria-busy": busy, children: jsxs(RequestFormLayout, { className: cx(sx(pageStyle$g), className), header: jsx(RequestFormHeader, { title: "Individual Travel Request", eventName: currentTraveler.displayName }), activePane: activePane, onPaneChange: setActivePane, mobileServices: availableServices.map((service) => (jsxs("button", { type: "button", "aria-pressed": activeService === service.key, onClick: () => navigateToService(service.key), "data-test": `individual-travel-request-mobile-service-${service.key}`, children: [service.icon, jsx("span", { children: service.label })] }, service.key))), sidebar: (jsxs("div", { "aria-label": "Travel types", "data-test": "individual-travel-request-service-sidebar", children: [jsx(ServiceToggleList, { services: availableServices, enabledServices: selectedServices, onToggle: (service, checked) => toggleService(service, checked), onClick: navigateToService, className: sx(serviceNavigationStyle), disabled: disabled }), jsxs("div", { className: sx(travelerRailStyle), children: [jsx("h3", { children: "Travelling" }), jsxs("p", { children: [jsx(UsersIcon$1, { size: 17 }), " ", travelerRailSummary] })] })] })), summary: (jsx(RequestSummary, { sections: summarySections, values: {}, dataTest: "individual-travel-request-summary" })), footer: (onCancel || onSubmit) ? (jsx(RequestFormFooter, { onPrevious: onCancel, submitsForm: Boolean(onSubmit), isFirstPage: true, isLastPage: true, isSubmitting: busy, previousText: "Cancel", nextText: submitLabel, previousButtonDataTest: "individual-travel-request-cancel", nextButtonDataTest: "individual-travel-request-submit" })) : undefined, children: [notice && jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-form-notice", children: jsx(Alert, { variant: "warning", children: notice }) }), error && (jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-form-error", children: jsxs(Alert, { variant: "error", title: "The request form needs attention", children: [jsx("div", { children: error }), onRetry && jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onRetry, "data-test": "individual-travel-request-form-retry", children: "Try again" })] }) })), readOnly && (jsx("p", { className: sx(readOnlyNoticeStyle), "data-test": "individual-travel-request-form-read-only", children: "Request submission is unavailable. Form fields are shown for reference only." })), (Object.keys(allErrors).length > 0 || submitError) && (jsxs("div", { ref: errorSummaryRef, className: sx(errorSummaryStyle), role: "alert", tabIndex: -1, "data-test": "individual-travel-request-form-validation", children: [jsx("h2", { children: "Review the request before submitting" }), submitError && jsx("p", { "data-test": "individual-travel-request-form-submit-error", children: submitError }), Object.keys(allErrors).length > 0 && jsx("ul", { children: Object.values(allErrors).map((message, index) => jsx("li", { children: message }, `${message}-${index}`)) })] })), activeService !== 'general' && !selectedServices[activeService] && (jsxs("div", { className: sx(mobileEnableStyle), "data-test": "individual-travel-request-mobile-enable", children: [jsxs("span", { children: ["Add ", SERVICE_LABELS[activeService], " to this request"] }), jsx(Toggle, { "aria-label": `Enable ${SERVICE_LABELS[activeService]}`, checked: false, onChange: () => enableFromStrip(activeService), size: "sm" })] })), jsxs(Section, { title: "Traveler information", description: "Tell the travel team who is traveling. Required fields are marked with an asterisk.", icon: jsx(UsersIcon$1, { size: 24 }), dataTest: "individual-travel-request-section-travelers", children: [jsxs("fieldset", { className: sx(choiceGroupStyle), children: [jsx("legend", { className: sx(legendStyle), children: "Travel for" }), jsxs("label", { className: sx(choiceStyle), children: [jsx("input", { type: "radio", name: "travelerType", value: "self", checked: resolvedValues.travelerType === 'self' || !configuration.allowOtherTravelers, disabled: disabled, onChange: () => commit({ ...resolvedValues, travelerType: 'self', travelers: [] }), "data-test": "individual-travel-request-traveler-self" }), jsxs("span", { className: sx(choiceTextStyle), children: [jsx("strong", { children: currentTraveler.displayName }), jsx("small", { children: currentTraveler.email || 'Authenticated traveler' })] })] }), configuration.allowOtherTravelers && (jsxs("label", { className: sx(choiceStyle), children: [jsx("input", { type: "radio", name: "travelerType", value: "other", checked: resolvedValues.travelerType === 'other', disabled: disabled, onChange: () => commit({
35913
35986
  ...resolvedValues,
35914
35987
  travelerType: 'other',
35915
35988
  travelers: resolvedValues.travelers.length ? resolvedValues.travelers : [emptyTraveler()],
@@ -35981,7 +36054,7 @@ const IndividualTravelRequestDetailPage = ({ request, loading = false, error, no
35981
36054
  : request
35982
36055
  ? `Travel request ${request.requestId}`
35983
36056
  : 'Travel request';
35984
- return (jsxs("main", { className: cx(sx(pageStyle$f), className), "data-test": "individual-travel-request-detail", "aria-busy": loading, children: [jsxs("header", { className: sx(pageHeaderStyle), children: [jsxs("div", { children: [jsx("p", { className: sx(eyebrowStyle), children: "Individual travel" }), jsx("h1", { className: sx(titleStyle$a), children: title }), request && !loading && !error && (jsxs("div", { className: sx(detailMetaStyle), "data-test": "individual-travel-request-detail-meta", children: [jsxs("span", { children: ["Submitted ", jsx("time", { dateTime: request.submittedAt, children: formatDateTime$1(request.submittedAt) })] }), request.completedAt && jsxs("span", { children: ["Completed ", jsx("time", { dateTime: request.completedAt, children: formatDateTime$1(request.completedAt) })] })] }))] }), onBack && (jsx(Button, { type: "button", variant: "ghost", size: "sm", leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "individual-travel-request-detail-back", children: backLabel }))] }), jsxs("div", { className: sx(contentStyle$3), children: [loading && (jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-loading", children: [jsx(Spinner, { label: "Loading travel request" }), jsx("span", { children: "Loading request details\u2026" })] })), !loading && error && (jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-error", children: [jsx(Alert, { variant: "error", title: "The travel request could not be loaded", children: error }), onRetry && jsx(Button, { type: "button", variant: "secondary", onClick: onRetry, "data-test": "individual-travel-request-detail-retry", children: "Try again" })] })), !loading && !error && !request && (jsx("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-empty", children: jsx("p", { children: "No travel request was supplied." }) })), !loading && !error && request && (jsxs("div", { className: sx(formStyle), children: [notice && jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-detail-notice", children: jsx(Alert, { variant: "warning", children: notice }) }), jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-general", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Request information" }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Request number", dataTest: "individual-travel-request-detail-request-id", children: request.requestId }), jsx(DetailField, { label: "Traveler type", children: request.travelerType === 'self' ? 'Self' : 'Other traveler' }), jsx(DetailField, { label: "Submitted by", children: request.submittedBy?.name }), jsx(DetailField, { label: "Submitter email", children: request.submittedBy?.email }), request.submittedBy?.phone && jsx(DetailField, { label: "Submitter phone", children: request.submittedBy.phone }), request.additionalEmails && jsx(DetailField, { label: "Additional email addresses", children: request.additionalEmails })] })] }), jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-travelers", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Travelers" }) }), jsx("div", { className: sx(detailTableWrapStyle), children: jsxs("table", { className: sx(detailTableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Name" }), jsx("th", { scope: "col", children: "Date of birth" }), jsx("th", { scope: "col", children: "Gender" })] }) }), jsxs("tbody", { children: [request.travelers.map((traveler, index) => (jsxs("tr", { "data-test": `individual-travel-request-detail-traveler-${index + 1}`, children: [jsx("td", { children: travelerName(traveler) || '—' }), jsx("td", { children: formatDate(traveler.dateOfBirth) }), jsx("td", { children: traveler.gender || '—' })] }, `${travelerName(traveler)}-${index}`))), !request.travelers.length && jsx("tr", { children: jsx("td", { colSpan: 3, className: sx(emptyValueStyle), children: "No traveler details were supplied." }) })] })] }) })] }), Boolean(request.organizationAnswers?.length) && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-organization", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Organization information" }) }), jsx(AnswerList, { answers: request.organizationAnswers, prefix: "individual-travel-request-detail-organization-answer" })] })), Boolean(request.billingAnswers?.length) && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-billing", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Billing information" }) }), jsx(AnswerList, { answers: request.billingAnswers, prefix: "individual-travel-request-detail-billing-answer" })] })), request.airRequest && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-air", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsxs("div", { children: [jsx("h2", { className: sx(sectionTitleStyle$4), children: "Air Request" }), jsx("p", { className: sx(sectionDescriptionStyle), children: request.airRequest.tripType.replace('-', ' ') })] }) }), jsx("div", { className: sx(detailTableWrapStyle), children: jsxs("table", { className: sx(detailTableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "From" }), jsx("th", { scope: "col", children: "To" }), jsx("th", { scope: "col", children: "Depart" }), request.airRequest.tripType === 'round-trip' && jsx("th", { scope: "col", children: "Return" })] }) }), jsx("tbody", { children: request.airRequest.legs.map((leg, index) => (jsxs("tr", { "data-test": `individual-travel-request-detail-air-leg-${index + 1}`, children: [jsx("td", { children: leg.departureLocation }), jsx("td", { children: leg.arrivalLocation }), jsxs("td", { children: [formatDate(leg.departureDate), " \u00B7 ", leg.departureTime] }), request.airRequest?.tripType === 'round-trip' && jsxs("td", { children: [formatDate(leg.returnDate), " \u00B7 ", leg.returnTime || '—'] })] }, index))) })] }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Fare preference", children: request.airRequest.farePreference }), jsx(DetailField, { label: "Flight preference", children: request.airRequest.flightPreference }), jsx(DetailField, { label: "Preferred airline", children: request.airRequest.preferredAirline }), jsx(DetailField, { label: "Most important factor", children: request.airRequest.priority }), request.airRequest.details && jsx(DetailField, { label: "Air details", children: request.airRequest.details })] })] })), request.hotelRequest && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-hotel", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Hotel Request" }) }), jsx("div", { className: sx(detailTableWrapStyle), children: jsxs("table", { className: sx(detailTableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "City" }), jsx("th", { scope: "col", children: "Check in" }), jsx("th", { scope: "col", children: "Check out" })] }) }), jsx("tbody", { children: request.hotelRequest.legs.map((leg, index) => (jsxs("tr", { "data-test": `individual-travel-request-detail-hotel-leg-${index + 1}`, children: [jsx("td", { children: leg.city }), jsx("td", { children: formatDate(leg.checkInDate) }), jsx("td", { children: formatDate(leg.checkOutDate) })] }, index))) })] }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Bed preference", children: request.hotelRequest.bedPreference }), jsx(DetailField, { label: "Smoking preference", children: request.hotelRequest.smokingPreference }), jsx(DetailField, { label: "Preferred hotel", children: request.hotelRequest.preferredHotel })] })] })), request.carRequest && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-car", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Vehicle Rental Request" }) }), jsx("div", { className: sx(detailTableWrapStyle), children: jsxs("table", { className: sx(detailTableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Pickup" }), jsx("th", { scope: "col", children: "Pickup date" }), jsx("th", { scope: "col", children: "Drop-off" }), jsx("th", { scope: "col", children: "Drop-off date" })] }) }), jsx("tbody", { children: request.carRequest.legs.map((leg, index) => (jsxs("tr", { "data-test": `individual-travel-request-detail-car-leg-${index + 1}`, children: [jsxs("td", { children: [leg.pickupCity, leg.pickupLocation ? ` · ${leg.pickupLocation}` : ''] }), jsxs("td", { children: [formatDate(leg.pickupDate), " \u00B7 ", leg.pickupTime] }), jsx("td", { children: leg.dropoffLocation || leg.pickupCity }), jsxs("td", { children: [formatDate(leg.dropoffDate), " \u00B7 ", leg.dropoffTime] })] }, index))) })] }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Vehicle type", children: request.carRequest.vehicleType }), jsx(DetailField, { label: "Rental company", children: request.carRequest.rentalCompany }), jsx(DetailField, { label: "Flight number or tail number", children: request.carRequest.flightNumberOrTailNumber })] })] })), request.busRequest && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-bus", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Bus Request" }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Pickup city", children: request.busRequest.pickupCity }), jsx(DetailField, { label: "Pickup location", children: request.busRequest.pickupLocation }), jsx(DetailField, { label: "Pickup date and time", children: formatDateTime$1(request.busRequest.pickupDateTime) }), jsx(DetailField, { label: "Drop-off city", children: request.busRequest.dropoffCity }), jsx(DetailField, { label: "Drop-off location", children: request.busRequest.dropoffLocation }), jsx(DetailField, { label: "Drop-off date and time", children: formatDateTime$1(request.busRequest.dropoffDateTime) }), jsx(DetailField, { label: "Vehicle type", children: request.busRequest.vehicleType }), request.busRequest.specialRequests && jsx(DetailField, { label: "Bus requests", children: request.busRequest.specialRequests })] })] })), request.specialRequests && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-special-requests", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Additional requests" }) }), jsx("p", { children: request.specialRequests })] }))] }))] })] }));
36057
+ return (jsxs("main", { className: cx(sx(pageStyle$g), className), "data-test": "individual-travel-request-detail", "aria-busy": loading, children: [jsxs("header", { className: sx(pageHeaderStyle), children: [jsxs("div", { children: [jsx("p", { className: sx(eyebrowStyle$1), children: "Individual travel" }), jsx("h1", { className: sx(titleStyle$b), children: title }), request && !loading && !error && (jsxs("div", { className: sx(detailMetaStyle), "data-test": "individual-travel-request-detail-meta", children: [jsxs("span", { children: ["Submitted ", jsx("time", { dateTime: request.submittedAt, children: formatDateTime$1(request.submittedAt) })] }), request.completedAt && jsxs("span", { children: ["Completed ", jsx("time", { dateTime: request.completedAt, children: formatDateTime$1(request.completedAt) })] })] }))] }), onBack && (jsx(Button, { type: "button", variant: "ghost", size: "sm", leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "individual-travel-request-detail-back", children: backLabel }))] }), jsxs("div", { className: sx(contentStyle$3), children: [loading && (jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-loading", children: [jsx(Spinner, { label: "Loading travel request" }), jsx("span", { children: "Loading request details\u2026" })] })), !loading && error && (jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-error", children: [jsx(Alert, { variant: "error", title: "The travel request could not be loaded", children: error }), onRetry && jsx(Button, { type: "button", variant: "secondary", onClick: onRetry, "data-test": "individual-travel-request-detail-retry", children: "Try again" })] })), !loading && !error && !request && (jsx("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-empty", children: jsx("p", { children: "No travel request was supplied." }) })), !loading && !error && request && (jsxs("div", { className: sx(formStyle), children: [notice && jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-detail-notice", children: jsx(Alert, { variant: "warning", children: notice }) }), jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-general", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Request information" }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Request number", dataTest: "individual-travel-request-detail-request-id", children: request.requestId }), jsx(DetailField, { label: "Traveler type", children: request.travelerType === 'self' ? 'Self' : 'Other traveler' }), jsx(DetailField, { label: "Submitted by", children: request.submittedBy?.name }), jsx(DetailField, { label: "Submitter email", children: request.submittedBy?.email }), request.submittedBy?.phone && jsx(DetailField, { label: "Submitter phone", children: request.submittedBy.phone }), request.additionalEmails && jsx(DetailField, { label: "Additional email addresses", children: request.additionalEmails })] })] }), jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-travelers", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Travelers" }) }), jsx("div", { className: sx(detailTableWrapStyle), children: jsxs("table", { className: sx(detailTableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Name" }), jsx("th", { scope: "col", children: "Date of birth" }), jsx("th", { scope: "col", children: "Gender" })] }) }), jsxs("tbody", { children: [request.travelers.map((traveler, index) => (jsxs("tr", { "data-test": `individual-travel-request-detail-traveler-${index + 1}`, children: [jsx("td", { children: travelerName(traveler) || '—' }), jsx("td", { children: formatDate(traveler.dateOfBirth) }), jsx("td", { children: traveler.gender || '—' })] }, `${travelerName(traveler)}-${index}`))), !request.travelers.length && jsx("tr", { children: jsx("td", { colSpan: 3, className: sx(emptyValueStyle), children: "No traveler details were supplied." }) })] })] }) })] }), Boolean(request.organizationAnswers?.length) && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-organization", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Organization information" }) }), jsx(AnswerList, { answers: request.organizationAnswers, prefix: "individual-travel-request-detail-organization-answer" })] })), Boolean(request.billingAnswers?.length) && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-billing", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Billing information" }) }), jsx(AnswerList, { answers: request.billingAnswers, prefix: "individual-travel-request-detail-billing-answer" })] })), request.airRequest && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-air", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsxs("div", { children: [jsx("h2", { className: sx(sectionTitleStyle$4), children: "Air Request" }), jsx("p", { className: sx(sectionDescriptionStyle), children: request.airRequest.tripType.replace('-', ' ') })] }) }), jsx("div", { className: sx(detailTableWrapStyle), children: jsxs("table", { className: sx(detailTableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "From" }), jsx("th", { scope: "col", children: "To" }), jsx("th", { scope: "col", children: "Depart" }), request.airRequest.tripType === 'round-trip' && jsx("th", { scope: "col", children: "Return" })] }) }), jsx("tbody", { children: request.airRequest.legs.map((leg, index) => (jsxs("tr", { "data-test": `individual-travel-request-detail-air-leg-${index + 1}`, children: [jsx("td", { children: leg.departureLocation }), jsx("td", { children: leg.arrivalLocation }), jsxs("td", { children: [formatDate(leg.departureDate), " \u00B7 ", leg.departureTime] }), request.airRequest?.tripType === 'round-trip' && jsxs("td", { children: [formatDate(leg.returnDate), " \u00B7 ", leg.returnTime || '—'] })] }, index))) })] }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Fare preference", children: request.airRequest.farePreference }), jsx(DetailField, { label: "Flight preference", children: request.airRequest.flightPreference }), jsx(DetailField, { label: "Preferred airline", children: request.airRequest.preferredAirline }), jsx(DetailField, { label: "Most important factor", children: request.airRequest.priority }), request.airRequest.details && jsx(DetailField, { label: "Air details", children: request.airRequest.details })] })] })), request.hotelRequest && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-hotel", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Hotel Request" }) }), jsx("div", { className: sx(detailTableWrapStyle), children: jsxs("table", { className: sx(detailTableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "City" }), jsx("th", { scope: "col", children: "Check in" }), jsx("th", { scope: "col", children: "Check out" })] }) }), jsx("tbody", { children: request.hotelRequest.legs.map((leg, index) => (jsxs("tr", { "data-test": `individual-travel-request-detail-hotel-leg-${index + 1}`, children: [jsx("td", { children: leg.city }), jsx("td", { children: formatDate(leg.checkInDate) }), jsx("td", { children: formatDate(leg.checkOutDate) })] }, index))) })] }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Bed preference", children: request.hotelRequest.bedPreference }), jsx(DetailField, { label: "Smoking preference", children: request.hotelRequest.smokingPreference }), jsx(DetailField, { label: "Preferred hotel", children: request.hotelRequest.preferredHotel })] })] })), request.carRequest && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-car", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Vehicle Rental Request" }) }), jsx("div", { className: sx(detailTableWrapStyle), children: jsxs("table", { className: sx(detailTableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Pickup" }), jsx("th", { scope: "col", children: "Pickup date" }), jsx("th", { scope: "col", children: "Drop-off" }), jsx("th", { scope: "col", children: "Drop-off date" })] }) }), jsx("tbody", { children: request.carRequest.legs.map((leg, index) => (jsxs("tr", { "data-test": `individual-travel-request-detail-car-leg-${index + 1}`, children: [jsxs("td", { children: [leg.pickupCity, leg.pickupLocation ? ` · ${leg.pickupLocation}` : ''] }), jsxs("td", { children: [formatDate(leg.pickupDate), " \u00B7 ", leg.pickupTime] }), jsx("td", { children: leg.dropoffLocation || leg.pickupCity }), jsxs("td", { children: [formatDate(leg.dropoffDate), " \u00B7 ", leg.dropoffTime] })] }, index))) })] }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Vehicle type", children: request.carRequest.vehicleType }), jsx(DetailField, { label: "Rental company", children: request.carRequest.rentalCompany }), jsx(DetailField, { label: "Flight number or tail number", children: request.carRequest.flightNumberOrTailNumber })] })] })), request.busRequest && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-bus", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Bus Request" }) }), jsxs("dl", { className: sx(detailGridStyle), children: [jsx(DetailField, { label: "Pickup city", children: request.busRequest.pickupCity }), jsx(DetailField, { label: "Pickup location", children: request.busRequest.pickupLocation }), jsx(DetailField, { label: "Pickup date and time", children: formatDateTime$1(request.busRequest.pickupDateTime) }), jsx(DetailField, { label: "Drop-off city", children: request.busRequest.dropoffCity }), jsx(DetailField, { label: "Drop-off location", children: request.busRequest.dropoffLocation }), jsx(DetailField, { label: "Drop-off date and time", children: formatDateTime$1(request.busRequest.dropoffDateTime) }), jsx(DetailField, { label: "Vehicle type", children: request.busRequest.vehicleType }), request.busRequest.specialRequests && jsx(DetailField, { label: "Bus requests", children: request.busRequest.specialRequests })] })] })), request.specialRequests && (jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-special-requests", children: [jsx("div", { className: sx(sectionHeaderStyle), children: jsx("h2", { className: sx(sectionTitleStyle$4), children: "Additional requests" }) }), jsx("p", { children: request.specialRequests })] }))] }))] })] }));
35985
36058
  };
35986
36059
 
35987
36060
  /**
@@ -35993,7 +36066,7 @@ const IndividualTravelRequestDetailPage = ({ request, loading = false, error, no
35993
36066
  * the first place, and `'& p'` / `'& ul, & ol'` say what `:global` was working
35994
36067
  * around.
35995
36068
  */
35996
- const pageStyle$e = {
36069
+ const pageStyle$f = {
35997
36070
  label: 'InfoCenterPage-pageStyle',
35998
36071
  display: 'flex',
35999
36072
  flexDirection: 'column',
@@ -36038,7 +36111,7 @@ const headerTextStyle = {
36038
36111
  label: 'InfoCenterPage-headerTextStyle',
36039
36112
  flex: 1,
36040
36113
  };
36041
- const titleStyle$9 = {
36114
+ const titleStyle$a = {
36042
36115
  label: 'InfoCenterPage-titleStyle',
36043
36116
  fontSize: 'var(--fs-2xl)',
36044
36117
  lineHeight: 'var(--lh-2xl)',
@@ -36090,7 +36163,7 @@ const gridStyle = {
36090
36163
  gap: 'var(--space-4)',
36091
36164
  };
36092
36165
  /* Article card */
36093
- const cardStyle$1 = {
36166
+ const cardStyle$2 = {
36094
36167
  label: 'InfoCenterPage-cardStyle',
36095
36168
  position: 'relative',
36096
36169
  display: 'flex',
@@ -36240,7 +36313,7 @@ const CATEGORY_ORDER = ['Alert', 'General', 'Air', 'Car', 'Hotel', 'Policy', 'ST
36240
36313
  const ArticleCard = ({ article, isAdmin, onOpen, onEdit }) => {
36241
36314
  const meta = metaFor(article.category);
36242
36315
  const CategoryIcon = meta.icon;
36243
- return (jsxs("div", { className: cx(sx(cardStyle$1), meta.alert && sx(cardAlertStyle)), children: [jsxs("span", { className: cx(sx(categoryBadgeStyle), meta.alert && sx(categoryAlertStyle)), children: [jsx(CategoryIcon, { size: 13 }), meta.label] }), jsx("h3", { className: sx(cardTitleStyle), children: article.title }), article.body && jsx("p", { className: sx(cardBodyStyle), children: article.body }), jsxs("button", { type: "button", className: sx(readMoreStyle), onClick: () => onOpen(article), children: ["Read more", jsx(ChevronRightIcon$1, { size: 14 })] }), isAdmin && (jsx("button", { type: "button", className: sx(editButtonStyle), onClick: () => onEdit?.(article), title: "Edit article", "aria-label": "Edit article", children: jsx(EditIcon$2, { size: 14 }) }))] }));
36316
+ return (jsxs("div", { className: cx(sx(cardStyle$2), meta.alert && sx(cardAlertStyle)), children: [jsxs("span", { className: cx(sx(categoryBadgeStyle), meta.alert && sx(categoryAlertStyle)), children: [jsx(CategoryIcon, { size: 13 }), meta.label] }), jsx("h3", { className: sx(cardTitleStyle), children: article.title }), article.body && jsx("p", { className: sx(cardBodyStyle), children: article.body }), jsxs("button", { type: "button", className: sx(readMoreStyle), onClick: () => onOpen(article), children: ["Read more", jsx(ChevronRightIcon$1, { size: 14 })] }), isAdmin && (jsx("button", { type: "button", className: sx(editButtonStyle), onClick: () => onEdit?.(article), title: "Edit article", "aria-label": "Edit article", children: jsx(EditIcon$2, { size: 14 }) }))] }));
36244
36317
  };
36245
36318
  /**
36246
36319
  * InfoCenterPage - Info Center article browser
@@ -36293,7 +36366,7 @@ const InfoCenterPage = ({ title = 'Info Center', accountName, articles = [], sta
36293
36366
  };
36294
36367
  const modalMeta = modalArticle ? metaFor(modalArticle.category) : null;
36295
36368
  const ModalCategoryIcon = modalMeta?.icon;
36296
- return (jsxs("div", { className: cx(sx(pageStyle$e), className), children: [showBreadcrumb && (jsxs("nav", { className: sx(breadcrumbStyle$3), "aria-label": "Breadcrumb", children: [jsxs("a", { href: homeHref, children: [jsx(HomeIcon, { size: 14 }), "Home"] }), jsx("span", { children: "/" }), jsx("span", { children: "Info Center" })] })), jsxs("div", { className: sx(headerStyle$c), children: [jsxs("div", { className: sx(headerTextStyle), children: [jsx("h1", { className: sx(titleStyle$9), children: title }), accountName && (jsxs("p", { className: sx(subtitleStyle$3), children: ["Travel resources and program information for ", accountName, "."] }))] }), isAdmin && (jsxs(Button, { variant: "primary", size: "sm", onClick: onAddArticle, children: [jsx(PlusIcon$2, { size: 15 }), "Add Article"] }))] }), pageState === 'loading' && (jsxs("div", { className: sx(stateBlockStyle), children: [jsx(Spinner, { size: "md" }), jsx("span", { children: "Loading\u2026" })] })), pageState === 'error' && (jsxs("div", { className: cx(sx(stateBlockStyle), sx(stateErrorStyle)), children: [jsx(WarningIcon$1, { size: 28 }), jsx("p", { className: sx(stateTextStyle), children: "Unable to load Info Center resources." })] })), pageState === 'empty' && (jsxs("div", { className: sx(stateBlockStyle), children: [jsx(InfoIcon$1, { size: 28 }), jsx("p", { className: sx(stateTextStyle), children: "No resources available." })] })), pageState === 'data' && (jsxs(Fragment, { children: [jsx(TabStrip, { className: sx(tabsStyle$1), tabs: [
36369
+ return (jsxs("div", { className: cx(sx(pageStyle$f), className), children: [showBreadcrumb && (jsxs("nav", { className: sx(breadcrumbStyle$3), "aria-label": "Breadcrumb", children: [jsxs("a", { href: homeHref, children: [jsx(HomeIcon, { size: 14 }), "Home"] }), jsx("span", { children: "/" }), jsx("span", { children: "Info Center" })] })), jsxs("div", { className: sx(headerStyle$c), children: [jsxs("div", { className: sx(headerTextStyle), children: [jsx("h1", { className: sx(titleStyle$a), children: title }), accountName && (jsxs("p", { className: sx(subtitleStyle$3), children: ["Travel resources and program information for ", accountName, "."] }))] }), isAdmin && (jsxs(Button, { variant: "primary", size: "sm", onClick: onAddArticle, children: [jsx(PlusIcon$2, { size: 15 }), "Add Article"] }))] }), pageState === 'loading' && (jsxs("div", { className: sx(stateBlockStyle), children: [jsx(Spinner, { size: "md" }), jsx("span", { children: "Loading\u2026" })] })), pageState === 'error' && (jsxs("div", { className: cx(sx(stateBlockStyle), sx(stateErrorStyle)), children: [jsx(WarningIcon$1, { size: 28 }), jsx("p", { className: sx(stateTextStyle), children: "Unable to load Info Center resources." })] })), pageState === 'empty' && (jsxs("div", { className: sx(stateBlockStyle), children: [jsx(InfoIcon$1, { size: 28 }), jsx("p", { className: sx(stateTextStyle), children: "No resources available." })] })), pageState === 'data' && (jsxs(Fragment, { children: [jsx(TabStrip, { className: sx(tabsStyle$1), tabs: [
36297
36370
  { id: 'All', label: 'All', icon: jsx(GridIcon, { size: 15 }) },
36298
36371
  ...categories.map((cat) => {
36299
36372
  const m = metaFor(cat);
@@ -36317,7 +36390,7 @@ const InfoCenterPage = ({ title = 'Info Center', accountName, articles = [], sta
36317
36390
  * between two module classes (`.costTotal .costLabel/.costValue`) becomes
36318
36391
  * `costTotalTextStyle` — see the note there.
36319
36392
  */
36320
- const pageStyle$d = {
36393
+ const pageStyle$e = {
36321
36394
  label: 'ItineraryPage-pageStyle',
36322
36395
  display: 'flex',
36323
36396
  flexDirection: 'column',
@@ -36767,13 +36840,13 @@ const ItineraryPage = ({ tripName, recordLocator, travelers, startDate, endDate,
36767
36840
  const agentCard = agent && (jsxs("section", { className: sx(agentCardStyle), "aria-label": "Your travel team", children: [jsx("div", { className: sx(agentHeaderStyle), children: jsx("h2", { className: sx(agentTitleStyle), children: "Your Travel Team" }) }), jsxs("div", { className: sx(agentRowStyle), children: [jsxs("div", { className: sx(agentInfoStyle), children: [jsx("p", { className: sx(agentNameStyle), children: agent.name }), agent.role && jsx("p", { className: sx(agentRoleStyle), children: agent.role })] }), jsxs("ul", { className: sx(agentLinksStyle), children: [agent.email && (jsx(AgentContact, { icon: jsx(MailIcon, { size: 16 }), label: "Email", children: jsx("a", { className: sx(agentLinkStyle), href: `mailto:${agent.email}`, children: agent.email }) })), agent.businessHours && (jsx(AgentContact, { icon: jsx(CalendarIcon$1, { size: 16 }), label: "Business Hours", children: agent.businessHours })), agent.tollFreeNumber && (jsx(AgentContact, { icon: jsx(PhoneIcon, { size: 16 }), label: "Toll Free Number", children: jsx("a", { className: sx(agentLinkStyle), href: telHref(agent.tollFreeNumber), children: agent.tollFreeNumber }) })), agent.afterHoursPhone && (jsxs(AgentContact, { icon: jsx(HeadsetIcon, { size: 16 }), label: "After-Hours/Emergency Service", children: [jsx("a", { className: sx(agentLinkStyle), href: telHref(agent.afterHoursPhone), children: agent.afterHoursPhone }), agent.afterHoursNote && jsxs(Fragment, { children: [" ", agent.afterHoursNote] })] }))] })] })] }));
36768
36841
  const titleRow = (jsxs("div", { className: sx(titleRowStyle), children: [jsx("h2", { className: sx(sectionTitleStyle$3), children: "Air Invoice Details" }), showStatus && jsx(StatusBadge, { status: badge.variant, label: badge.label })] }));
36769
36842
  const actions = showActions && (jsxs("div", { className: sx(actionsStyle$1), "aria-label": "Itinerary actions", children: [onPrint && jsx(Button, { type: "button", variant: "secondary", size: "sm", leftIcon: jsx(PrinterIcon, { size: 16 }), "data-test": "itinerary-print", onClick: onPrint, children: "Print" }), onEmail && jsx(Button, { type: "button", variant: "secondary", size: "sm", leftIcon: jsx(MailIcon, { size: 16 }), "data-test": "itinerary-email", onClick: onEmail, children: "Email" }), onAddToCalendar && jsx(Button, { type: "button", variant: "secondary", size: "sm", leftIcon: jsx(CalendarIcon$1, { size: 16 }), "data-test": "itinerary-add-to-calendar", onClick: onAddToCalendar, children: "Add to calendar" }), onDownloadInvoice && jsx(Button, { type: "button", variant: "secondary", size: "sm", leftIcon: jsx(DocumentIcon, { size: 16 }), "data-test": "itinerary-download-invoice", onClick: onDownloadInvoice, children: "Invoice PDF" })] }));
36770
- return (jsxs("div", { className: cx(sx(pageStyle$d), className), "data-test": "itinerary-page", children: [jsx(PageHeaderSubsection, { sectionName: sectionName, pageName: pageName ?? (travelers.length > 0 ? `Itinerary for ${itineraryPageName(travelers)}` : 'Itinerary'), meta: startDate && endDate ? jsx(TravelDateRange, { startDate: startDate, endDate: endDate }) : undefined, onBack: onBack, backLabel: backLabel }), !showInvoice && notices, !showInvoice && agentCard, showInvoice ? (jsxs("section", { className: sx(invoiceSectionStyle), "aria-label": "Booking and invoice", children: [jsxs("div", { className: sx(invoiceActionsStyle), children: [jsx(Segment, { size: "sm", options: VIEW_OPTIONS, value: view, onChange: changeView, "aria-label": "Itinerary view" }), actions] }), !itineraryOnly && notices, !itineraryOnly && agentCard, !itineraryOnly && bookingCard, !itineraryOnly && invoice && jsx(AirInvoiceCard, { ...invoice, title: "Air Invoice Details" })] })) : (jsxs("header", { className: sx(headerStyle$b), children: [jsxs("div", { className: sx(headerMainStyle$1), children: [titleRow, jsxs("dl", { className: sx(factsStyle$1), children: [recordLocator && (jsxs("div", { className: sx(factStyle), children: [jsx("dt", { className: sx(factLabelStyle), children: "Confirmation" }), jsx("dd", { className: cx(sx(factValueStyle), sx(monoStyle$1)), children: recordLocator })] })), startDate && endDate && (jsxs("div", { className: sx(factStyle), children: [jsx("dt", { className: sx(factLabelStyle), children: "Travel dates" }), jsx("dd", { className: sx(factValueStyle), children: formatItineraryDateRange(startDate, endDate) })] })), travelers.length > 0 && (jsxs("div", { className: sx(factStyle), children: [jsx("dt", { className: sx(factLabelStyle), children: travelers.length === 1 ? 'Traveler' : 'Travelers' }), jsx("dd", { className: sx(factValueStyle), title: travelers.join(', '), children: travelerLabel })] })), sportCode && (jsxs("div", { className: sx(factStyle), children: [jsx("dt", { className: sx(factLabelStyle), children: "Program" }), jsx("dd", { className: sx(factValueStyle), children: sportCode })] }))] })] }), actions] })), !showInvoice && bookingCard, !itineraryOnly && travelers.length > 1 && (jsxs("section", { className: sx(travelersStyle), "aria-label": "Travelers on this itinerary", children: [jsx("h2", { className: sx(sectionTitleStyle$3), children: "Travelers" }), jsx("ul", { className: sx(travelerListStyle), children: travelers.map((traveler) => jsx("li", { className: sx(travelerChipStyle), children: traveler }, traveler)) })] })), !itineraryOnly && !loading && !error && notice && (jsx("div", { "data-test": "itinerary-notice", children: jsx(Alert, { variant: "warning", title: "Additional booking details", children: notice }) })), jsxs("div", { className: sx(bodyStyle$1), children: [jsx("div", { className: sx(mainStyle$1), children: jsxs("div", { "data-test": loading ? 'itinerary-loading' : error ? 'itinerary-error' : undefined, children: [jsx(ItineraryTimeline, { segments: segments, loading: loading, error: error, onCheckIn: onCheckIn, showTypeTabs: true }), error && onRetry && (jsx("div", { className: sx(retryRowStyle), children: jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: onRetry, "data-test": "itinerary-retry", children: "Try again" }) }))] }) }), !loading && !error && (closingBanners.length > 0 || closingNotes) && (jsxs("div", { className: sx(noticesStyle), "data-test": "itinerary-closing", children: [closingBanners.length > 0 && jsx(PageBanners, { className: sx(bannersStyle), systemBanners: closingBanners, alertBanners: [] }), closingNotes && jsx("div", { className: sx(closingNotesStyle), children: closingNotes })] }))] })] }));
36843
+ return (jsxs("div", { className: cx(sx(pageStyle$e), className), "data-test": "itinerary-page", children: [jsx(PageHeaderSubsection, { sectionName: sectionName, pageName: pageName ?? (travelers.length > 0 ? `Itinerary for ${itineraryPageName(travelers)}` : 'Itinerary'), meta: startDate && endDate ? jsx(TravelDateRange, { startDate: startDate, endDate: endDate }) : undefined, onBack: onBack, backLabel: backLabel }), !showInvoice && notices, !showInvoice && agentCard, showInvoice ? (jsxs("section", { className: sx(invoiceSectionStyle), "aria-label": "Booking and invoice", children: [jsxs("div", { className: sx(invoiceActionsStyle), children: [jsx(Segment, { size: "sm", options: VIEW_OPTIONS, value: view, onChange: changeView, "aria-label": "Itinerary view" }), actions] }), !itineraryOnly && notices, !itineraryOnly && agentCard, !itineraryOnly && bookingCard, !itineraryOnly && invoice && jsx(AirInvoiceCard, { ...invoice, title: "Air Invoice Details" })] })) : (jsxs("header", { className: sx(headerStyle$b), children: [jsxs("div", { className: sx(headerMainStyle$1), children: [titleRow, jsxs("dl", { className: sx(factsStyle$1), children: [recordLocator && (jsxs("div", { className: sx(factStyle), children: [jsx("dt", { className: sx(factLabelStyle), children: "Confirmation" }), jsx("dd", { className: cx(sx(factValueStyle), sx(monoStyle$1)), children: recordLocator })] })), startDate && endDate && (jsxs("div", { className: sx(factStyle), children: [jsx("dt", { className: sx(factLabelStyle), children: "Travel dates" }), jsx("dd", { className: sx(factValueStyle), children: formatItineraryDateRange(startDate, endDate) })] })), travelers.length > 0 && (jsxs("div", { className: sx(factStyle), children: [jsx("dt", { className: sx(factLabelStyle), children: travelers.length === 1 ? 'Traveler' : 'Travelers' }), jsx("dd", { className: sx(factValueStyle), title: travelers.join(', '), children: travelerLabel })] })), sportCode && (jsxs("div", { className: sx(factStyle), children: [jsx("dt", { className: sx(factLabelStyle), children: "Program" }), jsx("dd", { className: sx(factValueStyle), children: sportCode })] }))] })] }), actions] })), !showInvoice && bookingCard, !itineraryOnly && travelers.length > 1 && (jsxs("section", { className: sx(travelersStyle), "aria-label": "Travelers on this itinerary", children: [jsx("h2", { className: sx(sectionTitleStyle$3), children: "Travelers" }), jsx("ul", { className: sx(travelerListStyle), children: travelers.map((traveler) => jsx("li", { className: sx(travelerChipStyle), children: traveler }, traveler)) })] })), !itineraryOnly && !loading && !error && notice && (jsx("div", { "data-test": "itinerary-notice", children: jsx(Alert, { variant: "warning", title: "Additional booking details", children: notice }) })), jsxs("div", { className: sx(bodyStyle$1), children: [jsx("div", { className: sx(mainStyle$1), children: jsxs("div", { "data-test": loading ? 'itinerary-loading' : error ? 'itinerary-error' : undefined, children: [jsx(ItineraryTimeline, { segments: segments, loading: loading, error: error, onCheckIn: onCheckIn, showTypeTabs: true }), error && onRetry && (jsx("div", { className: sx(retryRowStyle), children: jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: onRetry, "data-test": "itinerary-retry", children: "Try again" }) }))] }) }), !loading && !error && (closingBanners.length > 0 || closingNotes) && (jsxs("div", { className: sx(noticesStyle), "data-test": "itinerary-closing", children: [closingBanners.length > 0 && jsx(PageBanners, { className: sx(bannersStyle), systemBanners: closingBanners, alertBanners: [] }), closingNotes && jsx("div", { className: sx(closingNotesStyle), children: closingNotes })] }))] })] }));
36771
36844
  };
36772
36845
  ItineraryPage.displayName = 'ItineraryPage';
36773
36846
 
36774
36847
  /** NotFoundPage's compiled rules. A straight translation — nothing in the
36775
36848
  * stylesheet overlapped, so no specificity work was needed. */
36776
- const pageStyle$c = {
36849
+ const pageStyle$d = {
36777
36850
  label: 'NotFoundPage-pageStyle',
36778
36851
  display: 'flex',
36779
36852
  alignItems: 'center',
@@ -36782,7 +36855,7 @@ const pageStyle$c = {
36782
36855
  padding: 'var(--space-4)',
36783
36856
  backgroundColor: 'var(--color-gray-100)',
36784
36857
  };
36785
- const cardStyle = {
36858
+ const cardStyle$1 = {
36786
36859
  label: 'NotFoundPage-cardStyle',
36787
36860
  width: '100%',
36788
36861
  maxWidth: 400,
@@ -36811,7 +36884,7 @@ const errorCodeStyle = {
36811
36884
  color: 'var(--color-gray-800)',
36812
36885
  margin: '0 0 var(--space-4) 0',
36813
36886
  };
36814
- const titleStyle$8 = {
36887
+ const titleStyle$9 = {
36815
36888
  label: 'NotFoundPage-titleStyle',
36816
36889
  fontSize: 'var(--text-xl)',
36817
36890
  fontWeight: 'var(--font-medium)',
@@ -36840,13 +36913,13 @@ const DefaultIllustration = () => (jsxs("svg", { width: "120", height: "120", vi
36840
36913
  * - Optional illustration
36841
36914
  */
36842
36915
  const NotFoundPage = ({ errorCode = '404', title = 'Page Not Found', message = 'The page you are looking for does not exist or you do not have permission to access it.', action, illustration, className = '', }) => {
36843
- const pageClasses = cx(sx(pageStyle$c), className);
36844
- return (jsx("div", { className: pageClasses, children: jsxs("div", { className: sx(cardStyle), children: [jsx("div", { className: sx(illustrationStyle), children: illustration || jsx(DefaultIllustration, {}) }), jsx("h1", { className: sx(errorCodeStyle), children: errorCode }), jsx("h2", { className: sx(titleStyle$8), children: title }), jsx("p", { className: sx(messageStyle), children: message }), action && (jsx("div", { className: sx(actionStyle), children: action }))] }) }));
36916
+ const pageClasses = cx(sx(pageStyle$d), className);
36917
+ return (jsx("div", { className: pageClasses, children: jsxs("div", { className: sx(cardStyle$1), children: [jsx("div", { className: sx(illustrationStyle), children: illustration || jsx(DefaultIllustration, {}) }), jsx("h1", { className: sx(errorCodeStyle), children: errorCode }), jsx("h2", { className: sx(titleStyle$9), children: title }), jsx("p", { className: sx(messageStyle), children: message }), action && (jsx("div", { className: sx(actionStyle), children: action }))] }) }));
36845
36918
  };
36846
36919
  NotFoundPage.displayName = 'NotFoundPage';
36847
36920
 
36848
36921
  /** OffFleetLearnedExamplesPage's compiled rules — flat, no specificity ladder. */
36849
- const pageStyle$b = {
36922
+ const pageStyle$c = {
36850
36923
  label: 'OffFleetLearnedExamplesPage-pageStyle',
36851
36924
  display: 'flex',
36852
36925
  flexDirection: 'column',
@@ -36862,7 +36935,7 @@ const headerStyle$a = {
36862
36935
  flexDirection: 'column',
36863
36936
  gap: 'var(--space-2)',
36864
36937
  };
36865
- const titleStyle$7 = {
36938
+ const titleStyle$8 = {
36866
36939
  label: 'OffFleetLearnedExamplesPage-titleStyle',
36867
36940
  margin: 0,
36868
36941
  color: 'var(--fg-1)',
@@ -36941,7 +37014,7 @@ const pairTitleStyle = {
36941
37014
  letterSpacing: '0.06em',
36942
37015
  textTransform: 'uppercase',
36943
37016
  };
36944
- const codeStyle = {
37017
+ const codeStyle$1 = {
36945
37018
  label: 'OffFleetLearnedExamplesPage-codeStyle',
36946
37019
  maxHeight: 260,
36947
37020
  margin: 0,
@@ -36966,7 +37039,7 @@ const OFF_FLEET_LEARNED_EMPTY_COPY = 'The corpus starts empty and only /api/Repr
36966
37039
  * Learned examples — the corrections corpus. The empty state explains the mechanism
36967
37040
  * rather than apologising, because an empty corpus is the correct starting state.
36968
37041
  */
36969
- const OffFleetLearnedExamplesPage = ({ examples = [], onOpenExample, className = '', }) => (jsxs("div", { className: cx(sx(pageStyle$b), className), "data-test": "off-fleet-learned-examples-page", children: [jsxs("header", { className: sx(headerStyle$a), children: [jsx("h1", { className: sx(titleStyle$7), children: "Learned examples" }), jsx("p", { className: sx(descriptionStyle$3), children: OFF_FLEET_LEARNED_DESCRIPTION })] }), examples.length === 0 ? (jsx(EmptyState$1, { title: "No examples yet", description: OFF_FLEET_LEARNED_EMPTY_COPY, icon: jsx(LightbulbIcon, { size: 32 }) })) : (jsx("ul", { className: sx(examplesStyle), children: examples.map((example) => (jsxs("li", { className: sx(exampleStyle), "data-test": "off-fleet-learned-example", children: [jsxs("div", { className: sx(exampleHeaderStyle), children: [jsx("span", { className: sx(operatorStyle), children: example.operator }), jsxs("span", { className: sx(metaStyle), children: [example.sourceFileName, " \u00B7 learned ", example.learnedLabel] }), onOpenExample && (jsx(Button, { variant: "outline", size: "sm", className: sx(openButtonStyle), onClick: () => onOpenExample(example.id), "data-test": "off-fleet-open-example", children: "Open" }))] }), jsxs("div", { className: sx(pairStyle), children: [jsxs("div", { className: sx(pairSideStyle), children: [jsx("h2", { className: sx(pairTitleStyle), children: "Raw text" }), jsx("pre", { className: sx(codeStyle), "data-test": "off-fleet-example-raw", children: example.rawText })] }), jsxs("div", { className: sx(pairSideStyle), children: [jsx("h2", { className: sx(pairTitleStyle), children: "Corrected JSON" }), jsx("pre", { className: sx(codeStyle), "data-test": "off-fleet-example-json", children: example.correctedJson })] })] })] }, example.id))) }))] }));
37042
+ const OffFleetLearnedExamplesPage = ({ examples = [], onOpenExample, className = '', }) => (jsxs("div", { className: cx(sx(pageStyle$c), className), "data-test": "off-fleet-learned-examples-page", children: [jsxs("header", { className: sx(headerStyle$a), children: [jsx("h1", { className: sx(titleStyle$8), children: "Learned examples" }), jsx("p", { className: sx(descriptionStyle$3), children: OFF_FLEET_LEARNED_DESCRIPTION })] }), examples.length === 0 ? (jsx(EmptyState$1, { title: "No examples yet", description: OFF_FLEET_LEARNED_EMPTY_COPY, icon: jsx(LightbulbIcon, { size: 32 }) })) : (jsx("ul", { className: sx(examplesStyle), children: examples.map((example) => (jsxs("li", { className: sx(exampleStyle), "data-test": "off-fleet-learned-example", children: [jsxs("div", { className: sx(exampleHeaderStyle), children: [jsx("span", { className: sx(operatorStyle), children: example.operator }), jsxs("span", { className: sx(metaStyle), children: [example.sourceFileName, " \u00B7 learned ", example.learnedLabel] }), onOpenExample && (jsx(Button, { variant: "outline", size: "sm", className: sx(openButtonStyle), onClick: () => onOpenExample(example.id), "data-test": "off-fleet-open-example", children: "Open" }))] }), jsxs("div", { className: sx(pairStyle), children: [jsxs("div", { className: sx(pairSideStyle), children: [jsx("h2", { className: sx(pairTitleStyle), children: "Raw text" }), jsx("pre", { className: sx(codeStyle$1), "data-test": "off-fleet-example-raw", children: example.rawText })] }), jsxs("div", { className: sx(pairSideStyle), children: [jsx("h2", { className: sx(pairTitleStyle), children: "Corrected JSON" }), jsx("pre", { className: sx(codeStyle$1), "data-test": "off-fleet-example-json", children: example.correctedJson })] })] })] }, example.id))) }))] }));
36970
37043
  OffFleetLearnedExamplesPage.displayName = 'OffFleetLearnedExamplesPage';
36971
37044
 
36972
37045
  /**
@@ -36975,7 +37048,7 @@ OffFleetLearnedExamplesPage.displayName = 'OffFleetLearnedExamplesPage';
36975
37048
  * One rule per element, no shared properties between them, so no selector
36976
37049
  * needed doubling on the way across.
36977
37050
  */
36978
- const pageStyle$a = {
37051
+ const pageStyle$b = {
36979
37052
  label: 'OffFleetReviewQueuePage-pageStyle',
36980
37053
  display: 'flex',
36981
37054
  flexDirection: 'column',
@@ -36991,7 +37064,7 @@ const headerStyle$9 = {
36991
37064
  flexDirection: 'column',
36992
37065
  gap: 'var(--space-2)',
36993
37066
  };
36994
- const titleStyle$6 = {
37067
+ const titleStyle$7 = {
36995
37068
  label: 'OffFleetReviewQueuePage-titleStyle',
36996
37069
  margin: 0,
36997
37070
  color: 'var(--fg-1)',
@@ -37138,7 +37211,7 @@ const OffFleetReviewQueuePage = ({ submissions, counts, onReview, onOpenRawText,
37138
37211
  render: (_value, submission) => (jsx(Button, { size: "sm", onClick: () => onReview?.(submission.id), "data-test": "off-fleet-review", children: "Review" })),
37139
37212
  },
37140
37213
  ];
37141
- return (jsxs("div", { className: cx(sx(pageStyle$a), className), "data-test": "off-fleet-review-queue-page", children: [jsxs("header", { className: sx(headerStyle$9), children: [jsx("h1", { className: sx(titleStyle$6), children: "Review queue" }), jsx("p", { className: sx(descriptionStyle$2), children: OFF_FLEET_QUEUE_DESCRIPTION })] }), jsxs("div", { className: sx(statsStyle), "data-test": "off-fleet-stats", children: [jsx(Metric, { label: "Needs review", value: tally['needs-review'] }), jsx(Metric, { label: "Received", value: tally.received }), jsx(Metric, { label: "Processing", value: tally.processing }), jsx(Metric, { label: "Parsed", value: tally.parsed }), jsx(Metric, { label: "All submissions", value: tally.all })] }), jsx(Table, { columns: columns, data: submissions, rowKey: "id", loading: loading, emptyContent: jsx(EmptyState$1, { size: "sm", title: "Nothing waiting on review", description: "Submissions land here only when the parser cannot reconcile a quote against a Trip segment. An empty queue means every off-fleet quote matched." }) })] }));
37214
+ return (jsxs("div", { className: cx(sx(pageStyle$b), className), "data-test": "off-fleet-review-queue-page", children: [jsxs("header", { className: sx(headerStyle$9), children: [jsx("h1", { className: sx(titleStyle$7), children: "Review queue" }), jsx("p", { className: sx(descriptionStyle$2), children: OFF_FLEET_QUEUE_DESCRIPTION })] }), jsxs("div", { className: sx(statsStyle), "data-test": "off-fleet-stats", children: [jsx(Metric, { label: "Needs review", value: tally['needs-review'] }), jsx(Metric, { label: "Received", value: tally.received }), jsx(Metric, { label: "Processing", value: tally.processing }), jsx(Metric, { label: "Parsed", value: tally.parsed }), jsx(Metric, { label: "All submissions", value: tally.all })] }), jsx(Table, { columns: columns, data: submissions, rowKey: "id", loading: loading, emptyContent: jsx(EmptyState$1, { size: "sm", title: "Nothing waiting on review", description: "Submissions land here only when the parser cannot reconcile a quote against a Trip segment. An empty queue means every off-fleet quote matched." }) })] }));
37142
37215
  };
37143
37216
  OffFleetReviewQueuePage.displayName = 'OffFleetReviewQueuePage';
37144
37217
 
@@ -37151,7 +37224,7 @@ OffFleetReviewQueuePage.displayName = 'OffFleetReviewQueuePage';
37151
37224
  * `.section` together, is now split across the two style objects it applied to
37152
37225
  * — an object owns every rule that targets it.
37153
37226
  */
37154
- const pageStyle$9 = {
37227
+ const pageStyle$a = {
37155
37228
  label: 'OffFleetSubmissionDetailPage-pageStyle',
37156
37229
  display: 'flex',
37157
37230
  flexDirection: 'column',
@@ -37184,7 +37257,7 @@ const headerStyle$8 = {
37184
37257
  flexDirection: 'column',
37185
37258
  gap: 'var(--space-1)',
37186
37259
  };
37187
- const titleStyle$5 = {
37260
+ const titleStyle$6 = {
37188
37261
  label: 'OffFleetSubmissionDetailPage-titleStyle',
37189
37262
  margin: 0,
37190
37263
  color: 'var(--fg-1)',
@@ -37506,13 +37579,13 @@ const OffFleetSubmissionDetailPage = ({ submissionId, fileName, statusLabel = 'N
37506
37579
  target?.querySelector('input')?.focus();
37507
37580
  };
37508
37581
  const blocked = Boolean(blockedReason);
37509
- return (jsxs("div", { className: cx(sx(pageStyle$9), className), "data-test": "off-fleet-submission-detail-page", children: [jsxs("div", { className: sx(topRowStyle), children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$2), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "off-fleet-detail-back", children: backLabel })), jsx(StatusBadge, { status: "in-review", label: statusLabel })] }), jsxs("header", { className: sx(headerStyle$8), children: [jsx("h1", { className: sx(titleStyle$5), children: fileName }), jsx("p", { className: sx(subtitleStyle$2), children: submissionId })] }), jsx(Alert, { variant: "warning", title: "Why this needs review", children: jsx("span", { className: sx(reasonStyle), "data-test": "off-fleet-detail-reason", children: failureReason }) }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Source document", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Source document" }), jsx("p", { className: sx(sectionHelpStyle$1), children: "Text the parser actually read \u2014 OCR damage included." }), jsx("pre", { className: sx(rawTextStyle), "data-test": "off-fleet-raw-text", children: rawText })] }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Submission", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Submission" }), jsxs("dl", { className: sx(factsStyle), children: [jsxs("div", { children: [jsx("dt", { children: "File name" }), jsx("dd", { children: fileName })] }), jsxs("div", { children: [jsx("dt", { children: "Carrier" }), jsx("dd", { children: carrier })] }), jsxs("div", { children: [jsx("dt", { children: "Carrier Union" }), jsx("dd", { className: sx(monoStyle), children: carrierUnion })] }), jsxs("div", { children: [jsx("dt", { children: "Flight Program" }), jsx("dd", { className: sx(monoStyle), children: flightProgram })] }), jsxs("div", { children: [jsx("dt", { children: "Received" }), jsx("dd", { children: receivedAt })] }), jsxs("div", { children: [jsx("dt", { children: "Updated" }), jsx("dd", { children: updatedAt })] })] })] }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Segments", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Segments" }), jsxs("p", { className: sx(sectionHelpStyle$1), children: [charterSegmentCount, " charter segment(s) on this Flight Program"] }), jsx(Accordion, { defaultOpen: false, header: jsxs("span", { className: sx(accordionHeaderStyle), children: ["Trip segments available for matching (", charterSegmentCount, ")"] }), children: jsx("div", { className: sx(tableScrollStyle), children: jsxs("table", { className: sx(segmentTableStyle), "data-test": "off-fleet-segments", children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Departs" }), jsx("th", { scope: "col", children: "Route" }), jsx("th", { scope: "col", children: "Trip" })] }) }), jsx("tbody", { children: tripSegments.map((segment) => (jsxs("tr", { children: [jsx("td", { children: segment.departs }), jsxs("td", { children: [segment.origin, " \u2192 ", segment.destination] }), jsx("td", { className: sx(monoStyle), children: segment.tripGuid })] }, segment.id))) })] }) }) })] }), extractionJson && (jsx("section", { className: sx(sectionStyle$2), "aria-label": "Extraction JSON", children: jsx(Accordion, { defaultOpen: false, header: jsx("span", { className: sx(accordionHeaderStyle), children: "Extraction JSON as stored" }), children: jsx("pre", { className: sx(rawTextStyle), "data-test": "off-fleet-extraction-json", children: extractionJson }) }) })), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Quote header", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Quote header" }), jsx("p", { className: sx(sectionHelpStyle$1), children: "Fields the parser maps onto the Salesforce Flight Quote. Blank means null." }), jsxs("div", { className: sx(headerGridStyle), children: [jsx(Input, { id: "off-fleet-operator", label: "Operator", helperText: "As stated in the document", value: quoteHeader.operator, onChange: (event) => updateHeader('operator', event.target.value), "data-test": "off-fleet-operator" }), jsx(Input, { id: "off-fleet-charterer", label: "Charterer", helperText: "School or organisation, only if explicit", value: quoteHeader.charterer, onChange: (event) => updateHeader('charterer', event.target.value), "data-test": "off-fleet-charterer" }), jsx(Input, { id: "off-fleet-quote-date", type: "date", label: "Quote date", helperText: "Date of the quote, not of a flight", value: quoteHeader.quoteDate, onChange: (event) => updateHeader('quoteDate', event.target.value), "data-test": "off-fleet-quote-date" }), jsx(Input, { id: "off-fleet-currency", label: "Currency", helperText: "ISO code the document prices in", value: quoteHeader.currency, onChange: (event) => updateHeader('currency', event.target.value), "data-test": "off-fleet-currency" }), jsx(Input, { id: "off-fleet-fuel-base", label: "Fuel base price", helperText: "Numeric, no currency symbol", value: quoteHeader.fuelBasePrice, onChange: (event) => updateHeader('fuelBasePrice', event.target.value), "data-test": "off-fleet-fuel-base" }), jsx(Input, { id: "off-fleet-unit-price", label: "Unit price", helperText: "Only if distinct from the leg table", value: quoteHeader.unitPrice, onChange: (event) => updateHeader('unitPrice', event.target.value), "data-test": "off-fleet-unit-price" }), jsx(Select, { id: "off-fleet-price-basis", label: "Price basis", helperText: "How the stated prices group onto legs. Changing this changes every per-leg price.", options: PRICE_BASIS_OPTIONS, value: quoteHeader.priceBasis, onChange: (event) => updateHeader('priceBasis', event.target.value), className: sx(wideFieldStyle), "data-test": "off-fleet-price-basis" }), jsx(Input, { id: "off-fleet-stated-total", label: "Stated total", helperText: "Only if the document states one. Checked to \u00B1$1 after normalization.", value: quoteHeader.statedTotal, onChange: (event) => updateHeader('statedTotal', event.target.value), "data-test": "off-fleet-stated-total" })] })] }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Flight legs", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Flight legs" }), jsx("p", { className: sx(sectionHelpStyle$1), children: "One row per leg \u2014 one takeoff, one landing. Order matters for per round trip: legs are paired top-down." }), jsx("ol", { className: sx(legsStyle$1), children: legs.map((leg, index) => (jsxs("li", { className: sx(legStyle$1), ref: (node) => {
37582
+ return (jsxs("div", { className: cx(sx(pageStyle$a), className), "data-test": "off-fleet-submission-detail-page", children: [jsxs("div", { className: sx(topRowStyle), children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$2), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "off-fleet-detail-back", children: backLabel })), jsx(StatusBadge, { status: "in-review", label: statusLabel })] }), jsxs("header", { className: sx(headerStyle$8), children: [jsx("h1", { className: sx(titleStyle$6), children: fileName }), jsx("p", { className: sx(subtitleStyle$2), children: submissionId })] }), jsx(Alert, { variant: "warning", title: "Why this needs review", children: jsx("span", { className: sx(reasonStyle), "data-test": "off-fleet-detail-reason", children: failureReason }) }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Source document", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Source document" }), jsx("p", { className: sx(sectionHelpStyle$1), children: "Text the parser actually read \u2014 OCR damage included." }), jsx("pre", { className: sx(rawTextStyle), "data-test": "off-fleet-raw-text", children: rawText })] }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Submission", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Submission" }), jsxs("dl", { className: sx(factsStyle), children: [jsxs("div", { children: [jsx("dt", { children: "File name" }), jsx("dd", { children: fileName })] }), jsxs("div", { children: [jsx("dt", { children: "Carrier" }), jsx("dd", { children: carrier })] }), jsxs("div", { children: [jsx("dt", { children: "Carrier Union" }), jsx("dd", { className: sx(monoStyle), children: carrierUnion })] }), jsxs("div", { children: [jsx("dt", { children: "Flight Program" }), jsx("dd", { className: sx(monoStyle), children: flightProgram })] }), jsxs("div", { children: [jsx("dt", { children: "Received" }), jsx("dd", { children: receivedAt })] }), jsxs("div", { children: [jsx("dt", { children: "Updated" }), jsx("dd", { children: updatedAt })] })] })] }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Segments", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Segments" }), jsxs("p", { className: sx(sectionHelpStyle$1), children: [charterSegmentCount, " charter segment(s) on this Flight Program"] }), jsx(Accordion, { defaultOpen: false, header: jsxs("span", { className: sx(accordionHeaderStyle), children: ["Trip segments available for matching (", charterSegmentCount, ")"] }), children: jsx("div", { className: sx(tableScrollStyle), children: jsxs("table", { className: sx(segmentTableStyle), "data-test": "off-fleet-segments", children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Departs" }), jsx("th", { scope: "col", children: "Route" }), jsx("th", { scope: "col", children: "Trip" })] }) }), jsx("tbody", { children: tripSegments.map((segment) => (jsxs("tr", { children: [jsx("td", { children: segment.departs }), jsxs("td", { children: [segment.origin, " \u2192 ", segment.destination] }), jsx("td", { className: sx(monoStyle), children: segment.tripGuid })] }, segment.id))) })] }) }) })] }), extractionJson && (jsx("section", { className: sx(sectionStyle$2), "aria-label": "Extraction JSON", children: jsx(Accordion, { defaultOpen: false, header: jsx("span", { className: sx(accordionHeaderStyle), children: "Extraction JSON as stored" }), children: jsx("pre", { className: sx(rawTextStyle), "data-test": "off-fleet-extraction-json", children: extractionJson }) }) })), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Quote header", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Quote header" }), jsx("p", { className: sx(sectionHelpStyle$1), children: "Fields the parser maps onto the Salesforce Flight Quote. Blank means null." }), jsxs("div", { className: sx(headerGridStyle), children: [jsx(Input, { id: "off-fleet-operator", label: "Operator", helperText: "As stated in the document", value: quoteHeader.operator, onChange: (event) => updateHeader('operator', event.target.value), "data-test": "off-fleet-operator" }), jsx(Input, { id: "off-fleet-charterer", label: "Charterer", helperText: "School or organisation, only if explicit", value: quoteHeader.charterer, onChange: (event) => updateHeader('charterer', event.target.value), "data-test": "off-fleet-charterer" }), jsx(Input, { id: "off-fleet-quote-date", type: "date", label: "Quote date", helperText: "Date of the quote, not of a flight", value: quoteHeader.quoteDate, onChange: (event) => updateHeader('quoteDate', event.target.value), "data-test": "off-fleet-quote-date" }), jsx(Input, { id: "off-fleet-currency", label: "Currency", helperText: "ISO code the document prices in", value: quoteHeader.currency, onChange: (event) => updateHeader('currency', event.target.value), "data-test": "off-fleet-currency" }), jsx(Input, { id: "off-fleet-fuel-base", label: "Fuel base price", helperText: "Numeric, no currency symbol", value: quoteHeader.fuelBasePrice, onChange: (event) => updateHeader('fuelBasePrice', event.target.value), "data-test": "off-fleet-fuel-base" }), jsx(Input, { id: "off-fleet-unit-price", label: "Unit price", helperText: "Only if distinct from the leg table", value: quoteHeader.unitPrice, onChange: (event) => updateHeader('unitPrice', event.target.value), "data-test": "off-fleet-unit-price" }), jsx(Select, { id: "off-fleet-price-basis", label: "Price basis", helperText: "How the stated prices group onto legs. Changing this changes every per-leg price.", options: PRICE_BASIS_OPTIONS, value: quoteHeader.priceBasis, onChange: (event) => updateHeader('priceBasis', event.target.value), className: sx(wideFieldStyle), "data-test": "off-fleet-price-basis" }), jsx(Input, { id: "off-fleet-stated-total", label: "Stated total", helperText: "Only if the document states one. Checked to \u00B1$1 after normalization.", value: quoteHeader.statedTotal, onChange: (event) => updateHeader('statedTotal', event.target.value), "data-test": "off-fleet-stated-total" })] })] }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Flight legs", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Flight legs" }), jsx("p", { className: sx(sectionHelpStyle$1), children: "One row per leg \u2014 one takeoff, one landing. Order matters for per round trip: legs are paired top-down." }), jsx("ol", { className: sx(legsStyle$1), children: legs.map((leg, index) => (jsxs("li", { className: sx(legStyle$1), ref: (node) => {
37510
37583
  legRefs.current[leg.id] = node;
37511
37584
  }, "data-test": "off-fleet-leg", children: [jsxs("div", { className: sx(legHeaderStyle), children: [jsxs("span", { className: sx(legIndexStyle), children: ["Leg ", index + 1] }), jsx(StatusBadge, { status: MATCH_BADGES[leg.match].status, label: MATCH_BADGES[leg.match].label }), jsx(Button, { variant: "ghost", size: "sm", className: sx(removeLegStyle), onClick: () => removeLeg(leg.id), "data-test": "off-fleet-remove-leg", children: "Remove leg" })] }), jsxs("div", { className: sx(legGridStyle), children: [jsx(Input, { id: `${leg.id}-date`, size: "sm", type: "date", label: "Date", value: leg.date, onChange: (event) => updateLeg(leg.id, { date: event.target.value }), "data-test": "off-fleet-leg-date" }), jsx(Input, { id: `${leg.id}-from`, size: "sm", label: "From", value: leg.from, onChange: (event) => updateLeg(leg.id, { from: event.target.value.toUpperCase() }), "data-test": "off-fleet-leg-from" }), jsx(Input, { id: `${leg.id}-to`, size: "sm", label: "To", value: leg.to, onChange: (event) => updateLeg(leg.id, { to: event.target.value.toUpperCase() }), "data-test": "off-fleet-leg-to" }), jsx(Input, { id: `${leg.id}-etd`, size: "sm", label: "ETD", value: leg.etd, onChange: (event) => updateLeg(leg.id, { etd: event.target.value }), "data-test": "off-fleet-leg-etd" }), jsx(Input, { id: `${leg.id}-eta`, size: "sm", label: "ETA", value: leg.eta, onChange: (event) => updateLeg(leg.id, { eta: event.target.value }), "data-test": "off-fleet-leg-eta" }), jsx(Input, { id: `${leg.id}-aircraft`, size: "sm", label: "Aircraft", value: leg.aircraft, onChange: (event) => updateLeg(leg.id, { aircraft: event.target.value }), "data-test": "off-fleet-leg-aircraft" }), jsx(Input, { id: `${leg.id}-seats`, size: "sm", label: "Seats", value: leg.seats, onChange: (event) => updateLeg(leg.id, { seats: event.target.value }), "data-test": "off-fleet-leg-seats" }), jsx(Input, { id: `${leg.id}-price`, size: "sm", label: "Price", value: leg.price, onChange: (event) => updateLeg(leg.id, { price: event.target.value }), "data-test": "off-fleet-leg-price" })] })] }, leg.id))) }), jsx(Button, { variant: "outline", size: "sm", onClick: addLeg, "data-test": "off-fleet-add-leg", children: "Add leg" })] }), jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Ambiguity flag", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Ambiguity flag" }), jsx(Textarea, { id: "off-fleet-ambiguity", label: "Ambiguity reason", helperText: "What a human still cannot tell from the document. Left blank, the extraction is treated as unambiguous.", rows: 3, value: ambiguityReason, onChange: (event) => setAmbiguityReason(event.target.value), "data-test": "off-fleet-ambiguity" })] }), preflight && (jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Pre-flight check", children: [jsx("h2", { className: sx(sectionTitleStyle$2), children: "Pre-flight check" }), jsx("div", { className: sx(tableScrollStyle), children: jsxs("table", { className: sx(preflightTableStyle), "data-test": "off-fleet-preflight", children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { scope: "col", children: "Leg" }), jsx("th", { scope: "col", children: "As stated" }), jsx("th", { scope: "col", children: "Per leg after normalization" })] }) }), jsx("tbody", { children: preflight.rows.map((row) => (jsxs("tr", { children: [jsx("th", { scope: "row", children: row.leg }), jsx("td", { children: row.asStated }), jsx("td", { children: row.perLegAfterNormalization })] }, row.leg))) }), jsx("tfoot", { children: jsxs("tr", { children: [jsx("th", { scope: "row", children: "Total" }), jsx("td", {}), jsx("td", { "data-test": "off-fleet-preflight-total", children: preflight.total })] }) })] }) }), jsxs("p", { className: sx(unmatchedStyle), "data-test": "off-fleet-unmatched-count", children: [preflight.unmatchedCount, " of ", preflight.legCount, " leg(s) unmatched"] }), jsx("ul", { className: sx(groupingsStyle), "data-test": "off-fleet-trip-groupings", children: preflight.tripGroupings.map((grouping) => (jsxs("li", { className: sx(groupingStyle), children: [jsx("span", { className: sx(monoStyle), children: grouping.tripGuid }), jsxs("span", { children: [grouping.legCount, " leg(s) \u00B7 ", grouping.total] })] }, grouping.tripGuid))) }), jsx("p", { className: sx(consequenceStyle), children: "Each total becomes one QuoteLineItem against a new Flight Quote for that Trip." }), preflight.diagnostics?.map((diagnostic) => (jsxs("div", { className: sx(diagnosticStyle), children: [jsx("p", { className: sx(diagnosticMessageStyle), "data-test": "off-fleet-diagnostic", children: diagnostic.message }), jsx(Button, { variant: "outline", size: "sm", onClick: () => jumpToLeg(diagnostic.legId), "data-test": "off-fleet-jump-to-leg", children: "Jump to leg" })] }, diagnostic.legId))), preflight.warnings?.map((warning) => (jsx(Alert, { variant: "warning", children: jsx("span", { className: sx(reasonStyle), "data-test": "off-fleet-warning", children: warning }) }, warning)))] })), jsxs("div", { className: sx(actionsStyle), children: [jsx(Button, { disabled: blocked, onClick: () => onCheckCorrection?.({ quoteHeader, legs, ambiguityReason }), "data-test": "off-fleet-check-correction", children: "Check correction" }), jsx(Button, { variant: "secondary", disabled: blocked, onClick: onReprocess, "data-test": "off-fleet-reprocess", children: "Reprocess submission" }), blockedReason && (jsx("p", { className: sx(blockedReasonStyle), "data-test": "off-fleet-blocked-reason", children: blockedReason }))] })] }));
37512
37585
  };
37513
37586
  OffFleetSubmissionDetailPage.displayName = 'OffFleetSubmissionDetailPage';
37514
37587
 
37515
- const pageStyle$8 = {
37588
+ const pageStyle$9 = {
37516
37589
  label: 'RosterProgramNumbersPage-pageStyle',
37517
37590
  display: 'flex',
37518
37591
  minWidth: 0,
@@ -37688,11 +37761,11 @@ const RosterProgramNumbersPage = ({ programs, loading = false, saving = false, o
37688
37761
  accountNumber: values[String(program.id)] ?? '',
37689
37762
  })));
37690
37763
  };
37691
- return (jsxs("section", { className: sx(pageStyle$8), "data-test": "roster-program-numbers-page", children: [jsxs("header", { className: sx(headerStyle$7), children: [jsxs("div", { className: sx(headingStyle$1), children: [jsx("h1", { children: "Edit Program Numbers" }), jsx("p", { children: "Update existing traveler loyalty-program numbers without changing the rest of the roster." })] }), jsx(Button, { type: "button", variant: "outline", size: "sm", "data-test": "program-numbers-back", onClick: onBack, children: "Back to Roster" })] }), jsx(Module, { title: "Roster Program Numbers", useToggle: false, children: jsxs("form", { onSubmit: submit, "data-test": "program-numbers-form", children: [loading ? (jsx("div", { className: sx(emptyStyle$2), role: "status", children: "Loading roster program numbers..." })) : programs.length ? (jsx("div", { className: sx(tableWrapStyle), children: jsxs("table", { className: sx(tableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { children: "Traveler" }), jsx("th", { children: "Program" }), jsx("th", { children: "Program Number" })] }) }), jsx("tbody", { children: programs.map((program) => (jsxs("tr", { "data-test": `program-number-row-${program.id}`, children: [jsx("td", { children: jsxs("div", { className: sx(travelerStyle), children: [jsx("strong", { children: program.travelerName }), program.travelerType && jsx("span", { children: program.travelerType })] }) }), jsx("td", { children: jsx("span", { className: sx(supplierStyle), children: program.supplierName }) }), jsx("td", { className: sx(inputCellStyle), children: jsx(Input, { id: `program-number-${program.id}`, "aria-label": `Program number for ${program.travelerName} — ${program.supplierName}`, "data-test": `program-number-input-${program.id}`, value: values[String(program.id)] ?? '', required: true, fullWidth: true, size: "sm", disabled: saving, onChange: (event) => setValues((current) => ({ ...current, [String(program.id)]: event.target.value })) }) })] }, program.id))) })] }) })) : (jsx("div", { className: sx(emptyStyle$2), children: "No existing membership programs are available to edit." })), !!programs.length && (jsxs("div", { className: sx(footerStyle$1), children: [jsx(Button, { type: "button", variant: "outline", disabled: saving, onClick: onBack, children: "Cancel" }), jsx(Button, { type: "submit", loading: saving, "data-test": "program-numbers-submit", children: "Submit" })] }))] }) })] }));
37764
+ return (jsxs("section", { className: sx(pageStyle$9), "data-test": "roster-program-numbers-page", children: [jsxs("header", { className: sx(headerStyle$7), children: [jsxs("div", { className: sx(headingStyle$1), children: [jsx("h1", { children: "Edit Program Numbers" }), jsx("p", { children: "Update existing traveler loyalty-program numbers without changing the rest of the roster." })] }), jsx(Button, { type: "button", variant: "outline", size: "sm", "data-test": "program-numbers-back", onClick: onBack, children: "Back to Roster" })] }), jsx(Module, { title: "Roster Program Numbers", useToggle: false, children: jsxs("form", { onSubmit: submit, "data-test": "program-numbers-form", children: [loading ? (jsx("div", { className: sx(emptyStyle$2), role: "status", children: "Loading roster program numbers..." })) : programs.length ? (jsx("div", { className: sx(tableWrapStyle), children: jsxs("table", { className: sx(tableStyle), children: [jsx("thead", { children: jsxs("tr", { children: [jsx("th", { children: "Traveler" }), jsx("th", { children: "Program" }), jsx("th", { children: "Program Number" })] }) }), jsx("tbody", { children: programs.map((program) => (jsxs("tr", { "data-test": `program-number-row-${program.id}`, children: [jsx("td", { children: jsxs("div", { className: sx(travelerStyle), children: [jsx("strong", { children: program.travelerName }), program.travelerType && jsx("span", { children: program.travelerType })] }) }), jsx("td", { children: jsx("span", { className: sx(supplierStyle), children: program.supplierName }) }), jsx("td", { className: sx(inputCellStyle), children: jsx(Input, { id: `program-number-${program.id}`, "aria-label": `Program number for ${program.travelerName} — ${program.supplierName}`, "data-test": `program-number-input-${program.id}`, value: values[String(program.id)] ?? '', required: true, fullWidth: true, size: "sm", disabled: saving, onChange: (event) => setValues((current) => ({ ...current, [String(program.id)]: event.target.value })) }) })] }, program.id))) })] }) })) : (jsx("div", { className: sx(emptyStyle$2), children: "No existing membership programs are available to edit." })), !!programs.length && (jsxs("div", { className: sx(footerStyle$1), children: [jsx(Button, { type: "button", variant: "outline", disabled: saving, onClick: onBack, children: "Cancel" }), jsx(Button, { type: "submit", loading: saving, "data-test": "program-numbers-submit", children: "Submit" })] }))] }) })] }));
37692
37765
  };
37693
37766
  RosterProgramNumbersPage.displayName = 'RosterProgramNumbersPage';
37694
37767
 
37695
- const pageStyle$7 = {
37768
+ const pageStyle$8 = {
37696
37769
  label: 'RegularSeasonBidsPage-pageStyle',
37697
37770
  display: 'flex',
37698
37771
  flexDirection: 'column',
@@ -37714,7 +37787,7 @@ const headerStyle$6 = {
37714
37787
  flexDirection: 'column',
37715
37788
  gap: 'var(--space-1)',
37716
37789
  };
37717
- const titleStyle$4 = {
37790
+ const titleStyle$5 = {
37718
37791
  label: 'RegularSeasonBidsPage-titleStyle',
37719
37792
  margin: 0,
37720
37793
  color: 'var(--fg-1)',
@@ -37755,11 +37828,11 @@ const RegularSeasonBidsPage = ({ bids, bidType: controlledBidType, defaultBidTyp
37755
37828
  setInternalBidType(next);
37756
37829
  onBidTypeChange?.(next);
37757
37830
  };
37758
- return (jsxs("div", { className: cx(sx(pageStyle$7), className), "data-test": "regular-season-bids-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$1), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "regular-season-bids-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$6), children: [jsx("h1", { className: sx(titleStyle$4), children: headingFor(bidType) }), jsx("p", { className: sx(descriptionStyle$1), children: "Regular season flight programs released to you. Expand a program to bid trip by trip, or bid on the whole program at once." })] }), jsx(Segment, { options: TAB_OPTIONS, value: bidType, onChange: selectBidType, "aria-label": "Bid queue", className: sx(tabsStyle) }), bidType === 'Awarded' && (jsx(Alert, { variant: "success", title: "Congratulations", children: "For awarded bids, an Account Executive from STM Charters will reach out with next steps via email." })), jsx(RegularSeasonBidsTable, { bids: bids, bidType: bidType, acmiCarrier: acmiCarrier, today: today, loading: loading, locale: locale, onSubmitBid: onSubmitBid, onViewBid: onViewBid, onNoBid: onNoBid, onBulkNoBid: onBulkNoBid })] }));
37831
+ return (jsxs("div", { className: cx(sx(pageStyle$8), className), "data-test": "regular-season-bids-page", children: [onBack && (jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$1), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "regular-season-bids-back", children: backLabel })), jsxs("header", { className: sx(headerStyle$6), children: [jsx("h1", { className: sx(titleStyle$5), children: headingFor(bidType) }), jsx("p", { className: sx(descriptionStyle$1), children: "Regular season flight programs released to you. Expand a program to bid trip by trip, or bid on the whole program at once." })] }), jsx(Segment, { options: TAB_OPTIONS, value: bidType, onChange: selectBidType, "aria-label": "Bid queue", className: sx(tabsStyle) }), bidType === 'Awarded' && (jsx(Alert, { variant: "success", title: "Congratulations", children: "For awarded bids, an Account Executive from STM Charters will reach out with next steps via email." })), jsx(RegularSeasonBidsTable, { bids: bids, bidType: bidType, acmiCarrier: acmiCarrier, today: today, loading: loading, locale: locale, onSubmitBid: onSubmitBid, onViewBid: onViewBid, onNoBid: onNoBid, onBulkNoBid: onBulkNoBid })] }));
37759
37832
  };
37760
37833
  RegularSeasonBidsPage.displayName = 'RegularSeasonBidsPage';
37761
37834
 
37762
- const pageStyle$6 = {
37835
+ const pageStyle$7 = {
37763
37836
  label: 'RosterReportsPage-pageStyle',
37764
37837
  display: 'flex',
37765
37838
  minWidth: 0,
@@ -37845,7 +37918,7 @@ const emptyStyle$1 = {
37845
37918
  /**
37846
37919
  * Lists the roster reports a user can run, and reports progress while one runs.
37847
37920
  */
37848
- const RosterReportsPage = ({ reports, runningReportId, onBack, onRun }) => (jsxs("section", { className: sx(pageStyle$6), "data-test": "roster-reports-page", children: [jsxs("header", { className: sx(headerStyle$5), children: [jsxs("div", { className: sx(headingStyle), children: [jsx("h1", { children: "Roster Reports" }), jsx("p", { children: "Run the available reports for the selected team roster." })] }), jsx(Button, { type: "button", variant: "outline", size: "sm", "data-test": "roster-reports-back", onClick: onBack, children: "Back to Roster" })] }), jsx(Module, { title: "Team Reports", useToggle: false, children: reports.length ? (jsx("div", { className: sx(listStyle), "data-test": "roster-report-list", children: reports.map((report) => (jsxs("article", { className: sx(reportStyle), "data-test": `roster-report-${report.id}`, children: [jsxs("div", { className: sx(detailsStyle), children: [jsx("h2", { children: report.title }), report.description && jsx("p", { children: report.description })] }), jsx(Button, { type: "button", variant: "outline", size: "sm", loading: runningReportId === report.id, disabled: Boolean(runningReportId) && runningReportId !== report.id, "data-test": `run-roster-report-${report.id}`, onClick: () => void onRun?.(report), children: "Run Report" })] }, report.id))) })) : (jsx("div", { className: sx(emptyStyle$1), children: "No roster reports are currently available." })) })] }));
37921
+ const RosterReportsPage = ({ reports, runningReportId, onBack, onRun }) => (jsxs("section", { className: sx(pageStyle$7), "data-test": "roster-reports-page", children: [jsxs("header", { className: sx(headerStyle$5), children: [jsxs("div", { className: sx(headingStyle), children: [jsx("h1", { children: "Roster Reports" }), jsx("p", { children: "Run the available reports for the selected team roster." })] }), jsx(Button, { type: "button", variant: "outline", size: "sm", "data-test": "roster-reports-back", onClick: onBack, children: "Back to Roster" })] }), jsx(Module, { title: "Team Reports", useToggle: false, children: reports.length ? (jsx("div", { className: sx(listStyle), "data-test": "roster-report-list", children: reports.map((report) => (jsxs("article", { className: sx(reportStyle), "data-test": `roster-report-${report.id}`, children: [jsxs("div", { className: sx(detailsStyle), children: [jsx("h2", { children: report.title }), report.description && jsx("p", { children: report.description })] }), jsx(Button, { type: "button", variant: "outline", size: "sm", loading: runningReportId === report.id, disabled: Boolean(runningReportId) && runningReportId !== report.id, "data-test": `run-roster-report-${report.id}`, onClick: () => void onRun?.(report), children: "Run Report" })] }, report.id))) })) : (jsx("div", { className: sx(emptyStyle$1), children: "No roster reports are currently available." })) })] }));
37849
37922
  RosterReportsPage.displayName = 'RosterReportsPage';
37850
37923
 
37851
37924
  /**
@@ -37853,7 +37926,7 @@ RosterReportsPage.displayName = 'RosterReportsPage';
37853
37926
  * stylesheet it replaces. The one `@media (max-width: 767px)` block styled two
37854
37927
  * classes, so it is split between `pageStyle` and `headerMainStyle`.
37855
37928
  */
37856
- const pageStyle$5 = {
37929
+ const pageStyle$6 = {
37857
37930
  label: 'SourcingQuoteDetailPage-pageStyle',
37858
37931
  display: 'flex',
37859
37932
  flexDirection: 'column',
@@ -37904,7 +37977,7 @@ const quoteIdStyle = {
37904
37977
  letterSpacing: '0.06em',
37905
37978
  textTransform: 'uppercase',
37906
37979
  };
37907
- const titleStyle$3 = {
37980
+ const titleStyle$4 = {
37908
37981
  label: 'SourcingQuoteDetailPage-titleStyle',
37909
37982
  margin: 0,
37910
37983
  color: 'var(--fg-1)',
@@ -38248,11 +38321,11 @@ const SourcingQuoteDetailPage = ({ quote, backLabel = 'Sourcing Review Queue', o
38248
38321
  return reasons;
38249
38322
  }, [decided, quote.status, draft.lineItems, liveLegs, passengerCount]);
38250
38323
  const blocked = blockingReasons.length > 0;
38251
- return (jsxs("div", { className: cx(sx(pageStyle$5), className), "data-test": "sourcing-quote-detail-page", children: [jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "sourcing-quote-back", children: backLabel }), jsxs("header", { className: sx(headerStyle$4), children: [jsxs("div", { className: sx(headerMainStyle), children: [jsxs("div", { className: sx(headerTitlesStyle), children: [jsx("span", { className: sx(quoteIdStyle), children: quote.id }), jsx("h1", { className: sx(titleStyle$3), children: draft.carrier }), jsxs("p", { className: sx(subtitleStyle$1), children: [quote.tripName, " \u00B7 ", quote.accountName, " \u00B7 ", quote.sport] })] }), jsx(StatusBadge, { status: quote.status, className: sx(statusStyle) })] }), jsxs("div", { className: sx(editGridStyle), children: [jsx(Input, { id: "sourcing-quote-carrier", label: "Carrier", helperText: "Operator as it should read on the Flight Quote, not the broker.", value: draft.carrier, disabled: decided || !editable, onChange: (event) => setDraft({ ...draft, carrier: event.target.value }), "data-test": "sourcing-quote-carrier-input" }), jsx(Input, { id: "sourcing-quote-passengers", type: "number", label: "Passengers", helperText: "Travel party the school asked to move, not the aircraft\u2019s seat count.", value: draft.passengers, disabled: decided || !editable, onChange: (event) => setDraft({ ...draft, passengers: event.target.value }), "data-test": "sourcing-quote-passengers-input" }), jsx(Input, { id: "sourcing-quote-departure", type: "date", label: "First departure", helperText: "First revenue departure. Positioning legs may run earlier.", value: draft.departureDate, disabled: decided || !editable, onChange: (event) => setDraft({ ...draft, departureDate: event.target.value }), "data-test": "sourcing-quote-departure-input" }), jsxs("div", { className: sx(totalFieldStyle), children: [jsx("span", { className: sx(totalLabelStyle), children: "Quoted total" }), jsx("span", { className: sx(factTotalStyle), "data-test": "sourcing-quote-total", children: formattedTotal }), jsx("span", { className: sx(factHelpStyle), children: "Derived from the line items below \u2014 never entered by hand." })] })] }), hasReviewActions && (jsx(QuoteReviewActions, { quoteId: quote.id, carrier: draft.carrier, formattedTotal: formattedTotal, changes: changes, disabled: blocked, disabledReason: blockingReasons[0], loading: actionsLoading, onApprove: (quoteId, approvedChanges) => onApprove?.(quoteId, approvedChanges, draft), onReject: onReject })), blocked && (jsx(Alert, { variant: "warning", title: decided ? 'Quote already decided' : 'Why this cannot be approved yet', children: jsx("ul", { className: sx(blockingListStyle), "data-test": "sourcing-quote-blocking-reasons", children: blockingReasons.map((reason) => (jsx("li", { children: reason }, reason))) }) }))] }), quote.carrierNote && (jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Carrier note", children: [jsx("h2", { className: sx(sectionTitleStyle$1), children: "Carrier note" }), jsx("p", { className: sx(sectionHelpStyle), children: "The carrier\u2019s own words, shown in full \u2014 anything they flagged here is the reason to read the breakdown twice." }), jsx("p", { className: sx(carrierNoteStyle), "data-test": "sourcing-quote-carrier-note", children: quote.carrierNote })] })), jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Leg breakdown", children: [jsx("h2", { className: sx(sectionTitleStyle$1), children: "Leg breakdown" }), jsx("p", { className: sx(sectionHelpStyle), children: "One row per leg. Live legs carry the travel party; ferry legs reposition the aircraft and carry nobody, but their block hours are still billed." }), legs.length > 0 ? (jsx("ul", { className: sx(legsStyle), children: legs.map((leg) => (jsx(LegRow, { leg: leg, locale: locale }, leg.id))) })) : (jsx("p", { className: sx(emptyLegsStyle), "data-test": "sourcing-quote-no-legs", children: "The carrier has not attached any legs to this quote." }))] }), jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Cost line items", children: [jsx("h2", { className: sx(sectionTitleStyle$1), children: "Cost line items" }), jsx("p", { className: sx(sectionHelpStyle), children: "Each row becomes one QuoteLineItem on the Salesforce Flight Quote. Correct a quantity or a unit price here and the quoted total follows \u2014 it is never typed in directly." }), jsx("ul", { className: sx(lineItemsStyle), children: draft.lineItems.map((lineItem) => (jsxs("li", { className: sx(lineItemStyle), "data-test": "sourcing-quote-line-item", children: [jsxs("div", { className: sx(lineItemHeadStyle), children: [jsx("span", { className: sx(lineItemLabelStyle), children: lineItem.label }), jsx("span", { className: sx(lineItemCategoryStyle), children: SOURCING_COST_CATEGORY_LABELS[lineItem.category ?? 'other'] })] }), jsxs("div", { className: sx(lineItemFieldsStyle), children: [jsx(Input, { id: `${lineItem.id}-quantity`, size: "sm", type: "number", label: `Quantity (${lineItem.unit})`, value: String(lineItem.quantity), disabled: decided || !editable, onChange: (event) => updateLineItem(lineItem.id, { quantity: Number(event.target.value) }), "data-test": "sourcing-quote-line-quantity" }), jsx(Input, { id: `${lineItem.id}-unit-price`, size: "sm", type: "number", label: "Unit price", value: String(lineItem.unitPrice), disabled: decided || !editable, onChange: (event) => updateLineItem(lineItem.id, { unitPrice: Number(event.target.value) }), "data-test": "sourcing-quote-line-unit-price" })] })] }, lineItem.id))) }), jsx(QuoteCostBreakdown, { lineItems: draft.lineItems, currency: quote.currency ?? 'USD', locale: locale, title: "", passengerCount: Number.isFinite(passengerCount) ? passengerCount : undefined })] })] }));
38324
+ return (jsxs("div", { className: cx(sx(pageStyle$6), className), "data-test": "sourcing-quote-detail-page", children: [jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle), leftIcon: jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "sourcing-quote-back", children: backLabel }), jsxs("header", { className: sx(headerStyle$4), children: [jsxs("div", { className: sx(headerMainStyle), children: [jsxs("div", { className: sx(headerTitlesStyle), children: [jsx("span", { className: sx(quoteIdStyle), children: quote.id }), jsx("h1", { className: sx(titleStyle$4), children: draft.carrier }), jsxs("p", { className: sx(subtitleStyle$1), children: [quote.tripName, " \u00B7 ", quote.accountName, " \u00B7 ", quote.sport] })] }), jsx(StatusBadge, { status: quote.status, className: sx(statusStyle) })] }), jsxs("div", { className: sx(editGridStyle), children: [jsx(Input, { id: "sourcing-quote-carrier", label: "Carrier", helperText: "Operator as it should read on the Flight Quote, not the broker.", value: draft.carrier, disabled: decided || !editable, onChange: (event) => setDraft({ ...draft, carrier: event.target.value }), "data-test": "sourcing-quote-carrier-input" }), jsx(Input, { id: "sourcing-quote-passengers", type: "number", label: "Passengers", helperText: "Travel party the school asked to move, not the aircraft\u2019s seat count.", value: draft.passengers, disabled: decided || !editable, onChange: (event) => setDraft({ ...draft, passengers: event.target.value }), "data-test": "sourcing-quote-passengers-input" }), jsx(Input, { id: "sourcing-quote-departure", type: "date", label: "First departure", helperText: "First revenue departure. Positioning legs may run earlier.", value: draft.departureDate, disabled: decided || !editable, onChange: (event) => setDraft({ ...draft, departureDate: event.target.value }), "data-test": "sourcing-quote-departure-input" }), jsxs("div", { className: sx(totalFieldStyle), children: [jsx("span", { className: sx(totalLabelStyle), children: "Quoted total" }), jsx("span", { className: sx(factTotalStyle), "data-test": "sourcing-quote-total", children: formattedTotal }), jsx("span", { className: sx(factHelpStyle), children: "Derived from the line items below \u2014 never entered by hand." })] })] }), hasReviewActions && (jsx(QuoteReviewActions, { quoteId: quote.id, carrier: draft.carrier, formattedTotal: formattedTotal, changes: changes, disabled: blocked, disabledReason: blockingReasons[0], loading: actionsLoading, onApprove: (quoteId, approvedChanges) => onApprove?.(quoteId, approvedChanges, draft), onReject: onReject })), blocked && (jsx(Alert, { variant: "warning", title: decided ? 'Quote already decided' : 'Why this cannot be approved yet', children: jsx("ul", { className: sx(blockingListStyle), "data-test": "sourcing-quote-blocking-reasons", children: blockingReasons.map((reason) => (jsx("li", { children: reason }, reason))) }) }))] }), quote.carrierNote && (jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Carrier note", children: [jsx("h2", { className: sx(sectionTitleStyle$1), children: "Carrier note" }), jsx("p", { className: sx(sectionHelpStyle), children: "The carrier\u2019s own words, shown in full \u2014 anything they flagged here is the reason to read the breakdown twice." }), jsx("p", { className: sx(carrierNoteStyle), "data-test": "sourcing-quote-carrier-note", children: quote.carrierNote })] })), jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Leg breakdown", children: [jsx("h2", { className: sx(sectionTitleStyle$1), children: "Leg breakdown" }), jsx("p", { className: sx(sectionHelpStyle), children: "One row per leg. Live legs carry the travel party; ferry legs reposition the aircraft and carry nobody, but their block hours are still billed." }), legs.length > 0 ? (jsx("ul", { className: sx(legsStyle), children: legs.map((leg) => (jsx(LegRow, { leg: leg, locale: locale }, leg.id))) })) : (jsx("p", { className: sx(emptyLegsStyle), "data-test": "sourcing-quote-no-legs", children: "The carrier has not attached any legs to this quote." }))] }), jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Cost line items", children: [jsx("h2", { className: sx(sectionTitleStyle$1), children: "Cost line items" }), jsx("p", { className: sx(sectionHelpStyle), children: "Each row becomes one QuoteLineItem on the Salesforce Flight Quote. Correct a quantity or a unit price here and the quoted total follows \u2014 it is never typed in directly." }), jsx("ul", { className: sx(lineItemsStyle), children: draft.lineItems.map((lineItem) => (jsxs("li", { className: sx(lineItemStyle), "data-test": "sourcing-quote-line-item", children: [jsxs("div", { className: sx(lineItemHeadStyle), children: [jsx("span", { className: sx(lineItemLabelStyle), children: lineItem.label }), jsx("span", { className: sx(lineItemCategoryStyle), children: SOURCING_COST_CATEGORY_LABELS[lineItem.category ?? 'other'] })] }), jsxs("div", { className: sx(lineItemFieldsStyle), children: [jsx(Input, { id: `${lineItem.id}-quantity`, size: "sm", type: "number", label: `Quantity (${lineItem.unit})`, value: String(lineItem.quantity), disabled: decided || !editable, onChange: (event) => updateLineItem(lineItem.id, { quantity: Number(event.target.value) }), "data-test": "sourcing-quote-line-quantity" }), jsx(Input, { id: `${lineItem.id}-unit-price`, size: "sm", type: "number", label: "Unit price", value: String(lineItem.unitPrice), disabled: decided || !editable, onChange: (event) => updateLineItem(lineItem.id, { unitPrice: Number(event.target.value) }), "data-test": "sourcing-quote-line-unit-price" })] })] }, lineItem.id))) }), jsx(QuoteCostBreakdown, { lineItems: draft.lineItems, currency: quote.currency ?? 'USD', locale: locale, title: "", passengerCount: Number.isFinite(passengerCount) ? passengerCount : undefined })] })] }));
38252
38325
  };
38253
38326
  SourcingQuoteDetailPage.displayName = 'SourcingQuoteDetailPage';
38254
38327
 
38255
- const pageStyle$4 = {
38328
+ const pageStyle$5 = {
38256
38329
  label: 'SourcingReviewQueuePage-pageStyle',
38257
38330
  display: 'flex',
38258
38331
  flexDirection: 'column',
@@ -38268,7 +38341,7 @@ const headerStyle$3 = {
38268
38341
  flexDirection: 'column',
38269
38342
  gap: 'var(--space-1)',
38270
38343
  };
38271
- const titleStyle$2 = {
38344
+ const titleStyle$3 = {
38272
38345
  label: 'SourcingReviewQueuePage-titleStyle',
38273
38346
  margin: 0,
38274
38347
  color: 'var(--fg-1)',
@@ -38301,7 +38374,7 @@ const SourcingReviewQueuePage = ({ title = 'Sourcing Review Queue', description
38301
38374
  }, [quotes]);
38302
38375
  // Metric coerces non-numeric values to 0, so the currency symbol goes through `prefix`.
38303
38376
  const compactAmount = useMemo(() => new Intl.NumberFormat(locale, { notation: 'compact', maximumFractionDigits: 1 }), [locale]);
38304
- return (jsxs("div", { className: cx(sx(pageStyle$4), className), "data-test": "sourcing-review-queue-page", children: [jsxs("header", { className: sx(headerStyle$3), children: [jsx("h1", { className: sx(titleStyle$2), children: title }), description && jsx("p", { className: sx(descriptionStyle), children: description })] }), !hideSummary && (jsxs("div", { className: sx(summaryStyle), "data-test": "sourcing-review-queue-summary", children: [jsx(Metric, { label: "Awaiting review", value: summary.awaiting }), jsx(Metric, { label: "Approved this cycle", value: summary.approved }), jsx(Metric, { label: "Value awaiting review", prefix: "$", value: compactAmount.format(summary.awaitingValue) })] })), jsx(SourcingReviewQueueTable, { quotes: quotes, selectedQuoteIds: selectedQuoteIds, onSelectionChange: onSelectionChange, onOpenQuote: onOpenQuote, onBulkApprove: onBulkApprove, pageSize: pageSize, loading: loading, locale: locale })] }));
38377
+ return (jsxs("div", { className: cx(sx(pageStyle$5), className), "data-test": "sourcing-review-queue-page", children: [jsxs("header", { className: sx(headerStyle$3), children: [jsx("h1", { className: sx(titleStyle$3), children: title }), description && jsx("p", { className: sx(descriptionStyle), children: description })] }), !hideSummary && (jsxs("div", { className: sx(summaryStyle), "data-test": "sourcing-review-queue-summary", children: [jsx(Metric, { label: "Awaiting review", value: summary.awaiting }), jsx(Metric, { label: "Approved this cycle", value: summary.approved }), jsx(Metric, { label: "Value awaiting review", prefix: "$", value: compactAmount.format(summary.awaitingValue) })] })), jsx(SourcingReviewQueueTable, { quotes: quotes, selectedQuoteIds: selectedQuoteIds, onSelectionChange: onSelectionChange, onOpenQuote: onOpenQuote, onBulkApprove: onBulkApprove, pageSize: pageSize, loading: loading, locale: locale })] }));
38305
38378
  };
38306
38379
 
38307
38380
  /**
@@ -38315,7 +38388,7 @@ const SourcingReviewQueuePage = ({ title = 'Sourcing Review Queue', description
38315
38388
  * No `&&` was needed: every class lands on its own element, so nothing here
38316
38389
  * ever depended on source order.
38317
38390
  */
38318
- const pageStyle$3 = {
38391
+ const pageStyle$4 = {
38319
38392
  label: 'TeamManagementPage-pageStyle',
38320
38393
  minWidth: 0,
38321
38394
  color: 'var(--color-ink, #282828)',
@@ -38410,7 +38483,7 @@ const DEFAULT_TABS = [
38410
38483
  * TeamManagementPage - Layout for team management with tabbed navigation
38411
38484
  */
38412
38485
  const TeamManagementPage = ({ variant = 'team', title = 'Team Management', teamPanel, contactsTitle = 'School Contacts', contactAlert, contacts, header, tabs = DEFAULT_TABS, activeTab = 'profile', onTabChange, children, sidebar, footer, className = '', }) => {
38413
- const pageClasses = cx(sx(pageStyle$3), className);
38486
+ const pageClasses = cx(sx(pageStyle$4), className);
38414
38487
  if (variant === 'overview') {
38415
38488
  return (jsxs("div", { className: cx(sx(overviewStyle), className), children: [jsx("header", { className: sx(overviewHeaderStyle), children: jsx("h1", { children: title }) }), jsxs("div", { className: sx(overviewGridStyle), children: [jsx("aside", { children: teamPanel }), jsxs("section", { className: sx(contactsColumnStyle), children: [jsx("h2", { children: contactsTitle }), contactAlert, contacts] })] })] }));
38416
38489
  }
@@ -38418,7 +38491,7 @@ const TeamManagementPage = ({ variant = 'team', title = 'Team Management', teamP
38418
38491
  };
38419
38492
  TeamManagementPage.displayName = 'TeamManagementPage';
38420
38493
 
38421
- const pageStyle$2 = {
38494
+ const pageStyle$3 = {
38422
38495
  label: 'TeamSchedulePage-pageStyle',
38423
38496
  display: 'flex',
38424
38497
  minWidth: 0,
@@ -38445,7 +38518,7 @@ const titleSectionStyle$1 = {
38445
38518
  flexDirection: 'column',
38446
38519
  gap: 12,
38447
38520
  };
38448
- const titleStyle$1 = {
38521
+ const titleStyle$2 = {
38449
38522
  label: 'TeamSchedulePage-titleStyle',
38450
38523
  margin: 0,
38451
38524
  color: 'var(--color-ink, #282828)',
@@ -38537,16 +38610,16 @@ const contentStyle$2 = {
38537
38610
  * - Schedule table (compact or normal view)
38538
38611
  */
38539
38612
  const TeamSchedulePage = ({ title = 'Season Schedule', mobileTitle = 'Season Schedule', subtitle, metrics = [], summary, teamFilter, serviceFilter, actions, compactView, normalView, expandedView, viewMode = 'compact', isMobile = false, className = '', }) => {
38540
- const pageClasses = cx(sx(pageStyle$2), className);
38613
+ const pageClasses = cx(sx(pageStyle$3), className);
38541
38614
  // Back-compat: `expandedView`/`'expanded'` were renamed to `normalView`/`'normal'`.
38542
38615
  const resolvedNormalView = normalView ?? expandedView;
38543
38616
  const resolvedViewMode = viewMode === 'expanded' ? 'normal' : viewMode;
38544
38617
  const headerClasses = cx(sx(headerStyle$2), isMobile && sx(headerMobileStyle$1));
38545
- return (jsxs("div", { className: pageClasses, "data-test": "team-schedule-page", children: [jsxs("div", { className: headerClasses, children: [jsxs("div", { className: sx(titleSectionStyle$1), children: [jsx("h1", { className: sx(titleStyle$1), children: isMobile ? mobileTitle : title }), subtitle && jsx("div", { className: sx(subtitleStyle), children: subtitle }), (teamFilter || serviceFilter) && (jsxs("div", { className: sx(filtersStyle$1), children: [teamFilter, serviceFilter] }))] }), (summary || metrics.length > 0) && (jsx("div", { className: cx(sx(metricsStyle$1), isMobile && sx(metricsMobileStyle$1)), children: summary ?? metrics.map((metric, i) => (jsxs("div", { className: sx(metricStyle$1), children: [jsxs("span", { className: sx(metricValueStyle$1), children: [metric.prefix, metric.value, metric.suffix] }), jsx("span", { className: sx(metricLabelStyle$1), children: metric.label })] }, i))) }))] }), actions, jsx("div", { className: sx(contentStyle$2), children: resolvedViewMode === 'compact' ? compactView : resolvedNormalView })] }));
38618
+ return (jsxs("div", { className: pageClasses, "data-test": "team-schedule-page", children: [jsxs("div", { className: headerClasses, children: [jsxs("div", { className: sx(titleSectionStyle$1), children: [jsx("h1", { className: sx(titleStyle$2), children: isMobile ? mobileTitle : title }), subtitle && jsx("div", { className: sx(subtitleStyle), children: subtitle }), (teamFilter || serviceFilter) && (jsxs("div", { className: sx(filtersStyle$1), children: [teamFilter, serviceFilter] }))] }), (summary || metrics.length > 0) && (jsx("div", { className: cx(sx(metricsStyle$1), isMobile && sx(metricsMobileStyle$1)), children: summary ?? metrics.map((metric, i) => (jsxs("div", { className: sx(metricStyle$1), children: [jsxs("span", { className: sx(metricValueStyle$1), children: [metric.prefix, metric.value, metric.suffix] }), jsx("span", { className: sx(metricLabelStyle$1), children: metric.label })] }, i))) }))] }), actions, jsx("div", { className: sx(contentStyle$2), children: resolvedViewMode === 'compact' ? compactView : resolvedNormalView })] }));
38546
38619
  };
38547
38620
  TeamSchedulePage.displayName = 'TeamSchedulePage';
38548
38621
 
38549
- const pageStyle$1 = {
38622
+ const pageStyle$2 = {
38550
38623
  label: 'TeamTravelCalendarPage-pageStyle',
38551
38624
  display: 'flex',
38552
38625
  minWidth: 0,
@@ -38573,7 +38646,7 @@ const titleSectionStyle = {
38573
38646
  flexDirection: 'column',
38574
38647
  gap: 12,
38575
38648
  };
38576
- const titleStyle = {
38649
+ const titleStyle$1 = {
38577
38650
  label: 'TeamTravelCalendarPage-titleStyle',
38578
38651
  margin: 0,
38579
38652
  color: 'var(--color-ink, #282828)',
@@ -38649,7 +38722,7 @@ const contentStyle$1 = {
38649
38722
  * - Sidebar for due dates
38650
38723
  */
38651
38724
  const TeamTravelCalendarPage = ({ title = 'Team Travel Calendar', mobileTitle = 'Travel Calendar', metrics = [], summary, teamFilter, serviceFilter, viewSelector, typeSelector, calendarView, cardView, listView, sidebar, view = 'calendar', sidebarOpen: _sidebarOpen = false, isMobile = false, className = '', }) => {
38652
- const pageClasses = cx(sx(pageStyle$1), className);
38725
+ const pageClasses = cx(sx(pageStyle$2), className);
38653
38726
  const headerClasses = cx(sx(headerStyle$1), isMobile && sx(headerMobileStyle));
38654
38727
  const renderView = () => {
38655
38728
  switch (view) {
@@ -38663,14 +38736,14 @@ const TeamTravelCalendarPage = ({ title = 'Team Travel Calendar', mobileTitle =
38663
38736
  return null;
38664
38737
  }
38665
38738
  };
38666
- return (jsxs("div", { className: pageClasses, "data-test": "team-travel-calendar-page", children: [jsxs("div", { className: headerClasses, children: [jsxs("div", { className: sx(titleSectionStyle), children: [jsx("h1", { className: sx(titleStyle), children: isMobile ? mobileTitle : title }), jsxs("div", { className: sx(filtersStyle), children: [teamFilter, serviceFilter, viewSelector, typeSelector] })] }), (summary || metrics.length > 0) && (jsx("div", { className: cx(sx(metricsStyle), isMobile && sx(metricsMobileStyle)), children: summary ?? metrics.map((metric, i) => (jsxs("button", { className: sx(metricStyle), onClick: metric.onClick, type: "button", disabled: !metric.onClick, children: [jsx("span", { className: sx(metricValueStyle), children: metric.value }), jsx("span", { className: sx(metricLabelStyle), children: metric.label })] }, i))) }))] }), jsx("div", { className: sx(contentStyle$1), children: renderView() }), sidebar] }));
38739
+ return (jsxs("div", { className: pageClasses, "data-test": "team-travel-calendar-page", children: [jsxs("div", { className: headerClasses, children: [jsxs("div", { className: sx(titleSectionStyle), children: [jsx("h1", { className: sx(titleStyle$1), children: isMobile ? mobileTitle : title }), jsxs("div", { className: sx(filtersStyle), children: [teamFilter, serviceFilter, viewSelector, typeSelector] })] }), (summary || metrics.length > 0) && (jsx("div", { className: cx(sx(metricsStyle), isMobile && sx(metricsMobileStyle)), children: summary ?? metrics.map((metric, i) => (jsxs("button", { className: sx(metricStyle), onClick: metric.onClick, type: "button", disabled: !metric.onClick, children: [jsx("span", { className: sx(metricValueStyle), children: metric.value }), jsx("span", { className: sx(metricLabelStyle), children: metric.label })] }, i))) }))] }), jsx("div", { className: sx(contentStyle$1), children: renderView() }), sidebar] }));
38667
38740
  };
38668
38741
  TeamTravelCalendarPage.displayName = 'TeamTravelCalendarPage';
38669
38742
 
38670
38743
  /** TripDetailPage's compiled rules. The two media queries move inside the
38671
38744
  * styles they widen; nothing else in the stylesheet overlapped, so no
38672
38745
  * specificity work was needed. */
38673
- const pageStyle = {
38746
+ const pageStyle$1 = {
38674
38747
  label: 'TripDetailPage-pageStyle',
38675
38748
  display: 'flex',
38676
38749
  flexDirection: 'column',
@@ -38769,10 +38842,183 @@ const sidebarSectionStyle = {
38769
38842
  * - Right (3 cols): Events, Due Dates
38770
38843
  */
38771
38844
  const TripDetailPage = ({ header, airSegment, groundSegment, hotelSegment, filesSection, teamSection, eventsSection, dueDatesSection, className = '', }) => {
38772
- const pageClasses = cx(sx(pageStyle), className);
38845
+ const pageClasses = cx(sx(pageStyle$1), className);
38773
38846
  return (jsxs("div", { className: pageClasses, children: [header && (jsx("div", { className: sx(headerStyle), children: header })), jsxs("div", { className: sx(contentStyle), children: [jsxs("div", { className: sx(mainColumnStyle), children: [jsxs("div", { className: sx(segmentsGridStyle), children: [jsxs("div", { className: sx(segmentCardStyle), children: [jsx("h3", { className: sx(segmentTitleStyle), children: "Air" }), airSegment || jsx("div", { className: sx(emptyStyle), children: "No flights" })] }), jsxs("div", { className: sx(segmentCardStyle), children: [jsx("h3", { className: sx(segmentTitleStyle), children: "Ground" }), groundSegment || jsx("div", { className: sx(emptyStyle), children: "No ground transportation" })] }), jsxs("div", { className: sx(segmentCardStyle), children: [jsx("h3", { className: sx(segmentTitleStyle), children: "Hotel" }), hotelSegment || jsx("div", { className: sx(emptyStyle), children: "No hotels" })] })] }), filesSection && (jsxs("div", { className: sx(sectionStyle), children: [jsx("h3", { className: sx(sectionTitleStyle), children: "Files" }), filesSection] })), teamSection && (jsxs("div", { className: sx(sectionStyle), children: [jsx("h3", { className: sx(sectionTitleStyle), children: "Team Roster" }), teamSection] }))] }), jsxs("div", { className: sx(sidebarStyle), children: [eventsSection && (jsxs("div", { className: sx(sidebarSectionStyle), children: [jsx("h3", { className: sx(sectionTitleStyle), children: "Events" }), eventsSection] })), dueDatesSection && (jsxs("div", { className: sx(sidebarSectionStyle), children: [jsx("h3", { className: sx(sectionTitleStyle), children: "Due Dates" }), dueDatesSection] }))] })] })] }));
38774
38847
  };
38775
38848
  TripDetailPage.displayName = 'TripDetailPage';
38776
38849
 
38777
- export { ACMI_AIRCRAFT_OPTIONS, ACMI_CARRIER_OPTIONS, ACMI_INSURANCE_FLAT, Accordion, AcmiQuoteCalculator, AdministrationPage, AgentGroupTravelRequestsPage, AgentGroupTravelRequestsTable, AirInvoiceCard, AirSegment, Alert, AppLayout, ArrowDownLeftIcon, ArrowUpRightIcon, Avatar, AvatarGroup, BID_TYPE_HEADINGS, BackLink, Badge, BookingDetailsCard, BuildingIcon, BusIcon$2 as BusIcon, Button, ButtonStyled, CARRIER_CATERING_OPTIONS, CARRIER_CONTACT_TYPES, CHAMPIONSHIP_BID_TYPES, CHAMPIONSHIP_HEADINGS, CHARTER_CONTACT_GROUPS, CHARTER_SECTIONS, CalendarIcon$1 as CalendarIcon, CalendarTypeSelector, CalendarViewSelector, CarIcon$1 as CarIcon, Card, CardBody, CardFooter, CardHeader, CarrierProfilePage, ChampionshipBidDetailPage, ChampionshipBidsPage, CharterBidResponsePage, CharterBidViewPage, CharterManifestPage, CharterSourcingEmailPreview, ChartersAccessManagementPage, ChartersHomePage, CheckIcon$2 as CheckIcon, Checkbox, ChevronDownIcon$1 as ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon$1 as ChevronRightIcon, ChevronUpIcon, ClientSelector, CloseIcon, ConfirmModal, ContactCard$1 as ContactCard, ContactList, ContactUsPage, CubeIcon, DOCUMENT_FILE_EXTENSIONS, DashboardIcon, DashboardPage, Datepicker, DetailList, DocumentIcon, DownloadIcon, Drawer, DrawerBody, DrawerFooter, DrawerHeader, Dropdown, DueDatesDrawer, EditIcon$2 as EditIcon, EmptyState$1 as EmptyState, EyeIcon, FeatureFlagManagementPage, FieldLayout, FileUploadButton, FilterChip, FilterIcon$1 as FilterIcon, FormField, FormRow, FormSection, FormStack, GridHeaderRow, GridIcon, GridTable, GroundSegment, GroupTravelRequestPage, HUB_ADMIN_ITEM, HUB_AGENTS_ITEM, HUB_INDIVIDUAL_TRAVEL_ITEM, HUB_NAV_ITEMS, HUB_OFF_FLEET_ITEM, HUB_SOURCING_ITEM, HUB_STM_CHARTERS_ITEM, HandIcon, HeadsetIcon, HomeIcon, HotelIcon$3 as HotelIcon, HotelSegment, HubAppShell, Icon, Icons, IndividualTravelPage, IndividualTravelRequestDetailPage, IndividualTravelRequestFormPage, InfoCenterPage, InfoIcon$1 as InfoIcon, InfoTile, Input, ItineraryPage, ItinerarySegmentCard, ItineraryTimeline, LightbulbIcon, LimoIcon, ListboxSelect, LockIcon$1 as LockIcon, LogoIcon, LogoutIcon, MailIcon, ManifestCapacityStats, ManifestViewToggle, MegaphoneIcon, MembershipPrograms, MenuIcon, Metric, MinusIcon, Modal, ModalFooter, Module, ModuleDivider, ModuleVerticalDivider, MultiUserSearch, NavCard, NavItem, NextTripCard, NotFoundPage, OFF_FLEET_LEARNED_DESCRIPTION, OFF_FLEET_LEARNED_EMPTY_COPY, OFF_FLEET_QUEUE_DESCRIPTION, OffFleetLearnedExamplesPage, OffFleetReviewQueuePage, OffFleetSubmissionDetailPage, PageBanners, PageHeader, PageHeaderSubsection, Pagination, PhoneIcon, PlaneIcon$3 as PlaneIcon, PlusIcon$2 as PlusIcon, PreferencesPanel, PrinterIcon, ProfileMenu, Progress, ProgressBar, ProgressCircle, QuoteCostBreakdown, QuoteReviewActions, REGULAR_SEASON_BID_TYPES, RailIcon, RefreshIcon, RegularSeasonBidsPage, RegularSeasonBidsTable, ReportIcon, RequestFormFooter, RequestFormHeader, RequestFormLayout, RequestSummary, ResultCount, RosterProgramNumbersPage, RosterReportsPage, RosterToolbar, SOURCING_COST_CATEGORIES, SOURCING_COST_CATEGORY_LABELS, SUPPLIER_TYPE_OPTIONS, SchoolContactForm, SearchField, SearchIcon$1 as SearchIcon, Segment, SegmentedSelector, Select, SelectFilter, ServiceToggle, ServiceToggleList, SettingsIcon, Sidenav, SingleTeamPanelSelector, SourcingQuoteDetailPage, SourcingReviewQueuePage, SourcingReviewQueueTable, Spinner, SportCodeBadge, StatusBadge, SummarySection, SupplierTypeToggle, TRIP_MONTH_OPTIONS, TabPanelStack, TabStrip, Table, TableCell, Tag, TeamCalendarHeader, TeamCard, TeamContactsPanel, TeamEquipmentForm, TeamHeader, TeamImportForm, TeamManagementPage, TeamPicker, TeamProgramForm, TeamRosterMemberForm, TeamScheduleActions, TeamScheduleCompactTable, TeamScheduleEditor, TeamScheduleExpandedTable, TeamSchedulePage, TeamSubMenu, TeamTravelCalendarCardView, TeamTravelCalendarListView, TeamTravelCalendarPage, TeamTravelCalendarToolbar, TeamTravelCalendarView, TeamUserAccessForm, Textarea, ThemeProvider, Timepicker, Title, Toggle, Tooltip, Topbar, TrashIcon$2 as TrashIcon, TravelBoard, TravelDateRange, TravelServiceIcon, TravelSummaryMetrics, TravelerForm, TrendDownIcon, TrendUpIcon, TripDetailPage, TripSegment, TripTable, TypeIcon, UploadIcon, UserIcon, UsersIcon$1 as UsersIcon, WarningIcon$1 as WarningIcon, XIcon, absoluteFill, accentColors, alertBandTokens, alertTokens, boxShadow, brandColors, breakpoints, buildPaginationItems, buttonReset, computeLineItemTotal, computeQuoteTotals, computeTravelTypeCodes, css, cx, darkTheme, lightTheme as defaultTheme, deriveProgramBidStatus, flexCenter, flexCol, flexRow, font, fontFamily, fontSize, fontWeight, formatCompactTripCost, formatItineraryDate, formatItineraryDateRange, formatItineraryMoney, formatTeamScheduleDueDate, formatTeamScheduleTravelDates, getCharterSourcingEmailRoute, getCharterSourcingEmailSubject, getPageCount, getSegmentDate, getSegmentStartMinutes, getSegmentTitle, getTeamTravelCalendarPeriodLabel, groupSegmentsByDay, iconNames, iconRegistry, injectGlobal, isExpiringSoon, isProgramBiddable, isQuoteActionable, isTravelDueDateCompleted, isTravelDueDateOverdue, itineraryPageName, leading, lightTheme, lineClamp, lineHeight, matchesQuoteSearch, merge, moveTeamTravelCalendarPeriod, navyColors, neutralColors, ordinalDay, parseClockTime, parseItineraryDate, primaryColors, radius, rounded, semanticColors, shadow, size, space, spacing, sportCodeVariant, srOnly, statusColors, styled, sx, tabStripTabId, teamColors, textColors, tintColors, toInlineStyle, trans, transition, truncate$1 as truncate, useTheme, weight };
38850
+ const pageStyle = {
38851
+ label: 'VirtualInvoicingPage-pageStyle',
38852
+ color: 'var(--fg-1)',
38853
+ fontFamily: 'var(--font-family-base)',
38854
+ display: 'flex',
38855
+ flexDirection: 'column',
38856
+ gap: 'var(--space-6)',
38857
+ };
38858
+ const titleStyle = {
38859
+ label: 'VirtualInvoicingPage-titleStyle',
38860
+ margin: 0,
38861
+ fontFamily: 'var(--font-family-display)',
38862
+ fontWeight: 'var(--fw-semibold)',
38863
+ fontSize: 'var(--fs-4xl)',
38864
+ letterSpacing: '-0.02em',
38865
+ color: 'var(--color-primary)',
38866
+ };
38867
+ const eyebrowStyle = {
38868
+ label: 'VirtualInvoicingPage-eyebrowStyle',
38869
+ fontFamily: 'var(--font-family-label)',
38870
+ fontWeight: 'var(--fw-bold)',
38871
+ fontSize: 'var(--fs-xs)',
38872
+ letterSpacing: '0.18em',
38873
+ textTransform: 'uppercase',
38874
+ color: 'var(--color-accent-ink)',
38875
+ };
38876
+ const toolbarStyle = {
38877
+ label: 'VirtualInvoicingPage-toolbarStyle',
38878
+ display: 'flex',
38879
+ flexWrap: 'wrap',
38880
+ alignItems: 'center',
38881
+ justifyContent: 'space-between',
38882
+ gap: 'var(--space-3)',
38883
+ };
38884
+ const searchStyle = {
38885
+ label: 'VirtualInvoicingPage-searchStyle',
38886
+ flex: '1 1 280px',
38887
+ maxWidth: 420,
38888
+ };
38889
+ const toolbarActionsStyle = {
38890
+ label: 'VirtualInvoicingPage-toolbarActionsStyle',
38891
+ display: 'flex',
38892
+ gap: 'var(--space-2)',
38893
+ };
38894
+ const cardStyle = {
38895
+ label: 'VirtualInvoicingPage-cardStyle',
38896
+ background: 'var(--bg-surface)',
38897
+ border: '1px solid var(--border-color)',
38898
+ borderRadius: 'var(--radius-xl)',
38899
+ overflow: 'hidden',
38900
+ };
38901
+ const codeStyle = {
38902
+ label: 'VirtualInvoicingPage-codeStyle',
38903
+ fontWeight: 'var(--fw-semibold)',
38904
+ color: 'var(--fg-1)',
38905
+ };
38906
+ const nameStyle = {
38907
+ label: 'VirtualInvoicingPage-nameStyle',
38908
+ marginLeft: 'var(--space-2)',
38909
+ color: 'var(--fg-2)',
38910
+ };
38911
+ const noNameStyle = {
38912
+ label: 'VirtualInvoicingPage-noNameStyle',
38913
+ marginLeft: 'var(--space-2)',
38914
+ color: 'var(--fg-3)',
38915
+ fontStyle: 'italic',
38916
+ };
38917
+ const typeStyle = {
38918
+ label: 'VirtualInvoicingPage-typeStyle',
38919
+ fontFamily: 'var(--font-family-label)',
38920
+ fontWeight: 'var(--fw-semibold)',
38921
+ fontSize: 'var(--fs-xs)',
38922
+ letterSpacing: '0.08em',
38923
+ textTransform: 'uppercase',
38924
+ color: 'var(--fg-2)',
38925
+ };
38926
+ const rowActionsStyle = {
38927
+ label: 'VirtualInvoicingPage-rowActionsStyle',
38928
+ display: 'flex',
38929
+ justifyContent: 'flex-end',
38930
+ gap: 'var(--space-1)',
38931
+ };
38932
+ const countStyle = {
38933
+ label: 'VirtualInvoicingPage-countStyle',
38934
+ margin: 0,
38935
+ fontSize: 'var(--fs-sm)',
38936
+ color: 'var(--fg-3)',
38937
+ };
38938
+ const statusCellStyle = {
38939
+ label: 'VirtualInvoicingPage-statusCellStyle',
38940
+ display: 'flex',
38941
+ alignItems: 'center',
38942
+ gap: 'var(--space-2)',
38943
+ };
38944
+
38945
+ const blankHeader = (patch = {}) => ({
38946
+ accountId: '',
38947
+ branch: '',
38948
+ companyName: '',
38949
+ address: '',
38950
+ city: '',
38951
+ state: '',
38952
+ zipCode: '',
38953
+ phone: '',
38954
+ tollFree: '',
38955
+ afterHoursPhone: '',
38956
+ fax: '',
38957
+ defaultWebsite: '',
38958
+ email: '',
38959
+ hoursOfOperation: '',
38960
+ agentSurveyEndpoint: '',
38961
+ onlineSurveyEndpoint: '',
38962
+ surveyDelayDays: '0',
38963
+ description: '',
38964
+ ...patch,
38965
+ });
38966
+ /**
38967
+ * Virtual Invoicing administration: every account and branch with its status
38968
+ * and VI header in one place. Edit opens the header form beside the list, so
38969
+ * nothing is a separate page to hunt for.
38970
+ */
38971
+ const VirtualInvoicingPage = ({ entries, loading = false, supportEmail = 'productionsupport@shortstravel.com', onSaveHeader, onStatusChange, onDeleteEntry, onAddEntry, className = '', }) => {
38972
+ const [query, setQuery] = useState('');
38973
+ const [editing, setEditing] = useState(null);
38974
+ const [deleting, setDeleting] = useState(null);
38975
+ const visible = useMemo(() => {
38976
+ const q = query.trim().toLowerCase();
38977
+ if (!q)
38978
+ return entries;
38979
+ return entries.filter((e) => `${e.code} ${e.name ?? ''} ${e.type}`.toLowerCase().includes(q));
38980
+ }, [entries, query]);
38981
+ const columns = [
38982
+ {
38983
+ key: 'code',
38984
+ label: 'Branch/Account',
38985
+ render: (_, e) => (jsxs(Fragment, { children: [jsx("span", { className: sx(codeStyle), children: e.code }), e.name ? jsx("span", { className: sx(nameStyle), children: e.name }) : jsx("span", { className: sx(noNameStyle), children: "No name" })] })),
38986
+ },
38987
+ { key: 'type', label: 'Type', render: (_, e) => jsx("span", { className: sx(typeStyle), children: e.type }) },
38988
+ {
38989
+ key: 'status',
38990
+ label: 'Status',
38991
+ render: (_, e) => (jsxs("div", { className: sx(statusCellStyle), children: [jsx(Toggle, { size: "sm", checked: e.status === 'LIVE', "aria-label": `Live: ${e.code}`, onChange: (live) => onStatusChange?.(e, live ? 'LIVE' : 'NOT_LIVE') }), e.status === 'LIVE' ? (jsx(StatusBadge, { status: "approved", label: "Live" })) : (jsx(StatusBadge, { status: "cancelled", label: "Not live" }))] })),
38992
+ },
38993
+ {
38994
+ key: 'header',
38995
+ label: 'VI header',
38996
+ render: (_, e) => e.header ? (jsx(StatusBadge, { status: "approved", label: "Configured" })) : (jsx(StatusBadge, { status: "not-ticketed", label: "Not configured" })),
38997
+ },
38998
+ {
38999
+ key: 'actions',
39000
+ label: 'Actions',
39001
+ align: 'right',
39002
+ render: (_, e) => (jsxs("div", { className: sx(rowActionsStyle), children: [jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${e.code}`, "data-test": `vi-edit-${e.code}`, onClick: () => setEditing({ entry: e }), children: jsx(EditIcon$2, { size: 16 }) }), jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${e.code}`, "data-test": `vi-delete-${e.code}`, onClick: () => setDeleting(e), children: jsx(TrashIcon$2, { size: 16 }) })] })),
39003
+ },
39004
+ ];
39005
+ const editingEntry = editing?.entry;
39006
+ const formValue = editingEntry?.header ??
39007
+ blankHeader(editingEntry
39008
+ ? editingEntry.type === 'ACCOUNT'
39009
+ ? { accountId: editingEntry.code, companyName: editingEntry.name ?? '' }
39010
+ : { branch: editingEntry.code, companyName: editingEntry.name ?? '' }
39011
+ : {});
39012
+ return (jsxs("div", { className: cx(sx(pageStyle), className), children: [jsxs("header", { children: [jsx("span", { className: sx(eyebrowStyle), children: "Administration" }), jsx("h1", { className: sx(titleStyle), children: "Virtual Invoicing" })] }), jsxs(Alert, { variant: "primary", children: ["Please notify ", jsx("a", { href: `mailto:${supportEmail}`, children: supportEmail }), " after making any additions or changes to the Account/Branch status."] }), jsxs("div", { className: sx(toolbarStyle), children: [jsx(SearchField, { className: sx(searchStyle), placeholder: "Search by code, name or type", value: query, onChange: setQuery, onClear: () => setQuery(''), showClear: true }), jsxs("div", { className: sx(toolbarActionsStyle), children: [jsx(Button, { variant: "outline", leftIcon: jsx(PlusIcon$2, { size: 16 }), onClick: onAddEntry, "data-test": "vi-add-entry", children: "Add account/branch" }), jsx(Button, { variant: "primary", leftIcon: jsx(PlusIcon$2, { size: 16 }), onClick: () => setEditing({}), "data-test": "vi-add-header", children: "Add VI header" })] })] }), jsx("div", { className: sx(cardStyle), children: jsx(Table, { columns: columns, data: visible, rowKey: "id", loading: loading, emptyContent: jsx(EmptyState$1, { title: query ? 'No matching accounts or branches' : 'No accounts or branches yet', description: query ? 'Try a different code or name.' : 'Add an account or branch to get started.' }) }) }), !loading && (jsxs("p", { className: sx(countStyle), children: ["Showing ", visible.length, " of ", entries.length] })), jsxs(Drawer, { isOpen: !!editing, onClose: () => setEditing(null), size: "lg", children: [jsx(Drawer.Header, { title: editingEntry ? `VI header · ${editingEntry.code}` : 'New VI header', onClose: () => setEditing(null) }), jsx(Drawer.Body, { children: jsx(ViHeaderForm, { value: formValue, onCancel: () => setEditing(null), onSave: (header) => {
39013
+ onSaveHeader?.(header, editingEntry);
39014
+ setEditing(null);
39015
+ } }, editingEntry?.id ?? 'new') })] }), jsx(Modal, { isOpen: !!deleting, onClose: () => setDeleting(null), title: "Delete account/branch?", size: "sm", footer: jsxs(Fragment, { children: [jsx(Button, { variant: "outline", onClick: () => setDeleting(null), children: "Cancel" }), jsx(Button, { variant: "danger", "data-test": "vi-confirm-delete", onClick: () => {
39016
+ if (deleting)
39017
+ onDeleteEntry?.(deleting);
39018
+ setDeleting(null);
39019
+ }, children: "Delete" })] }), children: deleting && (jsxs("p", { children: [deleting.code, deleting.name ? ` – ${deleting.name}` : '', " will be removed from virtual invoicing. Remember to notify production support."] })) })] }));
39020
+ };
39021
+ VirtualInvoicingPage.displayName = 'VirtualInvoicingPage';
39022
+
39023
+ export { ACMI_AIRCRAFT_OPTIONS, ACMI_CARRIER_OPTIONS, ACMI_INSURANCE_FLAT, Accordion, AcmiQuoteCalculator, AdministrationPage, AgentGroupTravelRequestsPage, AgentGroupTravelRequestsTable, AirInvoiceCard, AirSegment, Alert, AppLayout, ArrowDownLeftIcon, ArrowUpRightIcon, Avatar, AvatarGroup, BID_TYPE_HEADINGS, BackLink, Badge, BookingDetailsCard, BuildingIcon, BusIcon$2 as BusIcon, Button, ButtonStyled, CARRIER_CATERING_OPTIONS, CARRIER_CONTACT_TYPES, CHAMPIONSHIP_BID_TYPES, CHAMPIONSHIP_HEADINGS, CHARTER_CONTACT_GROUPS, CHARTER_SECTIONS, CalendarIcon$1 as CalendarIcon, CalendarTypeSelector, CalendarViewSelector, CarIcon$1 as CarIcon, Card, CardBody, CardFooter, CardHeader, CarrierProfilePage, ChampionshipBidDetailPage, ChampionshipBidsPage, CharterBidResponsePage, CharterBidViewPage, CharterManifestPage, CharterSourcingEmailPreview, ChartersAccessManagementPage, ChartersHomePage, CheckIcon$2 as CheckIcon, Checkbox, ChevronDownIcon$1 as ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon$1 as ChevronRightIcon, ChevronUpIcon, ClientSelector, CloseIcon, ConfirmModal, ContactCard$1 as ContactCard, ContactList, ContactUsPage, CubeIcon, DOCUMENT_FILE_EXTENSIONS, DashboardIcon, DashboardPage, Datepicker, DetailList, DocumentIcon, DownloadIcon, Drawer, DrawerBody, DrawerFooter, DrawerHeader, Dropdown, DueDatesDrawer, EditIcon$2 as EditIcon, EmptyState$1 as EmptyState, EyeIcon, FeatureFlagManagementPage, FieldLayout, FileUploadButton, FilterChip, FilterIcon$1 as FilterIcon, FormField, FormRow, FormSection, FormStack, GridHeaderRow, GridIcon, GridTable, GroundSegment, GroupTravelRequestPage, HUB_ADMIN_ITEM, HUB_AGENTS_ITEM, HUB_INDIVIDUAL_TRAVEL_ITEM, HUB_NAV_ITEMS, HUB_OFF_FLEET_ITEM, HUB_SOURCING_ITEM, HUB_STM_CHARTERS_ITEM, HandIcon, HeadsetIcon, HomeIcon, HotelIcon$3 as HotelIcon, HotelSegment, HubAppShell, Icon, Icons, IndividualTravelPage, IndividualTravelRequestDetailPage, IndividualTravelRequestFormPage, InfoCenterPage, InfoIcon$1 as InfoIcon, InfoTile, Input, ItineraryPage, ItinerarySegmentCard, ItineraryTimeline, LightbulbIcon, LimoIcon, ListboxSelect, LockIcon$1 as LockIcon, LogoIcon, LogoutIcon, MailIcon, ManifestCapacityStats, ManifestViewToggle, MegaphoneIcon, MembershipPrograms, MenuIcon, Metric, MinusIcon, Modal, ModalFooter, Module, ModuleDivider, ModuleVerticalDivider, MultiUserSearch, NavCard, NavItem, NextTripCard, NotFoundPage, OFF_FLEET_LEARNED_DESCRIPTION, OFF_FLEET_LEARNED_EMPTY_COPY, OFF_FLEET_QUEUE_DESCRIPTION, OffFleetLearnedExamplesPage, OffFleetReviewQueuePage, OffFleetSubmissionDetailPage, PageBanners, PageHeader, PageHeaderSubsection, Pagination, PhoneIcon, PlaneIcon$3 as PlaneIcon, PlusIcon$2 as PlusIcon, PreferencesPanel, PrinterIcon, ProfileMenu, Progress, ProgressBar, ProgressCircle, QuoteCostBreakdown, QuoteReviewActions, REGULAR_SEASON_BID_TYPES, RailIcon, RefreshIcon, RegularSeasonBidsPage, RegularSeasonBidsTable, ReportIcon, RequestFormFooter, RequestFormHeader, RequestFormLayout, RequestSummary, ResultCount, RosterProgramNumbersPage, RosterReportsPage, RosterToolbar, SOURCING_COST_CATEGORIES, SOURCING_COST_CATEGORY_LABELS, SUPPLIER_TYPE_OPTIONS, SchoolContactForm, SearchField, SearchIcon$1 as SearchIcon, Segment, SegmentedSelector, Select, SelectFilter, ServiceToggle, ServiceToggleList, SettingsIcon, Sidenav, SingleTeamPanelSelector, SourcingQuoteDetailPage, SourcingReviewQueuePage, SourcingReviewQueueTable, Spinner, SportCodeBadge, StatusBadge, SummarySection, SupplierTypeToggle, TRIP_MONTH_OPTIONS, TabPanelStack, TabStrip, Table, TableCell, Tag, TeamCalendarHeader, TeamCard, TeamContactsPanel, TeamEquipmentForm, TeamHeader, TeamImportForm, TeamManagementPage, TeamPicker, TeamProgramForm, TeamRosterMemberForm, TeamScheduleActions, TeamScheduleCompactTable, TeamScheduleEditor, TeamScheduleExpandedTable, TeamSchedulePage, TeamSubMenu, TeamTravelCalendarCardView, TeamTravelCalendarListView, TeamTravelCalendarPage, TeamTravelCalendarToolbar, TeamTravelCalendarView, TeamUserAccessForm, Textarea, ThemeProvider, Timepicker, Title, Toggle, Tooltip, Topbar, TrashIcon$2 as TrashIcon, TravelBoard, TravelDateRange, TravelServiceIcon, TravelSummaryMetrics, TravelerForm, TrendDownIcon, TrendUpIcon, TripDetailPage, TripSegment, TripTable, TypeIcon, UploadIcon, UserIcon, UsersIcon$1 as UsersIcon, ViHeaderForm, VirtualInvoicingPage, WarningIcon$1 as WarningIcon, XIcon, absoluteFill, accentColors, alertBandTokens, alertTokens, boxShadow, brandColors, breakpoints, buildPaginationItems, buttonReset, computeLineItemTotal, computeQuoteTotals, computeTravelTypeCodes, css, cx, darkTheme, lightTheme as defaultTheme, deriveProgramBidStatus, flexCenter, flexCol, flexRow, font, fontFamily, fontSize, fontWeight, formatCompactTripCost, formatItineraryDate, formatItineraryDateRange, formatItineraryMoney, formatTeamScheduleDueDate, formatTeamScheduleTravelDates, getCharterSourcingEmailRoute, getCharterSourcingEmailSubject, getPageCount, getSegmentDate, getSegmentStartMinutes, getSegmentTitle, getTeamTravelCalendarPeriodLabel, groupSegmentsByDay, iconNames, iconRegistry, injectGlobal, isExpiringSoon, isProgramBiddable, isQuoteActionable, isTravelDueDateCompleted, isTravelDueDateOverdue, itineraryPageName, leading, lightTheme, lineClamp, lineHeight, matchesQuoteSearch, merge, moveTeamTravelCalendarPeriod, navyColors, neutralColors, ordinalDay, parseClockTime, parseItineraryDate, primaryColors, radius, rounded, semanticColors, shadow, size, space, spacing, sportCodeVariant, srOnly, statusColors, styled, sx, tabStripTabId, teamColors, textColors, tintColors, toInlineStyle, trans, transition, truncate$1 as truncate, useTheme, weight };
38778
39024
  //# sourceMappingURL=index.esm.js.map