StatusBadge carries a color value, and force-fitting into base CardViewModel (Header / ContentText / Link) would require concatenating ≥6 fields into ContentText, exceeding the DQ-9 reuse threshold. See Decisions Record → D16 and D15.FlightCardView : ContentView (Track B) rather than FlightSegmentCardViewModel : CardViewModel (scaffold). The 8 typed field definitions from D16 are preserved as BindableProperty fields on FlightCardView; the implementation moves out of the scaffold hierarchy. FlightCardFactory : RawRepresentationFactory<FlightSegmentCardViewModel> is replaced by direct property binding. This spec page is the Track B display-data reference. See Decisions Record → D17.
Three named states driven by Property 1 in Figma. All phone-scope — tablet variant (flight card-TABLET) is deferred per D12.
Decision D64 (adopted 2026-07-18): the Blazor pages get their own Track A implementation of this master — FlightCard.razor + FlightCardViewModel + FlightCardFactory (ALPAMobile.Presentation), rendering the live master’s Default and expanded (4713:19985) variants with inline expand (retires the static /jumpseat/details page, audit FF-1/FF-4 — AB#2299). Track B native is unchanged. CSS prefix alpa-fcard-*. See Decisions Record → D64.
Decision D66 (adopted 2026-08-14): amends D64's "results no longer navigate" for the push
entry point only. A tapped flight alert opens a dedicated JumpseatFlightDetailPage
(/jumpseat/flight-detail) that composes this same component through a new ExpandLocked
parameter — the expanded variant rendered permanently, with no chevron at either end. The lock is a render decision
and never writes IsExpanded, so a ViewModel shared with a results row keeps that row's own state. Results
cards still expand inline exactly as D64 decided. See
Decisions Record → D66.
flight card-og
component set contains additional variants labeled Variant4 and Variant5 — Figma's
auto-generated names that carry no semantic meaning. These must be mapped by visual inspection of the canvas
to determine what interaction state or content configuration they represent. The same pattern applies to other component
sets in this file (e.g. Variant2). Do not assume Variant4/5 represent the same interaction as the named
variants; verify each by appearance before speccing or implementing.
| Figma variant | Width | Height | Description |
|---|---|---|---|
Property 1=Default | 353 px | 164 px | Collapsed card showing origin/destination, departure/arrival times, and status badge. |
Property 1=swipe | 353 px | 164 px | Same dimensions as Default; swipe-action affordance visible on trailing edge (red delete/action strip). |
Property 1=expanded | 353 px | 1361 px | Fully expanded detail view — trip row, layover info, multi-leg detail, "Close Details" underline button. |
Property 1=Variant4 | TBD | TBD | Unnamed — map by appearance. Visual inspection required to identify this state. |
Property 1=Variant5 | TBD | TBD | Unnamed — map by appearance. Visual inspection required to identify this state. |
Expanded state (1361 px) not previewed here — multi-leg detail view; see Figma node 4713:19985 for full layout.
The Flight Card domain control uses this typed ContentView directly. A single domain control covers the full flight card Figma family — all masters represent the same visual component in different states or contexts (decision D15). Direct property binding replaces the former factory pattern (D17).
| Domain control | Implementation | Domain source | Spec |
|---|---|---|---|
| Flight Card Track B | FlightCardView : ContentView — direct BindableProperty binding |
Flight / Leg domain model (source TBD) |
domain-controls.html → Flight Card |
All five Figma masters unified under one domain control per D15. Node IDs are from the .fig binary archive (ALPAmobileWtablet_20260617).
| Figma master | Node (.fig) | Live Figma node | Dimensions | Context |
|---|---|---|---|---|
flight card-og | 5452:679 | 4713:19868 | 353 × 164 (Default/Swipe) · 353 × 1361 (Expanded) | Authoritative phone master. Replaces retired flight segment card (D15). |
flight segment card | 4555:7483 | — | 353 × 164 | Retired alias (D15, 2026-06-22). Preserved in figma-component-specs.json for provenance only. |
flight card-TABLET | 5500:44 | — | TBD | Tablet tier — deferred per D12. |
flight card-recent searches | 4441:398 | 4450:11208 | 353 × 115 | Superseded (D48, 2026-07-06) — this node is a usage-context instance of flight card-saved & recent searches (node 4450:9884, code name FlightCardSavedAndRecentSearches), not a separate master. Swipe-to-favorite context specifically. |
flight card-saved flight | — | — | — | Retired (D48, 2026-07-06) — a stale 2026-06-17 placeholder entry, superseded by flight card-saved & recent searches below. |
flight card-saved searches | — | 4450:10395 | 353 × 115 | Superseded (D48, 2026-07-06) — this node is a usage-context instance of flight card-saved & recent searches (node 4450:9884), not a separate master. Swipe-to-delete context specifically. |
flight card-saved & recent searches | — | 4450:9884 | 393 × 465 (Default 353×61, Variant2 353×340) | Current consolidated master (D48) — code name FlightCardSavedAndRecentSearches. Composes the two usage-context rows above. |
HeightRequest per variant; the XAML code-behind or state trigger selects the appropriate value.flight card-TABLET) is deferred per D12 (responsive layout system, post-#2087).StatusBadge string holds the status text ("ON TIME", "DELAYED", etc.). The corresponding badge background/foreground color is resolved in XAML via a DataTrigger or Converter — no color property on the ViewModel.FlightCardView carries no domain service references. The caller sets typed BindableProperty fields directly from a Flight/Leg model; no factory mapping layer is needed.Surface/Default → #ffffff) and border (Border/Default → #e3e3e3) are base tokens; they do not participate in the MEC theme swap. The swipe action color (#c02126) maps to Status/Error.