Description
The invoice creation form has a plain date-only input for expiry that ignores time zones, causing invoices to expire at unpredictable moments for creators and recipients in different regions. A date-time picker with explicit timezone selection is required.
Technical Context
src/components/invoice/ExpiryDatePicker.tsx (new) uses react-day-picker for the calendar UI paired with a time input and an IANA timezone selector built from Intl.supportedValuesOf('timeZone'). The selected value is converted to a UTC ISO 8601 string before being stored in src/hooks/useInvoiceForm.ts. src/components/invoice/ExpiryDisplay.tsx shows the expiry in the viewer's local timezone using Intl.DateTimeFormat with the timeZoneName: 'short' option.
Acceptance Criteria
Description
The invoice creation form has a plain date-only input for expiry that ignores time zones, causing invoices to expire at unpredictable moments for creators and recipients in different regions. A date-time picker with explicit timezone selection is required.
Technical Context
src/components/invoice/ExpiryDatePicker.tsx(new) usesreact-day-pickerfor the calendar UI paired with a time input and an IANA timezone selector built fromIntl.supportedValuesOf('timeZone'). The selected value is converted to a UTC ISO 8601 string before being stored insrc/hooks/useInvoiceForm.ts.src/components/invoice/ExpiryDisplay.tsxshows the expiry in the viewer's local timezone usingIntl.DateTimeFormatwith thetimeZoneName: 'short'option.Acceptance Criteria