gnezim
eced09aeb0
Add aria-pressed to selected day-quick-pick buttons (a11y for screen readers)
2026-04-20 22:10:19 +03:00
gnezim
5f5f60ca3e
Add aria-hidden to decorative arrow-icon span in SearchHistory accordion header
2026-04-20 22:02:45 +03:00
gnezim
0921c606df
Add aria-expanded to expandable FlightCard rows (a11y for screen readers)
2026-04-20 22:01:37 +03:00
gnezim
50cc2350ab
Add aria-label to SearchHistory items (a11y — items are decorative without text label)
2026-04-20 22:00:25 +03:00
gnezim
32d80332ff
Add aria-expanded to accordion role=button triggers (a11y parity for filter + SearchHistory)
2026-04-20 21:51:47 +03:00
gnezim
f7193d09e9
Add SearchHistory icon tooltips for board vs schedule items (Angular pTooltip parity)
2026-04-20 21:20:30 +03:00
gnezim
e44eedbab7
Tokenize 20px sticky position literals in PageLayout column-left
2026-04-20 21:02:06 +03:00
gnezim
5892310201
Tokenize 20px positioning literals in PageLayout sticky/scroll overlay
2026-04-20 21:00:46 +03:00
gnezim
9f5ebae747
Tokenize font-weight: normal → fonts.$font-regular across 3 SCSS files
2026-04-20 20:48:27 +03:00
gnezim
c9ee0e9043
Add title attribute (tooltip) to OperatorLogo (Angular pTooltip parity)
2026-04-20 20:39:09 +03:00
gnezim
2b121181ef
Add tooltips to PageTabs (Angular pTooltip parity via title attribute)
2026-04-20 20:36:18 +03:00
gnezim
9250b5633a
Tokenize remaining literals: BoardDetailsHeader padding/gap, WeekTabs/DayQuickPick padding, TimeGroup font-weight:300 → $font-light
2026-04-20 20:12:03 +03:00
gnezim
6b42f9c034
Add small IFlyWarning variant in expanded flight rows (Angular warning-ifly-carrier-small parity)
2026-04-20 20:05:25 +03:00
gnezim
d942cb55bc
Add IFlyWarning component shown on details pages for SU5801-5948 flights (Angular parity)
2026-04-20 20:02:45 +03:00
gnezim
28c88873a5
Tokenize 10px/12px button padding literals in FlightCard + ScheduleFlightBody + CityPickerPopup
2026-04-20 19:57:00 +03:00
gnezim
2967fcea97
Tokenize mobile padding + transition-duration literals (Angular parity)
2026-04-20 19:51:21 +03:00
gnezim
991c290c9c
Tokenize DetailsBackButton + FlightStatus font-size (Angular parity)
2026-04-20 19:37:30 +03:00
gnezim
ca8fe33b8c
Replace 40px/20px/10px/12px literals with vars.$space tokens across 4 SCSS files
2026-04-20 19:34:43 +03:00
gnezim
cf93b28699
Replace literal 3px border-radius with vars.$border-radius token across 5 files
2026-04-20 19:28:31 +03:00
gnezim
9564085f23
Unify transitions: 120/150ms → 0.2s across 14 SCSS files (Angular parity)
2026-04-20 19:24:28 +03:00
gnezim
da896260e6
Replace 8px directional margins with vars.$space-s2 (3 files)
2026-04-20 19:02:31 +03:00
gnezim
933407832a
Replace 5px directional margins with vars.$space-s (2 files)
2026-04-20 18:56:34 +03:00
gnezim
9ff034d19f
OnlineBoard search: render Купить/Онлайн регистрация in expanded row
...
Angular's board search results expansion shows [Купить] [Онлайн
регистрация] [Детали рейса]. React only rendered Details. Added a
`renderActions` prop on FlightCard/FlightList so the feature layer
can inject extra buttons without the ui layer importing from
features. OnlineBoardSearchPage wires it to FlightActions with
showShare=false (the row already has a dedicated share icon).
Visibility rules fall through to canBuyTicket / canRegister (same
as BoardDetailsHeader), so cancelled/past flights still hide the
Buy button and carriers without a registrationUrl still hide the
Online Registration button — matching Angular's per-flight gating.
Integration test mocks useAppSettings to avoid requiring the real
ApiClientProvider in flight-search.test.tsx.
2026-04-20 18:27:31 +03:00
gnezim
8de1f197fd
Replace padding/margin 10px/20px literals with vars.$space-m/$space-xl tokens (3 files)
2026-04-20 18:17:41 +03:00
gnezim
9778d6ba8a
Replace 8px padding/gap/margin literals with vars.$space-s2 across 7 SCSS files
2026-04-20 18:04:33 +03:00
gnezim
50885b7afd
font-size 22px/30px → fonts.$font-size-xl2/$font-size-xxl across 4 SCSS files
2026-04-20 17:54:01 +03:00
gnezim
623f282f56
font-size 18px/20px → fonts.$font-size-xl/$font-size-xl1 across 16 SCSS files (brand palette parity)
2026-04-20 17:52:31 +03:00
gnezim
93684c1bbb
font-size: 14px → fonts.$font-size-m across 15 SCSS files (brand palette parity)
2026-04-20 17:48:12 +03:00
gnezim
41ed2bdc1d
font-size: 12px → fonts.$font-size-s across 21 SCSS files (brand palette parity)
2026-04-20 17:37:03 +03:00
gnezim
2037ba0141
Swap font-weight 400/700 literals for fonts.$font-regular/$font-bold tokens across 8 SCSS files
2026-04-20 17:25:01 +03:00
gnezim
4a653849f4
Final font-weight: 500 sweep: 9 more SCSS files use fonts.$font-medium (brand palette parity)
2026-04-20 17:21:22 +03:00
gnezim
43a7380059
Replace font-weight: 500 literals with fonts.$font-medium across 8 SCSS files (brand palette parity)
2026-04-20 17:08:06 +03:00
gnezim
40c3ed62fa
OperatorLogo: add round-variant paths for 12 missing carriers (RO/DP/OM/KL/AY/DL/OK/JU/UX/BT/AM/AR)
2026-04-20 15:56:51 +03:00
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
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
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
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
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
b7a358dadc
CityAutocomplete item: 48px row height + bottom divider (Angular parity)
2026-04-20 12:42:04 +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
706b8f444b
Clear the last 19 lint warnings — make check now passes clean
...
- BuyTicketButton / FlightsMiniListItem: narrow firstLeg/lastLeg with
explicit null guards (throw / return '').
- FlightSchedule.tsx: `match?.[1] ?? iso` for the regex capture.
- OnlineBoardSearchPage + schedule/api: `split('T')[0] ?? iso` for the
date-prefix extraction.
- ServicesPanel: icon lookup uses a third '' fallback instead of `!`.
- buildCountryCityRows: explicit `break` if cities[i] is undefined.
- useAppSettings: `match?.[1]` null-check before parseInt.
- datetime/index.ts: guard bare HH:MM capture groups together.
- ScheduleDetailsCatchAllRoute: drop unused `t` + useTranslation import.
- ScheduleDetailsPage.tsx: prefix unused `getLegs` with underscore.
- 4 seo/json-ld tests: drop now-redundant eslint-disable comments.
- calendarRange.test + api.test: prefix unused helper names with `_`.
Warning count: 19 → 0. make check (typecheck + lint + test) exits 0.
2026-04-20 09:30:34 +03:00
gnezim
8d409572b7
Drop 11 more non-null assertions across 5 files
...
- ErrorPage.tsx: FALLBACK_CONFIG literal instead of ERROR_CONFIG["500"]!
- ErrorBoundary.tsx: hoist FALLBACK_RU / FALLBACK_EN to consts so
pickStrings returns them without the bang.
- routesToPolylines.ts: narrow spider-mode block on filterState.departure
truthy; guard each route-code lookup.
- FlightsMapStartPage.tsx: narrow firstRoute/depCode/arrCode together
instead of asserting each individually.
- OnlineBoardDetailsPage.tsx: IIFE over legs[i+1] for TransferBar;
`_canonicalOrigin` prefix for currently-unused prop.
Warning count: 30 → 19.
2026-04-20 09:22:49 +03:00
gnezim
298f007463
Drop 11 non-null assertions in api.ts, DayGroupedFlightList, FlightCard
...
Regex capture groups and array boundary accesses replaced with nullish
fallbacks / explicit guards. Warning count: 41 → 30.
2026-04-20 09:19:14 +03:00