/** No `options` prop — typed text is validated as an email, not picked from a list; use `SearchSelect isMultiple`. */ export type MultiSelectProps = { /** Controlled list of entered chips; the component never keeps its own copy. */ value: MultiSelectOption[]; /** Fires with the full new list when an email is added, a chip is removed, or Backspace on empty input drops the last chip. */ onValueChange: (options: MultiSelectOption[]) => void; /** CSS width of the whole field; defaults to "100%". */ width?: string; /** Label text above the field; defaults to the literal "label", and an empty string hides the label. */ label?: string; /** DOM id of the input; the label's `for` and the message ids derive from it. Auto-generated when omitted. */ id?: string; /** Native `name` of the text input. */ name?: string; /** Sets native `required` + `aria-required` on the field, and draws the label asterisk. Defaults to true. */ isRequired?: boolean; /** Shows an info icon beside the label; renders nothing unless `informationMessage` is also set. */ isInformation?: boolean; /** Tooltip text of the label's info icon; only read when `isInformation` is true. */ informationMessage?: string; /** Placeholder of the text input, shown only while no chips exist; defaults to "Type valid email and press enter". */ placeholderText?: string; /** Disables the text input and applies the disabled field styling. */ isDisabled?: boolean; /** Makes the text input read-only and stops `addOnBlur` from committing; chips can still be removed. */ isReadOnly?: boolean; /** Also commits the typed email when the field loses focus, not just on Enter. Defaults to false. */ addOnBlur?: boolean; /** Marks the field invalid (`aria-invalid` + error border) and swaps `helperText` for `errorMessage`; a rejected email sets this internally too. */ error?: boolean; /** Height on the field control scale (xs 32 · sm 38 · md 40 · lg 48px). Defaults to `sm`. */ size?: "xs" | "sm" | "md" | "lg"; /** Inline style merged over the text input's own style (after a transparent background), not the outer field. */ inputStyle?: object; /** Rendered only while `error` is true; a rejected email's internal "Invalid email address" text wins over this until the input changes. */ errorMessage?: string; /** Hint under the field; hidden while invalid. */ helperText?: string; }; /** One entered chip — id is a generated key, label is the email text the user typed. */ export type MultiSelectOption = { /** Generated unique key for the chip; not derived from the email. */ id: string; /** The email address as typed; duplicates are rejected by comparing this. */ label: string; }; /** @deprecated Typo'd name — use `MultiSelectOption`. */ export type MultiSelctOPtions = MultiSelectOption;