← Back to Component Index

Domain Controls

Domain-specific controls that compose a generic scaffold component by mapping real data onto it. A domain control is not a scaffold subclass — it maps a domain source onto a scaffold ViewModel through a pure RawRepresentationFactory<T> mapper, keeping the library domain-free (decision D11; see the Architecture → Domain Controls layer).

Controls: 8 (+ 8 pending) Updated: 2026-07-06 17:22 ET

Catalog

Domain controlComposesDomain sourceMapper / factorySpec
Home screen 4099:5229
Pilot Card Card · Chevron (CardViewModel) UserInfo (IAuthentication) + contract DocumentItem (DataManager) PilotCardFactory : RawRepresentationFactory<CardViewModel> data-source analysis
Document Hero CardHero (CardHeroViewModel) featured/contract DocumentItem (DataManager) DocumentHeroFactory : RawRepresentationFactory<CardHeroViewModel> data-source analysis
Home Feed Carousel Carousel (CarouselViewModel) content feed (DocumentItem[] via DataManager) FeedCarouselFactory : RawRepresentationFactory<CarouselViewModel> data-source analysis
Resource Tile CardSmall (CardSmallViewModel) MenuItem (nav / resource links) ResourceTileFactory : RawRepresentationFactory<CardSmallViewModel> data-source analysis
Emergency Hotline Button (ButtonViewModel) emergency contact config (tel:) EmergencyButtonFactory : RawRepresentationFactory<ButtonViewModel> data-source analysis
MEC screen 4684:7914
Menu Text CardText (CardTextViewModel) MenuItem (+ parent category) + local Settings MenuTextFactory : RawRepresentationFactory<CardTextViewModel> data-source analysis
Notifications · “Did you know” screen 5172:15051
Did You Know List ABANDONED List (ListViewModel) Change 4 abandoned 2026-06-24 — no endpoint will be built; kept here for historical ListViewModel factory-pattern reference only DidYouKnowListFactory : RawRepresentationFactory<ListViewModel> — not to be implemented data-source analysis
Flight Finder flight card-og 5452:679 · D15
Flight Card Track B · D17 FlightCardView (typed ContentView — D17) Flight / Leg (flight segment data — source TBD) FlightCardView (no factory — direct BindableProperty binding) spec below
Flight Finder Filter Sort D41 Master Form Field · radio button · tab group (FlightFinderFilterSortViewModel) JSFF flight-search filter/sort state — confirmed 2026-07-06 (D41): JumpseatFlightFinderResultsFiltersPageViewModel.cs FlightFinderFilterSortFactoryspec spec below
Flight Finder Advanced Search D44 Expander (FlightFinderAdvancedSearchViewModel) JSFF flight-search advanced-filter state — confirmed 2026-07-06 (D44): JumpseatFlightFinderSearchPageViewModel.cs FlightFinderAdvancedSearchFactoryspec spec below
Promotions banner 5512:12925 · D43 · provisional
Promo Banner Provisional PromoBannerViewModel (standalone, D40 pattern) Promo/announcement content — source confirmed 2026-07-06 (D43): existing PageBanner model (GET /api/pagebanner/list), not a new Dynamic Feed type. Field additions tracked as Change 5. PromoBannerFactoryspec spec below
Duty Period identified · spec pending
Duty Period Card Pending Card (CardViewModel — scaffold TBD) Duty period / schedule data — source TBD DutyPeriodCardFactory — spec pending pending
Button Card instances D14 · 4 instances identified · specs pending
MEC Button Card  ·  Jump Seat Button Card  ·  Committees Button Card  ·  PAC Action Card — each will compose Button Card (ButtonCardViewModel) via its own factory. Specs pending.

Home screen 4099:5229 · 5 controls

Pilot Card

DOMAIN CONTROL · COMPOSES CARD

Welcome card for the signed-in pilot

Renders through the generic Card (Chevron variant — heading + link + right chevron, no title/image). It maps the authenticated pilot's identity and their current contract document onto a CardViewModel; the scaffold stays domain-free.

Two context variants (Teamwork mobile requirements — Pilot Card, Space 4173): a Light version on the Home tab — light-blue background with the right chevron (shown below) — and a Dark version on the My MEC tab — dark navy background, no chevron. Both carry the same two elements (personalized name greeting + Contract link); only the surface colour and chevron presence differ by context. The Chevron Card variant covers the Light case; the Dark case needs a chevron-less navy variant.

Rendered preview
Welcome Captain Johnson View Contract
UserInfo (IAuthentication)  +  contract DocumentItem (DataManager)
  ▼  PilotCardService — DI-injected async gather
  ▼  PilotCardFactory.Create(user, contract) — pure map
