Audit short-term: currency preview, date bounds, success destination, safe-area

- H3: Live currency preview below currency inputs shows the value formatted
  with thousands separators (en-US, USD) using Intl.NumberFormat. Skipped
  inside matrix cells to keep the Y1 monthly table compact.
- M1: Date inputs now apply min/max bounds. Default window is 1900-01-01 to
  2100-12-31; per-field override via FieldConfig.min/max as ISO strings.
- H6: On successful submit, replace the form with a SuccessDestination card
  (large checkmark, org name, "Submit another" + "safe to close" affordance).
  Prevents accidental duplicate submits from back-button / autofill replay.
- M6: Sticky submit bar respects iOS safe-area-inset-bottom.

FieldRenderer now takes a control prop so the currency preview can subscribe
to its single field via useWatch without re-rendering the whole form.
This commit is contained in:
Joel Brock
2026-05-11 09:48:03 -07:00
parent 0d84b9654b
commit a804650f65
4 changed files with 144 additions and 14 deletions

View File

@@ -69,9 +69,13 @@ export interface FieldConfig {
placeholder?: string;
/** For select / multiselect. */
options?: SelectOption[];
/** For number / currency / percent — min/max/step constraints. */
min?: number;
max?: number;
/**
* Min/max bound. For numeric fields, a number; for date fields, an ISO
* date string (YYYY-MM-DD). Date fields default to a wide sanity window
* (1900-01-01 to 2100-12-31) when not set.
*/
min?: number | string;
max?: number | string;
step?: number;
/** For text / textarea — max length. */
maxLength?: number;