Redesign the setup flow and consolidate the CSS into one primitives layer
Onboarding asks explicitly for one or two parents and shows one card per parent for balances; the balance form is per parent with inline validation; the partner can be filled from the FK deduction or added from it. Settings and Dashboard reuse the same form. CSS: bare buttons carry no colour any more; buttons, cards, choice cards, fields, alerts, badges, eyebrow and modal chrome are defined once in primitives.css. Media queries live only in responsive.css. A style guard test blocks hex, !important and stray media queries. Bilingual fixes: calendar selects size by content, header no longer wraps. Vitest is capped at four workers. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -111,7 +111,20 @@ export function CalendarDay({
|
||||
title={title}
|
||||
className={className}
|
||||
onKeyDown={handleKeyDown}
|
||||
onPointerDown={() => onPointerDown?.(date)}
|
||||
onPointerDown={(e) => {
|
||||
// Touch browsers implicitly capture the pointer to the element it
|
||||
// went down on, so subsequent `pointermove`s never fire
|
||||
// `pointerenter` on the cells the finger drags across — collapsing
|
||||
// a multi-day drag into a single-day tap. Releasing capture
|
||||
// immediately restores normal hover-style `pointerenter` targeting
|
||||
// for the rest of the drag. jsdom (unit tests) doesn't implement
|
||||
// the Pointer Capture API at all, hence the guards.
|
||||
const target = e.currentTarget
|
||||
if (typeof target.hasPointerCapture === 'function' && target.hasPointerCapture(e.pointerId)) {
|
||||
target.releasePointerCapture(e.pointerId)
|
||||
}
|
||||
onPointerDown?.(date)
|
||||
}}
|
||||
onPointerEnter={() => onPointerEnter?.(date)}
|
||||
>
|
||||
<div className="calendar-day__number">{dayNum}</div>
|
||||
|
||||
Reference in New Issue
Block a user