This commit is contained in:
+428
@@ -0,0 +1,428 @@
|
||||
import { Previous } from "runed";
|
||||
import { DOMContext, type ReadableBoxedValues, type WritableBoxedValues, type Box } from "svelte-toolbelt";
|
||||
import type { BitsEvent, BitsFocusEvent, BitsKeyboardEvent, BitsMouseEvent, BitsPointerEvent, OnChangeFn, WithRefOpts, RefAttachment } from "../../internal/types.js";
|
||||
import { PresenceManager } from "../../internal/presence-manager.svelte.js";
|
||||
export declare const INTERACTION_KEYS: string[];
|
||||
export declare const FIRST_KEYS: string[];
|
||||
export declare const LAST_KEYS: string[];
|
||||
export declare const FIRST_LAST_KEYS: string[];
|
||||
export declare const SELECTION_KEYS: string[];
|
||||
export declare const CONTENT_MARGIN = 10;
|
||||
declare const selectAttrs: import("../../internal/attrs.js").CreateBitsAttrsReturn<readonly ["trigger", "content", "item", "viewport", "scroll-up-button", "scroll-down-button", "group", "group-label", "separator", "arrow", "input", "content-wrapper", "item-text", "value"]>;
|
||||
interface SelectBaseRootStateOpts extends ReadableBoxedValues<{
|
||||
disabled: boolean;
|
||||
required: boolean;
|
||||
name: string;
|
||||
loop: boolean;
|
||||
scrollAlignment: "nearest" | "center";
|
||||
items: {
|
||||
value: string;
|
||||
label: string;
|
||||
disabled?: boolean;
|
||||
}[];
|
||||
allowDeselect: boolean;
|
||||
onOpenChangeComplete: OnChangeFn<boolean>;
|
||||
}>, WritableBoxedValues<{
|
||||
open: boolean;
|
||||
inputValue: string;
|
||||
}> {
|
||||
isCombobox: boolean;
|
||||
}
|
||||
declare abstract class SelectBaseRootState {
|
||||
readonly opts: SelectBaseRootStateOpts;
|
||||
touchedInput: boolean;
|
||||
inputNode: HTMLElement | null;
|
||||
contentNode: HTMLElement | null;
|
||||
contentPresence: PresenceManager;
|
||||
viewportNode: HTMLElement | null;
|
||||
triggerNode: HTMLElement | null;
|
||||
valueId: string;
|
||||
highlightedNode: HTMLElement | null;
|
||||
readonly highlightedValue: string | null;
|
||||
readonly highlightedId: string | undefined;
|
||||
readonly highlightedLabel: string | null;
|
||||
isUsingKeyboard: boolean;
|
||||
isCombobox: boolean;
|
||||
domContext: DOMContext;
|
||||
constructor(opts: SelectBaseRootStateOpts);
|
||||
setHighlightedNode(node: HTMLElement | null, initial?: boolean): void;
|
||||
getCandidateNodes(): HTMLElement[];
|
||||
setHighlightedToFirstCandidate(initial?: boolean): void;
|
||||
getNodeByValue(value: string): HTMLElement | null;
|
||||
setOpen(open: boolean): void;
|
||||
toggleOpen(): void;
|
||||
handleOpen(): void;
|
||||
handleClose(): void;
|
||||
toggleMenu(): void;
|
||||
getBitsAttr: typeof selectAttrs.getAttr;
|
||||
}
|
||||
interface SelectSingleRootStateOpts extends SelectBaseRootStateOpts, WritableBoxedValues<{
|
||||
value: string;
|
||||
}> {
|
||||
}
|
||||
export declare class SelectSingleRootState extends SelectBaseRootState {
|
||||
readonly opts: SelectSingleRootStateOpts;
|
||||
readonly isMulti: false;
|
||||
readonly hasValue: boolean;
|
||||
readonly currentLabel: string;
|
||||
readonly candidateLabels: string[];
|
||||
readonly dataTypeaheadEnabled: boolean;
|
||||
constructor(opts: SelectSingleRootStateOpts);
|
||||
includesItem(itemValue: string): boolean;
|
||||
toggleItem(itemValue: string, itemLabel?: string): void;
|
||||
setInitialHighlightedNode(): void;
|
||||
}
|
||||
interface SelectMultipleRootStateOpts extends SelectBaseRootStateOpts, WritableBoxedValues<{
|
||||
value: string[];
|
||||
}> {
|
||||
}
|
||||
declare class SelectMultipleRootState extends SelectBaseRootState {
|
||||
readonly opts: SelectMultipleRootStateOpts;
|
||||
readonly isMulti: true;
|
||||
readonly hasValue: boolean;
|
||||
constructor(opts: SelectMultipleRootStateOpts);
|
||||
includesItem(itemValue: string): boolean;
|
||||
toggleItem(itemValue: string, itemLabel?: string): void;
|
||||
setInitialHighlightedNode(): void;
|
||||
}
|
||||
interface SelectRootStateOpts extends ReadableBoxedValues<{
|
||||
disabled: boolean;
|
||||
required: boolean;
|
||||
loop: boolean;
|
||||
scrollAlignment: "nearest" | "center";
|
||||
name: string;
|
||||
items: {
|
||||
value: string;
|
||||
label: string;
|
||||
disabled?: boolean;
|
||||
}[];
|
||||
allowDeselect: boolean;
|
||||
onOpenChangeComplete: OnChangeFn<boolean>;
|
||||
}>, WritableBoxedValues<{
|
||||
open: boolean;
|
||||
inputValue: string;
|
||||
}> {
|
||||
isCombobox: boolean;
|
||||
type: "single" | "multiple";
|
||||
value: Box<string> | Box<string[]>;
|
||||
}
|
||||
export declare class SelectRootState {
|
||||
static create(props: SelectRootStateOpts): SelectRoot;
|
||||
}
|
||||
type SelectRoot = SelectSingleRootState | SelectMultipleRootState;
|
||||
interface SelectInputStateOpts extends WithRefOpts, ReadableBoxedValues<{
|
||||
clearOnDeselect: boolean;
|
||||
}> {
|
||||
}
|
||||
export declare class SelectInputState {
|
||||
static create(opts: SelectInputStateOpts): SelectInputState;
|
||||
readonly opts: SelectInputStateOpts;
|
||||
readonly root: SelectRoot;
|
||||
readonly attachment: RefAttachment;
|
||||
constructor(opts: SelectInputStateOpts, root: SelectRoot);
|
||||
onkeydown(e: BitsKeyboardEvent): void;
|
||||
oninput(e: BitsEvent<Event, HTMLInputElement>): void;
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly role: "combobox";
|
||||
readonly disabled: true | undefined;
|
||||
readonly "aria-activedescendant": string | undefined;
|
||||
readonly "aria-autocomplete": "list";
|
||||
readonly "aria-expanded": "true" | "false";
|
||||
readonly "data-state": "open" | "closed";
|
||||
readonly "data-disabled": "" | undefined;
|
||||
readonly onkeydown: (e: BitsKeyboardEvent) => void;
|
||||
readonly oninput: (e: BitsEvent<Event, HTMLInputElement>) => void;
|
||||
};
|
||||
}
|
||||
interface SelectComboTriggerStateOpts extends WithRefOpts {
|
||||
}
|
||||
export declare class SelectComboTriggerState {
|
||||
static create(opts: SelectComboTriggerStateOpts): SelectComboTriggerState;
|
||||
readonly opts: SelectComboTriggerStateOpts;
|
||||
readonly root: SelectBaseRootState;
|
||||
readonly attachment: RefAttachment;
|
||||
constructor(opts: SelectComboTriggerStateOpts, root: SelectBaseRootState);
|
||||
onkeydown(e: BitsKeyboardEvent): void;
|
||||
/**
|
||||
* `pointerdown` fires before the `focus` event, so we can prevent the default
|
||||
* behavior of focusing the button and keep focus on the input.
|
||||
*/
|
||||
onpointerdown(e: BitsPointerEvent): void;
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly disabled: true | undefined;
|
||||
readonly "aria-haspopup": "listbox";
|
||||
readonly "data-state": "open" | "closed";
|
||||
readonly "data-disabled": "" | undefined;
|
||||
readonly onpointerdown: (e: BitsPointerEvent) => void;
|
||||
readonly onkeydown: (e: BitsKeyboardEvent) => void;
|
||||
};
|
||||
}
|
||||
interface SelectTriggerStateOpts extends WithRefOpts {
|
||||
}
|
||||
export declare class SelectTriggerState {
|
||||
#private;
|
||||
static create(opts: SelectTriggerStateOpts): SelectTriggerState;
|
||||
readonly opts: SelectTriggerStateOpts;
|
||||
readonly root: SelectRoot;
|
||||
readonly attachment: RefAttachment;
|
||||
constructor(opts: SelectTriggerStateOpts, root: SelectRoot);
|
||||
onkeydown(e: BitsKeyboardEvent): void;
|
||||
onclick(e: BitsMouseEvent): void;
|
||||
onpointerdown(e: BitsPointerEvent): void;
|
||||
onpointerup(e: BitsPointerEvent): void;
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly disabled: true | undefined;
|
||||
readonly "aria-haspopup": "listbox";
|
||||
readonly "aria-expanded": "true" | "false";
|
||||
readonly "aria-activedescendant": string | undefined;
|
||||
readonly "data-state": "open" | "closed";
|
||||
readonly "data-disabled": "" | undefined;
|
||||
readonly "data-placeholder": "" | undefined;
|
||||
readonly onpointerdown: (e: BitsPointerEvent) => void;
|
||||
readonly onkeydown: (e: BitsKeyboardEvent) => void;
|
||||
readonly onclick: (e: BitsMouseEvent) => void;
|
||||
readonly onpointerup: (e: BitsPointerEvent) => void;
|
||||
};
|
||||
}
|
||||
interface SelectContentStateOpts extends WithRefOpts, ReadableBoxedValues<{
|
||||
onInteractOutside: (e: PointerEvent) => void;
|
||||
onEscapeKeydown: (e: KeyboardEvent) => void;
|
||||
}> {
|
||||
}
|
||||
export declare class SelectContentState {
|
||||
#private;
|
||||
static create(opts: SelectContentStateOpts): SelectContentState;
|
||||
readonly opts: SelectContentStateOpts;
|
||||
readonly root: SelectRoot;
|
||||
readonly attachment: RefAttachment;
|
||||
isPositioned: boolean;
|
||||
domContext: DOMContext;
|
||||
constructor(opts: SelectContentStateOpts, root: SelectRoot);
|
||||
onpointermove(_: BitsPointerEvent): void;
|
||||
onInteractOutside: (e: PointerEvent) => void;
|
||||
onEscapeKeydown: (e: KeyboardEvent) => void;
|
||||
onOpenAutoFocus: (e: Event) => void;
|
||||
onCloseAutoFocus: (e: Event) => void;
|
||||
get shouldRender(): boolean;
|
||||
readonly snippetProps: {
|
||||
open: boolean;
|
||||
};
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly role: "listbox";
|
||||
readonly "aria-multiselectable": "true" | undefined;
|
||||
readonly "data-state": "open" | "closed";
|
||||
readonly style: {
|
||||
readonly display: "flex";
|
||||
readonly flexDirection: "column";
|
||||
readonly outline: "none";
|
||||
readonly boxSizing: "border-box";
|
||||
readonly pointerEvents: "auto";
|
||||
};
|
||||
readonly onpointermove: (_: BitsPointerEvent) => void;
|
||||
};
|
||||
readonly popperProps: {
|
||||
onInteractOutside: (e: PointerEvent) => void;
|
||||
onEscapeKeydown: (e: KeyboardEvent) => void;
|
||||
onOpenAutoFocus: (e: Event) => void;
|
||||
onCloseAutoFocus: (e: Event) => void;
|
||||
trapFocus: boolean;
|
||||
loop: boolean;
|
||||
onPlaced: () => void;
|
||||
};
|
||||
}
|
||||
interface SelectItemStateOpts extends WithRefOpts, ReadableBoxedValues<{
|
||||
value: string;
|
||||
disabled: boolean;
|
||||
label: string;
|
||||
onHighlight: () => void;
|
||||
onUnhighlight: () => void;
|
||||
}> {
|
||||
}
|
||||
export declare class SelectItemState {
|
||||
static create(opts: SelectItemStateOpts): SelectItemState;
|
||||
readonly opts: SelectItemStateOpts;
|
||||
readonly root: SelectRoot;
|
||||
readonly attachment: RefAttachment;
|
||||
readonly isSelected: boolean;
|
||||
readonly isHighlighted: boolean;
|
||||
readonly prevHighlighted: Previous<boolean>;
|
||||
mounted: boolean;
|
||||
constructor(opts: SelectItemStateOpts, root: SelectRoot);
|
||||
handleSelect(): void;
|
||||
snippetProps: {
|
||||
selected: boolean;
|
||||
highlighted: boolean;
|
||||
};
|
||||
onpointerdown(e: BitsPointerEvent): void;
|
||||
/**
|
||||
* Using `pointerup` instead of `click` allows power users to pointerdown
|
||||
* the trigger, then release pointerup on an item to select it vs having to do
|
||||
* multiple clicks.
|
||||
*/
|
||||
onpointerup(e: BitsPointerEvent): void;
|
||||
onpointermove(e: BitsPointerEvent): void;
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly role: "option";
|
||||
readonly "aria-selected": "true" | undefined;
|
||||
readonly "data-value": string;
|
||||
readonly "data-disabled": "" | undefined;
|
||||
readonly "data-highlighted": "" | undefined;
|
||||
readonly "data-selected": "" | undefined;
|
||||
readonly "data-label": string;
|
||||
readonly onpointermove: (e: BitsPointerEvent) => void;
|
||||
readonly onpointerdown: (e: BitsPointerEvent) => void;
|
||||
readonly onpointerup: (e: BitsPointerEvent) => void;
|
||||
};
|
||||
}
|
||||
interface SelectGroupStateOpts extends WithRefOpts {
|
||||
}
|
||||
export declare class SelectGroupState {
|
||||
static create(opts: SelectGroupStateOpts): SelectGroupState;
|
||||
readonly opts: SelectGroupStateOpts;
|
||||
readonly root: SelectBaseRootState;
|
||||
labelNode: HTMLElement | null;
|
||||
readonly attachment: RefAttachment;
|
||||
constructor(opts: SelectGroupStateOpts, root: SelectBaseRootState);
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly role: "group";
|
||||
readonly "aria-labelledby": string | undefined;
|
||||
};
|
||||
}
|
||||
interface SelectGroupHeadingStateOpts extends WithRefOpts {
|
||||
}
|
||||
export declare class SelectGroupHeadingState {
|
||||
static create(opts: SelectGroupHeadingStateOpts): SelectGroupHeadingState;
|
||||
readonly opts: SelectGroupHeadingStateOpts;
|
||||
readonly group: SelectGroupState;
|
||||
readonly attachment: RefAttachment;
|
||||
constructor(opts: SelectGroupHeadingStateOpts, group: SelectGroupState);
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
};
|
||||
}
|
||||
interface SelectHiddenInputStateOpts extends ReadableBoxedValues<{
|
||||
value: string | undefined;
|
||||
}> {
|
||||
}
|
||||
export declare class SelectHiddenInputState {
|
||||
static create(opts: SelectHiddenInputStateOpts): SelectHiddenInputState;
|
||||
readonly opts: SelectHiddenInputStateOpts;
|
||||
readonly root: SelectBaseRootState;
|
||||
readonly shouldRender: boolean;
|
||||
constructor(opts: SelectHiddenInputStateOpts, root: SelectBaseRootState);
|
||||
onfocus(e: BitsFocusEvent): void;
|
||||
readonly props: {
|
||||
readonly disabled: true | undefined;
|
||||
readonly required: true | undefined;
|
||||
readonly name: string;
|
||||
readonly value: string | undefined;
|
||||
readonly onfocus: (e: BitsFocusEvent) => void;
|
||||
};
|
||||
}
|
||||
interface SelectViewportStateOpts extends WithRefOpts {
|
||||
}
|
||||
export declare class SelectViewportState {
|
||||
static create(opts: SelectViewportStateOpts): SelectViewportState;
|
||||
readonly opts: SelectViewportStateOpts;
|
||||
readonly content: SelectContentState;
|
||||
readonly root: SelectBaseRootState;
|
||||
readonly attachment: RefAttachment;
|
||||
prevScrollTop: number;
|
||||
constructor(opts: SelectViewportStateOpts, content: SelectContentState);
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly role: "presentation";
|
||||
readonly style: {
|
||||
readonly position: "relative";
|
||||
readonly flex: 1;
|
||||
readonly overflow: "auto";
|
||||
};
|
||||
};
|
||||
}
|
||||
interface SelectScrollButtonImplStateOpts extends WithRefOpts, ReadableBoxedValues<{
|
||||
delay: (tick: number) => number;
|
||||
}> {
|
||||
}
|
||||
export declare class SelectScrollButtonImplState {
|
||||
readonly opts: SelectScrollButtonImplStateOpts;
|
||||
readonly content: SelectContentState;
|
||||
readonly root: SelectBaseRootState;
|
||||
readonly attachment: RefAttachment;
|
||||
autoScrollTimer: number | null;
|
||||
userScrollTimer: number;
|
||||
isUserScrolling: boolean;
|
||||
onAutoScroll: () => void;
|
||||
mounted: boolean;
|
||||
constructor(opts: SelectScrollButtonImplStateOpts, content: SelectContentState);
|
||||
handleUserScroll(): void;
|
||||
clearAutoScrollInterval(): void;
|
||||
onpointerdown(_: BitsPointerEvent): void;
|
||||
onpointermove(e: BitsPointerEvent): void;
|
||||
onpointerleave(_: BitsPointerEvent): void;
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly "aria-hidden": "true" | undefined;
|
||||
readonly style: {
|
||||
readonly flexShrink: 0;
|
||||
};
|
||||
readonly onpointerdown: (_: BitsPointerEvent) => void;
|
||||
readonly onpointermove: (e: BitsPointerEvent) => void;
|
||||
readonly onpointerleave: (_: BitsPointerEvent) => void;
|
||||
};
|
||||
}
|
||||
export declare class SelectScrollDownButtonState {
|
||||
static create(opts: SelectScrollButtonImplStateOpts): SelectScrollDownButtonState;
|
||||
readonly scrollButtonState: SelectScrollButtonImplState;
|
||||
readonly content: SelectContentState;
|
||||
readonly root: SelectBaseRootState;
|
||||
canScrollDown: boolean;
|
||||
scrollIntoViewTimer: ReturnType<typeof globalThis.setTimeout> | null;
|
||||
constructor(scrollButtonState: SelectScrollButtonImplState);
|
||||
/**
|
||||
* @param manual - if true, it means the function was invoked manually outside of an event
|
||||
* listener, so we don't call `handleUserScroll` to prevent the auto scroll from kicking in.
|
||||
*/
|
||||
handleScroll: (manual?: boolean) => void;
|
||||
handleAutoScroll: () => void;
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly "aria-hidden": "true" | undefined;
|
||||
readonly style: {
|
||||
readonly flexShrink: 0;
|
||||
};
|
||||
readonly onpointerdown: (_: BitsPointerEvent) => void;
|
||||
readonly onpointermove: (e: BitsPointerEvent) => void;
|
||||
readonly onpointerleave: (_: BitsPointerEvent) => void;
|
||||
};
|
||||
}
|
||||
export declare class SelectScrollUpButtonState {
|
||||
static create(opts: SelectScrollButtonImplStateOpts): SelectScrollUpButtonState;
|
||||
readonly scrollButtonState: SelectScrollButtonImplState;
|
||||
readonly content: SelectContentState;
|
||||
readonly root: SelectBaseRootState;
|
||||
canScrollUp: boolean;
|
||||
constructor(scrollButtonState: SelectScrollButtonImplState);
|
||||
/**
|
||||
* @param manual - if true, it means the function was invoked manually outside of an event
|
||||
* listener, so we don't call `handleUserScroll` to prevent the auto scroll from kicking in.
|
||||
*/
|
||||
handleScroll: (manual?: boolean) => void;
|
||||
handleAutoScroll: () => void;
|
||||
readonly props: {
|
||||
readonly id: string;
|
||||
readonly "aria-hidden": "true" | undefined;
|
||||
readonly style: {
|
||||
readonly flexShrink: 0;
|
||||
};
|
||||
readonly onpointerdown: (_: BitsPointerEvent) => void;
|
||||
readonly onpointermove: (e: BitsPointerEvent) => void;
|
||||
readonly onpointerleave: (_: BitsPointerEvent) => void;
|
||||
};
|
||||
}
|
||||
export {};
|
||||
Reference in New Issue
Block a user