@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.js CHANGED
@@ -1080,7 +1080,7 @@ const iconStyle$h = {
1080
1080
  const bodyStyle$d = {
1081
1081
  label: 'Alert-bodyStyle', flex: 1, minWidth: 0
1082
1082
  };
1083
- const titleStyle$H = {
1083
+ const titleStyle$I = {
1084
1084
  label: 'Alert-titleStyle',
1085
1085
  color: 'var(--alert-ink)',
1086
1086
  fontWeight: 'var(--font-weight-semibold)',
@@ -1149,7 +1149,7 @@ const variantIcons = {
1149
1149
  */
1150
1150
  const Alert = ({ variant = 'primary', title, children, dismissible = false, onDismiss, className = '', }) => {
1151
1151
  const IconComponent = variantIcons[variant];
1152
- return (jsxRuntime.jsx("div", { className: cx(sx(alertStyle$5), sx(variantStyles$8[variant]), className), role: "alert", children: jsxRuntime.jsxs("div", { className: sx(contentStyle$e), children: [jsxRuntime.jsx(IconComponent, { className: sx(iconStyle$h), size: 20 }), jsxRuntime.jsxs("div", { className: sx(bodyStyle$d), children: [title && jsxRuntime.jsx("h4", { className: sx(titleStyle$H), children: title }), jsxRuntime.jsx("div", { className: sx(messageStyle$3), children: children })] }), dismissible && onDismiss && (jsxRuntime.jsx("button", { type: "button", onClick: onDismiss, className: sx(dismissButtonStyle), "aria-label": "Dismiss alert", children: jsxRuntime.jsx(CloseIcon, { size: 16 }) }))] }) }));
1152
+ return (jsxRuntime.jsx("div", { className: cx(sx(alertStyle$5), sx(variantStyles$8[variant]), className), role: "alert", children: jsxRuntime.jsxs("div", { className: sx(contentStyle$e), children: [jsxRuntime.jsx(IconComponent, { className: sx(iconStyle$h), size: 20 }), jsxRuntime.jsxs("div", { className: sx(bodyStyle$d), children: [title && jsxRuntime.jsx("h4", { className: sx(titleStyle$I), children: title }), jsxRuntime.jsx("div", { className: sx(messageStyle$3), children: children })] }), dismissible && onDismiss && (jsxRuntime.jsx("button", { type: "button", onClick: onDismiss, className: sx(dismissButtonStyle), "aria-label": "Dismiss alert", children: jsxRuntime.jsx(CloseIcon, { size: 16 }) }))] }) }));
1153
1153
  };
1154
1154
 
1155
1155
  const avatarSizeStyles = {
@@ -2842,7 +2842,7 @@ const textareaSizeStyles = {
2842
2842
  * The focus rules below restate the ring the base focus rules already set —
2843
2843
  * they did in the sheet too, and they are carried across unchanged.
2844
2844
  */
2845
- const errorStyle$4 = {
2845
+ const errorStyle$5 = {
2846
2846
  label: 'Input-errorStyle',
2847
2847
  '&&&': {
2848
2848
  borderColor: 'var(--color-danger-accent)',
@@ -2984,7 +2984,7 @@ const Input = React.forwardRef(({ size = 'md', sizing = 'fixed', label, helperTe
2984
2984
  const inputWrapperClasses = cx(sx(inputWrapperStyle$3),
2985
2985
  // The fixed-height class still applies its horizontal padding and gap;
2986
2986
  // the padded classes that follow override height and the vertical rhythm.
2987
- sx(sizeStyles$8[size]), paddedClasses(sizing, size), error && sx(errorStyle$4), disabled && sx(disabledStyle$7));
2987
+ sx(sizeStyles$8[size]), paddedClasses(sizing, size), error && sx(errorStyle$5), disabled && sx(disabledStyle$7));
2988
2988
  return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: inputId, className: sx(labelStyle$g), children: label })), jsxRuntime.jsxs("div", { className: inputWrapperClasses, children: [leftIcon && jsxRuntime.jsx("span", { className: sx(iconStyle$d), children: leftIcon }), jsxRuntime.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 && jsxRuntime.jsx("span", { className: sx(iconStyle$d), children: rightIcon })] }), error && (jsxRuntime.jsx("span", { id: `${inputId}-error`, className: sx(errorTextStyle$4), children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: `${inputId}-helper`, className: sx(helperTextStyle$4), children: helperText }))] }));
2989
2989
  });
2990
2990
  Input.displayName = 'Input';
@@ -3000,7 +3000,7 @@ const Textarea = React.forwardRef(({ size = 'md', sizing = 'fixed', label, helpe
3000
3000
  sx(textareaSizeStyles[size]), paddedClasses(sizing, size),
3001
3001
  // `.textarea.paddedSm` — the type scale the padded rules put on a
3002
3002
  // descendant `.input` that a bare <textarea> does not have.
3003
- sizing === 'padded' && sx(textareaPaddedSizeStyles[size]), error && sx(errorStyle$4), disabled && sx(disabledStyle$7));
3003
+ sizing === 'padded' && sx(textareaPaddedSizeStyles[size]), error && sx(errorStyle$5), disabled && sx(disabledStyle$7));
3004
3004
  return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: textareaId, className: sx(labelStyle$g), children: label })), jsxRuntime.jsx("textarea", { ref: ref, id: textareaId, className: textareaClasses, disabled: disabled, rows: rows, "aria-invalid": !!error, "aria-describedby": error ? `${textareaId}-error` : helperText ? `${textareaId}-helper` : undefined, ...props }), error && (jsxRuntime.jsx("span", { id: `${textareaId}-error`, className: sx(errorTextStyle$4), children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: `${textareaId}-helper`, className: sx(helperTextStyle$4), children: helperText }))] }));
3005
3005
  });
3006
3006
  Textarea.displayName = 'Textarea';
@@ -3248,7 +3248,7 @@ const chevron$1 = `.${sx(chevronStyle$6)}`;
3248
3248
  * `.selectWrapper:focus-within`, which is rewritten below as `&&:focus-within`
3249
3249
  * (0,3,0) so it still clears the plain `&&` error border.
3250
3250
  */
3251
- const errorStyle$3 = {
3251
+ const errorStyle$4 = {
3252
3252
  label: 'Select-errorStyle',
3253
3253
  '&&': { borderColor: 'var(--color-red-500)' },
3254
3254
  '&&&:focus-within': {
@@ -3256,7 +3256,7 @@ const errorStyle$3 = {
3256
3256
  boxShadow: '0 0 0 2px var(--color-accent-ink), 0 0 0 5px var(--color-accent-glow)',
3257
3257
  },
3258
3258
  };
3259
- const error = `.${sx(errorStyle$3)}`;
3259
+ const error = `.${sx(errorStyle$4)}`;
3260
3260
  /**
3261
3261
  * `&&` for the wrapper's own background/cursor, which beat `.selectWrapper` on
3262
3262
  * source order; `&& .select` (0,3,0) for the inner colour, which had to clear
@@ -3420,7 +3420,7 @@ const Select = React.forwardRef(({ options, optionGroups, size = 'md', label, pl
3420
3420
  * their padded sizes separately, so Input's objects are not this
3421
3421
  * component's. The prop is the shared contract; the rules are local.
3422
3422
  */
3423
- 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));
3423
+ 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));
3424
3424
  const renderOptions = () => {
3425
3425
  // Render grouped options
3426
3426
  if (optionGroups && optionGroups.length > 0) {
@@ -3733,7 +3733,7 @@ const inputStyle$4 = {
3733
3733
  * `.inputWrapper:focus-within` on specificity and won on source order — here it
3734
3734
  * has to out-rank that rule's own `&&&:focus-within` (0,4,0) outright.
3735
3735
  */
3736
- const errorStyle$2 = {
3736
+ const errorStyle$3 = {
3737
3737
  label: 'Timepicker-errorStyle',
3738
3738
  '&&': {
3739
3739
  borderColor: 'var(--color-red-500)',
@@ -3783,7 +3783,7 @@ const inputWrapperStyle$2 = {
3783
3783
  borderColor: 'var(--color-primary-500)',
3784
3784
  boxShadow: '0 0 0 2px var(--color-accent-ink), 0 0 0 5px var(--color-accent-glow)',
3785
3785
  },
3786
- [`&&&&:hover:not(.${sx(disabledStyle$5)}):not(.${sx(errorStyle$2)})`]: {
3786
+ [`&&&&:hover:not(.${sx(disabledStyle$5)}):not(.${sx(errorStyle$3)})`]: {
3787
3787
  borderColor: 'var(--color-gray-400)',
3788
3788
  },
3789
3789
  };
@@ -3828,7 +3828,7 @@ const Timepicker = React.forwardRef(({ size = 'md', label, helperText, error, fu
3828
3828
  const helperId = `${inputId}-helper`;
3829
3829
  const errorId = `${inputId}-error`;
3830
3830
  const wrapperClasses = cx(sx(wrapperStyle$6), fullWidth ? sx(fullWidthStyle$1) : '', className);
3831
- const inputWrapperClasses = cx(sx(inputWrapperStyle$2), sx(sizeStyles$5[size]), error ? sx(errorStyle$2) : '', disabled ? sx(disabledStyle$5) : '');
3831
+ const inputWrapperClasses = cx(sx(inputWrapperStyle$2), sx(sizeStyles$5[size]), error ? sx(errorStyle$3) : '', disabled ? sx(disabledStyle$5) : '');
3832
3832
  return (jsxRuntime.jsxs("div", { className: wrapperClasses, children: [label && (jsxRuntime.jsx("label", { htmlFor: inputId, className: sx(labelStyle$d), children: label })), jsxRuntime.jsxs("div", { className: inputWrapperClasses, children: [jsxRuntime.jsx("span", { className: sx(iconStyle$c), children: jsxRuntime.jsx(ClockIcon$1, {}) }), jsxRuntime.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]
3833
3833
  .filter(Boolean)
3834
3834
  .join(' ') || undefined, ...props })] }), error && (jsxRuntime.jsx("span", { id: errorId, className: sx(errorTextStyle$2), children: error })), helperText && !error && (jsxRuntime.jsx("span", { id: helperId, className: sx(helperTextStyle$2), children: helperText }))] }));
@@ -3836,7 +3836,7 @@ const Timepicker = React.forwardRef(({ size = 'md', label, helperText, error, fu
3836
3836
  Timepicker.displayName = 'Timepicker';
3837
3837
 
3838
3838
  /** The page heading: display face, tightened tracking, and no default margin. */
3839
- const titleStyle$G = {
3839
+ const titleStyle$H = {
3840
3840
  label: 'Title-titleStyle',
3841
3841
  fontFamily: 'var(--font-family-display)',
3842
3842
  fontSize: 36,
@@ -3863,7 +3863,7 @@ const weightStyles = {
3863
3863
  * Large, prominent text for page titles.
3864
3864
  */
3865
3865
  const Title = ({ children, weight = 'light', className = '', }) => {
3866
- return (jsxRuntime.jsx("h1", { className: cx(sx(titleStyle$G), sx(weightStyles[weight]), className), children: children }));
3866
+ return (jsxRuntime.jsx("h1", { className: cx(sx(titleStyle$H), sx(weightStyles[weight]), className), children: children }));
3867
3867
  };
3868
3868
  Title.displayName = 'Title';
3869
3869
 
@@ -4720,11 +4720,11 @@ const identityStyle$2 = {
4720
4720
  display: 'flex',
4721
4721
  flexDirection: 'column',
4722
4722
  };
4723
- const nameStyle$6 = {
4723
+ const nameStyle$7 = {
4724
4724
  label: 'ContactCard-nameStyle',
4725
4725
  fontWeight: 600,
4726
4726
  };
4727
- const titleStyle$F = {
4727
+ const titleStyle$G = {
4728
4728
  label: 'ContactCard-titleStyle',
4729
4729
  fontSize: 12,
4730
4730
  color: 'var(--color-slate, #5c5c5c)',
@@ -4754,7 +4754,7 @@ const linkTextStyle = {
4754
4754
  const ContactCard$1 = ({ name, title, phone, email, action, showAvatar = true, className = '', }) => {
4755
4755
  if (!action && !name)
4756
4756
  return null;
4757
- return (jsxRuntime.jsxs("div", { className: cx(sx(contactStyle$1), className), children: [name && showAvatar && jsxRuntime.jsx(Avatar, { name: name, size: 36 }), jsxRuntime.jsxs("div", { className: sx(bodyStyle$b), children: [jsxRuntime.jsxs("div", { className: sx(identityStyle$2), children: [action || jsxRuntime.jsx("span", { className: sx(nameStyle$6), children: name }), title && jsxRuntime.jsx("span", { className: sx(titleStyle$F), children: title })] }), phone && (jsxRuntime.jsxs("a", { href: `tel:${phone}`, className: sx(linkStyle$1), children: [jsxRuntime.jsx(PhoneIcon, { size: 16, "aria-hidden": "true" }), jsxRuntime.jsx("span", { className: sx(linkTextStyle), children: phone })] })), email && (jsxRuntime.jsxs("a", { href: `mailto:${email}`, className: sx(linkStyle$1), children: [jsxRuntime.jsx(MailIcon, { size: 16, "aria-hidden": "true" }), jsxRuntime.jsx("span", { className: sx(linkTextStyle), children: email })] }))] })] }));
4757
+ return (jsxRuntime.jsxs("div", { className: cx(sx(contactStyle$1), className), children: [name && showAvatar && jsxRuntime.jsx(Avatar, { name: name, size: 36 }), jsxRuntime.jsxs("div", { className: sx(bodyStyle$b), children: [jsxRuntime.jsxs("div", { className: sx(identityStyle$2), children: [action || jsxRuntime.jsx("span", { className: sx(nameStyle$7), children: name }), title && jsxRuntime.jsx("span", { className: sx(titleStyle$G), children: title })] }), phone && (jsxRuntime.jsxs("a", { href: `tel:${phone}`, className: sx(linkStyle$1), children: [jsxRuntime.jsx(PhoneIcon, { size: 16, "aria-hidden": "true" }), jsxRuntime.jsx("span", { className: sx(linkTextStyle), children: phone })] })), email && (jsxRuntime.jsxs("a", { href: `mailto:${email}`, className: sx(linkStyle$1), children: [jsxRuntime.jsx(MailIcon, { size: 16, "aria-hidden": "true" }), jsxRuntime.jsx("span", { className: sx(linkTextStyle), children: email })] }))] })] }));
4758
4758
  };
4759
4759
  ContactCard$1.displayName = 'ContactCard';
4760
4760
 
@@ -5074,7 +5074,7 @@ const iconStyle$a = {
5074
5074
  backgroundColor: 'var(--bg-subtle)',
5075
5075
  color: 'var(--fg-4)',
5076
5076
  };
5077
- const titleStyle$E = {
5077
+ const titleStyle$F = {
5078
5078
  label: 'EmptyState-titleStyle',
5079
5079
  margin: 0,
5080
5080
  color: 'var(--fg-1)',
@@ -5090,7 +5090,7 @@ const descriptionStyle$a = {
5090
5090
  fontSize: 'var(--fs-sm)',
5091
5091
  lineHeight: 'var(--lh-sm)',
5092
5092
  };
5093
- const actionsStyle$d = {
5093
+ const actionsStyle$e = {
5094
5094
  label: 'EmptyState-actionsStyle',
5095
5095
  display: 'flex',
5096
5096
  flexWrap: 'wrap',
@@ -5100,7 +5100,7 @@ const actionsStyle$d = {
5100
5100
  };
5101
5101
 
5102
5102
  /** Placeholder shown when a list, table, or panel has nothing to display. */
5103
- const EmptyState$1 = ({ title, description, icon, actionLabel, onAction, secondaryActionLabel, onSecondaryAction, size = 'md', children, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(emptyStateStyle$1), sx(sizeStyles$4[size]), className), "data-test": "empty-state", children: [icon && jsxRuntime.jsx("div", { className: sx(iconStyle$a), "aria-hidden": "true", children: icon }), jsxRuntime.jsx("p", { className: sx(titleStyle$E), children: title }), description && jsxRuntime.jsx("p", { className: sx(descriptionStyle$a), children: description }), (actionLabel || secondaryActionLabel) && (jsxRuntime.jsxs("div", { className: sx(actionsStyle$d), children: [actionLabel && (jsxRuntime.jsx(Button, { size: "sm", onClick: onAction, "data-test": "empty-state-action", children: actionLabel })), secondaryActionLabel && (jsxRuntime.jsx(Button, { size: "sm", variant: "secondary", onClick: onSecondaryAction, "data-test": "empty-state-secondary-action", children: secondaryActionLabel }))] })), children] }));
5103
+ const EmptyState$1 = ({ title, description, icon, actionLabel, onAction, secondaryActionLabel, onSecondaryAction, size = 'md', children, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(emptyStateStyle$1), sx(sizeStyles$4[size]), className), "data-test": "empty-state", children: [icon && jsxRuntime.jsx("div", { className: sx(iconStyle$a), "aria-hidden": "true", children: icon }), jsxRuntime.jsx("p", { className: sx(titleStyle$F), children: title }), description && jsxRuntime.jsx("p", { className: sx(descriptionStyle$a), children: description }), (actionLabel || secondaryActionLabel) && (jsxRuntime.jsxs("div", { className: sx(actionsStyle$e), children: [actionLabel && (jsxRuntime.jsx(Button, { size: "sm", onClick: onAction, "data-test": "empty-state-action", children: actionLabel })), secondaryActionLabel && (jsxRuntime.jsx(Button, { size: "sm", variant: "secondary", onClick: onSecondaryAction, "data-test": "empty-state-secondary-action", children: secondaryActionLabel }))] })), children] }));
5104
5104
 
5105
5105
  /** FieldLayout's compiled rules. */
5106
5106
  const fieldStyle$4 = {
@@ -5180,11 +5180,11 @@ const messageStyle$2 = {
5180
5180
  label: 'FieldLayout-messageStyle', fontSize: 12
5181
5181
  };
5182
5182
  /** Paired with `messageStyle`, which sets no colour — no ranking to preserve. */
5183
- const errorStyle$1 = {
5183
+ const errorStyle$2 = {
5184
5184
  label: 'FieldLayout-errorStyle',
5185
5185
  color: 'var(--color-error, #940000)',
5186
5186
  };
5187
- const noteStyle$2 = {
5187
+ const noteStyle$3 = {
5188
5188
  label: 'FieldLayout-noteStyle',
5189
5189
  color: 'var(--color-stone, #787878)',
5190
5190
  };
@@ -5202,7 +5202,7 @@ const FieldLayout = ({ children, label, labelPosition = 'top', showLabel = true,
5202
5202
  const id = React.useId();
5203
5203
  const errorId = `${id}-error`;
5204
5204
  const hasError = Boolean(error);
5205
- return (jsxRuntime.jsxs("div", { className: cx(sx(fieldStyle$4), sx(labelPositionStyles[labelPosition]), className), children: [label && showLabel && (jsxRuntime.jsxs("label", { htmlFor: id, className: cx(sx(labelStyle$b), hasError ? sx(labelErrorStyle) : ''), children: [label, required && !disabled && (jsxRuntime.jsx("span", { className: sx(requiredStyle$2), "aria-hidden": "true", children: "*" })), tooltip && (jsxRuntime.jsx(Tooltip, { className: sx(tooltipStyle$1), content: tooltip, children: jsxRuntime.jsx(InfoIcon$1, { size: 16 }) }))] })), jsxRuntime.jsxs("div", { className: sx(controlStyle$2), children: [leftIcon && !disabled && (jsxRuntime.jsx("span", { className: cx(sx(iconStyle$9), sx(iconLeftStyle)), "aria-hidden": "true", children: leftIcon })), children({ id, describedBy: hasError ? errorId : undefined, hasError }), rightIcon && !disabled && (jsxRuntime.jsx("span", { className: cx(sx(iconStyle$9), sx(iconRightStyle)), "aria-hidden": "true", children: rightIcon }))] }), hasError && (jsxRuntime.jsx("p", { id: errorId, className: cx(sx(messageStyle$2), sx(errorStyle$1)), children: error })), note && jsxRuntime.jsx("p", { className: cx(sx(messageStyle$2), sx(noteStyle$2)), children: note })] }));
5205
+ return (jsxRuntime.jsxs("div", { className: cx(sx(fieldStyle$4), sx(labelPositionStyles[labelPosition]), className), children: [label && showLabel && (jsxRuntime.jsxs("label", { htmlFor: id, className: cx(sx(labelStyle$b), hasError ? sx(labelErrorStyle) : ''), children: [label, required && !disabled && (jsxRuntime.jsx("span", { className: sx(requiredStyle$2), "aria-hidden": "true", children: "*" })), tooltip && (jsxRuntime.jsx(Tooltip, { className: sx(tooltipStyle$1), content: tooltip, children: jsxRuntime.jsx(InfoIcon$1, { size: 16 }) }))] })), jsxRuntime.jsxs("div", { className: sx(controlStyle$2), children: [leftIcon && !disabled && (jsxRuntime.jsx("span", { className: cx(sx(iconStyle$9), sx(iconLeftStyle)), "aria-hidden": "true", children: leftIcon })), children({ id, describedBy: hasError ? errorId : undefined, hasError }), rightIcon && !disabled && (jsxRuntime.jsx("span", { className: cx(sx(iconStyle$9), sx(iconRightStyle)), "aria-hidden": "true", children: rightIcon }))] }), hasError && (jsxRuntime.jsx("p", { id: errorId, className: cx(sx(messageStyle$2), sx(errorStyle$2)), children: error })), note && jsxRuntime.jsx("p", { className: cx(sx(messageStyle$2), sx(noteStyle$3)), children: note })] }));
5206
5206
  };
5207
5207
  FieldLayout.displayName = 'FieldLayout';
5208
5208
 
@@ -5733,7 +5733,7 @@ const iconStyle$8 = {
5733
5733
  display: 'flex',
5734
5734
  },
5735
5735
  };
5736
- const titleStyle$D = {
5736
+ const titleStyle$E = {
5737
5737
  label: 'FormSection-titleStyle',
5738
5738
  margin: 0,
5739
5739
  fontSize: 16,
@@ -5800,7 +5800,7 @@ const statusStyles = {
5800
5800
  const FormSection = ({ title, icon, description, action, status, disabled = false, children, className, id, dataTest, }) => {
5801
5801
  const isSubmitted = status === 'submitted';
5802
5802
  const isDisabled = disabled || isSubmitted;
5803
- return (jsxRuntime.jsxs("div", { className: cx(sx(sectionStyle$a), className), id: id, "data-test": dataTest, children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$J), children: [icon && jsxRuntime.jsx("span", { className: sx(iconStyle$8), children: icon }), jsxRuntime.jsxs("div", { className: sx(headingStyle$5), children: [jsxRuntime.jsx("h2", { className: sx(titleStyle$D), children: title }), description && jsxRuntime.jsx("p", { className: sx(descriptionStyle$9), children: description })] }), action && jsxRuntime.jsx("div", { className: sx(actionStyle$1), children: action })] }), jsxRuntime.jsxs("fieldset", { disabled: isDisabled, className: cx(sx(fieldsetStyle), isDisabled && sx(disabledStyle$4)), children: [status && (jsxRuntime.jsxs("div", { className: sx(statusStyle$6), children: [jsxRuntime.jsx("span", { className: sx(statusLabelStyle), children: "Status:" }), jsxRuntime.jsx("span", { className: cx(sx(statusValueStyle), sx(statusStyles[status])), children: status === 'submitted' ? 'Submitted' : status === 'draft' ? 'Draft' : 'Not Submitted' })] })), children] })] }));
5803
+ return (jsxRuntime.jsxs("div", { className: cx(sx(sectionStyle$a), className), id: id, "data-test": dataTest, children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$J), children: [icon && jsxRuntime.jsx("span", { className: sx(iconStyle$8), children: icon }), jsxRuntime.jsxs("div", { className: sx(headingStyle$5), children: [jsxRuntime.jsx("h2", { className: sx(titleStyle$E), children: title }), description && jsxRuntime.jsx("p", { className: sx(descriptionStyle$9), children: description })] }), action && jsxRuntime.jsx("div", { className: sx(actionStyle$1), children: action })] }), jsxRuntime.jsxs("fieldset", { disabled: isDisabled, className: cx(sx(fieldsetStyle), isDisabled && sx(disabledStyle$4)), children: [status && (jsxRuntime.jsxs("div", { className: sx(statusStyle$6), children: [jsxRuntime.jsx("span", { className: sx(statusLabelStyle), children: "Status:" }), jsxRuntime.jsx("span", { className: cx(sx(statusValueStyle), sx(statusStyles[status])), children: status === 'submitted' ? 'Submitted' : status === 'draft' ? 'Draft' : 'Not Submitted' })] })), children] })] }));
5804
5804
  };
5805
5805
  FormSection.displayName = 'FormSection';
5806
5806
 
@@ -5948,7 +5948,7 @@ const lockedActiveStyle = {
5948
5948
  * and the tab picks one, which is exactly what the cascade resolved to and
5949
5949
  * needs no ordering between the rules to hold.
5950
5950
  */
5951
- const countStyle = {
5951
+ const countStyle$1 = {
5952
5952
  label: 'ManifestViewToggle-countStyle',
5953
5953
  fontSize: 11,
5954
5954
  fontWeight: 'var(--fw-bold)',
@@ -5975,7 +5975,7 @@ const ManifestViewToggle = ({ view, onView, paxCount, eqCount, locked, className
5975
5975
  // Locked reads before active, matching the descendant rules the
5976
5976
  // stylesheet ordered the same way.
5977
5977
  const countState = locked ? 'locked' : active ? 'active' : 'default';
5978
- return (jsxRuntime.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: [jsxRuntime.jsx(Icon, { size: 16 }), tab.label, jsxRuntime.jsx("span", { className: cx(sx(countStyle), sx(countColorStyles[countState])), children: tab.count })] }, tab.key));
5978
+ return (jsxRuntime.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: [jsxRuntime.jsx(Icon, { size: 16 }), tab.label, jsxRuntime.jsx("span", { className: cx(sx(countStyle$1), sx(countColorStyles[countState])), children: tab.count })] }, tab.key));
5979
5979
  }) }));
5980
5980
  };
5981
5981
 
@@ -6908,7 +6908,7 @@ const pretitleStyle$1 = {
6908
6908
  color: 'var(--color-slate, #5c5c5c)',
6909
6909
  margin: 0,
6910
6910
  };
6911
- const titleStyle$C = {
6911
+ const titleStyle$D = {
6912
6912
  label: 'PageHeader-titleStyle',
6913
6913
  fontSize: 36,
6914
6914
  lineHeight: '48px',
@@ -6928,7 +6928,7 @@ const titleStyle$C = {
6928
6928
  * The header keeps its height while `title` is empty and fades in once one
6929
6929
  * arrives, so pages do not jump as their data loads.
6930
6930
  */
6931
- const PageHeader = ({ title, pretitle, after, back, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$I), !title && sx(emptyStyle$m), className), children: [back, jsxRuntime.jsx("div", { className: sx(bodyStyle$a), children: jsxRuntime.jsxs("div", { className: sx(textStyle), children: [pretitle && jsxRuntime.jsx("h2", { className: sx(pretitleStyle$1), children: pretitle }), jsxRuntime.jsxs("h1", { className: sx(titleStyle$C), children: [title, "\u00A0"] }), after] }) })] }));
6931
+ const PageHeader = ({ title, pretitle, after, back, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$I), !title && sx(emptyStyle$m), className), children: [back, jsxRuntime.jsx("div", { className: sx(bodyStyle$a), children: jsxRuntime.jsxs("div", { className: sx(textStyle), children: [pretitle && jsxRuntime.jsx("h2", { className: sx(pretitleStyle$1), children: pretitle }), jsxRuntime.jsxs("h1", { className: sx(titleStyle$D), children: [title, "\u00A0"] }), after] }) })] }));
6932
6932
  PageHeader.displayName = 'PageHeader';
6933
6933
 
6934
6934
  /**
@@ -6984,7 +6984,7 @@ const sectionStyle$9 = {
6984
6984
  fontWeight: 400,
6985
6985
  lineHeight: '28px',
6986
6986
  };
6987
- const titleStyle$B = {
6987
+ const titleStyle$C = {
6988
6988
  label: 'PageHeaderSubsection-titleStyle',
6989
6989
  gridArea: 'title',
6990
6990
  margin: 0,
@@ -7001,7 +7001,7 @@ const metaStyle$1 = {
7001
7001
  minWidth: 0,
7002
7002
  marginTop: 4,
7003
7003
  };
7004
- const actionsStyle$c = {
7004
+ const actionsStyle$d = {
7005
7005
  label: 'PageHeaderSubsection-actionsStyle',
7006
7006
  gridArea: 'actions',
7007
7007
  display: 'flex',
@@ -7021,7 +7021,7 @@ const PageHeaderSubsection = ({ sectionName, pageName, meta, onBack, backLabel =
7021
7021
  else
7022
7022
  window.history.back();
7023
7023
  };
7024
- return (jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$H), className), "data-test": "page-header-subsection", children: [jsxRuntime.jsxs("div", { className: sx(sectionRowStyle), children: [!hideBack && (jsxRuntime.jsx("button", { type: "button", className: sx(backButtonStyle$1), onClick: handleBack, "aria-label": backLabel, "data-test": "page-header-subsection-back", children: jsxRuntime.jsx(BackIcon$1, {}) })), jsxRuntime.jsx("p", { className: sx(sectionStyle$9), children: sectionName })] }), jsxRuntime.jsx("h1", { className: sx(titleStyle$B), children: pageName }), meta && jsxRuntime.jsx("div", { className: sx(metaStyle$1), children: meta }), actions && jsxRuntime.jsx("div", { className: sx(actionsStyle$c), children: actions })] }));
7024
+ return (jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$H), className), "data-test": "page-header-subsection", children: [jsxRuntime.jsxs("div", { className: sx(sectionRowStyle), children: [!hideBack && (jsxRuntime.jsx("button", { type: "button", className: sx(backButtonStyle$1), onClick: handleBack, "aria-label": backLabel, "data-test": "page-header-subsection-back", children: jsxRuntime.jsx(BackIcon$1, {}) })), jsxRuntime.jsx("p", { className: sx(sectionStyle$9), children: sectionName })] }), jsxRuntime.jsx("h1", { className: sx(titleStyle$C), children: pageName }), meta && jsxRuntime.jsx("div", { className: sx(metaStyle$1), children: meta }), actions && jsxRuntime.jsx("div", { className: sx(actionsStyle$d), children: actions })] }));
7025
7025
  };
7026
7026
  PageHeaderSubsection.displayName = 'PageHeaderSubsection';
7027
7027
 
@@ -7119,7 +7119,7 @@ const focusRing = {
7119
7119
  * current page is matched on `[aria-current="page"]` instead — the component
7120
7120
  * sets that attribute from the same expression that sets `currentStyle`.
7121
7121
  */
7122
- const pageStyle$u = {
7122
+ const pageStyle$v = {
7123
7123
  label: 'Pagination-pageStyle',
7124
7124
  ...buttonBase,
7125
7125
  '&:hover:not([aria-current="page"])': {
@@ -7202,7 +7202,7 @@ const Pagination = ({ page, pageSize, totalItems, siblingCount = 1, pageSizeOpti
7202
7202
  return;
7203
7203
  onPageChange?.(next);
7204
7204
  };
7205
- return (jsxRuntime.jsxs("nav", { className: cx(sx(paginationStyle$3), className), "aria-label": ariaLabel, "data-test": "pagination", children: [!hideSummary && (jsxRuntime.jsxs("p", { className: sx(summaryStyle$6), "data-test": "pagination-summary", children: ["Showing ", firstItem, "\u2013", lastItem, " of ", totalItems, " ", itemLabel] })), jsxRuntime.jsxs("div", { className: sx(controlsStyle), children: [showSizeSelector && (jsxRuntime.jsxs("label", { className: sx(pageSizeStyle), children: [jsxRuntime.jsx("span", { children: "Rows per page" }), jsxRuntime.jsx("select", { value: pageSize, onChange: (event) => onPageSizeChange?.(Number(event.target.value)), "data-test": "pagination-page-size", children: pageSizeOptions.map((option) => (jsxRuntime.jsx("option", { value: option, children: option }, option))) })] })), jsxRuntime.jsxs("ul", { className: sx(pagesStyle), children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx("button", { type: "button", className: sx(stepStyle), onClick: () => goTo(currentPage - 1), disabled: currentPage <= 1, "aria-label": "Previous page", "data-test": "pagination-previous", children: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }) }) }), items.map((item, index) => item === 'ellipsis' ? (jsxRuntime.jsx("li", { className: sx(ellipsisStyle), "aria-hidden": "true", children: "\u2026" }, `ellipsis-${index}`)) : (jsxRuntime.jsx("li", { children: jsxRuntime.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))), jsxRuntime.jsx("li", { children: jsxRuntime.jsx("button", { type: "button", className: sx(stepStyle), onClick: () => goTo(currentPage + 1), disabled: currentPage >= pageCount, "aria-label": "Next page", "data-test": "pagination-next", children: jsxRuntime.jsx(ChevronRightIcon$1, { size: 16 }) }) })] })] })] }));
7205
+ return (jsxRuntime.jsxs("nav", { className: cx(sx(paginationStyle$3), className), "aria-label": ariaLabel, "data-test": "pagination", children: [!hideSummary && (jsxRuntime.jsxs("p", { className: sx(summaryStyle$6), "data-test": "pagination-summary", children: ["Showing ", firstItem, "\u2013", lastItem, " of ", totalItems, " ", itemLabel] })), jsxRuntime.jsxs("div", { className: sx(controlsStyle), children: [showSizeSelector && (jsxRuntime.jsxs("label", { className: sx(pageSizeStyle), children: [jsxRuntime.jsx("span", { children: "Rows per page" }), jsxRuntime.jsx("select", { value: pageSize, onChange: (event) => onPageSizeChange?.(Number(event.target.value)), "data-test": "pagination-page-size", children: pageSizeOptions.map((option) => (jsxRuntime.jsx("option", { value: option, children: option }, option))) })] })), jsxRuntime.jsxs("ul", { className: sx(pagesStyle), children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx("button", { type: "button", className: sx(stepStyle), onClick: () => goTo(currentPage - 1), disabled: currentPage <= 1, "aria-label": "Previous page", "data-test": "pagination-previous", children: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }) }) }), items.map((item, index) => item === 'ellipsis' ? (jsxRuntime.jsx("li", { className: sx(ellipsisStyle), "aria-hidden": "true", children: "\u2026" }, `ellipsis-${index}`)) : (jsxRuntime.jsx("li", { children: jsxRuntime.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))), jsxRuntime.jsx("li", { children: jsxRuntime.jsx("button", { type: "button", className: sx(stepStyle), onClick: () => goTo(currentPage + 1), disabled: currentPage >= pageCount, "aria-label": "Next page", "data-test": "pagination-next", children: jsxRuntime.jsx(ChevronRightIcon$1, { size: 16 }) }) })] })] })] }));
7206
7206
  };
7207
7207
 
7208
7208
  /* Progress Bar */
@@ -7373,7 +7373,7 @@ ResultCount.displayName = 'ResultCount';
7373
7373
  * - `@keyframes spin` was scoped by the module; injected at runtime it is
7374
7374
  * global, so it is namespaced `stm-spin` and the `animation` value follows.
7375
7375
  */
7376
- const toolbarStyle$4 = {
7376
+ const toolbarStyle$5 = {
7377
7377
  label: 'RosterToolbar-toolbarStyle',
7378
7378
  display: 'flex',
7379
7379
  alignItems: 'center',
@@ -7552,7 +7552,7 @@ const DropdownButton = ({ label, icon, options, }) => {
7552
7552
  * RosterToolbar - Toolbar for roster management with import/export/save actions
7553
7553
  */
7554
7554
  const RosterToolbar = ({ importOptions, exportOptions, lockToggle, saveButton, additionalActions, searchField, className = '', }) => {
7555
- const toolbarClasses = cx(sx(toolbarStyle$4), className);
7555
+ const toolbarClasses = cx(sx(toolbarStyle$5), className);
7556
7556
  return (jsxRuntime.jsxs("div", { className: toolbarClasses, children: [jsxRuntime.jsxs("div", { className: sx(leftSectionStyle), children: [searchField, additionalActions] }), jsxRuntime.jsxs("div", { className: sx(rightSectionStyle), children: [importOptions && importOptions.length > 0 && (jsxRuntime.jsx(DropdownButton, { label: "Import", icon: jsxRuntime.jsx(ImportIcon, {}), options: importOptions })), exportOptions && exportOptions.length > 0 && (jsxRuntime.jsx(DropdownButton, { label: "Export", icon: jsxRuntime.jsx(ExportIcon$1, {}), options: exportOptions })), lockToggle && (jsxRuntime.jsxs("button", { type: "button", className: 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 ? jsxRuntime.jsx(LockIcon, {}) : jsxRuntime.jsx(UnlockIcon, {}), jsxRuntime.jsx("span", { children: lockToggle.isLocked ? 'Locked' : 'Unlocked' })] })), saveButton && (jsxRuntime.jsxs("button", { type: "button", className: sx(saveButtonStyle), onClick: saveButton.onClick, disabled: saveButton.disabled || saveButton.loading, children: [saveButton.loading ? jsxRuntime.jsx(SpinnerIcon, {}) : jsxRuntime.jsx(SaveIcon, {}), jsxRuntime.jsx("span", { children: saveButton.label || 'Save' })] }))] })] }));
7557
7557
  };
7558
7558
  RosterToolbar.displayName = 'RosterToolbar';
@@ -7669,7 +7669,7 @@ const SearchField = React.forwardRef(({ placeholder = 'Search...', value, defaul
7669
7669
  SearchField.displayName = 'SearchField';
7670
7670
 
7671
7671
  /** The form's own vertical rhythm. */
7672
- const formStyle$5 = {
7672
+ const formStyle$6 = {
7673
7673
  label: 'SchoolContactForm-formStyle',
7674
7674
  display: 'grid',
7675
7675
  gap: 16,
@@ -7728,7 +7728,7 @@ const phoneFieldsStyle = {
7728
7728
  * Layout for Hub's school-contact editor. Field controls stay injectable so
7729
7729
  * consuming applications retain their form state, validation, and masking.
7730
7730
  */
7731
- const SchoolContactForm = ({ mode, createFromPortalUser, firstNameField, middleInitialField, lastNameField, businessPhoneField, cellPhoneField, emailField, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(formStyle$5), className), children: [mode === 'Add' && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("label", { className: sx(portalLabelStyle), children: "Create From Portal User" }), createFromPortalUser] }), jsxRuntime.jsx("div", { className: sx(dividerStyle$2), children: jsxRuntime.jsx("strong", { children: "OR" }) }), jsxRuntime.jsx("p", { className: sx(newContactLabelStyle), children: "Create New Contact Without Portal Access" })] })), jsxRuntime.jsxs("div", { className: sx(nameFieldsStyle), children: [firstNameField, middleInitialField, lastNameField] }), jsxRuntime.jsxs("div", { className: sx(phoneFieldsStyle), children: [businessPhoneField, cellPhoneField] }), jsxRuntime.jsx("div", { children: emailField })] }));
7731
+ const SchoolContactForm = ({ mode, createFromPortalUser, firstNameField, middleInitialField, lastNameField, businessPhoneField, cellPhoneField, emailField, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(formStyle$6), className), children: [mode === 'Add' && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("label", { className: sx(portalLabelStyle), children: "Create From Portal User" }), createFromPortalUser] }), jsxRuntime.jsx("div", { className: sx(dividerStyle$2), children: jsxRuntime.jsx("strong", { children: "OR" }) }), jsxRuntime.jsx("p", { className: sx(newContactLabelStyle), children: "Create New Contact Without Portal Access" })] })), jsxRuntime.jsxs("div", { className: sx(nameFieldsStyle), children: [firstNameField, middleInitialField, lastNameField] }), jsxRuntime.jsxs("div", { className: sx(phoneFieldsStyle), children: [businessPhoneField, cellPhoneField] }), jsxRuntime.jsx("div", { children: emailField })] }));
7732
7732
 
7733
7733
  const segmentStyle$2 = {
7734
7734
  label: 'Segment-segmentStyle',
@@ -7957,7 +7957,7 @@ const activeTabStyle$1 = {
7957
7957
  },
7958
7958
  };
7959
7959
  /* Actions */
7960
- const actionsStyle$b = {
7960
+ const actionsStyle$c = {
7961
7961
  label: 'SelectFilter-actionsStyle',
7962
7962
  display: 'flex',
7963
7963
  gap: 8,
@@ -8121,7 +8121,7 @@ const SelectFilter = ({ label, options = [], groupedOptions = {}, value = [], on
8121
8121
  }
8122
8122
  return `${selected.length} selected`;
8123
8123
  };
8124
- return (jsxRuntime.jsxs("div", { ref: dropdownRef, className: cx(sx(containerStyle$4), className), children: [jsxRuntime.jsxs("button", { type: "button", className: cx(sx(triggerStyle$1), disabled ? sx(disabledStyle) : '', isOpen ? sx(openStyle$2) : ''), onClick: () => !disabled && setIsOpen(!isOpen), children: [jsxRuntime.jsx("span", { className: cx(sx(triggerTextStyle), selectedValues.length === 0 ? sx(placeholderStyle) : ''), children: getDisplayText() }), jsxRuntime.jsx("span", { className: sx(chevronStyle$3), children: jsxRuntime.jsx(ChevronIcon$1, {}) })] }), isOpen && (jsxRuntime.jsxs("div", { className: sx(dropdownStyle$1), style: { width }, children: [grouped && tabs.length > 0 && (jsxRuntime.jsx("div", { className: sx(tabsStyle$8), children: tabs.map(tab => (jsxRuntime.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 && (jsxRuntime.jsxs("div", { className: sx(actionsStyle$b), children: [jsxRuntime.jsx("button", { type: "button", className: sx(actionBtnStyle), onClick: handleSelectAll, children: "Select All" }), jsxRuntime.jsx("button", { type: "button", className: sx(actionBtnStyle), onClick: handleClear, children: "Clear" })] })), jsxRuntime.jsx("div", { className: sx(optionsStyle), children: currentOptions.map(option => (jsxRuntime.jsxs("div", { className: cx(sx(optionStyle), selectedValues.includes(option.value) ? sx(selectedStyle$3) : ''), onClick: () => handleSelect(option.value), children: [multiselect && (jsxRuntime.jsx("span", { className: sx(checkboxStyle$1), children: selectedValues.includes(option.value) && jsxRuntime.jsx(CheckIcon, {}) })), jsxRuntime.jsx("span", { className: sx(optionLabelStyle), children: option.label })] }, option.value))) }), multiselect && (jsxRuntime.jsx("div", { className: sx(footerStyle$d), children: jsxRuntime.jsx("button", { type: "button", className: sx(applyBtnStyle), onClick: () => setIsOpen(false), children: "Apply" }) }))] }))] }));
8124
+ return (jsxRuntime.jsxs("div", { ref: dropdownRef, className: cx(sx(containerStyle$4), className), children: [jsxRuntime.jsxs("button", { type: "button", className: cx(sx(triggerStyle$1), disabled ? sx(disabledStyle) : '', isOpen ? sx(openStyle$2) : ''), onClick: () => !disabled && setIsOpen(!isOpen), children: [jsxRuntime.jsx("span", { className: cx(sx(triggerTextStyle), selectedValues.length === 0 ? sx(placeholderStyle) : ''), children: getDisplayText() }), jsxRuntime.jsx("span", { className: sx(chevronStyle$3), children: jsxRuntime.jsx(ChevronIcon$1, {}) })] }), isOpen && (jsxRuntime.jsxs("div", { className: sx(dropdownStyle$1), style: { width }, children: [grouped && tabs.length > 0 && (jsxRuntime.jsx("div", { className: sx(tabsStyle$8), children: tabs.map(tab => (jsxRuntime.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 && (jsxRuntime.jsxs("div", { className: sx(actionsStyle$c), children: [jsxRuntime.jsx("button", { type: "button", className: sx(actionBtnStyle), onClick: handleSelectAll, children: "Select All" }), jsxRuntime.jsx("button", { type: "button", className: sx(actionBtnStyle), onClick: handleClear, children: "Clear" })] })), jsxRuntime.jsx("div", { className: sx(optionsStyle), children: currentOptions.map(option => (jsxRuntime.jsxs("div", { className: cx(sx(optionStyle), selectedValues.includes(option.value) ? sx(selectedStyle$3) : ''), onClick: () => handleSelect(option.value), children: [multiselect && (jsxRuntime.jsx("span", { className: sx(checkboxStyle$1), children: selectedValues.includes(option.value) && jsxRuntime.jsx(CheckIcon, {}) })), jsxRuntime.jsx("span", { className: sx(optionLabelStyle), children: option.label })] }, option.value))) }), multiselect && (jsxRuntime.jsx("div", { className: sx(footerStyle$d), children: jsxRuntime.jsx("button", { type: "button", className: sx(applyBtnStyle), onClick: () => setIsOpen(false), children: "Apply" }) }))] }))] }));
8125
8125
  };
8126
8126
  SelectFilter.displayName = 'SelectFilter';
8127
8127
 
@@ -8623,7 +8623,7 @@ const toggleRowStyle = {
8623
8623
  '& [data-team-picker-only]': { opacity: 0 },
8624
8624
  '&:hover [data-team-picker-only], &:focus-within [data-team-picker-only]': { opacity: 1 },
8625
8625
  };
8626
- const nameStyle$5 = {
8626
+ const nameStyle$6 = {
8627
8627
  label: 'TeamPicker-nameStyle',
8628
8628
  flex: 1,
8629
8629
  // `&&`: see rootStyle — the name is a span, which host heading rules target.
@@ -8664,7 +8664,7 @@ const TeamPicker = ({ groups, groupOrder, activeGroup, onGroupChange, mode = 'si
8664
8664
  const row = (team) => {
8665
8665
  const chosen = selected.includes(team.code);
8666
8666
  if (!multiple) {
8667
- return (jsxRuntime.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: [jsxRuntime.jsx(SportCodeBadge, { code: team.code }), jsxRuntime.jsx("span", { className: sx(nameStyle$5), children: team.name })] }, team.code));
8667
+ return (jsxRuntime.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: [jsxRuntime.jsx(SportCodeBadge, { code: team.code }), jsxRuntime.jsx("span", { className: sx(nameStyle$6), children: team.name })] }, team.code));
8668
8668
  }
8669
8669
  return (jsxRuntime.jsxs("div", { className: sx(toggleRowStyle),
8670
8670
  // A click anywhere on the row toggles the team, except on the checkbox
@@ -8674,7 +8674,7 @@ const TeamPicker = ({ groups, groupOrder, activeGroup, onGroupChange, mode = 'si
8674
8674
  if (event.target.closest('input, label'))
8675
8675
  return;
8676
8676
  onToggle?.(team.code);
8677
- }, "data-testid": "team-picker-option", children: [jsxRuntime.jsx(Checkbox, { size: "sm", checked: chosen, onChange: () => onToggle?.(team.code), "aria-label": `${team.name} (${team.code})` }), jsxRuntime.jsx(SportCodeBadge, { code: team.code }), " ", jsxRuntime.jsx("span", { className: sx(nameStyle$5), children: team.name }), onOnly && (jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", "data-team-picker-only": "", onClick: (event) => {
8677
+ }, "data-testid": "team-picker-option", children: [jsxRuntime.jsx(Checkbox, { size: "sm", checked: chosen, onChange: () => onToggle?.(team.code), "aria-label": `${team.name} (${team.code})` }), jsxRuntime.jsx(SportCodeBadge, { code: team.code }), " ", jsxRuntime.jsx("span", { className: sx(nameStyle$6), children: team.name }), onOnly && (jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", "data-team-picker-only": "", onClick: (event) => {
8678
8678
  event.stopPropagation();
8679
8679
  onOnly(team.code);
8680
8680
  }, children: "Only" }))] }, team.code));
@@ -8730,7 +8730,7 @@ const identityStyle$1 = {
8730
8730
  gap: 12,
8731
8731
  },
8732
8732
  };
8733
- const codeStyle$3 = {
8733
+ const codeStyle$4 = {
8734
8734
  label: 'TeamCalendarHeader-codeStyle',
8735
8735
  background: '#fff',
8736
8736
  borderRadius: 12,
@@ -8741,7 +8741,7 @@ const codeStyle$3 = {
8741
8741
  fontWeight: 400,
8742
8742
  },
8743
8743
  };
8744
- const nameStyle$4 = {
8744
+ const nameStyle$5 = {
8745
8745
  label: 'TeamCalendarHeader-nameStyle',
8746
8746
  color: 'var(--color-slate, #5c5c5c)',
8747
8747
  fontSize: 20,
@@ -8767,7 +8767,7 @@ const contentStyle$8 = {
8767
8767
  * It sticks to the top of its column so the team stays identifiable while the
8768
8768
  * schedule scrolls.
8769
8769
  */
8770
- const TeamCalendarHeader = ({ teamCode, teamFullName, children, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$G), className), children: [jsxRuntime.jsx("div", { className: sx(rowStyle$7), children: jsxRuntime.jsxs("div", { className: sx(identityStyle$1), children: [jsxRuntime.jsx("div", { className: sx(codeStyle$3), children: teamCode }), teamFullName && jsxRuntime.jsx("span", { className: sx(nameStyle$4), children: teamFullName })] }) }), jsxRuntime.jsx("div", { className: sx(contentStyle$8), children: children })] }));
8770
+ const TeamCalendarHeader = ({ teamCode, teamFullName, children, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$G), className), children: [jsxRuntime.jsx("div", { className: sx(rowStyle$7), children: jsxRuntime.jsxs("div", { className: sx(identityStyle$1), children: [jsxRuntime.jsx("div", { className: sx(codeStyle$4), children: teamCode }), teamFullName && jsxRuntime.jsx("span", { className: sx(nameStyle$5), children: teamFullName })] }) }), jsxRuntime.jsx("div", { className: sx(contentStyle$8), children: children })] }));
8771
8771
  TeamCalendarHeader.displayName = 'TeamCalendarHeader';
8772
8772
 
8773
8773
  /**
@@ -8837,7 +8837,7 @@ const pretitleStyle = {
8837
8837
  fontSize: 20,
8838
8838
  lineHeight: '32px',
8839
8839
  };
8840
- const titleStyle$A = {
8840
+ const titleStyle$B = {
8841
8841
  label: 'TeamHeader-titleStyle',
8842
8842
  margin: 0,
8843
8843
  overflowWrap: 'anywhere',
@@ -8850,7 +8850,7 @@ const titleStyle$A = {
8850
8850
  lineHeight: '52px',
8851
8851
  },
8852
8852
  };
8853
- const actionsStyle$a = {
8853
+ const actionsStyle$b = {
8854
8854
  label: 'TeamHeader-actionsStyle',
8855
8855
  display: 'flex',
8856
8856
  alignItems: 'center',
@@ -8875,7 +8875,7 @@ const TeamHeader = ({ title: suppliedTitle, teamCode, teamName, pretitle = 'Team
8875
8875
  window.location.href = backHref;
8876
8876
  }
8877
8877
  };
8878
- return (jsxRuntime.jsxs("div", { className: headerClasses, "data-test": "team-header", children: [jsxRuntime.jsxs("div", { className: sx(leftStyle$1), children: [(backHref || onBack) && (jsxRuntime.jsx("button", { type: "button", className: sx(backButtonStyle), onClick: handleBack, "aria-label": "Go back", "data-test": "team-header-back", children: jsxRuntime.jsx(BackIcon, {}) })), jsxRuntime.jsxs("div", { className: sx(titlesStyle), children: [pretitle && jsxRuntime.jsx("span", { className: sx(pretitleStyle), children: pretitle }), jsxRuntime.jsxs("h1", { className: sx(titleStyle$A), children: [title, "\u00A0"] })] })] }), actions && (jsxRuntime.jsx("div", { className: sx(actionsStyle$a), children: actions }))] }));
8878
+ return (jsxRuntime.jsxs("div", { className: headerClasses, "data-test": "team-header", children: [jsxRuntime.jsxs("div", { className: sx(leftStyle$1), children: [(backHref || onBack) && (jsxRuntime.jsx("button", { type: "button", className: sx(backButtonStyle), onClick: handleBack, "aria-label": "Go back", "data-test": "team-header-back", children: jsxRuntime.jsx(BackIcon, {}) })), jsxRuntime.jsxs("div", { className: sx(titlesStyle), children: [pretitle && jsxRuntime.jsx("span", { className: sx(pretitleStyle), children: pretitle }), jsxRuntime.jsxs("h1", { className: sx(titleStyle$B), children: [title, "\u00A0"] })] })] }), actions && (jsxRuntime.jsx("div", { className: sx(actionsStyle$b), children: actions }))] }));
8879
8879
  };
8880
8880
  const DEFAULT_TABS$1 = [
8881
8881
  { id: 'profile', label: 'Profile' },
@@ -9228,7 +9228,7 @@ const legErrorStyle = {
9228
9228
  color: 'var(--color-error)',
9229
9229
  fontSize: 'var(--fs-sm)',
9230
9230
  };
9231
- const actionsStyle$9 = {
9231
+ const actionsStyle$a = {
9232
9232
  label: 'AcmiQuoteCalculator-actionsStyle',
9233
9233
  display: 'flex',
9234
9234
  flexWrap: 'wrap',
@@ -9469,7 +9469,7 @@ const AcmiQuoteCalculator = ({ carrierOptions = ACMI_CARRIER_OPTIONS, aircraftOp
9469
9469
  return (jsxRuntime.jsxs("div", { className: cx(sx(calculatorStyle$1), className), "data-test": "acmi-quote-calculator", children: [showErrors && errorList.length > 0 && (jsxRuntime.jsx(Alert, { variant: "error", title: "Fix these before calculating", children: jsxRuntime.jsx("ul", { className: sx(errorSummaryStyle$1), "data-test": "acmi-error-summary", children: errorList.map(([field, message]) => (jsxRuntime.jsx("li", { children: message }, field))) }) })), calculationError && (jsxRuntime.jsx(Alert, { variant: "error", title: "Quote could not be calculated", children: jsxRuntime.jsx("p", { className: sx(alertMessageStyle), "data-test": "acmi-calculation-error", children: calculationError }) })), jsxRuntime.jsxs("div", { className: sx(columnsStyle), children: [jsxRuntime.jsxs("section", { className: sx(panelStyle$6), "aria-label": "Quote configuration", children: [jsxRuntime.jsx("h3", { className: sx(panelTitleStyle), children: "Quote Configuration" }), jsxRuntime.jsx(Select, { id: "acmi-carrier", label: "Carrier", placeholder: "Select Carrier\u2026", options: carrierOptions, value: inputs.carrier, error: showErrors ? errors.carrier : undefined, onChange: (event) => updateCarrier(event.target.value), "data-test": "acmi-carrier" }), jsxRuntime.jsx(Select, { id: "acmi-aircraft", label: "Aircraft Type", placeholder: "Select Aircraft\u2026", options: availableAircraftOptions, value: inputs.aircraft, disabled: !inputs.carrier, error: showErrors ? errors.aircraft : undefined, onChange: (event) => update('aircraft', event.target.value), "data-test": "acmi-aircraft" }), jsxRuntime.jsx(Input, { id: "acmi-passengers", type: "number", label: "Number of Passengers", placeholder: "Enter passenger count", helperText: seatHint, value: inputs.passengers, error: showErrors ? errors.passengers : undefined, onChange: (event) => update('passengers', event.target.value), "data-test": "acmi-passengers" }), jsxRuntime.jsx(Input, { id: "acmi-fuel-price", type: "number", step: "0.01", label: "Fuel Price ($/gallon)", placeholder: "e.g. 5.50", value: inputs.fuelPrice, error: showErrors ? errors.fuelPrice : undefined, onChange: (event) => update('fuelPrice', event.target.value), "data-test": "acmi-fuel-price" }), jsxRuntime.jsx(Input, { id: "acmi-markup", type: "number", step: "0.1", label: "Markup %", helperText: "Standard is 7% \u2014 adjustable as needed", value: inputs.markupPercent, onChange: (event) => update('markupPercent', event.target.value), "data-test": "acmi-markup" }), jsxRuntime.jsx(Input, { id: "acmi-insurance", label: "Insurance (Flat Fee)", helperText: `${currency.format(insuranceFlat)} per trip (locked)`, value: currency.format(insuranceFlat), readOnly: true, disabled: true, "data-test": "acmi-insurance" }), jsxRuntime.jsx(Input, { id: "acmi-crew-nights", type: "number", label: "Crew Nights (RON)", helperText: "Number of nights crew stays away from base", value: inputs.crewNights, onChange: (event) => update('crewNights', event.target.value), "data-test": "acmi-crew-nights" }), showTripMonth && (jsxRuntime.jsx(Select, { id: "acmi-trip-month", label: "Trip Month (for Historic Winds)", options: TRIP_MONTH_OPTIONS, helperText: "Use this only when the configured pricing service applies a historic winds profile.", value: inputs.tripMonth, onChange: (event) => update('tripMonth', event.target.value), "data-test": "acmi-trip-month" }))] }), jsxRuntime.jsxs("section", { className: sx(panelStyle$6), "aria-label": "Flight itinerary", children: [jsxRuntime.jsx("h3", { className: sx(panelTitleStyle), children: "Flight Itinerary" }), jsxRuntime.jsx(Alert, { variant: "primary", children: positioningMode === 'automatic' ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: ["Enter ", jsxRuntime.jsx("strong", { children: "live legs only" }), ", in trip order. The host pricing engine adds positioning ferry legs automatically. Leave flight time blank to use its route estimate; an entered time is treated as an explicit contractual input."] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: ["Enter ", jsxRuntime.jsx("strong", { children: "every flown leg in order" }), ", including positioning. Mark each leg as live or ferry. Leave flight time blank to use the pricing engine\u2019s route estimate; an entered time is treated as an explicit contractual input."] })) }), showErrors && errors.legs && (jsxRuntime.jsx("p", { className: sx(legErrorStyle), role: "alert", "data-test": "acmi-legs-error", children: errors.legs })), jsxRuntime.jsx("ol", { className: sx(legsStyle$3), children: inputs.legs.map((leg, index) => (jsxRuntime.jsxs("li", { className: cx(sx(legStyle$2), positioningMode === 'automatic' && sx(automaticLegStyle)), "data-test": "acmi-leg", children: [jsxRuntime.jsxs("span", { className: sx(legIndexStyle$1), children: ["Leg ", index + 1] }), positioningMode === 'explicit' && (jsxRuntime.jsx(Select, { id: `${leg.id}-type`, size: "sm", label: "Leg type", options: [
9470
9470
  { value: 'live', label: 'Live' },
9471
9471
  { value: 'ferry', label: 'Ferry' },
9472
- ], value: leg.type ?? 'live', onChange: (event) => updateLeg(leg.id, { type: event.target.value }), "data-test": "acmi-leg-type" })), jsxRuntime.jsx(Input, { id: `${leg.id}-origin`, size: "sm", label: "From", maxLength: 4, value: leg.origin, onChange: (event) => updateLeg(leg.id, { origin: event.target.value.toUpperCase() }), "data-test": "acmi-leg-origin" }), jsxRuntime.jsx(Input, { id: `${leg.id}-destination`, size: "sm", label: "To", maxLength: 4, value: leg.destination, onChange: (event) => updateLeg(leg.id, { destination: event.target.value.toUpperCase() }), "data-test": "acmi-leg-destination" }), jsxRuntime.jsx(Input, { id: `${leg.id}-flight-time`, size: "sm", type: "number", step: "0.1", label: "Flight time (h, optional)", value: leg.flightTime, onChange: (event) => updateLeg(leg.id, { flightTime: event.target.value }), "data-test": "acmi-leg-flight-time" }), jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Remove leg ${index + 1}`, disabled: inputs.legs.length === 1, onClick: () => removeLeg(leg.id), "data-test": "acmi-remove-leg", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) })] }, leg.id))) }), jsxRuntime.jsxs("div", { className: sx(actionsStyle$9), children: [jsxRuntime.jsx(Button, { variant: "outline", size: "sm", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 16 }), onClick: addLeg, "data-test": "acmi-add-leg", children: "Add Flight Leg" }), jsxRuntime.jsx(Button, { size: "sm", loading: calculating, onClick: calculate, "data-test": "acmi-calculate", children: calculating ? 'Calculating' : 'Calculate Quote' }), result && onSubmitForApproval && (jsxRuntime.jsx(Button, { variant: "secondary", size: "sm", onClick: () => onSubmitForApproval(inputs), "data-test": "acmi-submit-approval", children: "Use This Total" }))] })] })] }), result && (jsxRuntime.jsxs("section", { className: sx(resultsStyle), "aria-label": "Quote summary", "data-test": "acmi-results", children: [jsxRuntime.jsx("h3", { className: sx(panelTitleStyle), children: "Quote Summary" }), jsxRuntime.jsxs("dl", { className: sx(resultGridStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Operating Subtotal" }), jsxRuntime.jsx("dd", { children: currency.format(result.operatingSubtotal) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Markup Applied" }), jsxRuntime.jsx("dd", { children: currency.format(result.markupAmount) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Insurance (Flat Fee)" }), jsxRuntime.jsx("dd", { children: currency.format(result.insuranceAmount) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Pre-Tax Total" }), jsxRuntime.jsx("dd", { children: currency.format(result.preTaxTotal) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Federal Excise Tax" }), jsxRuntime.jsx("dd", { children: currency.format(result.fet) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Segment Fees" }), jsxRuntime.jsx("dd", { children: currency.format(result.segmentFees) })] })] }), jsxRuntime.jsxs("p", { className: sx(finalPriceStyle), "data-test": "acmi-final-price", children: [jsxRuntime.jsx("span", { children: "Total Quoted Price" }), jsxRuntime.jsx("strong", { children: currency.format(result.finalPrice) })] }), result.pricingDetails && (jsxRuntime.jsxs("dl", { className: sx(contractFactsStyle), "data-test": "acmi-pricing-details", children: [jsxRuntime.jsxs("div", { "data-test": "acmi-ferry-floor", children: [jsxRuntime.jsx("dt", { children: "Ferry block time" }), jsxRuntime.jsxs("dd", { children: [result.pricingDetails.ferryBlockHours.toFixed(2), " h", result.pricingDetails.ferryMinimumHours
9472
+ ], value: leg.type ?? 'live', onChange: (event) => updateLeg(leg.id, { type: event.target.value }), "data-test": "acmi-leg-type" })), jsxRuntime.jsx(Input, { id: `${leg.id}-origin`, size: "sm", label: "From", maxLength: 4, value: leg.origin, onChange: (event) => updateLeg(leg.id, { origin: event.target.value.toUpperCase() }), "data-test": "acmi-leg-origin" }), jsxRuntime.jsx(Input, { id: `${leg.id}-destination`, size: "sm", label: "To", maxLength: 4, value: leg.destination, onChange: (event) => updateLeg(leg.id, { destination: event.target.value.toUpperCase() }), "data-test": "acmi-leg-destination" }), jsxRuntime.jsx(Input, { id: `${leg.id}-flight-time`, size: "sm", type: "number", step: "0.1", label: "Flight time (h, optional)", value: leg.flightTime, onChange: (event) => updateLeg(leg.id, { flightTime: event.target.value }), "data-test": "acmi-leg-flight-time" }), jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Remove leg ${index + 1}`, disabled: inputs.legs.length === 1, onClick: () => removeLeg(leg.id), "data-test": "acmi-remove-leg", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) })] }, leg.id))) }), jsxRuntime.jsxs("div", { className: sx(actionsStyle$a), children: [jsxRuntime.jsx(Button, { variant: "outline", size: "sm", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 16 }), onClick: addLeg, "data-test": "acmi-add-leg", children: "Add Flight Leg" }), jsxRuntime.jsx(Button, { size: "sm", loading: calculating, onClick: calculate, "data-test": "acmi-calculate", children: calculating ? 'Calculating' : 'Calculate Quote' }), result && onSubmitForApproval && (jsxRuntime.jsx(Button, { variant: "secondary", size: "sm", onClick: () => onSubmitForApproval(inputs), "data-test": "acmi-submit-approval", children: "Use This Total" }))] })] })] }), result && (jsxRuntime.jsxs("section", { className: sx(resultsStyle), "aria-label": "Quote summary", "data-test": "acmi-results", children: [jsxRuntime.jsx("h3", { className: sx(panelTitleStyle), children: "Quote Summary" }), jsxRuntime.jsxs("dl", { className: sx(resultGridStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Operating Subtotal" }), jsxRuntime.jsx("dd", { children: currency.format(result.operatingSubtotal) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Markup Applied" }), jsxRuntime.jsx("dd", { children: currency.format(result.markupAmount) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Insurance (Flat Fee)" }), jsxRuntime.jsx("dd", { children: currency.format(result.insuranceAmount) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Pre-Tax Total" }), jsxRuntime.jsx("dd", { children: currency.format(result.preTaxTotal) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Federal Excise Tax" }), jsxRuntime.jsx("dd", { children: currency.format(result.fet) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Segment Fees" }), jsxRuntime.jsx("dd", { children: currency.format(result.segmentFees) })] })] }), jsxRuntime.jsxs("p", { className: sx(finalPriceStyle), "data-test": "acmi-final-price", children: [jsxRuntime.jsx("span", { children: "Total Quoted Price" }), jsxRuntime.jsx("strong", { children: currency.format(result.finalPrice) })] }), result.pricingDetails && (jsxRuntime.jsxs("dl", { className: sx(contractFactsStyle), "data-test": "acmi-pricing-details", children: [jsxRuntime.jsxs("div", { "data-test": "acmi-ferry-floor", children: [jsxRuntime.jsx("dt", { children: "Ferry block time" }), jsxRuntime.jsxs("dd", { children: [result.pricingDetails.ferryBlockHours.toFixed(2), " h", result.pricingDetails.ferryMinimumHours
9473
9473
  ? ` · ${result.pricingDetails.ferryMinimumHours.toFixed(2)} h minimum per estimated SkyWest ferry leg`
9474
9474
  : ''] })] }), jsxRuntime.jsxs("div", { "data-test": "acmi-fuel-buffer", children: [jsxRuntime.jsx("dt", { children: "Fuel buffer" }), jsxRuntime.jsxs("dd", { children: [(result.pricingDetails.fuelBufferPercent * 100).toFixed(0), "% \u00B7 ", currency.format(result.pricingDetails.fuelBufferAmount)] })] }), jsxRuntime.jsxs("div", { "data-test": "acmi-screening", children: [jsxRuntime.jsx("dt", { children: "Security screening" }), jsxRuntime.jsx("dd", { children: currency.format(result.pricingDetails.screeningAmount) })] })] })), result.legs && result.legs.length > 0 && (jsxRuntime.jsxs("div", { className: sx(pricedLegsStyle), "data-test": "acmi-priced-legs", children: [jsxRuntime.jsx("h4", { children: "Backend-priced itinerary" }), jsxRuntime.jsxs("div", { className: sx(pricedLegHeaderStyle), "aria-hidden": "true", children: [jsxRuntime.jsx("span", { children: "Leg" }), jsxRuntime.jsx("span", { children: "Type" }), jsxRuntime.jsx("span", { children: "Block" }), jsxRuntime.jsx("span", { children: "Total" })] }), result.legs.map((leg) => (jsxRuntime.jsxs("div", { className: sx(pricedLegStyle), "data-test": "acmi-priced-leg", children: [jsxRuntime.jsxs("span", { children: [leg.origin, " \u2192 ", leg.destination] }), jsxRuntime.jsx("span", { "data-test": "acmi-priced-leg-type", children: leg.type === 'ferry' ? 'Ferry' : 'Live' }), jsxRuntime.jsxs("span", { "data-test": "acmi-priced-leg-block", children: [leg.blockHours.toFixed(2), " h"] }), jsxRuntime.jsx("span", { children: currency.format(leg.total) })] }, leg.id)))] }))] }))] }));
9475
9475
  };
@@ -9482,7 +9482,7 @@ const wrapperStyle$2 = {
9482
9482
  gap: 'var(--space-3)',
9483
9483
  fontFamily: 'var(--font-family-base)',
9484
9484
  };
9485
- const toolbarStyle$3 = {
9485
+ const toolbarStyle$4 = {
9486
9486
  label: 'AgentGroupTravelRequestsTable-toolbarStyle',
9487
9487
  display: 'flex',
9488
9488
  flexWrap: 'wrap',
@@ -9871,7 +9871,7 @@ const AgentGroupTravelRequestsTable = ({ requests, sports = [], views = [], toda
9871
9871
  setDateEdits((current) => ({ ...current, [id]: { ...current[id], submittedDate: value } }));
9872
9872
  onSubmittedDateChange?.(id, value);
9873
9873
  };
9874
- return (jsxRuntime.jsxs("div", { className: cx(sx(wrapperStyle$2), className), "data-test": "agent-gtr-table", children: [jsxRuntime.jsxs("div", { className: sx(toolbarStyle$3), children: [jsxRuntime.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 ? jsxRuntime.jsx(ChevronUpIcon, { size: 16 }) : jsxRuntime.jsx(ChevronDownIcon$1, { size: 16 }), jsxRuntime.jsx("span", { children: allExpanded ? 'Collapse all PNRs' : 'Expand all PNRs' })] }), jsxRuntime.jsxs("div", { className: sx(filtersStyle$5), children: [jsxRuntime.jsxs("label", { className: sx(filterFieldStyle$1), children: [jsxRuntime.jsx("span", { children: "Filter by sport" }), jsxRuntime.jsxs("select", { value: sportFilter, onChange: (event) => setSportFilter(event.target.value), "data-test": "agent-gtr-sport-filter", children: [jsxRuntime.jsx("option", { value: "", children: "All Sports" }), sports.map((sport) => (jsxRuntime.jsx("option", { value: sport.code, children: sport.label }, sport.code)))] })] }), views.length > 0 && (jsxRuntime.jsxs("label", { className: sx(filterFieldStyle$1), children: [jsxRuntime.jsx("span", { children: "Filter by view" }), jsxRuntime.jsxs("select", { value: viewFilter, onChange: (event) => setViewFilter(event.target.value), "data-test": "agent-gtr-view-filter", children: [jsxRuntime.jsx("option", { value: "", children: "All Accounts" }), views.map((view) => (jsxRuntime.jsx("option", { value: view.id, children: view.label }, view.id)))] })] }))] })] }), jsxRuntime.jsx("div", { className: sx(tableScrollStyle$2), children: jsxRuntime.jsxs("table", { className: sx(tableStyle$b), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { className: sx(colExpandStyle), children: jsxRuntime.jsx("span", { className: "sr-only", children: "Expand" }) }), jsxRuntime.jsx("th", { children: "Source" }), jsxRuntime.jsx("th", { children: "Master Trip" }), jsxRuntime.jsx("th", { children: "ID" }), jsxRuntime.jsx("th", { children: "Start Date" }), jsxRuntime.jsx("th", { children: "Name" }), jsxRuntime.jsx("th", { children: "Sport" }), jsxRuntime.jsxs("th", { children: [jsxRuntime.jsx(PlaneIcon$3, { size: 16 }), jsxRuntime.jsx("span", { className: "sr-only", children: "Carrier" })] }), jsxRuntime.jsx("th", { children: "Routing" }), jsxRuntime.jsx("th", { children: "Submitted" }), jsxRuntime.jsx("th", { children: "Type" }), jsxRuntime.jsx("th", { children: "Quote Sent" }), jsxRuntime.jsx("th", { children: "Confirmation" }), jsxRuntime.jsx("th", { children: "Deposit" }), jsxRuntime.jsx("th", { children: "Utilization" }), jsxRuntime.jsx("th", { children: "Names" }), jsxRuntime.jsx("th", { children: "Ticketing" }), jsxRuntime.jsx("th", { children: "PNR" }), jsxRuntime.jsx("th", { className: sx(colDeleteStyle), children: jsxRuntime.jsx("span", { className: "sr-only", children: "Delete" }) })] }) }), jsxRuntime.jsxs("tbody", { children: [!groups.length && (jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { colSpan: COLUMN_COUNT, className: sx(emptyStyle$i), "data-test": "agent-gtr-empty", children: "No open group travel requests match these filters." }) })), groups.map((group) => (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx("tr", { className: sx(accountRowStyle), children: jsxRuntime.jsx("td", { colSpan: COLUMN_COUNT, children: group.accountName }) }), group.items.map((request) => {
9874
+ return (jsxRuntime.jsxs("div", { className: cx(sx(wrapperStyle$2), className), "data-test": "agent-gtr-table", children: [jsxRuntime.jsxs("div", { className: sx(toolbarStyle$4), children: [jsxRuntime.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 ? jsxRuntime.jsx(ChevronUpIcon, { size: 16 }) : jsxRuntime.jsx(ChevronDownIcon$1, { size: 16 }), jsxRuntime.jsx("span", { children: allExpanded ? 'Collapse all PNRs' : 'Expand all PNRs' })] }), jsxRuntime.jsxs("div", { className: sx(filtersStyle$5), children: [jsxRuntime.jsxs("label", { className: sx(filterFieldStyle$1), children: [jsxRuntime.jsx("span", { children: "Filter by sport" }), jsxRuntime.jsxs("select", { value: sportFilter, onChange: (event) => setSportFilter(event.target.value), "data-test": "agent-gtr-sport-filter", children: [jsxRuntime.jsx("option", { value: "", children: "All Sports" }), sports.map((sport) => (jsxRuntime.jsx("option", { value: sport.code, children: sport.label }, sport.code)))] })] }), views.length > 0 && (jsxRuntime.jsxs("label", { className: sx(filterFieldStyle$1), children: [jsxRuntime.jsx("span", { children: "Filter by view" }), jsxRuntime.jsxs("select", { value: viewFilter, onChange: (event) => setViewFilter(event.target.value), "data-test": "agent-gtr-view-filter", children: [jsxRuntime.jsx("option", { value: "", children: "All Accounts" }), views.map((view) => (jsxRuntime.jsx("option", { value: view.id, children: view.label }, view.id)))] })] }))] })] }), jsxRuntime.jsx("div", { className: sx(tableScrollStyle$2), children: jsxRuntime.jsxs("table", { className: sx(tableStyle$b), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { className: sx(colExpandStyle), children: jsxRuntime.jsx("span", { className: "sr-only", children: "Expand" }) }), jsxRuntime.jsx("th", { children: "Source" }), jsxRuntime.jsx("th", { children: "Master Trip" }), jsxRuntime.jsx("th", { children: "ID" }), jsxRuntime.jsx("th", { children: "Start Date" }), jsxRuntime.jsx("th", { children: "Name" }), jsxRuntime.jsx("th", { children: "Sport" }), jsxRuntime.jsxs("th", { children: [jsxRuntime.jsx(PlaneIcon$3, { size: 16 }), jsxRuntime.jsx("span", { className: "sr-only", children: "Carrier" })] }), jsxRuntime.jsx("th", { children: "Routing" }), jsxRuntime.jsx("th", { children: "Submitted" }), jsxRuntime.jsx("th", { children: "Type" }), jsxRuntime.jsx("th", { children: "Quote Sent" }), jsxRuntime.jsx("th", { children: "Confirmation" }), jsxRuntime.jsx("th", { children: "Deposit" }), jsxRuntime.jsx("th", { children: "Utilization" }), jsxRuntime.jsx("th", { children: "Names" }), jsxRuntime.jsx("th", { children: "Ticketing" }), jsxRuntime.jsx("th", { children: "PNR" }), jsxRuntime.jsx("th", { className: sx(colDeleteStyle), children: jsxRuntime.jsx("span", { className: "sr-only", children: "Delete" }) })] }) }), jsxRuntime.jsxs("tbody", { children: [!groups.length && (jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { colSpan: COLUMN_COUNT, className: sx(emptyStyle$i), "data-test": "agent-gtr-empty", children: "No open group travel requests match these filters." }) })), groups.map((group) => (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx("tr", { className: sx(accountRowStyle), children: jsxRuntime.jsx("td", { colSpan: COLUMN_COUNT, children: group.accountName }) }), group.items.map((request) => {
9875
9875
  const isMulti = request.pnrs.length > 1;
9876
9876
  const isExpanded = expandedIds.has(request.id);
9877
9877
  const startSoon = daysUntil(request.startDate, today) < 8;
@@ -10167,7 +10167,7 @@ const Table = ({ columns, data, rowKey = 'id', bordered = false, striped = false
10167
10167
  * A bordered card: a header band with the title and Version control, then the
10168
10168
  * invoice table with its total row and legend.
10169
10169
  */
10170
- const cardStyle$f = {
10170
+ const cardStyle$g = {
10171
10171
  label: 'AirInvoiceCard-cardStyle',
10172
10172
  overflow: 'hidden',
10173
10173
  backgroundColor: 'var(--bg-surface, #fff)',
@@ -10193,7 +10193,7 @@ const headerStyle$D = {
10193
10193
  padding: '12px 24px',
10194
10194
  borderBottom: '1px solid var(--border-color-dark, #d5d5d5)',
10195
10195
  };
10196
- const titleStyle$z = {
10196
+ const titleStyle$A = {
10197
10197
  label: 'AirInvoiceCard-titleStyle',
10198
10198
  margin: 0,
10199
10199
  color: 'var(--fg-3, #6b7785)',
@@ -10350,7 +10350,7 @@ const AirInvoiceCard = ({ title, lines, paymentStatus, total, versions = [], sel
10350
10350
  const legend = (jsxRuntime.jsxs("span", { className: sx(legendStyle$1), "data-test": "air-invoice-legend", children: [jsxRuntime.jsx("span", { className: sx(knownTravelerStyle), children: jsxRuntime.jsx(CheckIcon$2, { size: 16 }) }), "= Known Traveler Number Loaded"] }));
10351
10351
  const hasHeader = Boolean(title || versionControlShown(versions));
10352
10352
  const versionControl = versionControlShown(versions) && (jsxRuntime.jsx(Dropdown, { label: "Version", alignment: "right", trigger: ({ isOpen, toggle }) => (jsxRuntime.jsxs("button", { type: "button", className: sx(versionButtonStyle), onClick: toggle, "aria-expanded": isOpen, "aria-haspopup": "menu", "data-test": "air-invoice-version", children: [jsxRuntime.jsx(LayersIcon, {}), "Version", jsxRuntime.jsx("span", { className: sx(versionCountStyle), children: versions.length }), jsxRuntime.jsx(ChevronDownIcon$1, { size: 16 })] })), children: versions.map((version) => (jsxRuntime.jsx(Dropdown.Item, { icon: version.id === selectedVersionId ? jsxRuntime.jsx(CheckIcon$2, { size: 14 }) : undefined, onClick: () => onVersionChange?.(version.id), children: version.label }, version.id))) }));
10353
- return (jsxRuntime.jsxs("section", { className: cx(sx(cardStyle$f), className), "aria-label": "Air invoice", "data-test": "air-invoice-card", children: [hasHeader && (jsxRuntime.jsxs("div", { className: sx(headerStyle$D), children: [title && jsxRuntime.jsx("h2", { className: sx(titleStyle$z), children: title }), jsxRuntime.jsx("div", { className: sx(headerEndStyle), children: versionControl })] })), jsxRuntime.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 && (jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { colSpan: 6, children: jsxRuntime.jsxs("span", { className: sx(totalCellStyle$1), children: ["Total", showLegend && legend] }) }), jsxRuntime.jsx("td", { className: sx(upperStyle), children: paymentStatus }), jsxRuntime.jsx("td", { "data-test": "air-invoice-total", children: total })] })) }), showLegend && !total && (jsxRuntime.jsx("p", { className: sx(legendBlockStyle), children: legend }))] }));
10353
+ return (jsxRuntime.jsxs("section", { className: cx(sx(cardStyle$g), className), "aria-label": "Air invoice", "data-test": "air-invoice-card", children: [hasHeader && (jsxRuntime.jsxs("div", { className: sx(headerStyle$D), children: [title && jsxRuntime.jsx("h2", { className: sx(titleStyle$A), children: title }), jsxRuntime.jsx("div", { className: sx(headerEndStyle), children: versionControl })] })), jsxRuntime.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 && (jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { colSpan: 6, children: jsxRuntime.jsxs("span", { className: sx(totalCellStyle$1), children: ["Total", showLegend && legend] }) }), jsxRuntime.jsx("td", { className: sx(upperStyle), children: paymentStatus }), jsxRuntime.jsx("td", { "data-test": "air-invoice-total", children: total })] })) }), showLegend && !total && (jsxRuntime.jsx("p", { className: sx(legendBlockStyle), children: legend }))] }));
10354
10354
  };
10355
10355
  AirInvoiceCard.displayName = 'AirInvoiceCard';
10356
10356
 
@@ -10803,7 +10803,7 @@ const noResultsStyle = {
10803
10803
  fontSize: 14,
10804
10804
  };
10805
10805
  /* Actions */
10806
- const actionsStyle$8 = {
10806
+ const actionsStyle$9 = {
10807
10807
  label: 'Topbar-actionsStyle',
10808
10808
  display: 'flex',
10809
10809
  gap: 'var(--space-2, 8px)',
@@ -10868,7 +10868,7 @@ const Topbar = ({ account, accounts, onAccountSelect, onAccountClick, actions, l
10868
10868
  const filteredAccounts = accounts?.filter(acc => acc.name.toLowerCase().includes(searchQuery.toLowerCase()) ||
10869
10869
  acc.code.toLowerCase().includes(searchQuery.toLowerCase())) || [];
10870
10870
  const hasDropdown = accounts && accounts.length > 0;
10871
- return (jsxRuntime.jsxs("header", { className: classNames, ...props, children: [jsxRuntime.jsxs("div", { className: sx(leftStyle), children: [leftContent, account && (jsxRuntime.jsxs("div", { className: sx(accountWrapperStyle), ref: dropdownRef, children: [jsxRuntime.jsxs("button", { className: cx(sx(accountSelectorStyle), isOpen && sx(openStyle$1)), onClick: handleToggle, "aria-expanded": isOpen, "aria-haspopup": hasDropdown ? 'listbox' : undefined, children: [jsxRuntime.jsx("span", { className: sx(accountCodeStyle), children: account.code }), jsxRuntime.jsx("span", { className: sx(accountNameStyle), children: account.name }), hasDropdown && (jsxRuntime.jsx(ChevronDownIcon$1, { size: 16, className: cx(sx(chevronStyle$2), isOpen && sx(chevronOpenStyle)) }))] }), isOpen && hasDropdown && (jsxRuntime.jsxs("div", { className: sx(dropdownStyle), role: "listbox", children: [jsxRuntime.jsxs("div", { className: sx(dropdownSearchStyle), children: [jsxRuntime.jsxs("svg", { className: sx(searchIconStyle$1), width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })] }), jsxRuntime.jsx("input", { ref: searchInputRef, type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Search accounts...", className: sx(searchInputStyle$1) })] }), jsxRuntime.jsx("div", { className: sx(dropdownListStyle), children: filteredAccounts.length > 0 ? (filteredAccounts.map((acc) => (jsxRuntime.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: [jsxRuntime.jsx("span", { className: sx(dropdownItemCodeStyle), children: acc.code }), jsxRuntime.jsx("span", { className: sx(dropdownItemNameStyle), children: acc.name })] }, acc.code)))) : (jsxRuntime.jsx("div", { className: sx(noResultsStyle), children: "No accounts found" })) })] }))] }))] }), actions && jsxRuntime.jsx("div", { className: sx(actionsStyle$8), children: actions })] }));
10871
+ return (jsxRuntime.jsxs("header", { className: classNames, ...props, children: [jsxRuntime.jsxs("div", { className: sx(leftStyle), children: [leftContent, account && (jsxRuntime.jsxs("div", { className: sx(accountWrapperStyle), ref: dropdownRef, children: [jsxRuntime.jsxs("button", { className: cx(sx(accountSelectorStyle), isOpen && sx(openStyle$1)), onClick: handleToggle, "aria-expanded": isOpen, "aria-haspopup": hasDropdown ? 'listbox' : undefined, children: [jsxRuntime.jsx("span", { className: sx(accountCodeStyle), children: account.code }), jsxRuntime.jsx("span", { className: sx(accountNameStyle), children: account.name }), hasDropdown && (jsxRuntime.jsx(ChevronDownIcon$1, { size: 16, className: cx(sx(chevronStyle$2), isOpen && sx(chevronOpenStyle)) }))] }), isOpen && hasDropdown && (jsxRuntime.jsxs("div", { className: sx(dropdownStyle), role: "listbox", children: [jsxRuntime.jsxs("div", { className: sx(dropdownSearchStyle), children: [jsxRuntime.jsxs("svg", { className: sx(searchIconStyle$1), width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8" }), jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })] }), jsxRuntime.jsx("input", { ref: searchInputRef, type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Search accounts...", className: sx(searchInputStyle$1) })] }), jsxRuntime.jsx("div", { className: sx(dropdownListStyle), children: filteredAccounts.length > 0 ? (filteredAccounts.map((acc) => (jsxRuntime.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: [jsxRuntime.jsx("span", { className: sx(dropdownItemCodeStyle), children: acc.code }), jsxRuntime.jsx("span", { className: sx(dropdownItemNameStyle), children: acc.name })] }, acc.code)))) : (jsxRuntime.jsx("div", { className: sx(noResultsStyle), children: "No accounts found" })) })] }))] }))] }), actions && jsxRuntime.jsx("div", { className: sx(actionsStyle$9), children: actions })] }));
10872
10872
  };
10873
10873
  Topbar.displayName = 'Topbar';
10874
10874
 
@@ -10921,7 +10921,7 @@ const AppLayout = ({ navItems = [], activeNavKey, logo, collapsedLogo, account,
10921
10921
  * Shares the AirInvoiceCard's shell — bordered card, header band with a small
10922
10922
  * uppercase title — so the two read as a set when stacked on a page.
10923
10923
  */
10924
- const cardStyle$e = {
10924
+ const cardStyle$f = {
10925
10925
  label: 'BookingDetailsCard-cardStyle',
10926
10926
  overflow: 'hidden',
10927
10927
  backgroundColor: 'var(--bg-surface, #fff)',
@@ -10946,7 +10946,7 @@ const headerStyle$C = {
10946
10946
  padding: '12px 24px',
10947
10947
  borderBottom: '1px solid var(--border-color-dark, #d5d5d5)',
10948
10948
  };
10949
- const titleStyle$y = {
10949
+ const titleStyle$z = {
10950
10950
  label: 'BookingDetailsCard-titleStyle',
10951
10951
  margin: 0,
10952
10952
  color: 'var(--fg-3, #6b7785)',
@@ -11022,12 +11022,12 @@ const BookingDetailsCard = ({ details, title = 'Booking Details', refId, childre
11022
11022
  if (details.length === 0 && !children)
11023
11023
  return null;
11024
11024
  const rows = Math.ceil(details.length / 2);
11025
- return (jsxRuntime.jsxs("section", { className: cx(sx(cardStyle$e), className), "aria-label": "Booking details", "data-test": "booking-details-card", children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$C), children: [jsxRuntime.jsx("h2", { className: sx(titleStyle$y), children: title }), refId && (jsxRuntime.jsxs("p", { className: sx(refStyle), "data-test": "booking-details-ref", children: ["Short\u2019s ID: ", jsxRuntime.jsx("span", { className: sx(refValueStyle), children: refId })] }))] }), details.length > 0 && (jsxRuntime.jsx("dl", { className: sx(detailsStyle$2), style: { gridTemplateRows: `repeat(${rows}, auto)` }, children: details.map((detail) => (jsxRuntime.jsxs("div", { className: sx(detailStyle$2), children: [jsxRuntime.jsx("dt", { className: sx(detailLabelStyle$1), children: detail.label }), jsxRuntime.jsx("dd", { className: sx(detailValueStyle$1), children: detail.value })] }, detail.label))) })), children && jsxRuntime.jsx("div", { className: cx(sx(sectionStyle$8), details.length > 0 && sx(sectionRuleStyle)), "data-test": "booking-details-section", children: children })] }));
11025
+ return (jsxRuntime.jsxs("section", { className: cx(sx(cardStyle$f), className), "aria-label": "Booking details", "data-test": "booking-details-card", children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$C), children: [jsxRuntime.jsx("h2", { className: sx(titleStyle$z), children: title }), refId && (jsxRuntime.jsxs("p", { className: sx(refStyle), "data-test": "booking-details-ref", children: ["Short\u2019s ID: ", jsxRuntime.jsx("span", { className: sx(refValueStyle), children: refId })] }))] }), details.length > 0 && (jsxRuntime.jsx("dl", { className: sx(detailsStyle$2), style: { gridTemplateRows: `repeat(${rows}, auto)` }, children: details.map((detail) => (jsxRuntime.jsxs("div", { className: sx(detailStyle$2), children: [jsxRuntime.jsx("dt", { className: sx(detailLabelStyle$1), children: detail.label }), jsxRuntime.jsx("dd", { className: sx(detailValueStyle$1), children: detail.value })] }, detail.label))) })), children && jsxRuntime.jsx("div", { className: cx(sx(sectionStyle$8), details.length > 0 && sx(sectionRuleStyle)), "data-test": "booking-details-section", children: children })] }));
11026
11026
  };
11027
11027
  BookingDetailsCard.displayName = 'BookingDetailsCard';
11028
11028
 
11029
11029
  /* Card Component Styles */
11030
- const cardStyle$d = {
11030
+ const cardStyle$e = {
11031
11031
  label: 'Card-cardStyle',
11032
11032
  background: 'var(--bg-surface)',
11033
11033
  borderRadius: 'var(--radius-2xl)',
@@ -11089,7 +11089,7 @@ const headerContentStyle$1 = {
11089
11089
  flex: 1,
11090
11090
  minWidth: 0,
11091
11091
  };
11092
- const titleStyle$x = {
11092
+ const titleStyle$y = {
11093
11093
  label: 'Card-titleStyle',
11094
11094
  margin: 0,
11095
11095
  fontSize: 'var(--fs-lg)',
@@ -11103,7 +11103,7 @@ const subtitleStyle$7 = {
11103
11103
  fontSize: 'var(--fs-sm)',
11104
11104
  color: 'var(--fg-3)',
11105
11105
  };
11106
- const actionsStyle$7 = {
11106
+ const actionsStyle$8 = {
11107
11107
  label: 'Card-actionsStyle',
11108
11108
  display: 'flex',
11109
11109
  gap: 'var(--space-2)',
@@ -11138,7 +11138,7 @@ const footerStyle$b = {
11138
11138
  * Card component for grouping related content.
11139
11139
  */
11140
11140
  const Card = React.forwardRef(({ variant = 'default', padding = 'md', interactive = false, className = '', children, ...props }, ref) => {
11141
- const classNames = cx(sx(cardStyle$d), sx(variantStyles[variant]), sx(paddingStyles[padding]), interactive && sx(interactiveStyle), className);
11141
+ const classNames = cx(sx(cardStyle$e), sx(variantStyles[variant]), sx(paddingStyles[padding]), interactive && sx(interactiveStyle), className);
11142
11142
  return (jsxRuntime.jsx("div", { ref: ref, className: classNames, ...props, children: children }));
11143
11143
  });
11144
11144
  Card.displayName = 'Card';
@@ -11147,7 +11147,7 @@ Card.displayName = 'Card';
11147
11147
  */
11148
11148
  const CardHeader = ({ title, subtitle, actions, className = '', children, ...props }) => {
11149
11149
  const classNames = cx(sx(headerStyle$B), className);
11150
- return (jsxRuntime.jsxs("div", { className: classNames, ...props, children: [jsxRuntime.jsxs("div", { className: sx(headerContentStyle$1), children: [title && jsxRuntime.jsx("h3", { className: sx(titleStyle$x), children: title }), subtitle && jsxRuntime.jsx("p", { className: sx(subtitleStyle$7), children: subtitle }), children] }), actions && jsxRuntime.jsx("div", { className: sx(actionsStyle$7), children: actions })] }));
11150
+ return (jsxRuntime.jsxs("div", { className: classNames, ...props, children: [jsxRuntime.jsxs("div", { className: sx(headerContentStyle$1), children: [title && jsxRuntime.jsx("h3", { className: sx(titleStyle$y), children: title }), subtitle && jsxRuntime.jsx("p", { className: sx(subtitleStyle$7), children: subtitle }), children] }), actions && jsxRuntime.jsx("div", { className: sx(actionsStyle$8), children: actions })] }));
11151
11151
  };
11152
11152
  CardHeader.displayName = 'CardHeader';
11153
11153
  /**
@@ -11850,7 +11850,7 @@ const alertStyle$4 = {
11850
11850
  label: 'ContactList-alertStyle', width: '100%'
11851
11851
  };
11852
11852
  /* Card */
11853
- const cardStyle$c = {
11853
+ const cardStyle$d = {
11854
11854
  label: 'ContactList-cardStyle',
11855
11855
  backgroundColor: 'var(--color-white)',
11856
11856
  border: '1px solid var(--color-gray-200)',
@@ -11869,7 +11869,7 @@ const titleRowStyle$3 = {
11869
11869
  alignItems: 'center',
11870
11870
  gap: 'var(--space-2)',
11871
11871
  };
11872
- const titleStyle$w = {
11872
+ const titleStyle$x = {
11873
11873
  label: 'ContactList-titleStyle',
11874
11874
  fontSize: 'var(--text-base)',
11875
11875
  fontWeight: 'var(--font-semibold)',
@@ -12055,7 +12055,7 @@ const PlusIcon$1 = () => (jsxRuntime.jsxs("svg", { width: "16", height: "16", vi
12055
12055
  */
12056
12056
  const ContactList = ({ title = 'Contacts', tooltip, contacts, onEdit, onRemove, onAdd, showAdd = true, addLabel = 'Add Contact', alert, className = '', }) => {
12057
12057
  const listClasses = cx(sx(containerStyle$3), className);
12058
- return (jsxRuntime.jsxs("div", { className: listClasses, children: [alert && (jsxRuntime.jsx("div", { className: sx(alertStyle$4), children: alert })), jsxRuntime.jsxs("div", { className: sx(cardStyle$c), children: [jsxRuntime.jsx("div", { className: sx(headerStyle$A), children: jsxRuntime.jsxs("div", { className: sx(titleRowStyle$3), children: [jsxRuntime.jsx("h3", { className: sx(titleStyle$w), children: title }), tooltip && (jsxRuntime.jsx("span", { className: sx(tooltipStyle), children: jsxRuntime.jsx(InfoIcon, {}) }))] }) }), jsxRuntime.jsxs("div", { className: sx(listStyle$4), children: [contacts.map((contact) => (jsxRuntime.jsxs("div", { className: sx(contactItemStyle), children: [jsxRuntime.jsxs("div", { className: sx(contactInfoStyle), children: [jsxRuntime.jsxs("div", { className: sx(contactNameStyle$1), children: [contact.name, contact.isPrimary && (jsxRuntime.jsx("span", { className: sx(badgeStyle$2), children: "Primary" })), contact.isSecondary && (jsxRuntime.jsx("span", { className: cx(sx(badgeStyle$2), sx(badgeSecondaryStyle)), children: "Secondary" }))] }), contact.role && (jsxRuntime.jsx("div", { className: sx(contactRoleStyle$1), children: contact.role })), jsxRuntime.jsxs("div", { className: sx(contactDetailsStyle$1), children: [contact.email && (jsxRuntime.jsx("a", { href: `mailto:${contact.email}`, className: sx(contactLinkStyle$2), children: contact.email })), contact.phone && (jsxRuntime.jsx("span", { className: sx(contactPhoneStyle), children: contact.phone }))] })] }), jsxRuntime.jsxs("div", { className: sx(contactActionsStyle), children: [onEdit && (jsxRuntime.jsx("button", { type: "button", className: sx(actionButtonStyle$1), onClick: () => onEdit(contact), "aria-label": "Edit contact", children: jsxRuntime.jsx(EditIcon$1, {}) })), onRemove && (jsxRuntime.jsx("button", { type: "button", className: cx(sx(actionButtonStyle$1), sx(actionButtonDangerStyle)), onClick: () => onRemove(contact), "aria-label": "Remove contact", children: jsxRuntime.jsx(TrashIcon$1, {}) }))] })] }, contact.id))), contacts.length === 0 && (jsxRuntime.jsx("div", { className: sx(emptyStyle$f), children: "No contacts added" }))] }), showAdd && onAdd && (jsxRuntime.jsx("div", { className: sx(footerStyle$a), children: jsxRuntime.jsxs("button", { type: "button", className: sx(addButtonStyle$1), onClick: onAdd, children: [jsxRuntime.jsx(PlusIcon$1, {}), addLabel] }) }))] })] }));
12058
+ return (jsxRuntime.jsxs("div", { className: listClasses, children: [alert && (jsxRuntime.jsx("div", { className: sx(alertStyle$4), children: alert })), jsxRuntime.jsxs("div", { className: sx(cardStyle$d), children: [jsxRuntime.jsx("div", { className: sx(headerStyle$A), children: jsxRuntime.jsxs("div", { className: sx(titleRowStyle$3), children: [jsxRuntime.jsx("h3", { className: sx(titleStyle$x), children: title }), tooltip && (jsxRuntime.jsx("span", { className: sx(tooltipStyle), children: jsxRuntime.jsx(InfoIcon, {}) }))] }) }), jsxRuntime.jsxs("div", { className: sx(listStyle$4), children: [contacts.map((contact) => (jsxRuntime.jsxs("div", { className: sx(contactItemStyle), children: [jsxRuntime.jsxs("div", { className: sx(contactInfoStyle), children: [jsxRuntime.jsxs("div", { className: sx(contactNameStyle$1), children: [contact.name, contact.isPrimary && (jsxRuntime.jsx("span", { className: sx(badgeStyle$2), children: "Primary" })), contact.isSecondary && (jsxRuntime.jsx("span", { className: cx(sx(badgeStyle$2), sx(badgeSecondaryStyle)), children: "Secondary" }))] }), contact.role && (jsxRuntime.jsx("div", { className: sx(contactRoleStyle$1), children: contact.role })), jsxRuntime.jsxs("div", { className: sx(contactDetailsStyle$1), children: [contact.email && (jsxRuntime.jsx("a", { href: `mailto:${contact.email}`, className: sx(contactLinkStyle$2), children: contact.email })), contact.phone && (jsxRuntime.jsx("span", { className: sx(contactPhoneStyle), children: contact.phone }))] })] }), jsxRuntime.jsxs("div", { className: sx(contactActionsStyle), children: [onEdit && (jsxRuntime.jsx("button", { type: "button", className: sx(actionButtonStyle$1), onClick: () => onEdit(contact), "aria-label": "Edit contact", children: jsxRuntime.jsx(EditIcon$1, {}) })), onRemove && (jsxRuntime.jsx("button", { type: "button", className: cx(sx(actionButtonStyle$1), sx(actionButtonDangerStyle)), onClick: () => onRemove(contact), "aria-label": "Remove contact", children: jsxRuntime.jsx(TrashIcon$1, {}) }))] })] }, contact.id))), contacts.length === 0 && (jsxRuntime.jsx("div", { className: sx(emptyStyle$f), children: "No contacts added" }))] }), showAdd && onAdd && (jsxRuntime.jsx("div", { className: sx(footerStyle$a), children: jsxRuntime.jsxs("button", { type: "button", className: sx(addButtonStyle$1), onClick: onAdd, children: [jsxRuntime.jsx(PlusIcon$1, {}), addLabel] }) }))] })] }));
12059
12059
  };
12060
12060
  ContactList.displayName = 'ContactList';
12061
12061
 
@@ -12191,7 +12191,7 @@ const headerContentStyle = {
12191
12191
  label: 'Drawer-headerContentStyle',
12192
12192
  flex: 1,
12193
12193
  };
12194
- const titleStyle$v = {
12194
+ const titleStyle$w = {
12195
12195
  label: 'Drawer-titleStyle',
12196
12196
  margin: 0,
12197
12197
  fontSize: 18,
@@ -12237,7 +12237,7 @@ const footerStyle$9 = {
12237
12237
  /**
12238
12238
  * Top of a Drawer: title and the close affordance.
12239
12239
  */
12240
- const DrawerHeader = ({ title, children, showClose = true, onClose, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$z), className), children: [jsxRuntime.jsxs("div", { className: sx(headerContentStyle), children: [title && jsxRuntime.jsx("h2", { className: sx(titleStyle$v), children: title }), children] }), showClose && (jsxRuntime.jsx("button", { type: "button", className: sx(closeButtonStyle$2), onClick: onClose, "aria-label": "Close drawer", children: jsxRuntime.jsx("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }))] }));
12240
+ const DrawerHeader = ({ title, children, showClose = true, onClose, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$z), className), children: [jsxRuntime.jsxs("div", { className: sx(headerContentStyle), children: [title && jsxRuntime.jsx("h2", { className: sx(titleStyle$w), children: title }), children] }), showClose && (jsxRuntime.jsx("button", { type: "button", className: sx(closeButtonStyle$2), onClick: onClose, "aria-label": "Close drawer", children: jsxRuntime.jsx("svg", { width: "20", height: "20", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }))] }));
12241
12241
  /**
12242
12242
  * Scrollable content region of a Drawer.
12243
12243
  */
@@ -12372,7 +12372,7 @@ const bodyStyle$6 = {
12372
12372
  fontWeight: 500,
12373
12373
  },
12374
12374
  };
12375
- const searchStyle$1 = {
12375
+ const searchStyle$2 = {
12376
12376
  label: 'DueDatesDrawer-searchStyle',
12377
12377
  display: 'flex',
12378
12378
  width: '100%',
@@ -12407,7 +12407,7 @@ const emptyStyle$e = {
12407
12407
  padding: '16px 8px 0',
12408
12408
  color: 'var(--color-stone, #787878)',
12409
12409
  };
12410
- const cardStyle$b = {
12410
+ const cardStyle$c = {
12411
12411
  label: 'DueDatesDrawer-cardStyle',
12412
12412
  display: 'flex',
12413
12413
  flexDirection: 'column',
@@ -12531,7 +12531,7 @@ const DueDateCard$1 = ({ item, onToggle, onTaskClick }) => {
12531
12531
  const completed = isTravelDueDateCompleted(item);
12532
12532
  const dueDate = parseLocalDate$1(item.duedate);
12533
12533
  const pastDue = !!dueDate && dueDate < new Date() && !completed;
12534
- return (jsxRuntime.jsxs("article", { className: sx(cardStyle$b), children: [jsxRuntime.jsxs("div", { className: sx(cardTitleStyle$3), children: [onToggle ? (jsxRuntime.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 ? jsxRuntime.jsx(CheckIcon$2, { size: 12 }) : null })) : (jsxRuntime.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 ? jsxRuntime.jsx(CheckIcon$2, { size: 12 }) : null })), jsxRuntime.jsx("h5", { children: item.tasktitle })] }), item.description && jsxRuntime.jsx("p", { children: item.description }), jsxRuntime.jsxs("div", { className: sx(tagsStyle), children: [jsxRuntime.jsx("span", { style: { backgroundColor: sportColor$1(item.sportCode) }, children: item.sportCode }), jsxRuntime.jsx("button", { type: "button", disabled: !item.masterTripGUID || !onTaskClick, onClick: () => item.masterTripGUID && onTaskClick?.(item.masterTripGUID), children: item.tripName })] }), completed && item.completeddatetime && jsxRuntime.jsxs("div", { className: sx(completionStyle), children: [jsxRuntime.jsx(CheckIcon$2, { size: 14 }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("em", { children: "on" }), " ", formatDate$8(item.completeddatetime, { month: 'numeric', day: 'numeric', year: '2-digit' }), " ", jsxRuntime.jsx("em", { children: "by" }), " ", item.completedby] })] })] }));
12534
+ return (jsxRuntime.jsxs("article", { className: sx(cardStyle$c), children: [jsxRuntime.jsxs("div", { className: sx(cardTitleStyle$3), children: [onToggle ? (jsxRuntime.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 ? jsxRuntime.jsx(CheckIcon$2, { size: 12 }) : null })) : (jsxRuntime.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 ? jsxRuntime.jsx(CheckIcon$2, { size: 12 }) : null })), jsxRuntime.jsx("h5", { children: item.tasktitle })] }), item.description && jsxRuntime.jsx("p", { children: item.description }), jsxRuntime.jsxs("div", { className: sx(tagsStyle), children: [jsxRuntime.jsx("span", { style: { backgroundColor: sportColor$1(item.sportCode) }, children: item.sportCode }), jsxRuntime.jsx("button", { type: "button", disabled: !item.masterTripGUID || !onTaskClick, onClick: () => item.masterTripGUID && onTaskClick?.(item.masterTripGUID), children: item.tripName })] }), completed && item.completeddatetime && jsxRuntime.jsxs("div", { className: sx(completionStyle), children: [jsxRuntime.jsx(CheckIcon$2, { size: 14 }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("em", { children: "on" }), " ", formatDate$8(item.completeddatetime, { month: 'numeric', day: 'numeric', year: '2-digit' }), " ", jsxRuntime.jsx("em", { children: "by" }), " ", item.completedby] })] })] }));
12535
12535
  };
12536
12536
  /** Hub's searchable, status-aware due-dates drawer. */
12537
12537
  const DueDatesDrawer = ({ isOpen, dueDates, selectedDate, selectedTrip, overdueOnly, onClose, onToggle, onTaskClick, className = '' }) => {
@@ -12543,7 +12543,7 @@ const DueDatesDrawer = ({ isOpen, dueDates, selectedDate, selectedTrip, overdueO
12543
12543
  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)));
12544
12544
  return matches.length ? [[date, matches]] : [];
12545
12545
  })), [dueDates, search, selectedDate, selectedTrip, overdueOnly]);
12546
- return (jsxRuntime.jsxs("aside", { className: cx(sx(drawerStyle), isOpen && sx(openStyle), className), "aria-hidden": !isOpen, "aria-label": "Due Dates", children: [jsxRuntime.jsxs("header", { children: [jsxRuntime.jsx("h3", { children: "Due Dates" }), jsxRuntime.jsx("button", { type: "button", "aria-label": "Close due dates", onClick: onClose, children: jsxRuntime.jsx(CloseIcon, { size: 24 }) })] }), jsxRuntime.jsxs("div", { className: sx(bodyStyle$6), children: [jsxRuntime.jsxs("label", { className: sx(searchStyle$1), children: [jsxRuntime.jsx(SearchIcon$1, { size: 16 }), jsxRuntime.jsx("input", { type: "search", placeholder: "Search", value: search, onChange: (event) => setSearch(event.target.value) })] }), !Object.keys(filtered).length ? jsxRuntime.jsx("div", { className: sx(emptyStyle$e), children: "No due dates found." }) : Object.entries(filtered).map(([date, items]) => (jsxRuntime.jsxs("section", { children: [jsxRuntime.jsx("h4", { children: formatDate$8(date, { month: 'long', day: 'numeric', year: 'numeric' }) }), jsxRuntime.jsx("div", { className: sx(cardsStyle$2), children: items.map((item) => jsxRuntime.jsx(DueDateCard$1, { item: item, onToggle: onToggle, onTaskClick: onTaskClick }, `${date}-${item.taskid}`)) })] }, date)))] })] }));
12546
+ return (jsxRuntime.jsxs("aside", { className: cx(sx(drawerStyle), isOpen && sx(openStyle), className), "aria-hidden": !isOpen, "aria-label": "Due Dates", children: [jsxRuntime.jsxs("header", { children: [jsxRuntime.jsx("h3", { children: "Due Dates" }), jsxRuntime.jsx("button", { type: "button", "aria-label": "Close due dates", onClick: onClose, children: jsxRuntime.jsx(CloseIcon, { size: 24 }) })] }), jsxRuntime.jsxs("div", { className: sx(bodyStyle$6), children: [jsxRuntime.jsxs("label", { className: sx(searchStyle$2), children: [jsxRuntime.jsx(SearchIcon$1, { size: 16 }), jsxRuntime.jsx("input", { type: "search", placeholder: "Search", value: search, onChange: (event) => setSearch(event.target.value) })] }), !Object.keys(filtered).length ? jsxRuntime.jsx("div", { className: sx(emptyStyle$e), children: "No due dates found." }) : Object.entries(filtered).map(([date, items]) => (jsxRuntime.jsxs("section", { children: [jsxRuntime.jsx("h4", { children: formatDate$8(date, { month: 'long', day: 'numeric', year: 'numeric' }) }), jsxRuntime.jsx("div", { className: sx(cardsStyle$2), children: items.map((item) => jsxRuntime.jsx(DueDateCard$1, { item: item, onToggle: onToggle, onTaskClick: onTaskClick }, `${date}-${item.taskid}`)) })] }, date)))] })] }));
12547
12547
  };
12548
12548
 
12549
12549
  /**
@@ -13831,7 +13831,7 @@ const HubAppShell = ({ children, navItems, individualTravelItem, agentsItem, sou
13831
13831
  * Explicit specificity keeps service and cancellation border colors stable
13832
13832
  * regardless of style injection order: base < type (`&&`) < cancelled (`&&&`).
13833
13833
  */
13834
- const cardStyle$a = {
13834
+ const cardStyle$b = {
13835
13835
  label: 'ItinerarySegmentCard-cardStyle',
13836
13836
  display: 'flex',
13837
13837
  flexDirection: 'column',
@@ -13909,7 +13909,7 @@ const confirmationHeaderStyle = {
13909
13909
  },
13910
13910
  },
13911
13911
  };
13912
- const eyebrowStyle$8 = {
13912
+ const eyebrowStyle$9 = {
13913
13913
  label: 'ItinerarySegmentCard-eyebrowStyle',
13914
13914
  fontSize: 'var(--fs-xs)',
13915
13915
  lineHeight: 'var(--lh-xs)',
@@ -13919,7 +13919,7 @@ const eyebrowStyle$8 = {
13919
13919
  letterSpacing: '0.06em',
13920
13920
  };
13921
13921
  /** Declared before `isCancelledStyle`, which reaches it as a descendant. */
13922
- const titleStyle$u = {
13922
+ const titleStyle$v = {
13923
13923
  label: 'ItinerarySegmentCard-titleStyle',
13924
13924
  margin: 0,
13925
13925
  fontSize: 'var(--fs-lg)',
@@ -13953,7 +13953,7 @@ const isCancelledStyle = {
13953
13953
  backgroundColor: 'var(--bg-subtle)',
13954
13954
  },
13955
13955
  /* `.isCancelled .title` */
13956
- [`&&& .${sx(titleStyle$u)}`]: {
13956
+ [`&&& .${sx(titleStyle$v)}`]: {
13957
13957
  textDecoration: 'line-through',
13958
13958
  },
13959
13959
  };
@@ -14145,7 +14145,7 @@ const flightStatusStyle = {
14145
14145
  lineHeight: 'var(--lh-sm)',
14146
14146
  fontWeight: 'var(--fw-medium)',
14147
14147
  };
14148
- const actionsStyle$6 = {
14148
+ const actionsStyle$7 = {
14149
14149
  label: 'ItinerarySegmentCard-actionsStyle',
14150
14150
  display: 'flex',
14151
14151
  flexWrap: 'wrap',
@@ -14451,7 +14451,7 @@ const ItinerarySegmentCard = ({ segment, headingLevel = 3, onCheckIn, showCheckI
14451
14451
  ...(segment.type === 'limo' ? [{ label: 'Cancellation policy', lines: segment.cancellationPolicies }] : []),
14452
14452
  { label: 'Segment Notes', lines: segment.type === 'limo' ? [...(segment.comments ?? []), ...(segment.notes ?? [])] : segment.notes },
14453
14453
  ];
14454
- return (jsxRuntime.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: [jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$w), pillConfirmation && sx(confirmationHeaderStyle)), children: [jsxRuntime.jsx("span", { className: sx(iconStyle$2), "aria-hidden": "true", children: jsxRuntime.jsx(TravelServiceIcon, { type: meta.code, vendor: vendorCode, size: 48 }) }), jsxRuntime.jsxs("span", { className: sx(headingsStyle), children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle$8), children: meta.label }), jsxRuntime.jsx("span", { className: sx(titleRowStyle$2), children: jsxRuntime.jsx(Heading, { className: sx(titleStyle$u), children: getSegmentTitle(segment) }) }), segment.type === 'air' && segment.operatedBy?.trim() && jsxRuntime.jsxs("span", { className: sx(operatedByStyle), children: ["Operated by ", segment.operatedBy] }), (segment.type === 'car' || segment.type === 'hotel') && segment.reservationName?.trim() && (jsxRuntime.jsxs("span", { className: sx(operatedByStyle), "data-test": `itinerary-reserved-for-${segment.id}`, children: ["Reserved for ", segment.reservationName] }))] }), headerCheckIn && (jsxRuntime.jsx(Button, { size: "sm", variant: "primary", "aria-label": checkInLabel, "data-test": `itinerary-check-in-${segment.id}`, onClick: () => onCheckIn?.(segment), children: "Check In" })), jsxRuntime.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) && jsxRuntime.jsxs("div", { className: sx(routeStyle$2), children: [hasStart && jsxRuntime.jsxs("div", { className: sx(endpointStyle), children: [jsxRuntime.jsx("span", { className: sx(endpointLabelStyle), children: endpoints.startLabel }), segment.type === 'car' && jsxRuntime.jsx("span", { className: sx(endpointTimeStyle), children: endpoints.startCode }), endpoints.startTime && jsxRuntime.jsx("span", { className: sx(segment.type === 'car' ? endpointCodeStyle : endpointTimeStyle), children: endpoints.startTime }), segment.type !== 'car' && endpoints.startCode && jsxRuntime.jsx("span", { className: sx(endpointCodeStyle), children: endpoints.startCode }), endpoints.startPlace && jsxRuntime.jsx("span", { className: sx(endpointPlaceStyle), children: endpoints.startPlace })] }), hasStart && hasEnd && jsxRuntime.jsxs("div", { className: sx(connectorStyle), children: [duration && jsxRuntime.jsx("span", { className: sx(connectorLabelStyle), children: duration }), jsxRuntime.jsx("span", { className: sx(connectorArrowStyle), "aria-hidden": "true", children: jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntime.jsx("line", { x1: "5", y1: "12", x2: "19", y2: "12" }), jsxRuntime.jsx("polyline", { points: "12 5 19 12 12 19" })] }) }), (segment.type === 'air' || segment.type === 'rail') && !!segment.miles && jsxRuntime.jsxs("span", { className: sx(connectorLabelStyle), children: [segment.miles.toLocaleString('en-US'), " miles"] }), segment.type === 'car' && !!segment.carCount && jsxRuntime.jsxs("span", { className: sx(connectorLabelStyle), children: [segment.carCount, " ", segment.carCount === 1 ? 'Vehicle' : 'Vehicles'] }), segment.type === 'hotel' && !!segment.rooms && jsxRuntime.jsxs("span", { className: sx(connectorLabelStyle), children: [segment.rooms, " ", segment.rooms === 1 ? 'Room' : 'Rooms'] })] }), hasEnd && jsxRuntime.jsxs("div", { className: sx(endpointStyle), children: [jsxRuntime.jsx("span", { className: sx(endpointLabelStyle), children: endpoints.endLabel }), segment.type === 'car' && jsxRuntime.jsx("span", { className: sx(endpointTimeStyle), children: endpoints.endCode }), endpoints.endTime && (jsxRuntime.jsxs("span", { className: sx(segment.type === 'car' ? endpointCodeStyle : endpointTimeStyle), children: [endpoints.endTime, dayOffset > 0 && jsxRuntime.jsxs("span", { className: sx(nextDayStyle), children: ["+", dayOffset, " day", dayOffset === 1 ? '' : 's'] })] })), segment.type !== 'car' && endpoints.endCode && jsxRuntime.jsx("span", { className: sx(endpointCodeStyle), children: endpoints.endCode }), endpoints.endPlace && jsxRuntime.jsx("span", { className: sx(endpointPlaceStyle), children: endpoints.endPlace })] })] }), details.length > 0 && (jsxRuntime.jsx("dl", { className: sx(detailsStyle$1), children: details.map((detail) => (jsxRuntime.jsxs("div", { className: cx(sx(detailStyle$1), detail.fullRow && sx(detailFullRowStyle)), children: [jsxRuntime.jsx("dt", { className: sx(detailLabelStyle), children: detail.label }), jsxRuntime.jsx("dd", { className: cx(sx(detailValueStyle), detail.mono && sx(monoStyle$2)), children: detail.value }), detail.below && jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("dt", { className: cx(sx(detailLabelStyle), sx(detailBelowLabelStyle)), children: detail.below.label }), jsxRuntime.jsx("dd", { className: sx(detailValueStyle), children: detail.below.value })] })] }, detail.label))) })), segment.type === 'air' && segment.flightStatus && (jsxRuntime.jsx("p", { className: sx(flightStatusStyle), "data-test": `itinerary-flight-status-${segment.id}`, children: segment.flightStatus })), segment.type === 'air' && segment.checkInAvailable && onCheckIn && !headerCheckIn && (jsxRuntime.jsx("div", { className: sx(actionsStyle$6), children: jsxRuntime.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 }) => {
14454
+ return (jsxRuntime.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: [jsxRuntime.jsxs("div", { className: cx(sx(headerStyle$w), pillConfirmation && sx(confirmationHeaderStyle)), children: [jsxRuntime.jsx("span", { className: sx(iconStyle$2), "aria-hidden": "true", children: jsxRuntime.jsx(TravelServiceIcon, { type: meta.code, vendor: vendorCode, size: 48 }) }), jsxRuntime.jsxs("span", { className: sx(headingsStyle), children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle$9), children: meta.label }), jsxRuntime.jsx("span", { className: sx(titleRowStyle$2), children: jsxRuntime.jsx(Heading, { className: sx(titleStyle$v), children: getSegmentTitle(segment) }) }), segment.type === 'air' && segment.operatedBy?.trim() && jsxRuntime.jsxs("span", { className: sx(operatedByStyle), children: ["Operated by ", segment.operatedBy] }), (segment.type === 'car' || segment.type === 'hotel') && segment.reservationName?.trim() && (jsxRuntime.jsxs("span", { className: sx(operatedByStyle), "data-test": `itinerary-reserved-for-${segment.id}`, children: ["Reserved for ", segment.reservationName] }))] }), headerCheckIn && (jsxRuntime.jsx(Button, { size: "sm", variant: "primary", "aria-label": checkInLabel, "data-test": `itinerary-check-in-${segment.id}`, onClick: () => onCheckIn?.(segment), children: "Check In" })), jsxRuntime.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) && jsxRuntime.jsxs("div", { className: sx(routeStyle$2), children: [hasStart && jsxRuntime.jsxs("div", { className: sx(endpointStyle), children: [jsxRuntime.jsx("span", { className: sx(endpointLabelStyle), children: endpoints.startLabel }), segment.type === 'car' && jsxRuntime.jsx("span", { className: sx(endpointTimeStyle), children: endpoints.startCode }), endpoints.startTime && jsxRuntime.jsx("span", { className: sx(segment.type === 'car' ? endpointCodeStyle : endpointTimeStyle), children: endpoints.startTime }), segment.type !== 'car' && endpoints.startCode && jsxRuntime.jsx("span", { className: sx(endpointCodeStyle), children: endpoints.startCode }), endpoints.startPlace && jsxRuntime.jsx("span", { className: sx(endpointPlaceStyle), children: endpoints.startPlace })] }), hasStart && hasEnd && jsxRuntime.jsxs("div", { className: sx(connectorStyle), children: [duration && jsxRuntime.jsx("span", { className: sx(connectorLabelStyle), children: duration }), jsxRuntime.jsx("span", { className: sx(connectorArrowStyle), "aria-hidden": "true", children: jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntime.jsx("line", { x1: "5", y1: "12", x2: "19", y2: "12" }), jsxRuntime.jsx("polyline", { points: "12 5 19 12 12 19" })] }) }), (segment.type === 'air' || segment.type === 'rail') && !!segment.miles && jsxRuntime.jsxs("span", { className: sx(connectorLabelStyle), children: [segment.miles.toLocaleString('en-US'), " miles"] }), segment.type === 'car' && !!segment.carCount && jsxRuntime.jsxs("span", { className: sx(connectorLabelStyle), children: [segment.carCount, " ", segment.carCount === 1 ? 'Vehicle' : 'Vehicles'] }), segment.type === 'hotel' && !!segment.rooms && jsxRuntime.jsxs("span", { className: sx(connectorLabelStyle), children: [segment.rooms, " ", segment.rooms === 1 ? 'Room' : 'Rooms'] })] }), hasEnd && jsxRuntime.jsxs("div", { className: sx(endpointStyle), children: [jsxRuntime.jsx("span", { className: sx(endpointLabelStyle), children: endpoints.endLabel }), segment.type === 'car' && jsxRuntime.jsx("span", { className: sx(endpointTimeStyle), children: endpoints.endCode }), endpoints.endTime && (jsxRuntime.jsxs("span", { className: sx(segment.type === 'car' ? endpointCodeStyle : endpointTimeStyle), children: [endpoints.endTime, dayOffset > 0 && jsxRuntime.jsxs("span", { className: sx(nextDayStyle), children: ["+", dayOffset, " day", dayOffset === 1 ? '' : 's'] })] })), segment.type !== 'car' && endpoints.endCode && jsxRuntime.jsx("span", { className: sx(endpointCodeStyle), children: endpoints.endCode }), endpoints.endPlace && jsxRuntime.jsx("span", { className: sx(endpointPlaceStyle), children: endpoints.endPlace })] })] }), details.length > 0 && (jsxRuntime.jsx("dl", { className: sx(detailsStyle$1), children: details.map((detail) => (jsxRuntime.jsxs("div", { className: cx(sx(detailStyle$1), detail.fullRow && sx(detailFullRowStyle)), children: [jsxRuntime.jsx("dt", { className: sx(detailLabelStyle), children: detail.label }), jsxRuntime.jsx("dd", { className: cx(sx(detailValueStyle), detail.mono && sx(monoStyle$2)), children: detail.value }), detail.below && jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("dt", { className: cx(sx(detailLabelStyle), sx(detailBelowLabelStyle)), children: detail.below.label }), jsxRuntime.jsx("dd", { className: sx(detailValueStyle), children: detail.below.value })] })] }, detail.label))) })), segment.type === 'air' && segment.flightStatus && (jsxRuntime.jsx("p", { className: sx(flightStatusStyle), "data-test": `itinerary-flight-status-${segment.id}`, children: segment.flightStatus })), segment.type === 'air' && segment.checkInAvailable && onCheckIn && !headerCheckIn && (jsxRuntime.jsx("div", { className: sx(actionsStyle$7), children: jsxRuntime.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 }) => {
14455
14455
  const content = lines?.filter((line) => line.trim());
14456
14456
  return content?.length ? (jsxRuntime.jsxs("section", { "aria-label": label, className: sx(footerStyle$7), children: [jsxRuntime.jsx("div", { className: sx(noteLabelStyle), children: label }), content.map((line, index) => jsxRuntime.jsx("p", { className: sx(noteLineStyle), children: line }, index))] }, label)) : null;
14457
14457
  }), footer && jsxRuntime.jsx("div", { className: sx(footerStyle$7), children: footer })] }));
@@ -14758,7 +14758,7 @@ const headerStyle$v = {
14758
14758
  justifyContent: 'space-between',
14759
14759
  gap: 'var(--space-4)',
14760
14760
  };
14761
- const titleStyle$t = {
14761
+ const titleStyle$u = {
14762
14762
  label: 'MembershipPrograms-titleStyle',
14763
14763
  fontSize: 'var(--text-lg)',
14764
14764
  fontWeight: 'var(--font-semibold)',
@@ -14954,7 +14954,7 @@ const MembershipPrograms = ({ title = 'Membership Programs', programs, onEdit, o
14954
14954
  return acc;
14955
14955
  }, {});
14956
14956
  const typeOrder = ['airline', 'hotel', 'car', 'other'];
14957
- return (jsxRuntime.jsxs("div", { className: containerClasses, children: [alert && jsxRuntime.jsx("div", { className: sx(alertStyle$3), children: alert }), jsxRuntime.jsxs("div", { className: sx(headerStyle$v), children: [jsxRuntime.jsx("h2", { className: sx(titleStyle$t), children: title }), onAdd && (jsxRuntime.jsxs("button", { type: "button", className: sx(addButtonStyle), onClick: onAdd, "aria-label": "Add membership program", children: [jsxRuntime.jsx(PlusIcon, {}), jsxRuntime.jsx("span", { children: "Add Program" })] }))] }), programs.length === 0 ? (jsxRuntime.jsx("div", { className: sx(emptyStyle$c), children: jsxRuntime.jsx("p", { children: emptyMessage }) })) : (jsxRuntime.jsx("div", { className: sx(listStyle$3), children: typeOrder.map((type) => {
14957
+ return (jsxRuntime.jsxs("div", { className: containerClasses, children: [alert && jsxRuntime.jsx("div", { className: sx(alertStyle$3), children: alert }), jsxRuntime.jsxs("div", { className: sx(headerStyle$v), children: [jsxRuntime.jsx("h2", { className: sx(titleStyle$u), children: title }), onAdd && (jsxRuntime.jsxs("button", { type: "button", className: sx(addButtonStyle), onClick: onAdd, "aria-label": "Add membership program", children: [jsxRuntime.jsx(PlusIcon, {}), jsxRuntime.jsx("span", { children: "Add Program" })] }))] }), programs.length === 0 ? (jsxRuntime.jsx("div", { className: sx(emptyStyle$c), children: jsxRuntime.jsx("p", { children: emptyMessage }) })) : (jsxRuntime.jsx("div", { className: sx(listStyle$3), children: typeOrder.map((type) => {
14958
14958
  const typePrograms = groupedPrograms[type];
14959
14959
  if (!typePrograms || typePrograms.length === 0)
14960
14960
  return null;
@@ -15123,7 +15123,7 @@ const dialogStyle = {
15123
15123
  },
15124
15124
  };
15125
15125
  /** The Module card inside it: fills the box and lets its body scroll. */
15126
- const cardStyle$9 = {
15126
+ const cardStyle$a = {
15127
15127
  label: 'Modal-cardStyle',
15128
15128
  flex: 1,
15129
15129
  minHeight: 0,
@@ -15142,7 +15142,7 @@ const sizeStyles$1 = {
15142
15142
  },
15143
15143
  };
15144
15144
  /** The title inherits the Module header's type (16px semibold, ink). */
15145
- const titleStyle$s = {
15145
+ const titleStyle$t = {
15146
15146
  label: 'Modal-titleStyle',
15147
15147
  margin: 0,
15148
15148
  font: 'inherit',
@@ -15247,7 +15247,7 @@ const iconStyle$1 = {
15247
15247
  const iconSpacedStyle = {
15248
15248
  label: 'Module-iconSpacedStyle', margin: 4
15249
15249
  };
15250
- const titleStyle$r = {
15250
+ const titleStyle$s = {
15251
15251
  label: 'Module-titleStyle', color: 'var(--fg-1, #282828)'
15252
15252
  };
15253
15253
  const badgeStyle$1 = {
@@ -15365,7 +15365,7 @@ const Module = ({ title, icon, iconClassName = '', badge, before, children, afte
15365
15365
  setOpen(!open);
15366
15366
  }
15367
15367
  };
15368
- return (jsxRuntime.jsxs("div", { className: cx(sx(moduleStyle), className), children: [title && (jsxRuntime.jsx("div", { className: cx(sx(headerStyle$u), sx(headerSizeStyles[size]), !open && sx(closedStyle), headerClassName), children: jsxRuntime.jsxs("div", { className: cx(sx(titleRowStyle$1), sx(titleRowSizeStyles[size]), titleClassName), children: [icon && (jsxRuntime.jsx("span", { className: cx(sx(iconStyle$1), size !== 'sm' && sx(iconSpacedStyle), iconClassName), children: icon })), jsxRuntime.jsx("div", { className: sx(titleStyle$r), children: title }), badge && jsxRuntime.jsx("span", { className: sx(badgeStyle$1), children: badge }), jsxRuntime.jsxs("div", { className: sx(toolsStyle), children: [tools, useToggle && (jsxRuntime.jsx("button", { type: "button", className: sx(toggleBtnStyle), onClick: handleToggle, "aria-expanded": open, children: jsxRuntime.jsx(ChevronIcon, { direction: open ? 'up' : 'down' }) }))] })] }) })), jsxRuntime.jsxs("div", { className: cx(sx(bodyWrapperStyle), scrollBody && sx(scrollBodyStyle)), children: [before, jsxRuntime.jsx("div", { className: cx(sx(bodyStyle$4), sx(bodySizeStyles[size]), !open && sx(hiddenStyle), bodyClassName), children: children }), after] }), footer && (jsxRuntime.jsx("div", { className: cx(sx(footerStyle$6), !open && sx(hiddenStyle)), children: footer }))] }));
15368
+ return (jsxRuntime.jsxs("div", { className: cx(sx(moduleStyle), className), children: [title && (jsxRuntime.jsx("div", { className: cx(sx(headerStyle$u), sx(headerSizeStyles[size]), !open && sx(closedStyle), headerClassName), children: jsxRuntime.jsxs("div", { className: cx(sx(titleRowStyle$1), sx(titleRowSizeStyles[size]), titleClassName), children: [icon && (jsxRuntime.jsx("span", { className: cx(sx(iconStyle$1), size !== 'sm' && sx(iconSpacedStyle), iconClassName), children: icon })), jsxRuntime.jsx("div", { className: sx(titleStyle$s), children: title }), badge && jsxRuntime.jsx("span", { className: sx(badgeStyle$1), children: badge }), jsxRuntime.jsxs("div", { className: sx(toolsStyle), children: [tools, useToggle && (jsxRuntime.jsx("button", { type: "button", className: sx(toggleBtnStyle), onClick: handleToggle, "aria-expanded": open, children: jsxRuntime.jsx(ChevronIcon, { direction: open ? 'up' : 'down' }) }))] })] }) })), jsxRuntime.jsxs("div", { className: cx(sx(bodyWrapperStyle), scrollBody && sx(scrollBodyStyle)), children: [before, jsxRuntime.jsx("div", { className: cx(sx(bodyStyle$4), sx(bodySizeStyles[size]), !open && sx(hiddenStyle), bodyClassName), children: children }), after] }), footer && (jsxRuntime.jsx("div", { className: cx(sx(footerStyle$6), !open && sx(hiddenStyle)), children: footer }))] }));
15369
15369
  };
15370
15370
  /**
15371
15371
  * Horizontal divider for Module content
@@ -15417,8 +15417,8 @@ const Modal = ({ isOpen, onClose, title, subtitle, icon, children, size = 'md',
15417
15417
  const close = showCloseButton ? (jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", square: true, className: sx(closeButtonStyle$1), onClick: onClose, "aria-label": "Close modal", children: jsxRuntime.jsx(CloseIcon, { size: 16 }) })) : undefined;
15418
15418
  // Module draws its header only when it has a title; a close button alone
15419
15419
  // still needs one, so it gets an empty title slot.
15420
- const heading = title || subtitle ? (jsxRuntime.jsxs("div", { children: [title && (jsxRuntime.jsx("h2", { id: titleId, className: sx(titleStyle$s), children: title })), subtitle && jsxRuntime.jsx("p", { className: sx(subtitleStyle$6), children: subtitle })] })) : close ? (jsxRuntime.jsx("span", {})) : undefined;
15421
- return (jsxRuntime.jsx("div", { className: [sx(overlayStyle), overlayClassName].filter(Boolean).join(' '), onClick: handleBackdropClick, children: jsxRuntime.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: jsxRuntime.jsx(Module, { className: sx(cardStyle$9), title: heading, icon: icon, tools: close, footer: footer, useToggle: false, scrollBody: true, bodyClassName: bodyClassName, children: children }) }) }));
15420
+ const heading = title || subtitle ? (jsxRuntime.jsxs("div", { children: [title && (jsxRuntime.jsx("h2", { id: titleId, className: sx(titleStyle$t), children: title })), subtitle && jsxRuntime.jsx("p", { className: sx(subtitleStyle$6), children: subtitle })] })) : close ? (jsxRuntime.jsx("span", {})) : undefined;
15421
+ return (jsxRuntime.jsx("div", { className: [sx(overlayStyle), overlayClassName].filter(Boolean).join(' '), onClick: handleBackdropClick, children: jsxRuntime.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: jsxRuntime.jsx(Module, { className: sx(cardStyle$a), title: heading, icon: icon, tools: close, footer: footer, useToggle: false, scrollBody: true, bodyClassName: bodyClassName, children: children }) }) }));
15422
15422
  };
15423
15423
  /**
15424
15424
  * Action row for the bottom of a Modal, keeping button order consistent across dialogs.
@@ -15438,7 +15438,7 @@ const ConfirmModal = ({ message, confirmText = 'Confirm', cancelText = 'Cancel',
15438
15438
 
15439
15439
  The three `--nt-*` custom properties are declared on the card and inherited
15440
15440
  by everything below it, so their names are carried across verbatim. */
15441
- const cardStyle$8 = {
15441
+ const cardStyle$9 = {
15442
15442
  label: 'NextTripCard-cardStyle',
15443
15443
  '--nt-sky': '#5bade6',
15444
15444
  '--nt-muted': 'rgb(255 255 255 / 55%)',
@@ -15462,7 +15462,7 @@ const topStyle = {
15462
15462
  justifyContent: 'space-between',
15463
15463
  gap: 12,
15464
15464
  };
15465
- const eyebrowStyle$7 = {
15465
+ const eyebrowStyle$8 = {
15466
15466
  label: 'NextTripCard-eyebrowStyle',
15467
15467
  color: 'var(--color-accent, #00bcd0)',
15468
15468
  fontFamily: 'var(--font-family-label)',
@@ -15556,7 +15556,7 @@ const travelerStyle$1 = {
15556
15556
  gap: 10,
15557
15557
  marginBottom: 8,
15558
15558
  };
15559
- const nameStyle$3 = {
15559
+ const nameStyle$4 = {
15560
15560
  label: 'NextTripCard-nameStyle',
15561
15561
  fontSize: 17,
15562
15562
  fontWeight: 700,
@@ -15725,7 +15725,7 @@ const btnStyle = {
15725
15725
  fontWeight: 700,
15726
15726
  cursor: 'pointer',
15727
15727
  };
15728
- const actionsStyle$5 = {
15728
+ const actionsStyle$6 = {
15729
15729
  label: 'NextTripCard-actionsStyle',
15730
15730
  display: 'flex',
15731
15731
  flexWrap: 'wrap',
@@ -15789,7 +15789,7 @@ const NextTripCard = ({ eyebrow = 'Your Next Trip', countdownLabel, date, origin
15789
15789
  const expanded = expandedProp ?? autoExpanded;
15790
15790
  const hasDetail = expanded && (details.length > 0 || !!checkIn || !!onAddToCalendar);
15791
15791
  const viewItineraryButton = (jsxRuntime.jsxs("button", { type: "button", className: cx(sx(btnStyle), sx(btnPrimaryStyle)), onClick: onViewItinerary, children: [viewItineraryLabel, " \u2192"] }));
15792
- return (jsxRuntime.jsxs("div", { ref: ref, className: cx(sx(cardStyle$8), className), ...props, children: [jsxRuntime.jsxs("div", { className: sx(topStyle), children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle$7), children: eyebrow }), countdownLabel != null && (jsxRuntime.jsxs("span", { className: sx(countdownStyle), children: [jsxRuntime.jsx(ClockGlyph, {}), countdownLabel] }))] }), jsxRuntime.jsxs("div", { className: sx(headStyle), children: [jsxRuntime.jsx("span", { className: sx(dateStyle), children: date }), jsxRuntime.jsxs("div", { className: sx(routeStyle$1), children: [jsxRuntime.jsxs("div", { style: { textAlign: 'right' }, children: [jsxRuntime.jsx("div", { className: sx(aptCodeStyle), children: origin.code }), jsxRuntime.jsx("div", { className: sx(aptCityStyle), children: origin.city.toUpperCase() })] }), jsxRuntime.jsxs("div", { className: sx(pathStyle), children: [jsxRuntime.jsxs("svg", { width: "92", height: "34", viewBox: "0 0 92 34", fill: "none", "aria-hidden": "true", children: [jsxRuntime.jsx("circle", { cx: "5", cy: "27", r: "3.5", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "2" }), jsxRuntime.jsx("circle", { cx: "87", cy: "27", r: "3.5", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "2" }), jsxRuntime.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" })] }), jsxRuntime.jsx("span", { className: sx(planeStyle), children: jsxRuntime.jsx(PlaneIcon$3, { size: 16 }) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: sx(aptCodeStyle), children: destination.code }), jsxRuntime.jsx("div", { className: sx(aptCityStyle), children: destination.city.toUpperCase() })] })] })] }), jsxRuntime.jsx("div", { className: sx(dividerStyle) }), jsxRuntime.jsxs("div", { className: sx(summaryStyle$5), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", { className: sx(travelerStyle$1), children: [jsxRuntime.jsx("span", { className: sx(nameStyle$3), children: traveler }), status && (jsxRuntime.jsxs("span", { className: cx(sx(statusStyle$3), sx(toneStyles$1[status.tone ?? 'ontime'])), children: [jsxRuntime.jsx("span", { className: sx(statusDotStyle$1) }), status.label] }))] }), jsxRuntime.jsxs("div", { className: sx(timesStyle), children: [jsxRuntime.jsx("span", { className: sx(timeStyle), children: departTime }), jsxRuntime.jsx("span", { className: sx(arrowStyle), children: "\u2192" }), jsxRuntime.jsx("span", { className: sx(timeStyle), children: arriveTime })] }), jsxRuntime.jsxs("div", { className: sx(legsStyle$2), children: [jsxRuntime.jsxs("span", { children: ["Depart \u00B7 ", origin.code] }), jsxRuntime.jsxs("span", { children: ["Arrive \u00B7 ", destination.code] })] })] }), !hasDetail && viewItineraryButton] }), hasDetail && (jsxRuntime.jsxs("div", { className: sx(moreStyle), children: [details.length > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: sx(moreLabelStyle), children: [jsxRuntime.jsx("span", { children: "Flight details" }), jsxRuntime.jsx("span", { className: sx(ruleStyle) })] }), jsxRuntime.jsx("div", { className: sx(gridStyle$6), children: details.map((f) => (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: sx(fieldKStyle), children: f.label }), jsxRuntime.jsxs("div", { className: sx(fieldVStyle), children: [f.value, f.note && jsxRuntime.jsxs("span", { className: sx(fieldNoteStyle), children: [" ", f.note] })] })] }, f.label))) })] })), checkIn && (jsxRuntime.jsxs("div", { className: sx(checkinStyle), children: [jsxRuntime.jsx("span", { className: sx(checkinIconStyle), children: jsxRuntime.jsx(CalendarGlyph$1, {}) }), jsxRuntime.jsxs("span", { className: sx(checkinTextStyle), children: [jsxRuntime.jsx("strong", { children: checkIn.title }), checkIn.note && jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" ", jsxRuntime.jsx("span", { children: checkIn.note })] })] })] })), jsxRuntime.jsxs("div", { className: sx(actionsStyle$5), children: [viewItineraryButton, onAddToCalendar && (jsxRuntime.jsx("button", { type: "button", className: cx(sx(btnStyle), sx(btnGhostStyle)), onClick: onAddToCalendar, children: addToCalendarLabel }))] })] }))] }));
15792
+ return (jsxRuntime.jsxs("div", { ref: ref, className: cx(sx(cardStyle$9), className), ...props, children: [jsxRuntime.jsxs("div", { className: sx(topStyle), children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle$8), children: eyebrow }), countdownLabel != null && (jsxRuntime.jsxs("span", { className: sx(countdownStyle), children: [jsxRuntime.jsx(ClockGlyph, {}), countdownLabel] }))] }), jsxRuntime.jsxs("div", { className: sx(headStyle), children: [jsxRuntime.jsx("span", { className: sx(dateStyle), children: date }), jsxRuntime.jsxs("div", { className: sx(routeStyle$1), children: [jsxRuntime.jsxs("div", { style: { textAlign: 'right' }, children: [jsxRuntime.jsx("div", { className: sx(aptCodeStyle), children: origin.code }), jsxRuntime.jsx("div", { className: sx(aptCityStyle), children: origin.city.toUpperCase() })] }), jsxRuntime.jsxs("div", { className: sx(pathStyle), children: [jsxRuntime.jsxs("svg", { width: "92", height: "34", viewBox: "0 0 92 34", fill: "none", "aria-hidden": "true", children: [jsxRuntime.jsx("circle", { cx: "5", cy: "27", r: "3.5", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "2" }), jsxRuntime.jsx("circle", { cx: "87", cy: "27", r: "3.5", stroke: "var(--color-accent, #00bcd0)", strokeWidth: "2" }), jsxRuntime.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" })] }), jsxRuntime.jsx("span", { className: sx(planeStyle), children: jsxRuntime.jsx(PlaneIcon$3, { size: 16 }) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: sx(aptCodeStyle), children: destination.code }), jsxRuntime.jsx("div", { className: sx(aptCityStyle), children: destination.city.toUpperCase() })] })] })] }), jsxRuntime.jsx("div", { className: sx(dividerStyle) }), jsxRuntime.jsxs("div", { className: sx(summaryStyle$5), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", { className: sx(travelerStyle$1), children: [jsxRuntime.jsx("span", { className: sx(nameStyle$4), children: traveler }), status && (jsxRuntime.jsxs("span", { className: cx(sx(statusStyle$3), sx(toneStyles$1[status.tone ?? 'ontime'])), children: [jsxRuntime.jsx("span", { className: sx(statusDotStyle$1) }), status.label] }))] }), jsxRuntime.jsxs("div", { className: sx(timesStyle), children: [jsxRuntime.jsx("span", { className: sx(timeStyle), children: departTime }), jsxRuntime.jsx("span", { className: sx(arrowStyle), children: "\u2192" }), jsxRuntime.jsx("span", { className: sx(timeStyle), children: arriveTime })] }), jsxRuntime.jsxs("div", { className: sx(legsStyle$2), children: [jsxRuntime.jsxs("span", { children: ["Depart \u00B7 ", origin.code] }), jsxRuntime.jsxs("span", { children: ["Arrive \u00B7 ", destination.code] })] })] }), !hasDetail && viewItineraryButton] }), hasDetail && (jsxRuntime.jsxs("div", { className: sx(moreStyle), children: [details.length > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: sx(moreLabelStyle), children: [jsxRuntime.jsx("span", { children: "Flight details" }), jsxRuntime.jsx("span", { className: sx(ruleStyle) })] }), jsxRuntime.jsx("div", { className: sx(gridStyle$6), children: details.map((f) => (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: sx(fieldKStyle), children: f.label }), jsxRuntime.jsxs("div", { className: sx(fieldVStyle), children: [f.value, f.note && jsxRuntime.jsxs("span", { className: sx(fieldNoteStyle), children: [" ", f.note] })] })] }, f.label))) })] })), checkIn && (jsxRuntime.jsxs("div", { className: sx(checkinStyle), children: [jsxRuntime.jsx("span", { className: sx(checkinIconStyle), children: jsxRuntime.jsx(CalendarGlyph$1, {}) }), jsxRuntime.jsxs("span", { className: sx(checkinTextStyle), children: [jsxRuntime.jsx("strong", { children: checkIn.title }), checkIn.note && jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" ", jsxRuntime.jsx("span", { children: checkIn.note })] })] })] })), jsxRuntime.jsxs("div", { className: sx(actionsStyle$6), children: [viewItineraryButton, onAddToCalendar && (jsxRuntime.jsx("button", { type: "button", className: cx(sx(btnStyle), sx(btnGhostStyle)), onClick: onAddToCalendar, children: addToCalendarLabel }))] })] }))] }));
15793
15793
  };
15794
15794
 
15795
15795
  /* "Your travel board": a full-width (L-only) home widget showing the week's
@@ -15797,7 +15797,7 @@ const NextTripCard = ({ eyebrow = 'Your Next Trip', countdownLabel, date, origin
15797
15797
  Individual view is flight-centric (route + time + traveller). Team view, drawn
15798
15798
  from the Team Travel Calendar, de-emphasises flights and shows each team trip
15799
15799
  as a bar spanning its travel dates. Selecting an item fills the footer. */
15800
- const cardStyle$7 = {
15800
+ const cardStyle$8 = {
15801
15801
  label: 'TravelBoard-cardStyle',
15802
15802
  display: 'flex',
15803
15803
  width: '100%',
@@ -15820,7 +15820,7 @@ const headerStyle$t = {
15820
15820
  gap: '14px 20px',
15821
15821
  padding: '18px 22px',
15822
15822
  };
15823
- const titleStyle$q = {
15823
+ const titleStyle$r = {
15824
15824
  label: 'TravelBoard-titleStyle',
15825
15825
  margin: 0,
15826
15826
  flex: '0 0 auto',
@@ -16224,7 +16224,7 @@ const footerEyebrowStyle = {
16224
16224
  * `footerTitleStyle`, which resolves this class name to build that descendant
16225
16225
  * selector.
16226
16226
  */
16227
- const codeStyle$2 = {
16227
+ const codeStyle$3 = {
16228
16228
  label: 'TravelBoard-codeStyle',
16229
16229
  };
16230
16230
  const footerTitleStyle = {
@@ -16237,7 +16237,7 @@ const footerTitleStyle = {
16237
16237
  whiteSpace: 'nowrap',
16238
16238
  /* `.footerTitle .code` — the child's class is content-hashed, so it is
16239
16239
  resolved here rather than written out. */
16240
- [`& .${sx(codeStyle$2)}`]: {
16240
+ [`& .${sx(codeStyle$3)}`]: {
16241
16241
  color: 'var(--color-accent-strong, #0097a8)',
16242
16242
  },
16243
16243
  };
@@ -16373,14 +16373,14 @@ const TravelBoard = ({ title = "This Week's Travel", weekDays, periodLabel, trip
16373
16373
  if (!selectedTrip)
16374
16374
  return jsxRuntime.jsx("span", { className: sx(footerEmptyStyle), children: "Select a trip to see its details." });
16375
16375
  const t = selectedTrip;
16376
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: sx(footerAvatarStyle), "aria-hidden": true, children: t.travelerInitials ?? initialsOf(t.travelerFull ?? t.traveler) }), jsxRuntime.jsxs("span", { className: sx(footerMetaStyle), children: [jsxRuntime.jsxs("span", { className: sx(footerEyebrowStyle), children: [t.travelerFull ?? t.traveler, t.sportCode ? ` - ${t.sportCode}` : ''] }), jsxRuntime.jsxs("span", { className: sx(footerTitleStyle), children: [t.originCity ?? t.origin, " ", jsxRuntime.jsx("span", { className: sx(codeStyle$2), children: t.origin }), " \u2192 ", t.destinationCity ?? t.destination, " ", jsxRuntime.jsx("span", { className: sx(codeStyle$2), children: t.destination })] }), jsxRuntime.jsxs("span", { className: sx(footerSubStyle), children: [t.time, t.arriveTime ? ` – ${t.arriveTime}` : '', t.airline ? jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" \u00B7 ", t.airline] }) : null, t.confirmation ? jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" \u00B7 Confirmation: ", jsxRuntime.jsx("b", { children: t.confirmation })] }) : null] })] }), jsxRuntime.jsxs("button", { type: "button", className: sx(footerBtnStyle), onClick: () => onViewItinerary?.(t), children: ["View itinerary ", chevron] })] }));
16376
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: sx(footerAvatarStyle), "aria-hidden": true, children: t.travelerInitials ?? initialsOf(t.travelerFull ?? t.traveler) }), jsxRuntime.jsxs("span", { className: sx(footerMetaStyle), children: [jsxRuntime.jsxs("span", { className: sx(footerEyebrowStyle), children: [t.travelerFull ?? t.traveler, t.sportCode ? ` - ${t.sportCode}` : ''] }), jsxRuntime.jsxs("span", { className: sx(footerTitleStyle), children: [t.originCity ?? t.origin, " ", jsxRuntime.jsx("span", { className: sx(codeStyle$3), children: t.origin }), " \u2192 ", t.destinationCity ?? t.destination, " ", jsxRuntime.jsx("span", { className: sx(codeStyle$3), children: t.destination })] }), jsxRuntime.jsxs("span", { className: sx(footerSubStyle), children: [t.time, t.arriveTime ? ` – ${t.arriveTime}` : '', t.airline ? jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" \u00B7 ", t.airline] }) : null, t.confirmation ? jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" \u00B7 Confirmation: ", jsxRuntime.jsx("b", { children: t.confirmation })] }) : null] })] }), jsxRuntime.jsxs("button", { type: "button", className: sx(footerBtnStyle), onClick: () => onViewItinerary?.(t), children: ["View itinerary ", chevron] })] }));
16377
16377
  }
16378
16378
  if (!selectedTeamTrip)
16379
16379
  return jsxRuntime.jsx("span", { className: sx(footerEmptyStyle), children: "Select a team trip to see its details." });
16380
16380
  const t = selectedTeamTrip;
16381
16381
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: sx(footerAvatarStyle), "aria-hidden": true, style: t.accent ? { color: t.accent } : undefined, children: t.teamInitials ?? initialsOf(t.team) }), jsxRuntime.jsxs("span", { className: sx(footerMetaStyle), children: [jsxRuntime.jsx("span", { className: sx(footerEyebrowStyle), children: "Team Travel" }), jsxRuntime.jsxs("span", { className: sx(footerTitleStyle), children: [t.team, t.destination ? jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" \u00B7 ", t.destination] }) : null] }), jsxRuntime.jsxs("span", { className: sx(footerSubStyle), children: [periodLabelForTeam(t), t.travelerCount != null ? jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" \u00B7 ", jsxRuntime.jsx("b", { children: t.travelerCount }), " travelers"] }) : null] })] }), jsxRuntime.jsxs("button", { type: "button", className: sx(footerBtnStyle), onClick: () => onViewTeamTrip?.(t), children: ["View trip ", chevron] })] }));
16382
16382
  };
16383
- return (jsxRuntime.jsxs("div", { className: cx(sx(cardStyle$7), className), "data-test": "travel-board", ...props, children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$t), children: [jsxRuntime.jsx("h3", { className: sx(titleStyle$q), children: title }), jsxRuntime.jsx("div", { className: sx(togglesStyle), children: jsxRuntime.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' }] }) }), jsxRuntime.jsxs("div", { className: sx(periodStyle), children: [jsxRuntime.jsx("span", { className: sx(periodLabelStyle), children: periodLabel }), jsxRuntime.jsx("button", { type: "button", className: sx(navBtnStyle), "aria-label": "Previous week", onClick: onPrev, children: jsxRuntime.jsx(ChevronLeftIcon, { size: 18 }) }), jsxRuntime.jsx("button", { type: "button", className: sx(navBtnStyle), "aria-label": "Next week", onClick: onNext, children: jsxRuntime.jsx(ChevronRightIcon$1, { size: 18 }) })] })] }), mode === 'individual' ? renderIndividualBoard() : renderTeamBoard(), jsxRuntime.jsx("div", { className: sx(footerStyle$5), children: renderFooter() })] }));
16383
+ return (jsxRuntime.jsxs("div", { className: cx(sx(cardStyle$8), className), "data-test": "travel-board", ...props, children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$t), children: [jsxRuntime.jsx("h3", { className: sx(titleStyle$r), children: title }), jsxRuntime.jsx("div", { className: sx(togglesStyle), children: jsxRuntime.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' }] }) }), jsxRuntime.jsxs("div", { className: sx(periodStyle), children: [jsxRuntime.jsx("span", { className: sx(periodLabelStyle), children: periodLabel }), jsxRuntime.jsx("button", { type: "button", className: sx(navBtnStyle), "aria-label": "Previous week", onClick: onPrev, children: jsxRuntime.jsx(ChevronLeftIcon, { size: 18 }) }), jsxRuntime.jsx("button", { type: "button", className: sx(navBtnStyle), "aria-label": "Next week", onClick: onNext, children: jsxRuntime.jsx(ChevronRightIcon$1, { size: 18 }) })] })] }), mode === 'individual' ? renderIndividualBoard() : renderTeamBoard(), jsxRuntime.jsx("div", { className: sx(footerStyle$5), children: renderFooter() })] }));
16384
16384
  };
16385
16385
  /** Formats a team trip's travel span for the footer, collapsing the repeated month. */
16386
16386
  const periodLabelForTeam = (t) => {
@@ -16478,7 +16478,7 @@ const contentStyle$5 = {
16478
16478
  flex: 1,
16479
16479
  minWidth: 0,
16480
16480
  };
16481
- const titleStyle$p = {
16481
+ const titleStyle$q = {
16482
16482
  label: 'PageBanners-titleStyle',
16483
16483
  '&&': {
16484
16484
  margin: 0,
@@ -16592,8 +16592,8 @@ const PageBanners = ({ systemBanners, alertBanners, fullWidth = false, className
16592
16592
  const visibleAlerts = alertBanners.filter((banner) => !dismissed.has(banner.id));
16593
16593
  if (!visibleSystem.length && !visibleAlerts.length)
16594
16594
  return null;
16595
- return (jsxRuntime.jsxs("div", { className: classes(sx(stackStyle$3), fullWidth && sx(flushStyle), className), role: "region", "aria-label": "Page notices", children: [visibleSystem.map((banner) => (jsxRuntime.jsxs("div", { className: classes(sx(bannerStyle$1), sx(systemStyle)), role: "status", children: [jsxRuntime.jsx(InfoIcon$1, { className: sx(systemIconStyle), size: 20, "aria-hidden": "true" }), jsxRuntime.jsxs("div", { className: sx(contentStyle$5), children: [jsxRuntime.jsx("p", { className: sx(titleStyle$p), children: decodeEntities(banner.html) }), banner.detailHtml && jsxRuntime.jsx("p", { className: sx(detailStyle), children: decodeEntities(banner.detailHtml) })] }), jsxRuntime.jsx("button", { type: "button", className: sx(dismissStyle), "aria-label": "Dismiss notice", onClick: () => dismiss(banner.id), children: jsxRuntime.jsx(CloseIcon, { size: 16 }) })] }, banner.id))), visibleAlerts.map((banner) => {
16596
- const content = (jsxRuntime.jsxs("div", { className: sx(contentStyle$5), children: [jsxRuntime.jsx("p", { className: classes(sx(titleStyle$p), sx(alertTitleStyle)), children: decodeEntities(banner.title) }), banner.body && jsxRuntime.jsx("p", { className: classes(sx(detailStyle), sx(clampStyle)), children: decodeEntities(banner.body) })] }));
16595
+ return (jsxRuntime.jsxs("div", { className: classes(sx(stackStyle$3), fullWidth && sx(flushStyle), className), role: "region", "aria-label": "Page notices", children: [visibleSystem.map((banner) => (jsxRuntime.jsxs("div", { className: classes(sx(bannerStyle$1), sx(systemStyle)), role: "status", children: [jsxRuntime.jsx(InfoIcon$1, { className: sx(systemIconStyle), size: 20, "aria-hidden": "true" }), jsxRuntime.jsxs("div", { className: sx(contentStyle$5), children: [jsxRuntime.jsx("p", { className: sx(titleStyle$q), children: decodeEntities(banner.html) }), banner.detailHtml && jsxRuntime.jsx("p", { className: sx(detailStyle), children: decodeEntities(banner.detailHtml) })] }), jsxRuntime.jsx("button", { type: "button", className: sx(dismissStyle), "aria-label": "Dismiss notice", onClick: () => dismiss(banner.id), children: jsxRuntime.jsx(CloseIcon, { size: 16 }) })] }, banner.id))), visibleAlerts.map((banner) => {
16596
+ const content = (jsxRuntime.jsxs("div", { className: sx(contentStyle$5), children: [jsxRuntime.jsx("p", { className: classes(sx(titleStyle$q), sx(alertTitleStyle)), children: decodeEntities(banner.title) }), banner.body && jsxRuntime.jsx("p", { className: classes(sx(detailStyle), sx(clampStyle)), children: decodeEntities(banner.body) })] }));
16597
16597
  return (jsxRuntime.jsxs("div", { className: classes(sx(bannerStyle$1), sx(alertStyle$1)), role: "alert", children: [jsxRuntime.jsx(WarningIcon$1, { className: sx(alertIconStyle), size: 20, "aria-hidden": "true" }), banner.href ? (jsxRuntime.jsx("a", { href: banner.href, className: sx(alertLinkStyle), children: content })) : (content), jsxRuntime.jsx("button", { type: "button", className: classes(sx(dismissStyle), sx(alertDismissStyle)), "aria-label": "Dismiss alert", onClick: () => dismiss(banner.id), children: jsxRuntime.jsx(CloseIcon, { size: 16 }) })] }, banner.id));
16598
16598
  })] }));
16599
16599
  };
@@ -16625,7 +16625,7 @@ const alertStyle = {
16625
16625
  label: 'PreferencesPanel-alertStyle',
16626
16626
  width: '100%',
16627
16627
  };
16628
- const titleStyle$o = {
16628
+ const titleStyle$p = {
16629
16629
  label: 'PreferencesPanel-titleStyle',
16630
16630
  fontSize: 'var(--text-lg)',
16631
16631
  fontWeight: 'var(--font-semibold)',
@@ -16734,7 +16734,7 @@ const DEFAULT_ICONS = {
16734
16734
  */
16735
16735
  const PreferencesPanel = ({ title, sections, alert, footer, isLoading = false, className = '', }) => {
16736
16736
  const panelClasses = cx(sx(panelStyle$4), isLoading && sx(loadingStyle$2), className);
16737
- return (jsxRuntime.jsxs("div", { className: panelClasses, children: [alert && (jsxRuntime.jsx("div", { className: sx(alertStyle), children: alert })), title && jsxRuntime.jsx("h2", { className: sx(titleStyle$o), children: title }), jsxRuntime.jsx("div", { className: sx(gridStyle$5), children: sections.map((section, i) => (jsxRuntime.jsxs("div", { className: sx(sectionStyle$7), children: [jsxRuntime.jsxs("div", { className: sx(sectionHeaderStyle$2), children: [(section.icon || DEFAULT_ICONS[section.title.toLowerCase()]) && (jsxRuntime.jsx("span", { className: sx(sectionIconStyle$2), children: section.icon || DEFAULT_ICONS[section.title.toLowerCase()] })), jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle$a), children: section.title })] }), jsxRuntime.jsx("div", { className: sx(fieldsStyle$1), children: section.fields.map((field, j) => (jsxRuntime.jsxs("div", { className: sx(fieldStyle$3), children: [jsxRuntime.jsx("label", { className: sx(fieldLabelStyle$1), children: field.label }), field.input ? (jsxRuntime.jsx("div", { className: sx(fieldInputStyle), children: field.input })) : (jsxRuntime.jsx("div", { className: sx(fieldValueStyle$1), children: field.value || '—' }))] }, j))) })] }, i))) }), footer && (jsxRuntime.jsx("div", { className: sx(footerStyle$4), children: footer }))] }));
16737
+ return (jsxRuntime.jsxs("div", { className: panelClasses, children: [alert && (jsxRuntime.jsx("div", { className: sx(alertStyle), children: alert })), title && jsxRuntime.jsx("h2", { className: sx(titleStyle$p), children: title }), jsxRuntime.jsx("div", { className: sx(gridStyle$5), children: sections.map((section, i) => (jsxRuntime.jsxs("div", { className: sx(sectionStyle$7), children: [jsxRuntime.jsxs("div", { className: sx(sectionHeaderStyle$2), children: [(section.icon || DEFAULT_ICONS[section.title.toLowerCase()]) && (jsxRuntime.jsx("span", { className: sx(sectionIconStyle$2), children: section.icon || DEFAULT_ICONS[section.title.toLowerCase()] })), jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle$a), children: section.title })] }), jsxRuntime.jsx("div", { className: sx(fieldsStyle$1), children: section.fields.map((field, j) => (jsxRuntime.jsxs("div", { className: sx(fieldStyle$3), children: [jsxRuntime.jsx("label", { className: sx(fieldLabelStyle$1), children: field.label }), field.input ? (jsxRuntime.jsx("div", { className: sx(fieldInputStyle), children: field.input })) : (jsxRuntime.jsx("div", { className: sx(fieldValueStyle$1), children: field.value || '—' }))] }, j))) })] }, i))) }), footer && (jsxRuntime.jsx("div", { className: sx(footerStyle$4), children: footer }))] }));
16738
16738
  };
16739
16739
  PreferencesPanel.displayName = 'PreferencesPanel';
16740
16740
 
@@ -16786,7 +16786,7 @@ const identityTextStyle = {
16786
16786
  flexDirection: 'column',
16787
16787
  gap: 2,
16788
16788
  };
16789
- const nameStyle$2 = {
16789
+ const nameStyle$3 = {
16790
16790
  label: 'ProfileMenu-nameStyle',
16791
16791
  overflow: 'hidden',
16792
16792
  fontSize: 18,
@@ -16860,7 +16860,7 @@ const dangerStyle$1 = {
16860
16860
  * user, the rows, and their handlers, and positions the menu (e.g. as the
16861
16861
  * `profileMenu` popover of HubAppShell).
16862
16862
  */
16863
- const ProfileMenu = ({ name, email, initials, avatarSrc, profileLabel = 'Profile', accountLabel = 'Account', items, className = '', ...props }) => (jsxRuntime.jsxs("div", { className: cx(sx(menuStyle), className), role: "menu", "aria-label": profileLabel, "data-test": "profile-menu", ...props, children: [jsxRuntime.jsxs("div", { className: sx(identityBlockStyle), children: [jsxRuntime.jsx("p", { className: sx(sectionLabelStyle), children: profileLabel }), jsxRuntime.jsxs("div", { className: sx(identityStyle), children: [jsxRuntime.jsx(Avatar, { name: name, initials: initials, src: avatarSrc, size: "lg" }), jsxRuntime.jsxs("div", { className: sx(identityTextStyle), children: [jsxRuntime.jsx("span", { className: sx(nameStyle$2), children: name }), jsxRuntime.jsx("span", { className: sx(emailStyle), children: email })] })] })] }), jsxRuntime.jsxs("div", { className: sx(sectionStyle$6), children: [jsxRuntime.jsx("p", { className: sx(sectionLabelStyle), children: accountLabel }), items.map((item) => (jsxRuntime.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 && jsxRuntime.jsx("span", { className: sx(itemIconStyle), children: item.icon }), jsxRuntime.jsx("span", { children: item.label })] }, item.key)))] })] }));
16863
+ const ProfileMenu = ({ name, email, initials, avatarSrc, profileLabel = 'Profile', accountLabel = 'Account', items, className = '', ...props }) => (jsxRuntime.jsxs("div", { className: cx(sx(menuStyle), className), role: "menu", "aria-label": profileLabel, "data-test": "profile-menu", ...props, children: [jsxRuntime.jsxs("div", { className: sx(identityBlockStyle), children: [jsxRuntime.jsx("p", { className: sx(sectionLabelStyle), children: profileLabel }), jsxRuntime.jsxs("div", { className: sx(identityStyle), children: [jsxRuntime.jsx(Avatar, { name: name, initials: initials, src: avatarSrc, size: "lg" }), jsxRuntime.jsxs("div", { className: sx(identityTextStyle), children: [jsxRuntime.jsx("span", { className: sx(nameStyle$3), children: name }), jsxRuntime.jsx("span", { className: sx(emailStyle), children: email })] })] })] }), jsxRuntime.jsxs("div", { className: sx(sectionStyle$6), children: [jsxRuntime.jsx("p", { className: sx(sectionLabelStyle), children: accountLabel }), items.map((item) => (jsxRuntime.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 && jsxRuntime.jsx("span", { className: sx(itemIconStyle), children: item.icon }), jsxRuntime.jsx("span", { children: item.label })] }, item.key)))] })] }));
16864
16864
 
16865
16865
  /**
16866
16866
  * QuoteCostBreakdown's compiled rules.
@@ -16884,7 +16884,7 @@ const breakdownStyle = {
16884
16884
  flexDirection: 'column',
16885
16885
  gap: 'var(--space-3)',
16886
16886
  };
16887
- const titleStyle$n = {
16887
+ const titleStyle$o = {
16888
16888
  label: 'QuoteCostBreakdown-titleStyle',
16889
16889
  margin: 0,
16890
16890
  color: 'var(--fg-1)',
@@ -17030,11 +17030,11 @@ const QuoteCostBreakdown = ({ lineItems, adjustments = [], currency = 'USD', loc
17030
17030
  const quantityFormatter = React.useMemo(() => new Intl.NumberFormat(locale), [locale]);
17031
17031
  const totals = React.useMemo(() => computeQuoteTotals(lineItems, adjustments), [lineItems, adjustments]);
17032
17032
  const perPassenger = passengerCount && passengerCount > 0 ? totals.total / passengerCount : undefined;
17033
- return (jsxRuntime.jsxs("section", { className: cx(sx(breakdownStyle), className), "aria-label": title || 'Cost breakdown', "data-test": "quote-cost-breakdown", children: [title && jsxRuntime.jsx("h3", { className: sx(titleStyle$n), children: title }), jsxRuntime.jsx("div", { className: sx(tableScrollStyle$1), children: jsxRuntime.jsxs("table", { className: sx(tableStyle$7), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Item" }), jsxRuntime.jsx("th", { scope: "col", className: sx(numericStyle), children: "Qty" }), jsxRuntime.jsx("th", { scope: "col", className: sx(numericStyle), children: "Unit price" }), jsxRuntime.jsx("th", { scope: "col", className: sx(numericStyle), children: "Amount" })] }) }), jsxRuntime.jsxs("tbody", { children: [lineItems.length === 0 && (jsxRuntime.jsx("tr", { children: jsxRuntime.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) => (jsxRuntime.jsxs("tr", { "data-test": "quote-cost-line-item", children: [jsxRuntime.jsxs("th", { scope: "row", className: sx(itemCellStyle), children: [jsxRuntime.jsx("span", { className: sx(itemLabelStyle), children: lineItem.label }), jsxRuntime.jsxs("span", { className: sx(itemMetaStyle), children: [CATEGORY_LABELS[lineItem.category ?? 'other'], lineItem.description ? ` · ${lineItem.description}` : ''] })] }), jsxRuntime.jsxs("td", { className: sx(numericStyle), children: [quantityFormatter.format(lineItem.quantity), " ", lineItem.unit] }), jsxRuntime.jsx("td", { className: sx(numericStyle), children: currencyFormatter.format(lineItem.unitPrice) }), jsxRuntime.jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), children: currencyFormatter.format(computeLineItemTotal(lineItem)) })] }, lineItem.id)))] }), jsxRuntime.jsxs("tfoot", { children: [jsxRuntime.jsxs("tr", { className: sx(subtotalRowStyle), children: [jsxRuntime.jsx("th", { scope: "row", colSpan: 3, children: "Subtotal" }), jsxRuntime.jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), "data-test": "quote-cost-subtotal", children: currencyFormatter.format(totals.subtotal) })] }), adjustments.map((adjustment) => (jsxRuntime.jsxs("tr", { "data-test": "quote-cost-adjustment", children: [jsxRuntime.jsxs("th", { scope: "row", colSpan: 3, className: sx(itemCellStyle), children: [jsxRuntime.jsx("span", { className: sx(itemLabelStyle), children: adjustment.label }), adjustment.note && jsxRuntime.jsx("span", { className: sx(itemMetaStyle), children: adjustment.note })] }), jsxRuntime.jsx("td", { className: cx(sx(numericStyle), sx(amountStyle), adjustment.amount < 0 && sx(creditStyle)), children: currencyFormatter.format(adjustment.amount) })] }, adjustment.id))), jsxRuntime.jsxs("tr", { className: sx(totalRowStyle), children: [jsxRuntime.jsx("th", { scope: "row", colSpan: 3, children: "Quoted total" }), jsxRuntime.jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), "data-test": "quote-cost-total", children: currencyFormatter.format(totals.total) })] }), perPassenger !== undefined && (jsxRuntime.jsxs("tr", { className: sx(perPassengerRowStyle), children: [jsxRuntime.jsxs("th", { scope: "row", colSpan: 3, children: ["Per passenger (", quantityFormatter.format(passengerCount), " pax)"] }), jsxRuntime.jsx("td", { className: sx(numericStyle), "data-test": "quote-cost-per-passenger", children: currencyFormatter.format(perPassenger) })] }))] })] }) })] }));
17033
+ return (jsxRuntime.jsxs("section", { className: cx(sx(breakdownStyle), className), "aria-label": title || 'Cost breakdown', "data-test": "quote-cost-breakdown", children: [title && jsxRuntime.jsx("h3", { className: sx(titleStyle$o), children: title }), jsxRuntime.jsx("div", { className: sx(tableScrollStyle$1), children: jsxRuntime.jsxs("table", { className: sx(tableStyle$7), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Item" }), jsxRuntime.jsx("th", { scope: "col", className: sx(numericStyle), children: "Qty" }), jsxRuntime.jsx("th", { scope: "col", className: sx(numericStyle), children: "Unit price" }), jsxRuntime.jsx("th", { scope: "col", className: sx(numericStyle), children: "Amount" })] }) }), jsxRuntime.jsxs("tbody", { children: [lineItems.length === 0 && (jsxRuntime.jsx("tr", { children: jsxRuntime.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) => (jsxRuntime.jsxs("tr", { "data-test": "quote-cost-line-item", children: [jsxRuntime.jsxs("th", { scope: "row", className: sx(itemCellStyle), children: [jsxRuntime.jsx("span", { className: sx(itemLabelStyle), children: lineItem.label }), jsxRuntime.jsxs("span", { className: sx(itemMetaStyle), children: [CATEGORY_LABELS[lineItem.category ?? 'other'], lineItem.description ? ` · ${lineItem.description}` : ''] })] }), jsxRuntime.jsxs("td", { className: sx(numericStyle), children: [quantityFormatter.format(lineItem.quantity), " ", lineItem.unit] }), jsxRuntime.jsx("td", { className: sx(numericStyle), children: currencyFormatter.format(lineItem.unitPrice) }), jsxRuntime.jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), children: currencyFormatter.format(computeLineItemTotal(lineItem)) })] }, lineItem.id)))] }), jsxRuntime.jsxs("tfoot", { children: [jsxRuntime.jsxs("tr", { className: sx(subtotalRowStyle), children: [jsxRuntime.jsx("th", { scope: "row", colSpan: 3, children: "Subtotal" }), jsxRuntime.jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), "data-test": "quote-cost-subtotal", children: currencyFormatter.format(totals.subtotal) })] }), adjustments.map((adjustment) => (jsxRuntime.jsxs("tr", { "data-test": "quote-cost-adjustment", children: [jsxRuntime.jsxs("th", { scope: "row", colSpan: 3, className: sx(itemCellStyle), children: [jsxRuntime.jsx("span", { className: sx(itemLabelStyle), children: adjustment.label }), adjustment.note && jsxRuntime.jsx("span", { className: sx(itemMetaStyle), children: adjustment.note })] }), jsxRuntime.jsx("td", { className: cx(sx(numericStyle), sx(amountStyle), adjustment.amount < 0 && sx(creditStyle)), children: currencyFormatter.format(adjustment.amount) })] }, adjustment.id))), jsxRuntime.jsxs("tr", { className: sx(totalRowStyle), children: [jsxRuntime.jsx("th", { scope: "row", colSpan: 3, children: "Quoted total" }), jsxRuntime.jsx("td", { className: cx(sx(numericStyle), sx(amountStyle)), "data-test": "quote-cost-total", children: currencyFormatter.format(totals.total) })] }), perPassenger !== undefined && (jsxRuntime.jsxs("tr", { className: sx(perPassengerRowStyle), children: [jsxRuntime.jsxs("th", { scope: "row", colSpan: 3, children: ["Per passenger (", quantityFormatter.format(passengerCount), " pax)"] }), jsxRuntime.jsx("td", { className: sx(numericStyle), "data-test": "quote-cost-per-passenger", children: currencyFormatter.format(perPassenger) })] }))] })] }) })] }));
17034
17034
  };
17035
17035
 
17036
17036
  /** The button row itself; it wraps so the disabled reason can take a line of its own. */
17037
- const actionsStyle$4 = {
17037
+ const actionsStyle$5 = {
17038
17038
  label: 'QuoteReviewActions-actionsStyle',
17039
17039
  display: 'flex',
17040
17040
  flexWrap: 'wrap',
@@ -17193,7 +17193,7 @@ const QuoteReviewActions = ({ quoteId, carrier, formattedTotal, changes = [], di
17193
17193
  const appendReason = (reason) => {
17194
17194
  setNote((current) => (current.trim() ? `${current.trim()}\n${reason}` : reason));
17195
17195
  };
17196
- return (jsxRuntime.jsxs("div", { className: cx(sx(actionsStyle$4), className), "data-test": "quote-review-actions", children: [jsxRuntime.jsx(Button, { disabled: disabled, onClick: () => setIsApproveOpen(true), "data-test": "quote-review-approve", children: approveLabel }), jsxRuntime.jsx(Button, { variant: "secondary", disabled: disabled, onClick: () => setIsRejectOpen(true), "data-test": "quote-review-reject", children: rejectLabel }), changes.length > 0 && (jsxRuntime.jsxs("span", { className: sx(changeCountStyle), "data-test": "quote-review-change-count", children: [changes.length, " field", changes.length === 1 ? '' : 's', " edited"] })), disabled && disabledReason && (jsxRuntime.jsx("p", { className: sx(disabledReasonStyle), "data-test": "quote-review-disabled-reason", children: disabledReason })), jsxRuntime.jsx(ConfirmModal, { isOpen: isApproveOpen, onClose: () => setIsApproveOpen(false), title: "Approve this quote?", confirmText: approveLabel, cancelText: "Cancel", loading: loading, onConfirm: confirmApprove, message: jsxRuntime.jsxs("span", { "data-test": "quote-review-approve-message", children: [jsxRuntime.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 ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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."] }), jsxRuntime.jsx("span", { className: sx(changeListStyle), "data-test": "quote-review-change-list", children: changes.map((change) => (jsxRuntime.jsxs("span", { className: sx(changeStyle), "data-test": "quote-review-change", children: [jsxRuntime.jsx("span", { className: sx(changeLabelStyle), children: change.label }), jsxRuntime.jsxs("span", { className: sx(changeValuesStyle), children: [jsxRuntime.jsx("s", { className: sx(changeFromStyle), children: change.from }), jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\u2192" }), jsxRuntime.jsx("strong", { className: sx(changeToStyle), children: change.to })] })] }, change.field))) })] })) : (jsxRuntime.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." }))] }) }), jsxRuntime.jsxs(Drawer, { isOpen: isRejectOpen, onClose: closeReject, position: "right", size: "md", children: [jsxRuntime.jsx(Drawer.Header, { title: `Reject ${quoteId}` }), jsxRuntime.jsx(Drawer.Body, { children: jsxRuntime.jsxs("div", { className: sx(changesBodyStyle), children: [jsxRuntime.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 && (jsxRuntime.jsx("div", { className: sx(reasonsStyle), role: "group", "aria-label": "Common reasons", children: rejectReasons.map((reason) => (jsxRuntime.jsx("button", { type: "button", className: sx(reasonStyle$2), onClick: () => appendReason(reason), "data-test": "quote-review-reason", children: reason }, reason))) })), jsxRuntime.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" })] }) }), jsxRuntime.jsx(Drawer.Footer, { children: jsxRuntime.jsxs("div", { className: sx(drawerFooterStyle), children: [jsxRuntime.jsx(Button, { variant: "secondary", onClick: closeReject, "data-test": "quote-review-cancel-reject", children: "Cancel" }), jsxRuntime.jsx(Button, { variant: "danger", disabled: !note.trim(), onClick: submitReject, "data-test": "quote-review-send-reject", children: "Confirm rejection" })] }) })] })] }));
17196
+ return (jsxRuntime.jsxs("div", { className: cx(sx(actionsStyle$5), className), "data-test": "quote-review-actions", children: [jsxRuntime.jsx(Button, { disabled: disabled, onClick: () => setIsApproveOpen(true), "data-test": "quote-review-approve", children: approveLabel }), jsxRuntime.jsx(Button, { variant: "secondary", disabled: disabled, onClick: () => setIsRejectOpen(true), "data-test": "quote-review-reject", children: rejectLabel }), changes.length > 0 && (jsxRuntime.jsxs("span", { className: sx(changeCountStyle), "data-test": "quote-review-change-count", children: [changes.length, " field", changes.length === 1 ? '' : 's', " edited"] })), disabled && disabledReason && (jsxRuntime.jsx("p", { className: sx(disabledReasonStyle), "data-test": "quote-review-disabled-reason", children: disabledReason })), jsxRuntime.jsx(ConfirmModal, { isOpen: isApproveOpen, onClose: () => setIsApproveOpen(false), title: "Approve this quote?", confirmText: approveLabel, cancelText: "Cancel", loading: loading, onConfirm: confirmApprove, message: jsxRuntime.jsxs("span", { "data-test": "quote-review-approve-message", children: [jsxRuntime.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 ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.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."] }), jsxRuntime.jsx("span", { className: sx(changeListStyle), "data-test": "quote-review-change-list", children: changes.map((change) => (jsxRuntime.jsxs("span", { className: sx(changeStyle), "data-test": "quote-review-change", children: [jsxRuntime.jsx("span", { className: sx(changeLabelStyle), children: change.label }), jsxRuntime.jsxs("span", { className: sx(changeValuesStyle), children: [jsxRuntime.jsx("s", { className: sx(changeFromStyle), children: change.from }), jsxRuntime.jsx("span", { "aria-hidden": "true", children: "\u2192" }), jsxRuntime.jsx("strong", { className: sx(changeToStyle), children: change.to })] })] }, change.field))) })] })) : (jsxRuntime.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." }))] }) }), jsxRuntime.jsxs(Drawer, { isOpen: isRejectOpen, onClose: closeReject, position: "right", size: "md", children: [jsxRuntime.jsx(Drawer.Header, { title: `Reject ${quoteId}` }), jsxRuntime.jsx(Drawer.Body, { children: jsxRuntime.jsxs("div", { className: sx(changesBodyStyle), children: [jsxRuntime.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 && (jsxRuntime.jsx("div", { className: sx(reasonsStyle), role: "group", "aria-label": "Common reasons", children: rejectReasons.map((reason) => (jsxRuntime.jsx("button", { type: "button", className: sx(reasonStyle$2), onClick: () => appendReason(reason), "data-test": "quote-review-reason", children: reason }, reason))) })), jsxRuntime.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" })] }) }), jsxRuntime.jsx(Drawer.Footer, { children: jsxRuntime.jsxs("div", { className: sx(drawerFooterStyle), children: [jsxRuntime.jsx(Button, { variant: "secondary", onClick: closeReject, "data-test": "quote-review-cancel-reject", children: "Cancel" }), jsxRuntime.jsx(Button, { variant: "danger", disabled: !note.trim(), onClick: submitReject, "data-test": "quote-review-send-reject", children: "Confirm rejection" })] }) })] })] }));
17197
17197
  };
17198
17198
  QuoteReviewActions.displayName = 'QuoteReviewActions';
17199
17199
 
@@ -17214,7 +17214,7 @@ const summaryStyle$4 = {
17214
17214
  background: 'var(--color-white, #fff)',
17215
17215
  boxShadow: '0 1px 3px rgb(0 0 0 / 5%)',
17216
17216
  };
17217
- const titleStyle$m = {
17217
+ const titleStyle$n = {
17218
17218
  label: 'RequestSummary-titleStyle',
17219
17219
  fontSize: 18,
17220
17220
  fontWeight: 600,
@@ -17332,7 +17332,7 @@ const RequestSummary = ({ sections, values, enabledSections = {}, submissionInfo
17332
17332
  const visibleSections = sections.filter(section => enabledSections[section.key] !== false);
17333
17333
  const populatedSections = visibleSections.filter((section) => (section.items?.some((item) => hasDisplayValue(resolveItemValue(item, values, `${section.key}_${item.label}`)))
17334
17334
  || section.segments?.some((segment) => segment.items.some((item) => (hasDisplayValue(resolveItemValue(item, values, `${section.key}_${segment.label}_${item.label}`)))))));
17335
- return (jsxRuntime.jsxs("div", { className: cx(sx(summaryStyle$4), className), "data-test": dataTest, children: [jsxRuntime.jsx("h2", { className: sx(titleStyle$m), children: title }), submissionInfo && (jsxRuntime.jsxs("div", { className: sx(submissionInfoStyle), children: [jsxRuntime.jsx("span", { className: sx(labelStyle$3), children: "Submitted by" }), jsxRuntime.jsx("span", { className: sx(valueStyle), children: submissionInfo.submittedBy }), jsxRuntime.jsx("span", { className: sx(labelStyle$3), children: "on" }), jsxRuntime.jsx("span", { className: sx(valueStyle), children: submissionInfo.submittedOn })] })), jsxRuntime.jsx("div", { className: sx(sectionsStyle$1), children: populatedSections.map((section) => (jsxRuntime.jsx(SummarySection, { section: section, values: values }, section.key))) }), populatedSections.length === 0 && (jsxRuntime.jsx("p", { className: sx(emptyStyle$9), children: "No services selected" }))] }));
17335
+ return (jsxRuntime.jsxs("div", { className: cx(sx(summaryStyle$4), className), "data-test": dataTest, children: [jsxRuntime.jsx("h2", { className: sx(titleStyle$n), children: title }), submissionInfo && (jsxRuntime.jsxs("div", { className: sx(submissionInfoStyle), children: [jsxRuntime.jsx("span", { className: sx(labelStyle$3), children: "Submitted by" }), jsxRuntime.jsx("span", { className: sx(valueStyle), children: submissionInfo.submittedBy }), jsxRuntime.jsx("span", { className: sx(labelStyle$3), children: "on" }), jsxRuntime.jsx("span", { className: sx(valueStyle), children: submissionInfo.submittedOn })] })), jsxRuntime.jsx("div", { className: sx(sectionsStyle$1), children: populatedSections.map((section) => (jsxRuntime.jsx(SummarySection, { section: section, values: values }, section.key))) }), populatedSections.length === 0 && (jsxRuntime.jsx("p", { className: sx(emptyStyle$9), children: "No services selected" }))] }));
17336
17336
  };
17337
17337
  RequestSummary.displayName = 'RequestSummary';
17338
17338
 
@@ -18250,14 +18250,14 @@ const selectedStyle = {
18250
18250
  fontWeight: 500,
18251
18251
  },
18252
18252
  };
18253
- const nameStyle$1 = {
18253
+ const nameStyle$2 = {
18254
18254
  label: 'SingleTeamPanelSelector-nameStyle',
18255
18255
  overflow: 'hidden',
18256
18256
  textOverflow: 'ellipsis',
18257
18257
  whiteSpace: 'nowrap',
18258
18258
  };
18259
18259
  /* The sport code, held a step back from the name. */
18260
- const codeStyle$1 = {
18260
+ const codeStyle$2 = {
18261
18261
  label: 'SingleTeamPanelSelector-codeStyle',
18262
18262
  flex: '0 0 auto',
18263
18263
  color: 'var(--color-slate, #5c5c5c)',
@@ -18289,7 +18289,7 @@ const SingleTeamPanelSelector = ({ categories, activeCategoryKey, defaultCategor
18289
18289
  setInternalKey(key);
18290
18290
  onCategoryChange?.(key);
18291
18291
  };
18292
- return (jsxRuntime.jsxs("div", { className: cx(sx(panelStyle$3), className), role: "dialog", "aria-label": "Book team travel", "data-test": "single-team-panel-selector", ...props, children: [jsxRuntime.jsx("div", { className: sx(tabsStyle$7), children: jsxRuntime.jsx(Segment, { options: options, value: activeCategory?.key ?? '', onChange: changeCategory, fullWidth: true, "aria-label": tabsLabel }) }), jsxRuntime.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) => (jsxRuntime.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: [jsxRuntime.jsx("span", { className: sx(nameStyle$1), children: team.name }), jsxRuntime.jsxs("span", { className: sx(codeStyle$1), children: ["(", team.code, ")"] })] }, team.id)))) : (jsxRuntime.jsx("p", { className: sx(emptyStyle$8), role: "status", children: emptyMessage })) })] }));
18292
+ return (jsxRuntime.jsxs("div", { className: cx(sx(panelStyle$3), className), role: "dialog", "aria-label": "Book team travel", "data-test": "single-team-panel-selector", ...props, children: [jsxRuntime.jsx("div", { className: sx(tabsStyle$7), children: jsxRuntime.jsx(Segment, { options: options, value: activeCategory?.key ?? '', onChange: changeCategory, fullWidth: true, "aria-label": tabsLabel }) }), jsxRuntime.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) => (jsxRuntime.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: [jsxRuntime.jsx("span", { className: sx(nameStyle$2), children: team.name }), jsxRuntime.jsxs("span", { className: sx(codeStyle$2), children: ["(", team.code, ")"] })] }, team.id)))) : (jsxRuntime.jsx("p", { className: sx(emptyStyle$8), role: "status", children: emptyMessage })) })] }));
18293
18293
  };
18294
18294
 
18295
18295
  /**
@@ -18306,7 +18306,7 @@ const queueStyle = {
18306
18306
  flexDirection: 'column',
18307
18307
  gap: 'var(--space-3)',
18308
18308
  };
18309
- const toolbarStyle$2 = {
18309
+ const toolbarStyle$3 = {
18310
18310
  label: 'SourcingReviewQueueTable-toolbarStyle',
18311
18311
  display: 'flex',
18312
18312
  flexWrap: 'wrap',
@@ -18522,7 +18522,7 @@ const SourcingReviewQueueTable = ({ quotes, selectedQuoteIds, onSelectionChange,
18522
18522
  render: (_value, quote) => jsxRuntime.jsx(StatusBadge, { status: quote.status }),
18523
18523
  },
18524
18524
  ];
18525
- return (jsxRuntime.jsxs("div", { className: cx(sx(queueStyle), className), "data-test": "sourcing-review-queue", children: [jsxRuntime.jsxs("div", { className: sx(toolbarStyle$2), children: [!hideFilters && (jsxRuntime.jsxs("div", { className: sx(filtersStyle$3), children: [jsxRuntime.jsx(Input, { size: "sm", type: "search", "aria-label": "Search quotes", placeholder: "Search carrier, trip, or school", leftIcon: jsxRuntime.jsx(SearchIcon$1, { size: 16 }), value: searchTerm, onChange: (event) => {
18525
+ return (jsxRuntime.jsxs("div", { className: cx(sx(queueStyle), className), "data-test": "sourcing-review-queue", children: [jsxRuntime.jsxs("div", { className: sx(toolbarStyle$3), children: [!hideFilters && (jsxRuntime.jsxs("div", { className: sx(filtersStyle$3), children: [jsxRuntime.jsx(Input, { size: "sm", type: "search", "aria-label": "Search quotes", placeholder: "Search carrier, trip, or school", leftIcon: jsxRuntime.jsx(SearchIcon$1, { size: 16 }), value: searchTerm, onChange: (event) => {
18526
18526
  setSearchTerm(event.target.value);
18527
18527
  setPage(1);
18528
18528
  }, "data-test": "sourcing-queue-search" }), jsxRuntime.jsxs("label", { className: sx(statusFilterStyle), children: [jsxRuntime.jsx("span", { className: sx(statusFilterLabelStyle), children: "Status" }), jsxRuntime.jsx("select", { value: statusFilter, onChange: (event) => {
@@ -18550,7 +18550,7 @@ const SourcingReviewQueueTable = ({ quotes, selectedQuoteIds, onSelectionChange,
18550
18550
  * - `.teamItem:hover .chevron` names two generated classes, so the chevron's
18551
18551
  * name is resolved here and used as a computed key.
18552
18552
  */
18553
- const cardStyle$6 = {
18553
+ const cardStyle$7 = {
18554
18554
  label: 'TeamCard-cardStyle',
18555
18555
  overflow: 'hidden',
18556
18556
  border: '1px solid var(--border-color-dark, #ababab)',
@@ -18571,7 +18571,7 @@ const iconStyle = {
18571
18571
  display: 'flex',
18572
18572
  color: 'var(--color-primary, #005eb8)',
18573
18573
  };
18574
- const titleStyle$l = {
18574
+ const titleStyle$m = {
18575
18575
  label: 'TeamCard-titleStyle',
18576
18576
  margin: 0,
18577
18577
  color: 'var(--color-slate, #5c5c5c)',
@@ -18721,8 +18721,8 @@ const TeamCard = ({ title = 'Administer Teams', icon, teams, onTeamSelect, class
18721
18721
  return teams;
18722
18722
  return teams.filter(team => team.category === activeTab);
18723
18723
  }, [teams, activeTab]);
18724
- const cardClasses = cx(sx(cardStyle$6), className);
18725
- return (jsxRuntime.jsxs("div", { className: cardClasses, "data-test": "team-card", children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$r), children: [jsxRuntime.jsx("span", { className: sx(iconStyle), children: icon || jsxRuntime.jsx(UsersIcon, {}) }), jsxRuntime.jsx("h3", { className: sx(titleStyle$l), children: title })] }), jsxRuntime.jsxs("div", { className: sx(bodyStyle$3), children: [jsxRuntime.jsx("div", { className: sx(tabsStyle$6), children: TEAM_GROUPS.map(({ label, key }) => (jsxRuntime.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))) }), jsxRuntime.jsxs("div", { className: sx(listStyle$1), children: [filteredTeams.map((team) => (jsxRuntime.jsxs("button", { type: "button", className: sx(teamItemStyle), "data-test": `team-card-team-${team.id}`, onClick: () => onTeamSelect?.(team), children: [jsxRuntime.jsx("span", { className: sx(teamCodeStyle$1), style: { backgroundColor: getTeamColor(team.code) }, children: team.code }), jsxRuntime.jsx("span", { className: sx(teamNameStyle), children: team.description }), jsxRuntime.jsx("span", { className: sx(chevronStyle$1), children: jsxRuntime.jsx(ChevronRightIcon, {}) })] }, team.id))), filteredTeams.length === 0 && (jsxRuntime.jsx("div", { className: sx(emptyStyle$7), children: "No teams found" }))] })] })] }));
18724
+ const cardClasses = cx(sx(cardStyle$7), className);
18725
+ return (jsxRuntime.jsxs("div", { className: cardClasses, "data-test": "team-card", children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$r), children: [jsxRuntime.jsx("span", { className: sx(iconStyle), children: icon || jsxRuntime.jsx(UsersIcon, {}) }), jsxRuntime.jsx("h3", { className: sx(titleStyle$m), children: title })] }), jsxRuntime.jsxs("div", { className: sx(bodyStyle$3), children: [jsxRuntime.jsx("div", { className: sx(tabsStyle$6), children: TEAM_GROUPS.map(({ label, key }) => (jsxRuntime.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))) }), jsxRuntime.jsxs("div", { className: sx(listStyle$1), children: [filteredTeams.map((team) => (jsxRuntime.jsxs("button", { type: "button", className: sx(teamItemStyle), "data-test": `team-card-team-${team.id}`, onClick: () => onTeamSelect?.(team), children: [jsxRuntime.jsx("span", { className: sx(teamCodeStyle$1), style: { backgroundColor: getTeamColor(team.code) }, children: team.code }), jsxRuntime.jsx("span", { className: sx(teamNameStyle), children: team.description }), jsxRuntime.jsx("span", { className: sx(chevronStyle$1), children: jsxRuntime.jsx(ChevronRightIcon, {}) })] }, team.id))), filteredTeams.length === 0 && (jsxRuntime.jsx("div", { className: sx(emptyStyle$7), children: "No teams found" }))] })] })] }));
18726
18726
  };
18727
18727
  TeamCard.displayName = 'TeamCard';
18728
18728
 
@@ -19122,7 +19122,7 @@ const TeamContactsPanel = ({ contacts, value, onChange, disabled = false, loadin
19122
19122
  };
19123
19123
  TeamContactsPanel.displayName = 'TeamContactsPanel';
19124
19124
 
19125
- const actionsStyle$3 = {
19125
+ const actionsStyle$4 = {
19126
19126
  label: 'TeamScheduleActions-actionsStyle', margin: '16px 0'
19127
19127
  };
19128
19128
  const primaryRowStyle = {
@@ -19211,7 +19211,7 @@ const secondaryRowStyle = {
19211
19211
  };
19212
19212
 
19213
19213
  /** Exact presentational counterpart of Hub's Team Schedule action controls. */
19214
- 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 = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(actionsStyle$3), className), "data-test": "team-schedule-actions", children: [jsxRuntime.jsxs("div", { className: sx(primaryRowStyle), children: [!isCompactView ? (onViewSchedule && jsxRuntime.jsx(Button, { "data-test": "team-schedule-view-edit", size: "sm", onClick: onViewSchedule, children: "View/Edit Schedule" })) : (onBack && jsxRuntime.jsx(Button, { "data-test": "team-schedule-back", size: "sm", onClick: onBack, leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 14 }), children: "Back" })), jsxRuntime.jsxs("div", { className: sx(seasonNavigatorStyle), children: [onPreviousSeason && jsxRuntime.jsx(Button, { "data-test": "team-schedule-previous-season", variant: "secondary", size: "sm", square: true, "aria-label": "Previous Season", disabled: previousSeasonDisabled, onClick: onPreviousSeason, children: jsxRuntime.jsx(ChevronLeftIcon, { size: 18 }) }), jsxRuntime.jsxs("div", { className: sx(seasonLabelStyle), children: [jsxRuntime.jsx("span", { className: sx(seasonValueStyle), children: seasonLabel }), !!seasonOptions.length && onSeasonChange && (jsxRuntime.jsx("select", { "data-test": "team-schedule-season", "aria-label": "Season", value: seasonValue, onChange: (event) => onSeasonChange(event.target.value), children: seasonOptions.map((option) => jsxRuntime.jsx("option", { value: option.value, children: option.label }, option.value)) }))] }), onNextSeason && jsxRuntime.jsx(Button, { "data-test": "team-schedule-next-season", variant: "secondary", size: "sm", square: true, "aria-label": "Next Season", onClick: onNextSeason, children: jsxRuntime.jsx(ChevronRightIcon$1, { size: 18 }) })] }), onExport && jsxRuntime.jsx(Button, { "data-test": "team-schedule-export", variant: "outline", size: "sm", loading: exporting, disabled: exportDisabled, rightIcon: jsxRuntime.jsx(ArrowUpRightIcon, { size: 14 }), onClick: onExport, children: "Export XLS" }), jsxRuntime.jsxs("span", { className: sx(tripCountStyle), "data-test": "team-schedule-trip-count", children: [tripCount, " trips displayed"] })] }), isCompactView && (onGroupTravelRequest || onMergeEvents || onUnmergeEvents) && (jsxRuntime.jsxs("div", { className: sx(secondaryRowStyle), children: [onGroupTravelRequest && jsxRuntime.jsx(Button, { "data-test": "team-schedule-group-travel-request", variant: "outline", size: "sm", disabled: groupTravelDisabled, onClick: onGroupTravelRequest, children: "Group Travel Request" }), onMergeEvents && jsxRuntime.jsx(Button, { "data-test": "team-schedule-merge-events", variant: "outline", size: "sm", disabled: mergeDisabled, loading: merging, onClick: onMergeEvents, children: "Merge Events" }), onUnmergeEvents && jsxRuntime.jsx(Button, { "data-test": "team-schedule-unmerge-events", variant: "outline", size: "sm", disabled: unmergeDisabled, loading: unmerging, onClick: onUnmergeEvents, children: "Unmerge Events" })] }))] }));
19214
+ 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 = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(actionsStyle$4), className), "data-test": "team-schedule-actions", children: [jsxRuntime.jsxs("div", { className: sx(primaryRowStyle), children: [!isCompactView ? (onViewSchedule && jsxRuntime.jsx(Button, { "data-test": "team-schedule-view-edit", size: "sm", onClick: onViewSchedule, children: "View/Edit Schedule" })) : (onBack && jsxRuntime.jsx(Button, { "data-test": "team-schedule-back", size: "sm", onClick: onBack, leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 14 }), children: "Back" })), jsxRuntime.jsxs("div", { className: sx(seasonNavigatorStyle), children: [onPreviousSeason && jsxRuntime.jsx(Button, { "data-test": "team-schedule-previous-season", variant: "secondary", size: "sm", square: true, "aria-label": "Previous Season", disabled: previousSeasonDisabled, onClick: onPreviousSeason, children: jsxRuntime.jsx(ChevronLeftIcon, { size: 18 }) }), jsxRuntime.jsxs("div", { className: sx(seasonLabelStyle), children: [jsxRuntime.jsx("span", { className: sx(seasonValueStyle), children: seasonLabel }), !!seasonOptions.length && onSeasonChange && (jsxRuntime.jsx("select", { "data-test": "team-schedule-season", "aria-label": "Season", value: seasonValue, onChange: (event) => onSeasonChange(event.target.value), children: seasonOptions.map((option) => jsxRuntime.jsx("option", { value: option.value, children: option.label }, option.value)) }))] }), onNextSeason && jsxRuntime.jsx(Button, { "data-test": "team-schedule-next-season", variant: "secondary", size: "sm", square: true, "aria-label": "Next Season", onClick: onNextSeason, children: jsxRuntime.jsx(ChevronRightIcon$1, { size: 18 }) })] }), onExport && jsxRuntime.jsx(Button, { "data-test": "team-schedule-export", variant: "outline", size: "sm", loading: exporting, disabled: exportDisabled, rightIcon: jsxRuntime.jsx(ArrowUpRightIcon, { size: 14 }), onClick: onExport, children: "Export XLS" }), jsxRuntime.jsxs("span", { className: sx(tripCountStyle), "data-test": "team-schedule-trip-count", children: [tripCount, " trips displayed"] })] }), isCompactView && (onGroupTravelRequest || onMergeEvents || onUnmergeEvents) && (jsxRuntime.jsxs("div", { className: sx(secondaryRowStyle), children: [onGroupTravelRequest && jsxRuntime.jsx(Button, { "data-test": "team-schedule-group-travel-request", variant: "outline", size: "sm", disabled: groupTravelDisabled, onClick: onGroupTravelRequest, children: "Group Travel Request" }), onMergeEvents && jsxRuntime.jsx(Button, { "data-test": "team-schedule-merge-events", variant: "outline", size: "sm", disabled: mergeDisabled, loading: merging, onClick: onMergeEvents, children: "Merge Events" }), onUnmergeEvents && jsxRuntime.jsx(Button, { "data-test": "team-schedule-unmerge-events", variant: "outline", size: "sm", disabled: unmergeDisabled, loading: unmerging, onClick: onUnmergeEvents, children: "Unmerge Events" })] }))] }));
19215
19215
 
19216
19216
  //#region src/FlexRender.tsx
19217
19217
  function isReactComponent(component) {
@@ -26002,7 +26002,7 @@ const addRowStyle = {
26002
26002
  paddingLeft: 0,
26003
26003
  },
26004
26004
  };
26005
- const toolbarStyle$1 = {
26005
+ const toolbarStyle$2 = {
26006
26006
  label: 'TeamScheduleCompactTable-toolbarStyle',
26007
26007
  display: 'flex',
26008
26008
  alignItems: 'center',
@@ -26013,7 +26013,7 @@ const toolbarStyle$1 = {
26013
26013
  flexWrap: 'wrap',
26014
26014
  },
26015
26015
  };
26016
- const searchStyle = {
26016
+ const searchStyle$1 = {
26017
26017
  label: 'TeamScheduleCompactTable-searchStyle',
26018
26018
  display: 'inline-flex',
26019
26019
  alignItems: 'center',
@@ -26432,7 +26432,7 @@ const TeamScheduleCompactTable = ({ data, rows, tripHeaders = DEFAULT_TRIP_HEADE
26432
26432
  return (jsxRuntime.jsxs("div", {
26433
26433
  // The stylesheet never carried a `.schedule` rule, so this wrapper only
26434
26434
  // ever wore the caller's class.
26435
- className: className, "data-test": "team-schedule-editor", children: [(enableGlobalFilter || enableColumnVisibility) && (jsxRuntime.jsxs("div", { className: sx(toolbarStyle$1), children: [enableGlobalFilter ? (jsxRuntime.jsxs("label", { className: sx(searchStyle), children: [jsxRuntime.jsx(SearchIcon$1, { size: 16 }), jsxRuntime.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" })] })) : (jsxRuntime.jsx("span", {})), enableColumnVisibility && (jsxRuntime.jsxs("details", { className: sx(columnMenuStyle), "data-test": "team-schedule-column-menu", children: [jsxRuntime.jsxs("summary", { children: ["Columns ", jsxRuntime.jsx(ChevronDownIcon$1, { size: 14 })] }), jsxRuntime.jsx("div", { className: sx(columnMenuListStyle), children: table
26435
+ className: className, "data-test": "team-schedule-editor", children: [(enableGlobalFilter || enableColumnVisibility) && (jsxRuntime.jsxs("div", { className: sx(toolbarStyle$2), children: [enableGlobalFilter ? (jsxRuntime.jsxs("label", { className: sx(searchStyle$1), children: [jsxRuntime.jsx(SearchIcon$1, { size: 16 }), jsxRuntime.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" })] })) : (jsxRuntime.jsx("span", {})), enableColumnVisibility && (jsxRuntime.jsxs("details", { className: sx(columnMenuStyle), "data-test": "team-schedule-column-menu", children: [jsxRuntime.jsxs("summary", { children: ["Columns ", jsxRuntime.jsx(ChevronDownIcon$1, { size: 14 })] }), jsxRuntime.jsx("div", { className: sx(columnMenuListStyle), children: table
26436
26436
  .getAllLeafColumns()
26437
26437
  .filter((column) => column.getCanHide())
26438
26438
  .map((column) => (jsxRuntime.jsxs("label", { children: [jsxRuntime.jsx("input", { type: "checkbox", className: sx(checkboxStyle), checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }), typeof column.columnDef.header === "string" &&
@@ -27018,7 +27018,7 @@ const TeamScheduleEditor = ({ rows, initialRows = [], opponentOptions = [], onCh
27018
27018
  /** The two responsive breakpoints, spelled exactly as the stylesheet had them. */
27019
27019
  const COMPACT = '@media (max-width: 900px)';
27020
27020
  const NARROW = '@media (max-width: 640px)';
27021
- const toolbarStyle = {
27021
+ const toolbarStyle$1 = {
27022
27022
  label: 'TeamTravelCalendarViews-toolbarStyle',
27023
27023
  display: 'flex',
27024
27024
  minWidth: 0,
@@ -27897,7 +27897,7 @@ const sportColor = (sportCode) => {
27897
27897
  * Period controls shared by the calendar views: previous, next, today, and month/week.
27898
27898
  * Stateless -- the host owns the active date and passes the label back in.
27899
27899
  */
27900
- const TeamTravelCalendarToolbar = ({ duration, label = '', navigation, onDurationChange, onToday, onPrevious, onNext, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(toolbarStyle), className), "data-test": "calendar-toolbar", children: [jsxRuntime.jsx("button", { type: "button", className: sx(todayButtonStyle), onClick: onToday, "data-test": "calendar-today", children: "Today" }), jsxRuntime.jsx(SegmentedSelector, { value: duration, size: "sm", ariaLabel: "Calendar duration", onChange: (value) => onDurationChange?.(value), options: [{ id: 'month', label: 'Month' }, { id: 'week', label: 'Week' }] }), navigation ?? (jsxRuntime.jsxs("div", { className: sx(periodNavigationStyle), children: [jsxRuntime.jsx("button", { type: "button", className: sx(navigationButtonStyle), "aria-label": `Previous ${duration}`, onClick: onPrevious, children: jsxRuntime.jsx(ChevronLeft$1, {}) }), jsxRuntime.jsx("button", { type: "button", className: sx(periodButtonStyle), children: label }), jsxRuntime.jsx("button", { type: "button", className: sx(navigationButtonStyle), "aria-label": `Next ${duration}`, onClick: onNext, children: jsxRuntime.jsx(ChevronRight$2, {}) })] }))] }));
27900
+ const TeamTravelCalendarToolbar = ({ duration, label = '', navigation, onDurationChange, onToday, onPrevious, onNext, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(toolbarStyle$1), className), "data-test": "calendar-toolbar", children: [jsxRuntime.jsx("button", { type: "button", className: sx(todayButtonStyle), onClick: onToday, "data-test": "calendar-today", children: "Today" }), jsxRuntime.jsx(SegmentedSelector, { value: duration, size: "sm", ariaLabel: "Calendar duration", onChange: (value) => onDurationChange?.(value), options: [{ id: 'month', label: 'Month' }, { id: 'week', label: 'Week' }] }), navigation ?? (jsxRuntime.jsxs("div", { className: sx(periodNavigationStyle), children: [jsxRuntime.jsx("button", { type: "button", className: sx(navigationButtonStyle), "aria-label": `Previous ${duration}`, onClick: onPrevious, children: jsxRuntime.jsx(ChevronLeft$1, {}) }), jsxRuntime.jsx("button", { type: "button", className: sx(periodButtonStyle), children: label }), jsxRuntime.jsx("button", { type: "button", className: sx(navigationButtonStyle), "aria-label": `Next ${duration}`, onClick: onNext, children: jsxRuntime.jsx(ChevronRight$2, {}) })] }))] }));
27901
27901
  const getVisibleDates = (activeDate, duration) => {
27902
27902
  const active = parseDate(activeDate);
27903
27903
  if (duration === 'week') {
@@ -28042,7 +28042,7 @@ const moveTeamTravelCalendarPeriod = (activeDate, duration, amount) => {
28042
28042
  * later. Injected classes tie there, so the winner would be whichever object was
28043
28043
  * injected first. Doubling the selector on the override restores the ranking.
28044
28044
  */
28045
- const formStyle$4 = {
28045
+ const formStyle$5 = {
28046
28046
  label: 'TeamManagementForms-formStyle',
28047
28047
  display: 'flex',
28048
28048
  flexDirection: 'column',
@@ -28074,7 +28074,7 @@ const threeColumnGridStyle = {
28074
28074
  gridTemplateColumns: 'repeat(3, minmax(0, 1fr))',
28075
28075
  },
28076
28076
  };
28077
- const actionsStyle$2 = {
28077
+ const actionsStyle$3 = {
28078
28078
  label: 'TeamManagementForms-actionsStyle',
28079
28079
  display: 'flex',
28080
28080
  justifyContent: 'flex-end',
@@ -28245,10 +28245,10 @@ const useManagedValues = (controlledValues, initialValues, onChange) => {
28245
28245
  };
28246
28246
  const numericValue$1 = (value) => value === '' ? '' : Number(value);
28247
28247
  const FormShell = ({ ariaLabel, children, className = '', disabled = false, onCancel, onSubmit, showActions = true, values, }) => {
28248
- const content = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [children, showActions && (jsxRuntime.jsxs("div", { className: sx(actionsStyle$2), children: [jsxRuntime.jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsxRuntime.jsx(Button, { type: "submit", disabled: disabled, children: "Save" })] }))] }));
28248
+ const content = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [children, showActions && (jsxRuntime.jsxs("div", { className: sx(actionsStyle$3), children: [jsxRuntime.jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsxRuntime.jsx(Button, { type: "submit", disabled: disabled, children: "Save" })] }))] }));
28249
28249
  if (!showActions)
28250
- return jsxRuntime.jsx("div", { className: cx(sx(formStyle$4), className), children: content });
28251
- return (jsxRuntime.jsx("form", { "aria-label": ariaLabel, className: cx(sx(formStyle$4), className), onSubmit: (event) => {
28250
+ return jsxRuntime.jsx("div", { className: cx(sx(formStyle$5), className), children: content });
28251
+ return (jsxRuntime.jsx("form", { "aria-label": ariaLabel, className: cx(sx(formStyle$5), className), onSubmit: (event) => {
28252
28252
  event.preventDefault();
28253
28253
  onSubmit?.(values);
28254
28254
  }, children: content }));
@@ -28402,11 +28402,11 @@ const IMPORT_COPY = {
28402
28402
  const TeamImportForm = ({ kind, onSubmit, onCancel, disabled = false, className = '' }) => {
28403
28403
  const [file, setFile] = React.useState(null);
28404
28404
  const copy = IMPORT_COPY[kind];
28405
- return (jsxRuntime.jsxs("form", { "aria-label": `Import ${kind}`, className: cx(sx(formStyle$4), className), onSubmit: (event) => {
28405
+ return (jsxRuntime.jsxs("form", { "aria-label": `Import ${kind}`, className: cx(sx(formStyle$5), className), onSubmit: (event) => {
28406
28406
  event.preventDefault();
28407
28407
  if (file)
28408
28408
  onSubmit?.(file);
28409
- }, children: [jsxRuntime.jsx("ol", { className: sx(instructionsStyle), children: copy.instructions.map((instruction, index) => jsxRuntime.jsxs("li", { children: [index + 1, ". ", instruction] }, instruction)) }), jsxRuntime.jsx("a", { className: sx(sampleLinkStyle), href: `/${copy.sample}`, download: true, children: copy.sample }), jsxRuntime.jsxs("label", { className: sx(fileFieldStyle), children: [jsxRuntime.jsx(UploadIcon, { size: 24 }), jsxRuntime.jsx("span", { children: file?.name ?? 'Choose an Excel spreadsheet' }), jsxRuntime.jsx("input", { "aria-label": "Spreadsheet file", type: "file", accept: ".xlsx,.xls", onChange: (event) => setFile(event.target.files?.[0] ?? null), required: true, disabled: disabled })] }), jsxRuntime.jsxs("div", { className: sx(actionsStyle$2), children: [jsxRuntime.jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsxRuntime.jsx(Button, { type: "submit", disabled: disabled || !file, children: "Import" })] })] }));
28409
+ }, children: [jsxRuntime.jsx("ol", { className: sx(instructionsStyle), children: copy.instructions.map((instruction, index) => jsxRuntime.jsxs("li", { children: [index + 1, ". ", instruction] }, instruction)) }), jsxRuntime.jsx("a", { className: sx(sampleLinkStyle), href: `/${copy.sample}`, download: true, children: copy.sample }), jsxRuntime.jsxs("label", { className: sx(fileFieldStyle), children: [jsxRuntime.jsx(UploadIcon, { size: 24 }), jsxRuntime.jsx("span", { children: file?.name ?? 'Choose an Excel spreadsheet' }), jsxRuntime.jsx("input", { "aria-label": "Spreadsheet file", type: "file", accept: ".xlsx,.xls", onChange: (event) => setFile(event.target.files?.[0] ?? null), required: true, disabled: disabled })] }), jsxRuntime.jsxs("div", { className: sx(actionsStyle$3), children: [jsxRuntime.jsx(Button, { type: "button", variant: "secondary", onClick: onCancel, disabled: disabled, children: "Cancel" }), jsxRuntime.jsx(Button, { type: "submit", disabled: disabled || !file, children: "Import" })] })] }));
28410
28410
  };
28411
28411
 
28412
28412
  /**
@@ -28460,7 +28460,7 @@ const TravelSummaryMetrics = ({ tripsTraveled, remainingTrips, seasonTripCosts,
28460
28460
  };
28461
28461
 
28462
28462
  /** The form column: header, content/sections and footer stacked with one gap. */
28463
- const formStyle$3 = {
28463
+ const formStyle$4 = {
28464
28464
  label: 'TravelerForm-formStyle',
28465
28465
  display: 'flex',
28466
28466
  flexDirection: 'column',
@@ -28488,7 +28488,7 @@ const headerStyle$p = {
28488
28488
  flexDirection: 'column',
28489
28489
  gap: 'var(--space-1)',
28490
28490
  };
28491
- const titleStyle$k = {
28491
+ const titleStyle$l = {
28492
28492
  label: 'TravelerForm-titleStyle',
28493
28493
  fontSize: 'var(--text-lg)',
28494
28494
  fontWeight: 'var(--font-semibold)',
@@ -28551,11 +28551,84 @@ const footerStyle$2 = {
28551
28551
  * TravelerForm - Form layout for editing traveler/roster member details
28552
28552
  */
28553
28553
  const TravelerForm = ({ values = {}, title, subtitle, children, renderNameSection, renderDetailsSection, renderPreferencesSection, footer, isLoading = false, className = '', }) => {
28554
- const formClasses = cx(sx(formStyle$3), isLoading && sx(loadingStyle$1), className);
28555
- return (jsxRuntime.jsxs("div", { className: formClasses, children: [(title || subtitle) && (jsxRuntime.jsxs("div", { className: sx(headerStyle$p), children: [title && jsxRuntime.jsx("h2", { className: sx(titleStyle$k), children: title }), subtitle && jsxRuntime.jsx("p", { className: sx(subtitleStyle$5), children: subtitle })] })), children ? (jsxRuntime.jsx("div", { className: sx(contentStyle$4), children: children })) : (jsxRuntime.jsxs("div", { className: sx(sectionsStyle), children: [renderNameSection && (jsxRuntime.jsxs("div", { className: sx(sectionStyle$4), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle$8), children: "Name" }), jsxRuntime.jsx("div", { className: sx(sectionContentStyle), children: renderNameSection(values) })] })), renderDetailsSection && (jsxRuntime.jsxs("div", { className: sx(sectionStyle$4), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle$8), children: "Details" }), jsxRuntime.jsx("div", { className: sx(sectionContentStyle), children: renderDetailsSection(values) })] })), renderPreferencesSection && (jsxRuntime.jsxs("div", { className: sx(sectionStyle$4), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle$8), children: "Travel Preferences" }), jsxRuntime.jsx("div", { className: sx(sectionContentStyle), children: renderPreferencesSection(values) })] }))] })), footer && (jsxRuntime.jsx("div", { className: sx(footerStyle$2), children: footer }))] }));
28554
+ const formClasses = cx(sx(formStyle$4), isLoading && sx(loadingStyle$1), className);
28555
+ return (jsxRuntime.jsxs("div", { className: formClasses, children: [(title || subtitle) && (jsxRuntime.jsxs("div", { className: sx(headerStyle$p), children: [title && jsxRuntime.jsx("h2", { className: sx(titleStyle$l), children: title }), subtitle && jsxRuntime.jsx("p", { className: sx(subtitleStyle$5), children: subtitle })] })), children ? (jsxRuntime.jsx("div", { className: sx(contentStyle$4), children: children })) : (jsxRuntime.jsxs("div", { className: sx(sectionsStyle), children: [renderNameSection && (jsxRuntime.jsxs("div", { className: sx(sectionStyle$4), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle$8), children: "Name" }), jsxRuntime.jsx("div", { className: sx(sectionContentStyle), children: renderNameSection(values) })] })), renderDetailsSection && (jsxRuntime.jsxs("div", { className: sx(sectionStyle$4), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle$8), children: "Details" }), jsxRuntime.jsx("div", { className: sx(sectionContentStyle), children: renderDetailsSection(values) })] })), renderPreferencesSection && (jsxRuntime.jsxs("div", { className: sx(sectionStyle$4), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle$8), children: "Travel Preferences" }), jsxRuntime.jsx("div", { className: sx(sectionContentStyle), children: renderPreferencesSection(values) })] }))] })), footer && (jsxRuntime.jsx("div", { className: sx(footerStyle$2), children: footer }))] }));
28556
28556
  };
28557
28557
  TravelerForm.displayName = 'TravelerForm';
28558
28558
 
28559
+ const formStyle$3 = {
28560
+ label: 'ViHeaderForm-formStyle',
28561
+ display: 'flex',
28562
+ flexDirection: 'column',
28563
+ gap: 'var(--space-6)',
28564
+ fontFamily: 'var(--font-family-base)',
28565
+ color: 'var(--fg-1)',
28566
+ };
28567
+ const noteStyle$2 = {
28568
+ label: 'ViHeaderForm-noteStyle',
28569
+ margin: 0,
28570
+ fontSize: 'var(--fs-sm)',
28571
+ color: 'var(--fg-3)',
28572
+ lineHeight: 1.5,
28573
+ };
28574
+ const eyebrowNoteStyle = {
28575
+ label: 'ViHeaderForm-eyebrowNoteStyle',
28576
+ margin: 0,
28577
+ padding: 'var(--space-2) var(--space-3)',
28578
+ borderLeft: '3px solid var(--color-accent-ink)',
28579
+ background: 'var(--bg-subtle)',
28580
+ borderRadius: 'var(--radius-md)',
28581
+ fontSize: 'var(--fs-sm)',
28582
+ color: 'var(--fg-2)',
28583
+ };
28584
+ const errorStyle$1 = {
28585
+ label: 'ViHeaderForm-errorStyle',
28586
+ margin: 0,
28587
+ fontSize: 'var(--fs-sm)',
28588
+ fontWeight: 'var(--fw-medium)',
28589
+ color: 'var(--color-error)',
28590
+ };
28591
+ const actionsStyle$2 = {
28592
+ label: 'ViHeaderForm-actionsStyle',
28593
+ display: 'flex',
28594
+ justifyContent: 'flex-end',
28595
+ gap: 'var(--space-3)',
28596
+ paddingTop: 'var(--space-4)',
28597
+ borderTop: '1px solid var(--border-color)',
28598
+ };
28599
+
28600
+ /**
28601
+ * Editor for a virtual-invoice header: who the invoice comes from, how to reach
28602
+ * them, and the survey and message that go with it. An account or a branch is
28603
+ * required, and a branch header wins over its account's.
28604
+ */
28605
+ const ViHeaderForm = ({ value, onSave, onCancel, saveLabel = 'Save header', className = '', }) => {
28606
+ const [draft, setDraft] = React.useState(value);
28607
+ const [error, setError] = React.useState('');
28608
+ const field = (key, label, extra = {}) => (jsxRuntime.jsx(FormField, { label: label, inputProps: {
28609
+ value: draft[key],
28610
+ onChange: (e) => setDraft({ ...draft, [key]: e.target.value }),
28611
+ 'data-test': `vi-header-${String(key).replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`)}`,
28612
+ ...extra,
28613
+ } }));
28614
+ const handleSubmit = (e) => {
28615
+ e.preventDefault();
28616
+ if (!draft.accountId.trim() && !draft.branch.trim()) {
28617
+ setError('Enter an Account ID or a Branch.');
28618
+ return;
28619
+ }
28620
+ setError('');
28621
+ onSave?.(draft);
28622
+ };
28623
+ return (jsxRuntime.jsxs("form", { className: cx(sx(formStyle$3), className), onSubmit: handleSubmit, noValidate: true, children: [jsxRuntime.jsx("p", { className: sx(eyebrowNoteStyle), children: "Enter an Account OR a Branch. The header configured for a branch takes precedence." }), jsxRuntime.jsxs(FormSection, { title: "Applies to", children: [jsxRuntime.jsxs(FormRow, { columns: 2, stackOnMobile: false, children: [field('accountId', 'Account ID'), field('branch', 'Branch')] }), error && (jsxRuntime.jsx("p", { className: sx(errorStyle$1), role: "alert", children: error }))] }), jsxRuntime.jsxs(FormSection, { title: "Company & contact", children: [field('companyName', 'Company name'), field('address', 'Address'), jsxRuntime.jsxs(FormRow, { columns: 3, stackOnMobile: false, children: [field('city', 'City'), field('state', 'State'), field('zipCode', 'Zip code')] }), jsxRuntime.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')] })] }), jsxRuntime.jsxs(FormSection, { title: "Web & hours", children: [field('defaultWebsite', 'Default website'), jsxRuntime.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')] }), jsxRuntime.jsxs(FormSection, { title: "Survey Sparrow", children: [field('agentSurveyEndpoint', 'Agent survey API endpoint'), field('onlineSurveyEndpoint', 'Online survey API endpoint'), jsxRuntime.jsx(FormRow, { columns: 3, stackOnMobile: false, children: field('surveyDelayDays', 'Survey delay (days)', { type: 'number', min: 0 }) })] }), jsxRuntime.jsx(FormSection, { title: "Invoice message", children: jsxRuntime.jsx(FormField, { label: "Description", helperText: "Printed on the invoice. Paste one line at a time.", as: "textarea", textareaProps: {
28624
+ value: draft.description,
28625
+ rows: 5,
28626
+ onChange: (e) => setDraft({ ...draft, description: e.target.value }),
28627
+ 'data-test': 'vi-header-description',
28628
+ } }) }), jsxRuntime.jsxs("div", { className: sx(actionsStyle$2), children: [jsxRuntime.jsx(Button, { type: "button", variant: "outline", onClick: onCancel, "data-test": "vi-header-cancel", children: "Cancel" }), jsxRuntime.jsx(Button, { type: "submit", variant: "primary", "data-test": "vi-header-save", children: saveLabel })] })] }));
28629
+ };
28630
+ ViHeaderForm.displayName = 'ViHeaderForm';
28631
+
28559
28632
  /**
28560
28633
  * TripTable's compiled rules.
28561
28634
  *
@@ -28890,7 +28963,7 @@ const TripTable = ({ trips, variant = 'current', density = 'comfortable', vendor
28890
28963
  * `.card:hover .chevron`), so the icon and the chevron are declared first and
28891
28964
  * their generated class names resolved into `cardStyle` as computed keys.
28892
28965
  */
28893
- const pageStyle$t = {
28966
+ const pageStyle$u = {
28894
28967
  label: 'AdministrationPage-pageStyle',
28895
28968
  color: 'var(--color-ink)',
28896
28969
  };
@@ -28945,7 +29018,7 @@ const chevronStyle = {
28945
29018
  flex: '0 0 auto',
28946
29019
  color: 'var(--border-color-dark)',
28947
29020
  };
28948
- const cardStyle$5 = {
29021
+ const cardStyle$6 = {
28949
29022
  label: 'AdministrationPage-cardStyle',
28950
29023
  display: 'flex',
28951
29024
  alignItems: 'center',
@@ -29027,10 +29100,10 @@ const AdministrationPage = ({ activeTab = 'system', enabledTabs = ADMINISTRATION
29027
29100
  const resolvedActiveTab = visibleTabs.some((tab) => tab.key === activeTab)
29028
29101
  ? activeTab
29029
29102
  : visibleTabs[0]?.key;
29030
- return jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$t), className), children: [jsxRuntime.jsx("header", { className: sx(headerStyle$n), children: jsxRuntime.jsx("h1", { children: "Administration\u00A0" }) }), visibleTabs.length > 0 && (jsxRuntime.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' ? (jsxRuntime.jsx("div", { className: sx(cardsStyle$1), children: resolvedCards.map((card) => (jsxRuntime.jsxs("button", { type: "button", className: sx(cardStyle$5), onClick: () => onCardClick?.(card), children: [jsxRuntime.jsx("span", { className: sx(cardIconStyle$1), children: card.icon }), jsxRuntime.jsxs("span", { className: sx(cardCopyStyle), children: [jsxRuntime.jsx("span", { className: sx(cardTitleStyle$2), children: card.title }), jsxRuntime.jsx("span", { className: sx(cardDescriptionStyle$1), children: card.description })] }), jsxRuntime.jsx(ChevronRightIcon$1, { className: sx(chevronStyle), size: 14 })] }, card.key))) })) : resolvedActiveTab === 'client' ? (jsxRuntime.jsx("p", { className: sx(comingSoonStyle), children: "Client administration settings coming soon." })) : (jsxRuntime.jsx("p", { className: sx(comingSoonStyle), "data-test": "administration-empty-tabs", children: "No administration sections are available." })))] });
29103
+ return jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$u), className), children: [jsxRuntime.jsx("header", { className: sx(headerStyle$n), children: jsxRuntime.jsx("h1", { children: "Administration\u00A0" }) }), visibleTabs.length > 0 && (jsxRuntime.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' ? (jsxRuntime.jsx("div", { className: sx(cardsStyle$1), children: resolvedCards.map((card) => (jsxRuntime.jsxs("button", { type: "button", className: sx(cardStyle$6), onClick: () => onCardClick?.(card), children: [jsxRuntime.jsx("span", { className: sx(cardIconStyle$1), children: card.icon }), jsxRuntime.jsxs("span", { className: sx(cardCopyStyle), children: [jsxRuntime.jsx("span", { className: sx(cardTitleStyle$2), children: card.title }), jsxRuntime.jsx("span", { className: sx(cardDescriptionStyle$1), children: card.description })] }), jsxRuntime.jsx(ChevronRightIcon$1, { className: sx(chevronStyle), size: 14 })] }, card.key))) })) : resolvedActiveTab === 'client' ? (jsxRuntime.jsx("p", { className: sx(comingSoonStyle), children: "Client administration settings coming soon." })) : (jsxRuntime.jsx("p", { className: sx(comingSoonStyle), "data-test": "administration-empty-tabs", children: "No administration sections are available." })))] });
29031
29104
  };
29032
29105
 
29033
- const pageStyle$s = {
29106
+ const pageStyle$t = {
29034
29107
  label: 'AgentGroupTravelRequestsPage-pageStyle',
29035
29108
  display: 'flex',
29036
29109
  flexDirection: 'column',
@@ -29046,7 +29119,7 @@ const breadcrumbStyle$9 = {
29046
29119
  alignSelf: 'flex-start',
29047
29120
  paddingLeft: '0 !important',
29048
29121
  };
29049
- const titleStyle$j = {
29122
+ const titleStyle$k = {
29050
29123
  label: 'AgentGroupTravelRequestsPage-titleStyle',
29051
29124
  margin: 0,
29052
29125
  color: 'var(--fg-1)',
@@ -29067,12 +29140,12 @@ const quickLinksStyle = {
29067
29140
  };
29068
29141
 
29069
29142
  /** Hub's agent-facing Group Travel Request screen — the "Book a Trip" quick links plus the open-requests list. */
29070
- 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 = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$s), className), "data-test": "agent-gtr-page", children: [jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$9), onClick: onBackToBookATrip, children: "Book a Trip" }), jsxRuntime.jsx("h1", { className: sx(titleStyle$j), children: title }), jsxRuntime.jsxs("ul", { className: sx(quickLinksStyle), children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onSubmitNewRequest, children: "Submit a new group travel request" }) }), isStmEmployee && (jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onSubmitAgentRequest, children: "Submit a new group travel request (agent use only)" }) })), jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onSearchPastRequests, children: "Search past travel requests/Non-agent-only requests" }) }), isStmEmployee && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onShowCdsRequests, children: "Show all open CDS group travel requests" }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onShowActionableItems, children: "Show this week's actionable items" }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onAdministerViews, children: "Administer your views" }) })] }))] }), jsxRuntime.jsx(AgentGroupTravelRequestsTable, { requests: requests, sports: sports, views: views, today: today, onOpenRequest: onOpenRequest, onViewMasterTrip: onViewMasterTrip, onDeleteRequest: onDeleteRequest, onCopyPnr: onCopyPnr, onToggleDueStatus: onToggleDueStatus, onSubmittedDateChange: onSubmittedDateChange, onQuoteSentDateChange: onQuoteSentDateChange })] }));
29143
+ 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 = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$t), className), "data-test": "agent-gtr-page", children: [jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$9), onClick: onBackToBookATrip, children: "Book a Trip" }), jsxRuntime.jsx("h1", { className: sx(titleStyle$k), children: title }), jsxRuntime.jsxs("ul", { className: sx(quickLinksStyle), children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onSubmitNewRequest, children: "Submit a new group travel request" }) }), isStmEmployee && (jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onSubmitAgentRequest, children: "Submit a new group travel request (agent use only)" }) })), jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onSearchPastRequests, children: "Search past travel requests/Non-agent-only requests" }) }), isStmEmployee && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onShowCdsRequests, children: "Show all open CDS group travel requests" }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onShowActionableItems, children: "Show this week's actionable items" }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: onAdministerViews, children: "Administer your views" }) })] }))] }), jsxRuntime.jsx(AgentGroupTravelRequestsTable, { requests: requests, sports: sports, views: views, today: today, onOpenRequest: onOpenRequest, onViewMasterTrip: onViewMasterTrip, onDeleteRequest: onDeleteRequest, onCopyPnr: onCopyPnr, onToggleDueStatus: onToggleDueStatus, onSubmittedDateChange: onSubmittedDateChange, onQuoteSentDateChange: onQuoteSentDateChange })] }));
29071
29144
 
29072
29145
  /** CarrierProfilePage's compiled rules. A straight translation: the only
29073
29146
  * overrides are the mobile media query, which is nested into the two styles
29074
29147
  * it repadded, and an at-rule always outranks the declaration beside it. */
29075
- const pageStyle$r = {
29148
+ const pageStyle$s = {
29076
29149
  label: 'CarrierProfilePage-pageStyle',
29077
29150
  display: 'flex',
29078
29151
  flexDirection: 'column',
@@ -29093,7 +29166,7 @@ const headerStyle$m = {
29093
29166
  flexDirection: 'column',
29094
29167
  gap: 'var(--space-1)',
29095
29168
  };
29096
- const titleStyle$i = {
29169
+ const titleStyle$j = {
29097
29170
  label: 'CarrierProfilePage-titleStyle',
29098
29171
  margin: 0,
29099
29172
  color: 'var(--fg-1)',
@@ -29159,7 +29232,7 @@ const formStyle$2 = {
29159
29232
  const saveStyle = {
29160
29233
  label: 'CarrierProfilePage-saveStyle', alignSelf: 'flex-start'
29161
29234
  };
29162
- const rowActionsStyle = {
29235
+ const rowActionsStyle$1 = {
29163
29236
  label: 'CarrierProfilePage-rowActionsStyle',
29164
29237
  display: 'inline-flex',
29165
29238
  gap: 'var(--space-1)',
@@ -29291,7 +29364,7 @@ const CarrierProfilePage = ({ carrierName, preferences: initialPreferences, cate
29291
29364
  key: 'contactId',
29292
29365
  label: 'Actions',
29293
29366
  align: 'right',
29294
- render: (_value, contact) => (jsxRuntime.jsxs("span", { className: sx(rowActionsStyle), children: [canEditContacts && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${contact.name}`, onClick: () => onEditContact?.(contact.contactId), "data-test": "carrier-contact-edit", children: jsxRuntime.jsx(EditIcon$2, { size: 16 }) })), canDeleteContacts && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${contact.name}`, onClick: () => onDeleteContact?.(contact.contactId), "data-test": "carrier-contact-delete", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) }))] })),
29367
+ render: (_value, contact) => (jsxRuntime.jsxs("span", { className: sx(rowActionsStyle$1), children: [canEditContacts && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${contact.name}`, onClick: () => onEditContact?.(contact.contactId), "data-test": "carrier-contact-edit", children: jsxRuntime.jsx(EditIcon$2, { size: 16 }) })), canDeleteContacts && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${contact.name}`, onClick: () => onDeleteContact?.(contact.contactId), "data-test": "carrier-contact-delete", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) }))] })),
29295
29368
  }] : []),
29296
29369
  ];
29297
29370
  const aircraftColumns = [
@@ -29320,15 +29393,15 @@ const CarrierProfilePage = ({ carrierName, preferences: initialPreferences, cate
29320
29393
  key: 'aircraftId',
29321
29394
  label: 'Actions',
29322
29395
  align: 'right',
29323
- render: (_value, item) => (jsxRuntime.jsxs("span", { className: sx(rowActionsStyle), children: [canEditAircraft && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${item.name}`, onClick: () => onEditAircraft?.(item.aircraftId), "data-test": "carrier-aircraft-edit", children: jsxRuntime.jsx(EditIcon$2, { size: 16 }) })), canDeleteAircraft && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${item.name}`, onClick: () => onDeleteAircraft?.(item.aircraftId), "data-test": "carrier-aircraft-delete", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) }))] })),
29396
+ render: (_value, item) => (jsxRuntime.jsxs("span", { className: sx(rowActionsStyle$1), children: [canEditAircraft && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${item.name}`, onClick: () => onEditAircraft?.(item.aircraftId), "data-test": "carrier-aircraft-edit", children: jsxRuntime.jsx(EditIcon$2, { size: 16 }) })), canDeleteAircraft && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${item.name}`, onClick: () => onDeleteAircraft?.(item.aircraftId), "data-test": "carrier-aircraft-delete", children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) }))] })),
29324
29397
  }] : []),
29325
29398
  ];
29326
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$r), className), "data-test": "carrier-profile-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$8), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "carrier-profile-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$m), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$i), children: "My Profile" }), jsxRuntime.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." })] }), jsxRuntime.jsx(Segment, { options: TAB_OPTIONS$2, value: tab, onChange: selectTab, "aria-label": "Profile section", className: sx(tabsStyle$4) }), tab === 'profile' && (jsxRuntime.jsxs("section", { className: sx(panelStyle$1), "aria-label": "Preferences", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$7), children: "Preferences" }), jsxRuntime.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." }), jsxRuntime.jsxs("div", { className: sx(formStyle$2), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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 && (jsxRuntime.jsx(Button, { className: sx(saveStyle), onClick: () => onSavePreferences?.(preferences), "data-test": "carrier-save-preferences", children: "Save" }))] })), tab === 'contacts' && (jsxRuntime.jsxs("section", { className: sx(panelStyle$1), "aria-label": "Contacts", children: [jsxRuntime.jsxs("h2", { className: sx(sectionTitleStyle$7), children: [carrierName, " contacts"] }), jsxRuntime.jsx(Table, { columns: contactColumns, data: contacts, rowKey: "contactId", emptyContent: jsxRuntime.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 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("h3", { className: sx(subTitleStyle), children: "Add a contact" }), jsxRuntime.jsxs("div", { className: sx(formStyle$2), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" })] }), jsxRuntime.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" }), jsxRuntime.jsx(Button, { className: sx(saveStyle), onClick: submitContact, "data-test": "carrier-contact-submit", children: "Add contact" })] }))] })), tab === 'aircraft' && (jsxRuntime.jsxs("section", { className: sx(panelStyle$1), "aria-label": "Aircraft", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$7), children: "Aircraft and seat maps" }), jsxRuntime.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." }), jsxRuntime.jsx(Table, { columns: aircraftColumns, data: aircraft, rowKey: "aircraftId", emptyContent: jsxRuntime.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." }) })] }))] }));
29399
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$s), className), "data-test": "carrier-profile-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$8), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "carrier-profile-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$m), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$j), children: "My Profile" }), jsxRuntime.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." })] }), jsxRuntime.jsx(Segment, { options: TAB_OPTIONS$2, value: tab, onChange: selectTab, "aria-label": "Profile section", className: sx(tabsStyle$4) }), tab === 'profile' && (jsxRuntime.jsxs("section", { className: sx(panelStyle$1), "aria-label": "Preferences", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$7), children: "Preferences" }), jsxRuntime.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." }), jsxRuntime.jsxs("div", { className: sx(formStyle$2), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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 && (jsxRuntime.jsx(Button, { className: sx(saveStyle), onClick: () => onSavePreferences?.(preferences), "data-test": "carrier-save-preferences", children: "Save" }))] })), tab === 'contacts' && (jsxRuntime.jsxs("section", { className: sx(panelStyle$1), "aria-label": "Contacts", children: [jsxRuntime.jsxs("h2", { className: sx(sectionTitleStyle$7), children: [carrierName, " contacts"] }), jsxRuntime.jsx(Table, { columns: contactColumns, data: contacts, rowKey: "contactId", emptyContent: jsxRuntime.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 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("h3", { className: sx(subTitleStyle), children: "Add a contact" }), jsxRuntime.jsxs("div", { className: sx(formStyle$2), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" })] }), jsxRuntime.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" }), jsxRuntime.jsx(Button, { className: sx(saveStyle), onClick: submitContact, "data-test": "carrier-contact-submit", children: "Add contact" })] }))] })), tab === 'aircraft' && (jsxRuntime.jsxs("section", { className: sx(panelStyle$1), "aria-label": "Aircraft", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$7), children: "Aircraft and seat maps" }), jsxRuntime.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." }), jsxRuntime.jsx(Table, { columns: aircraftColumns, data: aircraft, rowKey: "aircraftId", emptyContent: jsxRuntime.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." }) })] }))] }));
29327
29400
  };
29328
29401
  CarrierProfilePage.displayName = 'CarrierProfilePage';
29329
29402
 
29330
29403
  /** ChampionshipBidDetailPage's compiled rules. */
29331
- const pageStyle$q = {
29404
+ const pageStyle$r = {
29332
29405
  label: 'ChampionshipBidDetailPage-pageStyle',
29333
29406
  display: 'flex',
29334
29407
  flexDirection: 'column',
@@ -29354,7 +29427,7 @@ const headerStyle$l = {
29354
29427
  flexDirection: 'column',
29355
29428
  },
29356
29429
  };
29357
- const eyebrowStyle$6 = {
29430
+ const eyebrowStyle$7 = {
29358
29431
  label: 'ChampionshipBidDetailPage-eyebrowStyle',
29359
29432
  color: 'var(--fg-4)',
29360
29433
  fontSize: 'var(--fs-xs)',
@@ -29362,7 +29435,7 @@ const eyebrowStyle$6 = {
29362
29435
  letterSpacing: '.06em',
29363
29436
  textTransform: 'uppercase',
29364
29437
  };
29365
- const titleStyle$h = {
29438
+ const titleStyle$i = {
29366
29439
  label: 'ChampionshipBidDetailPage-titleStyle',
29367
29440
  margin: 'var(--space-1) 0 0',
29368
29441
  color: 'var(--fg-1)',
@@ -29483,7 +29556,7 @@ const ChampionshipBidDetailPage = ({ bid, loading = false, backLabel = 'NCAA Cha
29483
29556
  const currency = React.useMemo(() => new Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }), [locale]);
29484
29557
  const numbers = React.useMemo(() => new Intl.NumberFormat(locale), [locale]);
29485
29558
  const status = bid ? detailStatus(bid) : undefined;
29486
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$q), className), "data-test": "championship-bid-detail-page", children: [onBack && (jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", className: sx(breadcrumbStyle$7), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "championship-bid-detail-back", children: backLabel })), loading ? (jsxRuntime.jsxs("div", { className: sx(loadingStyle), "data-test": "championship-bid-detail-loading", children: [jsxRuntime.jsx(Spinner, { size: "lg", label: "Loading championship bid detail" }), jsxRuntime.jsx("p", { children: "Loading championship bid detail\u2026" })] })) : bid && status ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$l), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("span", { className: sx(eyebrowStyle$6), children: ["NCAA Championship bid \u00B7 ", bid.bidId] }), jsxRuntime.jsx("h1", { className: sx(titleStyle$h), children: bid.bidName })] }), jsxRuntime.jsx("span", { "data-test": "championship-bid-detail-status", children: jsxRuntime.jsx(StatusBadge, { status: status.status, label: status.label }) })] }), jsxRuntime.jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-details-heading", children: [jsxRuntime.jsx("h2", { id: "championship-bid-details-heading", children: "Bid details" }), jsxRuntime.jsxs("dl", { className: sx(factsStyle$4), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Aircraft" }), jsxRuntime.jsx("dd", { children: bid.aircraftName || 'Not provided' })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Seats" }), jsxRuntime.jsx("dd", { children: bid.seats === undefined ? 'Not provided' : numbers.format(bid.seats) })] }), jsxRuntime.jsxs("div", { className: sx(totalFactStyle$1), children: [jsxRuntime.jsx("dt", { children: "Total cost" }), jsxRuntime.jsx("dd", { "data-test": "championship-bid-detail-total", children: bid.totalCost === undefined ? 'Not provided' : currency.format(bid.totalCost) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Cities" }), jsxRuntime.jsx("dd", { children: bid.cities || 'Not provided' })] })] })] }), jsxRuntime.jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-notes-heading", children: [jsxRuntime.jsx("h2", { id: "championship-bid-notes-heading", children: "Carrier notes" }), jsxRuntime.jsxs("div", { className: sx(notesGridStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h3", { children: "Restrictions" }), jsxRuntime.jsx("p", { children: bid.restrictions || 'No restrictions provided.' })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h3", { children: "Comments" }), jsxRuntime.jsx("p", { children: bid.comments || 'No comments provided.' })] })] })] }), jsxRuntime.jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-contract-heading", children: [jsxRuntime.jsx("h2", { id: "championship-bid-contract-heading", children: "Contract" }), jsxRuntime.jsxs("div", { className: sx(contractStyle), "data-test": "championship-bid-detail-contract", children: [jsxRuntime.jsx(DocumentIcon, { size: 20, "aria-hidden": "true" }), jsxRuntime.jsx("span", { children: bid.contractFileName || 'No contract on file' })] })] })] })) : (jsxRuntime.jsx("div", { "data-test": "championship-bid-detail-empty", children: jsxRuntime.jsx(EmptyState$1, { title: "Championship bid detail unavailable", description: "Return to the championship queue and select an available opportunity.", icon: jsxRuntime.jsx(DocumentIcon, { size: 30 }) }) }))] }));
29559
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$r), className), "data-test": "championship-bid-detail-page", children: [onBack && (jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", className: sx(breadcrumbStyle$7), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "championship-bid-detail-back", children: backLabel })), loading ? (jsxRuntime.jsxs("div", { className: sx(loadingStyle), "data-test": "championship-bid-detail-loading", children: [jsxRuntime.jsx(Spinner, { size: "lg", label: "Loading championship bid detail" }), jsxRuntime.jsx("p", { children: "Loading championship bid detail\u2026" })] })) : bid && status ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$l), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("span", { className: sx(eyebrowStyle$7), children: ["NCAA Championship bid \u00B7 ", bid.bidId] }), jsxRuntime.jsx("h1", { className: sx(titleStyle$i), children: bid.bidName })] }), jsxRuntime.jsx("span", { "data-test": "championship-bid-detail-status", children: jsxRuntime.jsx(StatusBadge, { status: status.status, label: status.label }) })] }), jsxRuntime.jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-details-heading", children: [jsxRuntime.jsx("h2", { id: "championship-bid-details-heading", children: "Bid details" }), jsxRuntime.jsxs("dl", { className: sx(factsStyle$4), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Aircraft" }), jsxRuntime.jsx("dd", { children: bid.aircraftName || 'Not provided' })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Seats" }), jsxRuntime.jsx("dd", { children: bid.seats === undefined ? 'Not provided' : numbers.format(bid.seats) })] }), jsxRuntime.jsxs("div", { className: sx(totalFactStyle$1), children: [jsxRuntime.jsx("dt", { children: "Total cost" }), jsxRuntime.jsx("dd", { "data-test": "championship-bid-detail-total", children: bid.totalCost === undefined ? 'Not provided' : currency.format(bid.totalCost) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Cities" }), jsxRuntime.jsx("dd", { children: bid.cities || 'Not provided' })] })] })] }), jsxRuntime.jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-notes-heading", children: [jsxRuntime.jsx("h2", { id: "championship-bid-notes-heading", children: "Carrier notes" }), jsxRuntime.jsxs("div", { className: sx(notesGridStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h3", { children: "Restrictions" }), jsxRuntime.jsx("p", { children: bid.restrictions || 'No restrictions provided.' })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h3", { children: "Comments" }), jsxRuntime.jsx("p", { children: bid.comments || 'No comments provided.' })] })] })] }), jsxRuntime.jsxs("section", { className: sx(panelStyle), "aria-labelledby": "championship-bid-contract-heading", children: [jsxRuntime.jsx("h2", { id: "championship-bid-contract-heading", children: "Contract" }), jsxRuntime.jsxs("div", { className: sx(contractStyle), "data-test": "championship-bid-detail-contract", children: [jsxRuntime.jsx(DocumentIcon, { size: 20, "aria-hidden": "true" }), jsxRuntime.jsx("span", { children: bid.contractFileName || 'No contract on file' })] })] })] })) : (jsxRuntime.jsx("div", { "data-test": "championship-bid-detail-empty", children: jsxRuntime.jsx(EmptyState$1, { title: "Championship bid detail unavailable", description: "Return to the championship queue and select an available opportunity.", icon: jsxRuntime.jsx(DocumentIcon, { size: 30 }) }) }))] }));
29487
29560
  };
29488
29561
  ChampionshipBidDetailPage.displayName = 'ChampionshipBidDetailPage';
29489
29562
 
@@ -29495,7 +29568,7 @@ ChampionshipBidDetailPage.displayName = 'ChampionshipBidDetailPage';
29495
29568
  * declaration block in the sheet; they are separate elements, so each keeps its
29496
29569
  * own object.
29497
29570
  */
29498
- const pageStyle$p = {
29571
+ const pageStyle$q = {
29499
29572
  label: 'ChampionshipBidsPage-pageStyle',
29500
29573
  display: 'flex',
29501
29574
  flexDirection: 'column',
@@ -29516,7 +29589,7 @@ const headerStyle$k = {
29516
29589
  flexDirection: 'column',
29517
29590
  gap: 'var(--space-1)',
29518
29591
  };
29519
- const titleStyle$g = {
29592
+ const titleStyle$h = {
29520
29593
  label: 'ChampionshipBidsPage-titleStyle',
29521
29594
  margin: 0,
29522
29595
  color: 'var(--fg-1)',
@@ -29694,7 +29767,7 @@ const ChampionshipBidsPage = ({ bids, bidType: controlledBidType, defaultBidType
29694
29767
  render: (_value, bid) => onOpenBid ? (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", onClick: () => onOpenBid(bid.bidId), "data-test": "championship-rebid", children: "Bid anyway" })) : jsxRuntime.jsx("span", { className: sx(mutedStyle), children: "\u2014" }),
29695
29768
  });
29696
29769
  }
29697
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$p), className), "data-test": "championship-bids-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$6), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "championship-bids-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$k), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$g), children: CHAMPIONSHIP_HEADINGS[bidType] }), jsxRuntime.jsx("p", { className: sx(descriptionStyle$7), children: "NCAA championship charter opportunities released to you. Award confirmations and signed contracts live in the Awarded queue." })] }), jsxRuntime.jsx(Segment, { options: TAB_OPTIONS$1, value: bidType, onChange: selectBidType, "aria-label": "Championship bid queue", className: sx(tabsStyle$3) }), jsxRuntime.jsx(Table, { columns: columns, data: pageBids, rowKey: "bidId", loading: loading, emptyContent: jsxRuntime.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." }) }), jsxRuntime.jsx(Pagination, { page: currentPage, pageSize: pageSize, totalItems: bids.length, itemLabel: "bids", ariaLabel: "Championship bids pagination", onPageChange: setPage, onPageSizeChange: (nextSize) => {
29770
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$q), className), "data-test": "championship-bids-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$6), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "championship-bids-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$k), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$h), children: CHAMPIONSHIP_HEADINGS[bidType] }), jsxRuntime.jsx("p", { className: sx(descriptionStyle$7), children: "NCAA championship charter opportunities released to you. Award confirmations and signed contracts live in the Awarded queue." })] }), jsxRuntime.jsx(Segment, { options: TAB_OPTIONS$1, value: bidType, onChange: selectBidType, "aria-label": "Championship bid queue", className: sx(tabsStyle$3) }), jsxRuntime.jsx(Table, { columns: columns, data: pageBids, rowKey: "bidId", loading: loading, emptyContent: jsxRuntime.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." }) }), jsxRuntime.jsx(Pagination, { page: currentPage, pageSize: pageSize, totalItems: bids.length, itemLabel: "bids", ariaLabel: "Championship bids pagination", onPageChange: setPage, onPageSizeChange: (nextSize) => {
29698
29771
  setPageSize(nextSize);
29699
29772
  setPage(1);
29700
29773
  } })] }));
@@ -29709,7 +29782,7 @@ ChampionshipBidsPage.displayName = 'ChampionshipBidsPage';
29709
29782
  * eye on is `.breadcrumb`'s `!important`, which overrides the Breadcrumb
29710
29783
  * component's own padding and has to survive the move verbatim.
29711
29784
  */
29712
- const pageStyle$o = {
29785
+ const pageStyle$p = {
29713
29786
  label: 'CharterBidResponsePage-pageStyle',
29714
29787
  display: 'flex',
29715
29788
  flexDirection: 'column',
@@ -29730,7 +29803,7 @@ const headerStyle$j = {
29730
29803
  flexDirection: 'column',
29731
29804
  gap: 'var(--space-1)',
29732
29805
  };
29733
- const eyebrowStyle$5 = {
29806
+ const eyebrowStyle$6 = {
29734
29807
  label: 'CharterBidResponsePage-eyebrowStyle',
29735
29808
  color: 'var(--fg-4)',
29736
29809
  fontSize: 'var(--fs-xs)',
@@ -29738,7 +29811,7 @@ const eyebrowStyle$5 = {
29738
29811
  letterSpacing: '0.06em',
29739
29812
  textTransform: 'uppercase',
29740
29813
  };
29741
- const titleStyle$f = {
29814
+ const titleStyle$g = {
29742
29815
  label: 'CharterBidResponsePage-titleStyle',
29743
29816
  margin: 0,
29744
29817
  color: 'var(--fg-1)',
@@ -29857,12 +29930,12 @@ const CharterBidResponsePage = ({ program, trips, accountName, tripLevel = true,
29857
29930
  const blockedReason = noBid || pricedInputs
29858
29931
  ? undefined
29859
29932
  : 'Price the trip with the calculator before submitting, or tick “No Bid” to decline.';
29860
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$o), className), "data-test": "charter-bid-response-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$5), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charter-bid-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$j), children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle$5), children: "Bid response" }), jsxRuntime.jsx("h1", { className: sx(titleStyle$f), children: tripLevel ? trips[0]?.tripName : program.bidName })] }), jsxRuntime.jsxs("section", { className: sx(summaryStyle$3), "aria-label": "Team overview", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$6), children: "Team Overview" }), jsxRuntime.jsxs("dl", { className: sx(factsStyle$3), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Team" }), jsxRuntime.jsx("dd", { children: accountName })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Sport" }), jsxRuntime.jsx("dd", { children: program.sport })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Season" }), jsxRuntime.jsx("dd", { children: program.season })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Year" }), jsxRuntime.jsx("dd", { children: program.year })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Due Date" }), jsxRuntime.jsx("dd", { children: formatDate$3(program.dueDate, locale) })] })] })] }), trips.map((trip, index) => (jsxRuntime.jsxs("section", { className: sx(summaryStyle$3), "aria-label": `Trip ${index + 1}`, children: [jsxRuntime.jsxs("h2", { className: sx(sectionTitleStyle$6), children: ["Trip ", index + 1] }), jsxRuntime.jsxs("p", { className: sx(tripMetaStyle), children: [jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("strong", { children: "Bid Type:" }), " ", trip.bidType] }), acmiCarrier && requestedCarrier && (jsxRuntime.jsxs("span", { "data-test": "charter-bid-requested-carrier", children: [jsxRuntime.jsx("strong", { children: "Requested Carrier:" }), " ", requestedCarrier] }))] }), jsxRuntime.jsxs("dl", { className: sx(factsStyle$3), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Depart Date" }), jsxRuntime.jsx("dd", { children: formatDate$3(trip.departureDate, locale) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Travel Party Size" }), jsxRuntime.jsx("dd", { children: trip.travelPartySize })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Route" }), jsxRuntime.jsx("dd", { children: trip.route })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Expires" }), jsxRuntime.jsx("dd", { children: formatDate$3(trip.expirationDate, locale) })] })] })] }, trip.tripGuid))), jsxRuntime.jsxs("section", { className: sx(calculatorStyle), "aria-label": "ACMI calculator", children: [jsxRuntime.jsxs("div", { className: sx(calculatorHeaderStyle), children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$6), children: "Price this trip" }), jsxRuntime.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 ? (jsxRuntime.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." })) : (jsxRuntime.jsx(AcmiQuoteCalculator, { defaultInputs: defaultInputs, result: acmiResult, onCalculate: handleCalculate, locale: locale }))] }), jsxRuntime.jsxs("div", { className: sx(submitBarStyle), children: [jsxRuntime.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" }), jsxRuntime.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 && (jsxRuntime.jsx("p", { className: sx(blockedReasonStyle$1), "data-test": "charter-bid-blocked-reason", children: blockedReason }))] })] }));
29933
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$p), className), "data-test": "charter-bid-response-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$5), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charter-bid-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$j), children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle$6), children: "Bid response" }), jsxRuntime.jsx("h1", { className: sx(titleStyle$g), children: tripLevel ? trips[0]?.tripName : program.bidName })] }), jsxRuntime.jsxs("section", { className: sx(summaryStyle$3), "aria-label": "Team overview", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$6), children: "Team Overview" }), jsxRuntime.jsxs("dl", { className: sx(factsStyle$3), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Team" }), jsxRuntime.jsx("dd", { children: accountName })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Sport" }), jsxRuntime.jsx("dd", { children: program.sport })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Season" }), jsxRuntime.jsx("dd", { children: program.season })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Year" }), jsxRuntime.jsx("dd", { children: program.year })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Due Date" }), jsxRuntime.jsx("dd", { children: formatDate$3(program.dueDate, locale) })] })] })] }), trips.map((trip, index) => (jsxRuntime.jsxs("section", { className: sx(summaryStyle$3), "aria-label": `Trip ${index + 1}`, children: [jsxRuntime.jsxs("h2", { className: sx(sectionTitleStyle$6), children: ["Trip ", index + 1] }), jsxRuntime.jsxs("p", { className: sx(tripMetaStyle), children: [jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("strong", { children: "Bid Type:" }), " ", trip.bidType] }), acmiCarrier && requestedCarrier && (jsxRuntime.jsxs("span", { "data-test": "charter-bid-requested-carrier", children: [jsxRuntime.jsx("strong", { children: "Requested Carrier:" }), " ", requestedCarrier] }))] }), jsxRuntime.jsxs("dl", { className: sx(factsStyle$3), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Depart Date" }), jsxRuntime.jsx("dd", { children: formatDate$3(trip.departureDate, locale) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Travel Party Size" }), jsxRuntime.jsx("dd", { children: trip.travelPartySize })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Route" }), jsxRuntime.jsx("dd", { children: trip.route })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Expires" }), jsxRuntime.jsx("dd", { children: formatDate$3(trip.expirationDate, locale) })] })] })] }, trip.tripGuid))), jsxRuntime.jsxs("section", { className: sx(calculatorStyle), "aria-label": "ACMI calculator", children: [jsxRuntime.jsxs("div", { className: sx(calculatorHeaderStyle), children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$6), children: "Price this trip" }), jsxRuntime.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 ? (jsxRuntime.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." })) : (jsxRuntime.jsx(AcmiQuoteCalculator, { defaultInputs: defaultInputs, result: acmiResult, onCalculate: handleCalculate, locale: locale }))] }), jsxRuntime.jsxs("div", { className: sx(submitBarStyle), children: [jsxRuntime.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" }), jsxRuntime.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 && (jsxRuntime.jsx("p", { className: sx(blockedReasonStyle$1), "data-test": "charter-bid-blocked-reason", children: blockedReason }))] })] }));
29861
29934
  };
29862
29935
  CharterBidResponsePage.displayName = 'CharterBidResponsePage';
29863
29936
 
29864
29937
  /** CharterBidViewPage's compiled rules. */
29865
- const pageStyle$n = {
29938
+ const pageStyle$o = {
29866
29939
  label: 'CharterBidViewPage-pageStyle',
29867
29940
  display: 'flex',
29868
29941
  flexDirection: 'column',
@@ -29883,7 +29956,7 @@ const headerStyle$i = {
29883
29956
  flexDirection: 'column',
29884
29957
  gap: 'var(--space-1)',
29885
29958
  };
29886
- const eyebrowStyle$4 = {
29959
+ const eyebrowStyle$5 = {
29887
29960
  label: 'CharterBidViewPage-eyebrowStyle',
29888
29961
  color: 'var(--fg-4)',
29889
29962
  fontSize: 'var(--fs-xs)',
@@ -29891,7 +29964,7 @@ const eyebrowStyle$4 = {
29891
29964
  letterSpacing: '0.06em',
29892
29965
  textTransform: 'uppercase',
29893
29966
  };
29894
- const titleStyle$e = {
29967
+ const titleStyle$f = {
29895
29968
  label: 'CharterBidViewPage-titleStyle',
29896
29969
  margin: 0,
29897
29970
  color: 'var(--fg-1)',
@@ -30046,7 +30119,7 @@ const SUBMISSION_LABELS = {
30046
30119
  const CharterBidViewPage = ({ program, trip, bids = [], processingSubmission, onRefresh, backLabel = 'Regular Season Bids', onBack, locale = 'en-US', className = '', }) => {
30047
30120
  const currency = React.useMemo(() => new Intl.NumberFormat(locale, { style: 'currency', currency: 'USD' }), [locale]);
30048
30121
  const numbers = React.useMemo(() => new Intl.NumberFormat(locale), [locale]);
30049
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$n), className), "data-test": "charter-bid-view-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$4), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charter-bid-view-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$i), children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle$4), children: "Bid response" }), jsxRuntime.jsx("h1", { className: sx(titleStyle$e), children: trip ? trip.tripName : program.bidName }), jsxRuntime.jsxs("p", { className: sx(subtitleStyle$4), children: [program.team, " \u00B7 ", program.sport, " \u00B7 ", program.season, " ", program.year] })] }), bids.length > 0 && (jsxRuntime.jsx("ol", { className: sx(bidsStyle), children: bids.map((bid, index) => (jsxRuntime.jsxs("li", { className: sx(bidStyle), "data-test": "charter-submitted-bid", children: [jsxRuntime.jsxs("div", { className: sx(bidHeaderStyle), children: [jsxRuntime.jsxs("h2", { className: sx(bidTitleStyle), children: ["Bid ", index + 1] }), jsxRuntime.jsx(StatusBadge, { status: "submitted" })] }), jsxRuntime.jsxs("dl", { className: sx(factsStyle$2), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Seats" }), jsxRuntime.jsx("dd", { children: bid.seats })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Max Payload (lbs)" }), jsxRuntime.jsx("dd", { children: numbers.format(bid.maxPayloadLbs) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Fuel Base ($)" }), jsxRuntime.jsx("dd", { children: currency.format(bid.fuelBasePrice) })] }), jsxRuntime.jsxs("div", { className: sx(totalFactStyle), children: [jsxRuntime.jsx("dt", { children: "Total Cost ($)" }), jsxRuntime.jsx("dd", { "data-test": "charter-bid-total", children: currency.format(bid.totalCost) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Catering Options" }), jsxRuntime.jsx("dd", { children: bid.cateringAvailable })] })] }), bid.notesFromOperator && bid.notesFromOperator.length > 0 && (jsxRuntime.jsxs("div", { className: sx(notesStyle), children: [jsxRuntime.jsx("h3", { className: sx(notesTitleStyle), children: "Notes from Operator" }), jsxRuntime.jsx("ul", { className: sx(notesListStyle), "data-test": "charter-bid-notes", children: bid.notesFromOperator.map((note) => (jsxRuntime.jsx("li", { children: note }, note))) })] }))] }, bid.id))) })), bids.length === 0 && processingSubmission && (jsxRuntime.jsxs("div", { className: sx(processingStyle), "data-test": "charter-bid-processing", children: [jsxRuntime.jsx(Spinner, { size: "lg", label: "Parsing your submission" }), jsxRuntime.jsx("h2", { className: sx(processingTitleStyle), children: "We are still reading your bid" }), jsxRuntime.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 && (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", onClick: onRefresh, "data-test": "charter-bid-refresh", children: "Check again" }))] })), bids.length === 0 && !processingSubmission && (jsxRuntime.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." }))] }));
30122
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$o), className), "data-test": "charter-bid-view-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$4), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charter-bid-view-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$i), children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle$5), children: "Bid response" }), jsxRuntime.jsx("h1", { className: sx(titleStyle$f), children: trip ? trip.tripName : program.bidName }), jsxRuntime.jsxs("p", { className: sx(subtitleStyle$4), children: [program.team, " \u00B7 ", program.sport, " \u00B7 ", program.season, " ", program.year] })] }), bids.length > 0 && (jsxRuntime.jsx("ol", { className: sx(bidsStyle), children: bids.map((bid, index) => (jsxRuntime.jsxs("li", { className: sx(bidStyle), "data-test": "charter-submitted-bid", children: [jsxRuntime.jsxs("div", { className: sx(bidHeaderStyle), children: [jsxRuntime.jsxs("h2", { className: sx(bidTitleStyle), children: ["Bid ", index + 1] }), jsxRuntime.jsx(StatusBadge, { status: "submitted" })] }), jsxRuntime.jsxs("dl", { className: sx(factsStyle$2), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Seats" }), jsxRuntime.jsx("dd", { children: bid.seats })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Max Payload (lbs)" }), jsxRuntime.jsx("dd", { children: numbers.format(bid.maxPayloadLbs) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Fuel Base ($)" }), jsxRuntime.jsx("dd", { children: currency.format(bid.fuelBasePrice) })] }), jsxRuntime.jsxs("div", { className: sx(totalFactStyle), children: [jsxRuntime.jsx("dt", { children: "Total Cost ($)" }), jsxRuntime.jsx("dd", { "data-test": "charter-bid-total", children: currency.format(bid.totalCost) })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Catering Options" }), jsxRuntime.jsx("dd", { children: bid.cateringAvailable })] })] }), bid.notesFromOperator && bid.notesFromOperator.length > 0 && (jsxRuntime.jsxs("div", { className: sx(notesStyle), children: [jsxRuntime.jsx("h3", { className: sx(notesTitleStyle), children: "Notes from Operator" }), jsxRuntime.jsx("ul", { className: sx(notesListStyle), "data-test": "charter-bid-notes", children: bid.notesFromOperator.map((note) => (jsxRuntime.jsx("li", { children: note }, note))) })] }))] }, bid.id))) })), bids.length === 0 && processingSubmission && (jsxRuntime.jsxs("div", { className: sx(processingStyle), "data-test": "charter-bid-processing", children: [jsxRuntime.jsx(Spinner, { size: "lg", label: "Parsing your submission" }), jsxRuntime.jsx("h2", { className: sx(processingTitleStyle), children: "We are still reading your bid" }), jsxRuntime.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 && (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", onClick: onRefresh, "data-test": "charter-bid-refresh", children: "Check again" }))] })), bids.length === 0 && !processingSubmission && (jsxRuntime.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." }))] }));
30050
30123
  };
30051
30124
  CharterBidViewPage.displayName = 'CharterBidViewPage';
30052
30125
 
@@ -30059,7 +30132,7 @@ CharterBidViewPage.displayName = 'CharterBidViewPage';
30059
30132
  * members here, with the group's declarations first and the member's own after,
30060
30133
  * so the last value still wins.
30061
30134
  */
30062
- const pageStyle$m = {
30135
+ const pageStyle$n = {
30063
30136
  label: 'CharterManifestPage-pageStyle',
30064
30137
  display: 'flex',
30065
30138
  flexDirection: 'column',
@@ -30194,7 +30267,7 @@ const railStyle = {
30194
30267
  width: '100%',
30195
30268
  },
30196
30269
  };
30197
- const eyebrowStyle$3 = {
30270
+ const eyebrowStyle$4 = {
30198
30271
  label: 'CharterManifestPage-eyebrowStyle',
30199
30272
  marginBottom: 8,
30200
30273
  color: 'var(--color-slate)',
@@ -30479,7 +30552,7 @@ const CharterManifestPage = ({ tripName, travelStartDate, travelEndDate, seats,
30479
30552
  }
30480
30553
  return a.lastName.localeCompare(b.lastName);
30481
30554
  }), [passengers, sort]);
30482
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$m), className), "data-screen-label": "Charter Trip Manifest", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$h), children: [jsxRuntime.jsxs("div", { className: sx(headerRowStyle$1), children: [jsxRuntime.jsx("button", { type: "button", "aria-label": "Back", className: sx(backStyle), onClick: onBack, children: jsxRuntime.jsx(ChevronLeftIcon, { size: 28 }) }), jsxRuntime.jsxs("h1", { children: [jsxRuntime.jsx("strong", { children: "Manifest" }), jsxRuntime.jsx(ChevronRightIcon$1, { size: 24 }), jsxRuntime.jsx("span", { children: tripName })] }), jsxRuntime.jsxs("div", { className: sx(headerActionsStyle), children: [jsxRuntime.jsx(StatusPill, { sendState: sendState, locked: locked }), jsxRuntime.jsx(Button, { variant: "outline", leftIcon: jsxRuntime.jsx(DocumentIcon, { size: 16 }), disabled: carrierName === 'No carrier selected', onClick: onGenerateFile, children: "Generate File" })] })] }), (travelStartDate || travelEndDate) && (jsxRuntime.jsxs("div", { className: sx(dateRowStyle), children: [jsxRuntime.jsx("span", { children: formatDate$2(travelStartDate) }), jsxRuntime.jsx("span", { className: sx(dateLineStyle), children: "\u25B6" }), jsxRuntime.jsx("span", { children: formatDate$2(travelEndDate) })] })), jsxRuntime.jsxs("div", { className: sx(metaRowStyle), children: [jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx(PlaneIcon$3, { size: 16 }), seats, " seats"] }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx(CubeIcon, { size: 16 }), "Payload limit ", payloadLimit.toLocaleString(), " lb"] })] })] }), jsxRuntime.jsxs("div", { className: sx(layoutStyle), children: [jsxRuntime.jsxs("aside", { className: sx(railStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: sx(eyebrowStyle$3), children: "Flight Manifest" }), jsxRuntime.jsx("div", { className: sx(scopeListStyle), children: [{ id: 'all', label: 'Full Trip', detail: 'All flight segments' }, ...segments].map((item) => (jsxRuntime.jsxs("button", { type: "button", className: cx(sx(scopeStyle), scope === item.id ? sx(activeScopeStyle) : ''), onClick: () => setScope(item.id), children: [jsxRuntime.jsx("strong", { children: item.label }), jsxRuntime.jsx("span", { children: item.detail })] }, item.id))) })] }), segments.length > 0 && (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", disabled: locked, onClick: onSplitSegments, children: "Split by Segment" })), jsxRuntime.jsxs("div", { className: sx(carrierCardStyle), children: [jsxRuntime.jsx("div", { className: sx(eyebrowStyle$3), children: "Carrier" }), jsxRuntime.jsx("strong", { children: carrierName }), jsxRuntime.jsx("p", { children: carrierNote }), jsxRuntime.jsx(Button, { variant: "outline", size: "sm", fullWidth: true, disabled: locked, leftIcon: jsxRuntime.jsx(SettingsIcon, { size: 15 }), onClick: onChangeCarrier, children: "Change Carrier" })] })] }), jsxRuntime.jsxs("main", { className: sx(mainStyle$2), children: [jsxRuntime.jsx("section", { className: sx(capacityCardStyle), children: jsxRuntime.jsx(ManifestCapacityStats, { paxCount: passengers.length, seats: seats, paxWeight: passengerWeight, cargoWeight: cargoWeight, payloadLimit: payloadLimit }) }), jsxRuntime.jsxs("div", { className: sx(viewRowStyle), children: [jsxRuntime.jsx(ManifestViewToggle, { view: view, onView: setView, paxCount: passengers.length, eqCount: equipment.length, locked: locked }), locked && jsxRuntime.jsx("span", { className: sx(lockedMessageStyle), children: "Locked \u2014 coordinate any changes directly with the carrier." })] }), view === 'passengers' ? (jsxRuntime.jsxs("section", { children: [!locked && (jsxRuntime.jsxs("div", { className: sx(tableActionsStyle), children: [jsxRuntime.jsxs("strong", { children: [passengers.length, " Passengers"] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("span", { children: "Order by" }), jsxRuntime.jsx("span", { className: sx(sortToggleStyle), children: ['name', 'type'].map((option) => (jsxRuntime.jsx("button", { type: "button", className: sort === option ? sx(activeSortStyle) : '', onClick: () => setSort(option), children: option }, option))) }), jsxRuntime.jsx(Button, { size: "sm", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 15 }), onClick: onAddPassengers, children: "Add Passengers" })] })] })), jsxRuntime.jsx("div", { className: sx(tableWrapStyle$3), children: jsxRuntime.jsxs("table", { children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { children: "#" }), jsxRuntime.jsx("th", { children: "Passenger" }), jsxRuntime.jsx("th", { children: "Type" }), jsxRuntime.jsx("th", { children: "TSA Screening" }), jsxRuntime.jsx("th", { children: "Personal" }), jsxRuntime.jsx("th", { children: "Carry-On" }), jsxRuntime.jsx("th", { children: "Checked" }), jsxRuntime.jsx("th", { children: "Seat" }), jsxRuntime.jsx("th", {})] }) }), jsxRuntime.jsxs("tbody", { children: [!sortedPassengers.length && jsxRuntime.jsx("tr", { children: jsxRuntime.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) => (jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { children: index + 1 }), jsxRuntime.jsxs("td", { children: [jsxRuntime.jsx("strong", { children: passenger.lastName }), jsxRuntime.jsxs("span", { children: [", ", passenger.firstName] })] }), jsxRuntime.jsx("td", { children: jsxRuntime.jsx(TypeTag, { type: passenger.travelerType }) }), jsxRuntime.jsx("td", { children: passenger.screeningType || '—' }), jsxRuntime.jsxs("td", { children: [passenger.personalWeight ?? 0, " lb"] }), jsxRuntime.jsxs("td", { children: [passenger.carryOnWeight ?? 0, " lb"] }), jsxRuntime.jsxs("td", { children: [passenger.checkedWeight ?? 0, " lb"] }), jsxRuntime.jsx("td", { children: passenger.seatAssignment || '—' }), jsxRuntime.jsx("td", { children: !locked && jsxRuntime.jsx("button", { type: "button", "aria-label": `Remove ${passenger.firstName} ${passenger.lastName}`, className: sx(removeStyle), onClick: () => onRemovePassenger?.(passenger), children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) }) })] }, passenger.id)))] })] }) })] })) : (jsxRuntime.jsxs("section", { children: [!locked && jsxRuntime.jsxs("div", { className: sx(tableActionsStyle), children: [jsxRuntime.jsxs("strong", { children: [equipment.length, " Equipment Items"] }), jsxRuntime.jsx(Button, { size: "sm", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 15 }), onClick: onAddEquipment, children: "Add Equipment" })] }), jsxRuntime.jsx("div", { className: sx(tableWrapStyle$3), children: jsxRuntime.jsxs("table", { children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { children: "Equipment" }), jsxRuntime.jsx("th", { children: "Quantity" }), jsxRuntime.jsx("th", { children: "Weight" }), jsxRuntime.jsx("th", { children: "Total" }), jsxRuntime.jsx("th", {})] }) }), jsxRuntime.jsx("tbody", { children: equipment.map((item) => jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { children: jsxRuntime.jsx("strong", { children: item.name }) }), jsxRuntime.jsx("td", { children: item.quantity }), jsxRuntime.jsxs("td", { children: [item.weight.toLocaleString(), " lb"] }), jsxRuntime.jsxs("td", { children: [(item.quantity * item.weight).toLocaleString(), " lb"] }), jsxRuntime.jsx("td", { children: !locked && jsxRuntime.jsx("button", { type: "button", "aria-label": `Remove ${item.name}`, className: sx(removeStyle), onClick: () => onRemoveEquipment?.(item), children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) }) })] }, item.id)) })] }) })] })), !locked && (jsxRuntime.jsxs("section", { className: sx(finalizeStyle), children: [jsxRuntime.jsx(StatusPill, { sendState: sendState, locked: false }), jsxRuntime.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.' }), jsxRuntime.jsxs("div", { className: sx(finalizeActionsStyle), children: [sendState === 'none' && jsxRuntime.jsx(Button, { onClick: onSendInitial, children: "Send Initial Manifest" }), sendState === 'initial-sent' && jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Button, { onClick: onSendFinal, children: "Send Final Manifest" }), jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", onClick: onUndoInitial, children: "Undo initial" })] })] })] }))] })] })] }));
30555
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$n), className), "data-screen-label": "Charter Trip Manifest", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$h), children: [jsxRuntime.jsxs("div", { className: sx(headerRowStyle$1), children: [jsxRuntime.jsx("button", { type: "button", "aria-label": "Back", className: sx(backStyle), onClick: onBack, children: jsxRuntime.jsx(ChevronLeftIcon, { size: 28 }) }), jsxRuntime.jsxs("h1", { children: [jsxRuntime.jsx("strong", { children: "Manifest" }), jsxRuntime.jsx(ChevronRightIcon$1, { size: 24 }), jsxRuntime.jsx("span", { children: tripName })] }), jsxRuntime.jsxs("div", { className: sx(headerActionsStyle), children: [jsxRuntime.jsx(StatusPill, { sendState: sendState, locked: locked }), jsxRuntime.jsx(Button, { variant: "outline", leftIcon: jsxRuntime.jsx(DocumentIcon, { size: 16 }), disabled: carrierName === 'No carrier selected', onClick: onGenerateFile, children: "Generate File" })] })] }), (travelStartDate || travelEndDate) && (jsxRuntime.jsxs("div", { className: sx(dateRowStyle), children: [jsxRuntime.jsx("span", { children: formatDate$2(travelStartDate) }), jsxRuntime.jsx("span", { className: sx(dateLineStyle), children: "\u25B6" }), jsxRuntime.jsx("span", { children: formatDate$2(travelEndDate) })] })), jsxRuntime.jsxs("div", { className: sx(metaRowStyle), children: [jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx(PlaneIcon$3, { size: 16 }), seats, " seats"] }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx(CubeIcon, { size: 16 }), "Payload limit ", payloadLimit.toLocaleString(), " lb"] })] })] }), jsxRuntime.jsxs("div", { className: sx(layoutStyle), children: [jsxRuntime.jsxs("aside", { className: sx(railStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: sx(eyebrowStyle$4), children: "Flight Manifest" }), jsxRuntime.jsx("div", { className: sx(scopeListStyle), children: [{ id: 'all', label: 'Full Trip', detail: 'All flight segments' }, ...segments].map((item) => (jsxRuntime.jsxs("button", { type: "button", className: cx(sx(scopeStyle), scope === item.id ? sx(activeScopeStyle) : ''), onClick: () => setScope(item.id), children: [jsxRuntime.jsx("strong", { children: item.label }), jsxRuntime.jsx("span", { children: item.detail })] }, item.id))) })] }), segments.length > 0 && (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", disabled: locked, onClick: onSplitSegments, children: "Split by Segment" })), jsxRuntime.jsxs("div", { className: sx(carrierCardStyle), children: [jsxRuntime.jsx("div", { className: sx(eyebrowStyle$4), children: "Carrier" }), jsxRuntime.jsx("strong", { children: carrierName }), jsxRuntime.jsx("p", { children: carrierNote }), jsxRuntime.jsx(Button, { variant: "outline", size: "sm", fullWidth: true, disabled: locked, leftIcon: jsxRuntime.jsx(SettingsIcon, { size: 15 }), onClick: onChangeCarrier, children: "Change Carrier" })] })] }), jsxRuntime.jsxs("main", { className: sx(mainStyle$2), children: [jsxRuntime.jsx("section", { className: sx(capacityCardStyle), children: jsxRuntime.jsx(ManifestCapacityStats, { paxCount: passengers.length, seats: seats, paxWeight: passengerWeight, cargoWeight: cargoWeight, payloadLimit: payloadLimit }) }), jsxRuntime.jsxs("div", { className: sx(viewRowStyle), children: [jsxRuntime.jsx(ManifestViewToggle, { view: view, onView: setView, paxCount: passengers.length, eqCount: equipment.length, locked: locked }), locked && jsxRuntime.jsx("span", { className: sx(lockedMessageStyle), children: "Locked \u2014 coordinate any changes directly with the carrier." })] }), view === 'passengers' ? (jsxRuntime.jsxs("section", { children: [!locked && (jsxRuntime.jsxs("div", { className: sx(tableActionsStyle), children: [jsxRuntime.jsxs("strong", { children: [passengers.length, " Passengers"] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("span", { children: "Order by" }), jsxRuntime.jsx("span", { className: sx(sortToggleStyle), children: ['name', 'type'].map((option) => (jsxRuntime.jsx("button", { type: "button", className: sort === option ? sx(activeSortStyle) : '', onClick: () => setSort(option), children: option }, option))) }), jsxRuntime.jsx(Button, { size: "sm", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 15 }), onClick: onAddPassengers, children: "Add Passengers" })] })] })), jsxRuntime.jsx("div", { className: sx(tableWrapStyle$3), children: jsxRuntime.jsxs("table", { children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { children: "#" }), jsxRuntime.jsx("th", { children: "Passenger" }), jsxRuntime.jsx("th", { children: "Type" }), jsxRuntime.jsx("th", { children: "TSA Screening" }), jsxRuntime.jsx("th", { children: "Personal" }), jsxRuntime.jsx("th", { children: "Carry-On" }), jsxRuntime.jsx("th", { children: "Checked" }), jsxRuntime.jsx("th", { children: "Seat" }), jsxRuntime.jsx("th", {})] }) }), jsxRuntime.jsxs("tbody", { children: [!sortedPassengers.length && jsxRuntime.jsx("tr", { children: jsxRuntime.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) => (jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { children: index + 1 }), jsxRuntime.jsxs("td", { children: [jsxRuntime.jsx("strong", { children: passenger.lastName }), jsxRuntime.jsxs("span", { children: [", ", passenger.firstName] })] }), jsxRuntime.jsx("td", { children: jsxRuntime.jsx(TypeTag, { type: passenger.travelerType }) }), jsxRuntime.jsx("td", { children: passenger.screeningType || '—' }), jsxRuntime.jsxs("td", { children: [passenger.personalWeight ?? 0, " lb"] }), jsxRuntime.jsxs("td", { children: [passenger.carryOnWeight ?? 0, " lb"] }), jsxRuntime.jsxs("td", { children: [passenger.checkedWeight ?? 0, " lb"] }), jsxRuntime.jsx("td", { children: passenger.seatAssignment || '—' }), jsxRuntime.jsx("td", { children: !locked && jsxRuntime.jsx("button", { type: "button", "aria-label": `Remove ${passenger.firstName} ${passenger.lastName}`, className: sx(removeStyle), onClick: () => onRemovePassenger?.(passenger), children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) }) })] }, passenger.id)))] })] }) })] })) : (jsxRuntime.jsxs("section", { children: [!locked && jsxRuntime.jsxs("div", { className: sx(tableActionsStyle), children: [jsxRuntime.jsxs("strong", { children: [equipment.length, " Equipment Items"] }), jsxRuntime.jsx(Button, { size: "sm", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 15 }), onClick: onAddEquipment, children: "Add Equipment" })] }), jsxRuntime.jsx("div", { className: sx(tableWrapStyle$3), children: jsxRuntime.jsxs("table", { children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { children: "Equipment" }), jsxRuntime.jsx("th", { children: "Quantity" }), jsxRuntime.jsx("th", { children: "Weight" }), jsxRuntime.jsx("th", { children: "Total" }), jsxRuntime.jsx("th", {})] }) }), jsxRuntime.jsx("tbody", { children: equipment.map((item) => jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { children: jsxRuntime.jsx("strong", { children: item.name }) }), jsxRuntime.jsx("td", { children: item.quantity }), jsxRuntime.jsxs("td", { children: [item.weight.toLocaleString(), " lb"] }), jsxRuntime.jsxs("td", { children: [(item.quantity * item.weight).toLocaleString(), " lb"] }), jsxRuntime.jsx("td", { children: !locked && jsxRuntime.jsx("button", { type: "button", "aria-label": `Remove ${item.name}`, className: sx(removeStyle), onClick: () => onRemoveEquipment?.(item), children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) }) })] }, item.id)) })] }) })] })), !locked && (jsxRuntime.jsxs("section", { className: sx(finalizeStyle), children: [jsxRuntime.jsx(StatusPill, { sendState: sendState, locked: false }), jsxRuntime.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.' }), jsxRuntime.jsxs("div", { className: sx(finalizeActionsStyle), children: [sendState === 'none' && jsxRuntime.jsx(Button, { onClick: onSendInitial, children: "Send Initial Manifest" }), sendState === 'initial-sent' && jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Button, { onClick: onSendFinal, children: "Send Final Manifest" }), jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", onClick: onUndoInitial, children: "Undo initial" })] })] })] }))] })] })] }));
30483
30556
  };
30484
30557
 
30485
30558
  /**
@@ -30498,7 +30571,7 @@ const mutedCopy = {
30498
30571
  margin: 0,
30499
30572
  color: 'var(--color-slate)',
30500
30573
  };
30501
- const pageStyle$l = {
30574
+ const pageStyle$m = {
30502
30575
  label: 'ChartersAccessManagementPage-pageStyle',
30503
30576
  maxWidth: 1180,
30504
30577
  margin: '0 auto',
@@ -30533,7 +30606,7 @@ const headingRowStyle = {
30533
30606
  flexDirection: 'column',
30534
30607
  },
30535
30608
  };
30536
- const eyebrowStyle$2 = {
30609
+ const eyebrowStyle$3 = {
30537
30610
  label: 'ChartersAccessManagementPage-eyebrowStyle',
30538
30611
  ...mutedCopy,
30539
30612
  marginBottom: 8,
@@ -30716,14 +30789,14 @@ const avatarStyle = {
30716
30789
  fontSize: 12,
30717
30790
  fontWeight: 'var(--fw-semibold)',
30718
30791
  };
30719
- const nameStyle = {
30792
+ const nameStyle$1 = {
30720
30793
  label: 'ChartersAccessManagementPage-nameStyle',
30721
30794
  display: 'flex',
30722
30795
  alignItems: 'center',
30723
30796
  gap: 7,
30724
30797
  fontWeight: 'var(--fw-semibold)',
30725
30798
  };
30726
- const titleStyle$d = {
30799
+ const titleStyle$e = {
30727
30800
  label: 'ChartersAccessManagementPage-titleStyle',
30728
30801
  display: 'block',
30729
30802
  marginTop: 2,
@@ -30870,7 +30943,7 @@ const ChartersAccessManagementPage = ({ accountName, memberships, availableAccou
30870
30943
  const addUnavailableReason = !onAddAccess
30871
30944
  ? 'Adding STM Charters access is not available in this view.'
30872
30945
  : undefined;
30873
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$l), className), "data-test": "charters-access-management-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$g), children: [onBack && (jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charters-access-back", children: "STM Charters" })), jsxRuntime.jsxs("div", { className: sx(headingRowStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("p", { className: sx(eyebrowStyle$2), children: ["STM Charters \u00B7 ", accountName] }), jsxRuntime.jsx("h1", { children: "Access Management" }), jsxRuntime.jsx("p", { className: sx(descriptionStyle$6), children: "Grant account users access to charter bids and choose who can manage membership." })] }), jsxRuntime.jsxs("div", { className: sx(summaryStyle$2), "aria-label": "Access summary", children: [jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("strong", { children: memberships.length }), " members"] }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("strong", { children: adminCount }), " admins"] })] })] })] }), loading && (jsxRuntime.jsxs("div", { className: sx(pageStateStyle$1), "data-test": "charters-access-loading", children: [jsxRuntime.jsx(Spinner, { size: "lg", label: "Loading STM Charters access" }), jsxRuntime.jsx("p", { children: "Loading STM Charters access\u2026" })] })), !loading && error && (jsxRuntime.jsxs("div", { className: sx(pageStateStyle$1), "data-test": "charters-access-error", children: [jsxRuntime.jsx(Alert, { variant: "error", title: "Access could not be loaded", children: error }), onRetry && (jsxRuntime.jsx(Button, { type: "button", variant: "outline", onClick: onRetry, "data-test": "charters-access-retry", children: "Try again" }))] })), !loading && !error && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [actionError && (jsxRuntime.jsx(Alert, { variant: "error", title: "Access change failed", dismissible: true, onDismiss: () => setActionError(undefined), className: sx(actionErrorStyle$1), children: jsxRuntime.jsx("span", { "data-test": "charters-access-action-error", children: actionError }) })), canManageAccess ? (jsxRuntime.jsxs("section", { className: sx(addPanelStyle), "data-test": "charters-access-add-panel", children: [jsxRuntime.jsxs("div", { className: sx(sectionHeadingStyle$1), children: [jsxRuntime.jsx("span", { className: sx(sectionIconStyle), children: jsxRuntime.jsx(UsersIcon$1, { size: 20 }) }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { children: "Add account users" }), jsxRuntime.jsxs("p", { children: ["Search and select one or more existing users of ", accountName, " to grant STM Charters access."] })] })] }), jsxRuntime.jsxs("div", { className: sx(addControlsStyle), children: [jsxRuntime.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" }), jsxRuntime.jsxs("div", { className: sx(addActionsRowStyle), children: [jsxRuntime.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" }), jsxRuntime.jsx(Button, { type: "button", onClick: addSelectedUsers, disabled: !hasSelectedUsers || Boolean(addUnavailableReason), loading: pendingAction === 'add', title: addUnavailableReason, "data-test": "charters-access-add", children: selectedUsers.length > 1
30946
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$m), className), "data-test": "charters-access-management-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$g), children: [onBack && (jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "charters-access-back", children: "STM Charters" })), jsxRuntime.jsxs("div", { className: sx(headingRowStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("p", { className: sx(eyebrowStyle$3), children: ["STM Charters \u00B7 ", accountName] }), jsxRuntime.jsx("h1", { children: "Access Management" }), jsxRuntime.jsx("p", { className: sx(descriptionStyle$6), children: "Grant account users access to charter bids and choose who can manage membership." })] }), jsxRuntime.jsxs("div", { className: sx(summaryStyle$2), "aria-label": "Access summary", children: [jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("strong", { children: memberships.length }), " members"] }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsx("strong", { children: adminCount }), " admins"] })] })] })] }), loading && (jsxRuntime.jsxs("div", { className: sx(pageStateStyle$1), "data-test": "charters-access-loading", children: [jsxRuntime.jsx(Spinner, { size: "lg", label: "Loading STM Charters access" }), jsxRuntime.jsx("p", { children: "Loading STM Charters access\u2026" })] })), !loading && error && (jsxRuntime.jsxs("div", { className: sx(pageStateStyle$1), "data-test": "charters-access-error", children: [jsxRuntime.jsx(Alert, { variant: "error", title: "Access could not be loaded", children: error }), onRetry && (jsxRuntime.jsx(Button, { type: "button", variant: "outline", onClick: onRetry, "data-test": "charters-access-retry", children: "Try again" }))] })), !loading && !error && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [actionError && (jsxRuntime.jsx(Alert, { variant: "error", title: "Access change failed", dismissible: true, onDismiss: () => setActionError(undefined), className: sx(actionErrorStyle$1), children: jsxRuntime.jsx("span", { "data-test": "charters-access-action-error", children: actionError }) })), canManageAccess ? (jsxRuntime.jsxs("section", { className: sx(addPanelStyle), "data-test": "charters-access-add-panel", children: [jsxRuntime.jsxs("div", { className: sx(sectionHeadingStyle$1), children: [jsxRuntime.jsx("span", { className: sx(sectionIconStyle), children: jsxRuntime.jsx(UsersIcon$1, { size: 20 }) }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { children: "Add account users" }), jsxRuntime.jsxs("p", { children: ["Search and select one or more existing users of ", accountName, " to grant STM Charters access."] })] })] }), jsxRuntime.jsxs("div", { className: sx(addControlsStyle), children: [jsxRuntime.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" }), jsxRuntime.jsxs("div", { className: sx(addActionsRowStyle), children: [jsxRuntime.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" }), jsxRuntime.jsx(Button, { type: "button", onClick: addSelectedUsers, disabled: !hasSelectedUsers || Boolean(addUnavailableReason), loading: pendingAction === 'add', title: addUnavailableReason, "data-test": "charters-access-add", children: selectedUsers.length > 1
30874
30947
  ? `Add ${selectedUsers.length} users`
30875
30948
  : 'Add access' })] })] })] })) : (jsxRuntime.jsx(Alert, { variant: "primary", title: "Read-only access", className: sx(readOnlyNoticeStyle$1), children: jsxRuntime.jsx("span", { "data-test": "charters-access-read-only", children: readOnlyMessage }) })), jsxRuntime.jsxs("section", { className: sx(membersPanelStyle), "aria-labelledby": "charters-access-members-heading", children: [jsxRuntime.jsxs("div", { className: sx(membersHeadingStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { id: "charters-access-members-heading", children: "People with STM Charters access" }), jsxRuntime.jsx("p", { children: "Members use carrier workflows. Admins can also manage this list." })] }), jsxRuntime.jsx(LockIcon$1, { size: 20, "aria-hidden": "true" })] }), memberships.length === 0 ? (jsxRuntime.jsx("div", { "data-test": "charters-access-empty", children: jsxRuntime.jsx(EmptyState$1, { title: "No STM Charters members", description: canManageAccess
30876
30949
  ? 'Search for an existing account user above to grant the first membership.'
@@ -30884,7 +30957,7 @@ const ChartersAccessManagementPage = ({ accountName, memberships, availableAccou
30884
30957
  ?? (!onChangeRole ? 'Changing roles is not available in this view.' : undefined);
30885
30958
  const removeDisabledReason = membership.removeDisabledReason
30886
30959
  ?? (!onRemoveAccess ? 'Removing access is not available in this view.' : undefined);
30887
- return (jsxRuntime.jsxs("tr", { "data-test": `charters-access-row-${membershipKey}`, children: [jsxRuntime.jsx("td", { children: jsxRuntime.jsxs("div", { className: sx(personStyle$1), children: [jsxRuntime.jsx("span", { className: sx(avatarStyle), "aria-hidden": "true", children: membership.name.split(/\s+/).map((part) => part[0]).join('').slice(0, 2) }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsxs("span", { className: sx(nameStyle), children: [membership.name, isCurrentUser && jsxRuntime.jsx(Badge, { variant: "info", size: "sm", children: "You" })] }), membership.title && jsxRuntime.jsx("span", { className: sx(titleStyle$d), children: membership.title })] })] }) }), jsxRuntime.jsx("td", { children: jsxRuntime.jsx("a", { href: `mailto:${membership.email}`, children: membership.email }) }), jsxRuntime.jsx("td", { children: canManageAccess ? (jsxRuntime.jsxs("div", { className: sx(roleControlStyle), children: [jsxRuntime.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 && jsxRuntime.jsx(Spinner, { size: "xs", label: `Saving ${membership.name}'s role` }), roleDisabledReason && jsxRuntime.jsx("span", { className: sx(guardStyle), children: roleDisabledReason })] })) : (jsxRuntime.jsx(Badge, { variant: membership.role === 'admin' ? 'info' : 'default', children: membership.role === 'admin' ? 'Admin' : 'Member' })) }), canManageAccess && (jsxRuntime.jsxs("td", { className: sx(actionCellStyle$1), children: [jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", square: true, "aria-label": `Remove ${membership.name} from STM Charters`, title: removeDisabledReason, leftIcon: jsxRuntime.jsx(TrashIcon$2, { size: 16 }), disabled: Boolean(removeDisabledReason) || Boolean(pendingAction), loading: removePending, onClick: () => setRemoveTarget(membership), "data-test": `charters-access-remove-${membershipKey}` }), removeDisabledReason && (jsxRuntime.jsx("span", { className: cx(sx(guardStyle), sx(guardInActionCellStyle)), children: removeDisabledReason }))] }))] }, membership.membershipId));
30960
+ return (jsxRuntime.jsxs("tr", { "data-test": `charters-access-row-${membershipKey}`, children: [jsxRuntime.jsx("td", { children: jsxRuntime.jsxs("div", { className: sx(personStyle$1), children: [jsxRuntime.jsx("span", { className: sx(avatarStyle), "aria-hidden": "true", children: membership.name.split(/\s+/).map((part) => part[0]).join('').slice(0, 2) }), jsxRuntime.jsxs("span", { children: [jsxRuntime.jsxs("span", { className: sx(nameStyle$1), children: [membership.name, isCurrentUser && jsxRuntime.jsx(Badge, { variant: "info", size: "sm", children: "You" })] }), membership.title && jsxRuntime.jsx("span", { className: sx(titleStyle$e), children: membership.title })] })] }) }), jsxRuntime.jsx("td", { children: jsxRuntime.jsx("a", { href: `mailto:${membership.email}`, children: membership.email }) }), jsxRuntime.jsx("td", { children: canManageAccess ? (jsxRuntime.jsxs("div", { className: sx(roleControlStyle), children: [jsxRuntime.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 && jsxRuntime.jsx(Spinner, { size: "xs", label: `Saving ${membership.name}'s role` }), roleDisabledReason && jsxRuntime.jsx("span", { className: sx(guardStyle), children: roleDisabledReason })] })) : (jsxRuntime.jsx(Badge, { variant: membership.role === 'admin' ? 'info' : 'default', children: membership.role === 'admin' ? 'Admin' : 'Member' })) }), canManageAccess && (jsxRuntime.jsxs("td", { className: sx(actionCellStyle$1), children: [jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", square: true, "aria-label": `Remove ${membership.name} from STM Charters`, title: removeDisabledReason, leftIcon: jsxRuntime.jsx(TrashIcon$2, { size: 16 }), disabled: Boolean(removeDisabledReason) || Boolean(pendingAction), loading: removePending, onClick: () => setRemoveTarget(membership), "data-test": `charters-access-remove-${membershipKey}` }), removeDisabledReason && (jsxRuntime.jsx("span", { className: cx(sx(guardStyle), sx(guardInActionCellStyle)), children: removeDisabledReason }))] }))] }, membership.membershipId));
30888
30961
  }) })] }) }))] })] })), jsxRuntime.jsx(Modal, { isOpen: Boolean(removeTarget), onClose: () => {
30889
30962
  if (!pendingAction)
30890
30963
  setRemoveTarget(undefined);
@@ -30898,7 +30971,7 @@ ChartersAccessManagementPage.displayName = 'ChartersAccessManagementPage';
30898
30971
  * `@media` block at the foot of the file is now nested inside `pageStyle`,
30899
30972
  * which is the only rule it applied to.
30900
30973
  */
30901
- const pageStyle$k = {
30974
+ const pageStyle$l = {
30902
30975
  label: 'ChartersHomePage-pageStyle',
30903
30976
  display: 'flex',
30904
30977
  flexDirection: 'column',
@@ -30915,7 +30988,7 @@ const headerStyle$f = {
30915
30988
  alignItems: 'flex-start',
30916
30989
  gap: 'var(--space-2)',
30917
30990
  };
30918
- const titleStyle$c = {
30991
+ const titleStyle$d = {
30919
30992
  label: 'ChartersHomePage-titleStyle',
30920
30993
  margin: 0,
30921
30994
  color: 'var(--fg-1)',
@@ -30944,7 +31017,7 @@ const cardsStyle = {
30944
31017
  padding: 0,
30945
31018
  listStyle: 'none',
30946
31019
  };
30947
- const cardStyle$4 = {
31020
+ const cardStyle$5 = {
30948
31021
  label: 'ChartersHomePage-cardStyle',
30949
31022
  display: 'flex',
30950
31023
  alignItems: 'flex-start',
@@ -31166,7 +31239,7 @@ const CHARTER_CONTACT_GROUPS = [
31166
31239
  * welcome paragraph and a PDF link; this keeps the same information architecture but
31167
31240
  * puts a real card into each section with the queue count already visible.
31168
31241
  */
31169
- 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 = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$k), className), "data-test": "charters-home-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$f), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$c), children: title }), description && jsxRuntime.jsx("p", { className: sx(descriptionStyle$5), children: description }), onOpenTutorial && (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", className: sx(tutorialStyle), leftIcon: jsxRuntime.jsx(DocumentIcon, { size: 16 }), onClick: onOpenTutorial, "data-test": "charters-tutorial", children: tutorialLabel }))] }), jsxRuntime.jsx("ul", { className: sx(cardsStyle), children: sections.map((section) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("button", { type: "button", className: sx(cardStyle$4), onClick: () => onOpenSection?.(section.key), "data-test": `charters-section-${section.key}`, children: [jsxRuntime.jsx("span", { className: sx(cardIconStyle), "aria-hidden": "true", children: section.icon ?? SECTION_ICONS[section.key] ?? jsxRuntime.jsx(PlaneIcon$3, { size: 20 }) }), jsxRuntime.jsxs("span", { className: sx(cardBodyStyle$2), children: [jsxRuntime.jsx("span", { className: sx(cardTitleStyle$1), children: section.title }), jsxRuntime.jsx("span", { className: sx(cardDescriptionStyle), children: section.description }), section.loading ? (jsxRuntime.jsx("span", { className: sx(cardLoadingStyle), "data-test": `charters-section-${section.key}-loading`, children: jsxRuntime.jsx(Spinner, { size: "xs", label: `Loading ${section.title}` }) })) : section.count !== undefined ? (jsxRuntime.jsxs("span", { className: sx(cardCountStyle), children: [jsxRuntime.jsx("strong", { children: section.count }), " ", section.countLabel ?? 'items'] })) : null] }), jsxRuntime.jsx("span", { className: sx(cardArrowStyle), "aria-hidden": "true", children: jsxRuntime.jsx(ArrowUpRightIcon, { size: 16 }) })] }) }, section.key))) }), jsxRuntime.jsxs("section", { className: sx(contactsStyle), "aria-label": "Contact us", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$5), children: "Questions? Talk to us" }), jsxRuntime.jsx("div", { className: sx(contactGroupsStyle), children: contactGroups.map((group) => (jsxRuntime.jsxs("div", { className: sx(contactGroupStyle$1), children: [jsxRuntime.jsx("h3", { className: sx(contactGroupTitleStyle), children: group.title }), jsxRuntime.jsx("ul", { className: sx(contactListStyle), children: group.contacts.map((contact) => (jsxRuntime.jsxs("li", { className: sx(contactStyle), children: [jsxRuntime.jsx("span", { className: sx(contactNameStyle), children: contact.name }), contact.role && jsxRuntime.jsx("span", { className: sx(contactRoleStyle), children: contact.role }), jsxRuntime.jsxs("span", { className: sx(contactLinksStyle), children: [contact.email && (jsxRuntime.jsxs("a", { href: `mailto:${contact.email}`, className: sx(contactLinkStyle), children: [jsxRuntime.jsx(MailIcon, { size: 14, "aria-hidden": "true" }), contact.email] })), contact.phone && (jsxRuntime.jsxs("a", { href: `tel:${contact.phone}`, className: sx(contactLinkStyle), children: [jsxRuntime.jsx(PhoneIcon, { size: 14, "aria-hidden": "true" }), contact.phone] }))] })] }, contact.name))) })] }, group.title))) })] })] }));
31242
+ 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 = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$l), className), "data-test": "charters-home-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$f), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$d), children: title }), description && jsxRuntime.jsx("p", { className: sx(descriptionStyle$5), children: description }), onOpenTutorial && (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", className: sx(tutorialStyle), leftIcon: jsxRuntime.jsx(DocumentIcon, { size: 16 }), onClick: onOpenTutorial, "data-test": "charters-tutorial", children: tutorialLabel }))] }), jsxRuntime.jsx("ul", { className: sx(cardsStyle), children: sections.map((section) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("button", { type: "button", className: sx(cardStyle$5), onClick: () => onOpenSection?.(section.key), "data-test": `charters-section-${section.key}`, children: [jsxRuntime.jsx("span", { className: sx(cardIconStyle), "aria-hidden": "true", children: section.icon ?? SECTION_ICONS[section.key] ?? jsxRuntime.jsx(PlaneIcon$3, { size: 20 }) }), jsxRuntime.jsxs("span", { className: sx(cardBodyStyle$2), children: [jsxRuntime.jsx("span", { className: sx(cardTitleStyle$1), children: section.title }), jsxRuntime.jsx("span", { className: sx(cardDescriptionStyle), children: section.description }), section.loading ? (jsxRuntime.jsx("span", { className: sx(cardLoadingStyle), "data-test": `charters-section-${section.key}-loading`, children: jsxRuntime.jsx(Spinner, { size: "xs", label: `Loading ${section.title}` }) })) : section.count !== undefined ? (jsxRuntime.jsxs("span", { className: sx(cardCountStyle), children: [jsxRuntime.jsx("strong", { children: section.count }), " ", section.countLabel ?? 'items'] })) : null] }), jsxRuntime.jsx("span", { className: sx(cardArrowStyle), "aria-hidden": "true", children: jsxRuntime.jsx(ArrowUpRightIcon, { size: 16 }) })] }) }, section.key))) }), jsxRuntime.jsxs("section", { className: sx(contactsStyle), "aria-label": "Contact us", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$5), children: "Questions? Talk to us" }), jsxRuntime.jsx("div", { className: sx(contactGroupsStyle), children: contactGroups.map((group) => (jsxRuntime.jsxs("div", { className: sx(contactGroupStyle$1), children: [jsxRuntime.jsx("h3", { className: sx(contactGroupTitleStyle), children: group.title }), jsxRuntime.jsx("ul", { className: sx(contactListStyle), children: group.contacts.map((contact) => (jsxRuntime.jsxs("li", { className: sx(contactStyle), children: [jsxRuntime.jsx("span", { className: sx(contactNameStyle), children: contact.name }), contact.role && jsxRuntime.jsx("span", { className: sx(contactRoleStyle), children: contact.role }), jsxRuntime.jsxs("span", { className: sx(contactLinksStyle), children: [contact.email && (jsxRuntime.jsxs("a", { href: `mailto:${contact.email}`, className: sx(contactLinkStyle), children: [jsxRuntime.jsx(MailIcon, { size: 14, "aria-hidden": "true" }), contact.email] })), contact.phone && (jsxRuntime.jsxs("a", { href: `tel:${contact.phone}`, className: sx(contactLinkStyle), children: [jsxRuntime.jsx(PhoneIcon, { size: 14, "aria-hidden": "true" }), contact.phone] }))] })] }, contact.name))) })] }, group.title))) })] })] }));
31170
31243
  ChartersHomePage.displayName = 'ChartersHomePage';
31171
31244
 
31172
31245
  /**
@@ -31184,7 +31257,7 @@ ChartersHomePage.displayName = 'ChartersHomePage';
31184
31257
  * rather than classes stacked on one element, so `emergencyLabelStyle` simply
31185
31258
  * carries the merged result.
31186
31259
  */
31187
- const pageStyle$j = {
31260
+ const pageStyle$k = {
31188
31261
  label: 'ContactUsPage-pageStyle',
31189
31262
  color: 'var(--color-ink, #282828)',
31190
31263
  '@media print': {
@@ -31245,7 +31318,7 @@ const stackStyle$1 = {
31245
31318
  };
31246
31319
  /* Outline card: a hairline border on white with a navy accent down the left
31247
31320
  edge, and the section name as a small uppercase eyebrow over the content. */
31248
- const cardStyle$3 = {
31321
+ const cardStyle$4 = {
31249
31322
  label: 'ContactUsPage-cardStyle',
31250
31323
  border: '1px solid var(--color-line, #dce5ef)',
31251
31324
  borderLeft: '6px solid var(--color-primary, #19345f)',
@@ -31475,7 +31548,7 @@ const warningStyle = {
31475
31548
 
31476
31549
  const cleanEmail = (email) => email?.replace('.invalid', '');
31477
31550
  const ContactField = ({ label, children, emergency = false }) => (jsxRuntime.jsxs("div", { className: sx(fieldStyle$2), children: [jsxRuntime.jsxs("span", { className: emergency ? sx(emergencyLabelStyle) : sx(labelStyle$2), children: [label, emergency && jsxRuntime.jsx("span", { className: sx(emergencyDotStyle) })] }), jsxRuntime.jsx("div", { className: sx(fieldValueStyle), children: children })] }));
31478
- const ContactCard = ({ title, children }) => (jsxRuntime.jsxs("section", { className: sx(cardStyle$3), children: [title && jsxRuntime.jsx("h2", { children: title }), jsxRuntime.jsx("div", { className: sx(cardBodyStyle$1), children: children })] }));
31551
+ const ContactCard = ({ title, children }) => (jsxRuntime.jsxs("section", { className: sx(cardStyle$4), children: [title && jsxRuntime.jsx("h2", { children: title }), jsxRuntime.jsx("div", { className: sx(cardBodyStyle$1), children: children })] }));
31479
31552
  /**
31480
31553
  * One account contact card: the row's own labels and values, in the order the
31481
31554
  * caller put them in. Blank values are the caller's to drop — an empty line
@@ -31501,7 +31574,7 @@ const ContactUsPage = ({ title = 'Your Team of Experts', state, errorMessage = '
31501
31574
  if (resolvedState === 'error' || resolvedState === 'empty') {
31502
31575
  return (jsxRuntime.jsx("div", { className: sx(centeredStateStyle), "data-test": "contact-us-page", children: jsxRuntime.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.' }) }));
31503
31576
  }
31504
- return (jsxRuntime.jsx("div", { className: cx(sx(pageStyle$j), className), "data-test": "contact-us-page", children: jsxRuntime.jsxs("div", { className: sx(containerStyle), children: [jsxRuntime.jsxs("div", { className: sx(headerRowStyle), children: [jsxRuntime.jsx(PageHeader, { title: title }), jsxRuntime.jsx("div", { className: sx(printRowStyle), children: jsxRuntime.jsxs("button", { type: "button", onClick: onPrint ?? (() => window.print()), children: [jsxRuntime.jsx(PrinterIcon, { size: 16 }), "Print"] }) })] }), children ?? (data ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!(data.accountManagers?.length || data.travelAgents?.length) && (jsxRuntime.jsxs("div", { className: sx(primaryGridStyle), children: [jsxRuntime.jsx(SimpleContactCard, { title: "Account Manager", contacts: data.accountManagers }), jsxRuntime.jsx(SimpleContactCard, { title: "Travel Agent", contacts: data.travelAgents })] })), jsxRuntime.jsxs("div", { className: sx(stackStyle$1), children: [data.accountContacts ? (data.accountContacts.map((section, index) => (
31577
+ return (jsxRuntime.jsx("div", { className: cx(sx(pageStyle$k), className), "data-test": "contact-us-page", children: jsxRuntime.jsxs("div", { className: sx(containerStyle), children: [jsxRuntime.jsxs("div", { className: sx(headerRowStyle), children: [jsxRuntime.jsx(PageHeader, { title: title }), jsxRuntime.jsx("div", { className: sx(printRowStyle), children: jsxRuntime.jsxs("button", { type: "button", onClick: onPrint ?? (() => window.print()), children: [jsxRuntime.jsx(PrinterIcon, { size: 16 }), "Print"] }) })] }), children ?? (data ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!(data.accountManagers?.length || data.travelAgents?.length) && (jsxRuntime.jsxs("div", { className: sx(primaryGridStyle), children: [jsxRuntime.jsx(SimpleContactCard, { title: "Account Manager", contacts: data.accountManagers }), jsxRuntime.jsx(SimpleContactCard, { title: "Travel Agent", contacts: data.travelAgents })] })), jsxRuntime.jsxs("div", { className: sx(stackStyle$1), children: [data.accountContacts ? (data.accountContacts.map((section, index) => (
31505
31578
  // Two rows can share a description, so position is the stable key.
31506
31579
  jsxRuntime.jsx(AccountContactCard, { section: section }, `${section.title}-${index}`)))) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(ContactCard, { title: "Group/Team Commercial Reservation Specialists", children: [jsxRuntime.jsx(ContactField, { label: "Business Hours:", children: jsxRuntime.jsx("span", { children: "Monday \u2013 Friday 8am-8pm ET" }) }), jsxRuntime.jsx(ContactField, { label: "Toll-Free Number:", children: jsxRuntime.jsx("span", { children: "866-902-9654" }) }), jsxRuntime.jsx(ContactField, { label: "After Hours/Emergency (24/7):", emergency: true, children: jsxRuntime.jsx("span", { className: sx(emergencyStyle), children: "866-902-9654" }) }), jsxRuntime.jsx(ContactField, { label: "Email:", children: jsxRuntime.jsx("a", { href: "mailto:teamtravel@shortstravel.com", children: "teamtravel@shortstravel.com" }) })] }), jsxRuntime.jsxs(ContactCard, { title: "Recruiting Travel Specialists", children: [jsxRuntime.jsx(ContactField, { label: "Business Hours:", children: jsxRuntime.jsx("span", { children: "Monday \u2013 Friday 8am-8pm ET" }) }), jsxRuntime.jsx(ContactField, { label: "Toll-Free Number:", children: jsxRuntime.jsx("span", { children: "866-902-9654" }) }), jsxRuntime.jsx(ContactField, { label: "After Hours/Emergency (24/7):", emergency: true, children: jsxRuntime.jsx("span", { className: sx(emergencyStyle), children: "866-902-9654" }) }), jsxRuntime.jsx(ContactField, { label: "Email:", children: jsxRuntime.jsx("a", { href: "mailto:recruiting@shortstravel.com", children: "recruiting@shortstravel.com" }) })] })] })), !!data.charterAirContacts?.length && jsxRuntime.jsx(ContactCard, { title: "Charter Air", children: jsxRuntime.jsx(PairedContacts, { contacts: data.charterAirContacts }) }), !!data.motorcoachContacts?.length && (jsxRuntime.jsxs(ContactCard, { title: "Charter Bus / Motorcoach", children: [jsxRuntime.jsx(PairedContacts, { contacts: data.motorcoachContacts }), jsxRuntime.jsx("p", { className: sx(motorcoachEmergencyStyle), children: "After Hours/Emergency (24/7): 319-423-3007" })] })), !!data.groupHotelContacts?.length && (jsxRuntime.jsx(ContactCard, { title: "Group Hotel", children: data.groupHotelContacts.map((contact, index) => (jsxRuntime.jsxs("div", { className: sx(contactPairStyle), children: [jsxRuntime.jsx(ContactColumn, { title: "Sales Contact", contact: contact }), jsxRuntime.jsx("div", { className: sx(contactColumnStyle) })] }, `${contact.email ?? contact.name}-${index}`))) }))] })] })) : jsxRuntime.jsx(GenericCards, { cards: cards })), showSupportFooter && (jsxRuntime.jsxs("footer", { className: sx(supportStyle), children: [jsxRuntime.jsx("h2", { children: "Short's Travel Website and Online Booking Tool Support" }), jsxRuntime.jsx("p", { children: "Monday \u2013 Friday 9am-9pm ET, except major holidays" }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("span", { children: "319-257-5309" }), jsxRuntime.jsx("a", { href: "mailto:onlinesupport@shortstravel.com", children: "onlinesupport@shortstravel.com" })] })] }))] }) }));
31507
31580
  };
@@ -31523,7 +31596,7 @@ const ContactUsPage = ({ title = 'Your Team of Experts', state, errorMessage = '
31523
31596
  * The `pulse` keyframes are namespaced `stm-pulse` — injected at runtime they
31524
31597
  * would otherwise be global and collide with a host's own `pulse`.
31525
31598
  */
31526
- const pageStyle$i = {
31599
+ const pageStyle$j = {
31527
31600
  label: 'DashboardPage-pageStyle',
31528
31601
  color: 'var(--color-ink, #282828)',
31529
31602
  };
@@ -32416,7 +32489,7 @@ const DashboardPage = ({ greeting = 'Good morning', firstName, accountName, widg
32416
32489
  const [dragFrom, setDragFrom] = React.useState(null);
32417
32490
  const dragGhost = React.useRef(null);
32418
32491
  const presentTypes = new Set(widgets.map((widget) => widget.type));
32419
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$i), className), children: [welcomeHero && heroOpen && (jsxRuntime.jsxs("section", { className: sx(welcomeHeroStyle), "aria-label": "Welcome", children: [jsxRuntime.jsx("button", { type: "button", className: sx(welcomeCloseStyle), "aria-label": "Dismiss welcome", onClick: () => setHeroOpen(false), children: jsxRuntime.jsx(CloseIcon, { size: 20 }) }), welcomeHero] })), jsxRuntime.jsx("div", { className: sx(pageBannersStyle), children: jsxRuntime.jsx(PageBanners, { systemBanners: systemBanners, alertBanners: alertBanners, fullWidth: true, onDismiss: onBannerDismiss }) }), standingMessage && (jsxRuntime.jsx("section", { className: sx(standingMessageStyle), "aria-label": "Message", children: standingMessage })), jsxRuntime.jsxs("header", { className: sx(pageHeaderStyle$1), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("h1", { children: [greeting, firstName ? `, ${firstName}` : ''] }), accountName && jsxRuntime.jsxs("p", { children: ["Here's your personalized travel overview for ", accountName, "."] })] }), jsxRuntime.jsx("div", { className: sx(pageActionsStyle), children: editMode ? jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("button", { type: "button", className: sx(outlineButtonStyle), onClick: () => setCatalogOpen(true), children: [jsxRuntime.jsx(PlusIcon$2, { size: 20 }), "Add card"] }), jsxRuntime.jsx("button", { type: "button", className: sx(textButtonStyle$1), onClick: onReset, children: "Reset to default" }), jsxRuntime.jsxs("button", { type: "button", className: sx(primaryButtonStyle), onClick: () => { setEditMode(false); setCatalogOpen(false); }, children: [jsxRuntime.jsx(CheckIcon$2, { size: 20 }), "Done"] })] }) : jsxRuntime.jsxs("button", { type: "button", className: sx(customizeButtonStyle), onClick: () => setEditMode(true), children: [jsxRuntime.jsx(SettingsIcon, { size: 20 }), "Customize Your Home Page"] }) })] }), editMode && jsxRuntime.jsxs("div", { className: sx(editBannerStyle), children: [jsxRuntime.jsx(EditIcon$2, { size: 20 }), jsxRuntime.jsxs("span", { children: [jsxRuntime.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' && jsxRuntime.jsx("p", { className: sx(syncStatusStyle), "aria-live": "polite", children: "Saving layout\u2026" }), syncStatus === 'error' && jsxRuntime.jsx("p", { className: cx(sx(syncStatusStyle), sx(syncErrorStyle)), role: "alert", children: "Layout couldn't be saved. Changes are preserved locally." }), widgets.length ? jsxRuntime.jsx("div", { className: sx(gridStyle$2), children: widgets.map((widget, index) => jsxRuntime.jsx("div", { className: sx(sizeStyles[widget.size]), draggable: editMode, onDragStart: (event) => { if (!editMode)
32492
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$j), className), children: [welcomeHero && heroOpen && (jsxRuntime.jsxs("section", { className: sx(welcomeHeroStyle), "aria-label": "Welcome", children: [jsxRuntime.jsx("button", { type: "button", className: sx(welcomeCloseStyle), "aria-label": "Dismiss welcome", onClick: () => setHeroOpen(false), children: jsxRuntime.jsx(CloseIcon, { size: 20 }) }), welcomeHero] })), jsxRuntime.jsx("div", { className: sx(pageBannersStyle), children: jsxRuntime.jsx(PageBanners, { systemBanners: systemBanners, alertBanners: alertBanners, fullWidth: true, onDismiss: onBannerDismiss }) }), standingMessage && (jsxRuntime.jsx("section", { className: sx(standingMessageStyle), "aria-label": "Message", children: standingMessage })), jsxRuntime.jsxs("header", { className: sx(pageHeaderStyle$1), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("h1", { children: [greeting, firstName ? `, ${firstName}` : ''] }), accountName && jsxRuntime.jsxs("p", { children: ["Here's your personalized travel overview for ", accountName, "."] })] }), jsxRuntime.jsx("div", { className: sx(pageActionsStyle), children: editMode ? jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("button", { type: "button", className: sx(outlineButtonStyle), onClick: () => setCatalogOpen(true), children: [jsxRuntime.jsx(PlusIcon$2, { size: 20 }), "Add card"] }), jsxRuntime.jsx("button", { type: "button", className: sx(textButtonStyle$1), onClick: onReset, children: "Reset to default" }), jsxRuntime.jsxs("button", { type: "button", className: sx(primaryButtonStyle), onClick: () => { setEditMode(false); setCatalogOpen(false); }, children: [jsxRuntime.jsx(CheckIcon$2, { size: 20 }), "Done"] })] }) : jsxRuntime.jsxs("button", { type: "button", className: sx(customizeButtonStyle), onClick: () => setEditMode(true), children: [jsxRuntime.jsx(SettingsIcon, { size: 20 }), "Customize Your Home Page"] }) })] }), editMode && jsxRuntime.jsxs("div", { className: sx(editBannerStyle), children: [jsxRuntime.jsx(EditIcon$2, { size: 20 }), jsxRuntime.jsxs("span", { children: [jsxRuntime.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' && jsxRuntime.jsx("p", { className: sx(syncStatusStyle), "aria-live": "polite", children: "Saving layout\u2026" }), syncStatus === 'error' && jsxRuntime.jsx("p", { className: cx(sx(syncStatusStyle), sx(syncErrorStyle)), role: "alert", children: "Layout couldn't be saved. Changes are preserved locally." }), widgets.length ? jsxRuntime.jsx("div", { className: sx(gridStyle$2), children: widgets.map((widget, index) => jsxRuntime.jsx("div", { className: sx(sizeStyles[widget.size]), draggable: editMode, onDragStart: (event) => { if (!editMode)
32420
32493
  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)
32421
32494
  onReorder?.(dragFrom, index); setDragFrom(null); }, onDragEnd: () => { setDragFrom(null); dragGhost.current?.remove(); dragGhost.current = null; }, children: jsxRuntime.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)) }) : jsxRuntime.jsxs("div", { className: sx(emptyPageStyle), children: [jsxRuntime.jsx(PlusIcon$2, { size: 28 }), jsxRuntime.jsx("strong", { children: "Your home page is empty" }), jsxRuntime.jsx("span", { children: "Use \"Customize\" to add cards from the catalog." })] }), catalogOpen && jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("button", { type: "button", className: sx(scrimStyle), "aria-label": "Close card catalog", onClick: () => setCatalogOpen(false) }), jsxRuntime.jsxs("aside", { className: sx(catalogStyle), role: "dialog", "aria-modal": "true", "aria-label": "Add cards", children: [jsxRuntime.jsxs("header", { children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { children: "Add a card" }), jsxRuntime.jsx("p", { children: "Cards available to your role for this account" })] }), jsxRuntime.jsx("button", { type: "button", "aria-label": "Close card catalog", onClick: () => setCatalogOpen(false), children: jsxRuntime.jsx(CloseIcon, { size: 20 }) })] }), jsxRuntime.jsx("div", { className: sx(catalogBodyStyle), children: CATALOG.map((item) => jsxRuntime.jsxs("div", { className: sx(catalogItemStyle), children: [jsxRuntime.jsx("span", { className: sx(catalogIconStyle), children: jsxRuntime.jsx(WidgetIcon, { type: item.type }) }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("strong", { children: item.title }), jsxRuntime.jsx("span", { children: "Account" }), jsxRuntime.jsx("p", { children: item.description })] }), presentTypes.has(item.type) ? jsxRuntime.jsxs("span", { className: sx(addedStyle), children: [jsxRuntime.jsx(CheckIcon$2, { size: 16 }), "Added"] }) : jsxRuntime.jsxs("button", { type: "button", onClick: () => onAddWidget?.(item.type), children: [jsxRuntime.jsx(PlusIcon$2, { size: 16 }), "Add"] })] }, item.type)) }), jsxRuntime.jsx("footer", { children: "Each card can appear once on your home page." })] })] })] }));
32422
32495
  };
@@ -32429,7 +32502,7 @@ const DashboardPage = ({ greeting = 'Good morning', firstName, accountName, widg
32429
32502
  * object, and the single `@media (max-width: 767px)` block is split across the
32430
32503
  * nine objects it used to style.
32431
32504
  */
32432
- const pageStyle$h = {
32505
+ const pageStyle$i = {
32433
32506
  label: 'FeatureFlagManagementPage-pageStyle',
32434
32507
  maxWidth: 1440,
32435
32508
  margin: '0 auto',
@@ -32455,7 +32528,7 @@ const headerStyle$e = {
32455
32528
  '& h1': { fontSize: 36 },
32456
32529
  },
32457
32530
  };
32458
- const eyebrowStyle$1 = {
32531
+ const eyebrowStyle$2 = {
32459
32532
  label: 'FeatureFlagManagementPage-eyebrowStyle',
32460
32533
  margin: '0 0 8px',
32461
32534
  color: 'var(--color-primary, #0a53ef)',
@@ -33136,7 +33209,7 @@ const FeatureFlagManagementPage = ({ definitions, rules, targetOptions, loading
33136
33209
  const hasRuleActions = Boolean(onEditRule || onDeactivateRule);
33137
33210
  const currentUserSearchError = userSearchError ?? internalUserSearchError;
33138
33211
  const currentAudienceError = audienceError ?? internalAudienceError;
33139
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$h), className), "data-test": "feature-flag-management-page", "aria-busy": busy, children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$e), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("p", { className: sx(eyebrowStyle$1), children: "Administration \u00B7 System" }), jsxRuntime.jsx("h1", { children: "Feature Flags" }), jsxRuntime.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 && (jsxRuntime.jsx(Button, { type: "button", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 16 }), onClick: openCreate, disabled: busy, "data-test": "feature-flag-create-rule", children: "Create rule" }))] }), busy && (jsxRuntime.jsxs("div", { className: sx(submittingStyle), role: "status", "data-test": "feature-flag-submitting", children: [jsxRuntime.jsx(Spinner, { size: "sm", label: "Saving feature rule" }), jsxRuntime.jsx("span", { children: "Saving feature rule\u2026" })] })), loading && (jsxRuntime.jsxs("div", { className: sx(pageStateStyle), "data-test": "feature-flag-loading", children: [jsxRuntime.jsx(Spinner, { size: "lg", label: "Loading feature flags" }), jsxRuntime.jsx("p", { children: "Loading feature flags\u2026" })] })), !loading && error && (jsxRuntime.jsxs("div", { className: sx(pageStateStyle), "data-test": "feature-flag-error", children: [jsxRuntime.jsx(Alert, { variant: "error", title: "Feature flags could not be loaded", children: error }), onRetry && (jsxRuntime.jsx(Button, { type: "button", variant: "outline", onClick: onRetry, "data-test": "feature-flag-retry", children: "Try again" }))] })), !loading && !error && definitions.length === 0 && (jsxRuntime.jsx("div", { "data-test": "feature-flag-definitions-empty", children: jsxRuntime.jsx(EmptyState$1, { title: "No feature definitions", description: "Publish immutable feature definitions before creating audience rules.", icon: jsxRuntime.jsx(SettingsIcon, { size: 30 }), size: "lg" }) })), !loading && !error && definitions.length > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [actionError && (jsxRuntime.jsx(Alert, { variant: "error", title: "Feature rule change failed", dismissible: true, onDismiss: () => setActionError(undefined), className: sx(actionErrorStyle), children: jsxRuntime.jsx("span", { "data-test": "feature-flag-action-error", children: actionError }) })), jsxRuntime.jsxs("section", { className: sx(catalogPanelStyle), "aria-labelledby": "feature-catalog-heading", children: [jsxRuntime.jsxs("div", { className: sx(sectionHeadingStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { id: "feature-catalog-heading", children: "Feature catalog" }), jsxRuntime.jsx("p", { children: "Definitions and hierarchy are read-only in this view." })] }), jsxRuntime.jsxs(Badge, { size: "sm", children: [definitions.length, " definitions"] })] }), jsxRuntime.jsx("div", { className: sx(definitionListStyle), "data-test": "feature-flag-definitions", children: definitionRows.map(({ definition, depth }) => (jsxRuntime.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: [jsxRuntime.jsxs("div", { className: sx(definitionCopyStyle), children: [jsxRuntime.jsxs("div", { className: sx(definitionTitleStyle), children: [jsxRuntime.jsx("strong", { children: definition.name }), jsxRuntime.jsx("code", { children: definition.featureKey })] }), jsxRuntime.jsx("p", { children: definition.description }), definition.isActive === false && (jsxRuntime.jsx("p", { className: sx(killSwitchStyle), children: "Kill switch active. Targeting rules cannot enable this feature." }))] }), jsxRuntime.jsxs("div", { className: sx(definitionBadgesStyle), children: [jsxRuntime.jsx(Badge, { variant: definition.isActive === false ? 'error' : 'success', size: "sm", children: definition.isActive === false ? 'Inactive kill switch' : 'Active definition' }), jsxRuntime.jsxs(Badge, { variant: definition.defaultEnabled ? 'success' : 'default', size: "sm", children: ["Default ", definition.defaultEnabled ? 'enabled' : 'disabled'] })] })] }, definition.featureKey))) })] }), editor && (jsxRuntime.jsxs("section", { className: sx(editorPanelStyle), "data-test": "feature-flag-rule-editor", children: [jsxRuntime.jsxs("div", { className: sx(sectionHeadingStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { children: editor.mode === 'create' ? 'Create targeting rule' : 'Edit targeting rule' }), jsxRuntime.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' && (jsxRuntime.jsxs("code", { className: sx(versionStyle), children: ["Version ", editor.rule.rowVersion] }))] }), jsxRuntime.jsxs("form", { className: sx(ruleFormStyle), onSubmit: submitRule, noValidate: true, children: [jsxRuntime.jsx(Select, { label: "Feature", options: definitions.map((definition) => ({
33212
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$i), className), "data-test": "feature-flag-management-page", "aria-busy": busy, children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$e), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("p", { className: sx(eyebrowStyle$2), children: "Administration \u00B7 System" }), jsxRuntime.jsx("h1", { children: "Feature Flags" }), jsxRuntime.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 && (jsxRuntime.jsx(Button, { type: "button", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 16 }), onClick: openCreate, disabled: busy, "data-test": "feature-flag-create-rule", children: "Create rule" }))] }), busy && (jsxRuntime.jsxs("div", { className: sx(submittingStyle), role: "status", "data-test": "feature-flag-submitting", children: [jsxRuntime.jsx(Spinner, { size: "sm", label: "Saving feature rule" }), jsxRuntime.jsx("span", { children: "Saving feature rule\u2026" })] })), loading && (jsxRuntime.jsxs("div", { className: sx(pageStateStyle), "data-test": "feature-flag-loading", children: [jsxRuntime.jsx(Spinner, { size: "lg", label: "Loading feature flags" }), jsxRuntime.jsx("p", { children: "Loading feature flags\u2026" })] })), !loading && error && (jsxRuntime.jsxs("div", { className: sx(pageStateStyle), "data-test": "feature-flag-error", children: [jsxRuntime.jsx(Alert, { variant: "error", title: "Feature flags could not be loaded", children: error }), onRetry && (jsxRuntime.jsx(Button, { type: "button", variant: "outline", onClick: onRetry, "data-test": "feature-flag-retry", children: "Try again" }))] })), !loading && !error && definitions.length === 0 && (jsxRuntime.jsx("div", { "data-test": "feature-flag-definitions-empty", children: jsxRuntime.jsx(EmptyState$1, { title: "No feature definitions", description: "Publish immutable feature definitions before creating audience rules.", icon: jsxRuntime.jsx(SettingsIcon, { size: 30 }), size: "lg" }) })), !loading && !error && definitions.length > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [actionError && (jsxRuntime.jsx(Alert, { variant: "error", title: "Feature rule change failed", dismissible: true, onDismiss: () => setActionError(undefined), className: sx(actionErrorStyle), children: jsxRuntime.jsx("span", { "data-test": "feature-flag-action-error", children: actionError }) })), jsxRuntime.jsxs("section", { className: sx(catalogPanelStyle), "aria-labelledby": "feature-catalog-heading", children: [jsxRuntime.jsxs("div", { className: sx(sectionHeadingStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { id: "feature-catalog-heading", children: "Feature catalog" }), jsxRuntime.jsx("p", { children: "Definitions and hierarchy are read-only in this view." })] }), jsxRuntime.jsxs(Badge, { size: "sm", children: [definitions.length, " definitions"] })] }), jsxRuntime.jsx("div", { className: sx(definitionListStyle), "data-test": "feature-flag-definitions", children: definitionRows.map(({ definition, depth }) => (jsxRuntime.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: [jsxRuntime.jsxs("div", { className: sx(definitionCopyStyle), children: [jsxRuntime.jsxs("div", { className: sx(definitionTitleStyle), children: [jsxRuntime.jsx("strong", { children: definition.name }), jsxRuntime.jsx("code", { children: definition.featureKey })] }), jsxRuntime.jsx("p", { children: definition.description }), definition.isActive === false && (jsxRuntime.jsx("p", { className: sx(killSwitchStyle), children: "Kill switch active. Targeting rules cannot enable this feature." }))] }), jsxRuntime.jsxs("div", { className: sx(definitionBadgesStyle), children: [jsxRuntime.jsx(Badge, { variant: definition.isActive === false ? 'error' : 'success', size: "sm", children: definition.isActive === false ? 'Inactive kill switch' : 'Active definition' }), jsxRuntime.jsxs(Badge, { variant: definition.defaultEnabled ? 'success' : 'default', size: "sm", children: ["Default ", definition.defaultEnabled ? 'enabled' : 'disabled'] })] })] }, definition.featureKey))) })] }), editor && (jsxRuntime.jsxs("section", { className: sx(editorPanelStyle), "data-test": "feature-flag-rule-editor", children: [jsxRuntime.jsxs("div", { className: sx(sectionHeadingStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { children: editor.mode === 'create' ? 'Create targeting rule' : 'Edit targeting rule' }), jsxRuntime.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' && (jsxRuntime.jsxs("code", { className: sx(versionStyle), children: ["Version ", editor.rule.rowVersion] }))] }), jsxRuntime.jsxs("form", { className: sx(ruleFormStyle), onSubmit: submitRule, noValidate: true, children: [jsxRuntime.jsx(Select, { label: "Feature", options: definitions.map((definition) => ({
33140
33213
  value: definition.featureKey,
33141
33214
  label: `${definition.name} · ${definition.featureKey}`,
33142
33215
  disabled: definition.isActive === false,
@@ -33677,7 +33750,7 @@ GroupTravelRequestPage.displayName = 'GroupTravelRequestPage';
33677
33750
  * split across the objects it styled: each `@media` lives inside the one style
33678
33751
  * it applies to, so a rule and its responsive override stay together.
33679
33752
  */
33680
- const pageStyle$g = {
33753
+ const pageStyle$h = {
33681
33754
  label: 'IndividualTravelPage-pageStyle',
33682
33755
  minHeight: '100%',
33683
33756
  padding: 24,
@@ -33701,7 +33774,7 @@ const headerStyle$d = {
33701
33774
  flexDirection: 'column',
33702
33775
  },
33703
33776
  };
33704
- const titleStyle$b = {
33777
+ const titleStyle$c = {
33705
33778
  label: 'IndividualTravelPage-titleStyle',
33706
33779
  margin: 0,
33707
33780
  color: 'var(--fg-1, #282828)',
@@ -34415,7 +34488,7 @@ const IndividualTravelPage = ({ trips, tabCounts, enabledTabs = ['current', 'pas
34415
34488
  : activeFilters
34416
34489
  ? 'No trips match the selected filters. Clear a filter or widen the date range.'
34417
34490
  : emptyMessage;
34418
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$g), className), "data-test": "individual-travel-page", "aria-busy": loading || refreshing, children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$d), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$b), children: "Individual & Small Group Travel" }), onCreateRequest && (jsxRuntime.jsx(Button
34491
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$h), className), "data-test": "individual-travel-page", "aria-busy": loading || refreshing, children: [jsxRuntime.jsxs("div", { className: sx(headerStyle$d), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$c), children: "Individual & Small Group Travel" }), onCreateRequest && (jsxRuntime.jsx(Button
34419
34492
  // Explicit: the atom has no default, and inside a host form a
34420
34493
  // bare <button> would submit it.
34421
34494
  , {
@@ -34441,7 +34514,7 @@ const IndividualTravelPage = ({ trips, tabCounts, enabledTabs = ['current', 'pas
34441
34514
  * the three columns and the narrow-screen tab strip — still comes from the
34442
34515
  * RequestFormLayout organism, and the blocks from the FormSection molecule.
34443
34516
  */
34444
- const pageStyle$f = {
34517
+ const pageStyle$g = {
34445
34518
  label: 'IndividualTravelRequestPage-pageStyle',
34446
34519
  color: 'var(--color-ink, #282828)',
34447
34520
  };
@@ -34535,14 +34608,14 @@ const pageHeaderStyle = {
34535
34608
  flexDirection: 'column',
34536
34609
  },
34537
34610
  };
34538
- const eyebrowStyle = {
34611
+ const eyebrowStyle$1 = {
34539
34612
  label: 'IndividualTravelRequestPage-eyebrowStyle',
34540
34613
  margin: '0 0 4px',
34541
34614
  color: 'var(--color-slate, #5c5c5c)',
34542
34615
  fontSize: 13,
34543
34616
  fontWeight: 600,
34544
34617
  };
34545
- const titleStyle$a = {
34618
+ const titleStyle$b = {
34546
34619
  label: 'IndividualTravelRequestPage-titleStyle',
34547
34620
  margin: 0,
34548
34621
  color: 'var(--color-ink, #282828)',
@@ -34881,17 +34954,17 @@ const choiceTextStyle = {
34881
34954
  },
34882
34955
  };
34883
34956
  /** `.travelerCard, .segmentCard` — one selector list, two homes. */
34884
- const cardStyle$2 = {
34957
+ const cardStyle$3 = {
34885
34958
  padding: 18,
34886
34959
  border: '1px solid var(--border-color, #ededed)',
34887
34960
  borderRadius: 9,
34888
34961
  background: 'var(--color-basecolor, #fafafa)',
34889
34962
  };
34890
34963
  const travelerCardStyle = {
34891
- label: 'IndividualTravelRequestPage-travelerCardStyle', ...cardStyle$2
34964
+ label: 'IndividualTravelRequestPage-travelerCardStyle', ...cardStyle$3
34892
34965
  };
34893
34966
  const segmentCardStyle$1 = {
34894
- label: 'IndividualTravelRequestPage-segmentCardStyle', ...cardStyle$2
34967
+ label: 'IndividualTravelRequestPage-segmentCardStyle', ...cardStyle$3
34895
34968
  };
34896
34969
  const cardHeaderStyle = {
34897
34970
  label: 'IndividualTravelRequestPage-cardHeaderStyle',
@@ -35909,9 +35982,9 @@ const IndividualTravelRequestFormPage = ({ currentTraveler, configuration, value
35909
35982
  }
35910
35983
  };
35911
35984
  if (loading) {
35912
- return (jsxRuntime.jsx(RequestFormLayout, { className: cx(sx(pageStyle$f), className), header: jsxRuntime.jsx(RequestFormHeader, { title: "Individual Travel Request" }), children: jsxRuntime.jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-form-loading", children: [jsxRuntime.jsx(Spinner, { label: "Loading travel request form" }), jsxRuntime.jsx("span", { children: "Loading request options\u2026" })] }) }));
35985
+ return (jsxRuntime.jsx(RequestFormLayout, { className: cx(sx(pageStyle$g), className), header: jsxRuntime.jsx(RequestFormHeader, { title: "Individual Travel Request" }), children: jsxRuntime.jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-form-loading", children: [jsxRuntime.jsx(Spinner, { label: "Loading travel request form" }), jsxRuntime.jsx("span", { children: "Loading request options\u2026" })] }) }));
35913
35986
  }
35914
- return (jsxRuntime.jsx("form", { ref: formRef, className: sx(formStyle), onSubmit: (event) => void handleSubmit(event), noValidate: true, "data-test": "individual-travel-request-form", "aria-busy": busy, children: jsxRuntime.jsxs(RequestFormLayout, { className: cx(sx(pageStyle$f), className), header: jsxRuntime.jsx(RequestFormHeader, { title: "Individual Travel Request", eventName: currentTraveler.displayName }), activePane: activePane, onPaneChange: setActivePane, mobileServices: availableServices.map((service) => (jsxRuntime.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, jsxRuntime.jsx("span", { children: service.label })] }, service.key))), sidebar: (jsxRuntime.jsxs("div", { "aria-label": "Travel types", "data-test": "individual-travel-request-service-sidebar", children: [jsxRuntime.jsx(ServiceToggleList, { services: availableServices, enabledServices: selectedServices, onToggle: (service, checked) => toggleService(service, checked), onClick: navigateToService, className: sx(serviceNavigationStyle), disabled: disabled }), jsxRuntime.jsxs("div", { className: sx(travelerRailStyle), children: [jsxRuntime.jsx("h3", { children: "Travelling" }), jsxRuntime.jsxs("p", { children: [jsxRuntime.jsx(UsersIcon$1, { size: 17 }), " ", travelerRailSummary] })] })] })), summary: (jsxRuntime.jsx(RequestSummary, { sections: summarySections, values: {}, dataTest: "individual-travel-request-summary" })), footer: (onCancel || onSubmit) ? (jsxRuntime.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 && jsxRuntime.jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-form-notice", children: jsxRuntime.jsx(Alert, { variant: "warning", children: notice }) }), error && (jsxRuntime.jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-form-error", children: jsxRuntime.jsxs(Alert, { variant: "error", title: "The request form needs attention", children: [jsxRuntime.jsx("div", { children: error }), onRetry && jsxRuntime.jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onRetry, "data-test": "individual-travel-request-form-retry", children: "Try again" })] }) })), readOnly && (jsxRuntime.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) && (jsxRuntime.jsxs("div", { ref: errorSummaryRef, className: sx(errorSummaryStyle), role: "alert", tabIndex: -1, "data-test": "individual-travel-request-form-validation", children: [jsxRuntime.jsx("h2", { children: "Review the request before submitting" }), submitError && jsxRuntime.jsx("p", { "data-test": "individual-travel-request-form-submit-error", children: submitError }), Object.keys(allErrors).length > 0 && jsxRuntime.jsx("ul", { children: Object.values(allErrors).map((message, index) => jsxRuntime.jsx("li", { children: message }, `${message}-${index}`)) })] })), activeService !== 'general' && !selectedServices[activeService] && (jsxRuntime.jsxs("div", { className: sx(mobileEnableStyle), "data-test": "individual-travel-request-mobile-enable", children: [jsxRuntime.jsxs("span", { children: ["Add ", SERVICE_LABELS[activeService], " to this request"] }), jsxRuntime.jsx(Toggle, { "aria-label": `Enable ${SERVICE_LABELS[activeService]}`, checked: false, onChange: () => enableFromStrip(activeService), size: "sm" })] })), jsxRuntime.jsxs(Section, { title: "Traveler information", description: "Tell the travel team who is traveling. Required fields are marked with an asterisk.", icon: jsxRuntime.jsx(UsersIcon$1, { size: 24 }), dataTest: "individual-travel-request-section-travelers", children: [jsxRuntime.jsxs("fieldset", { className: sx(choiceGroupStyle), children: [jsxRuntime.jsx("legend", { className: sx(legendStyle), children: "Travel for" }), jsxRuntime.jsxs("label", { className: sx(choiceStyle), children: [jsxRuntime.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" }), jsxRuntime.jsxs("span", { className: sx(choiceTextStyle), children: [jsxRuntime.jsx("strong", { children: currentTraveler.displayName }), jsxRuntime.jsx("small", { children: currentTraveler.email || 'Authenticated traveler' })] })] }), configuration.allowOtherTravelers && (jsxRuntime.jsxs("label", { className: sx(choiceStyle), children: [jsxRuntime.jsx("input", { type: "radio", name: "travelerType", value: "other", checked: resolvedValues.travelerType === 'other', disabled: disabled, onChange: () => commit({
35987
+ return (jsxRuntime.jsx("form", { ref: formRef, className: sx(formStyle), onSubmit: (event) => void handleSubmit(event), noValidate: true, "data-test": "individual-travel-request-form", "aria-busy": busy, children: jsxRuntime.jsxs(RequestFormLayout, { className: cx(sx(pageStyle$g), className), header: jsxRuntime.jsx(RequestFormHeader, { title: "Individual Travel Request", eventName: currentTraveler.displayName }), activePane: activePane, onPaneChange: setActivePane, mobileServices: availableServices.map((service) => (jsxRuntime.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, jsxRuntime.jsx("span", { children: service.label })] }, service.key))), sidebar: (jsxRuntime.jsxs("div", { "aria-label": "Travel types", "data-test": "individual-travel-request-service-sidebar", children: [jsxRuntime.jsx(ServiceToggleList, { services: availableServices, enabledServices: selectedServices, onToggle: (service, checked) => toggleService(service, checked), onClick: navigateToService, className: sx(serviceNavigationStyle), disabled: disabled }), jsxRuntime.jsxs("div", { className: sx(travelerRailStyle), children: [jsxRuntime.jsx("h3", { children: "Travelling" }), jsxRuntime.jsxs("p", { children: [jsxRuntime.jsx(UsersIcon$1, { size: 17 }), " ", travelerRailSummary] })] })] })), summary: (jsxRuntime.jsx(RequestSummary, { sections: summarySections, values: {}, dataTest: "individual-travel-request-summary" })), footer: (onCancel || onSubmit) ? (jsxRuntime.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 && jsxRuntime.jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-form-notice", children: jsxRuntime.jsx(Alert, { variant: "warning", children: notice }) }), error && (jsxRuntime.jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-form-error", children: jsxRuntime.jsxs(Alert, { variant: "error", title: "The request form needs attention", children: [jsxRuntime.jsx("div", { children: error }), onRetry && jsxRuntime.jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: onRetry, "data-test": "individual-travel-request-form-retry", children: "Try again" })] }) })), readOnly && (jsxRuntime.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) && (jsxRuntime.jsxs("div", { ref: errorSummaryRef, className: sx(errorSummaryStyle), role: "alert", tabIndex: -1, "data-test": "individual-travel-request-form-validation", children: [jsxRuntime.jsx("h2", { children: "Review the request before submitting" }), submitError && jsxRuntime.jsx("p", { "data-test": "individual-travel-request-form-submit-error", children: submitError }), Object.keys(allErrors).length > 0 && jsxRuntime.jsx("ul", { children: Object.values(allErrors).map((message, index) => jsxRuntime.jsx("li", { children: message }, `${message}-${index}`)) })] })), activeService !== 'general' && !selectedServices[activeService] && (jsxRuntime.jsxs("div", { className: sx(mobileEnableStyle), "data-test": "individual-travel-request-mobile-enable", children: [jsxRuntime.jsxs("span", { children: ["Add ", SERVICE_LABELS[activeService], " to this request"] }), jsxRuntime.jsx(Toggle, { "aria-label": `Enable ${SERVICE_LABELS[activeService]}`, checked: false, onChange: () => enableFromStrip(activeService), size: "sm" })] })), jsxRuntime.jsxs(Section, { title: "Traveler information", description: "Tell the travel team who is traveling. Required fields are marked with an asterisk.", icon: jsxRuntime.jsx(UsersIcon$1, { size: 24 }), dataTest: "individual-travel-request-section-travelers", children: [jsxRuntime.jsxs("fieldset", { className: sx(choiceGroupStyle), children: [jsxRuntime.jsx("legend", { className: sx(legendStyle), children: "Travel for" }), jsxRuntime.jsxs("label", { className: sx(choiceStyle), children: [jsxRuntime.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" }), jsxRuntime.jsxs("span", { className: sx(choiceTextStyle), children: [jsxRuntime.jsx("strong", { children: currentTraveler.displayName }), jsxRuntime.jsx("small", { children: currentTraveler.email || 'Authenticated traveler' })] })] }), configuration.allowOtherTravelers && (jsxRuntime.jsxs("label", { className: sx(choiceStyle), children: [jsxRuntime.jsx("input", { type: "radio", name: "travelerType", value: "other", checked: resolvedValues.travelerType === 'other', disabled: disabled, onChange: () => commit({
35915
35988
  ...resolvedValues,
35916
35989
  travelerType: 'other',
35917
35990
  travelers: resolvedValues.travelers.length ? resolvedValues.travelers : [emptyTraveler()],
@@ -35983,7 +36056,7 @@ const IndividualTravelRequestDetailPage = ({ request, loading = false, error, no
35983
36056
  : request
35984
36057
  ? `Travel request ${request.requestId}`
35985
36058
  : 'Travel request';
35986
- return (jsxRuntime.jsxs("main", { className: cx(sx(pageStyle$f), className), "data-test": "individual-travel-request-detail", "aria-busy": loading, children: [jsxRuntime.jsxs("header", { className: sx(pageHeaderStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("p", { className: sx(eyebrowStyle), children: "Individual travel" }), jsxRuntime.jsx("h1", { className: sx(titleStyle$a), children: title }), request && !loading && !error && (jsxRuntime.jsxs("div", { className: sx(detailMetaStyle), "data-test": "individual-travel-request-detail-meta", children: [jsxRuntime.jsxs("span", { children: ["Submitted ", jsxRuntime.jsx("time", { dateTime: request.submittedAt, children: formatDateTime$1(request.submittedAt) })] }), request.completedAt && jsxRuntime.jsxs("span", { children: ["Completed ", jsxRuntime.jsx("time", { dateTime: request.completedAt, children: formatDateTime$1(request.completedAt) })] })] }))] }), onBack && (jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "individual-travel-request-detail-back", children: backLabel }))] }), jsxRuntime.jsxs("div", { className: sx(contentStyle$3), children: [loading && (jsxRuntime.jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-loading", children: [jsxRuntime.jsx(Spinner, { label: "Loading travel request" }), jsxRuntime.jsx("span", { children: "Loading request details\u2026" })] })), !loading && error && (jsxRuntime.jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-error", children: [jsxRuntime.jsx(Alert, { variant: "error", title: "The travel request could not be loaded", children: error }), onRetry && jsxRuntime.jsx(Button, { type: "button", variant: "secondary", onClick: onRetry, "data-test": "individual-travel-request-detail-retry", children: "Try again" })] })), !loading && !error && !request && (jsxRuntime.jsx("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-empty", children: jsxRuntime.jsx("p", { children: "No travel request was supplied." }) })), !loading && !error && request && (jsxRuntime.jsxs("div", { className: sx(formStyle), children: [notice && jsxRuntime.jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-detail-notice", children: jsxRuntime.jsx(Alert, { variant: "warning", children: notice }) }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-general", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Request information" }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Request number", dataTest: "individual-travel-request-detail-request-id", children: request.requestId }), jsxRuntime.jsx(DetailField, { label: "Traveler type", children: request.travelerType === 'self' ? 'Self' : 'Other traveler' }), jsxRuntime.jsx(DetailField, { label: "Submitted by", children: request.submittedBy?.name }), jsxRuntime.jsx(DetailField, { label: "Submitter email", children: request.submittedBy?.email }), request.submittedBy?.phone && jsxRuntime.jsx(DetailField, { label: "Submitter phone", children: request.submittedBy.phone }), request.additionalEmails && jsxRuntime.jsx(DetailField, { label: "Additional email addresses", children: request.additionalEmails })] })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-travelers", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Travelers" }) }), jsxRuntime.jsx("div", { className: sx(detailTableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(detailTableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Name" }), jsxRuntime.jsx("th", { scope: "col", children: "Date of birth" }), jsxRuntime.jsx("th", { scope: "col", children: "Gender" })] }) }), jsxRuntime.jsxs("tbody", { children: [request.travelers.map((traveler, index) => (jsxRuntime.jsxs("tr", { "data-test": `individual-travel-request-detail-traveler-${index + 1}`, children: [jsxRuntime.jsx("td", { children: travelerName(traveler) || '—' }), jsxRuntime.jsx("td", { children: formatDate(traveler.dateOfBirth) }), jsxRuntime.jsx("td", { children: traveler.gender || '—' })] }, `${travelerName(traveler)}-${index}`))), !request.travelers.length && jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { colSpan: 3, className: sx(emptyValueStyle), children: "No traveler details were supplied." }) })] })] }) })] }), Boolean(request.organizationAnswers?.length) && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-organization", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Organization information" }) }), jsxRuntime.jsx(AnswerList, { answers: request.organizationAnswers, prefix: "individual-travel-request-detail-organization-answer" })] })), Boolean(request.billingAnswers?.length) && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-billing", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Billing information" }) }), jsxRuntime.jsx(AnswerList, { answers: request.billingAnswers, prefix: "individual-travel-request-detail-billing-answer" })] })), request.airRequest && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-air", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Air Request" }), jsxRuntime.jsx("p", { className: sx(sectionDescriptionStyle), children: request.airRequest.tripType.replace('-', ' ') })] }) }), jsxRuntime.jsx("div", { className: sx(detailTableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(detailTableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "From" }), jsxRuntime.jsx("th", { scope: "col", children: "To" }), jsxRuntime.jsx("th", { scope: "col", children: "Depart" }), request.airRequest.tripType === 'round-trip' && jsxRuntime.jsx("th", { scope: "col", children: "Return" })] }) }), jsxRuntime.jsx("tbody", { children: request.airRequest.legs.map((leg, index) => (jsxRuntime.jsxs("tr", { "data-test": `individual-travel-request-detail-air-leg-${index + 1}`, children: [jsxRuntime.jsx("td", { children: leg.departureLocation }), jsxRuntime.jsx("td", { children: leg.arrivalLocation }), jsxRuntime.jsxs("td", { children: [formatDate(leg.departureDate), " \u00B7 ", leg.departureTime] }), request.airRequest?.tripType === 'round-trip' && jsxRuntime.jsxs("td", { children: [formatDate(leg.returnDate), " \u00B7 ", leg.returnTime || '—'] })] }, index))) })] }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Fare preference", children: request.airRequest.farePreference }), jsxRuntime.jsx(DetailField, { label: "Flight preference", children: request.airRequest.flightPreference }), jsxRuntime.jsx(DetailField, { label: "Preferred airline", children: request.airRequest.preferredAirline }), jsxRuntime.jsx(DetailField, { label: "Most important factor", children: request.airRequest.priority }), request.airRequest.details && jsxRuntime.jsx(DetailField, { label: "Air details", children: request.airRequest.details })] })] })), request.hotelRequest && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-hotel", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Hotel Request" }) }), jsxRuntime.jsx("div", { className: sx(detailTableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(detailTableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "City" }), jsxRuntime.jsx("th", { scope: "col", children: "Check in" }), jsxRuntime.jsx("th", { scope: "col", children: "Check out" })] }) }), jsxRuntime.jsx("tbody", { children: request.hotelRequest.legs.map((leg, index) => (jsxRuntime.jsxs("tr", { "data-test": `individual-travel-request-detail-hotel-leg-${index + 1}`, children: [jsxRuntime.jsx("td", { children: leg.city }), jsxRuntime.jsx("td", { children: formatDate(leg.checkInDate) }), jsxRuntime.jsx("td", { children: formatDate(leg.checkOutDate) })] }, index))) })] }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Bed preference", children: request.hotelRequest.bedPreference }), jsxRuntime.jsx(DetailField, { label: "Smoking preference", children: request.hotelRequest.smokingPreference }), jsxRuntime.jsx(DetailField, { label: "Preferred hotel", children: request.hotelRequest.preferredHotel })] })] })), request.carRequest && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-car", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Vehicle Rental Request" }) }), jsxRuntime.jsx("div", { className: sx(detailTableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(detailTableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Pickup" }), jsxRuntime.jsx("th", { scope: "col", children: "Pickup date" }), jsxRuntime.jsx("th", { scope: "col", children: "Drop-off" }), jsxRuntime.jsx("th", { scope: "col", children: "Drop-off date" })] }) }), jsxRuntime.jsx("tbody", { children: request.carRequest.legs.map((leg, index) => (jsxRuntime.jsxs("tr", { "data-test": `individual-travel-request-detail-car-leg-${index + 1}`, children: [jsxRuntime.jsxs("td", { children: [leg.pickupCity, leg.pickupLocation ? ` · ${leg.pickupLocation}` : ''] }), jsxRuntime.jsxs("td", { children: [formatDate(leg.pickupDate), " \u00B7 ", leg.pickupTime] }), jsxRuntime.jsx("td", { children: leg.dropoffLocation || leg.pickupCity }), jsxRuntime.jsxs("td", { children: [formatDate(leg.dropoffDate), " \u00B7 ", leg.dropoffTime] })] }, index))) })] }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Vehicle type", children: request.carRequest.vehicleType }), jsxRuntime.jsx(DetailField, { label: "Rental company", children: request.carRequest.rentalCompany }), jsxRuntime.jsx(DetailField, { label: "Flight number or tail number", children: request.carRequest.flightNumberOrTailNumber })] })] })), request.busRequest && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-bus", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Bus Request" }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Pickup city", children: request.busRequest.pickupCity }), jsxRuntime.jsx(DetailField, { label: "Pickup location", children: request.busRequest.pickupLocation }), jsxRuntime.jsx(DetailField, { label: "Pickup date and time", children: formatDateTime$1(request.busRequest.pickupDateTime) }), jsxRuntime.jsx(DetailField, { label: "Drop-off city", children: request.busRequest.dropoffCity }), jsxRuntime.jsx(DetailField, { label: "Drop-off location", children: request.busRequest.dropoffLocation }), jsxRuntime.jsx(DetailField, { label: "Drop-off date and time", children: formatDateTime$1(request.busRequest.dropoffDateTime) }), jsxRuntime.jsx(DetailField, { label: "Vehicle type", children: request.busRequest.vehicleType }), request.busRequest.specialRequests && jsxRuntime.jsx(DetailField, { label: "Bus requests", children: request.busRequest.specialRequests })] })] })), request.specialRequests && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-special-requests", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Additional requests" }) }), jsxRuntime.jsx("p", { children: request.specialRequests })] }))] }))] })] }));
36059
+ return (jsxRuntime.jsxs("main", { className: cx(sx(pageStyle$g), className), "data-test": "individual-travel-request-detail", "aria-busy": loading, children: [jsxRuntime.jsxs("header", { className: sx(pageHeaderStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("p", { className: sx(eyebrowStyle$1), children: "Individual travel" }), jsxRuntime.jsx("h1", { className: sx(titleStyle$b), children: title }), request && !loading && !error && (jsxRuntime.jsxs("div", { className: sx(detailMetaStyle), "data-test": "individual-travel-request-detail-meta", children: [jsxRuntime.jsxs("span", { children: ["Submitted ", jsxRuntime.jsx("time", { dateTime: request.submittedAt, children: formatDateTime$1(request.submittedAt) })] }), request.completedAt && jsxRuntime.jsxs("span", { children: ["Completed ", jsxRuntime.jsx("time", { dateTime: request.completedAt, children: formatDateTime$1(request.completedAt) })] })] }))] }), onBack && (jsxRuntime.jsx(Button, { type: "button", variant: "ghost", size: "sm", leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "individual-travel-request-detail-back", children: backLabel }))] }), jsxRuntime.jsxs("div", { className: sx(contentStyle$3), children: [loading && (jsxRuntime.jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-loading", children: [jsxRuntime.jsx(Spinner, { label: "Loading travel request" }), jsxRuntime.jsx("span", { children: "Loading request details\u2026" })] })), !loading && error && (jsxRuntime.jsxs("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-error", children: [jsxRuntime.jsx(Alert, { variant: "error", title: "The travel request could not be loaded", children: error }), onRetry && jsxRuntime.jsx(Button, { type: "button", variant: "secondary", onClick: onRetry, "data-test": "individual-travel-request-detail-retry", children: "Try again" })] })), !loading && !error && !request && (jsxRuntime.jsx("div", { className: sx(stateStyle), "data-test": "individual-travel-request-detail-empty", children: jsxRuntime.jsx("p", { children: "No travel request was supplied." }) })), !loading && !error && request && (jsxRuntime.jsxs("div", { className: sx(formStyle), children: [notice && jsxRuntime.jsx("div", { className: sx(bannerStyle), "data-test": "individual-travel-request-detail-notice", children: jsxRuntime.jsx(Alert, { variant: "warning", children: notice }) }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-general", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Request information" }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Request number", dataTest: "individual-travel-request-detail-request-id", children: request.requestId }), jsxRuntime.jsx(DetailField, { label: "Traveler type", children: request.travelerType === 'self' ? 'Self' : 'Other traveler' }), jsxRuntime.jsx(DetailField, { label: "Submitted by", children: request.submittedBy?.name }), jsxRuntime.jsx(DetailField, { label: "Submitter email", children: request.submittedBy?.email }), request.submittedBy?.phone && jsxRuntime.jsx(DetailField, { label: "Submitter phone", children: request.submittedBy.phone }), request.additionalEmails && jsxRuntime.jsx(DetailField, { label: "Additional email addresses", children: request.additionalEmails })] })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-travelers", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Travelers" }) }), jsxRuntime.jsx("div", { className: sx(detailTableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(detailTableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Name" }), jsxRuntime.jsx("th", { scope: "col", children: "Date of birth" }), jsxRuntime.jsx("th", { scope: "col", children: "Gender" })] }) }), jsxRuntime.jsxs("tbody", { children: [request.travelers.map((traveler, index) => (jsxRuntime.jsxs("tr", { "data-test": `individual-travel-request-detail-traveler-${index + 1}`, children: [jsxRuntime.jsx("td", { children: travelerName(traveler) || '—' }), jsxRuntime.jsx("td", { children: formatDate(traveler.dateOfBirth) }), jsxRuntime.jsx("td", { children: traveler.gender || '—' })] }, `${travelerName(traveler)}-${index}`))), !request.travelers.length && jsxRuntime.jsx("tr", { children: jsxRuntime.jsx("td", { colSpan: 3, className: sx(emptyValueStyle), children: "No traveler details were supplied." }) })] })] }) })] }), Boolean(request.organizationAnswers?.length) && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-organization", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Organization information" }) }), jsxRuntime.jsx(AnswerList, { answers: request.organizationAnswers, prefix: "individual-travel-request-detail-organization-answer" })] })), Boolean(request.billingAnswers?.length) && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-billing", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Billing information" }) }), jsxRuntime.jsx(AnswerList, { answers: request.billingAnswers, prefix: "individual-travel-request-detail-billing-answer" })] })), request.airRequest && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-air", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Air Request" }), jsxRuntime.jsx("p", { className: sx(sectionDescriptionStyle), children: request.airRequest.tripType.replace('-', ' ') })] }) }), jsxRuntime.jsx("div", { className: sx(detailTableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(detailTableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "From" }), jsxRuntime.jsx("th", { scope: "col", children: "To" }), jsxRuntime.jsx("th", { scope: "col", children: "Depart" }), request.airRequest.tripType === 'round-trip' && jsxRuntime.jsx("th", { scope: "col", children: "Return" })] }) }), jsxRuntime.jsx("tbody", { children: request.airRequest.legs.map((leg, index) => (jsxRuntime.jsxs("tr", { "data-test": `individual-travel-request-detail-air-leg-${index + 1}`, children: [jsxRuntime.jsx("td", { children: leg.departureLocation }), jsxRuntime.jsx("td", { children: leg.arrivalLocation }), jsxRuntime.jsxs("td", { children: [formatDate(leg.departureDate), " \u00B7 ", leg.departureTime] }), request.airRequest?.tripType === 'round-trip' && jsxRuntime.jsxs("td", { children: [formatDate(leg.returnDate), " \u00B7 ", leg.returnTime || '—'] })] }, index))) })] }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Fare preference", children: request.airRequest.farePreference }), jsxRuntime.jsx(DetailField, { label: "Flight preference", children: request.airRequest.flightPreference }), jsxRuntime.jsx(DetailField, { label: "Preferred airline", children: request.airRequest.preferredAirline }), jsxRuntime.jsx(DetailField, { label: "Most important factor", children: request.airRequest.priority }), request.airRequest.details && jsxRuntime.jsx(DetailField, { label: "Air details", children: request.airRequest.details })] })] })), request.hotelRequest && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-hotel", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Hotel Request" }) }), jsxRuntime.jsx("div", { className: sx(detailTableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(detailTableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "City" }), jsxRuntime.jsx("th", { scope: "col", children: "Check in" }), jsxRuntime.jsx("th", { scope: "col", children: "Check out" })] }) }), jsxRuntime.jsx("tbody", { children: request.hotelRequest.legs.map((leg, index) => (jsxRuntime.jsxs("tr", { "data-test": `individual-travel-request-detail-hotel-leg-${index + 1}`, children: [jsxRuntime.jsx("td", { children: leg.city }), jsxRuntime.jsx("td", { children: formatDate(leg.checkInDate) }), jsxRuntime.jsx("td", { children: formatDate(leg.checkOutDate) })] }, index))) })] }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Bed preference", children: request.hotelRequest.bedPreference }), jsxRuntime.jsx(DetailField, { label: "Smoking preference", children: request.hotelRequest.smokingPreference }), jsxRuntime.jsx(DetailField, { label: "Preferred hotel", children: request.hotelRequest.preferredHotel })] })] })), request.carRequest && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-car", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Vehicle Rental Request" }) }), jsxRuntime.jsx("div", { className: sx(detailTableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(detailTableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Pickup" }), jsxRuntime.jsx("th", { scope: "col", children: "Pickup date" }), jsxRuntime.jsx("th", { scope: "col", children: "Drop-off" }), jsxRuntime.jsx("th", { scope: "col", children: "Drop-off date" })] }) }), jsxRuntime.jsx("tbody", { children: request.carRequest.legs.map((leg, index) => (jsxRuntime.jsxs("tr", { "data-test": `individual-travel-request-detail-car-leg-${index + 1}`, children: [jsxRuntime.jsxs("td", { children: [leg.pickupCity, leg.pickupLocation ? ` · ${leg.pickupLocation}` : ''] }), jsxRuntime.jsxs("td", { children: [formatDate(leg.pickupDate), " \u00B7 ", leg.pickupTime] }), jsxRuntime.jsx("td", { children: leg.dropoffLocation || leg.pickupCity }), jsxRuntime.jsxs("td", { children: [formatDate(leg.dropoffDate), " \u00B7 ", leg.dropoffTime] })] }, index))) })] }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Vehicle type", children: request.carRequest.vehicleType }), jsxRuntime.jsx(DetailField, { label: "Rental company", children: request.carRequest.rentalCompany }), jsxRuntime.jsx(DetailField, { label: "Flight number or tail number", children: request.carRequest.flightNumberOrTailNumber })] })] })), request.busRequest && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-bus", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Bus Request" }) }), jsxRuntime.jsxs("dl", { className: sx(detailGridStyle), children: [jsxRuntime.jsx(DetailField, { label: "Pickup city", children: request.busRequest.pickupCity }), jsxRuntime.jsx(DetailField, { label: "Pickup location", children: request.busRequest.pickupLocation }), jsxRuntime.jsx(DetailField, { label: "Pickup date and time", children: formatDateTime$1(request.busRequest.pickupDateTime) }), jsxRuntime.jsx(DetailField, { label: "Drop-off city", children: request.busRequest.dropoffCity }), jsxRuntime.jsx(DetailField, { label: "Drop-off location", children: request.busRequest.dropoffLocation }), jsxRuntime.jsx(DetailField, { label: "Drop-off date and time", children: formatDateTime$1(request.busRequest.dropoffDateTime) }), jsxRuntime.jsx(DetailField, { label: "Vehicle type", children: request.busRequest.vehicleType }), request.busRequest.specialRequests && jsxRuntime.jsx(DetailField, { label: "Bus requests", children: request.busRequest.specialRequests })] })] })), request.specialRequests && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$3), "data-test": "individual-travel-request-detail-special-requests", children: [jsxRuntime.jsx("div", { className: sx(sectionHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$4), children: "Additional requests" }) }), jsxRuntime.jsx("p", { children: request.specialRequests })] }))] }))] })] }));
35987
36060
  };
35988
36061
 
35989
36062
  /**
@@ -35995,7 +36068,7 @@ const IndividualTravelRequestDetailPage = ({ request, loading = false, error, no
35995
36068
  * the first place, and `'& p'` / `'& ul, & ol'` say what `:global` was working
35996
36069
  * around.
35997
36070
  */
35998
- const pageStyle$e = {
36071
+ const pageStyle$f = {
35999
36072
  label: 'InfoCenterPage-pageStyle',
36000
36073
  display: 'flex',
36001
36074
  flexDirection: 'column',
@@ -36040,7 +36113,7 @@ const headerTextStyle = {
36040
36113
  label: 'InfoCenterPage-headerTextStyle',
36041
36114
  flex: 1,
36042
36115
  };
36043
- const titleStyle$9 = {
36116
+ const titleStyle$a = {
36044
36117
  label: 'InfoCenterPage-titleStyle',
36045
36118
  fontSize: 'var(--fs-2xl)',
36046
36119
  lineHeight: 'var(--lh-2xl)',
@@ -36092,7 +36165,7 @@ const gridStyle = {
36092
36165
  gap: 'var(--space-4)',
36093
36166
  };
36094
36167
  /* Article card */
36095
- const cardStyle$1 = {
36168
+ const cardStyle$2 = {
36096
36169
  label: 'InfoCenterPage-cardStyle',
36097
36170
  position: 'relative',
36098
36171
  display: 'flex',
@@ -36242,7 +36315,7 @@ const CATEGORY_ORDER = ['Alert', 'General', 'Air', 'Car', 'Hotel', 'Policy', 'ST
36242
36315
  const ArticleCard = ({ article, isAdmin, onOpen, onEdit }) => {
36243
36316
  const meta = metaFor(article.category);
36244
36317
  const CategoryIcon = meta.icon;
36245
- return (jsxRuntime.jsxs("div", { className: cx(sx(cardStyle$1), meta.alert && sx(cardAlertStyle)), children: [jsxRuntime.jsxs("span", { className: cx(sx(categoryBadgeStyle), meta.alert && sx(categoryAlertStyle)), children: [jsxRuntime.jsx(CategoryIcon, { size: 13 }), meta.label] }), jsxRuntime.jsx("h3", { className: sx(cardTitleStyle), children: article.title }), article.body && jsxRuntime.jsx("p", { className: sx(cardBodyStyle), children: article.body }), jsxRuntime.jsxs("button", { type: "button", className: sx(readMoreStyle), onClick: () => onOpen(article), children: ["Read more", jsxRuntime.jsx(ChevronRightIcon$1, { size: 14 })] }), isAdmin && (jsxRuntime.jsx("button", { type: "button", className: sx(editButtonStyle), onClick: () => onEdit?.(article), title: "Edit article", "aria-label": "Edit article", children: jsxRuntime.jsx(EditIcon$2, { size: 14 }) }))] }));
36318
+ return (jsxRuntime.jsxs("div", { className: cx(sx(cardStyle$2), meta.alert && sx(cardAlertStyle)), children: [jsxRuntime.jsxs("span", { className: cx(sx(categoryBadgeStyle), meta.alert && sx(categoryAlertStyle)), children: [jsxRuntime.jsx(CategoryIcon, { size: 13 }), meta.label] }), jsxRuntime.jsx("h3", { className: sx(cardTitleStyle), children: article.title }), article.body && jsxRuntime.jsx("p", { className: sx(cardBodyStyle), children: article.body }), jsxRuntime.jsxs("button", { type: "button", className: sx(readMoreStyle), onClick: () => onOpen(article), children: ["Read more", jsxRuntime.jsx(ChevronRightIcon$1, { size: 14 })] }), isAdmin && (jsxRuntime.jsx("button", { type: "button", className: sx(editButtonStyle), onClick: () => onEdit?.(article), title: "Edit article", "aria-label": "Edit article", children: jsxRuntime.jsx(EditIcon$2, { size: 14 }) }))] }));
36246
36319
  };
36247
36320
  /**
36248
36321
  * InfoCenterPage - Info Center article browser
@@ -36295,7 +36368,7 @@ const InfoCenterPage = ({ title = 'Info Center', accountName, articles = [], sta
36295
36368
  };
36296
36369
  const modalMeta = modalArticle ? metaFor(modalArticle.category) : null;
36297
36370
  const ModalCategoryIcon = modalMeta?.icon;
36298
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$e), className), children: [showBreadcrumb && (jsxRuntime.jsxs("nav", { className: sx(breadcrumbStyle$3), "aria-label": "Breadcrumb", children: [jsxRuntime.jsxs("a", { href: homeHref, children: [jsxRuntime.jsx(HomeIcon, { size: 14 }), "Home"] }), jsxRuntime.jsx("span", { children: "/" }), jsxRuntime.jsx("span", { children: "Info Center" })] })), jsxRuntime.jsxs("div", { className: sx(headerStyle$c), children: [jsxRuntime.jsxs("div", { className: sx(headerTextStyle), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$9), children: title }), accountName && (jsxRuntime.jsxs("p", { className: sx(subtitleStyle$3), children: ["Travel resources and program information for ", accountName, "."] }))] }), isAdmin && (jsxRuntime.jsxs(Button, { variant: "primary", size: "sm", onClick: onAddArticle, children: [jsxRuntime.jsx(PlusIcon$2, { size: 15 }), "Add Article"] }))] }), pageState === 'loading' && (jsxRuntime.jsxs("div", { className: sx(stateBlockStyle), children: [jsxRuntime.jsx(Spinner, { size: "md" }), jsxRuntime.jsx("span", { children: "Loading\u2026" })] })), pageState === 'error' && (jsxRuntime.jsxs("div", { className: cx(sx(stateBlockStyle), sx(stateErrorStyle)), children: [jsxRuntime.jsx(WarningIcon$1, { size: 28 }), jsxRuntime.jsx("p", { className: sx(stateTextStyle), children: "Unable to load Info Center resources." })] })), pageState === 'empty' && (jsxRuntime.jsxs("div", { className: sx(stateBlockStyle), children: [jsxRuntime.jsx(InfoIcon$1, { size: 28 }), jsxRuntime.jsx("p", { className: sx(stateTextStyle), children: "No resources available." })] })), pageState === 'data' && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(TabStrip, { className: sx(tabsStyle$1), tabs: [
36371
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$f), className), children: [showBreadcrumb && (jsxRuntime.jsxs("nav", { className: sx(breadcrumbStyle$3), "aria-label": "Breadcrumb", children: [jsxRuntime.jsxs("a", { href: homeHref, children: [jsxRuntime.jsx(HomeIcon, { size: 14 }), "Home"] }), jsxRuntime.jsx("span", { children: "/" }), jsxRuntime.jsx("span", { children: "Info Center" })] })), jsxRuntime.jsxs("div", { className: sx(headerStyle$c), children: [jsxRuntime.jsxs("div", { className: sx(headerTextStyle), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$a), children: title }), accountName && (jsxRuntime.jsxs("p", { className: sx(subtitleStyle$3), children: ["Travel resources and program information for ", accountName, "."] }))] }), isAdmin && (jsxRuntime.jsxs(Button, { variant: "primary", size: "sm", onClick: onAddArticle, children: [jsxRuntime.jsx(PlusIcon$2, { size: 15 }), "Add Article"] }))] }), pageState === 'loading' && (jsxRuntime.jsxs("div", { className: sx(stateBlockStyle), children: [jsxRuntime.jsx(Spinner, { size: "md" }), jsxRuntime.jsx("span", { children: "Loading\u2026" })] })), pageState === 'error' && (jsxRuntime.jsxs("div", { className: cx(sx(stateBlockStyle), sx(stateErrorStyle)), children: [jsxRuntime.jsx(WarningIcon$1, { size: 28 }), jsxRuntime.jsx("p", { className: sx(stateTextStyle), children: "Unable to load Info Center resources." })] })), pageState === 'empty' && (jsxRuntime.jsxs("div", { className: sx(stateBlockStyle), children: [jsxRuntime.jsx(InfoIcon$1, { size: 28 }), jsxRuntime.jsx("p", { className: sx(stateTextStyle), children: "No resources available." })] })), pageState === 'data' && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(TabStrip, { className: sx(tabsStyle$1), tabs: [
36299
36372
  { id: 'All', label: 'All', icon: jsxRuntime.jsx(GridIcon, { size: 15 }) },
36300
36373
  ...categories.map((cat) => {
36301
36374
  const m = metaFor(cat);
@@ -36319,7 +36392,7 @@ const InfoCenterPage = ({ title = 'Info Center', accountName, articles = [], sta
36319
36392
  * between two module classes (`.costTotal .costLabel/.costValue`) becomes
36320
36393
  * `costTotalTextStyle` — see the note there.
36321
36394
  */
36322
- const pageStyle$d = {
36395
+ const pageStyle$e = {
36323
36396
  label: 'ItineraryPage-pageStyle',
36324
36397
  display: 'flex',
36325
36398
  flexDirection: 'column',
@@ -36769,13 +36842,13 @@ const ItineraryPage = ({ tripName, recordLocator, travelers, startDate, endDate,
36769
36842
  const agentCard = agent && (jsxRuntime.jsxs("section", { className: sx(agentCardStyle), "aria-label": "Your travel team", children: [jsxRuntime.jsx("div", { className: sx(agentHeaderStyle), children: jsxRuntime.jsx("h2", { className: sx(agentTitleStyle), children: "Your Travel Team" }) }), jsxRuntime.jsxs("div", { className: sx(agentRowStyle), children: [jsxRuntime.jsxs("div", { className: sx(agentInfoStyle), children: [jsxRuntime.jsx("p", { className: sx(agentNameStyle), children: agent.name }), agent.role && jsxRuntime.jsx("p", { className: sx(agentRoleStyle), children: agent.role })] }), jsxRuntime.jsxs("ul", { className: sx(agentLinksStyle), children: [agent.email && (jsxRuntime.jsx(AgentContact, { icon: jsxRuntime.jsx(MailIcon, { size: 16 }), label: "Email", children: jsxRuntime.jsx("a", { className: sx(agentLinkStyle), href: `mailto:${agent.email}`, children: agent.email }) })), agent.businessHours && (jsxRuntime.jsx(AgentContact, { icon: jsxRuntime.jsx(CalendarIcon$1, { size: 16 }), label: "Business Hours", children: agent.businessHours })), agent.tollFreeNumber && (jsxRuntime.jsx(AgentContact, { icon: jsxRuntime.jsx(PhoneIcon, { size: 16 }), label: "Toll Free Number", children: jsxRuntime.jsx("a", { className: sx(agentLinkStyle), href: telHref(agent.tollFreeNumber), children: agent.tollFreeNumber }) })), agent.afterHoursPhone && (jsxRuntime.jsxs(AgentContact, { icon: jsxRuntime.jsx(HeadsetIcon, { size: 16 }), label: "After-Hours/Emergency Service", children: [jsxRuntime.jsx("a", { className: sx(agentLinkStyle), href: telHref(agent.afterHoursPhone), children: agent.afterHoursPhone }), agent.afterHoursNote && jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" ", agent.afterHoursNote] })] }))] })] })] }));
36770
36843
  const titleRow = (jsxRuntime.jsxs("div", { className: sx(titleRowStyle), children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$3), children: "Air Invoice Details" }), showStatus && jsxRuntime.jsx(StatusBadge, { status: badge.variant, label: badge.label })] }));
36771
36844
  const actions = showActions && (jsxRuntime.jsxs("div", { className: sx(actionsStyle$1), "aria-label": "Itinerary actions", children: [onPrint && jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", leftIcon: jsxRuntime.jsx(PrinterIcon, { size: 16 }), "data-test": "itinerary-print", onClick: onPrint, children: "Print" }), onEmail && jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", leftIcon: jsxRuntime.jsx(MailIcon, { size: 16 }), "data-test": "itinerary-email", onClick: onEmail, children: "Email" }), onAddToCalendar && jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", leftIcon: jsxRuntime.jsx(CalendarIcon$1, { size: 16 }), "data-test": "itinerary-add-to-calendar", onClick: onAddToCalendar, children: "Add to calendar" }), onDownloadInvoice && jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", leftIcon: jsxRuntime.jsx(DocumentIcon, { size: 16 }), "data-test": "itinerary-download-invoice", onClick: onDownloadInvoice, children: "Invoice PDF" })] }));
36772
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$d), className), "data-test": "itinerary-page", children: [jsxRuntime.jsx(PageHeaderSubsection, { sectionName: sectionName, pageName: pageName ?? (travelers.length > 0 ? `Itinerary for ${itineraryPageName(travelers)}` : 'Itinerary'), meta: startDate && endDate ? jsxRuntime.jsx(TravelDateRange, { startDate: startDate, endDate: endDate }) : undefined, onBack: onBack, backLabel: backLabel }), !showInvoice && notices, !showInvoice && agentCard, showInvoice ? (jsxRuntime.jsxs("section", { className: sx(invoiceSectionStyle), "aria-label": "Booking and invoice", children: [jsxRuntime.jsxs("div", { className: sx(invoiceActionsStyle), children: [jsxRuntime.jsx(Segment, { size: "sm", options: VIEW_OPTIONS, value: view, onChange: changeView, "aria-label": "Itinerary view" }), actions] }), !itineraryOnly && notices, !itineraryOnly && agentCard, !itineraryOnly && bookingCard, !itineraryOnly && invoice && jsxRuntime.jsx(AirInvoiceCard, { ...invoice, title: "Air Invoice Details" })] })) : (jsxRuntime.jsxs("header", { className: sx(headerStyle$b), children: [jsxRuntime.jsxs("div", { className: sx(headerMainStyle$1), children: [titleRow, jsxRuntime.jsxs("dl", { className: sx(factsStyle$1), children: [recordLocator && (jsxRuntime.jsxs("div", { className: sx(factStyle), children: [jsxRuntime.jsx("dt", { className: sx(factLabelStyle), children: "Confirmation" }), jsxRuntime.jsx("dd", { className: cx(sx(factValueStyle), sx(monoStyle$1)), children: recordLocator })] })), startDate && endDate && (jsxRuntime.jsxs("div", { className: sx(factStyle), children: [jsxRuntime.jsx("dt", { className: sx(factLabelStyle), children: "Travel dates" }), jsxRuntime.jsx("dd", { className: sx(factValueStyle), children: formatItineraryDateRange(startDate, endDate) })] })), travelers.length > 0 && (jsxRuntime.jsxs("div", { className: sx(factStyle), children: [jsxRuntime.jsx("dt", { className: sx(factLabelStyle), children: travelers.length === 1 ? 'Traveler' : 'Travelers' }), jsxRuntime.jsx("dd", { className: sx(factValueStyle), title: travelers.join(', '), children: travelerLabel })] })), sportCode && (jsxRuntime.jsxs("div", { className: sx(factStyle), children: [jsxRuntime.jsx("dt", { className: sx(factLabelStyle), children: "Program" }), jsxRuntime.jsx("dd", { className: sx(factValueStyle), children: sportCode })] }))] })] }), actions] })), !showInvoice && bookingCard, !itineraryOnly && travelers.length > 1 && (jsxRuntime.jsxs("section", { className: sx(travelersStyle), "aria-label": "Travelers on this itinerary", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$3), children: "Travelers" }), jsxRuntime.jsx("ul", { className: sx(travelerListStyle), children: travelers.map((traveler) => jsxRuntime.jsx("li", { className: sx(travelerChipStyle), children: traveler }, traveler)) })] })), !itineraryOnly && !loading && !error && notice && (jsxRuntime.jsx("div", { "data-test": "itinerary-notice", children: jsxRuntime.jsx(Alert, { variant: "warning", title: "Additional booking details", children: notice }) })), jsxRuntime.jsxs("div", { className: sx(bodyStyle$1), children: [jsxRuntime.jsx("div", { className: sx(mainStyle$1), children: jsxRuntime.jsxs("div", { "data-test": loading ? 'itinerary-loading' : error ? 'itinerary-error' : undefined, children: [jsxRuntime.jsx(ItineraryTimeline, { segments: segments, loading: loading, error: error, onCheckIn: onCheckIn, showTypeTabs: true }), error && onRetry && (jsxRuntime.jsx("div", { className: sx(retryRowStyle), children: jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: onRetry, "data-test": "itinerary-retry", children: "Try again" }) }))] }) }), !loading && !error && (closingBanners.length > 0 || closingNotes) && (jsxRuntime.jsxs("div", { className: sx(noticesStyle), "data-test": "itinerary-closing", children: [closingBanners.length > 0 && jsxRuntime.jsx(PageBanners, { className: sx(bannersStyle), systemBanners: closingBanners, alertBanners: [] }), closingNotes && jsxRuntime.jsx("div", { className: sx(closingNotesStyle), children: closingNotes })] }))] })] }));
36845
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$e), className), "data-test": "itinerary-page", children: [jsxRuntime.jsx(PageHeaderSubsection, { sectionName: sectionName, pageName: pageName ?? (travelers.length > 0 ? `Itinerary for ${itineraryPageName(travelers)}` : 'Itinerary'), meta: startDate && endDate ? jsxRuntime.jsx(TravelDateRange, { startDate: startDate, endDate: endDate }) : undefined, onBack: onBack, backLabel: backLabel }), !showInvoice && notices, !showInvoice && agentCard, showInvoice ? (jsxRuntime.jsxs("section", { className: sx(invoiceSectionStyle), "aria-label": "Booking and invoice", children: [jsxRuntime.jsxs("div", { className: sx(invoiceActionsStyle), children: [jsxRuntime.jsx(Segment, { size: "sm", options: VIEW_OPTIONS, value: view, onChange: changeView, "aria-label": "Itinerary view" }), actions] }), !itineraryOnly && notices, !itineraryOnly && agentCard, !itineraryOnly && bookingCard, !itineraryOnly && invoice && jsxRuntime.jsx(AirInvoiceCard, { ...invoice, title: "Air Invoice Details" })] })) : (jsxRuntime.jsxs("header", { className: sx(headerStyle$b), children: [jsxRuntime.jsxs("div", { className: sx(headerMainStyle$1), children: [titleRow, jsxRuntime.jsxs("dl", { className: sx(factsStyle$1), children: [recordLocator && (jsxRuntime.jsxs("div", { className: sx(factStyle), children: [jsxRuntime.jsx("dt", { className: sx(factLabelStyle), children: "Confirmation" }), jsxRuntime.jsx("dd", { className: cx(sx(factValueStyle), sx(monoStyle$1)), children: recordLocator })] })), startDate && endDate && (jsxRuntime.jsxs("div", { className: sx(factStyle), children: [jsxRuntime.jsx("dt", { className: sx(factLabelStyle), children: "Travel dates" }), jsxRuntime.jsx("dd", { className: sx(factValueStyle), children: formatItineraryDateRange(startDate, endDate) })] })), travelers.length > 0 && (jsxRuntime.jsxs("div", { className: sx(factStyle), children: [jsxRuntime.jsx("dt", { className: sx(factLabelStyle), children: travelers.length === 1 ? 'Traveler' : 'Travelers' }), jsxRuntime.jsx("dd", { className: sx(factValueStyle), title: travelers.join(', '), children: travelerLabel })] })), sportCode && (jsxRuntime.jsxs("div", { className: sx(factStyle), children: [jsxRuntime.jsx("dt", { className: sx(factLabelStyle), children: "Program" }), jsxRuntime.jsx("dd", { className: sx(factValueStyle), children: sportCode })] }))] })] }), actions] })), !showInvoice && bookingCard, !itineraryOnly && travelers.length > 1 && (jsxRuntime.jsxs("section", { className: sx(travelersStyle), "aria-label": "Travelers on this itinerary", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$3), children: "Travelers" }), jsxRuntime.jsx("ul", { className: sx(travelerListStyle), children: travelers.map((traveler) => jsxRuntime.jsx("li", { className: sx(travelerChipStyle), children: traveler }, traveler)) })] })), !itineraryOnly && !loading && !error && notice && (jsxRuntime.jsx("div", { "data-test": "itinerary-notice", children: jsxRuntime.jsx(Alert, { variant: "warning", title: "Additional booking details", children: notice }) })), jsxRuntime.jsxs("div", { className: sx(bodyStyle$1), children: [jsxRuntime.jsx("div", { className: sx(mainStyle$1), children: jsxRuntime.jsxs("div", { "data-test": loading ? 'itinerary-loading' : error ? 'itinerary-error' : undefined, children: [jsxRuntime.jsx(ItineraryTimeline, { segments: segments, loading: loading, error: error, onCheckIn: onCheckIn, showTypeTabs: true }), error && onRetry && (jsxRuntime.jsx("div", { className: sx(retryRowStyle), children: jsxRuntime.jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: onRetry, "data-test": "itinerary-retry", children: "Try again" }) }))] }) }), !loading && !error && (closingBanners.length > 0 || closingNotes) && (jsxRuntime.jsxs("div", { className: sx(noticesStyle), "data-test": "itinerary-closing", children: [closingBanners.length > 0 && jsxRuntime.jsx(PageBanners, { className: sx(bannersStyle), systemBanners: closingBanners, alertBanners: [] }), closingNotes && jsxRuntime.jsx("div", { className: sx(closingNotesStyle), children: closingNotes })] }))] })] }));
36773
36846
  };
36774
36847
  ItineraryPage.displayName = 'ItineraryPage';
36775
36848
 
36776
36849
  /** NotFoundPage's compiled rules. A straight translation — nothing in the
36777
36850
  * stylesheet overlapped, so no specificity work was needed. */
36778
- const pageStyle$c = {
36851
+ const pageStyle$d = {
36779
36852
  label: 'NotFoundPage-pageStyle',
36780
36853
  display: 'flex',
36781
36854
  alignItems: 'center',
@@ -36784,7 +36857,7 @@ const pageStyle$c = {
36784
36857
  padding: 'var(--space-4)',
36785
36858
  backgroundColor: 'var(--color-gray-100)',
36786
36859
  };
36787
- const cardStyle = {
36860
+ const cardStyle$1 = {
36788
36861
  label: 'NotFoundPage-cardStyle',
36789
36862
  width: '100%',
36790
36863
  maxWidth: 400,
@@ -36813,7 +36886,7 @@ const errorCodeStyle = {
36813
36886
  color: 'var(--color-gray-800)',
36814
36887
  margin: '0 0 var(--space-4) 0',
36815
36888
  };
36816
- const titleStyle$8 = {
36889
+ const titleStyle$9 = {
36817
36890
  label: 'NotFoundPage-titleStyle',
36818
36891
  fontSize: 'var(--text-xl)',
36819
36892
  fontWeight: 'var(--font-medium)',
@@ -36842,13 +36915,13 @@ const DefaultIllustration = () => (jsxRuntime.jsxs("svg", { width: "120", height
36842
36915
  * - Optional illustration
36843
36916
  */
36844
36917
  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 = '', }) => {
36845
- const pageClasses = cx(sx(pageStyle$c), className);
36846
- return (jsxRuntime.jsx("div", { className: pageClasses, children: jsxRuntime.jsxs("div", { className: sx(cardStyle), children: [jsxRuntime.jsx("div", { className: sx(illustrationStyle), children: illustration || jsxRuntime.jsx(DefaultIllustration, {}) }), jsxRuntime.jsx("h1", { className: sx(errorCodeStyle), children: errorCode }), jsxRuntime.jsx("h2", { className: sx(titleStyle$8), children: title }), jsxRuntime.jsx("p", { className: sx(messageStyle), children: message }), action && (jsxRuntime.jsx("div", { className: sx(actionStyle), children: action }))] }) }));
36918
+ const pageClasses = cx(sx(pageStyle$d), className);
36919
+ return (jsxRuntime.jsx("div", { className: pageClasses, children: jsxRuntime.jsxs("div", { className: sx(cardStyle$1), children: [jsxRuntime.jsx("div", { className: sx(illustrationStyle), children: illustration || jsxRuntime.jsx(DefaultIllustration, {}) }), jsxRuntime.jsx("h1", { className: sx(errorCodeStyle), children: errorCode }), jsxRuntime.jsx("h2", { className: sx(titleStyle$9), children: title }), jsxRuntime.jsx("p", { className: sx(messageStyle), children: message }), action && (jsxRuntime.jsx("div", { className: sx(actionStyle), children: action }))] }) }));
36847
36920
  };
36848
36921
  NotFoundPage.displayName = 'NotFoundPage';
36849
36922
 
36850
36923
  /** OffFleetLearnedExamplesPage's compiled rules — flat, no specificity ladder. */
36851
- const pageStyle$b = {
36924
+ const pageStyle$c = {
36852
36925
  label: 'OffFleetLearnedExamplesPage-pageStyle',
36853
36926
  display: 'flex',
36854
36927
  flexDirection: 'column',
@@ -36864,7 +36937,7 @@ const headerStyle$a = {
36864
36937
  flexDirection: 'column',
36865
36938
  gap: 'var(--space-2)',
36866
36939
  };
36867
- const titleStyle$7 = {
36940
+ const titleStyle$8 = {
36868
36941
  label: 'OffFleetLearnedExamplesPage-titleStyle',
36869
36942
  margin: 0,
36870
36943
  color: 'var(--fg-1)',
@@ -36943,7 +37016,7 @@ const pairTitleStyle = {
36943
37016
  letterSpacing: '0.06em',
36944
37017
  textTransform: 'uppercase',
36945
37018
  };
36946
- const codeStyle = {
37019
+ const codeStyle$1 = {
36947
37020
  label: 'OffFleetLearnedExamplesPage-codeStyle',
36948
37021
  maxHeight: 260,
36949
37022
  margin: 0,
@@ -36968,7 +37041,7 @@ const OFF_FLEET_LEARNED_EMPTY_COPY = 'The corpus starts empty and only /api/Repr
36968
37041
  * Learned examples — the corrections corpus. The empty state explains the mechanism
36969
37042
  * rather than apologising, because an empty corpus is the correct starting state.
36970
37043
  */
36971
- const OffFleetLearnedExamplesPage = ({ examples = [], onOpenExample, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$b), className), "data-test": "off-fleet-learned-examples-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$a), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$7), children: "Learned examples" }), jsxRuntime.jsx("p", { className: sx(descriptionStyle$3), children: OFF_FLEET_LEARNED_DESCRIPTION })] }), examples.length === 0 ? (jsxRuntime.jsx(EmptyState$1, { title: "No examples yet", description: OFF_FLEET_LEARNED_EMPTY_COPY, icon: jsxRuntime.jsx(LightbulbIcon, { size: 32 }) })) : (jsxRuntime.jsx("ul", { className: sx(examplesStyle), children: examples.map((example) => (jsxRuntime.jsxs("li", { className: sx(exampleStyle), "data-test": "off-fleet-learned-example", children: [jsxRuntime.jsxs("div", { className: sx(exampleHeaderStyle), children: [jsxRuntime.jsx("span", { className: sx(operatorStyle), children: example.operator }), jsxRuntime.jsxs("span", { className: sx(metaStyle), children: [example.sourceFileName, " \u00B7 learned ", example.learnedLabel] }), onOpenExample && (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", className: sx(openButtonStyle), onClick: () => onOpenExample(example.id), "data-test": "off-fleet-open-example", children: "Open" }))] }), jsxRuntime.jsxs("div", { className: sx(pairStyle), children: [jsxRuntime.jsxs("div", { className: sx(pairSideStyle), children: [jsxRuntime.jsx("h2", { className: sx(pairTitleStyle), children: "Raw text" }), jsxRuntime.jsx("pre", { className: sx(codeStyle), "data-test": "off-fleet-example-raw", children: example.rawText })] }), jsxRuntime.jsxs("div", { className: sx(pairSideStyle), children: [jsxRuntime.jsx("h2", { className: sx(pairTitleStyle), children: "Corrected JSON" }), jsxRuntime.jsx("pre", { className: sx(codeStyle), "data-test": "off-fleet-example-json", children: example.correctedJson })] })] })] }, example.id))) }))] }));
37044
+ const OffFleetLearnedExamplesPage = ({ examples = [], onOpenExample, className = '', }) => (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$c), className), "data-test": "off-fleet-learned-examples-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$a), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$8), children: "Learned examples" }), jsxRuntime.jsx("p", { className: sx(descriptionStyle$3), children: OFF_FLEET_LEARNED_DESCRIPTION })] }), examples.length === 0 ? (jsxRuntime.jsx(EmptyState$1, { title: "No examples yet", description: OFF_FLEET_LEARNED_EMPTY_COPY, icon: jsxRuntime.jsx(LightbulbIcon, { size: 32 }) })) : (jsxRuntime.jsx("ul", { className: sx(examplesStyle), children: examples.map((example) => (jsxRuntime.jsxs("li", { className: sx(exampleStyle), "data-test": "off-fleet-learned-example", children: [jsxRuntime.jsxs("div", { className: sx(exampleHeaderStyle), children: [jsxRuntime.jsx("span", { className: sx(operatorStyle), children: example.operator }), jsxRuntime.jsxs("span", { className: sx(metaStyle), children: [example.sourceFileName, " \u00B7 learned ", example.learnedLabel] }), onOpenExample && (jsxRuntime.jsx(Button, { variant: "outline", size: "sm", className: sx(openButtonStyle), onClick: () => onOpenExample(example.id), "data-test": "off-fleet-open-example", children: "Open" }))] }), jsxRuntime.jsxs("div", { className: sx(pairStyle), children: [jsxRuntime.jsxs("div", { className: sx(pairSideStyle), children: [jsxRuntime.jsx("h2", { className: sx(pairTitleStyle), children: "Raw text" }), jsxRuntime.jsx("pre", { className: sx(codeStyle$1), "data-test": "off-fleet-example-raw", children: example.rawText })] }), jsxRuntime.jsxs("div", { className: sx(pairSideStyle), children: [jsxRuntime.jsx("h2", { className: sx(pairTitleStyle), children: "Corrected JSON" }), jsxRuntime.jsx("pre", { className: sx(codeStyle$1), "data-test": "off-fleet-example-json", children: example.correctedJson })] })] })] }, example.id))) }))] }));
36972
37045
  OffFleetLearnedExamplesPage.displayName = 'OffFleetLearnedExamplesPage';
36973
37046
 
36974
37047
  /**
@@ -36977,7 +37050,7 @@ OffFleetLearnedExamplesPage.displayName = 'OffFleetLearnedExamplesPage';
36977
37050
  * One rule per element, no shared properties between them, so no selector
36978
37051
  * needed doubling on the way across.
36979
37052
  */
36980
- const pageStyle$a = {
37053
+ const pageStyle$b = {
36981
37054
  label: 'OffFleetReviewQueuePage-pageStyle',
36982
37055
  display: 'flex',
36983
37056
  flexDirection: 'column',
@@ -36993,7 +37066,7 @@ const headerStyle$9 = {
36993
37066
  flexDirection: 'column',
36994
37067
  gap: 'var(--space-2)',
36995
37068
  };
36996
- const titleStyle$6 = {
37069
+ const titleStyle$7 = {
36997
37070
  label: 'OffFleetReviewQueuePage-titleStyle',
36998
37071
  margin: 0,
36999
37072
  color: 'var(--fg-1)',
@@ -37140,7 +37213,7 @@ const OffFleetReviewQueuePage = ({ submissions, counts, onReview, onOpenRawText,
37140
37213
  render: (_value, submission) => (jsxRuntime.jsx(Button, { size: "sm", onClick: () => onReview?.(submission.id), "data-test": "off-fleet-review", children: "Review" })),
37141
37214
  },
37142
37215
  ];
37143
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$a), className), "data-test": "off-fleet-review-queue-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$9), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$6), children: "Review queue" }), jsxRuntime.jsx("p", { className: sx(descriptionStyle$2), children: OFF_FLEET_QUEUE_DESCRIPTION })] }), jsxRuntime.jsxs("div", { className: sx(statsStyle), "data-test": "off-fleet-stats", children: [jsxRuntime.jsx(Metric, { label: "Needs review", value: tally['needs-review'] }), jsxRuntime.jsx(Metric, { label: "Received", value: tally.received }), jsxRuntime.jsx(Metric, { label: "Processing", value: tally.processing }), jsxRuntime.jsx(Metric, { label: "Parsed", value: tally.parsed }), jsxRuntime.jsx(Metric, { label: "All submissions", value: tally.all })] }), jsxRuntime.jsx(Table, { columns: columns, data: submissions, rowKey: "id", loading: loading, emptyContent: jsxRuntime.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." }) })] }));
37216
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$b), className), "data-test": "off-fleet-review-queue-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$9), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$7), children: "Review queue" }), jsxRuntime.jsx("p", { className: sx(descriptionStyle$2), children: OFF_FLEET_QUEUE_DESCRIPTION })] }), jsxRuntime.jsxs("div", { className: sx(statsStyle), "data-test": "off-fleet-stats", children: [jsxRuntime.jsx(Metric, { label: "Needs review", value: tally['needs-review'] }), jsxRuntime.jsx(Metric, { label: "Received", value: tally.received }), jsxRuntime.jsx(Metric, { label: "Processing", value: tally.processing }), jsxRuntime.jsx(Metric, { label: "Parsed", value: tally.parsed }), jsxRuntime.jsx(Metric, { label: "All submissions", value: tally.all })] }), jsxRuntime.jsx(Table, { columns: columns, data: submissions, rowKey: "id", loading: loading, emptyContent: jsxRuntime.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." }) })] }));
37144
37217
  };
37145
37218
  OffFleetReviewQueuePage.displayName = 'OffFleetReviewQueuePage';
37146
37219
 
@@ -37153,7 +37226,7 @@ OffFleetReviewQueuePage.displayName = 'OffFleetReviewQueuePage';
37153
37226
  * `.section` together, is now split across the two style objects it applied to
37154
37227
  * — an object owns every rule that targets it.
37155
37228
  */
37156
- const pageStyle$9 = {
37229
+ const pageStyle$a = {
37157
37230
  label: 'OffFleetSubmissionDetailPage-pageStyle',
37158
37231
  display: 'flex',
37159
37232
  flexDirection: 'column',
@@ -37186,7 +37259,7 @@ const headerStyle$8 = {
37186
37259
  flexDirection: 'column',
37187
37260
  gap: 'var(--space-1)',
37188
37261
  };
37189
- const titleStyle$5 = {
37262
+ const titleStyle$6 = {
37190
37263
  label: 'OffFleetSubmissionDetailPage-titleStyle',
37191
37264
  margin: 0,
37192
37265
  color: 'var(--fg-1)',
@@ -37508,13 +37581,13 @@ const OffFleetSubmissionDetailPage = ({ submissionId, fileName, statusLabel = 'N
37508
37581
  target?.querySelector('input')?.focus();
37509
37582
  };
37510
37583
  const blocked = Boolean(blockedReason);
37511
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$9), className), "data-test": "off-fleet-submission-detail-page", children: [jsxRuntime.jsxs("div", { className: sx(topRowStyle), children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$2), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "off-fleet-detail-back", children: backLabel })), jsxRuntime.jsx(StatusBadge, { status: "in-review", label: statusLabel })] }), jsxRuntime.jsxs("header", { className: sx(headerStyle$8), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$5), children: fileName }), jsxRuntime.jsx("p", { className: sx(subtitleStyle$2), children: submissionId })] }), jsxRuntime.jsx(Alert, { variant: "warning", title: "Why this needs review", children: jsxRuntime.jsx("span", { className: sx(reasonStyle), "data-test": "off-fleet-detail-reason", children: failureReason }) }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Source document", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Source document" }), jsxRuntime.jsx("p", { className: sx(sectionHelpStyle$1), children: "Text the parser actually read \u2014 OCR damage included." }), jsxRuntime.jsx("pre", { className: sx(rawTextStyle), "data-test": "off-fleet-raw-text", children: rawText })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Submission", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Submission" }), jsxRuntime.jsxs("dl", { className: sx(factsStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "File name" }), jsxRuntime.jsx("dd", { children: fileName })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Carrier" }), jsxRuntime.jsx("dd", { children: carrier })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Carrier Union" }), jsxRuntime.jsx("dd", { className: sx(monoStyle), children: carrierUnion })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Flight Program" }), jsxRuntime.jsx("dd", { className: sx(monoStyle), children: flightProgram })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Received" }), jsxRuntime.jsx("dd", { children: receivedAt })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Updated" }), jsxRuntime.jsx("dd", { children: updatedAt })] })] })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Segments", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Segments" }), jsxRuntime.jsxs("p", { className: sx(sectionHelpStyle$1), children: [charterSegmentCount, " charter segment(s) on this Flight Program"] }), jsxRuntime.jsx(Accordion, { defaultOpen: false, header: jsxRuntime.jsxs("span", { className: sx(accordionHeaderStyle), children: ["Trip segments available for matching (", charterSegmentCount, ")"] }), children: jsxRuntime.jsx("div", { className: sx(tableScrollStyle), children: jsxRuntime.jsxs("table", { className: sx(segmentTableStyle), "data-test": "off-fleet-segments", children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Departs" }), jsxRuntime.jsx("th", { scope: "col", children: "Route" }), jsxRuntime.jsx("th", { scope: "col", children: "Trip" })] }) }), jsxRuntime.jsx("tbody", { children: tripSegments.map((segment) => (jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { children: segment.departs }), jsxRuntime.jsxs("td", { children: [segment.origin, " \u2192 ", segment.destination] }), jsxRuntime.jsx("td", { className: sx(monoStyle), children: segment.tripGuid })] }, segment.id))) })] }) }) })] }), extractionJson && (jsxRuntime.jsx("section", { className: sx(sectionStyle$2), "aria-label": "Extraction JSON", children: jsxRuntime.jsx(Accordion, { defaultOpen: false, header: jsxRuntime.jsx("span", { className: sx(accordionHeaderStyle), children: "Extraction JSON as stored" }), children: jsxRuntime.jsx("pre", { className: sx(rawTextStyle), "data-test": "off-fleet-extraction-json", children: extractionJson }) }) })), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Quote header", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Quote header" }), jsxRuntime.jsx("p", { className: sx(sectionHelpStyle$1), children: "Fields the parser maps onto the Salesforce Flight Quote. Blank means null." }), jsxRuntime.jsxs("div", { className: sx(headerGridStyle), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" })] })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Flight legs", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Flight legs" }), jsxRuntime.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." }), jsxRuntime.jsx("ol", { className: sx(legsStyle$1), children: legs.map((leg, index) => (jsxRuntime.jsxs("li", { className: sx(legStyle$1), ref: (node) => {
37584
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$a), className), "data-test": "off-fleet-submission-detail-page", children: [jsxRuntime.jsxs("div", { className: sx(topRowStyle), children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$2), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "off-fleet-detail-back", children: backLabel })), jsxRuntime.jsx(StatusBadge, { status: "in-review", label: statusLabel })] }), jsxRuntime.jsxs("header", { className: sx(headerStyle$8), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$6), children: fileName }), jsxRuntime.jsx("p", { className: sx(subtitleStyle$2), children: submissionId })] }), jsxRuntime.jsx(Alert, { variant: "warning", title: "Why this needs review", children: jsxRuntime.jsx("span", { className: sx(reasonStyle), "data-test": "off-fleet-detail-reason", children: failureReason }) }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Source document", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Source document" }), jsxRuntime.jsx("p", { className: sx(sectionHelpStyle$1), children: "Text the parser actually read \u2014 OCR damage included." }), jsxRuntime.jsx("pre", { className: sx(rawTextStyle), "data-test": "off-fleet-raw-text", children: rawText })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Submission", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Submission" }), jsxRuntime.jsxs("dl", { className: sx(factsStyle), children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "File name" }), jsxRuntime.jsx("dd", { children: fileName })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Carrier" }), jsxRuntime.jsx("dd", { children: carrier })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Carrier Union" }), jsxRuntime.jsx("dd", { className: sx(monoStyle), children: carrierUnion })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Flight Program" }), jsxRuntime.jsx("dd", { className: sx(monoStyle), children: flightProgram })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Received" }), jsxRuntime.jsx("dd", { children: receivedAt })] }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("dt", { children: "Updated" }), jsxRuntime.jsx("dd", { children: updatedAt })] })] })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Segments", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Segments" }), jsxRuntime.jsxs("p", { className: sx(sectionHelpStyle$1), children: [charterSegmentCount, " charter segment(s) on this Flight Program"] }), jsxRuntime.jsx(Accordion, { defaultOpen: false, header: jsxRuntime.jsxs("span", { className: sx(accordionHeaderStyle), children: ["Trip segments available for matching (", charterSegmentCount, ")"] }), children: jsxRuntime.jsx("div", { className: sx(tableScrollStyle), children: jsxRuntime.jsxs("table", { className: sx(segmentTableStyle), "data-test": "off-fleet-segments", children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Departs" }), jsxRuntime.jsx("th", { scope: "col", children: "Route" }), jsxRuntime.jsx("th", { scope: "col", children: "Trip" })] }) }), jsxRuntime.jsx("tbody", { children: tripSegments.map((segment) => (jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { children: segment.departs }), jsxRuntime.jsxs("td", { children: [segment.origin, " \u2192 ", segment.destination] }), jsxRuntime.jsx("td", { className: sx(monoStyle), children: segment.tripGuid })] }, segment.id))) })] }) }) })] }), extractionJson && (jsxRuntime.jsx("section", { className: sx(sectionStyle$2), "aria-label": "Extraction JSON", children: jsxRuntime.jsx(Accordion, { defaultOpen: false, header: jsxRuntime.jsx("span", { className: sx(accordionHeaderStyle), children: "Extraction JSON as stored" }), children: jsxRuntime.jsx("pre", { className: sx(rawTextStyle), "data-test": "off-fleet-extraction-json", children: extractionJson }) }) })), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Quote header", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Quote header" }), jsxRuntime.jsx("p", { className: sx(sectionHelpStyle$1), children: "Fields the parser maps onto the Salesforce Flight Quote. Blank means null." }), jsxRuntime.jsxs("div", { className: sx(headerGridStyle), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" })] })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Flight legs", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Flight legs" }), jsxRuntime.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." }), jsxRuntime.jsx("ol", { className: sx(legsStyle$1), children: legs.map((leg, index) => (jsxRuntime.jsxs("li", { className: sx(legStyle$1), ref: (node) => {
37512
37585
  legRefs.current[leg.id] = node;
37513
37586
  }, "data-test": "off-fleet-leg", children: [jsxRuntime.jsxs("div", { className: sx(legHeaderStyle), children: [jsxRuntime.jsxs("span", { className: sx(legIndexStyle), children: ["Leg ", index + 1] }), jsxRuntime.jsx(StatusBadge, { status: MATCH_BADGES[leg.match].status, label: MATCH_BADGES[leg.match].label }), jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(removeLegStyle), onClick: () => removeLeg(leg.id), "data-test": "off-fleet-remove-leg", children: "Remove leg" })] }), jsxRuntime.jsxs("div", { className: sx(legGridStyle), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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))) }), jsxRuntime.jsx(Button, { variant: "outline", size: "sm", onClick: addLeg, "data-test": "off-fleet-add-leg", children: "Add leg" })] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Ambiguity flag", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Ambiguity flag" }), jsxRuntime.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 && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$2), "aria-label": "Pre-flight check", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$2), children: "Pre-flight check" }), jsxRuntime.jsx("div", { className: sx(tableScrollStyle), children: jsxRuntime.jsxs("table", { className: sx(preflightTableStyle), "data-test": "off-fleet-preflight", children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "col", children: "Leg" }), jsxRuntime.jsx("th", { scope: "col", children: "As stated" }), jsxRuntime.jsx("th", { scope: "col", children: "Per leg after normalization" })] }) }), jsxRuntime.jsx("tbody", { children: preflight.rows.map((row) => (jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "row", children: row.leg }), jsxRuntime.jsx("td", { children: row.asStated }), jsxRuntime.jsx("td", { children: row.perLegAfterNormalization })] }, row.leg))) }), jsxRuntime.jsx("tfoot", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { scope: "row", children: "Total" }), jsxRuntime.jsx("td", {}), jsxRuntime.jsx("td", { "data-test": "off-fleet-preflight-total", children: preflight.total })] }) })] }) }), jsxRuntime.jsxs("p", { className: sx(unmatchedStyle), "data-test": "off-fleet-unmatched-count", children: [preflight.unmatchedCount, " of ", preflight.legCount, " leg(s) unmatched"] }), jsxRuntime.jsx("ul", { className: sx(groupingsStyle), "data-test": "off-fleet-trip-groupings", children: preflight.tripGroupings.map((grouping) => (jsxRuntime.jsxs("li", { className: sx(groupingStyle), children: [jsxRuntime.jsx("span", { className: sx(monoStyle), children: grouping.tripGuid }), jsxRuntime.jsxs("span", { children: [grouping.legCount, " leg(s) \u00B7 ", grouping.total] })] }, grouping.tripGuid))) }), jsxRuntime.jsx("p", { className: sx(consequenceStyle), children: "Each total becomes one QuoteLineItem against a new Flight Quote for that Trip." }), preflight.diagnostics?.map((diagnostic) => (jsxRuntime.jsxs("div", { className: sx(diagnosticStyle), children: [jsxRuntime.jsx("p", { className: sx(diagnosticMessageStyle), "data-test": "off-fleet-diagnostic", children: diagnostic.message }), jsxRuntime.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) => (jsxRuntime.jsx(Alert, { variant: "warning", children: jsxRuntime.jsx("span", { className: sx(reasonStyle), "data-test": "off-fleet-warning", children: warning }) }, warning)))] })), jsxRuntime.jsxs("div", { className: sx(actionsStyle), children: [jsxRuntime.jsx(Button, { disabled: blocked, onClick: () => onCheckCorrection?.({ quoteHeader, legs, ambiguityReason }), "data-test": "off-fleet-check-correction", children: "Check correction" }), jsxRuntime.jsx(Button, { variant: "secondary", disabled: blocked, onClick: onReprocess, "data-test": "off-fleet-reprocess", children: "Reprocess submission" }), blockedReason && (jsxRuntime.jsx("p", { className: sx(blockedReasonStyle), "data-test": "off-fleet-blocked-reason", children: blockedReason }))] })] }));
37514
37587
  };
37515
37588
  OffFleetSubmissionDetailPage.displayName = 'OffFleetSubmissionDetailPage';
37516
37589
 
37517
- const pageStyle$8 = {
37590
+ const pageStyle$9 = {
37518
37591
  label: 'RosterProgramNumbersPage-pageStyle',
37519
37592
  display: 'flex',
37520
37593
  minWidth: 0,
@@ -37690,11 +37763,11 @@ const RosterProgramNumbersPage = ({ programs, loading = false, saving = false, o
37690
37763
  accountNumber: values[String(program.id)] ?? '',
37691
37764
  })));
37692
37765
  };
37693
- return (jsxRuntime.jsxs("section", { className: sx(pageStyle$8), "data-test": "roster-program-numbers-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$7), children: [jsxRuntime.jsxs("div", { className: sx(headingStyle$1), children: [jsxRuntime.jsx("h1", { children: "Edit Program Numbers" }), jsxRuntime.jsx("p", { children: "Update existing traveler loyalty-program numbers without changing the rest of the roster." })] }), jsxRuntime.jsx(Button, { type: "button", variant: "outline", size: "sm", "data-test": "program-numbers-back", onClick: onBack, children: "Back to Roster" })] }), jsxRuntime.jsx(Module, { title: "Roster Program Numbers", useToggle: false, children: jsxRuntime.jsxs("form", { onSubmit: submit, "data-test": "program-numbers-form", children: [loading ? (jsxRuntime.jsx("div", { className: sx(emptyStyle$2), role: "status", children: "Loading roster program numbers..." })) : programs.length ? (jsxRuntime.jsx("div", { className: sx(tableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(tableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { children: "Traveler" }), jsxRuntime.jsx("th", { children: "Program" }), jsxRuntime.jsx("th", { children: "Program Number" })] }) }), jsxRuntime.jsx("tbody", { children: programs.map((program) => (jsxRuntime.jsxs("tr", { "data-test": `program-number-row-${program.id}`, children: [jsxRuntime.jsx("td", { children: jsxRuntime.jsxs("div", { className: sx(travelerStyle), children: [jsxRuntime.jsx("strong", { children: program.travelerName }), program.travelerType && jsxRuntime.jsx("span", { children: program.travelerType })] }) }), jsxRuntime.jsx("td", { children: jsxRuntime.jsx("span", { className: sx(supplierStyle), children: program.supplierName }) }), jsxRuntime.jsx("td", { className: sx(inputCellStyle), children: jsxRuntime.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))) })] }) })) : (jsxRuntime.jsx("div", { className: sx(emptyStyle$2), children: "No existing membership programs are available to edit." })), !!programs.length && (jsxRuntime.jsxs("div", { className: sx(footerStyle$1), children: [jsxRuntime.jsx(Button, { type: "button", variant: "outline", disabled: saving, onClick: onBack, children: "Cancel" }), jsxRuntime.jsx(Button, { type: "submit", loading: saving, "data-test": "program-numbers-submit", children: "Submit" })] }))] }) })] }));
37766
+ return (jsxRuntime.jsxs("section", { className: sx(pageStyle$9), "data-test": "roster-program-numbers-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$7), children: [jsxRuntime.jsxs("div", { className: sx(headingStyle$1), children: [jsxRuntime.jsx("h1", { children: "Edit Program Numbers" }), jsxRuntime.jsx("p", { children: "Update existing traveler loyalty-program numbers without changing the rest of the roster." })] }), jsxRuntime.jsx(Button, { type: "button", variant: "outline", size: "sm", "data-test": "program-numbers-back", onClick: onBack, children: "Back to Roster" })] }), jsxRuntime.jsx(Module, { title: "Roster Program Numbers", useToggle: false, children: jsxRuntime.jsxs("form", { onSubmit: submit, "data-test": "program-numbers-form", children: [loading ? (jsxRuntime.jsx("div", { className: sx(emptyStyle$2), role: "status", children: "Loading roster program numbers..." })) : programs.length ? (jsxRuntime.jsx("div", { className: sx(tableWrapStyle), children: jsxRuntime.jsxs("table", { className: sx(tableStyle), children: [jsxRuntime.jsx("thead", { children: jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("th", { children: "Traveler" }), jsxRuntime.jsx("th", { children: "Program" }), jsxRuntime.jsx("th", { children: "Program Number" })] }) }), jsxRuntime.jsx("tbody", { children: programs.map((program) => (jsxRuntime.jsxs("tr", { "data-test": `program-number-row-${program.id}`, children: [jsxRuntime.jsx("td", { children: jsxRuntime.jsxs("div", { className: sx(travelerStyle), children: [jsxRuntime.jsx("strong", { children: program.travelerName }), program.travelerType && jsxRuntime.jsx("span", { children: program.travelerType })] }) }), jsxRuntime.jsx("td", { children: jsxRuntime.jsx("span", { className: sx(supplierStyle), children: program.supplierName }) }), jsxRuntime.jsx("td", { className: sx(inputCellStyle), children: jsxRuntime.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))) })] }) })) : (jsxRuntime.jsx("div", { className: sx(emptyStyle$2), children: "No existing membership programs are available to edit." })), !!programs.length && (jsxRuntime.jsxs("div", { className: sx(footerStyle$1), children: [jsxRuntime.jsx(Button, { type: "button", variant: "outline", disabled: saving, onClick: onBack, children: "Cancel" }), jsxRuntime.jsx(Button, { type: "submit", loading: saving, "data-test": "program-numbers-submit", children: "Submit" })] }))] }) })] }));
37694
37767
  };
37695
37768
  RosterProgramNumbersPage.displayName = 'RosterProgramNumbersPage';
37696
37769
 
37697
- const pageStyle$7 = {
37770
+ const pageStyle$8 = {
37698
37771
  label: 'RegularSeasonBidsPage-pageStyle',
37699
37772
  display: 'flex',
37700
37773
  flexDirection: 'column',
@@ -37716,7 +37789,7 @@ const headerStyle$6 = {
37716
37789
  flexDirection: 'column',
37717
37790
  gap: 'var(--space-1)',
37718
37791
  };
37719
- const titleStyle$4 = {
37792
+ const titleStyle$5 = {
37720
37793
  label: 'RegularSeasonBidsPage-titleStyle',
37721
37794
  margin: 0,
37722
37795
  color: 'var(--fg-1)',
@@ -37757,11 +37830,11 @@ const RegularSeasonBidsPage = ({ bids, bidType: controlledBidType, defaultBidTyp
37757
37830
  setInternalBidType(next);
37758
37831
  onBidTypeChange?.(next);
37759
37832
  };
37760
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$7), className), "data-test": "regular-season-bids-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$1), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "regular-season-bids-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$6), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$4), children: headingFor(bidType) }), jsxRuntime.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." })] }), jsxRuntime.jsx(Segment, { options: TAB_OPTIONS, value: bidType, onChange: selectBidType, "aria-label": "Bid queue", className: sx(tabsStyle) }), bidType === 'Awarded' && (jsxRuntime.jsx(Alert, { variant: "success", title: "Congratulations", children: "For awarded bids, an Account Executive from STM Charters will reach out with next steps via email." })), jsxRuntime.jsx(RegularSeasonBidsTable, { bids: bids, bidType: bidType, acmiCarrier: acmiCarrier, today: today, loading: loading, locale: locale, onSubmitBid: onSubmitBid, onViewBid: onViewBid, onNoBid: onNoBid, onBulkNoBid: onBulkNoBid })] }));
37833
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$8), className), "data-test": "regular-season-bids-page", children: [onBack && (jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle$1), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "regular-season-bids-back", children: backLabel })), jsxRuntime.jsxs("header", { className: sx(headerStyle$6), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$5), children: headingFor(bidType) }), jsxRuntime.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." })] }), jsxRuntime.jsx(Segment, { options: TAB_OPTIONS, value: bidType, onChange: selectBidType, "aria-label": "Bid queue", className: sx(tabsStyle) }), bidType === 'Awarded' && (jsxRuntime.jsx(Alert, { variant: "success", title: "Congratulations", children: "For awarded bids, an Account Executive from STM Charters will reach out with next steps via email." })), jsxRuntime.jsx(RegularSeasonBidsTable, { bids: bids, bidType: bidType, acmiCarrier: acmiCarrier, today: today, loading: loading, locale: locale, onSubmitBid: onSubmitBid, onViewBid: onViewBid, onNoBid: onNoBid, onBulkNoBid: onBulkNoBid })] }));
37761
37834
  };
37762
37835
  RegularSeasonBidsPage.displayName = 'RegularSeasonBidsPage';
37763
37836
 
37764
- const pageStyle$6 = {
37837
+ const pageStyle$7 = {
37765
37838
  label: 'RosterReportsPage-pageStyle',
37766
37839
  display: 'flex',
37767
37840
  minWidth: 0,
@@ -37847,7 +37920,7 @@ const emptyStyle$1 = {
37847
37920
  /**
37848
37921
  * Lists the roster reports a user can run, and reports progress while one runs.
37849
37922
  */
37850
- const RosterReportsPage = ({ reports, runningReportId, onBack, onRun }) => (jsxRuntime.jsxs("section", { className: sx(pageStyle$6), "data-test": "roster-reports-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$5), children: [jsxRuntime.jsxs("div", { className: sx(headingStyle), children: [jsxRuntime.jsx("h1", { children: "Roster Reports" }), jsxRuntime.jsx("p", { children: "Run the available reports for the selected team roster." })] }), jsxRuntime.jsx(Button, { type: "button", variant: "outline", size: "sm", "data-test": "roster-reports-back", onClick: onBack, children: "Back to Roster" })] }), jsxRuntime.jsx(Module, { title: "Team Reports", useToggle: false, children: reports.length ? (jsxRuntime.jsx("div", { className: sx(listStyle), "data-test": "roster-report-list", children: reports.map((report) => (jsxRuntime.jsxs("article", { className: sx(reportStyle), "data-test": `roster-report-${report.id}`, children: [jsxRuntime.jsxs("div", { className: sx(detailsStyle), children: [jsxRuntime.jsx("h2", { children: report.title }), report.description && jsxRuntime.jsx("p", { children: report.description })] }), jsxRuntime.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))) })) : (jsxRuntime.jsx("div", { className: sx(emptyStyle$1), children: "No roster reports are currently available." })) })] }));
37923
+ const RosterReportsPage = ({ reports, runningReportId, onBack, onRun }) => (jsxRuntime.jsxs("section", { className: sx(pageStyle$7), "data-test": "roster-reports-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$5), children: [jsxRuntime.jsxs("div", { className: sx(headingStyle), children: [jsxRuntime.jsx("h1", { children: "Roster Reports" }), jsxRuntime.jsx("p", { children: "Run the available reports for the selected team roster." })] }), jsxRuntime.jsx(Button, { type: "button", variant: "outline", size: "sm", "data-test": "roster-reports-back", onClick: onBack, children: "Back to Roster" })] }), jsxRuntime.jsx(Module, { title: "Team Reports", useToggle: false, children: reports.length ? (jsxRuntime.jsx("div", { className: sx(listStyle), "data-test": "roster-report-list", children: reports.map((report) => (jsxRuntime.jsxs("article", { className: sx(reportStyle), "data-test": `roster-report-${report.id}`, children: [jsxRuntime.jsxs("div", { className: sx(detailsStyle), children: [jsxRuntime.jsx("h2", { children: report.title }), report.description && jsxRuntime.jsx("p", { children: report.description })] }), jsxRuntime.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))) })) : (jsxRuntime.jsx("div", { className: sx(emptyStyle$1), children: "No roster reports are currently available." })) })] }));
37851
37924
  RosterReportsPage.displayName = 'RosterReportsPage';
37852
37925
 
37853
37926
  /**
@@ -37855,7 +37928,7 @@ RosterReportsPage.displayName = 'RosterReportsPage';
37855
37928
  * stylesheet it replaces. The one `@media (max-width: 767px)` block styled two
37856
37929
  * classes, so it is split between `pageStyle` and `headerMainStyle`.
37857
37930
  */
37858
- const pageStyle$5 = {
37931
+ const pageStyle$6 = {
37859
37932
  label: 'SourcingQuoteDetailPage-pageStyle',
37860
37933
  display: 'flex',
37861
37934
  flexDirection: 'column',
@@ -37906,7 +37979,7 @@ const quoteIdStyle = {
37906
37979
  letterSpacing: '0.06em',
37907
37980
  textTransform: 'uppercase',
37908
37981
  };
37909
- const titleStyle$3 = {
37982
+ const titleStyle$4 = {
37910
37983
  label: 'SourcingQuoteDetailPage-titleStyle',
37911
37984
  margin: 0,
37912
37985
  color: 'var(--fg-1)',
@@ -38250,11 +38323,11 @@ const SourcingQuoteDetailPage = ({ quote, backLabel = 'Sourcing Review Queue', o
38250
38323
  return reasons;
38251
38324
  }, [decided, quote.status, draft.lineItems, liveLegs, passengerCount]);
38252
38325
  const blocked = blockingReasons.length > 0;
38253
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$5), className), "data-test": "sourcing-quote-detail-page", children: [jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "sourcing-quote-back", children: backLabel }), jsxRuntime.jsxs("header", { className: sx(headerStyle$4), children: [jsxRuntime.jsxs("div", { className: sx(headerMainStyle), children: [jsxRuntime.jsxs("div", { className: sx(headerTitlesStyle), children: [jsxRuntime.jsx("span", { className: sx(quoteIdStyle), children: quote.id }), jsxRuntime.jsx("h1", { className: sx(titleStyle$3), children: draft.carrier }), jsxRuntime.jsxs("p", { className: sx(subtitleStyle$1), children: [quote.tripName, " \u00B7 ", quote.accountName, " \u00B7 ", quote.sport] })] }), jsxRuntime.jsx(StatusBadge, { status: quote.status, className: sx(statusStyle) })] }), jsxRuntime.jsxs("div", { className: sx(editGridStyle), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.jsxs("div", { className: sx(totalFieldStyle), children: [jsxRuntime.jsx("span", { className: sx(totalLabelStyle), children: "Quoted total" }), jsxRuntime.jsx("span", { className: sx(factTotalStyle), "data-test": "sourcing-quote-total", children: formattedTotal }), jsxRuntime.jsx("span", { className: sx(factHelpStyle), children: "Derived from the line items below \u2014 never entered by hand." })] })] }), hasReviewActions && (jsxRuntime.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 && (jsxRuntime.jsx(Alert, { variant: "warning", title: decided ? 'Quote already decided' : 'Why this cannot be approved yet', children: jsxRuntime.jsx("ul", { className: sx(blockingListStyle), "data-test": "sourcing-quote-blocking-reasons", children: blockingReasons.map((reason) => (jsxRuntime.jsx("li", { children: reason }, reason))) }) }))] }), quote.carrierNote && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Carrier note", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$1), children: "Carrier note" }), jsxRuntime.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." }), jsxRuntime.jsx("p", { className: sx(carrierNoteStyle), "data-test": "sourcing-quote-carrier-note", children: quote.carrierNote })] })), jsxRuntime.jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Leg breakdown", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$1), children: "Leg breakdown" }), jsxRuntime.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 ? (jsxRuntime.jsx("ul", { className: sx(legsStyle), children: legs.map((leg) => (jsxRuntime.jsx(LegRow, { leg: leg, locale: locale }, leg.id))) })) : (jsxRuntime.jsx("p", { className: sx(emptyLegsStyle), "data-test": "sourcing-quote-no-legs", children: "The carrier has not attached any legs to this quote." }))] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Cost line items", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$1), children: "Cost line items" }), jsxRuntime.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." }), jsxRuntime.jsx("ul", { className: sx(lineItemsStyle), children: draft.lineItems.map((lineItem) => (jsxRuntime.jsxs("li", { className: sx(lineItemStyle), "data-test": "sourcing-quote-line-item", children: [jsxRuntime.jsxs("div", { className: sx(lineItemHeadStyle), children: [jsxRuntime.jsx("span", { className: sx(lineItemLabelStyle), children: lineItem.label }), jsxRuntime.jsx("span", { className: sx(lineItemCategoryStyle), children: SOURCING_COST_CATEGORY_LABELS[lineItem.category ?? 'other'] })] }), jsxRuntime.jsxs("div", { className: sx(lineItemFieldsStyle), children: [jsxRuntime.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" }), jsxRuntime.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))) }), jsxRuntime.jsx(QuoteCostBreakdown, { lineItems: draft.lineItems, currency: quote.currency ?? 'USD', locale: locale, title: "", passengerCount: Number.isFinite(passengerCount) ? passengerCount : undefined })] })] }));
38326
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$6), className), "data-test": "sourcing-quote-detail-page", children: [jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", className: sx(breadcrumbStyle), leftIcon: jsxRuntime.jsx(ChevronLeftIcon, { size: 16 }), onClick: onBack, "data-test": "sourcing-quote-back", children: backLabel }), jsxRuntime.jsxs("header", { className: sx(headerStyle$4), children: [jsxRuntime.jsxs("div", { className: sx(headerMainStyle), children: [jsxRuntime.jsxs("div", { className: sx(headerTitlesStyle), children: [jsxRuntime.jsx("span", { className: sx(quoteIdStyle), children: quote.id }), jsxRuntime.jsx("h1", { className: sx(titleStyle$4), children: draft.carrier }), jsxRuntime.jsxs("p", { className: sx(subtitleStyle$1), children: [quote.tripName, " \u00B7 ", quote.accountName, " \u00B7 ", quote.sport] })] }), jsxRuntime.jsx(StatusBadge, { status: quote.status, className: sx(statusStyle) })] }), jsxRuntime.jsxs("div", { className: sx(editGridStyle), children: [jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.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" }), jsxRuntime.jsxs("div", { className: sx(totalFieldStyle), children: [jsxRuntime.jsx("span", { className: sx(totalLabelStyle), children: "Quoted total" }), jsxRuntime.jsx("span", { className: sx(factTotalStyle), "data-test": "sourcing-quote-total", children: formattedTotal }), jsxRuntime.jsx("span", { className: sx(factHelpStyle), children: "Derived from the line items below \u2014 never entered by hand." })] })] }), hasReviewActions && (jsxRuntime.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 && (jsxRuntime.jsx(Alert, { variant: "warning", title: decided ? 'Quote already decided' : 'Why this cannot be approved yet', children: jsxRuntime.jsx("ul", { className: sx(blockingListStyle), "data-test": "sourcing-quote-blocking-reasons", children: blockingReasons.map((reason) => (jsxRuntime.jsx("li", { children: reason }, reason))) }) }))] }), quote.carrierNote && (jsxRuntime.jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Carrier note", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$1), children: "Carrier note" }), jsxRuntime.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." }), jsxRuntime.jsx("p", { className: sx(carrierNoteStyle), "data-test": "sourcing-quote-carrier-note", children: quote.carrierNote })] })), jsxRuntime.jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Leg breakdown", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$1), children: "Leg breakdown" }), jsxRuntime.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 ? (jsxRuntime.jsx("ul", { className: sx(legsStyle), children: legs.map((leg) => (jsxRuntime.jsx(LegRow, { leg: leg, locale: locale }, leg.id))) })) : (jsxRuntime.jsx("p", { className: sx(emptyLegsStyle), "data-test": "sourcing-quote-no-legs", children: "The carrier has not attached any legs to this quote." }))] }), jsxRuntime.jsxs("section", { className: sx(sectionStyle$1), "aria-label": "Cost line items", children: [jsxRuntime.jsx("h2", { className: sx(sectionTitleStyle$1), children: "Cost line items" }), jsxRuntime.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." }), jsxRuntime.jsx("ul", { className: sx(lineItemsStyle), children: draft.lineItems.map((lineItem) => (jsxRuntime.jsxs("li", { className: sx(lineItemStyle), "data-test": "sourcing-quote-line-item", children: [jsxRuntime.jsxs("div", { className: sx(lineItemHeadStyle), children: [jsxRuntime.jsx("span", { className: sx(lineItemLabelStyle), children: lineItem.label }), jsxRuntime.jsx("span", { className: sx(lineItemCategoryStyle), children: SOURCING_COST_CATEGORY_LABELS[lineItem.category ?? 'other'] })] }), jsxRuntime.jsxs("div", { className: sx(lineItemFieldsStyle), children: [jsxRuntime.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" }), jsxRuntime.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))) }), jsxRuntime.jsx(QuoteCostBreakdown, { lineItems: draft.lineItems, currency: quote.currency ?? 'USD', locale: locale, title: "", passengerCount: Number.isFinite(passengerCount) ? passengerCount : undefined })] })] }));
38254
38327
  };
38255
38328
  SourcingQuoteDetailPage.displayName = 'SourcingQuoteDetailPage';
38256
38329
 
38257
- const pageStyle$4 = {
38330
+ const pageStyle$5 = {
38258
38331
  label: 'SourcingReviewQueuePage-pageStyle',
38259
38332
  display: 'flex',
38260
38333
  flexDirection: 'column',
@@ -38270,7 +38343,7 @@ const headerStyle$3 = {
38270
38343
  flexDirection: 'column',
38271
38344
  gap: 'var(--space-1)',
38272
38345
  };
38273
- const titleStyle$2 = {
38346
+ const titleStyle$3 = {
38274
38347
  label: 'SourcingReviewQueuePage-titleStyle',
38275
38348
  margin: 0,
38276
38349
  color: 'var(--fg-1)',
@@ -38303,7 +38376,7 @@ const SourcingReviewQueuePage = ({ title = 'Sourcing Review Queue', description
38303
38376
  }, [quotes]);
38304
38377
  // Metric coerces non-numeric values to 0, so the currency symbol goes through `prefix`.
38305
38378
  const compactAmount = React.useMemo(() => new Intl.NumberFormat(locale, { notation: 'compact', maximumFractionDigits: 1 }), [locale]);
38306
- return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$4), className), "data-test": "sourcing-review-queue-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$3), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$2), children: title }), description && jsxRuntime.jsx("p", { className: sx(descriptionStyle), children: description })] }), !hideSummary && (jsxRuntime.jsxs("div", { className: sx(summaryStyle), "data-test": "sourcing-review-queue-summary", children: [jsxRuntime.jsx(Metric, { label: "Awaiting review", value: summary.awaiting }), jsxRuntime.jsx(Metric, { label: "Approved this cycle", value: summary.approved }), jsxRuntime.jsx(Metric, { label: "Value awaiting review", prefix: "$", value: compactAmount.format(summary.awaitingValue) })] })), jsxRuntime.jsx(SourcingReviewQueueTable, { quotes: quotes, selectedQuoteIds: selectedQuoteIds, onSelectionChange: onSelectionChange, onOpenQuote: onOpenQuote, onBulkApprove: onBulkApprove, pageSize: pageSize, loading: loading, locale: locale })] }));
38379
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle$5), className), "data-test": "sourcing-review-queue-page", children: [jsxRuntime.jsxs("header", { className: sx(headerStyle$3), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$3), children: title }), description && jsxRuntime.jsx("p", { className: sx(descriptionStyle), children: description })] }), !hideSummary && (jsxRuntime.jsxs("div", { className: sx(summaryStyle), "data-test": "sourcing-review-queue-summary", children: [jsxRuntime.jsx(Metric, { label: "Awaiting review", value: summary.awaiting }), jsxRuntime.jsx(Metric, { label: "Approved this cycle", value: summary.approved }), jsxRuntime.jsx(Metric, { label: "Value awaiting review", prefix: "$", value: compactAmount.format(summary.awaitingValue) })] })), jsxRuntime.jsx(SourcingReviewQueueTable, { quotes: quotes, selectedQuoteIds: selectedQuoteIds, onSelectionChange: onSelectionChange, onOpenQuote: onOpenQuote, onBulkApprove: onBulkApprove, pageSize: pageSize, loading: loading, locale: locale })] }));
38307
38380
  };
38308
38381
 
38309
38382
  /**
@@ -38317,7 +38390,7 @@ const SourcingReviewQueuePage = ({ title = 'Sourcing Review Queue', description
38317
38390
  * No `&&` was needed: every class lands on its own element, so nothing here
38318
38391
  * ever depended on source order.
38319
38392
  */
38320
- const pageStyle$3 = {
38393
+ const pageStyle$4 = {
38321
38394
  label: 'TeamManagementPage-pageStyle',
38322
38395
  minWidth: 0,
38323
38396
  color: 'var(--color-ink, #282828)',
@@ -38412,7 +38485,7 @@ const DEFAULT_TABS = [
38412
38485
  * TeamManagementPage - Layout for team management with tabbed navigation
38413
38486
  */
38414
38487
  const TeamManagementPage = ({ variant = 'team', title = 'Team Management', teamPanel, contactsTitle = 'School Contacts', contactAlert, contacts, header, tabs = DEFAULT_TABS, activeTab = 'profile', onTabChange, children, sidebar, footer, className = '', }) => {
38415
- const pageClasses = cx(sx(pageStyle$3), className);
38488
+ const pageClasses = cx(sx(pageStyle$4), className);
38416
38489
  if (variant === 'overview') {
38417
38490
  return (jsxRuntime.jsxs("div", { className: cx(sx(overviewStyle), className), children: [jsxRuntime.jsx("header", { className: sx(overviewHeaderStyle), children: jsxRuntime.jsx("h1", { children: title }) }), jsxRuntime.jsxs("div", { className: sx(overviewGridStyle), children: [jsxRuntime.jsx("aside", { children: teamPanel }), jsxRuntime.jsxs("section", { className: sx(contactsColumnStyle), children: [jsxRuntime.jsx("h2", { children: contactsTitle }), contactAlert, contacts] })] })] }));
38418
38491
  }
@@ -38420,7 +38493,7 @@ const TeamManagementPage = ({ variant = 'team', title = 'Team Management', teamP
38420
38493
  };
38421
38494
  TeamManagementPage.displayName = 'TeamManagementPage';
38422
38495
 
38423
- const pageStyle$2 = {
38496
+ const pageStyle$3 = {
38424
38497
  label: 'TeamSchedulePage-pageStyle',
38425
38498
  display: 'flex',
38426
38499
  minWidth: 0,
@@ -38447,7 +38520,7 @@ const titleSectionStyle$1 = {
38447
38520
  flexDirection: 'column',
38448
38521
  gap: 12,
38449
38522
  };
38450
- const titleStyle$1 = {
38523
+ const titleStyle$2 = {
38451
38524
  label: 'TeamSchedulePage-titleStyle',
38452
38525
  margin: 0,
38453
38526
  color: 'var(--color-ink, #282828)',
@@ -38539,16 +38612,16 @@ const contentStyle$2 = {
38539
38612
  * - Schedule table (compact or normal view)
38540
38613
  */
38541
38614
  const TeamSchedulePage = ({ title = 'Season Schedule', mobileTitle = 'Season Schedule', subtitle, metrics = [], summary, teamFilter, serviceFilter, actions, compactView, normalView, expandedView, viewMode = 'compact', isMobile = false, className = '', }) => {
38542
- const pageClasses = cx(sx(pageStyle$2), className);
38615
+ const pageClasses = cx(sx(pageStyle$3), className);
38543
38616
  // Back-compat: `expandedView`/`'expanded'` were renamed to `normalView`/`'normal'`.
38544
38617
  const resolvedNormalView = normalView ?? expandedView;
38545
38618
  const resolvedViewMode = viewMode === 'expanded' ? 'normal' : viewMode;
38546
38619
  const headerClasses = cx(sx(headerStyle$2), isMobile && sx(headerMobileStyle$1));
38547
- return (jsxRuntime.jsxs("div", { className: pageClasses, "data-test": "team-schedule-page", children: [jsxRuntime.jsxs("div", { className: headerClasses, children: [jsxRuntime.jsxs("div", { className: sx(titleSectionStyle$1), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$1), children: isMobile ? mobileTitle : title }), subtitle && jsxRuntime.jsx("div", { className: sx(subtitleStyle), children: subtitle }), (teamFilter || serviceFilter) && (jsxRuntime.jsxs("div", { className: sx(filtersStyle$1), children: [teamFilter, serviceFilter] }))] }), (summary || metrics.length > 0) && (jsxRuntime.jsx("div", { className: cx(sx(metricsStyle$1), isMobile && sx(metricsMobileStyle$1)), children: summary ?? metrics.map((metric, i) => (jsxRuntime.jsxs("div", { className: sx(metricStyle$1), children: [jsxRuntime.jsxs("span", { className: sx(metricValueStyle$1), children: [metric.prefix, metric.value, metric.suffix] }), jsxRuntime.jsx("span", { className: sx(metricLabelStyle$1), children: metric.label })] }, i))) }))] }), actions, jsxRuntime.jsx("div", { className: sx(contentStyle$2), children: resolvedViewMode === 'compact' ? compactView : resolvedNormalView })] }));
38620
+ return (jsxRuntime.jsxs("div", { className: pageClasses, "data-test": "team-schedule-page", children: [jsxRuntime.jsxs("div", { className: headerClasses, children: [jsxRuntime.jsxs("div", { className: sx(titleSectionStyle$1), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$2), children: isMobile ? mobileTitle : title }), subtitle && jsxRuntime.jsx("div", { className: sx(subtitleStyle), children: subtitle }), (teamFilter || serviceFilter) && (jsxRuntime.jsxs("div", { className: sx(filtersStyle$1), children: [teamFilter, serviceFilter] }))] }), (summary || metrics.length > 0) && (jsxRuntime.jsx("div", { className: cx(sx(metricsStyle$1), isMobile && sx(metricsMobileStyle$1)), children: summary ?? metrics.map((metric, i) => (jsxRuntime.jsxs("div", { className: sx(metricStyle$1), children: [jsxRuntime.jsxs("span", { className: sx(metricValueStyle$1), children: [metric.prefix, metric.value, metric.suffix] }), jsxRuntime.jsx("span", { className: sx(metricLabelStyle$1), children: metric.label })] }, i))) }))] }), actions, jsxRuntime.jsx("div", { className: sx(contentStyle$2), children: resolvedViewMode === 'compact' ? compactView : resolvedNormalView })] }));
38548
38621
  };
38549
38622
  TeamSchedulePage.displayName = 'TeamSchedulePage';
38550
38623
 
38551
- const pageStyle$1 = {
38624
+ const pageStyle$2 = {
38552
38625
  label: 'TeamTravelCalendarPage-pageStyle',
38553
38626
  display: 'flex',
38554
38627
  minWidth: 0,
@@ -38575,7 +38648,7 @@ const titleSectionStyle = {
38575
38648
  flexDirection: 'column',
38576
38649
  gap: 12,
38577
38650
  };
38578
- const titleStyle = {
38651
+ const titleStyle$1 = {
38579
38652
  label: 'TeamTravelCalendarPage-titleStyle',
38580
38653
  margin: 0,
38581
38654
  color: 'var(--color-ink, #282828)',
@@ -38651,7 +38724,7 @@ const contentStyle$1 = {
38651
38724
  * - Sidebar for due dates
38652
38725
  */
38653
38726
  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 = '', }) => {
38654
- const pageClasses = cx(sx(pageStyle$1), className);
38727
+ const pageClasses = cx(sx(pageStyle$2), className);
38655
38728
  const headerClasses = cx(sx(headerStyle$1), isMobile && sx(headerMobileStyle));
38656
38729
  const renderView = () => {
38657
38730
  switch (view) {
@@ -38665,14 +38738,14 @@ const TeamTravelCalendarPage = ({ title = 'Team Travel Calendar', mobileTitle =
38665
38738
  return null;
38666
38739
  }
38667
38740
  };
38668
- return (jsxRuntime.jsxs("div", { className: pageClasses, "data-test": "team-travel-calendar-page", children: [jsxRuntime.jsxs("div", { className: headerClasses, children: [jsxRuntime.jsxs("div", { className: sx(titleSectionStyle), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle), children: isMobile ? mobileTitle : title }), jsxRuntime.jsxs("div", { className: sx(filtersStyle), children: [teamFilter, serviceFilter, viewSelector, typeSelector] })] }), (summary || metrics.length > 0) && (jsxRuntime.jsx("div", { className: cx(sx(metricsStyle), isMobile && sx(metricsMobileStyle)), children: summary ?? metrics.map((metric, i) => (jsxRuntime.jsxs("button", { className: sx(metricStyle), onClick: metric.onClick, type: "button", disabled: !metric.onClick, children: [jsxRuntime.jsx("span", { className: sx(metricValueStyle), children: metric.value }), jsxRuntime.jsx("span", { className: sx(metricLabelStyle), children: metric.label })] }, i))) }))] }), jsxRuntime.jsx("div", { className: sx(contentStyle$1), children: renderView() }), sidebar] }));
38741
+ return (jsxRuntime.jsxs("div", { className: pageClasses, "data-test": "team-travel-calendar-page", children: [jsxRuntime.jsxs("div", { className: headerClasses, children: [jsxRuntime.jsxs("div", { className: sx(titleSectionStyle), children: [jsxRuntime.jsx("h1", { className: sx(titleStyle$1), children: isMobile ? mobileTitle : title }), jsxRuntime.jsxs("div", { className: sx(filtersStyle), children: [teamFilter, serviceFilter, viewSelector, typeSelector] })] }), (summary || metrics.length > 0) && (jsxRuntime.jsx("div", { className: cx(sx(metricsStyle), isMobile && sx(metricsMobileStyle)), children: summary ?? metrics.map((metric, i) => (jsxRuntime.jsxs("button", { className: sx(metricStyle), onClick: metric.onClick, type: "button", disabled: !metric.onClick, children: [jsxRuntime.jsx("span", { className: sx(metricValueStyle), children: metric.value }), jsxRuntime.jsx("span", { className: sx(metricLabelStyle), children: metric.label })] }, i))) }))] }), jsxRuntime.jsx("div", { className: sx(contentStyle$1), children: renderView() }), sidebar] }));
38669
38742
  };
38670
38743
  TeamTravelCalendarPage.displayName = 'TeamTravelCalendarPage';
38671
38744
 
38672
38745
  /** TripDetailPage's compiled rules. The two media queries move inside the
38673
38746
  * styles they widen; nothing else in the stylesheet overlapped, so no
38674
38747
  * specificity work was needed. */
38675
- const pageStyle = {
38748
+ const pageStyle$1 = {
38676
38749
  label: 'TripDetailPage-pageStyle',
38677
38750
  display: 'flex',
38678
38751
  flexDirection: 'column',
@@ -38771,11 +38844,184 @@ const sidebarSectionStyle = {
38771
38844
  * - Right (3 cols): Events, Due Dates
38772
38845
  */
38773
38846
  const TripDetailPage = ({ header, airSegment, groundSegment, hotelSegment, filesSection, teamSection, eventsSection, dueDatesSection, className = '', }) => {
38774
- const pageClasses = cx(sx(pageStyle), className);
38847
+ const pageClasses = cx(sx(pageStyle$1), className);
38775
38848
  return (jsxRuntime.jsxs("div", { className: pageClasses, children: [header && (jsxRuntime.jsx("div", { className: sx(headerStyle), children: header })), jsxRuntime.jsxs("div", { className: sx(contentStyle), children: [jsxRuntime.jsxs("div", { className: sx(mainColumnStyle), children: [jsxRuntime.jsxs("div", { className: sx(segmentsGridStyle), children: [jsxRuntime.jsxs("div", { className: sx(segmentCardStyle), children: [jsxRuntime.jsx("h3", { className: sx(segmentTitleStyle), children: "Air" }), airSegment || jsxRuntime.jsx("div", { className: sx(emptyStyle), children: "No flights" })] }), jsxRuntime.jsxs("div", { className: sx(segmentCardStyle), children: [jsxRuntime.jsx("h3", { className: sx(segmentTitleStyle), children: "Ground" }), groundSegment || jsxRuntime.jsx("div", { className: sx(emptyStyle), children: "No ground transportation" })] }), jsxRuntime.jsxs("div", { className: sx(segmentCardStyle), children: [jsxRuntime.jsx("h3", { className: sx(segmentTitleStyle), children: "Hotel" }), hotelSegment || jsxRuntime.jsx("div", { className: sx(emptyStyle), children: "No hotels" })] })] }), filesSection && (jsxRuntime.jsxs("div", { className: sx(sectionStyle), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle), children: "Files" }), filesSection] })), teamSection && (jsxRuntime.jsxs("div", { className: sx(sectionStyle), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle), children: "Team Roster" }), teamSection] }))] }), jsxRuntime.jsxs("div", { className: sx(sidebarStyle), children: [eventsSection && (jsxRuntime.jsxs("div", { className: sx(sidebarSectionStyle), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle), children: "Events" }), eventsSection] })), dueDatesSection && (jsxRuntime.jsxs("div", { className: sx(sidebarSectionStyle), children: [jsxRuntime.jsx("h3", { className: sx(sectionTitleStyle), children: "Due Dates" }), dueDatesSection] }))] })] })] }));
38776
38849
  };
38777
38850
  TripDetailPage.displayName = 'TripDetailPage';
38778
38851
 
38852
+ const pageStyle = {
38853
+ label: 'VirtualInvoicingPage-pageStyle',
38854
+ color: 'var(--fg-1)',
38855
+ fontFamily: 'var(--font-family-base)',
38856
+ display: 'flex',
38857
+ flexDirection: 'column',
38858
+ gap: 'var(--space-6)',
38859
+ };
38860
+ const titleStyle = {
38861
+ label: 'VirtualInvoicingPage-titleStyle',
38862
+ margin: 0,
38863
+ fontFamily: 'var(--font-family-display)',
38864
+ fontWeight: 'var(--fw-semibold)',
38865
+ fontSize: 'var(--fs-4xl)',
38866
+ letterSpacing: '-0.02em',
38867
+ color: 'var(--color-primary)',
38868
+ };
38869
+ const eyebrowStyle = {
38870
+ label: 'VirtualInvoicingPage-eyebrowStyle',
38871
+ fontFamily: 'var(--font-family-label)',
38872
+ fontWeight: 'var(--fw-bold)',
38873
+ fontSize: 'var(--fs-xs)',
38874
+ letterSpacing: '0.18em',
38875
+ textTransform: 'uppercase',
38876
+ color: 'var(--color-accent-ink)',
38877
+ };
38878
+ const toolbarStyle = {
38879
+ label: 'VirtualInvoicingPage-toolbarStyle',
38880
+ display: 'flex',
38881
+ flexWrap: 'wrap',
38882
+ alignItems: 'center',
38883
+ justifyContent: 'space-between',
38884
+ gap: 'var(--space-3)',
38885
+ };
38886
+ const searchStyle = {
38887
+ label: 'VirtualInvoicingPage-searchStyle',
38888
+ flex: '1 1 280px',
38889
+ maxWidth: 420,
38890
+ };
38891
+ const toolbarActionsStyle = {
38892
+ label: 'VirtualInvoicingPage-toolbarActionsStyle',
38893
+ display: 'flex',
38894
+ gap: 'var(--space-2)',
38895
+ };
38896
+ const cardStyle = {
38897
+ label: 'VirtualInvoicingPage-cardStyle',
38898
+ background: 'var(--bg-surface)',
38899
+ border: '1px solid var(--border-color)',
38900
+ borderRadius: 'var(--radius-xl)',
38901
+ overflow: 'hidden',
38902
+ };
38903
+ const codeStyle = {
38904
+ label: 'VirtualInvoicingPage-codeStyle',
38905
+ fontWeight: 'var(--fw-semibold)',
38906
+ color: 'var(--fg-1)',
38907
+ };
38908
+ const nameStyle = {
38909
+ label: 'VirtualInvoicingPage-nameStyle',
38910
+ marginLeft: 'var(--space-2)',
38911
+ color: 'var(--fg-2)',
38912
+ };
38913
+ const noNameStyle = {
38914
+ label: 'VirtualInvoicingPage-noNameStyle',
38915
+ marginLeft: 'var(--space-2)',
38916
+ color: 'var(--fg-3)',
38917
+ fontStyle: 'italic',
38918
+ };
38919
+ const typeStyle = {
38920
+ label: 'VirtualInvoicingPage-typeStyle',
38921
+ fontFamily: 'var(--font-family-label)',
38922
+ fontWeight: 'var(--fw-semibold)',
38923
+ fontSize: 'var(--fs-xs)',
38924
+ letterSpacing: '0.08em',
38925
+ textTransform: 'uppercase',
38926
+ color: 'var(--fg-2)',
38927
+ };
38928
+ const rowActionsStyle = {
38929
+ label: 'VirtualInvoicingPage-rowActionsStyle',
38930
+ display: 'flex',
38931
+ justifyContent: 'flex-end',
38932
+ gap: 'var(--space-1)',
38933
+ };
38934
+ const countStyle = {
38935
+ label: 'VirtualInvoicingPage-countStyle',
38936
+ margin: 0,
38937
+ fontSize: 'var(--fs-sm)',
38938
+ color: 'var(--fg-3)',
38939
+ };
38940
+ const statusCellStyle = {
38941
+ label: 'VirtualInvoicingPage-statusCellStyle',
38942
+ display: 'flex',
38943
+ alignItems: 'center',
38944
+ gap: 'var(--space-2)',
38945
+ };
38946
+
38947
+ const blankHeader = (patch = {}) => ({
38948
+ accountId: '',
38949
+ branch: '',
38950
+ companyName: '',
38951
+ address: '',
38952
+ city: '',
38953
+ state: '',
38954
+ zipCode: '',
38955
+ phone: '',
38956
+ tollFree: '',
38957
+ afterHoursPhone: '',
38958
+ fax: '',
38959
+ defaultWebsite: '',
38960
+ email: '',
38961
+ hoursOfOperation: '',
38962
+ agentSurveyEndpoint: '',
38963
+ onlineSurveyEndpoint: '',
38964
+ surveyDelayDays: '0',
38965
+ description: '',
38966
+ ...patch,
38967
+ });
38968
+ /**
38969
+ * Virtual Invoicing administration: every account and branch with its status
38970
+ * and VI header in one place. Edit opens the header form beside the list, so
38971
+ * nothing is a separate page to hunt for.
38972
+ */
38973
+ const VirtualInvoicingPage = ({ entries, loading = false, supportEmail = 'productionsupport@shortstravel.com', onSaveHeader, onStatusChange, onDeleteEntry, onAddEntry, className = '', }) => {
38974
+ const [query, setQuery] = React.useState('');
38975
+ const [editing, setEditing] = React.useState(null);
38976
+ const [deleting, setDeleting] = React.useState(null);
38977
+ const visible = React.useMemo(() => {
38978
+ const q = query.trim().toLowerCase();
38979
+ if (!q)
38980
+ return entries;
38981
+ return entries.filter((e) => `${e.code} ${e.name ?? ''} ${e.type}`.toLowerCase().includes(q));
38982
+ }, [entries, query]);
38983
+ const columns = [
38984
+ {
38985
+ key: 'code',
38986
+ label: 'Branch/Account',
38987
+ render: (_, e) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: sx(codeStyle), children: e.code }), e.name ? jsxRuntime.jsx("span", { className: sx(nameStyle), children: e.name }) : jsxRuntime.jsx("span", { className: sx(noNameStyle), children: "No name" })] })),
38988
+ },
38989
+ { key: 'type', label: 'Type', render: (_, e) => jsxRuntime.jsx("span", { className: sx(typeStyle), children: e.type }) },
38990
+ {
38991
+ key: 'status',
38992
+ label: 'Status',
38993
+ render: (_, e) => (jsxRuntime.jsxs("div", { className: sx(statusCellStyle), children: [jsxRuntime.jsx(Toggle, { size: "sm", checked: e.status === 'LIVE', "aria-label": `Live: ${e.code}`, onChange: (live) => onStatusChange?.(e, live ? 'LIVE' : 'NOT_LIVE') }), e.status === 'LIVE' ? (jsxRuntime.jsx(StatusBadge, { status: "approved", label: "Live" })) : (jsxRuntime.jsx(StatusBadge, { status: "cancelled", label: "Not live" }))] })),
38994
+ },
38995
+ {
38996
+ key: 'header',
38997
+ label: 'VI header',
38998
+ render: (_, e) => e.header ? (jsxRuntime.jsx(StatusBadge, { status: "approved", label: "Configured" })) : (jsxRuntime.jsx(StatusBadge, { status: "not-ticketed", label: "Not configured" })),
38999
+ },
39000
+ {
39001
+ key: 'actions',
39002
+ label: 'Actions',
39003
+ align: 'right',
39004
+ render: (_, e) => (jsxRuntime.jsxs("div", { className: sx(rowActionsStyle), children: [jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Edit ${e.code}`, "data-test": `vi-edit-${e.code}`, onClick: () => setEditing({ entry: e }), children: jsxRuntime.jsx(EditIcon$2, { size: 16 }) }), jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", square: true, "aria-label": `Delete ${e.code}`, "data-test": `vi-delete-${e.code}`, onClick: () => setDeleting(e), children: jsxRuntime.jsx(TrashIcon$2, { size: 16 }) })] })),
39005
+ },
39006
+ ];
39007
+ const editingEntry = editing?.entry;
39008
+ const formValue = editingEntry?.header ??
39009
+ blankHeader(editingEntry
39010
+ ? editingEntry.type === 'ACCOUNT'
39011
+ ? { accountId: editingEntry.code, companyName: editingEntry.name ?? '' }
39012
+ : { branch: editingEntry.code, companyName: editingEntry.name ?? '' }
39013
+ : {});
39014
+ return (jsxRuntime.jsxs("div", { className: cx(sx(pageStyle), className), children: [jsxRuntime.jsxs("header", { children: [jsxRuntime.jsx("span", { className: sx(eyebrowStyle), children: "Administration" }), jsxRuntime.jsx("h1", { className: sx(titleStyle), children: "Virtual Invoicing" })] }), jsxRuntime.jsxs(Alert, { variant: "primary", children: ["Please notify ", jsxRuntime.jsx("a", { href: `mailto:${supportEmail}`, children: supportEmail }), " after making any additions or changes to the Account/Branch status."] }), jsxRuntime.jsxs("div", { className: sx(toolbarStyle), children: [jsxRuntime.jsx(SearchField, { className: sx(searchStyle), placeholder: "Search by code, name or type", value: query, onChange: setQuery, onClear: () => setQuery(''), showClear: true }), jsxRuntime.jsxs("div", { className: sx(toolbarActionsStyle), children: [jsxRuntime.jsx(Button, { variant: "outline", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 16 }), onClick: onAddEntry, "data-test": "vi-add-entry", children: "Add account/branch" }), jsxRuntime.jsx(Button, { variant: "primary", leftIcon: jsxRuntime.jsx(PlusIcon$2, { size: 16 }), onClick: () => setEditing({}), "data-test": "vi-add-header", children: "Add VI header" })] })] }), jsxRuntime.jsx("div", { className: sx(cardStyle), children: jsxRuntime.jsx(Table, { columns: columns, data: visible, rowKey: "id", loading: loading, emptyContent: jsxRuntime.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 && (jsxRuntime.jsxs("p", { className: sx(countStyle), children: ["Showing ", visible.length, " of ", entries.length] })), jsxRuntime.jsxs(Drawer, { isOpen: !!editing, onClose: () => setEditing(null), size: "lg", children: [jsxRuntime.jsx(Drawer.Header, { title: editingEntry ? `VI header · ${editingEntry.code}` : 'New VI header', onClose: () => setEditing(null) }), jsxRuntime.jsx(Drawer.Body, { children: jsxRuntime.jsx(ViHeaderForm, { value: formValue, onCancel: () => setEditing(null), onSave: (header) => {
39015
+ onSaveHeader?.(header, editingEntry);
39016
+ setEditing(null);
39017
+ } }, editingEntry?.id ?? 'new') })] }), jsxRuntime.jsx(Modal, { isOpen: !!deleting, onClose: () => setDeleting(null), title: "Delete account/branch?", size: "sm", footer: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Button, { variant: "outline", onClick: () => setDeleting(null), children: "Cancel" }), jsxRuntime.jsx(Button, { variant: "danger", "data-test": "vi-confirm-delete", onClick: () => {
39018
+ if (deleting)
39019
+ onDeleteEntry?.(deleting);
39020
+ setDeleting(null);
39021
+ }, children: "Delete" })] }), children: deleting && (jsxRuntime.jsxs("p", { children: [deleting.code, deleting.name ? ` – ${deleting.name}` : '', " will be removed from virtual invoicing. Remember to notify production support."] })) })] }));
39022
+ };
39023
+ VirtualInvoicingPage.displayName = 'VirtualInvoicingPage';
39024
+
38779
39025
  exports.ACMI_AIRCRAFT_OPTIONS = ACMI_AIRCRAFT_OPTIONS;
38780
39026
  exports.ACMI_CARRIER_OPTIONS = ACMI_CARRIER_OPTIONS;
38781
39027
  exports.ACMI_INSURANCE_FLAT = ACMI_INSURANCE_FLAT;
@@ -39023,6 +39269,8 @@ exports.TypeIcon = TypeIcon;
39023
39269
  exports.UploadIcon = UploadIcon;
39024
39270
  exports.UserIcon = UserIcon;
39025
39271
  exports.UsersIcon = UsersIcon$1;
39272
+ exports.ViHeaderForm = ViHeaderForm;
39273
+ exports.VirtualInvoicingPage = VirtualInvoicingPage;
39026
39274
  exports.WarningIcon = WarningIcon$1;
39027
39275
  exports.XIcon = XIcon;
39028
39276
  exports.absoluteFill = absoluteFill;