Deklarativní formulář: dostane pole a hodnoty, vrací změny přes onChange. Tvar formuláře jsou data, ne JSX.
fieldsFromConfigSchema a fieldsFromIntegrationManifest je převedou na IngotFieldSpec[].<label> a vlastní onChange.integer, number, boolean, secret) choval na všech obrazovkách stejně.space-y; poskládej si IngotFieldInput sám.IngotField.IngotFieldInput přímo levnější a nemusíš vymýšlet testIdPrefix.fields: readonly IngotFieldSpec[] — Popis polí. Pořadí v poli je pořadí na obrazovce.values: Record<string, unknown> — Aktuální hodnoty klíčované podle field.key.onChange: (key: string, next: unknown) => void — Formulář je řízený — stav drží volající.testIdPrefix: string — data-testid vstupu je `${testIdPrefix}-${key}`.renderOptions: IngotFieldInput['renderOptions'] — Výběr pro pole typu options. Bez něj se pole chová jako text.secretPlaceholder: (field: IngotFieldSpec) => string — Přeložený placeholder tajného pole — Ingot překlady nemá.className: string — Obal formuláře. Výchozí space-y-4.inputClassName: string — Obrazovky se liší šířkou pole, ne tvarem formuláře.labelClassName: string — Popisek pole. Výchozí block text-sm.