CardViewModel { HeaderText, ContentText, LinkText, Link, IsLinkVisible }
  ▼
Card · Chevron variant

Domain sources

Scaffold propertyDomain sourceNotes
HeaderTextUserInfo.MEC via IAuthenticationFalls back to "ALPA"
ContentTextUserInfo.FirstName + LastNameRank omitted — UserType is tier (STAFF/MEMBER), not rank
LinkText / Linkcontract DocumentItem via DataManagerFirst contract doc for the pilot's MEC scope; opened via SharedActionsService
IsLinkVisiblederivedtrue only when a contract doc is found

Full mapping, code, and data gaps: see the Pilot Card data-source analysis — including the PilotCardFactory + PilotCardService split and the pilot-rank gap.

Document Hero

DOMAIN CONTROL · COMPOSES HERO CARD

Renders through the generic CardHero. Queries the featured/contract DocumentItem for a scope + category and maps it onto a CardHeroViewModel (title, description, image, link); the scaffold never references DocumentItem.

Rendered preview
photo
MEC Group
United Airlines
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
DocumentItem (DataManager — scope + category query)
  ▼  DocumentHeroService — DI-injected async gather
  ▼  DocumentHeroFactory.Create(doc) — pure map
CardHeroViewModel { Title, Description, Image, PublishDate, Link }
  ▼
CardHero

Full mapping & gaps: CardHero data-source analysis — incl. the scope/category content-config gap.

DOMAIN CONTROL · COMPOSES CAROUSEL

Horizontally-scrolling content feed

Renders through the generic Carousel (horizontal scrolling feed — a section header + a horizontal row of content cards). Maps a feed of documents onto a CarouselViewModel whose Items are Document Hero cards (card-lg). Home uses three of these (MEC docs · resources · press releases). Figma variants: with images / no images / no-images + eyebrows. The header is the scaffold Section Title (title + "View All" link).

Rendered preview · horizontal scrolling feed 393×371
Feed View All
Press Release
Erat viverra pellentesque sed lectus auctor
Press Release
Tincidunt mi sit pulvinar sed adipiscing aliquam
Press Release
Lorem ipsum dolor sit amet consectetur
DocumentItem[] (DataManager — feed query)
  ▼  FeedCarouselFactory.Create(docs) — maps each via DocumentHeroFactory
CarouselViewModel { Header, ViewAllLink, Items: CardHeroViewModel[] }
  ▼
Carousel · horizontal scrolling feed

Data-source analysis: Carousel data-source analysis — the feed query and per-item mapping.

Resource Tile

DOMAIN CONTROL · COMPOSES SMALL CARD

Resource / navigation row

Renders through the generic CardSmall (card-sm — a wide 361×51 row that leads with a navy image/thumbnail block, then a serif title). Maps a MenuItem (resource / nav link) onto a CardSmallViewModel. Home uses these for DART, Flight Pay Loss, My Payments, Infor Expense Management, Meeting Request, MPS. Favorite heart shown per D31 (2026-06-26).

Rendered preview · card-sm 361×51
Flight Pay Loss
MenuItem (resource / nav link)
  ▼  ResourceTileFactory.Create(item) — pure map
CardSmallViewModel { Title, Image, Link }
  ▼
CardSmall · card-sm

Data-source analysis: CardSmall data-source analysis — the MenuItem navigation-tile mapping.

Emergency Hotline

DOMAIN CONTROL · COMPOSES BUTTON

Emergency contact action

Renders through the generic Button (Primary, with a phone icon). Maps the emergency contact configuration onto a ButtonViewModel whose command opens a tel: link. The number is configuration — a candidate for the Options pattern (IOptions<EmergencyOptions>) rather than per-request data (see D11).

Rendered preview
EmergencyOptions (config — tel: number)
  ▼  EmergencyButtonFactory.Create(options) — pure map
ButtonViewModel { Label, Icon, Command = tel: }
  ▼
Button · Primary

Data-source analysis: Button data-source analysis — the Button scaffold (Emergency is a config-driven use).

MEC screen 4684:7914

DOMAIN CONTROL · COMPOSES TEXT CARD

Renders through the generic CardText. Maps a MenuItem (and its parent category) plus locally-stored badge/favorite state onto a CardTextViewModel; the favorite / new-count persistence lives in the service, not the scaffold.

Rendered preview
11
United Airlines
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
MenuItem (+ parent category)  +  Settings (NewCount, IsFavorite)
  ▼  MenuTextService — reads Settings, owns toggles
  ▼  MenuTextFactory.Create(item, parent, newCount, isFavorite) — pure map
