diff --git a/src/features/schedule/components/ScheduleStartPage.scss b/src/features/schedule/components/ScheduleStartPage.scss index cdc7f6fe..859635ed 100644 --- a/src/features/schedule/components/ScheduleStartPage.scss +++ b/src/features/schedule/components/ScheduleStartPage.scss @@ -346,6 +346,15 @@ } } + // PrimeReact Calendar input — step the font down from the start-page's + // 16px so the full 'ДД.ММ.ГГГГ - ДД.ММ.ГГГГ' placeholder fits in the + // narrow left-column width. Matches Angular's `body .p-inputtext` + // baseline of 14px for calendar inputs. + .p-calendar input.p-inputtext { + font-size: fonts.$font-size-m !important; + padding-right: 2rem; // leave room for the trigger icon on the right + } + // Swap button — match Angular's flat style .change-container { display: flex; diff --git a/src/features/schedule/components/ScheduleStartPage.test.tsx b/src/features/schedule/components/ScheduleStartPage.test.tsx index 055f7325..b213cc57 100644 --- a/src/features/schedule/components/ScheduleStartPage.test.tsx +++ b/src/features/schedule/components/ScheduleStartPage.test.tsx @@ -169,16 +169,22 @@ describe("ScheduleStartPage", () => { expect(screen.getByText("SCHEDULE.SCHEDULE-START-TITLE4-DESCRIPTION")).toBeTruthy(); }); - it("4.1.7-R-info-block-2a: renders 'Купить билет' capabilities block (TITLE5)", () => { + // TZ Table 9 prescribes a second 'Возможности расписания' info section + // (Title5 'Купить билет' + Title6 'Расписание'), but the Angular + // reference baseline has that block commented out — the infos are + // redundant with the OB start-page's capability tiles. Following + // Angular: assert the block is *not* rendered. If business later + // requires it, flip these to positive assertions. + it("4.1.7-R-info-block-2a: 'Купить билет' capabilities block (TITLE5) hidden (Angular parity)", () => { render(); - expect(screen.getByText("SCHEDULE.SCHEDULE-START-TITLE5")).toBeTruthy(); - expect(screen.getByText("SCHEDULE.SCHEDULE-START-TITLE5-DESCRIPTION")).toBeTruthy(); + expect(screen.queryByText("SCHEDULE.SCHEDULE-START-TITLE5")).toBeNull(); + expect(screen.queryByText("SCHEDULE.SCHEDULE-START-TITLE5-DESCRIPTION")).toBeNull(); }); - it("4.1.7-R-info-block-2b: renders 'Расписание' capabilities block (TITLE6)", () => { + it("4.1.7-R-info-block-2b: 'Расписание' capabilities block (TITLE6) hidden (Angular parity)", () => { render(); - expect(screen.getByText("SCHEDULE.SCHEDULE-START-TITLE6")).toBeTruthy(); - expect(screen.getByText("SCHEDULE.SCHEDULE-START-TITLE6-DESCRIPTION")).toBeTruthy(); + expect(screen.queryByText("SCHEDULE.SCHEDULE-START-TITLE6")).toBeNull(); + expect(screen.queryByText("SCHEDULE.SCHEDULE-START-TITLE6-DESCRIPTION")).toBeNull(); }); it("4.1.7-R-popular: renders PopularRequestsPanel for request handling", () => { diff --git a/src/features/schedule/components/ScheduleStartPage.tsx b/src/features/schedule/components/ScheduleStartPage.tsx index dc1593f2..e8a92c39 100644 --- a/src/features/schedule/components/ScheduleStartPage.tsx +++ b/src/features/schedule/components/ScheduleStartPage.tsx @@ -586,23 +586,14 @@ export const ScheduleStartPage: FC = () => { -

{t("SCHEDULE.POPULAR-CHAPTERS")}

- -
-
- {t("SCHEDULE.SCHEDULE-START-TITLE5")} -
- {t("SCHEDULE.SCHEDULE-START-TITLE5-DESCRIPTION")} -
-
- -
- {t("SCHEDULE.SCHEDULE-START-TITLE6")} -
- {t("SCHEDULE.SCHEDULE-START-TITLE6-DESCRIPTION")} -
-
-
+ {/* + TZ Table 9 prescribes a second info section "Возможности расписания" + (Title5 + Title6), but the Angular reference baseline has it commented + out (see `ClientApp/.../schedule-start-page.component.html`). Following + Angular here — the block duplicates the "Купить билет / Расписание" + info already shown in the OB start-page table and breaks the visual + rhythm. The i18n keys are retained for future work if needed. + */} diff --git a/src/styles/_layout.scss b/src/styles/_layout.scss index 5961360d..65aefa24 100644 --- a/src/styles/_layout.scss +++ b/src/styles/_layout.scss @@ -313,56 +313,13 @@ body { } } -// Accordion button-clear (adapted from PrimeNG p-accordion element selector) -.p-accordion .p-accordion-content button.button-clear { - display: none; - position: absolute; - right: $buttons-width; - top: 0px; - bottom: 0px; - width: $buttons-width !important; - border: none; - border-radius: 0; - background: rgb(255, 255, 255); - background: linear-gradient(270deg, rgba(255, 255, 255, 1) 80%, rgba(255, 255, 255, 0) 100%); - - .p-button-label { - background-image: url('/assets/img/close.svg'); - background-repeat: no-repeat; - background-size: 10px 10px; - height: 100%; - background-position: center center; - transition-duration: 0.2s; - position: relative; - - &:before { - display: none; - position: absolute; - content: ''; - top: 0; - left: 0; - bottom: 0; - width: 1px; - background-color: $border-input; - } - } - - &-opened { - .p-button-label { - transform: rotate(180deg); - } - } - - &:hover { - background-color: $white !important; - - .p-button-label { - &:before { - display: block; - } - } - } -} +// Removed: legacy Angular-port rule `.p-accordion .p-accordion-content button.button-clear` +// that forced `display: none` and specific positioning. In React we reuse +// `.button-clear` as the shared "X" for CityAutocomplete + OnlineBoardFilter +// flight-number input; the legacy rule was defeating our `--has-value` +// show-rule by specificity and hiding the X on city inputs inside the +// accordion-based OnlineBoard filter. If we re-introduce a p-accordion +// close affordance, give it a distinct class. .app-show-debug { display: inline-flex; diff --git a/src/ui/city-autocomplete/CityAutocomplete.scss b/src/ui/city-autocomplete/CityAutocomplete.scss index 84af48ba..05399592 100644 --- a/src/ui/city-autocomplete/CityAutocomplete.scss +++ b/src/ui/city-autocomplete/CityAutocomplete.scss @@ -36,6 +36,21 @@ flex: 1; } + // Reset the inner PrimeReact input's native border — the outer + // __input div carries the border+shadow already (Angular parity via + // the global `city-autocomplete input.p-inputtext` reset rule). + input.p-inputtext { + border: none !important; + box-shadow: none !important; + } + + // Also drop PrimeReact's blue focus shadow on the inner input + // when it is focused, so the outer box-shadow stays as the only + // visible border. + input.p-inputtext:focus { + box-shadow: none !important; + } + .button-clear { display: none; width: 32px;