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