import type { HTMLTextareaAttributes } from 'svelte/elements';
import type { MintProp } from '../../mint/index.js';
import type { TextareaSlots, TextareaVariants } from './textarea.variants.js';
/**
* @summary Multi-line text that grows with what you write.
* @description Multi-line text input with auto-resize, character counter, and validation states.
* Shares the same variant/intent/size system as Input for visual consistency.
*
* @tag form
*
* @example
* ```svelte
*
* ```
*
* @example
* ```svelte
*
* ```
*/
export interface TextareaProps extends Omit, Omit {
/**
* Visual style.
* - `outlined` (default) — visible border, surface-base background
* - `filled` — surface-interactive fill, no border
* - `ghost` — transparent until hover/focus
* - `underline` — bottom-line only, no border-box (editorial style)
*
* @default 'outlined'
* @summary Visual style of the field: bordered, filled, transparent, or a bottom line.
*/
variant?: TextareaVariants['variant'];
/** Label text displayed above the textarea, auto-linked via `for`/`id`. */
label?: string;
/** Error message below the textarea. Overrides `helper` and forces danger border styling. */
error?: string;
/** Helper text below the textarea. Hidden when `error` is set. */
helper?: string;
/** Show a live character counter. Requires `maxlength`; shows the current count against the limit (e.g. `42/280`). */
showCounter?: boolean;
/** Character threshold (percentage of maxlength) at which the counter turns warning color. @default 0.9 */
counterWarningThreshold?: number;
/**
* Automatically grow the textarea height to fit content. Disables manual resize handle.
* @default false
*/
autoResize?: boolean;
/** Minimum number of visible text rows. @default 3 */
minRows?: number;
/** Maximum number of visible text rows when autoResize is enabled. */
maxRows?: number;
/** @default false */
disabled?: boolean;
/** @default false */
readonly?: boolean;
/** Adds a required asterisk to the label and sets the native `required` attribute. @default false */
required?: boolean;
/**
* Micro-interaction preset applied to the textarea element. Only applies
* while not disabled.
* @default 'none'
*/
mint?: MintProp;
/** Extra classes merged onto the root wrapper element. */
class?: string;
/** Remove all default tv() classes. Only user-provided classes apply. */
unstyled?: boolean;
/**
* Per-slot class overrides merged with tv() styles. Slots: wrapper (root —
* what `class` also targets) | base (the `