Skip to content
On this page

Dropdown

Basic dropdown.

Usage

Import

ts
import { Adropdown, Adropdownbutton, Adropdownselect, Adropdowndeco, Adropdowncontrol } from "@agufaui/${framework name}";

Html

<adropdown /> or <Adropdown />
<adropdownbutton /> or <Adropdownbutton />
<adropdownselect /> or <Adropdownselect />
<adropdowndeco /> or <Adropdowndeco />
<adropdowncontrol /> or <Adropdowncontrol />

Configuration

Theme component name: adropdown
Theme component name: adropdownbutton
Theme component name: adropdownselect
Theme component name: adropdowndeco
Theme component name: adropdowncontrol

Showcase

  • component Adropdown
Click to see code
vue
<adropdown v="options" :deco="deco" :items="items"> </adropdown>
<adropdown v="options" :items="items"> </adropdown>
<adropdown v="disabled" :items="items" :disabled="true"> </adropdown>
  • component Adropdownbutton
Click to see code
vue
<adropdownbutton :items="items"> </adropdownbutton>
<adropdownbutton :items="items" :disabled="true"> </adropdownbutton>
  • component Adropdownselect
Click to see code
vue
<adropdownselect :items="items"> </adropdownselect>
<adropdownselect :items="items" :disabled="true"> </adropdownselect>
  • component Adropdowndeco
Click to see code
vue
<adropdowndeco
	panelc="right-0 z-40 w-60 flex justify-center bg-white rounded-lg shadow-lg mt-1 block py-1 px-5 overflow-hidden"
>
	<template #label>Dropdown Label</template>
	<template #default>
		<p>You can design your dropdown panel here</p>
	</template>
</adropdowndeco>
  • component Adropdowncontrol
Click to see code
vue
<adropdowncontrol>Options</adropdowncontrol>

Slot

  • component Adropdownselect

    • One default slot for button text
  • component Adropdowndeco

    • One default slot for panel content
    • One named slot label for button text
  • component Adropdowncontrol

    • One default slot for button text

AgufaUI provided Theme

CDefaultType is just string constant "default"

ts
import { CDefaultType, CUseType } from "@agufaui/config";
import type {
	IADropdownProps,
	IADropdownButtonProps,
	IADropdownSelectProps,
	IADropdownDecoProps,
	IADropdownControlProps,
} from "../../types/basic/ADropdown";

export const DADropdownDefault = {
	panelc:
		"w-28 md:w-56 animate-fade-in animate-duration-100 origin-top-right right-0 mt-2 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5",
	itemc: "px-4 py-2 text-sm text-gray-7 hover:(bg-gray-1 text-gray-9)",
};

export const DADropdown: Readonly<Record<string, Partial<IADropdownProps>>> = {
	[CDefaultType]: DADropdownDefault,
};

export const DADropdownButtonDefault = {
	vc: "text-white bg-blue-5 hover:(bg-blue-6 -translate-px shadow-md shadow-blue) active:translate-px focus:(ring-offset-none ring-none)",
	dropdownc:
		"px-1 border-l border-white text-sm font-medium rounded-r-md text-white bg-blue-5 hover:bg-blue-6 focus:ring-blue-5 disabled:(opacity-50 cursor-not-allowed)",
	panelc: "w-full divide-y divide-gray-3 shadow-lg",
	itemc: "text-white rounded-none bg-blue-5 hover:bg-blue-6 focus:ring-blue-5",
};

export const DADropdownButton: Readonly<Record<string, Partial<IADropdownButtonProps>>> = {
	[CDefaultType]: DADropdownButtonDefault,
};

export const DADropdownSelectDefault = {
	panelc: "right-0 z-40 w-40 bg-white rounded-lg shadow-lg mt-2 -mr-1 block py-1 overflow-hidden",
	itemc: "hover:bg-gray-1 px-4 py-2 space-x-3",
	keyc: "text-green-6",
	valuec: "text-gray-7 pb-1.5",
};

export const DADropdownSelect: Readonly<Record<string, Partial<IADropdownSelectProps>>> = {
	[CDefaultType]: DADropdownSelectDefault,
};

export const DADropdownDecoDefault = {};

export const DADropdownDeco: Readonly<Record<string, Partial<IADropdownDecoProps>>> = {
	[CDefaultType]: DADropdownDecoDefault,
};