CardTextViewModel { Label, Title, Description, Link, NewCount, IsFavorite }
  ▼
CardText

Full mapping & gaps: CardText data-source analysis — incl. the MenuItem.Description API expansion and the NewCount write path.

Notifications · “Did you know” screen 5172:15051

Did You Know List

DOMAIN CONTROL · COMPOSES LIST

List item on the “Did you know” screen

Renders through the generic List (listy card generic — date · headline · subtitle). Maps a “Did you know” item onto a ListViewModel. Corrected: not a flight card — the rich DL 302 / status flight result is the separate Flight Finder card (node 4713:25168, future). The concrete item type is confirmed in the Notifications deep-dive.

Rendered preview
May 26, 2026
Lorem ipsum dolor
Fri April 24
“Did you know” item — ABANDONED, Change 4, kept for historical reference only  +  Settings (favorite)
  ▼  DidYouKnowListService — DI-injected async fetch
  ▼  DidYouKnowListFactory.Create(item, isFavorite) — pure map
ListViewModel { TimestampDate, HeadlineText, SubtitleDate, IsFavorite }
  ▼
List · listy card generic

Full mapping & correction: List data-source analysis — it was mis-modelled as a flight card; the rich flight result is the separate Flight Finder component.

Flight Finder flight card-og 5452:679 · D15

Flight Card

TRACK B TYPED CONTENTVIEW · D17

Flight segment result card

Implemented as FlightCardView : ContentView with BindableProperty fields (D17, two-track component pattern). Decision D15 (2026-06-22) unified all flight card Figma masters into one domain control. Decision D16 defined the 8 typed fields; D17 moved the implementation from scaffold ViewModel to typed ContentView. Direct property binding replaces RawRepresentationFactory<T>. Spec: flight-segment-card-component.html.

Figma variant map (D15)

Figma masterNodeDimensionsRoleNotes
flight card-og5452:679353×111 pxBase / phoneAuthoritative master. #FFFFFF fill, #E3E3E3 border. Adds swipe variant. D13: -og suffix not used in code name.
flight segment card4555:7483353×111 pxRetired aliasExact dimension/fill/stroke match with flight card-og. Retired 2026-06-22 (D15). Child tree preserved in figma-component-specs.json as authoritative structure reference.
flight card-TABLETTBDTBDTablet tierDeferred (D12) — responsive layout system post-AB#2087.
flight card-recent searchesTBDTBDRecent searchesVariant for the Recent Searches section of Flight Finder.
flight card-FTDTTBDTBDFTDTFlight tracking / departure tracking variant.
Rendered preview · flight card-og 353×111
ORD → SFO ON TIME
08:35
Depart
— 4h 35m —
11:10
Arrive
B737-800  ·  UA 1024 ← swipe →
Flight / Leg (flight segment data — source TBD)
  ▼  FlightCardService — DI-injected async fetch
  ▼  FlightCardView.SetBindings(flight) — direct property binding
FlightCardView { Origin · Destination · DepartureTime · ArrivalTime · Duration · FlightNumber · AircraftType · StatusBadge — D16/D17 }
  ▼
FlightCardView : ContentView · Track B

Track B typed ContentView (D17, 2026-06-22): FlightCardView : ContentView — 8 BindableProperty fields: Origin, Destination, DepartureTime, ArrivalTime, Duration, FlightNumber, AircraftType, StatusBadge (D16 field list unchanged). No factory required — direct property binding. Registered via DataTemplate for CollectionView usage. Implementation gated on AB#2087.

D15 (2026-06-22): flight card-og (5452:679) confirmed identical to flight segment card (4555:7483) — 353×111 px, #FFFFFF fill, #E3E3E3 stroke. flight segment card retired as alias. Swipe variant added to base. Tablet tier deferred (D12). See Decisions Record → D15.

D18 (2026-06-23): A new distinct flight card component_set (componentKey 8e152db6…) was inventoried in the 2026-06-23 library sweep, separate from flight card-og. Provisional code name FlightCard. Relationship to flight card-og and impact on this domain control's implementation are pending designer confirmation. Dimensions TBD (MCP page access limited).

Duty Period identified in screen-mapping · spec pending

Duty Period Card Track B · D17 — identified in screen-mapping; domain control spec pending. Domain source: crew duty period / schedule data (source TBD). Implemented as DutyPeriodCardView : ContentView (3 variants: Default / Expanded / Delete-demo · node 4617:13876). Direct BindableProperty binding; no factory. Compact flight rows are internal to DutyPeriodCardView (DQ-11 resolved). Confirmed 2026-07-02 (D45): live-file check (owEYzHf7FrHRvWC2u82UOl) verified this is the only surviving Figma master — card-duty period-alt (node 4617:13876 matches exactly), filed under the "components ftdt" section. The non-alt card-duty period name is confirmed absent from the live file (retired); no change to this control's spec.

