@shortstravelmgmt/component-lib 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -508,8 +508,10 @@ interface SegmentedSelectorProps {
508
508
  size?: 'sm' | 'md' | 'lg';
509
509
  className?: string;
510
510
  ariaLabel?: string;
511
+ /** Stable hook used by Hub acceptance and Chromatic tests. */
512
+ dataTest?: string;
511
513
  }
512
- declare const SegmentedSelector: ({ options, value, onChange, disabled, size, className, ariaLabel, }: SegmentedSelectorProps) => React.JSX.Element;
514
+ declare const SegmentedSelector: ({ options, value, onChange, disabled, size, className, ariaLabel, dataTest, }: SegmentedSelectorProps) => React.JSX.Element;
513
515
  type CalendarViewValue = 'calendar' | 'card' | 'list';
514
516
  interface CalendarViewSelectorProps extends Omit<SegmentedSelectorProps, 'options' | 'value' | 'onChange' | 'ariaLabel'> {
515
517
  value: CalendarViewValue;
@@ -1764,15 +1766,22 @@ interface TeamContactsValue {
1764
1766
  secondaryContactId?: TeamContactId;
1765
1767
  ccContactIds?: Array<TeamContactId | undefined>;
1766
1768
  }
1769
+ interface TeamContactsLoadingState {
1770
+ primary?: boolean;
1771
+ secondary?: boolean;
1772
+ cc?: boolean[];
1773
+ }
1767
1774
  interface TeamContactsPanelProps {
1768
1775
  contacts: TeamContactOption[];
1769
1776
  value: TeamContactsValue;
1770
1777
  onChange?: (value: TeamContactsValue) => void;
1771
1778
  disabled?: boolean;
1779
+ loading?: TeamContactsLoadingState;
1780
+ dataTestId?: string;
1772
1781
  className?: string;
1773
1782
  }
1774
1783
  declare const TeamContactsPanel: {
1775
- ({ contacts, value, onChange, disabled, className }: TeamContactsPanelProps): React.JSX.Element;
1784
+ ({ contacts, value, onChange, disabled, loading, dataTestId, className, }: TeamContactsPanelProps): React.JSX.Element;
1776
1785
  displayName: string;
1777
1786
  };
1778
1787
 
@@ -2674,4 +2683,4 @@ declare const TripDetailPage: {
2674
2683
  };
2675
2684
 
2676
2685
  export { Accordion, AdministrationPage, AirSegment, Alert, AppLayout, ArrowDownLeftIcon, ArrowUpRightIcon, Avatar, AvatarGroup, Badge, BuildingIcon, BusIcon, Button, CalendarIcon, CalendarTypeSelector, CalendarViewSelector, CarIcon, Card, CardBody, CardFooter, CardHeader, CharterManifestPage, CheckIcon, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, ConfirmModal, ContactList, ContactUsPage, CubeIcon, DashboardIcon, DashboardPage, Datepicker, DocumentIcon, DownloadIcon, Drawer, DrawerBody, DrawerFooter, DrawerHeader, Dropdown, DueDatesDrawer, EditIcon, EyeIcon, FilterChip, FilterIcon, FormField, FormRow, FormSection, FormStack, GridIcon, GroundSegment, GroupTravelRequestPage, HUB_ADMIN_ITEM, HUB_INDIVIDUAL_TRAVEL_ITEM, HUB_NAV_ITEMS, HomeIcon, HotelIcon, HotelSegment, HubAppShell, Icons, IndividualTravelPage, InfoCenterPage, InfoIcon, Input, LightbulbIcon, LimoIcon, LockIcon, LogoIcon, MailIcon, ManifestCapacityStats, ManifestViewToggle, MegaphoneIcon, MembershipPrograms, MenuIcon, Metric, MinusIcon, Modal, ModalFooter, Module, ModuleDivider, ModuleVerticalDivider, NavItem, NotFoundPage, PageBanners, PhoneIcon, PlaneIcon, PlusIcon, PreferencesPanel, PrinterIcon, Progress, ProgressBar, ProgressCircle, RailIcon, RefreshIcon, ReportIcon, RequestFormFooter, RequestFormHeader, RequestFormLayout, RequestSummary, RosterToolbar, SUPPLIER_TYPE_OPTIONS, SchoolContactForm, SearchField, SearchIcon, Segment, SegmentedSelector, Select, SelectFilter, ServiceToggle, ServiceToggleList, SettingsIcon, Sidenav, Spinner, StatusBadge, SummarySection, SupplierTypeToggle, Table, Tag, TeamCard, TeamContactsPanel, TeamEquipmentForm, TeamHeader, TeamImportForm, TeamManagementPage, TeamProgramForm, TeamRosterMemberForm, TeamScheduleActions, TeamScheduleCompactTable, TeamScheduleEditor, TeamScheduleExpandedTable, TeamSchedulePage, TeamSubMenu, TeamTravelCalendarCardView, TeamTravelCalendarListView, TeamTravelCalendarPage, TeamTravelCalendarToolbar, TeamTravelCalendarView, TeamUserAccessForm, Textarea, Timepicker, Title, Toggle, Tooltip, Topbar, TrashIcon, TravelServiceIcon, TravelSummaryMetrics, TravelerForm, TrendDownIcon, TrendUpIcon, TripDetailPage, TripSegment, TripTable, TypeIcon, UploadIcon, UserIcon, UsersIcon, WarningIcon, XIcon, formatCompactTripCost, formatTeamScheduleTravelDates, getTeamTravelCalendarPeriodLabel, isTravelDueDateCompleted, moveTeamTravelCalendarPeriod };
2677
- export type { AccordionProps, AccountInfo, AdministrationCard, AdministrationPageProps, AdministrationTab, AirSegmentProps, AlertProps, AlertVariant, AppLayoutProps, AvatarGroupProps, AvatarProps, AvatarSize, BadgeProps, BadgeSize, BadgeVariant, ButtonProps, ButtonSize, ButtonVariant, CalendarMetric, CalendarTypeSelectorProps, CalendarTypeValue, CalendarView, CalendarViewSelectorProps, CalendarViewValue, CardBodyProps, CardFooterProps, CardHeaderProps, CardPadding, CardProps, CardVariant, CharterManifestEquipment, CharterManifestPageProps, CharterManifestPassenger, CharterManifestSegment, CheckboxProps, ConfirmModalProps, Contact, ContactCardData, ContactInfo, ContactListProps, ContactPair, ContactUsData, ContactUsPageProps, DashboardPageProps, DatepickerProps, DatepickerSize, DrawerBodyProps, DrawerFooterProps, DrawerHeaderProps, DrawerPosition, DrawerProps, DrawerSize, DropdownAlignment, DropdownItemProps, DropdownProps, DueDatesDrawerProps, FilterChipProps, FilterOption, FlightData, FormFieldProps, FormRowProps, FormSectionProps, FormStackProps, GroundData, GroundSegmentProps, GroupTravelRequestContact, GroupTravelRequestFieldValue, GroupTravelRequestPageProps, GroupTravelRequestValues, GroupedTravelDueDates, HotelData, HotelSegmentProps, HubAppShellActions, HubAppShellProps, HubNavigationItem, IconName, IconProps, IndividualTravelPageProps, InfoCenterArticle, InfoCenterPageProps, InfoCenterPageState, InputProps, InputSize, ManifestCapacityStatsProps, ManifestSendState, ManifestView, ManifestViewToggleProps, MembershipProgram, MembershipProgramsProps, MetricProps, ModalFooterProps, ModalProps, ModalSize, ModuleProps, ModuleSize, NavItemProps, NavItemSize, NavItemVariant, NotFoundPageProps, PageBannersProps, PreferenceField, PreferenceSection, PreferencesPanelProps, ProgressBarProps, ProgressCircleProps, ProgressSize, ProgressVariant, RequestFormFooterProps, RequestFormHeaderProps, RequestFormLayoutProps, RequestSummaryProps, RosterToolbarProps, ScheduleFilterOption, ScheduleMetric, SchoolContactFormProps, SearchFieldProps, SeasonOption, SegmentOption, SegmentProps, SegmentVariant, SegmentedSelectorOption, SegmentedSelectorProps, SelectFilterOption, SelectFilterProps, SelectOption, SelectOptionGroup, SelectProps, SelectSize, ServiceConfig, ServiceToggleListProps, ServiceToggleProps, SidenavItem, SidenavProps, SpinnerProps, SpinnerSize, StatusBadgeProps, StatusBadgeVariant, SummaryItem, SummarySectionConfig, SummarySegment, SupplierTypeToggleProps, SupplierTypeValue, SystemBanner, TabKey, TableColumn, TableProps, TagProps, TagSize, TagVariant, TeamCardProps, TeamContactId, TeamContactOption, TeamContactsPanelProps, TeamContactsValue, TeamEquipmentFormProps, TeamEquipmentValues, TeamFormMode, TeamHeaderProps, TeamImportFormProps, TeamImportKind, TeamManagementPageProps, TeamManagementTab, TeamNumericValue, TeamOption, TeamPortalUserOption, TeamProgramFormProps, TeamProgramType, TeamProgramValues, TeamRosterMemberFormProps, TeamRosterMemberValues, TeamScheduleActionsProps, TeamScheduleCompactRow, TeamScheduleCompactTableProps, TeamScheduleEditorEvent, TeamScheduleEditorProps, TeamScheduleEditorTrip, TeamScheduleExpandedRow, TeamScheduleExpandedTableProps, TeamScheduleHomeAway, TeamSchedulePageProps, TeamSubMenuProps, TeamSubMenuTab, TeamTravelCalendarCardViewProps, TeamTravelCalendarDueDate, TeamTravelCalendarDuration, TeamTravelCalendarEvent, TeamTravelCalendarItemType, TeamTravelCalendarListViewProps, TeamTravelCalendarPageProps, TeamTravelCalendarSportGroup, TeamTravelCalendarToolbarProps, TeamTravelCalendarTrip, TeamTravelCalendarViewProps, TeamUserAccessFormProps, TeamUserAccessValues, TextareaProps, TimepickerProps, TimepickerSize, TitleProps, TitleWeight, ToggleProps, ToggleSize, ToolbarAction, TooltipPosition, TooltipProps, TooltipVariant, TopbarProps, TravelAlertBanner, TravelDueDateItem, TravelServiceIconProps, TravelSummaryMetricsProps, TravelType, TravelerFormData, TravelerFormProps, TripData, TripDetailPageProps, TripSegmentProps, TripTableProps, TypeIconProps, VendorCode };
2686
+ export type { AccordionProps, AccountInfo, AdministrationCard, AdministrationPageProps, AdministrationTab, AirSegmentProps, AlertProps, AlertVariant, AppLayoutProps, AvatarGroupProps, AvatarProps, AvatarSize, BadgeProps, BadgeSize, BadgeVariant, ButtonProps, ButtonSize, ButtonVariant, CalendarMetric, CalendarTypeSelectorProps, CalendarTypeValue, CalendarView, CalendarViewSelectorProps, CalendarViewValue, CardBodyProps, CardFooterProps, CardHeaderProps, CardPadding, CardProps, CardVariant, CharterManifestEquipment, CharterManifestPageProps, CharterManifestPassenger, CharterManifestSegment, CheckboxProps, ConfirmModalProps, Contact, ContactCardData, ContactInfo, ContactListProps, ContactPair, ContactUsData, ContactUsPageProps, DashboardPageProps, DatepickerProps, DatepickerSize, DrawerBodyProps, DrawerFooterProps, DrawerHeaderProps, DrawerPosition, DrawerProps, DrawerSize, DropdownAlignment, DropdownItemProps, DropdownProps, DueDatesDrawerProps, FilterChipProps, FilterOption, FlightData, FormFieldProps, FormRowProps, FormSectionProps, FormStackProps, GroundData, GroundSegmentProps, GroupTravelRequestContact, GroupTravelRequestFieldValue, GroupTravelRequestPageProps, GroupTravelRequestValues, GroupedTravelDueDates, HotelData, HotelSegmentProps, HubAppShellActions, HubAppShellProps, HubNavigationItem, IconName, IconProps, IndividualTravelPageProps, InfoCenterArticle, InfoCenterPageProps, InfoCenterPageState, InputProps, InputSize, ManifestCapacityStatsProps, ManifestSendState, ManifestView, ManifestViewToggleProps, MembershipProgram, MembershipProgramsProps, MetricProps, ModalFooterProps, ModalProps, ModalSize, ModuleProps, ModuleSize, NavItemProps, NavItemSize, NavItemVariant, NotFoundPageProps, PageBannersProps, PreferenceField, PreferenceSection, PreferencesPanelProps, ProgressBarProps, ProgressCircleProps, ProgressSize, ProgressVariant, RequestFormFooterProps, RequestFormHeaderProps, RequestFormLayoutProps, RequestSummaryProps, RosterToolbarProps, ScheduleFilterOption, ScheduleMetric, SchoolContactFormProps, SearchFieldProps, SeasonOption, SegmentOption, SegmentProps, SegmentVariant, SegmentedSelectorOption, SegmentedSelectorProps, SelectFilterOption, SelectFilterProps, SelectOption, SelectOptionGroup, SelectProps, SelectSize, ServiceConfig, ServiceToggleListProps, ServiceToggleProps, SidenavItem, SidenavProps, SpinnerProps, SpinnerSize, StatusBadgeProps, StatusBadgeVariant, SummaryItem, SummarySectionConfig, SummarySegment, SupplierTypeToggleProps, SupplierTypeValue, SystemBanner, TabKey, TableColumn, TableProps, TagProps, TagSize, TagVariant, TeamCardProps, TeamContactId, TeamContactOption, TeamContactsLoadingState, TeamContactsPanelProps, TeamContactsValue, TeamEquipmentFormProps, TeamEquipmentValues, TeamFormMode, TeamHeaderProps, TeamImportFormProps, TeamImportKind, TeamManagementPageProps, TeamManagementTab, TeamNumericValue, TeamOption, TeamPortalUserOption, TeamProgramFormProps, TeamProgramType, TeamProgramValues, TeamRosterMemberFormProps, TeamRosterMemberValues, TeamScheduleActionsProps, TeamScheduleCompactRow, TeamScheduleCompactTableProps, TeamScheduleEditorEvent, TeamScheduleEditorProps, TeamScheduleEditorTrip, TeamScheduleExpandedRow, TeamScheduleExpandedTableProps, TeamScheduleHomeAway, TeamSchedulePageProps, TeamSubMenuProps, TeamSubMenuTab, TeamTravelCalendarCardViewProps, TeamTravelCalendarDueDate, TeamTravelCalendarDuration, TeamTravelCalendarEvent, TeamTravelCalendarItemType, TeamTravelCalendarListViewProps, TeamTravelCalendarPageProps, TeamTravelCalendarSportGroup, TeamTravelCalendarToolbarProps, TeamTravelCalendarTrip, TeamTravelCalendarViewProps, TeamUserAccessFormProps, TeamUserAccessValues, TextareaProps, TimepickerProps, TimepickerSize, TitleProps, TitleWeight, ToggleProps, ToggleSize, ToolbarAction, TooltipPosition, TooltipProps, TooltipVariant, TopbarProps, TravelAlertBanner, TravelDueDateItem, TravelServiceIconProps, TravelSummaryMetricsProps, TravelType, TravelerFormData, TravelerFormProps, TripData, TripDetailPageProps, TripSegmentProps, TripTableProps, TypeIconProps, VendorCode };
package/dist/index.esm.js CHANGED
@@ -637,22 +637,22 @@ Accordion.displayName = 'Accordion';
637
637
  var styles$W = {"selector":"CalendarSelectors-module_selector__1nDos","item":"CalendarSelectors-module_item__CoR5s","active":"CalendarSelectors-module_active__u4w6Z","sm":"CalendarSelectors-module_sm__ju5t-","withLabel":"CalendarSelectors-module_withLabel__Jr9Re","md":"CalendarSelectors-module_md__a-U38","lg":"CalendarSelectors-module_lg__WHvAF","iconOnly":"CalendarSelectors-module_iconOnly__cAjyD"};
638
638
 
639
639
  const ListIcon = () => (jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", "aria-hidden": "true", children: [jsx("line", { x1: "8", y1: "6", x2: "21", y2: "6" }), jsx("line", { x1: "8", y1: "12", x2: "21", y2: "12" }), jsx("line", { x1: "8", y1: "18", x2: "21", y2: "18" }), jsx("circle", { cx: "3", cy: "6", r: "1", fill: "currentColor", stroke: "none" }), jsx("circle", { cx: "3", cy: "12", r: "1", fill: "currentColor", stroke: "none" }), jsx("circle", { cx: "3", cy: "18", r: "1", fill: "currentColor", stroke: "none" })] }));
640
- const SegmentedSelector = ({ options, value, onChange, disabled = false, size = 'md', className = '', ariaLabel = 'View options', }) => (jsx("div", { className: [styles$W.selector, className].filter(Boolean).join(' '), role: "group", "aria-label": ariaLabel, children: options.map((option) => {
640
+ const SegmentedSelector = ({ options, value, onChange, disabled = false, size = 'md', className = '', ariaLabel = 'View options', dataTest, }) => (jsx("div", { className: [styles$W.selector, className].filter(Boolean).join(' '), role: "group", "aria-label": ariaLabel, "data-test": dataTest, children: options.map((option) => {
641
641
  const active = option.id === value;
642
642
  const accessibleName = option.alt ?? option.label ?? option.id;
643
- return (jsxs("button", { type: "button", title: accessibleName, "aria-label": accessibleName, "aria-pressed": active, disabled: disabled, className: [
643
+ return (jsxs("button", { type: "button", title: accessibleName, "aria-label": accessibleName, "aria-pressed": active, disabled: disabled, "data-test": dataTest ? `${dataTest}-option-${option.id}` : undefined, className: [
644
644
  styles$W.item,
645
645
  styles$W[size],
646
646
  option.label ? styles$W.withLabel : styles$W.iconOnly,
647
647
  active ? styles$W.active : '',
648
648
  ].filter(Boolean).join(' '), onClick: () => onChange?.(option.id), children: [option.icon, option.label && jsx("span", { children: option.label })] }, option.id));
649
649
  }) }));
650
- const CalendarViewSelector = ({ value, onChange, ...props }) => (jsx(SegmentedSelector, { ...props, ariaLabel: "Calendar view", value: value, onChange: (nextValue) => onChange?.(nextValue), options: [
650
+ const CalendarViewSelector = ({ value, onChange, ...props }) => (jsx(SegmentedSelector, { ...props, ariaLabel: "Calendar view", dataTest: "calendar-view-selector", value: value, onChange: (nextValue) => onChange?.(nextValue), options: [
651
651
  { id: 'calendar', alt: 'Calendar', icon: jsx(CalendarIcon$1, { size: 20 }) },
652
652
  { id: 'card', alt: 'Card', icon: jsx(GridIcon, { size: 20 }) },
653
653
  { id: 'list', alt: 'List', icon: jsx(ListIcon, {}) },
654
654
  ] }));
655
- const CalendarTypeSelector = ({ value, onChange, ...props }) => (jsx(SegmentedSelector, { ...props, ariaLabel: "Calendar item type", value: value, onChange: (nextValue) => onChange?.(nextValue), options: [
655
+ const CalendarTypeSelector = ({ value, onChange, ...props }) => (jsx(SegmentedSelector, { ...props, ariaLabel: "Calendar item type", dataTest: "calendar-type-selector", value: value, onChange: (nextValue) => onChange?.(nextValue), options: [
656
656
  { id: 'trips', label: 'Trips' },
657
657
  { id: 'due_dates', label: 'Due Dates' },
658
658
  ] }));
@@ -1742,11 +1742,11 @@ const TeamCard = ({ title = 'Administer Teams', icon, teams, onTeamSelect, class
1742
1742
  };
1743
1743
  TeamCard.displayName = 'TeamCard';
1744
1744
 
1745
- var styles$l = {"panel":"TeamContactsPanel-module_panel__ox2ws","contactsModule":"TeamContactsPanel-module_contactsModule__grnnt","moduleBody":"TeamContactsPanel-module_moduleBody__9uTOW","moduleTitle":"TeamContactsPanel-module_moduleTitle__fuXRZ","infoButton":"TeamContactsPanel-module_infoButton__gq-T7","contactsGrid":"TeamContactsPanel-module_contactsGrid__bwue-","primaryGrid":"TeamContactsPanel-module_primaryGrid__ToUU1","verticalDivider":"TeamContactsPanel-module_verticalDivider__EwXj7","ccGrid":"TeamContactsPanel-module_ccGrid__Muf5N","picker":"TeamContactsPanel-module_picker__dIkEm","fieldLabel":"TeamContactsPanel-module_fieldLabel__1RMEZ","contactSegment":"TeamContactsPanel-module_contactSegment__FaK2K","contactDetails":"TeamContactsPanel-module_contactDetails__ob0ad","compactSegment":"TeamContactsPanel-module_compactSegment__B7CKZ","contactTrigger":"TeamContactsPanel-module_contactTrigger__-3jxx","emptyContact":"TeamContactsPanel-module_emptyContact__JnYCr","inactiveContact":"TeamContactsPanel-module_inactiveContact__uY-iK","contactTitle":"TeamContactsPanel-module_contactTitle__bl6C5","contactLink":"TeamContactsPanel-module_contactLink__TAnpf","contactMenu":"TeamContactsPanel-module_contactMenu__W6fQ-","compactMenu":"TeamContactsPanel-module_compactMenu__jCBcm","searchRow":"TeamContactsPanel-module_searchRow__kn7Nk","menuDivider":"TeamContactsPanel-module_menuDivider__7nn8t","contactOptions":"TeamContactsPanel-module_contactOptions__vcKoY","contactOption":"TeamContactsPanel-module_contactOption__ZfFUU","clearContact":"TeamContactsPanel-module_clearContact__C3SNA","clearIcon":"TeamContactsPanel-module_clearIcon__oEKaE","emptyOptions":"TeamContactsPanel-module_emptyOptions__IM68-"};
1745
+ var styles$l = {"panel":"TeamContactsPanel-module_panel__ox2ws","contactsModule":"TeamContactsPanel-module_contactsModule__grnnt","moduleBody":"TeamContactsPanel-module_moduleBody__9uTOW","moduleTitle":"TeamContactsPanel-module_moduleTitle__fuXRZ","infoButton":"TeamContactsPanel-module_infoButton__gq-T7","contactsGrid":"TeamContactsPanel-module_contactsGrid__bwue-","primaryGrid":"TeamContactsPanel-module_primaryGrid__ToUU1","verticalDivider":"TeamContactsPanel-module_verticalDivider__EwXj7","ccGrid":"TeamContactsPanel-module_ccGrid__Muf5N","picker":"TeamContactsPanel-module_picker__dIkEm","fieldLabel":"TeamContactsPanel-module_fieldLabel__1RMEZ","contactSegment":"TeamContactsPanel-module_contactSegment__FaK2K","contactAvatar":"TeamContactsPanel-module_contactAvatar__2DHmg","optionAvatar":"TeamContactsPanel-module_optionAvatar__jaIeL","contactDetails":"TeamContactsPanel-module_contactDetails__ob0ad","compactSegment":"TeamContactsPanel-module_compactSegment__B7CKZ","contactTrigger":"TeamContactsPanel-module_contactTrigger__-3jxx","emptyContact":"TeamContactsPanel-module_emptyContact__JnYCr","inactiveContact":"TeamContactsPanel-module_inactiveContact__uY-iK","contactTitle":"TeamContactsPanel-module_contactTitle__bl6C5","contactLink":"TeamContactsPanel-module_contactLink__TAnpf","contactMenu":"TeamContactsPanel-module_contactMenu__W6fQ-","compactMenu":"TeamContactsPanel-module_compactMenu__jCBcm","searchRow":"TeamContactsPanel-module_searchRow__kn7Nk","menuDivider":"TeamContactsPanel-module_menuDivider__7nn8t","contactOptions":"TeamContactsPanel-module_contactOptions__vcKoY","contactOption":"TeamContactsPanel-module_contactOption__ZfFUU","clearContact":"TeamContactsPanel-module_clearContact__C3SNA","clearIcon":"TeamContactsPanel-module_clearIcon__oEKaE","emptyOptions":"TeamContactsPanel-module_emptyOptions__IM68-"};
1746
1746
 
1747
1747
  const CONTACTS_NOTE = (jsxs(Fragment, { children: [jsx("strong", { children: "PLEASE NOTE:" }), " Primary and secondary contacts listed below will receive virtual invoices on all team travel trips. They also receive automated team travel email reminders. The primary contact receives team travel text alerts during travel. All CC contacts listed below will receive virtual invoices on all travel trips including individual travel."] }));
1748
1748
  const CONTACTS_TOOLTIP = 'Only contacts listed in the School Contacts are available to select as Team Contacts. Adding a contact to this team will add them to the User Contacts as well, but they can be removed if desired.';
1749
- const ContactPicker = ({ title, contacts, selectedId, onSelect, allowNone = true, compact = false, disabled = false, }) => {
1749
+ const ContactPicker = ({ title, contacts, selectedId, onSelect, allowNone = true, compact = false, disabled = false, loading = false, dataTestId, }) => {
1750
1750
  const [open, setOpen] = useState(false);
1751
1751
  const [search, setSearch] = useState('');
1752
1752
  const containerRef = useRef(null);
@@ -1769,23 +1769,23 @@ const ContactPicker = ({ title, contacts, selectedId, onSelect, allowNone = true
1769
1769
  setOpen(false);
1770
1770
  setSearch('');
1771
1771
  };
1772
- return (jsxs("div", { className: styles$l.picker, ref: containerRef, children: [jsx("div", { className: styles$l.fieldLabel, children: title }), jsxs("div", { className: [styles$l.contactSegment, compact ? styles$l.compactSegment : ''].filter(Boolean).join(' '), children: [!compact && selected && jsx(Avatar, { name: selected.name, size: "md" }), jsxs("div", { className: styles$l.contactDetails, children: [jsxs("button", { type: "button", className: [styles$l.contactTrigger, !selected ? styles$l.emptyContact : '', selected?.active === false ? styles$l.inactiveContact : ''].filter(Boolean).join(' '), disabled: disabled, "aria-expanded": open, "aria-haspopup": "listbox", "aria-label": `${title}: ${selected?.name ?? `Select ${title}`}`, onClick: () => setOpen((current) => !current), children: [jsx("span", { children: selected?.name ?? `Select ${title}` }), selected?.active === false && jsx(WarningIcon$1, { size: 16, "aria-label": "Inactive portal user" }), open ? jsx(ChevronUpIcon, { size: 16 }) : jsx(ChevronDownIcon$1, { size: 16 })] }), !compact && selected?.title && jsx("span", { className: styles$l.contactTitle, children: selected.title }), !compact && selected?.phone && jsxs("a", { href: `tel:${selected.phone}`, className: styles$l.contactLink, children: [jsx(PhoneIcon, { size: 15 }), selected.phone] }), !compact && selected?.email && jsxs("a", { href: `mailto:${selected.email}`, className: styles$l.contactLink, children: [jsx(MailIcon, { size: 15 }), selected.email] })] })] }), open && (jsxs("div", { className: [styles$l.contactMenu, compact ? styles$l.compactMenu : ''].filter(Boolean).join(' '), role: "listbox", "aria-label": `${title} options`, children: [jsx("div", { className: styles$l.searchRow, children: jsx(Input, { size: "sm", fullWidth: true, autoFocus: true, value: search, placeholder: "Search contacts", "aria-label": `Search ${title}`, leftIcon: jsx(SearchIcon$1, { size: 15 }), onChange: (event) => setSearch(event.target.value) }) }), jsx("div", { className: styles$l.menuDivider }), jsxs("div", { className: styles$l.contactOptions, children: [allowNone && selected && (jsxs("button", { type: "button", className: styles$l.clearContact, onClick: () => select(undefined), children: [jsx("span", { className: styles$l.clearIcon, children: jsx(TrashIcon$2, { size: 16 }) }), jsxs("span", { children: ["Clear ", title] })] })), filteredContacts.map((contact) => (jsxs("button", { type: "button", role: "option", "aria-selected": false, className: styles$l.contactOption, onClick: () => select(contact.id), children: [!compact && jsx(Avatar, { name: contact.name, size: "sm" }), jsxs("span", { children: [jsx("strong", { children: contact.name }), contact.title && jsx("small", { children: contact.title })] })] }, contact.id))), !filteredContacts.length && jsx("div", { className: styles$l.emptyOptions, children: "No matching contacts" })] })] }))] }));
1772
+ return (jsxs("div", { className: styles$l.picker, ref: containerRef, "data-test": dataTestId, children: [jsx("div", { className: styles$l.fieldLabel, children: title }), jsxs("div", { className: [styles$l.contactSegment, compact ? styles$l.compactSegment : ''].filter(Boolean).join(' '), children: [!compact && selected && jsx(Avatar, { className: styles$l.contactAvatar, name: selected.name, size: "sm" }), jsxs("div", { className: styles$l.contactDetails, children: [jsxs("button", { type: "button", className: [styles$l.contactTrigger, !selected ? styles$l.emptyContact : '', selected?.active === false ? styles$l.inactiveContact : ''].filter(Boolean).join(' '), disabled: disabled || loading, "data-test": `${dataTestId}-trigger`, "aria-expanded": open, "aria-haspopup": "listbox", "aria-label": `${title}: ${selected?.name ?? `Select ${title}`}`, onClick: () => setOpen((current) => !current), children: [jsx("span", { children: selected?.name ?? `Select ${title}` }), selected?.active === false && (jsx(Tooltip, { content: "A contact displayed in red is no longer an active portal user and must be replaced by an active user to ensure the accurate delivery of documents and notifications.", variant: "dark", children: jsx(WarningIcon$1, { size: 16, "aria-label": "Inactive portal user" }) })), loading ? jsx(Spinner, { size: "sm", label: `Updating ${title}` }) : open ? jsx(ChevronUpIcon, { size: 16 }) : jsx(ChevronDownIcon$1, { size: 16 })] }), !compact && selected?.title && jsx("span", { className: styles$l.contactTitle, children: selected.title }), !compact && selected?.phone && jsxs("a", { href: `tel:${selected.phone}`, className: styles$l.contactLink, children: [jsx(PhoneIcon, { size: 20 }), " ", selected.phone] }), !compact && selected?.email && jsxs("a", { href: `mailto:${selected.email}`, className: styles$l.contactLink, children: [jsx(MailIcon, { size: 20 }), " ", selected.email] })] })] }), open && (jsxs("div", { className: [styles$l.contactMenu, compact ? styles$l.compactMenu : ''].filter(Boolean).join(' '), role: "listbox", "aria-label": `${title} options`, children: [jsx("div", { className: styles$l.searchRow, children: jsx(Input, { size: "sm", fullWidth: true, autoFocus: true, value: search, placeholder: "Search contacts", "aria-label": `Search ${title}`, "data-test": `${dataTestId}-search`, leftIcon: jsx(SearchIcon$1, { size: 15 }), onChange: (event) => setSearch(event.target.value) }) }), jsx("div", { className: styles$l.menuDivider }), jsxs("div", { className: styles$l.contactOptions, children: [allowNone && selected && (jsxs("button", { type: "button", className: styles$l.clearContact, "data-test": `${dataTestId}-clear`, onClick: () => select(undefined), children: [jsx("span", { className: styles$l.clearIcon, children: jsx(TrashIcon$2, { size: 16 }) }), jsxs("span", { children: ["Clear ", title] })] })), filteredContacts.map((contact) => (jsxs("button", { type: "button", role: "option", "aria-selected": false, className: styles$l.contactOption, "data-test": `${dataTestId}-option-${contact.id}`, onClick: () => select(contact.id), children: [!compact && jsx(Avatar, { className: styles$l.optionAvatar, name: contact.name, size: "sm" }), jsxs("span", { children: [jsx("strong", { children: contact.name }), contact.title && jsx("small", { children: contact.title })] })] }, contact.id))), !filteredContacts.length && jsx("div", { className: styles$l.emptyOptions, children: "No matching contacts" })] })] }))] }));
1773
1773
  };
1774
- const TeamContactsPanel = ({ contacts, value, onChange, disabled = false, className = '' }) => {
1774
+ const TeamContactsPanel = ({ contacts, value, onChange, disabled = false, loading = {}, dataTestId = 'team-contacts', className = '', }) => {
1775
1775
  const ccContactIds = Array.from({ length: 4 }, (_, index) => value.ccContactIds?.[index]);
1776
1776
  const updateCC = (index, id) => {
1777
1777
  const next = [...ccContactIds];
1778
1778
  next[index] = id;
1779
1779
  onChange?.({ ...value, ccContactIds: next });
1780
1780
  };
1781
- return (jsxs("div", { className: [styles$l.panel, className].filter(Boolean).join(' '), children: [jsx(Alert, { variant: "warning", children: CONTACTS_NOTE }), jsx(Module, { title: (jsxs("span", { className: styles$l.moduleTitle, children: [jsx("span", { children: "Team Contacts" }), jsx(Tooltip, { content: CONTACTS_TOOLTIP, position: "bottom", variant: "light", children: jsx("button", { type: "button", className: styles$l.infoButton, "aria-label": "Team contacts information", children: jsx(InfoIcon$1, { size: 16 }) }) })] })), useToggle: false, className: styles$l.contactsModule, bodyClassName: styles$l.moduleBody, children: jsxs("div", { className: styles$l.contactsGrid, children: [jsxs("div", { className: styles$l.primaryGrid, children: [jsx(ContactPicker, { title: "Primary Contact", contacts: contacts, selectedId: value.primaryContactId, allowNone: false, disabled: disabled, onSelect: (primaryContactId) => onChange?.({ ...value, primaryContactId }) }), jsx("div", { className: styles$l.verticalDivider }), jsx(ContactPicker, { title: "Secondary Contact", contacts: contacts, selectedId: value.secondaryContactId, disabled: disabled, onSelect: (secondaryContactId) => onChange?.({ ...value, secondaryContactId }) })] }), jsx("div", { className: styles$l.verticalDivider }), jsx("div", { className: styles$l.ccGrid, children: ccContactIds.map((contactId, index) => (jsx(ContactPicker, { title: `CC Contact ${index + 1}`, contacts: contacts, selectedId: contactId, compact: true, disabled: disabled, onSelect: (id) => updateCC(index, id) }, index))) })] }) })] }));
1781
+ return (jsxs("div", { className: [styles$l.panel, className].filter(Boolean).join(' '), "data-test": dataTestId, children: [jsx(Alert, { variant: "warning", children: CONTACTS_NOTE }), jsx(Module, { title: (jsxs("span", { className: styles$l.moduleTitle, children: [jsx("span", { children: "Team Contacts" }), jsx(Tooltip, { content: CONTACTS_TOOLTIP, position: "bottom", variant: "light", children: jsx("button", { type: "button", className: styles$l.infoButton, "aria-label": "Team contacts information", children: jsx(InfoIcon$1, { size: 16 }) }) })] })), useToggle: false, className: styles$l.contactsModule, bodyClassName: styles$l.moduleBody, children: jsxs("div", { className: styles$l.contactsGrid, children: [jsxs("div", { className: styles$l.primaryGrid, children: [jsx(ContactPicker, { title: "Primary Contact", contacts: contacts, selectedId: value.primaryContactId, allowNone: false, disabled: disabled, loading: loading.primary, dataTestId: `${dataTestId}-primary`, onSelect: (primaryContactId) => onChange?.({ ...value, primaryContactId }) }), jsx("div", { className: styles$l.verticalDivider }), jsx(ContactPicker, { title: "Secondary Contact", contacts: contacts, selectedId: value.secondaryContactId, disabled: disabled, loading: loading.secondary, dataTestId: `${dataTestId}-secondary`, onSelect: (secondaryContactId) => onChange?.({ ...value, secondaryContactId }) })] }), jsx("div", { className: styles$l.verticalDivider }), jsx("div", { className: styles$l.ccGrid, children: ccContactIds.map((contactId, index) => (jsx(ContactPicker, { title: `CC Contact ${index + 1}`, contacts: contacts, selectedId: contactId, compact: true, disabled: disabled, loading: loading.cc?.[index], dataTestId: `${dataTestId}-cc-${index + 1}`, onSelect: (id) => updateCC(index, id) }, index))) })] }) })] }));
1782
1782
  };
1783
1783
  TeamContactsPanel.displayName = 'TeamContactsPanel';
1784
1784
 
1785
1785
  var styles$k = {"actions":"TeamScheduleActions-module_actions__OvuON","primaryRow":"TeamScheduleActions-module_primaryRow__8rwhE","tripCount":"TeamScheduleActions-module_tripCount__4axn4","seasonNavigator":"TeamScheduleActions-module_seasonNavigator__jmqeE","seasonLabel":"TeamScheduleActions-module_seasonLabel__8MtKK","secondaryRow":"TeamScheduleActions-module_secondaryRow__We2n9"};
1786
1786
 
1787
1787
  /** Exact presentational counterpart of Hub's Team Schedule action controls. */
1788
- const TeamScheduleActions = ({ isCompactView, tripCount, seasonLabel, seasonValue, seasonOptions = [], previousSeasonDisabled = false, exportDisabled = false, exporting = false, groupTravelDisabled = false, mergeDisabled = false, merging = false, onViewSchedule, onBack, onPreviousSeason, onNextSeason, onSeasonChange, onExport, onGroupTravelRequest, onMergeEvents, className = '', }) => (jsxs("div", { className: [styles$k.actions, className].filter(Boolean).join(' '), children: [jsxs("div", { className: styles$k.primaryRow, children: [!isCompactView ? (jsx(Button, { size: "sm", onClick: onViewSchedule, children: "View/Edit Schedule" })) : (jsx(Button, { size: "sm", onClick: onBack, leftIcon: jsx(ChevronLeftIcon, { size: 14 }), children: "Back" })), jsxs("div", { className: styles$k.seasonNavigator, children: [jsx(Button, { variant: "secondary", size: "sm", square: true, "aria-label": "Previous Season", disabled: previousSeasonDisabled, onClick: onPreviousSeason, children: jsx(ChevronLeftIcon, { size: 18 }) }), jsxs("div", { className: styles$k.seasonLabel, children: [jsx(Button, { variant: "secondary", size: "sm", children: seasonLabel }), !!seasonOptions.length && (jsx("select", { "aria-label": "Season", value: seasonValue, onChange: (event) => onSeasonChange?.(event.target.value), children: seasonOptions.map((option) => jsx("option", { value: option.value, children: option.label }, option.value)) }))] }), jsx(Button, { variant: "secondary", size: "sm", square: true, "aria-label": "Next Season", onClick: onNextSeason, children: jsx(ChevronRightIcon$1, { size: 18 }) })] }), isCompactView && jsx(Button, { variant: "outline", size: "sm", loading: exporting, disabled: exportDisabled, rightIcon: jsx(ArrowUpRightIcon, { size: 14 }), onClick: onExport, children: "Export XLS" }), jsxs("span", { className: styles$k.tripCount, children: [tripCount, " trips displayed"] })] }), isCompactView && (jsxs("div", { className: styles$k.secondaryRow, children: [jsx(Button, { variant: "outline", size: "sm", disabled: groupTravelDisabled, onClick: onGroupTravelRequest, children: "Group Travel Request" }), jsx(Button, { variant: "outline", size: "sm", disabled: mergeDisabled, loading: merging, onClick: onMergeEvents, children: "Merge Events" })] }))] }));
1788
+ const TeamScheduleActions = ({ isCompactView, tripCount, seasonLabel, seasonValue, seasonOptions = [], previousSeasonDisabled = false, exportDisabled = false, exporting = false, groupTravelDisabled = false, mergeDisabled = false, merging = false, onViewSchedule, onBack, onPreviousSeason, onNextSeason, onSeasonChange, onExport, onGroupTravelRequest, onMergeEvents, className = '', }) => (jsxs("div", { className: [styles$k.actions, className].filter(Boolean).join(' '), children: [jsxs("div", { className: styles$k.primaryRow, children: [!isCompactView ? (jsx(Button, { "data-test": "team-schedule-view-edit", size: "sm", onClick: onViewSchedule, children: "View/Edit Schedule" })) : (jsx(Button, { "data-test": "team-schedule-back", size: "sm", onClick: onBack, leftIcon: jsx(ChevronLeftIcon, { size: 14 }), children: "Back" })), jsxs("div", { className: styles$k.seasonNavigator, children: [jsx(Button, { variant: "secondary", size: "sm", square: true, "aria-label": "Previous Season", disabled: previousSeasonDisabled, onClick: onPreviousSeason, children: jsx(ChevronLeftIcon, { size: 18 }) }), jsxs("div", { className: styles$k.seasonLabel, children: [jsx(Button, { variant: "secondary", size: "sm", children: seasonLabel }), !!seasonOptions.length && (jsx("select", { "aria-label": "Season", value: seasonValue, onChange: (event) => onSeasonChange?.(event.target.value), children: seasonOptions.map((option) => jsx("option", { value: option.value, children: option.label }, option.value)) }))] }), jsx(Button, { variant: "secondary", size: "sm", square: true, "aria-label": "Next Season", onClick: onNextSeason, children: jsx(ChevronRightIcon$1, { size: 18 }) })] }), isCompactView && jsx(Button, { variant: "outline", size: "sm", loading: exporting, disabled: exportDisabled, rightIcon: jsx(ArrowUpRightIcon, { size: 14 }), onClick: onExport, children: "Export XLS" }), jsxs("span", { className: styles$k.tripCount, children: [tripCount, " trips displayed"] })] }), isCompactView && (jsxs("div", { className: styles$k.secondaryRow, children: [jsx(Button, { variant: "outline", size: "sm", disabled: groupTravelDisabled, onClick: onGroupTravelRequest, children: "Group Travel Request" }), jsx(Button, { variant: "outline", size: "sm", disabled: mergeDisabled, loading: merging, onClick: onMergeEvents, children: "Merge Events" })] }))] }));
1789
1789
 
1790
1790
  var styles$j = {"headers":"TeamScheduleCompactTable-module_headers__FVr2C","tripHeader":"TeamScheduleCompactTable-module_tripHeader__9vr2-","eventHeader":"TeamScheduleCompactTable-module_eventHeader__6gfwo","table":"TeamScheduleCompactTable-module_table__MdE3o","row":"TeamScheduleCompactTable-module_row__Rt0YC","trip":"TeamScheduleCompactTable-module_trip__oAUEQ","events":"TeamScheduleCompactTable-module_events__EwJi9","empty":"TeamScheduleCompactTable-module_empty__1u5HA","addRow":"TeamScheduleCompactTable-module_addRow__ejqSf"};
1791
1791
 
@@ -2521,9 +2521,9 @@ const ContactUsPage = ({ title = 'Your Team of Experts', state, errorMessage = '
2521
2521
  if (resolvedState === 'loading')
2522
2522
  return null;
2523
2523
  if (resolvedState === 'error' || resolvedState === 'empty') {
2524
- return (jsx("div", { className: styles$9.centeredState, children: jsx("div", { role: resolvedState === 'error' ? 'alert' : 'status', className: resolvedState === 'error' ? styles$9.error : styles$9.warning, children: resolvedState === 'error' ? errorMessage : 'No contact information available.' }) }));
2524
+ return (jsx("div", { className: styles$9.centeredState, "data-test": "contact-us-page", children: jsx("div", { "data-test": `contact-us-${resolvedState}`, role: resolvedState === 'error' ? 'alert' : 'status', className: resolvedState === 'error' ? styles$9.error : styles$9.warning, children: resolvedState === 'error' ? errorMessage : 'No contact information available.' }) }));
2525
2525
  }
2526
- return (jsx("div", { className: [styles$9.page, className].filter(Boolean).join(' '), children: jsxs("div", { className: styles$9.container, children: [jsx("header", { className: styles$9.header, children: jsx("h1", { children: title }) }), jsx("div", { className: styles$9.printRow, children: jsxs("button", { type: "button", onClick: onPrint ?? (() => window.print()), children: [jsx(PrinterIcon, { size: 16 }), "Print"] }) }), children ?? (data ? (jsxs(Fragment, { children: [!!(data.accountManagers?.length || data.travelAgents?.length) && (jsxs("div", { className: styles$9.primaryGrid, children: [jsx(SimpleContactCard, { title: "Account Manager", contacts: data.accountManagers }), jsx(SimpleContactCard, { title: "Travel Agent", contacts: data.travelAgents })] })), jsxs("div", { className: styles$9.stack, children: [jsxs(ContactCard, { title: "Group/Team Commercial Reservation Specialists", children: [jsx(ContactField, { label: "Business Hours:", children: jsx("span", { children: "Monday \u2013 Friday 8am-8pm ET" }) }), jsx(ContactField, { label: "Toll-Free Number:", children: jsx("span", { children: "866-902-9654" }) }), jsx(ContactField, { label: "After Hours/Emergency (24/7):", emergency: true, children: jsx("span", { className: styles$9.emergency, children: "866-902-9654" }) }), jsx(ContactField, { label: "Email:", children: jsx("a", { href: "mailto:teamtravel@shortstravel.com", children: "teamtravel@shortstravel.com" }) })] }), jsxs(ContactCard, { title: "Recruiting Travel Specialists", children: [jsx(ContactField, { label: "Business Hours:", children: jsx("span", { children: "Monday \u2013 Friday 8am-8pm ET" }) }), jsx(ContactField, { label: "Toll-Free Number:", children: jsx("span", { children: "866-902-9654" }) }), jsx(ContactField, { label: "After Hours/Emergency (24/7):", emergency: true, children: jsx("span", { className: styles$9.emergency, children: "866-902-9654" }) }), jsx(ContactField, { label: "Email:", children: jsx("a", { href: "mailto:recruiting@shortstravel.com", children: "recruiting@shortstravel.com" }) })] }), !!data.charterAirContacts?.length && jsx(ContactCard, { title: "Charter Air", children: jsx(PairedContacts, { contacts: data.charterAirContacts }) }), !!data.motorcoachContacts?.length && (jsxs(ContactCard, { title: "Charter Bus / Motorcoach", children: [jsx(PairedContacts, { contacts: data.motorcoachContacts }), jsx("p", { className: styles$9.motorcoachEmergency, children: "After Hours/Emergency (24/7): 319-423-3007" })] })), !!data.groupHotelContacts?.length && (jsx(ContactCard, { title: "Group Hotel", children: data.groupHotelContacts.map((contact, index) => (jsxs("div", { className: styles$9.contactPair, children: [jsx(ContactColumn, { title: "Sales Contact", contact: contact }), jsx("div", { className: styles$9.contactColumn })] }, `${contact.email ?? contact.name}-${index}`))) }))] })] })) : jsx(GenericCards, { cards: cards })), jsxs("footer", { className: styles$9.support, children: [jsx("h2", { children: "Short's Travel Website and Online Booking Tool Support" }), jsx("p", { children: "Monday \u2013 Friday 9am-9pm ET, except major holidays" }), jsxs("div", { children: [jsx("span", { children: "319-257-5309" }), jsx("a", { href: "mailto:onlinesupport@shortstravel.com", children: "onlinesupport@shortstravel.com" })] })] })] }) }));
2526
+ return (jsx("div", { className: [styles$9.page, className].filter(Boolean).join(' '), "data-test": "contact-us-page", children: jsxs("div", { className: styles$9.container, children: [jsx("header", { className: styles$9.header, children: jsx("h1", { children: title }) }), jsx("div", { className: styles$9.printRow, children: jsxs("button", { type: "button", onClick: onPrint ?? (() => window.print()), children: [jsx(PrinterIcon, { size: 16 }), "Print"] }) }), children ?? (data ? (jsxs(Fragment, { children: [!!(data.accountManagers?.length || data.travelAgents?.length) && (jsxs("div", { className: styles$9.primaryGrid, children: [jsx(SimpleContactCard, { title: "Account Manager", contacts: data.accountManagers }), jsx(SimpleContactCard, { title: "Travel Agent", contacts: data.travelAgents })] })), jsxs("div", { className: styles$9.stack, children: [jsxs(ContactCard, { title: "Group/Team Commercial Reservation Specialists", children: [jsx(ContactField, { label: "Business Hours:", children: jsx("span", { children: "Monday \u2013 Friday 8am-8pm ET" }) }), jsx(ContactField, { label: "Toll-Free Number:", children: jsx("span", { children: "866-902-9654" }) }), jsx(ContactField, { label: "After Hours/Emergency (24/7):", emergency: true, children: jsx("span", { className: styles$9.emergency, children: "866-902-9654" }) }), jsx(ContactField, { label: "Email:", children: jsx("a", { href: "mailto:teamtravel@shortstravel.com", children: "teamtravel@shortstravel.com" }) })] }), jsxs(ContactCard, { title: "Recruiting Travel Specialists", children: [jsx(ContactField, { label: "Business Hours:", children: jsx("span", { children: "Monday \u2013 Friday 8am-8pm ET" }) }), jsx(ContactField, { label: "Toll-Free Number:", children: jsx("span", { children: "866-902-9654" }) }), jsx(ContactField, { label: "After Hours/Emergency (24/7):", emergency: true, children: jsx("span", { className: styles$9.emergency, children: "866-902-9654" }) }), jsx(ContactField, { label: "Email:", children: jsx("a", { href: "mailto:recruiting@shortstravel.com", children: "recruiting@shortstravel.com" }) })] }), !!data.charterAirContacts?.length && jsx(ContactCard, { title: "Charter Air", children: jsx(PairedContacts, { contacts: data.charterAirContacts }) }), !!data.motorcoachContacts?.length && (jsxs(ContactCard, { title: "Charter Bus / Motorcoach", children: [jsx(PairedContacts, { contacts: data.motorcoachContacts }), jsx("p", { className: styles$9.motorcoachEmergency, children: "After Hours/Emergency (24/7): 319-423-3007" })] })), !!data.groupHotelContacts?.length && (jsx(ContactCard, { title: "Group Hotel", children: data.groupHotelContacts.map((contact, index) => (jsxs("div", { className: styles$9.contactPair, children: [jsx(ContactColumn, { title: "Sales Contact", contact: contact }), jsx("div", { className: styles$9.contactColumn })] }, `${contact.email ?? contact.name}-${index}`))) }))] })] })) : jsx(GenericCards, { cards: cards })), jsxs("footer", { className: styles$9.support, children: [jsx("h2", { children: "Short's Travel Website and Online Booking Tool Support" }), jsx("p", { children: "Monday \u2013 Friday 9am-9pm ET, except major holidays" }), jsxs("div", { children: [jsx("span", { children: "319-257-5309" }), jsx("a", { href: "mailto:onlinesupport@shortstravel.com", children: "onlinesupport@shortstravel.com" })] })] })] }) }));
2527
2527
  };
2528
2528
 
2529
2529
  var styles$8 = {"page":"DashboardPage-module_page__PPkbS","pageHeader":"DashboardPage-module_pageHeader__gb8MO","pageActions":"DashboardPage-module_pageActions__1Zgv1","outlineButton":"DashboardPage-module_outlineButton__iLuAv","textButton":"DashboardPage-module_textButton__rEtbe","primaryButton":"DashboardPage-module_primaryButton__uaCW9","customizeButton":"DashboardPage-module_customizeButton__D6kV3","editBanner":"DashboardPage-module_editBanner__7IN5D","syncStatus":"DashboardPage-module_syncStatus__BxFQW","syncError":"DashboardPage-module_syncError__U-uis","grid":"DashboardPage-module_grid__OVgfA","sizeS":"DashboardPage-module_sizeS__leLYa","sizeM":"DashboardPage-module_sizeM__TkfbJ","sizeL":"DashboardPage-module_sizeL__Gbs5b","widget":"DashboardPage-module_widget__p6N-1","editing":"DashboardPage-module_editing__rtEwa","widgetHeader":"DashboardPage-module_widgetHeader__m7YWn","widgetIcon":"DashboardPage-module_widgetIcon__1npXI","dragHandle":"DashboardPage-module_dragHandle__rWGWh","rangeTitle":"DashboardPage-module_rangeTitle__IxHJR","widgetActions":"DashboardPage-module_widgetActions__E2pfv","iconButton":"DashboardPage-module_iconButton__v7jtL","sizeToggle":"DashboardPage-module_sizeToggle__wmv6Y","activeSize":"DashboardPage-module_activeSize__vFi0w","widgetBody":"DashboardPage-module_widgetBody__8IPCC","skeleton":"DashboardPage-module_skeleton__V--PR","pulse":"DashboardPage-module_pulse__VLsO0","state":"DashboardPage-module_state__h3q31","tableBody":"DashboardPage-module_tableBody__iJCJd","tableRow":"DashboardPage-module_tableRow__N5FgV","travelersGrid":"DashboardPage-module_travelersGrid__bYR9i","unusedGrid":"DashboardPage-module_unusedGrid__WyJzI","tableHead":"DashboardPage-module_tableHead__n3RLy","typeChips":"DashboardPage-module_typeChips__zCQA2","carrier":"DashboardPage-module_carrier__EAgok","nearExpiry":"DashboardPage-module_nearExpiry__u13P9","summary":"DashboardPage-module_summary__5kp8D","infoList":"DashboardPage-module_infoList__seS0s","rows":"DashboardPage-module_rows__rPy8n","row":"DashboardPage-module_row__uIAgO","widgetFooter":"DashboardPage-module_widgetFooter__OWOyX","editFooter":"DashboardPage-module_editFooter__OHwct","emptyPage":"DashboardPage-module_emptyPage__2QBJk","scrim":"DashboardPage-module_scrim__9ftDX","catalog":"DashboardPage-module_catalog__PoSpA","catalogBody":"DashboardPage-module_catalogBody__AmzLB","catalogItem":"DashboardPage-module_catalogItem__tgxzn","catalogIcon":"DashboardPage-module_catalogIcon__rXPbn","added":"DashboardPage-module_added__c9XNj","dragGhost":"DashboardPage-module_dragGhost__OemVj"};
@@ -3011,7 +3011,7 @@ const TeamSchedulePage = ({ title = 'Team Travel Schedule', mobileTitle = 'Trave
3011
3011
  styles$2.header,
3012
3012
  isMobile ? styles$2.headerMobile : '',
3013
3013
  ].filter(Boolean).join(' ');
3014
- return (jsxs("div", { className: pageClasses, children: [jsxs("div", { className: headerClasses, children: [jsxs("div", { className: styles$2.titleSection, children: [jsx("h1", { className: styles$2.title, children: isMobile ? mobileTitle : title }), jsxs("div", { className: styles$2.filters, children: [teamFilter, serviceFilter] })] }), (summary || metrics.length > 0) && (jsx("div", { className: styles$2.metrics, children: summary ?? metrics.map((metric, i) => (jsxs("div", { className: styles$2.metric, children: [jsxs("span", { className: styles$2.metricValue, children: [metric.prefix, metric.value, metric.suffix] }), jsx("span", { className: styles$2.metricLabel, children: metric.label })] }, i))) }))] }), actions, jsx("div", { className: styles$2.content, children: viewMode === 'compact' ? compactView : expandedView })] }));
3014
+ return (jsxs("div", { className: pageClasses, "data-test": "team-schedule-page", children: [jsxs("div", { className: headerClasses, children: [jsxs("div", { className: styles$2.titleSection, children: [jsx("h1", { className: styles$2.title, children: isMobile ? mobileTitle : title }), jsxs("div", { className: styles$2.filters, children: [teamFilter, serviceFilter] })] }), (summary || metrics.length > 0) && (jsx("div", { className: styles$2.metrics, children: summary ?? metrics.map((metric, i) => (jsxs("div", { className: styles$2.metric, children: [jsxs("span", { className: styles$2.metricValue, children: [metric.prefix, metric.value, metric.suffix] }), jsx("span", { className: styles$2.metricLabel, children: metric.label })] }, i))) }))] }), actions, jsx("div", { className: styles$2.content, children: viewMode === 'compact' ? compactView : expandedView })] }));
3015
3015
  };
3016
3016
  TeamSchedulePage.displayName = 'TeamSchedulePage';
3017
3017
 
@@ -3048,7 +3048,7 @@ const TeamTravelCalendarPage = ({ title = 'Team Travel Calendar', mobileTitle =
3048
3048
  return null;
3049
3049
  }
3050
3050
  };
3051
- return (jsxs("div", { className: pageClasses, children: [jsxs("div", { className: headerClasses, children: [jsxs("div", { className: styles$1.titleSection, children: [jsx("h1", { className: styles$1.title, children: isMobile ? mobileTitle : title }), jsxs("div", { className: styles$1.filters, children: [teamFilter, serviceFilter, viewSelector, typeSelector] })] }), (summary || metrics.length > 0) && (jsx("div", { className: styles$1.metrics, children: summary ?? metrics.map((metric, i) => (jsxs("button", { className: styles$1.metric, onClick: metric.onClick, type: "button", disabled: !metric.onClick, children: [jsx("span", { className: styles$1.metricValue, children: metric.value }), jsx("span", { className: styles$1.metricLabel, children: metric.label })] }, i))) }))] }), jsx("div", { className: styles$1.content, children: renderView() }), sidebar] }));
3051
+ return (jsxs("div", { className: pageClasses, "data-test": "team-travel-calendar-page", children: [jsxs("div", { className: headerClasses, children: [jsxs("div", { className: styles$1.titleSection, children: [jsx("h1", { className: styles$1.title, children: isMobile ? mobileTitle : title }), jsxs("div", { className: styles$1.filters, children: [teamFilter, serviceFilter, viewSelector, typeSelector] })] }), (summary || metrics.length > 0) && (jsx("div", { className: styles$1.metrics, children: summary ?? metrics.map((metric, i) => (jsxs("button", { className: styles$1.metric, onClick: metric.onClick, type: "button", disabled: !metric.onClick, children: [jsx("span", { className: styles$1.metricValue, children: metric.value }), jsx("span", { className: styles$1.metricLabel, children: metric.label })] }, i))) }))] }), jsx("div", { className: styles$1.content, children: renderView() }), sidebar] }));
3052
3052
  };
3053
3053
  TeamTravelCalendarPage.displayName = 'TeamTravelCalendarPage';
3054
3054