Commit Graph

562 Commits

Author SHA1 Message Date
gnezim ea25f5c017 Replace 4 rgba(46,87,255,0.04/0.06/0.08) hover tints with $blue-extra-light / $blue-icon (brand palette) 2026-04-20 15:50:30 +03:00
gnezim d063281b09 ScheduleFlightBody share-btn: hover uses $blue-icon (Angular share-button parity) 2026-04-20 15:48:13 +03:00
gnezim aecf06c829 TimeGroup day-change: render as chip with blue-icon border + blue-light text (Angular day-change-square parity) 2026-04-20 15:46:50 +03:00
gnezim 3f04ade411 CityPickerPopup: #ffffff → colors.$white (brand palette parity) 2026-04-20 15:44:24 +03:00
gnezim f823aafb35 FlightCard/FlightDetailsAccordion: #8a8a8a → $light-gray (brand palette parity) 2026-04-20 15:28:15 +03:00
gnezim 23b5a35c70 DayTabs: mobile breakpoint 768px→640px, non-standard 8px radius→vars.$border-radius (Angular parity)
CI / ci (push) Failing after 51s
Deploy / build-and-deploy (push) Failing after 6s
2026-04-20 15:25:03 +03:00
gnezim ae133c1e36 useAppSettings: align fallback defaults to Angular AppSettings (1/7 board, 1/330 schedule, 2h flight status) 2026-04-20 15:21:52 +03:00
gnezim 15f3356a75 ScheduleSearchPage: add Angular page-footer-notes to results frame 2026-04-20 15:17:34 +03:00
gnezim 81d979aa34 OnlineBoardSearchPage footer: render Angular page-footer-notes DOM + styling (blue-extra-light card, sort-note *) 2026-04-20 15:15:12 +03:00
gnezim 71b836ec7b FlightsMapFilter exchange button: 35x40 pill with +/-10px margin overlap (Angular .button-change parity) 2026-04-20 14:37:03 +03:00
gnezim 0665799555 FlightsMap loader: overlay + 60×60 ring with plane glyph (Angular loader-sheet parity) 2026-04-20 14:33:23 +03:00
gnezim e66661cee9 FlightsMap: no-directions overlay mirrors Angular no-directions-sheet (translucent bg + white card) 2026-04-20 14:28:21 +03:00
gnezim daf3ed35a5 FlightStatus label colors: match icon palette (green for in-flight/arrived, orange for delayed) 2026-04-20 14:24:04 +03:00
gnezim 3c869198d6 FlightStatus icon colors: use brand palette (Angular statusColors parity) 2026-04-20 14:22:29 +03:00
gnezim 6947e07fd1 FlightsMiniList selected: blue-light border (Angular parity, not blue) 2026-04-20 14:07:42 +03:00
gnezim c91fec16c2 FlightSchedule days strip: filled -color pills (Angular .days .day parity) 2026-04-20 14:00:33 +03:00
gnezim b4aea2a6fd FlightList: empty state matches Angular page-empty-list (icon + title + text, desktop/mobile layouts) 2026-04-20 13:56:54 +03:00
gnezim d7a9ae5d79 FlightCard schedule grid: match Angular schedule-list-flight-header (80px number, minmax(45,240)px stations) 2026-04-20 13:52:59 +03:00
gnezim 3e0b19f633 FlightDetailsAccordion: 1.3px dotted divider between tabs (Angular parity) 2026-04-20 13:32:20 +03:00
gnezim 21a557b875 ScheduleFilter: search button uses Angular blue-light 48px pill styling (Angular parity) 2026-04-20 13:28:30 +03:00
gnezim e4c8948cdc ScheduleFilter: add return-flight date range + time slider when round-trip (Angular parity) 2026-04-20 13:26:35 +03:00
gnezim 9134a830da ScheduleStartPage: add validation-tooltip SCSS for same-cities error 2026-04-20 13:23:08 +03:00
gnezim d44eb2fe71 ScheduleStartPage: add departure===arrival same-cities validation (Angular parity) 2026-04-20 13:21:51 +03:00
gnezim 02c6003225 ScheduleStartPage: Calendar min/max ±1/+330 days, return dates as single range picker (Angular parity) 2026-04-20 13:20:29 +03:00
gnezim 922e41e5c9 ScheduleStartPage: use shared CityAutocomplete (adds clear button + regional picker parity) 2026-04-20 13:18:29 +03:00
gnezim c28cfc2fd3 ScrollUpButton: 40×40, extra-blue bg, right: 30px / bottom: 80px (Angular parity) 2026-04-20 13:03:23 +03:00
gnezim 0e74d9d196 FlightCard schedule mode + DayGroupedFlightList headers: number column 80→60px (Angular parity) 2026-04-20 13:00:51 +03:00
gnezim a4e99fee64 FlightCard: row grid [60px|120px|100px|1fr|85-145px|120px|1fr|10px] + padding 15px/20px (Angular parity) 2026-04-20 12:59:28 +03:00
gnezim b306127cfc Breadcrumbs: middle-crumb links in solid white, only last crumb faded (Angular parity) 2026-04-20 12:55:41 +03:00
gnezim a361eeb7a5 ScheduleSearchPage: direction-switch exact Angular styles (130×40, extra-blue segmented) 2026-04-20 12:53:39 +03:00
gnezim 85deac7b54 ScheduleStartPage: bottom-description matches Angular's plain styling (no gray text, no link restyle) 2026-04-20 12:51:48 +03:00
gnezim 3d29c93eb6 DayGroupedFlightList: day header padding 12px 18px → 20px (Angular parity) 2026-04-20 12:50:11 +03:00
gnezim 5afebecfe7 FlightsMapFilter: add Angular's 'ROUTE' header above departure/arrival inputs 2026-04-20 12:48:35 +03:00
gnezim b7a358dadc CityAutocomplete item: 48px row height + bottom divider (Angular parity) 2026-04-20 12:42:04 +03:00
gnezim e8453ba66c FlightsMapFilter: resize toggle switch to 42×24 with 20px thumb (Angular parity) 2026-04-20 12:40:43 +03:00
gnezim 13926314d0 ScheduleFilter: add validation-tooltip SCSS style for inline errors 2026-04-20 12:36:16 +03:00
gnezim fc27e6c476 ScheduleFilter: validate departure===arrival mismatch with inline error (Angular parity) 2026-04-20 12:34:59 +03:00
gnezim 2434bd702b OnlineBoardFilter: validate departure===arrival mismatch with inline error (Angular parity) 2026-04-20 12:33:21 +03:00
gnezim 3a3a7cda5f DayGroupedFlightList: auto-expand first flight of today's group (Angular expandDefaultFlight parity) 2026-04-20 12:31:15 +03:00
gnezim 45a8023b68 OnlineBoardFilter: seed time range from URL params (Angular parity) 2026-04-20 12:28:02 +03:00
gnezim c456de9f9f OnlineBoardFilter: wire time range slider to route-search URL (Angular parity) 2026-04-20 12:26:29 +03:00
gnezim 6d87521634 ScheduleFilter: constrain Calendar to ±1/+330 day window (Angular scheduleMin/MaxDate parity) 2026-04-20 12:24:57 +03:00
gnezim 001b3f993d OnlineBoardFilter: constrain Calendar to ±1/+7 day window (Angular boardMin/MaxDate parity) 2026-04-20 12:23:23 +03:00
gnezim 62d3d68c1b ScheduleFilter: wire time range slider to schedule URL + seed from URL 2026-04-20 12:21:04 +03:00
gnezim ce57c982da gitignore: exclude .claude/ and .dev.pid scratch files 2026-04-20 12:17:48 +03:00
gnezim 14242d8574 FlightsMapFilter: auto-fill date to today when departure picked (Angular parity) 2026-04-20 12:17:23 +03:00
gnezim 2ce6164b13 FlightsMapFilter: reset toggles when departure cleared; add disabled-title hint
Angular's FlightsMapFiltersStateService.setDeparture(undefined) also
resets domestic/international/connections to false — none of them make
sense without a departure anchor. React now mirrors that reset on clear
so a re-opened filter doesn't show phantom 'on' toggles.