Button Card instances D14 · 4 instances identified · specs pending

Button Card domain controls (4) — specs pending. Each feature area composes the Button Card scaffold (ButtonCardViewModel) via its own factory: MEC Button Card (MEC screen 4684:7914), Jump Seat Button Card (JSFF screen), Committees Button Card, PAC Action Card (PAC-specific domain control). See decision D14.

2026-06-23 New Domain Controls D22 · provisional stubs · specs pending

Flight Finder Filters

FlightFinderFilters Domain Control · D22 — inventoried 2026-06-23 (componentKey c3045b66…); full spec pending.
Composes filter controls for the Flight Finder search surface. Track A/B classification pending; expected to bind to flight search filter state. Implementation gated on D17 / Epic AB#2087.

Notification Card — Flight Status

NotificationCardFlightStatus Domain Control · D22 — inventoried 2026-06-23; full spec pending.
Flight-status notification card variant shown in the Notifications screen. Binds to subscription / flight-status domain data. Track A/B classification pending; expected Track B (typed ContentView). Related: FlightCardView (existing) · ToggleSubscriptionAsync (existing API).

Search Secondary Buttons reclassified out of domain controls · D42

Reclassified 2026-07-02 (D42): the D22 (2026-06-23) provisional domain-control stub is resolved. Live capture found no domain-specific fields on either variant — search secondary buttons is a scaffold/atom (a reusable icon+label secondary-action chip), not a domain control. No longer catalogued here; see the scaffold spec: search-secondary-button-component.html.

2026-07-02 Flight Finder Scoped Sync D41 · D43 · D44 · live file owEYzHf7FrHRvWC2u82UOl

Flight Finder Filter Sort

FlightFinderFilterSort Domain Control · D41 — captured 2026-07-02 from the live Figma file; full spec pending.
Flight Finder results — filter/sort modal panel (node 4450:11374, canonical; duplicate 4705:8702 flagged, not catalogued). Composes flight finder filters (D22, ×3 in Filter state) + radio button (×5 in Sort state) + tab group + nav controls + Primary button (Apply) + Underline Button (clear). Likely the live successor to the previously binary-only overlay-flight finder filter reference in screen-mapping.html. Dimensions: 433×1087 (Filter 393×499, Sort 393×480).
FlightFinderAdvancedSearch Domain Control · D44 — captured 2026-07-02 from the live Figma file; full spec pending.
Domain-control layer over the generic Expander primitive. Resolves the Expander spec's previously-open "expanded content not shown" gap: Avoid Connection field, Connect Via field, Min Connection Time / Length of Travel range sliders, 3 checklist rows, "Save Search to Favorites" button. Dimensions: 385×828 (Default 345×71, Open 345×693).

Promo Banner

PromoBanner Domain Control · D43 · Provisional — captured 2026-07-02 from the live Figma file; domain source confirmed 2026-07-06, field additions pending backend.
Dismissible promo/announcement banner (sample: UPA27 survey — "Survey Now Open" / "Closes June 10 at 11:59PM PT" + close X + image). Domain source confirmed 2026-07-06: the existing, already-shipped PageBanner model (GET /api/pagebanner/list) — not a new Dynamic Feed ItemDto type or a dedicated announcements service (the two candidates originally floated). This also resolves the D40 "one-off static content" question: it's a recurring, already-multi-page pattern, so it correctly stays a catalogued domain control. Required Title/Subtitle/LogoImageLink field additions tracked as Change 5. Dimensions: 346.4×172 (Default 319.4×56, Variant2 309.4×56).

2026-07-06 Figma Gap Sync D48 · live file owEYzHf7FrHRvWC2u82UOl

Flight Card Saved & Recent Searches

FlightCardSavedAndRecentSearches Domain Control · D21 · D48 confirmed — adopted 2026-06-23 (D21), live node confirmed 2026-07-06 (D48); full spec pending.
Consolidates the JSFF saved/recent-search card family into one component_set (node 4450:9884, 393×465 overall — Default 353×61 collapsed, Variant2 353×340 expanded/parameters). Two per-context usage frames instance this master rather than being separate scaffold masters: flight card-saved searches (node 4450:10395, swipe-to-delete) and flight card-recent searches (node 4450:11208, swipe-to-favorite) — each adds a swipe-reveal action + an expanded detail flight-leg panel around an instance of this master's Default state. Confirms retirement of the three stale 2026-06-17 placeholder entries in figma-component-specs.json.