"use client"; /** * Vault Field * * A credential/API key input form with integration branding. * Supports 1-6 dynamic fields with password masking by default. */ import { KeyRound } from "lucide-react"; import Image from "next/image"; import { ANIMATION_CLASSES, getStaggerStyle, STAGGER_PRESETS, } from "../animations"; import { cx } from "../lib/utils"; import { OnboardingButton } from "../primitives/onboarding-button"; import { OnboardingInput } from "../primitives/onboarding-input"; import { OnboardingLabel } from "../primitives/onboarding-label"; import type { VaultFieldProps } from "../types/fields"; export function VaultField({ integration, title = "Add Credential", fields, values, onChange, onSave, onCancel, loading = false, disabled = false, animationIndex = 0, }: VaultFieldProps) { const displayTitle = integration?.name || title; const handleFieldChange = (key: string, value: string) => { onChange({ ...values, [key]: value }); }; return (
{/* Header */}
{integration?.logoUrl ? ( {integration.name} ) : ( )}

{displayTitle}

{/* Dynamic Fields */}
{fields.slice(0, 6).map((field, _index) => (
{field.label} {field.required && ( * )} handleFieldChange(field.key, e.target.value)} disabled={disabled || loading} autoComplete="off" data-1p-ignore data-lpignore="true" />
))}
{/* Footer Buttons */}
Cancel Save
); }