export const DADropdownControlDefault = {
	c: "shadow rounded-lg inline-flex items-center bg-white justify-between space-x-1 hover:text-blue-5  focus:outline-none text-gray-5 font-semibold py-2 px-2 md:px-4",
	ic: "hidden",
};

export const DADropdownControlOutline = {
	c: "px-4 py-2 rounded-md inline-flex items-center text-sm justify-between space-x-1 font-medium select-none outline-gray-3 bg-white outline text-gray-7 hover:bg-gray-50 focus:(outline-none ring-2 ring-offset-2 ring-blue-3)",
	ic: "hidden",
};

export const DADropdownControlResponsive = {
	[CUseType]: CDefaultType,
	ic: "d@hidden md:hidden",
	labelc: "hidden md:block",
};

export const DADropdownControl: Readonly<Record<string, Partial<IADropdownControlProps>>> = {
	[CDefaultType]: DADropdownControlDefault,
	outline: DADropdownControlOutline,
	res: DADropdownControlResponsive,
};

Attributes (Properties)

Default Values

  • component Adropdown
vue
  • component Adropdownbutton
vue
i: "i-material-symbols:keyboard-arrow-down",
  • component Adropdownselect
vue
  • component Adropdowndeco
vue
  • component Adropdowncontrol
vue
i: "i-ion:funnel-outline",
arrowi: "i-material-symbols:keyboard-arrow-down",

Unique

ts
export type TDropdownItem = {
	label: string;
	href: string;
};

export interface IADropdownProps extends IProps, IPropsForm {
	v?: string; // Display label.  Not configurable
	deco?: IADropdownDecoProps; // dropdown decorator
	items: TDropdownItem[]; //options.  Not configurable
	panelc?: string; // css classes items panel 'div'
	itemc?: string; // common css classes for each item 'a'
}

export type TDropdownButtonItem = {
	icon?: string;
	display: string;
	event: string;
};

export interface IADropdownButtonProps extends IProps, IPropsIcon, IPropsForm {
	vc?: string; // css classes for display button 'button'
	dropdownc?: string; // css classes for dropdown button 'button'
	items: TDropdownButtonItem[]; //options.  Not configurable
	panelc?: string; // css classes items panel 'div'
	itemc?: string; // common css classes for each item 'a'
}

export type TDropdownSelectItem = {
	key: string;
	value: string;
};

export interface IADropdownSelectProps extends IProps, IPropsForm {
	deco?: IADropdownDecoProps; // dropdown decorator
	items: TDropdownSelectItem[]; //options.  Not configurable
	panelc?: string; // common css classes for items panel 'div'
	itemc?: string; // common css classes for each item 'a'
	keyc?: string; // common css classes for each item checkbox
	valuec?: string; // common css classes for each item display
}

export interface IADropdownDecoProps extends IProps, IPropsForm {
	control?: IADropdownControlProps; // dropdown control
	controlt?: string; // control type
	buttonc?: string; // css classes for dropdown button 'button'
	panelc?: string; // css classes items panel 'div'
}

export interface IADropdownControlProps extends IProps, IPropsIcon, IPropsForm {
	labelc?: string; // css classes for button text
	arrowi?: string; // arrow icon
	arrowc?: string; // css classes for arrow icon
}

Inherit from IProps

ts
export interface IProps {
	t?: string; // user defined or AgufaUI provided component type.  Not configurable
	c?: string; // css classes for component root html element
}

Inherit from IPropsIcon

ts
export type TLRPosition = "left" | "right";

export interface IPropsIcon {
	i?: string; // icon eg. i-eos-icons:loading
	ipos?: TLRPosition; // icon position
	ic?: string; // css classes for icon element
}

Inherit from IPropsForm

ts
export interface IPropsForm {
	disabled?: boolean; // disabled
}

Events

  • component Adropdownbutton and Adropdownselect and Adropdowncontrol
ts
export interface IADropdownButtonEmits {
	(e: "click", event: string): void; // dropdown event
}

export interface IADropdownSelectEmits {
	(e: "toggle", key: string): void; // dropdown event
}

export interface IADropdownControlEmits {
	(e: "click", value: MouseEvent): void; // dropdown event
}

Released under the MIT License.