@cds/core
Version:
Clarity Design System - common components, themes, and utilties
109 lines (108 loc) • 3.91 kB
TypeScript
import { LitElement, TemplateResult, PropertyValues } from 'lit';
import { EventEmitter } from '@cds/core/internal';
import { CdsControlAction } from '../control-action/control-action.element.js';
import { CdsControlMessage } from './../control-message/control-message.element.js';
import { ControlStatus, ControlLayout, ControlWidth } from './../utils/interfaces.js';
import { CdsInternalControlLabel } from '../control-label/control-label.element.js';
export declare const enum ControlLabelLayout {
default = "default",
ariaLabel = "aria-label",
inputGroup = "input-group",
hiddenLabel = "hidden-label"
}
/**
* Generic Control
*
* ```typescript
* import '@cds/core/forms/register.js';
* ```
*
* ```html
* <cds-control>
* <label>control</label>
* <input type="text" />
* </cds-control>
* ```
* @element cds-control
* @slot - For projecting input and label
* @cssprop --label-width
*/
export declare class CdsControl extends LitElement {
/**
* Set the status of form control validation
* @type {neutral | error | success}
*/
status: ControlStatus;
/**
* Adjust the control from the default full width or the browser default width
* @type {stretch | shrink}
*/
controlWidth: ControlWidth;
/**
* Set the validate attribute to sync with HTML5 native validation
* https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation
*/
validate: boolean;
/**
* By default forms will collapse to layout that prevents overflow.
* If disabled control layout may break or overflow in unexpected ways.
*/
responsive: boolean;
/**
* Set to adjust the default control layout. When `responsive` is true this will be the largest size to scale to.
* @type {vertical | horizontal | compact}
*/
get layout(): ControlLayout;
set layout(value: ControlLayout);
private _layout;
protected focused: boolean;
protected disabled: boolean;
protected readonly: boolean;
protected fixedControlWidth: boolean;
protected supportsPrefixSuffixActions: boolean;
protected get isRTL(): boolean;
/** @private */
labelLayout: ControlLabelLayout;
/** @private Used for control/form groups */
inputControl: HTMLInputElement;
protected label: HTMLLabelElement;
/** @private */
controlLabel: CdsInternalControlLabel;
protected datalistControl: HTMLDataListElement;
protected messages: NodeListOf<CdsControlMessage>;
protected controlActions: NodeListOf<CdsControlAction>;
private prefixAction;
private suffixAction;
private messageSlot;
layoutChange: EventEmitter<ControlLayout>;
protected observers: (MutationObserver | ResizeObserver)[];
static get styles(): import("lit").CSSResultGroup[];
private get hasAriaLabelTypeAttr();
private get hasStatusIcon();
render(): TemplateResult<1>;
protected get inputTemplate(): TemplateResult<1>;
protected get prefixDefaultTemplate(): TemplateResult | null;
protected get suffixDefaultTemplate(): TemplateResult | null;
private get isGenericControl();
private get hasControlActions();
private get primaryLabelTemplate();
protected get messagesTemplate(): TemplateResult<1>;
private get prefixTemplate();
private get suffixTemplate();
connectedCallback(): void;
firstUpdated(props: PropertyValues<this>): void;
updated(props: PropertyValues<any>): void;
disconnectedCallback(): void;
protected associateInputAndLabel(): void;
private associateInputToDatalist;
private setupDescribedByUpdates;
private setupHostAttributes;
private setupHTML5Validation;
private setupPositioningListeners;
private setActionOffsetPadding;
/** @private */
get layoutStable(): boolean;
private setupResponsive;
private setupLabelLayout;
private assignSlotIfInControlGroup;
}