@studiocms/ui
Version:
The UI library for StudioCMS. Includes the layouts & components we use to build StudioCMS.
60 lines (59 loc) • 1.7 kB
TypeScript
export type SelectOption = {
value: string;
label: string;
disabled?: boolean;
};
interface SelectState {
options: SelectOption[];
isMultiple: boolean;
focusIndex: number;
placeholder: string;
}
type ResizeCallback = (width: number, height: number, element: Element) => void;
export declare class SUISelectElement extends HTMLElement {
readonly CONSTANTS: {
OPTION_HEIGHT: number;
BORDER_SIZE: number;
MARGIN: number;
BADGE_PADDING: number;
};
observerMap: WeakMap<Element, {
observer: ResizeObserver;
callback: ResizeCallback;
}>;
state: SelectState;
button: HTMLButtonElement | undefined;
dropdown: HTMLDivElement | undefined;
select: HTMLSelectElement | undefined;
constructor();
connectedCallback(): void;
private observeResize;
private unobserveResize;
private isVisible;
getDropdownPosition: (element: HTMLElement) => {
isAbove: boolean;
customRect: {
top: number;
bottom: number;
left: number;
right: number;
width: number;
x: number;
y: number;
height: number;
};
};
private closeDropdown;
private openDropdown;
createSelectBadge: (value: string, label: string) => HTMLSpanElement;
private measureBadgesWidth;
private handleBadgeOverflow;
updateLabel: () => void;
private deselectMultiOption;
recomputeOptions: () => void;
getInteractiveOptions: () => HTMLLIElement[];
private handleOptionSelect;
private handleContainerClick;
handleSelectKeyDown: (e: KeyboardEvent) => void;
}
export {};