vueless
Version:
Vue Styleless UI Component Library, powered by Tailwind CSS.
101 lines (85 loc) • 1.69 kB
text/typescript
import defaultConfig from "./config.ts";
import type { ComponentConfig, UnknownObject } from "../types.ts";
export type Config = typeof defaultConfig;
export type OnClickOption = (option: Omit<Option, "onClick">) => void;
export interface BaseOption {
isSubGroup?: boolean;
groupLabel?: string;
level?: number;
isHidden?: boolean;
onClick?: OnClickOption;
}
export interface Option extends BaseOption {
[key: string]: string | number | boolean | UnknownObject | Option[] | OnClickOption | undefined;
}
export interface Props {
/**
* Selected item.
*/
modelValue?: string | number | UnknownObject;
/**
* List options.
*/
options?: Option[];
/**
* Label key in the item object of options.
*/
labelKey?: string;
/**
* Value key in the item object of options.
*/
valueKey?: string;
/**
* Show add option button.
*/
addOption?: boolean;
/**
* List size.
*/
size?: "sm" | "md" | "lg";
/**
* Option highlight color.
*/
color?:
| "grayscale"
| "red"
| "orange"
| "amber"
| "yellow"
| "lime"
| "green"
| "emerald"
| "teal"
| "cyan"
| "sky"
| "blue"
| "indigo"
| "violet"
| "purple"
| "fuchsia"
| "pink"
| "rose"
| "gray"
| "white"
| "brand";
/**
* Number of options to show without a scroll.
*/
visibleOptions?: undefined | number;
/**
* Disable the list.
*/
disabled?: boolean;
/**
* Unique element id.
*/
id?: string;
/**
* Component config object.
*/
config?: ComponentConfig<Config>;
/**
* Data-test attribute for automated testing.
*/
dataTest?: string | null;
}