Compare commits

..

4 Commits

Author SHA1 Message Date
Vaka.pro
a581ffaaff fix(frontend): hide calendar popups on empty dates
Some checks failed
CI / build-and-test (pull_request) Has been cancelled
Keep race popovers limited to dates with events so empty days no longer show misleading hover details.

Made-with: Cursor
2026-04-13 22:58:36 +03:00
429a2924d7 Merge pull request 'fix(frontend): animate full race list row on hover (li, not inner link)' (#24) from fix/race-list-card-hover into main
Some checks failed
CI / build-and-test (push) Has been cancelled
Reviewed-on: #24
2026-04-13 19:51:07 +00:00
Vaka.pro
afb0f7ef31 fix(frontend): animate full race list row on hover (li, not inner link)
Some checks failed
CI / build-and-test (pull_request) Has been cancelled
Move scale/shadow transition to .race-card--action; keyboard focus ring on link.
Version 0.4.2.

Made-with: Cursor
2026-04-13 22:47:06 +03:00
92c2360feb Merge pull request 'fix(frontend): auto-completed on finish time, dashboard links, list/calendar UX' (#23) from fix/dashboard-form-races-ux into main
Some checks failed
CI / build-and-test (push) Has been cancelled
Reviewed-on: #23
2026-04-13 19:36:10 +00:00
4 changed files with 20 additions and 15 deletions

View File

@@ -1,12 +1,12 @@
{
"name": "calendar-run-frontend",
"version": "0.4.1",
"version": "0.4.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "calendar-run-frontend",
"version": "0.4.1",
"version": "0.4.3",
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1",

View File

@@ -1,7 +1,7 @@
{
"name": "calendar-run-frontend",
"private": true,
"version": "0.4.1",
"version": "0.4.3",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -120,7 +120,7 @@ function CalendarMonthBlock(props: {
className={`races-cal__cell${hasRaces ? " races-cal__cell--has-race" : ""}${isOpen ? " races-cal__cell--open" : ""}`}
onMouseEnter={() => {
cancelClose();
setOpenYmd(ymd);
setOpenYmd(hasRaces ? ymd : null);
}}
onMouseLeave={scheduleClose}
>
@@ -132,7 +132,7 @@ function CalendarMonthBlock(props: {
}}
onFocus={() => {
cancelClose();
setOpenYmd(ymd);
setOpenYmd(hasRaces ? ymd : null);
}}
onBlur={(e) => {
const next = e.relatedTarget as Node | null;
@@ -144,7 +144,7 @@ function CalendarMonthBlock(props: {
>
{day}
</button>
{isOpen ? (
{isOpen && hasRaces ? (
<DayPopover
ymd={ymd}
races={dayRaces}
@@ -187,7 +187,7 @@ export function RacesCalendar(props: RacesCalendarProps): JSX.Element {
return (
<div className="races-cal">
<p className="races-cal__hint">Наведите на дату краткая информация. Клик страница дня.</p>
<p className="races-cal__hint">Наведите на дату с забегом краткая информация. Клик страница дня.</p>
{focusedMonthIndex === null || Number.isNaN(focusedMonthIndex) ? (
<div className="races-cal__year">
{MONTH_NAMES_RU_SHORT.map((_, mi) => (

View File

@@ -321,6 +321,15 @@ a {
.race-card--action {
padding: 0;
overflow: visible;
transition:
transform 0.15s ease,
box-shadow 0.15s ease;
}
.race-card--action:hover,
.race-card--action:focus-within {
transform: scale(1.02);
box-shadow: var(--shadow-card-lift);
}
.race-card__link-surface {
@@ -333,16 +342,12 @@ a {
border-radius: var(--radius-sm);
color: inherit;
text-decoration: none;
transition:
transform 0.15s ease,
box-shadow 0.15s ease;
outline: none;
}
.race-card--action:hover .race-card__link-surface,
.race-card--action:focus-within .race-card__link-surface {
transform: scale(1.02);
box-shadow: var(--shadow-card-lift);
outline: none;
.race-card__link-surface:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
}
.race-card__title-text {