Updated: 2026-07-02 13:37 ET
Audited: 2026-07-02 13:37 ET
interactive/blue colour and spacing tokens. Sort cycles through ordered options (label reflects current);
Filter toggles a filter sheet. Active state = filled blue. Per D36, server-side pre-sort
and comms position locks still apply — this control is the user-facing re-sort/filter affordance, not the sort authority.
.alpa-jsff-results-header, .alpa-jsff-control-btn in
ALPAMobile/wwwroot/css/alpa-components.css) and the Jumpseat Results page. Figma: a btn-sort&filter instance
appears in the interior nav-controls slot (e.g. node 0:281 within Saved Searches frame 4713:25253, hidden there;
shown on the Flight Finder results frame). Assumption: the canonical results-header frame node was not isolated this pass; the layout
is reconciled from the scaffold under D40. Figma file key R6hPjBdjSIn6946qTJasUC. Captured 2026-06-29.
Tier: nav chrome / results header. Spec-only — not in ComponentViewModels.cs until implementation (gated on Epic AB#2087).
Target home: ALPAMobile.HybridUi — SortFilterBar.razor.
| Parameter | Type | Required | Description |
|---|---|---|---|
Summary | string | Yes | Left-hand results summary line. |
SortLabel | string | Yes | Text shown on the Sort button (e.g. "Sort: Best"). |
IsSortActive | bool | No | Applies --active (blue fill) when not default order. |
IsFilterActive | bool | No | Applies --active (blue fill + ✓) when a filter is applied. |
OnSort | EventCallback | Yes | Cycle/advance the sort order. |
OnFilter | EventCallback | Yes | Open filter sheet / toggle filter. |
<SortFilterBar Summary="@Vm.ResultsSummary"
SortLabel="@Vm.SortLabel"
IsSortActive="@Vm.IsSortActive"
IsFilterActive="@Vm.IsFilterActive"
OnSort="@Vm.CycleSort"
OnFilter="@Vm.ToggleFilter" />
Classes will live in ALPAMobile.HybridUi/wwwroot/css/alpa-components.css under the alpa-sort-filter-bar BEM block
(generalised from the scaffold's Jumpseat-specific alpa-jsff-results-* names).
| Class | Scope | Key rules |
|---|---|---|
.alpa-sort-filter-bar | Bar | display:flex; align-items:center; justify-content:space-between; padding:10px 16px; background:white; border-bottom:1px solid rgba(0,0,0,0.08) |
.alpa-sort-filter-bar__summary | Summary | font-family:var(--font-family/body); font-size:13px; font-weight:600; color:var(--navy) |
.alpa-sort-filter-bar__controls | Controls row | display:flex; gap:8px |
.alpa-sort-filter-bar__btn | Control button | padding:6px 14px; border:1.5px solid var(--blue); border-radius:4px; background:transparent; color:var(--blue); font-size:12px; font-weight:600 |
.alpa-sort-filter-bar__btn--active | Active modifier | background:var(--blue); color:white |
| Screen | Summary | Sort options | Filter |
|---|---|---|---|
| Flight Finder Results | "DEN to MIA · Nonstop · Mon Apr 20" | Best / Earliest / Shortest (cycle) | Toggle filter sheet (KCM-eligible, stops, etc.) |
flight finder filters) or sort radio options, and Apply/Clear actions. This bar is the trigger/summary strip; the modal is where the sort/filter state is actually edited. Not yet confirmed which button opens which initial tab.@onclick; the filled state is not decorative.