UNPKG

@gits-id/dropdown

Version:

GITS Dropdown Component

165 lines (164 loc) 5.23 kB
import { defineComponent as f, computed as p, resolveComponent as w, useAttrs as g, openBlock as o, createBlock as a, unref as n, withCtx as l, createElementBlock as h, resolveDynamicComponent as C, mergeProps as c, renderSlot as d, normalizeClass as i, createTextVNode as v, toDisplayString as y, createElementVNode as k, createVNode as r, Transition as B, Fragment as I, renderList as D, normalizeProps as S, guardReactiveProps as P } from "vue"; import { MenuItem as $, Menu as T, MenuButton as x, MenuItems as V } from "@headlessui/vue"; import M, { Icon as b } from "@gits-id/icon"; const N = { key: 0, class: "dropdown-divider" }, L = /* @__PURE__ */ f({ __name: "DropdownItem", props: { text: null, to: null, href: null, icon: null, iconSize: { default: "sm" }, iconClass: { default: "" }, newTab: { type: Boolean }, divider: { type: Boolean }, nuxt: { type: Boolean } }, setup(e) { const t = e, u = p(() => t.nuxt ? w("NuxtLink") : t.href ? "a" : t.to ? w("RouterLink") : "button"), s = p(() => ({ to: t.to ?? void 0, href: t.href ?? void 0, target: t.href && t.newTab ? "_blank" : void 0, rel: t.href && t.newTab ? "noopener" : void 0, ...g() })); return (m, E) => (o(), a(n($), null, { default: l(({ active: z }) => [ e.divider ? (o(), h("div", N)) : (o(), a(C(n(u)), c({ key: 1, class: [ "group dropdown-item", { "dropdown-item--active": z } ] }, n(s)), { default: l(() => [ d(m.$slots, "icon", {}, () => [ typeof e.icon == "string" ? (o(), a(n(M), { key: 0, name: e.icon, size: e.iconSize, class: i([e.iconClass, "dropdown-item-icon"]) }, null, 8, ["name", "size", "class"])) : (o(), a(C(e.icon), { key: 1, class: i([e.iconClass, "dropdown-item-icon"]) }, null, 8, ["class"])) ]), d(m.$slots, "default", {}, () => [ v(y(e.text), 1) ]) ]), _: 2 }, 1040, ["class"])) ]), _: 3 })); } }); const F = f({ __name: "Dropdown", props: { modelValue: { type: Boolean, default: !1 }, btnProps: { default: () => ({ variant: "secondary" }) }, label: { default: "Options" }, right: { type: Boolean, default: !1 }, items: { default: () => [] }, top: { type: Boolean, default: !1 }, topClass: { default: "bottom-10" }, bottomClass: { default: "top-6" }, panelClass: { default: "" }, buttonWrapperClass: { default: "" }, rightClass: { default: "right-0" }, leftClass: { default: "left-0" }, transition: { default: "fade-scale" }, icon: { default: "ri:arrow-down-s-line" }, iconSize: { default: "sm" }, iconClass: { default: "" }, prefixIcon: { default: "" }, prefixIconSize: { default: "sm" }, prefixIconClass: null }, setup(e) { return (t, u) => (o(), a(n(T), { as: "div", class: "dropdown" }, { default: l(() => [ k("div", { class: i(["dropdown-button-wrapper", e.buttonWrapperClass]) }, [ d(t.$slots, "activator", { btnProps: e.btnProps, label: e.label }, () => [ r(n(x), c({ as: "button", class: "dropdown-button-activator" }, e.btnProps), { default: l(() => [ r(n(b), { name: e.prefixIcon, size: e.prefixIconSize, class: i([e.prefixIconClass, "dropdown-button-icon"]), "aria-hidden": "true" }, null, 8, ["name", "size", "class"]), v(" " + y(e.label) + " ", 1), r(n(b), { name: e.icon, size: e.iconSize, class: i([e.iconClass, "dropdown-button-icon"]), "aria-hidden": "true" }, null, 8, ["name", "size", "class"]) ]), _: 1 }, 16) ]) ], 2), r(B, { name: e.transition }, { default: l(() => [ r(n(V), { class: i(["dropdown-panel", [ e.right ? e.rightClass : e.leftClass, e.top ? e.topClass : e.bottomClass, e.panelClass ]]) }, { default: l(() => [ d(t.$slots, "default", {}, () => [ (o(!0), h(I, null, D(e.items, (s) => (o(), a(L, c({ key: s.text }, s), null, 16))), 128)) ]) ]), _: 3 }, 8, ["class"]) ]), _: 3 }, 8, ["name"]) ]), _: 3 })); } }), O = /* @__PURE__ */ f({ __name: "DropdownButton", setup(e) { return (t, u) => (o(), a(n(x), null, { default: l((s) => [ d(t.$slots, "default", S(P(s))) ]), _: 3 })); } }); export { F as Dropdown, O as DropdownButton, L as DropdownItem, F as default };