Also added a `title` attribute on each disabled toggle that points
users to the missing city input. The toggles are still disabled (per
Angular behavior) but the hint explains *why* they can't be toggled,
which was the source of confusion in the 'feature not fully
implemented' report.
2026-04-20 12:03:57 +03:00
gnezim d2f418f494 Show CityAutocomplete clear (×) button for any truthy value, not just resolved cities
Previously hasValue was computed from `selectedCity` — which required
the dictionaries to be loaded AND the raw code to map to a known city.
If the dictionaries were slow or the user typed free text, the clear
button stayed hidden and the filter became stuck with no way to wipe it.

Angular's CityAutocomplete uses `[ngClass]="{'has-value': city}"` on
the raw two-way-bound model, so any truthy value reveals the clear
button. Mirror that: `hasValue` is now true whenever the resolved
city, the outbound code, or the AutoComplete inputValue (free text or
suggestion object) is truthy.
2026-04-20 11:55:48 +03:00
gnezim 37ebda8455 Allow departure-only / arrival-only online-board search submits
Previously handleRouteSubmit required both fields and returned silently
when only one was filled. Angular's
OnlineBoardUrlBuilderService.getRoutePageUrl switches on which side is
populated, routing to /onlineboard/departure/{dep}-{date} or
/onlineboard/arrival/{arr}-{date} for one-sided searches. React now
mirrors the same branch and only no-ops when neither side is filled
(matching Angular's `if (!departure && !arrival) return;` in
OnlineBoardFilterService.toRoutePage).
2026-04-20 11:53:36 +03:00
gnezim 0c1701086d Upgrade Schedule prefill codes to CitySuggestion objects once dictionaries load
ScheduleStartPage previously stored the raw IATA code from the prefill
in departureAirport / arrivalAirport state, so PrimeReact's AutoComplete
would render 'MOW' (or 'SVO' before the prior commit) literally in the
input. Now, once dictionaries resolve, the effect replaces each string
slot with a { code, name } object so the autocomplete shows 'Москва'.

Mirrors Angular CityAutocomplete.writeValue → getCityOrAirport, which
upgrades the bound string to a CityModel for display while keeping the
code as the outbound form value.
2026-04-20 11:44:38 +03:00