@spark-ui/components
Version:
Spark (Leboncoin design system) components.
286 lines (265 loc) • 9.57 kB
text/typescript
import * as react_jsx_runtime from 'react/jsx-runtime';
import { Dispatch, SetStateAction, RefObject, PropsWithChildren, ComponentPropsWithoutRef, Ref, ComponentProps, ReactNode, HTMLAttributes, ReactElement } from 'react';
import { UseComboboxReturnValue, UseMultipleSelectionReturnValue } from 'downshift';
import { IconButton } from '../icon-button/index.mjs';
import { Popover as Popover$1 } from '../popover/index.mjs';
import '../button/index.mjs';
import 'class-variance-authority/types';
import 'class-variance-authority';
import 'radix-ui';
interface ComboboxItem {
disabled: boolean;
value: string;
text: string;
}
type ItemsMap = Map<string, ComboboxItem>;
type DownshiftState = UseComboboxReturnValue<ComboboxItem> & UseMultipleSelectionReturnValue<ComboboxItem>;
interface ComboboxContextState extends DownshiftState {
itemsMap: ItemsMap;
filteredItemsMap: ItemsMap;
highlightedItem: ComboboxItem | undefined;
hasPopover: boolean;
multiple: boolean;
disabled: boolean;
readOnly: boolean;
wrap?: boolean;
state?: 'error' | 'alert' | 'success';
lastInteractionType: 'mouse' | 'keyboard';
setHasPopover: Dispatch<SetStateAction<boolean>>;
setLastInteractionType: (type: 'mouse' | 'keyboard') => void;
setOnInputValueChange: Dispatch<SetStateAction<((v: string) => void) | null>>;
innerInputRef: RefObject<HTMLInputElement | null>;
triggerAreaRef: RefObject<HTMLDivElement | null>;
isLoading?: boolean;
isTyping?: boolean;
setIsTyping: Dispatch<SetStateAction<boolean>>;
}
type ComboboxContextCommonProps = PropsWithChildren<{
/**
* The controlled open state of the select. Must be used in conjunction with `onOpenChange`.
*/
open?: boolean;
/**
* Event handler called when the open state of the select changes.
*/
onOpenChange?: (isOpen: boolean) => void;
/**
* The open state of the select when it is initially rendered. Use when you do not need to control its open state.
*/
defaultOpen?: boolean;
/**
* Use `state` prop to assign a specific state to the combobox, choosing from: `error`, `alert` and `success`. By doing so, the outline styles will be updated.
*/
state?: 'error' | 'alert' | 'success';
/**
* When true, prevents the user from interacting with the combobox.
*/
disabled?: boolean;
/**
* Sets the combobox as interactive or not.
*/
readOnly?: boolean;
/**
* When true, the items will be filtered depending on the value of the input (not case-sensitive).
*/
filtering?: 'none' | 'auto' | 'strict';
/**
* By default, the combobox will clear or restore the input value to the selected item value on blur.
*/
allowCustomValue?: boolean;
/**
* In multiple selection, many selected items might be displayed. Be default, the combobox trigger will expand vertically to display them all.
* If you wish to keep every item on a single line, disabled this property.
*/
wrap?: boolean;
/**
* Display a spinner to indicate to the user that the combobox is loading results for .
*/
isLoading?: boolean;
}>;
interface ComboboxPropsSingle {
/**
* Prop 'multiple' indicating whether multiple values are allowed.
*/
multiple?: false;
/**
* The value of the select when initially rendered. Use when you do not need to control the state of the select.
*/
defaultValue?: string;
/**
* The controlled value of the select. Should be used in conjunction with `onValueChange`.
*/
value?: string | null;
/**
* Event handler called when the value changes.
*/
onValueChange?: (value: string) => void;
}
interface ComboboxPropsMultiple {
/**
* Prop 'multiple' indicating whether multiple values are allowed.
*/
multiple: true;
/**
* The value of the select when initially rendered. Use when you do not need to control the state of the select.
*/
defaultValue?: string[];
/**
* The controlled value of the select. Should be used in conjunction with `onValueChange`.
*/
value?: string[];
/**
* Event handler called when the value changes.
*/
onValueChange?: (value: string[]) => void;
}
type ComboboxContextProps = ComboboxContextCommonProps & (ComboboxPropsSingle | ComboboxPropsMultiple);
declare const ComboboxProvider: ({ children, state: stateProp, allowCustomValue, filtering, disabled: disabledProp, multiple, readOnly: readOnlyProp, wrap, value: controlledValue, defaultValue, onValueChange, open: controlledOpen, defaultOpen, onOpenChange, isLoading, }: ComboboxContextProps) => react_jsx_runtime.JSX.Element;
declare const useComboboxContext: () => ComboboxContextState;
type ComboboxProps = ComboboxContextProps;
declare const Combobox$1: {
({ children, ...props }: ComboboxProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface ClearButtonProps extends ComponentPropsWithoutRef<'button'> {
'aria-label': string;
ref?: Ref<HTMLButtonElement>;
}
declare const ClearButton: {
({ className, tabIndex, onClick, ref, ...others }: ClearButtonProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface DisclosureProps extends Omit<ComponentProps<typeof IconButton>, 'aria-label'> {
className?: string;
closedLabel: string;
openedLabel: string;
ref?: Ref<HTMLButtonElement>;
}
declare const Disclosure: {
({ className, closedLabel, openedLabel, intent, design, size, ref: forwardedRef, ...props }: DisclosureProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface EmptyProps {
className?: string;
children: ReactNode;
ref?: Ref<HTMLDivElement>;
}
declare const Empty: {
({ className, children, ref: forwardedRef }: EmptyProps): react_jsx_runtime.JSX.Element | null;
displayName: string;
};
interface GroupProps {
children: ReactNode;
className?: string;
ref?: Ref<HTMLDivElement>;
}
declare const Group: {
({ children, ref: forwardedRef, ...props }: GroupProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
type InputPrimitiveProps = ComponentPropsWithoutRef<'input'>;
interface InputProps extends Omit<InputPrimitiveProps, 'value' | 'placeholder'> {
className?: string;
placeholder?: string;
value?: string;
defaultValue?: string;
onValueChange?: (value: string) => void;
ref?: Ref<HTMLInputElement>;
}
declare const Input: {
({ "aria-label": ariaLabel, className, placeholder, value, defaultValue, onValueChange, ref: forwardedRef, ...props }: InputProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface ItemProps extends HTMLAttributes<HTMLLIElement> {
disabled?: boolean;
value: string;
children: ReactNode;
className?: string;
ref?: Ref<HTMLLIElement>;
}
declare const Item: {
({ children, ref: forwardedRef, ...props }: ItemProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface ItemIndicatorProps {
children?: ReactNode;
className?: string;
label?: string;
ref?: Ref<HTMLSpanElement>;
}
declare const ItemIndicator: {
({ className, children, label, ref: forwardedRef, }: ItemIndicatorProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface ItemsProps extends ComponentPropsWithoutRef<'ul'> {
children: ReactNode;
className?: string;
ref?: Ref<HTMLUListElement>;
}
declare const Items: {
({ children, className, ref: forwardedRef, ...props }: ItemsProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface ItemTextProps {
children: string;
className?: string;
ref?: Ref<HTMLSpanElement>;
}
declare const ItemText: {
({ children, className, ref: forwardedRef }: ItemTextProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface LabelProps {
children: string;
className?: string;
ref?: Ref<HTMLDivElement>;
}
declare const Label: {
({ children, className, ref: forwardedRef }: LabelProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
declare const LeadingIcon: {
({ children }: {
children: ReactElement;
}): react_jsx_runtime.JSX.Element;
displayName: string;
};
interface PopoverProps extends ComponentProps<typeof Popover$1.Content> {
ref?: Ref<HTMLDivElement>;
}
declare const Popover: {
({ children, matchTriggerWidth, sideOffset, className, ref: forwardedRef, ...props }: PopoverProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
declare const Portal: typeof Popover$1.Portal;
declare const SelectedItems: {
(): react_jsx_runtime.JSX.Element | null;
displayName: string;
};
interface TriggerProps {
className?: string;
children: ReactNode;
ref?: Ref<HTMLDivElement>;
}
declare const Trigger: {
({ className, children, ref: forwardedRef }: TriggerProps): react_jsx_runtime.JSX.Element;
displayName: string;
};
declare const Combobox: typeof Combobox$1 & {
Group: typeof Group;
Item: typeof Item;
Items: typeof Items;
ItemText: typeof ItemText;
ItemIndicator: typeof ItemIndicator;
Label: typeof Label;
Popover: typeof Popover;
Trigger: typeof Trigger;
LeadingIcon: typeof LeadingIcon;
Empty: typeof Empty;
Input: typeof Input;
Disclosure: typeof Disclosure;
SelectedItems: typeof SelectedItems;
ClearButton: typeof ClearButton;
Portal: typeof Portal;
};
export { Combobox, ComboboxProvider, useComboboxContext };