@sixbell-telco/sdk
Version:
A collection of reusable components designed for use in Sixbell Telco Angular projects
204 lines (203 loc) • 6.99 kB
TypeScript
import { FormControl, FormGroup } from '@angular/forms';
import * as i0 from "@angular/core";
/** Possible textarea style variants */
export type textareaVariantProps = 'primary' | 'secondary' | 'tertiary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | null | undefined;
/** Possible textarea size variants */
export type textareaSizeProps = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | null | undefined;
/** Configuration object for textarea styling */
export type textareaProps = {
variant?: textareaVariantProps;
size?: textareaSizeProps;
};
/**
* A customizable textarea component with form integration and validation features
*
* @remarks
* Supports character counting, debounced input, and automatic validation styling.
* Implements ControlValueAccessor for Angular form compatibility.
*
* @example
* ```html
* <!-- Basic textarea usage -->
* <st-textarea
* [(value)]="description"
* label="Description"
* maxCharacters="500"
* ></st-textarea>
* ```
*
* @example
* ```html
* <!-- Reactive form integration -->
* <st-textarea
* [parentForm]="userForm"
* formControlName="bio"
* variant="primary"
* debounceTime="300"
* ></st-textarea>
* ```
*/
export declare class TextareaComponent {
/**
* Textarea style variant
* @defaultValue 'secondary'
*/
variant: import("@angular/core").InputSignal<textareaVariantProps>;
/**
* Textarea size variant
* @defaultValue 'md'
*/
size: import("@angular/core").InputSignal<textareaSizeProps>;
/**
* Whether to use ghost (transparent) styling
* @defaultValue false
*/
ghost: import("@angular/core").InputSignal<boolean>;
/**
* Label displayed above the textarea
*/
label: import("@angular/core").InputSignal<string | null>;
/**
* HTML name attribute for the textarea
*/
name: import("@angular/core").InputSignal<string | null>;
/**
* Placeholder text when empty
*/
placeholder: import("@angular/core").InputSignal<string>;
/**
* Number of visible text rows
* @defaultValue 3
*/
rows: import("@angular/core").InputSignal<string | number>;
/**
* Whether the textarea is readonly
* @defaultValue false
*/
readonly: import("@angular/core").InputSignal<boolean>;
/**
* Whether the textarea is disabled
* @defaultValue false
*/
disabled: import("@angular/core").ModelSignal<boolean>;
/**
* Event emitted on textarea blur
*/
blurred: import("@angular/core").OutputEmitterRef<string>;
/** @internal */
private blurTrigger;
/**
* Two-way bindable textarea value
*/
value: import("@angular/core").ModelSignal<string>;
/**
* Maximum allowed character count
* @defaultValue 0 (unlimited)
*/
maxCharacters: import("@angular/core").InputSignal<number>;
/**
* Whether current value exceeds maxCharacters
* @internal
*/
invalidMaxCharacters: import("@angular/core").Signal<boolean>;
/**
* Parent form group for reactive forms
*/
parentForm: import("@angular/core").InputSignal<FormGroup<any> | null>;
/**
* Form control name for reactive forms
*/
formControlName: import("@angular/core").InputSignal<string>;
/**
* @internal
* Gets associated form control
*/
get formField(): FormControl | null;
/** @internal */
private onControlChange;
/** @internal */
private onControlTouch;
/**
* Event emitted on Enter key press
*/
enterPressed: import("@angular/core").OutputEmitterRef<string>;
/**
* Debounce time in milliseconds for valueDebounced output
* @defaultValue 500
*/
debounceTime: import("@angular/core").InputSignal<number>;
/**
* Event emitted after debounce time when value changes
*/
valueDebounced: import("@angular/core").OutputEmitterRef<string>;
/** @internal */
private debounceAction$;
/** @internal */
private debounceTimeEffect;
/** @internal */
private value$;
constructor();
/**
* @internal
* Computed base textarea classes
*/
componentClass: import("@angular/core").Signal<string>;
/**
* @internal
* Computed error state classes
*/
errorClass: import("@angular/core").Signal<string>;
/**
* @internal
* Computed success state classes
*/
successClass: import("@angular/core").Signal<string>;
/**
* @internal
* Computed character counter error classes
*/
errorClassMaxCharacters: import("@angular/core").Signal<string>;
writeValue(obj: any): void;
registerOnChange(fn: any): void;
registerOnTouched(fn: any): void;
setDisabledState(isDisabled: boolean): void;
/**
* @internal
* Handles input changes
*/
handleChange(): void;
/**
* @internal
* Handles Enter key press
*/
handleEnter(): void;
/**
* @internal
* Handles blur event
*/
handleBlur(): void;
/** @internal */
private formControl;
/** @internal */
private formControl$;
/** @internal */
private statusChanges$;
/** @internal */
private stateChanges$;
/** @internal */
private statusSignal;
/** @internal */
private stateSignal;
/**
* @internal
* Computed validation classes based on form state
*/
validationClass: import("@angular/core").Signal<string>;
/**
* @internal
* Sets up debounce mechanism for value changes
*/
private setupDebounce;
static ɵfac: i0.ɵɵFactoryDeclaration<TextareaComponent, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<TextareaComponent, "st-textarea", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ghost": { "alias": "ghost"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "maxCharacters": { "alias": "maxCharacters"; "required": false; "isSignal": true; }; "parentForm": { "alias": "parentForm"; "required": false; "isSignal": true; }; "formControlName": { "alias": "formControlName"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "blurred": "blurred"; "value": "valueChange"; "enterPressed": "enterPressed"; "valueDebounced": "valueDebounced"; }, never, ["*"], true, never>;
}