"use client"; /** * Team Invite Field * * COPIED VERBATIM FROM: components/onboarding/steps/team-invite-step.tsx:199-261 * Renders a team member invite row with email and role */ import { Mail, Plus, X } from "lucide-react"; import { ANIMATION_CLASSES, getStaggerStyle, STAGGER_PRESETS, } from "../animations"; import { cx } from "../lib/utils"; import { OnboardingInput } from "../primitives/onboarding-input"; import { OnboardingLabel } from "../primitives/onboarding-label"; import { OnboardingSelect, OnboardingSelectContent, OnboardingSelectItem, OnboardingSelectTrigger, OnboardingSelectValue, } from "../primitives/onboarding-select"; import type { TeamInviteFieldProps, TeamMember, TeamRole, } from "../types/fields"; interface MemberRowProps { member: TeamMember; index: number; roles: TeamRole[]; error?: string; canRemove: boolean; onEmailChange: (index: number, email: string) => void; onRoleChange: (index: number, role: string) => void; onRemove: (index: number) => void; disabled?: boolean; } /** * Single member row * COPIED VERBATIM FROM: components/onboarding/steps/team-invite-step.tsx:210-260 */ function MemberRow({ member, index, roles, error, canRemove, onEmailChange, onRoleChange, onRemove, disabled, }: MemberRowProps) { return (
Email address onEmailChange(index, e.target.value)} aria-invalid={!!error} className={cx(error && "border-destructive")} disabled={disabled} />
Role onRoleChange(index, value)} disabled={disabled} > {roles.map((role) => ( {role.label} ))}
{canRemove && ( )}
{error &&

{error}

}
); } export function TeamInviteField({ members, roles, errors = {}, onChange, onAdd, onRemove, maxInvites = 10, disabled = false, }: TeamInviteFieldProps) { const handleEmailChange = (index: number, email: string) => { const newMembers = [...members]; newMembers[index] = { ...newMembers[index], email }; onChange(newMembers); }; const handleRoleChange = (index: number, role: string) => { const newMembers = [...members]; newMembers[index] = { ...newMembers[index], role }; onChange(newMembers); }; const canAddMore = members.length < maxInvites; return (
{members.map((member, index) => ( 1} onEmailChange={handleEmailChange} onRoleChange={handleRoleChange} onRemove={onRemove} disabled={disabled} /> ))}
{canAddMore && ( )}
); }