@vue-interface/btn-dropdown 4.0.5 → 4.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { DropdownMenu as N } from "@vue-interface/dropdown-menu";
3
3
  import { offset as K, flip as Q } from "@floating-ui/dom";
4
4
  import { useFloating as U } from "@floating-ui/vue";
5
5
  function V(t, m) {
6
- const g = z(), s = z(), r = z(!1), i = T(() => t.align ?? "start"), o = T(() => t.dropup ? "top" : t.dropleft ? "left" : t.dropright ? "right" : "bottom"), C = T(() => `${o.value}-${i.value}`), f = T(() => ({
6
+ const g = z(), s = z(), r = z(!1), i = T(() => t.align ?? "start"), l = T(() => t.dropup ? "top" : t.dropleft ? "left" : t.dropright ? "right" : "bottom"), C = T(() => `${l.value}-${i.value}`), f = T(() => ({
7
7
  dropdown: t.dropup && t.dropright && t.dropleft,
8
8
  dropup: t.dropup,
9
9
  dropright: t.dropright,
@@ -11,19 +11,19 @@ function V(t, m) {
11
11
  expanded: r.value,
12
12
  [t.size ?? ""]: !!t.size
13
13
  })), w = T(() => {
14
- const l = {
14
+ const n = {
15
15
  btn: !0,
16
16
  [t.variant ?? ""]: !!t.variant,
17
17
  "btn-block": !!t.block,
18
18
  "no-caret": !t.caret
19
19
  };
20
20
  if (typeof t.buttonClass == "string")
21
- l[t.buttonClass] = !0;
21
+ n[t.buttonClass] = !0;
22
22
  else if (Array.isArray(t.buttonClass))
23
23
  for (const h of t.buttonClass)
24
- l[h] = !0;
25
- else t.buttonClass && Object.assign(l, t.buttonClass);
26
- return l;
24
+ n[h] = !0;
25
+ else t.buttonClass && Object.assign(n, t.buttonClass);
26
+ return n;
27
27
  }), { floatingStyles: a, update: p } = U(g, s, {
28
28
  placement: C,
29
29
  middleware: t.middleware ?? [
@@ -40,32 +40,32 @@ function V(t, m) {
40
40
  function d() {
41
41
  r.value ? c() : b();
42
42
  }
43
- function n(l) {
43
+ function o(n) {
44
44
  const h = Array.from(s.value?.$el.querySelectorAll("label, input, select, textarea") ?? []);
45
45
  for (const O in h)
46
- if (l === h[O])
46
+ if (n === h[O])
47
47
  return !0;
48
48
  return !1;
49
49
  }
50
- function u(l) {
51
- if (!(l.relatedTarget instanceof HTMLElement)) {
50
+ function u(n) {
51
+ if (!(n.relatedTarget instanceof HTMLElement)) {
52
52
  c();
53
53
  return;
54
54
  }
55
- (s.value && !s.value?.$el.contains(l.relatedTarget) || !g.value?.contains(l.relatedTarget)) && c();
55
+ (s.value && !s.value?.$el.contains(n.relatedTarget) || !g.value?.contains(n.relatedTarget)) && c();
56
56
  }
57
- function F(l) {
58
- m("click", l);
57
+ function F(n) {
58
+ m("click", n);
59
59
  }
60
- function j(l) {
61
- l.target?.dispatchEvent(new Event("focus", l)), m("clickToggle", l), l.defaultPrevented || d();
60
+ function j(n) {
61
+ n.target?.dispatchEvent(new Event("focus", n)), m("clickToggle", n), n.defaultPrevented || d();
62
62
  }
63
- function q(l) {
64
- if (!(l.target instanceof HTMLElement)) {
63
+ function q(n) {
64
+ if (!(n.target instanceof HTMLElement)) {
65
65
  c();
66
66
  return;
67
67
  }
68
- !n(l.target) && !l.defaultPrevented && c();
68
+ !o(n.target) && !n.defaultPrevented && c();
69
69
  }
70
70
  return R(() => {
71
71
  r.value ? window.addEventListener("resize", p) : window.removeEventListener("resize", p);
@@ -76,7 +76,7 @@ function V(t, m) {
76
76
  expanded: r,
77
77
  floatingStyles: a,
78
78
  placement: C,
79
- side: o,
79
+ side: l,
80
80
  classes: f,
81
81
  buttonClasses: w,
82
82
  show: b,
@@ -111,7 +111,7 @@ const W = ["aria-expanded"], X = /* @__PURE__ */ D({
111
111
  const g = t, s = m, {
112
112
  target: r,
113
113
  menu: i,
114
- buttonClasses: o,
114
+ buttonClasses: l,
115
115
  classes: C,
116
116
  expanded: f,
117
117
  floatingStyles: w,
@@ -122,18 +122,18 @@ const W = ["aria-expanded"], X = /* @__PURE__ */ D({
122
122
  return (c, d) => (M(), A("div", {
123
123
  class: y(["btn-group", e(C)])
124
124
  }, [
125
- k(c.$slots, "button", B(x({ target: (n) => r.value = n, expanded: e(f), onBlur: e(a), onClickToggle: e(p) })), () => [
125
+ k(c.$slots, "button", B(x({ target: (o) => r.value = o, expanded: e(f), onBlur: e(a), onClickToggle: e(p) })), () => [
126
126
  $("button", {
127
127
  ref_key: "target",
128
128
  ref: r,
129
129
  type: "button",
130
- class: y({ ...e(o), "dropdown-toggle": !0 }),
130
+ class: y({ ...e(l), "dropdown-toggle": !0 }),
131
131
  "aria-haspopup": "true",
132
132
  "aria-expanded": e(f),
133
133
  onBlur: d[0] || (d[0] = //@ts-ignore
134
- (...n) => e(a) && e(a)(...n)),
134
+ (...o) => e(a) && e(a)(...o)),
135
135
  onClick: d[1] || (d[1] = //@ts-ignore
136
- (...n) => e(p) && e(p)(...n))
136
+ (...o) => e(p) && e(p)(...o))
137
137
  }, S(t.label), 43, W)
138
138
  ]),
139
139
  H(e(N), {
@@ -178,7 +178,7 @@ const W = ["aria-expanded"], X = /* @__PURE__ */ D({
178
178
  const g = t, s = m, {
179
179
  target: r,
180
180
  menu: i,
181
- buttonClasses: o,
181
+ buttonClasses: l,
182
182
  classes: C,
183
183
  expanded: f,
184
184
  floatingStyles: w,
@@ -187,18 +187,18 @@ const W = ["aria-expanded"], X = /* @__PURE__ */ D({
187
187
  onClickToggle: b,
188
188
  onClickItem: c
189
189
  } = V(g, s);
190
- return (d, n) => (M(), A("div", {
190
+ return (d, o) => (M(), A("div", {
191
191
  class: y(["btn-group btn-dropdown-split", e(C)])
192
192
  }, [
193
193
  t.dropleft ? P("", !0) : k(d.$slots, "button", B(E({ key: 0 }, { expanded: e(f), onBlur: e(a), onClickToggle: e(b) })), () => [
194
194
  $("button", {
195
195
  type: "button",
196
- class: y(e(o)),
196
+ class: y(e(l)),
197
197
  "aria-haspopup": "true",
198
198
  "aria-expanded": e(f),
199
- onBlur: n[0] || (n[0] = //@ts-ignore
199
+ onBlur: o[0] || (o[0] = //@ts-ignore
200
200
  (...u) => e(a) && e(a)(...u)),
201
- onClick: n[1] || (n[1] = //@ts-ignore
201
+ onClick: o[1] || (o[1] = //@ts-ignore
202
202
  (...u) => e(p) && e(p)(...u))
203
203
  }, S(t.label), 43, Y)
204
204
  ]),
@@ -210,10 +210,10 @@ const W = ["aria-expanded"], X = /* @__PURE__ */ D({
210
210
  type: "button",
211
211
  "aria-haspopup": "true",
212
212
  "aria-expanded": e(f),
213
- class: y({ ...e(o), "dropdown-toggle": !0, "dropdown-toggle-split": t.split }),
214
- onBlur: n[2] || (n[2] = //@ts-ignore
213
+ class: y({ ...e(l), "dropdown-toggle": !0, "dropdown-toggle-split": t.split }),
214
+ onBlur: o[2] || (o[2] = //@ts-ignore
215
215
  (...u) => e(a) && e(a)(...u)),
216
- onClick: n[3] || (n[3] = //@ts-ignore
216
+ onClick: o[3] || (o[3] = //@ts-ignore
217
217
  (...u) => e(b) && e(b)(...u))
218
218
  }, null, 42, _)
219
219
  ]),
@@ -226,7 +226,7 @@ const W = ["aria-expanded"], X = /* @__PURE__ */ D({
226
226
  style: I(e(w)),
227
227
  onBlur: e(a),
228
228
  onClick: e(c),
229
- onMousedown: n[4] || (n[4] = L(() => {
229
+ onMousedown: o[4] || (o[4] = L(() => {
230
230
  }, ["prevent"]))
231
231
  }, {
232
232
  default: v(() => [
@@ -238,12 +238,12 @@ const W = ["aria-expanded"], X = /* @__PURE__ */ D({
238
238
  t.dropleft ? k(d.$slots, "button", B(E({ key: 1 }, { expanded: e(f), onBlur: e(a), onClickToggle: e(b) })), () => [
239
239
  $("button", {
240
240
  type: "button",
241
- class: y(e(o)),
241
+ class: y(e(l)),
242
242
  "aria-haspopup": "true",
243
243
  "aria-expanded": e(f),
244
- onBlur: n[5] || (n[5] = //@ts-ignore
244
+ onBlur: o[5] || (o[5] = //@ts-ignore
245
245
  (...u) => e(a) && e(a)(...u)),
246
- onClick: n[6] || (n[6] = //@ts-ignore
246
+ onClick: o[6] || (o[6] = //@ts-ignore
247
247
  (...u) => e(p) && e(p)(...u))
248
248
  }, S(t.label), 43, ee)
249
249
  ]) : P("", !0)
@@ -271,19 +271,19 @@ const W = ["aria-expanded"], X = /* @__PURE__ */ D({
271
271
  setup(t, { emit: m }) {
272
272
  const g = t, s = m;
273
273
  return (r, i) => (M(), G(J(t.split ? te : X), E(g, {
274
- onClick: i[0] || (i[0] = (...o) => s("click", ...o)),
275
- onClickToggle: i[1] || (i[1] = (...o) => s("clickToggle", ...o)),
276
- onShow: i[2] || (i[2] = (...o) => s("show", ...o)),
277
- onHide: i[3] || (i[3] = (...o) => s("hide", ...o))
274
+ onClick: i[0] || (i[0] = (l) => s("click", l)),
275
+ onClickToggle: i[1] || (i[1] = (l) => s("clickToggle", l)),
276
+ onShow: i[2] || (i[2] = () => s("show")),
277
+ onHide: i[3] || (i[3] = () => s("hide"))
278
278
  }), {
279
- button: v((o) => [
280
- k(r.$slots, "button", B(x(o)))
279
+ button: v((l) => [
280
+ k(r.$slots, "button", B(x(l)))
281
281
  ]),
282
- toggle: v((o) => [
283
- k(r.$slots, "toggle", B(x(o)))
282
+ toggle: v((l) => [
283
+ k(r.$slots, "toggle", B(x(l)))
284
284
  ]),
285
- split: v((o) => [
286
- k(r.$slots, "split", B(x(o)))
285
+ split: v((l) => [
286
+ k(r.$slots, "split", B(x(l)))
287
287
  ]),
288
288
  default: v(() => [
289
289
  k(r.$slots, "default")
@@ -1 +1 @@
1
- {"version":3,"file":"btn-dropdown.js","sources":["../src/useDropdownHandler.ts","../src/BtnDropdownSingle.vue","../src/BtnDropdownSplit.vue","../src/BtnDropdown.vue"],"sourcesContent":["import { flip, offset, Placement, type Alignment, type Middleware, type OffsetOptions, type Side } from '@floating-ui/dom';\nimport { useFloating } from '@floating-ui/vue';\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { computed, ref, watchEffect, type EmitFn, type HTMLAttributes } from 'vue';\n\ntype LiteralUnion<T extends U, U = string> = T | (U & Record<never, never>);\n\nexport type BtnGroupSizes = 'btn-group-xs'\n | 'btn-group-sm' \n | 'btn-group-md'\n | 'btn-group-lg'\n | 'btn-group-xl'\n | 'btn-group-2xl'\n | 'btn-group-3xl'\n | 'btn-group-4xl';\n\nexport type BtnDropdownProps = {\n align?: Alignment;\n block?: boolean;\n buttonClass?: HTMLAttributes['class'],\n caret?: boolean;\n dropup?: boolean;\n dropright?: boolean;\n dropleft?: boolean;\n label?: string;\n offset?: OffsetOptions,\n middleware?: Middleware[],\n side?: Side;\n size?: LiteralUnion<BtnGroupSizes>;\n split?: boolean;\n variant?: string;\n}\n\nexport type BtnDropdownEvents = {\n click: [event: MouseEvent];\n clickToggle: [event: MouseEvent];\n show: [],\n hide: []\n}\n\nexport function useDropdownHandler(props: BtnDropdownProps, emit: EmitFn<BtnDropdownEvents>) {\n const target = ref<HTMLElement>();\n const menu = ref<InstanceType<typeof DropdownMenu>>();\n const expanded = ref(false);\n\n\n const alignment = computed<Alignment>(() => props.align ?? 'start');\n\n const side = computed<Side>(() => {\n if(props.dropup) {\n return 'top';\n }\n\n if(props.dropleft) {\n return 'left';\n }\n\n if(props.dropright) {\n return 'right';\n }\n\n return 'bottom';\n });\n\n const placement = computed<Placement>(() => `${side.value}-${alignment.value}`);\n\n const classes = computed(() => ({\n 'dropdown': props.dropup && props.dropright && props.dropleft,\n 'dropup': props.dropup,\n 'dropright': props.dropright,\n 'dropleft': props.dropleft,\n 'expanded': expanded.value,\n [props.size ?? '']: !!props.size,\n }));\n \n const buttonClasses = computed(() => {\n const classes = {\n btn: true,\n [props.variant ?? '']: !!props.variant,\n 'btn-block': !!props.block,\n 'no-caret': !props.caret\n };\n \n if(typeof props.buttonClass === 'string') {\n classes[props.buttonClass] = true;\n }\n else if(Array.isArray(props.buttonClass)) {\n for(const value of props.buttonClass) {\n classes[value] = true;\n }\n }\n else if(props.buttonClass) {\n Object.assign(classes, props.buttonClass);\n }\n\n return classes;\n });\n\n const { floatingStyles, update } = useFloating(target, menu, {\n placement: placement,\n middleware: props.middleware ?? [\n offset(props.offset ?? 5),\n flip()\n ]\n });\n\n function show() {\n expanded.value = true;\n\n if(!target.value || !menu.value) {\n return;\n }\n\n update();\n\n emit('show');\n }\n\n function hide() {\n expanded.value = false;\n\n target.value?.blur();\n\n emit('hide');\n }\n\n function toggle() {\n if(!expanded.value) {\n show();\n }\n else {\n hide();\n }\n }\n\n function isFocusable(element: HTMLElement) {\n const nodes = Array.from(menu.value?.$el.querySelectorAll('label, input, select, textarea') ?? []);\n\n for(const i in nodes) {\n if(element === nodes[i]) {\n return true;\n }\n }\n\n return false;\n }\n \n function onBlur(e: FocusEvent) {\n if(!(e.relatedTarget instanceof HTMLElement)) {\n hide();\n \n return;\n }\n \n if(menu.value && !menu.value?.$el.contains(e.relatedTarget) || !target.value?.contains(e.relatedTarget)) {\n hide();\n }\n }\n\n function onClick(e: MouseEvent) {\n emit('click', e);\n }\n\n function onClickToggle(e: MouseEvent) {\n e.target?.dispatchEvent(new Event('focus', e));\n \n emit('clickToggle', e);\n\n if(!e.defaultPrevented) {\n toggle();\n }\n }\n\n function onClickItem(e: PointerEvent) {\n if(!(e.target instanceof HTMLElement)) {\n hide();\n\n return;\n }\n\n if(!isFocusable(e.target) && !e.defaultPrevented) {\n hide();\n }\n }\n\n watchEffect(() => {\n if(expanded.value) {\n window.addEventListener('resize', update);\n }\n else {\n window.removeEventListener('resize', update);\n }\n });\n\n return {\n target,\n menu,\n alignment,\n expanded,\n floatingStyles,\n placement,\n side,\n classes,\n buttonClasses,\n show,\n hide,\n toggle,\n onBlur,\n onClick,\n onClickToggle,\n onClickItem\n };\n}","<script setup lang=\"ts\">\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { BtnDropdownEvents, BtnDropdownProps, useDropdownHandler } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<BtnDropdownProps>(), {\n caret: true,\n variant: 'btn-primary'\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n\nconst {\n target,\n menu,\n buttonClasses,\n classes,\n expanded,\n floatingStyles,\n onBlur,\n onClickToggle,\n onClickItem\n} = useDropdownHandler(props, emit);\n</script>\n\n<template>\n <div\n class=\"btn-group\"\n :class=\"classes\">\n <slot\n name=\"button\"\n v-bind=\"{ target: (el: HTMLElement) => target = el, expanded, onBlur, onClickToggle }\">\n <button\n ref=\"target\"\n type=\"button\"\n :class=\"{...buttonClasses, ['dropdown-toggle']: true}\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClickToggle\">\n {{ label }}\n </button>\n </slot>\n <DropdownMenu\n ref=\"menu\"\n :class=\"{\n 'show': expanded\n }\"\n :style=\"floatingStyles\"\n @blur=\"onBlur\"\n @click=\"onClickItem\"\n @mousedown.prevent>\n <slot />\n </DropdownMenu>\n </div>\n</template>","<script setup lang=\"ts\">\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { BtnDropdownEvents, BtnDropdownProps, useDropdownHandler } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<BtnDropdownProps>(), {\n caret: true,\n variant: 'btn-primary'\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n\nconst {\n target,\n menu,\n buttonClasses,\n classes,\n expanded,\n floatingStyles,\n onBlur,\n onClick,\n onClickToggle,\n onClickItem\n} = useDropdownHandler(props, emit);\n</script>\n\n<template>\n <div\n class=\"btn-group btn-dropdown-split\"\n :class=\"classes\">\n <slot\n v-if=\"!dropleft\"\n name=\"button\"\n v-bind=\"{ expanded, onBlur, onClickToggle }\">\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClick\">\n {{ label }}\n </button>\n </slot>\n <div class=\"btn-group\">\n <slot\n name=\"toggle\"\n v-bind=\"{ target: (el: HTMLElement) => target = el, expanded, onBlur, onClickToggle }\">\n <button\n ref=\"target\"\n type=\"button\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n :class=\"{...buttonClasses, 'dropdown-toggle': true, 'dropdown-toggle-split': split}\"\n @blur=\"onBlur\"\n @click=\"onClickToggle\" />\n </slot>\n <DropdownMenu\n ref=\"menu\"\n :class=\"{\n 'show': expanded\n }\"\n :style=\"floatingStyles\"\n @blur=\"onBlur\"\n @click=\"onClickItem\"\n @mousedown.prevent>\n <slot />\n </DropdownMenu>\n </div>\n <slot\n v-if=\"dropleft\"\n name=\"button\"\n v-bind=\"{ expanded, onBlur, onClickToggle }\">\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClick\">\n {{ label }}\n </button>\n </slot>\n </div>\n</template>","<script setup lang=\"ts\">\nimport BtnDropdownSingle from './BtnDropdownSingle.vue';\nimport BtnDropdownSplit from './BtnDropdownSplit.vue';\nimport { BtnDropdownEvents, BtnDropdownProps } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<{\n split?: boolean\n} & BtnDropdownProps>(), {\n split: false,\n caret: true\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n</script>\n\n<template>\n <Component\n :is=\"!split ? BtnDropdownSingle : BtnDropdownSplit\"\n v-bind=\"props\"\n @click=\"(...args) => emit('click', ...args)\"\n @click-toggle=\"(...args) => emit('clickToggle', ...args)\"\n @show=\"(...args) => emit('show', ...args)\"\n @hide=\"(...args) => emit('hide', ...args)\">\n <template #button=\"slot\">\n <slot\n name=\"button\"\n v-bind=\"slot\" />\n </template>\n <template #toggle=\"slot\">\n <slot\n name=\"toggle\"\n v-bind=\"slot\" />\n </template>\n <template #split=\"slot\">\n <slot\n name=\"split\"\n v-bind=\"slot\" />\n </template>\n <slot />\n </Component>\n</template>"],"names":["useDropdownHandler","props","emit","target","ref","menu","expanded","alignment","computed","side","placement","classes","buttonClasses","value","floatingStyles","update","useFloating","offset","flip","show","hide","toggle","isFocusable","element","nodes","i","onBlur","e","onClick","onClickToggle","onClickItem","watchEffect","__props","__emit","_createElementBlock","_normalizeClass","_unref","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps","el","_createElementVNode","_cache","args","_hoisted_1","_createVNode","DropdownMenu","_hoisted_2","_hoisted_4","_createBlock","_resolveDynamicComponent","BtnDropdownSplit","BtnDropdownSingle","_mergeProps","_withCtx","slot"],"mappings":"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"}
1
+ {"version":3,"file":"btn-dropdown.js","sources":["../src/useDropdownHandler.ts","../src/BtnDropdownSingle.vue","../src/BtnDropdownSplit.vue","../src/BtnDropdown.vue"],"sourcesContent":["import { flip, offset, Placement, type Alignment, type Middleware, type OffsetOptions, type Side } from '@floating-ui/dom';\nimport { useFloating } from '@floating-ui/vue';\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { computed, ref, watchEffect, type EmitFn, type HTMLAttributes } from 'vue';\n\ntype LiteralUnion<T extends U, U = string> = T | (U & Record<never, never>);\n\nexport type BtnGroupSizes = 'btn-group-xs'\n | 'btn-group-sm' \n | 'btn-group-md'\n | 'btn-group-lg'\n | 'btn-group-xl'\n | 'btn-group-2xl'\n | 'btn-group-3xl'\n | 'btn-group-4xl';\n\nexport type BtnDropdownProps = {\n align?: Alignment;\n block?: boolean;\n buttonClass?: HTMLAttributes['class'],\n caret?: boolean;\n dropup?: boolean;\n dropright?: boolean;\n dropleft?: boolean;\n label?: string;\n offset?: OffsetOptions,\n middleware?: Middleware[],\n side?: Side;\n size?: LiteralUnion<BtnGroupSizes>;\n split?: boolean;\n variant?: string;\n}\n\nexport type BtnDropdownEvents = {\n click: [event: MouseEvent];\n clickToggle: [event: MouseEvent];\n show: [],\n hide: []\n}\n\nexport function useDropdownHandler(props: BtnDropdownProps, emit: EmitFn<BtnDropdownEvents>) {\n const target = ref<HTMLElement>();\n const menu = ref<InstanceType<typeof DropdownMenu>>();\n const expanded = ref(false);\n\n\n const alignment = computed<Alignment>(() => props.align ?? 'start');\n\n const side = computed<Side>(() => {\n if(props.dropup) {\n return 'top';\n }\n\n if(props.dropleft) {\n return 'left';\n }\n\n if(props.dropright) {\n return 'right';\n }\n\n return 'bottom';\n });\n\n const placement = computed<Placement>(() => `${side.value}-${alignment.value}`);\n\n const classes = computed(() => ({\n 'dropdown': props.dropup && props.dropright && props.dropleft,\n 'dropup': props.dropup,\n 'dropright': props.dropright,\n 'dropleft': props.dropleft,\n 'expanded': expanded.value,\n [props.size ?? '']: !!props.size,\n }));\n \n const buttonClasses = computed(() => {\n const classes = {\n btn: true,\n [props.variant ?? '']: !!props.variant,\n 'btn-block': !!props.block,\n 'no-caret': !props.caret\n };\n \n if(typeof props.buttonClass === 'string') {\n classes[props.buttonClass] = true;\n }\n else if(Array.isArray(props.buttonClass)) {\n for(const value of props.buttonClass) {\n classes[value] = true;\n }\n }\n else if(props.buttonClass) {\n Object.assign(classes, props.buttonClass);\n }\n\n return classes;\n });\n\n const { floatingStyles, update } = useFloating(target, menu, {\n placement: placement,\n middleware: props.middleware ?? [\n offset(props.offset ?? 5),\n flip()\n ]\n });\n\n function show() {\n expanded.value = true;\n\n if(!target.value || !menu.value) {\n return;\n }\n\n update();\n\n emit('show');\n }\n\n function hide() {\n expanded.value = false;\n\n target.value?.blur();\n\n emit('hide');\n }\n\n function toggle() {\n if(!expanded.value) {\n show();\n }\n else {\n hide();\n }\n }\n\n function isFocusable(element: HTMLElement) {\n const nodes = Array.from(menu.value?.$el.querySelectorAll('label, input, select, textarea') ?? []);\n\n for(const i in nodes) {\n if(element === nodes[i]) {\n return true;\n }\n }\n\n return false;\n }\n \n function onBlur(e: FocusEvent) {\n if(!(e.relatedTarget instanceof HTMLElement)) {\n hide();\n \n return;\n }\n \n if(menu.value && !menu.value?.$el.contains(e.relatedTarget) || !target.value?.contains(e.relatedTarget)) {\n hide();\n }\n }\n\n function onClick(e: MouseEvent) {\n emit('click', e);\n }\n\n function onClickToggle(e: MouseEvent) {\n e.target?.dispatchEvent(new Event('focus', e));\n \n emit('clickToggle', e);\n\n if(!e.defaultPrevented) {\n toggle();\n }\n }\n\n function onClickItem(e: PointerEvent) {\n if(!(e.target instanceof HTMLElement)) {\n hide();\n\n return;\n }\n\n if(!isFocusable(e.target) && !e.defaultPrevented) {\n hide();\n }\n }\n\n watchEffect(() => {\n if(expanded.value) {\n window.addEventListener('resize', update);\n }\n else {\n window.removeEventListener('resize', update);\n }\n });\n\n return {\n target,\n menu,\n alignment,\n expanded,\n floatingStyles,\n placement,\n side,\n classes,\n buttonClasses,\n show,\n hide,\n toggle,\n onBlur,\n onClick,\n onClickToggle,\n onClickItem\n };\n}","<script setup lang=\"ts\">\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { BtnDropdownEvents, BtnDropdownProps, useDropdownHandler } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<BtnDropdownProps>(), {\n caret: true,\n variant: 'btn-primary'\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n\nconst {\n target,\n menu,\n buttonClasses,\n classes,\n expanded,\n floatingStyles,\n onBlur,\n onClickToggle,\n onClickItem\n} = useDropdownHandler(props, emit);\n</script>\n\n<template>\n <div\n class=\"btn-group\"\n :class=\"classes\">\n <slot\n name=\"button\"\n v-bind=\"{ target: (el: HTMLElement) => target = el, expanded, onBlur, onClickToggle }\">\n <button\n ref=\"target\"\n type=\"button\"\n :class=\"{...buttonClasses, ['dropdown-toggle']: true}\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClickToggle\">\n {{ label }}\n </button>\n </slot>\n <DropdownMenu\n ref=\"menu\"\n :class=\"{\n 'show': expanded\n }\"\n :style=\"floatingStyles\"\n @blur=\"onBlur\"\n @click=\"onClickItem\"\n @mousedown.prevent>\n <slot />\n </DropdownMenu>\n </div>\n</template>","<script setup lang=\"ts\">\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { BtnDropdownEvents, BtnDropdownProps, useDropdownHandler } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<BtnDropdownProps>(), {\n caret: true,\n variant: 'btn-primary'\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n\nconst {\n target,\n menu,\n buttonClasses,\n classes,\n expanded,\n floatingStyles,\n onBlur,\n onClick,\n onClickToggle,\n onClickItem\n} = useDropdownHandler(props, emit);\n</script>\n\n<template>\n <div\n class=\"btn-group btn-dropdown-split\"\n :class=\"classes\">\n <slot\n v-if=\"!dropleft\"\n name=\"button\"\n v-bind=\"{ expanded, onBlur, onClickToggle }\">\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClick\">\n {{ label }}\n </button>\n </slot>\n <div class=\"btn-group\">\n <slot\n name=\"toggle\"\n v-bind=\"{ target: (el: HTMLElement) => target = el, expanded, onBlur, onClickToggle }\">\n <button\n ref=\"target\"\n type=\"button\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n :class=\"{...buttonClasses, 'dropdown-toggle': true, 'dropdown-toggle-split': split}\"\n @blur=\"onBlur\"\n @click=\"onClickToggle\" />\n </slot>\n <DropdownMenu\n ref=\"menu\"\n :class=\"{\n 'show': expanded\n }\"\n :style=\"floatingStyles\"\n @blur=\"onBlur\"\n @click=\"onClickItem\"\n @mousedown.prevent>\n <slot />\n </DropdownMenu>\n </div>\n <slot\n v-if=\"dropleft\"\n name=\"button\"\n v-bind=\"{ expanded, onBlur, onClickToggle }\">\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClick\">\n {{ label }}\n </button>\n </slot>\n </div>\n</template>","<script setup lang=\"ts\">\nimport BtnDropdownSingle from './BtnDropdownSingle.vue';\nimport BtnDropdownSplit from './BtnDropdownSplit.vue';\nimport { BtnDropdownEvents, BtnDropdownProps } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<{\n split?: boolean\n} & BtnDropdownProps>(), {\n split: false,\n caret: true\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n</script>\n\n<template>\n <Component\n :is=\"!split ? BtnDropdownSingle : BtnDropdownSplit\"\n v-bind=\"props\"\n @click=\"(e: MouseEvent) => emit('click', e)\"\n @click-toggle=\"(e: MouseEvent) => emit('clickToggle', e)\"\n @show=\"() => emit('show')\"\n @hide=\"() => emit('hide')\">\n <template #button=\"slot\">\n <slot\n name=\"button\"\n v-bind=\"slot\" />\n </template>\n <template #toggle=\"slot\">\n <slot\n name=\"toggle\"\n v-bind=\"slot\" />\n </template>\n <template #split=\"slot\">\n <slot\n name=\"split\"\n v-bind=\"slot\" />\n </template>\n <slot />\n </Component>\n</template>"],"names":["useDropdownHandler","props","emit","target","ref","menu","expanded","alignment","computed","side","placement","classes","buttonClasses","value","floatingStyles","update","useFloating","offset","flip","show","hide","toggle","isFocusable","element","nodes","i","onBlur","e","onClick","onClickToggle","onClickItem","watchEffect","__props","__emit","_createElementBlock","_normalizeClass","_unref","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps","el","_createElementVNode","_cache","args","_hoisted_1","_createVNode","DropdownMenu","_hoisted_2","_hoisted_4","_createBlock","_resolveDynamicComponent","BtnDropdownSplit","BtnDropdownSingle","_mergeProps","_withCtx","slot"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- (function(m,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@vue-interface/dropdown-menu"),require("@floating-ui/dom"),require("@floating-ui/vue")):typeof define=="function"&&define.amd?define(["exports","vue","@vue-interface/dropdown-menu","@floating-ui/dom","@floating-ui/vue"],e):(m=typeof globalThis<"u"?globalThis:m||self,e(m.BtnDropdown={},m.Vue,m.VueInterfaceDropdownMenu,m.FloatingUiDom,m.FloatingUiVue))})(this,(function(m,e,B,z,T){"use strict";function S(t,C){const c=e.ref(),a=e.ref(),l=e.ref(!1),s=e.computed(()=>t.align??"start"),n=e.computed(()=>t.dropup?"top":t.dropleft?"left":t.dropright?"right":"bottom"),k=e.computed(()=>`${n.value}-${s.value}`),u=e.computed(()=>({dropdown:t.dropup&&t.dropright&&t.dropleft,dropup:t.dropup,dropright:t.dropright,dropleft:t.dropleft,expanded:l.value,[t.size??""]:!!t.size})),b=e.computed(()=>{const r={btn:!0,[t.variant??""]:!!t.variant,"btn-block":!!t.block,"no-caret":!t.caret};if(typeof t.buttonClass=="string")r[t.buttonClass]=!0;else if(Array.isArray(t.buttonClass))for(const w of t.buttonClass)r[w]=!0;else t.buttonClass&&Object.assign(r,t.buttonClass);return r}),{floatingStyles:i,update:p}=T.useFloating(c,a,{placement:k,middleware:t.middleware??[z.offset(t.offset??5),z.flip()]});function y(){l.value=!0,!(!c.value||!a.value)&&(p(),C("show"))}function g(){l.value=!1,c.value?.blur(),C("hide")}function f(){l.value?g():y()}function o(r){const w=Array.from(a.value?.$el.querySelectorAll("label, input, select, textarea")??[]);for(const A in w)if(r===w[A])return!0;return!1}function d(r){if(!(r.relatedTarget instanceof HTMLElement)){g();return}(a.value&&!a.value?.$el.contains(r.relatedTarget)||!c.value?.contains(r.relatedTarget))&&g()}function N(r){C("click",r)}function q(r){r.target?.dispatchEvent(new Event("focus",r)),C("clickToggle",r),r.defaultPrevented||f()}function R(r){if(!(r.target instanceof HTMLElement)){g();return}!o(r.target)&&!r.defaultPrevented&&g()}return e.watchEffect(()=>{l.value?window.addEventListener("resize",p):window.removeEventListener("resize",p)}),{target:c,menu:a,alignment:s,expanded:l,floatingStyles:i,placement:k,side:n,classes:u,buttonClasses:b,show:y,hide:g,toggle:f,onBlur:d,onClick:N,onClickToggle:q,onClickItem:R}}const h=["aria-expanded"],x=e.defineComponent({__name:"BtnDropdownSingle",props:{align:{},block:{type:Boolean},buttonClass:{},caret:{type:Boolean,default:!0},dropup:{type:Boolean},dropright:{type:Boolean},dropleft:{type:Boolean},label:{},offset:{},middleware:{},side:{},size:{},split:{type:Boolean},variant:{default:"btn-primary"}},emits:["click","clickToggle","show","hide"],setup(t,{emit:C}){const c=t,a=C,{target:l,menu:s,buttonClasses:n,classes:k,expanded:u,floatingStyles:b,onBlur:i,onClickToggle:p,onClickItem:y}=S(c,a);return(g,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["btn-group",e.unref(k)])},[e.renderSlot(g.$slots,"button",e.normalizeProps(e.guardReactiveProps({target:o=>l.value=o,expanded:e.unref(u),onBlur:e.unref(i),onClickToggle:e.unref(p)})),()=>[e.createElementVNode("button",{ref_key:"target",ref:l,type:"button",class:e.normalizeClass({...e.unref(n),"dropdown-toggle":!0}),"aria-haspopup":"true","aria-expanded":e.unref(u),onBlur:f[0]||(f[0]=(...o)=>e.unref(i)&&e.unref(i)(...o)),onClick:f[1]||(f[1]=(...o)=>e.unref(p)&&e.unref(p)(...o))},e.toDisplayString(t.label),43,h)]),e.createVNode(e.unref(B.DropdownMenu),{ref_key:"menu",ref:s,class:e.normalizeClass({show:e.unref(u)}),style:e.normalizeStyle(e.unref(b)),onBlur:e.unref(i),onClick:e.unref(y),onMousedown:f[2]||(f[2]=e.withModifiers(()=>{},["prevent"]))},{default:e.withCtx(()=>[e.renderSlot(g.$slots,"default")]),_:3},8,["class","style","onBlur","onClick"])],2))}}),P=["aria-expanded"],$={class:"btn-group"},D=["aria-expanded"],E=["aria-expanded"],V=e.defineComponent({__name:"BtnDropdownSplit",props:{align:{},block:{type:Boolean},buttonClass:{},caret:{type:Boolean,default:!0},dropup:{type:Boolean},dropright:{type:Boolean},dropleft:{type:Boolean},label:{},offset:{},middleware:{},side:{},size:{},split:{type:Boolean},variant:{default:"btn-primary"}},emits:["click","clickToggle","show","hide"],setup(t,{emit:C}){const c=t,a=C,{target:l,menu:s,buttonClasses:n,classes:k,expanded:u,floatingStyles:b,onBlur:i,onClick:p,onClickToggle:y,onClickItem:g}=S(c,a);return(f,o)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["btn-group btn-dropdown-split",e.unref(k)])},[t.dropleft?e.createCommentVNode("",!0):e.renderSlot(f.$slots,"button",e.normalizeProps(e.mergeProps({key:0},{expanded:e.unref(u),onBlur:e.unref(i),onClickToggle:e.unref(y)})),()=>[e.createElementVNode("button",{type:"button",class:e.normalizeClass(e.unref(n)),"aria-haspopup":"true","aria-expanded":e.unref(u),onBlur:o[0]||(o[0]=(...d)=>e.unref(i)&&e.unref(i)(...d)),onClick:o[1]||(o[1]=(...d)=>e.unref(p)&&e.unref(p)(...d))},e.toDisplayString(t.label),43,P)]),e.createElementVNode("div",$,[e.renderSlot(f.$slots,"toggle",e.normalizeProps(e.guardReactiveProps({target:d=>l.value=d,expanded:e.unref(u),onBlur:e.unref(i),onClickToggle:e.unref(y)})),()=>[e.createElementVNode("button",{ref_key:"target",ref:l,type:"button","aria-haspopup":"true","aria-expanded":e.unref(u),class:e.normalizeClass({...e.unref(n),"dropdown-toggle":!0,"dropdown-toggle-split":t.split}),onBlur:o[2]||(o[2]=(...d)=>e.unref(i)&&e.unref(i)(...d)),onClick:o[3]||(o[3]=(...d)=>e.unref(y)&&e.unref(y)(...d))},null,42,D)]),e.createVNode(e.unref(B.DropdownMenu),{ref_key:"menu",ref:s,class:e.normalizeClass({show:e.unref(u)}),style:e.normalizeStyle(e.unref(b)),onBlur:e.unref(i),onClick:e.unref(g),onMousedown:o[4]||(o[4]=e.withModifiers(()=>{},["prevent"]))},{default:e.withCtx(()=>[e.renderSlot(f.$slots,"default")]),_:3},8,["class","style","onBlur","onClick"])]),t.dropleft?e.renderSlot(f.$slots,"button",e.normalizeProps(e.mergeProps({key:1},{expanded:e.unref(u),onBlur:e.unref(i),onClickToggle:e.unref(y)})),()=>[e.createElementVNode("button",{type:"button",class:e.normalizeClass(e.unref(n)),"aria-haspopup":"true","aria-expanded":e.unref(u),onBlur:o[5]||(o[5]=(...d)=>e.unref(i)&&e.unref(i)(...d)),onClick:o[6]||(o[6]=(...d)=>e.unref(p)&&e.unref(p)(...d))},e.toDisplayString(t.label),43,E)]):e.createCommentVNode("",!0)],2))}}),M=e.defineComponent({__name:"BtnDropdown",props:{split:{type:Boolean,default:!1},align:{},block:{type:Boolean},buttonClass:{},caret:{type:Boolean,default:!0},dropup:{type:Boolean},dropright:{type:Boolean},dropleft:{type:Boolean},label:{},offset:{},middleware:{},side:{},size:{},variant:{}},emits:["click","clickToggle","show","hide"],setup(t,{emit:C}){const c=t,a=C;return(l,s)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.split?V:x),e.mergeProps(c,{onClick:s[0]||(s[0]=(...n)=>a("click",...n)),onClickToggle:s[1]||(s[1]=(...n)=>a("clickToggle",...n)),onShow:s[2]||(s[2]=(...n)=>a("show",...n)),onHide:s[3]||(s[3]=(...n)=>a("hide",...n))}),{button:e.withCtx(n=>[e.renderSlot(l.$slots,"button",e.normalizeProps(e.guardReactiveProps(n)))]),toggle:e.withCtx(n=>[e.renderSlot(l.$slots,"toggle",e.normalizeProps(e.guardReactiveProps(n)))]),split:e.withCtx(n=>[e.renderSlot(l.$slots,"split",e.normalizeProps(e.guardReactiveProps(n)))]),default:e.withCtx(()=>[e.renderSlot(l.$slots,"default")]),_:3},16))}});m.BtnDropdown=M,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(m,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@vue-interface/dropdown-menu"),require("@floating-ui/dom"),require("@floating-ui/vue")):typeof define=="function"&&define.amd?define(["exports","vue","@vue-interface/dropdown-menu","@floating-ui/dom","@floating-ui/vue"],e):(m=typeof globalThis<"u"?globalThis:m||self,e(m.BtnDropdown={},m.Vue,m.VueInterfaceDropdownMenu,m.FloatingUiDom,m.FloatingUiVue))})(this,(function(m,e,B,z,T){"use strict";function S(t,C){const c=e.ref(),a=e.ref(),l=e.ref(!1),s=e.computed(()=>t.align??"start"),r=e.computed(()=>t.dropup?"top":t.dropleft?"left":t.dropright?"right":"bottom"),k=e.computed(()=>`${r.value}-${s.value}`),u=e.computed(()=>({dropdown:t.dropup&&t.dropright&&t.dropleft,dropup:t.dropup,dropright:t.dropright,dropleft:t.dropleft,expanded:l.value,[t.size??""]:!!t.size})),b=e.computed(()=>{const o={btn:!0,[t.variant??""]:!!t.variant,"btn-block":!!t.block,"no-caret":!t.caret};if(typeof t.buttonClass=="string")o[t.buttonClass]=!0;else if(Array.isArray(t.buttonClass))for(const w of t.buttonClass)o[w]=!0;else t.buttonClass&&Object.assign(o,t.buttonClass);return o}),{floatingStyles:i,update:p}=T.useFloating(c,a,{placement:k,middleware:t.middleware??[z.offset(t.offset??5),z.flip()]});function y(){l.value=!0,!(!c.value||!a.value)&&(p(),C("show"))}function g(){l.value=!1,c.value?.blur(),C("hide")}function f(){l.value?g():y()}function n(o){const w=Array.from(a.value?.$el.querySelectorAll("label, input, select, textarea")??[]);for(const A in w)if(o===w[A])return!0;return!1}function d(o){if(!(o.relatedTarget instanceof HTMLElement)){g();return}(a.value&&!a.value?.$el.contains(o.relatedTarget)||!c.value?.contains(o.relatedTarget))&&g()}function N(o){C("click",o)}function q(o){o.target?.dispatchEvent(new Event("focus",o)),C("clickToggle",o),o.defaultPrevented||f()}function R(o){if(!(o.target instanceof HTMLElement)){g();return}!n(o.target)&&!o.defaultPrevented&&g()}return e.watchEffect(()=>{l.value?window.addEventListener("resize",p):window.removeEventListener("resize",p)}),{target:c,menu:a,alignment:s,expanded:l,floatingStyles:i,placement:k,side:r,classes:u,buttonClasses:b,show:y,hide:g,toggle:f,onBlur:d,onClick:N,onClickToggle:q,onClickItem:R}}const h=["aria-expanded"],x=e.defineComponent({__name:"BtnDropdownSingle",props:{align:{},block:{type:Boolean},buttonClass:{},caret:{type:Boolean,default:!0},dropup:{type:Boolean},dropright:{type:Boolean},dropleft:{type:Boolean},label:{},offset:{},middleware:{},side:{},size:{},split:{type:Boolean},variant:{default:"btn-primary"}},emits:["click","clickToggle","show","hide"],setup(t,{emit:C}){const c=t,a=C,{target:l,menu:s,buttonClasses:r,classes:k,expanded:u,floatingStyles:b,onBlur:i,onClickToggle:p,onClickItem:y}=S(c,a);return(g,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["btn-group",e.unref(k)])},[e.renderSlot(g.$slots,"button",e.normalizeProps(e.guardReactiveProps({target:n=>l.value=n,expanded:e.unref(u),onBlur:e.unref(i),onClickToggle:e.unref(p)})),()=>[e.createElementVNode("button",{ref_key:"target",ref:l,type:"button",class:e.normalizeClass({...e.unref(r),"dropdown-toggle":!0}),"aria-haspopup":"true","aria-expanded":e.unref(u),onBlur:f[0]||(f[0]=(...n)=>e.unref(i)&&e.unref(i)(...n)),onClick:f[1]||(f[1]=(...n)=>e.unref(p)&&e.unref(p)(...n))},e.toDisplayString(t.label),43,h)]),e.createVNode(e.unref(B.DropdownMenu),{ref_key:"menu",ref:s,class:e.normalizeClass({show:e.unref(u)}),style:e.normalizeStyle(e.unref(b)),onBlur:e.unref(i),onClick:e.unref(y),onMousedown:f[2]||(f[2]=e.withModifiers(()=>{},["prevent"]))},{default:e.withCtx(()=>[e.renderSlot(g.$slots,"default")]),_:3},8,["class","style","onBlur","onClick"])],2))}}),P=["aria-expanded"],$={class:"btn-group"},D=["aria-expanded"],E=["aria-expanded"],V=e.defineComponent({__name:"BtnDropdownSplit",props:{align:{},block:{type:Boolean},buttonClass:{},caret:{type:Boolean,default:!0},dropup:{type:Boolean},dropright:{type:Boolean},dropleft:{type:Boolean},label:{},offset:{},middleware:{},side:{},size:{},split:{type:Boolean},variant:{default:"btn-primary"}},emits:["click","clickToggle","show","hide"],setup(t,{emit:C}){const c=t,a=C,{target:l,menu:s,buttonClasses:r,classes:k,expanded:u,floatingStyles:b,onBlur:i,onClick:p,onClickToggle:y,onClickItem:g}=S(c,a);return(f,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["btn-group btn-dropdown-split",e.unref(k)])},[t.dropleft?e.createCommentVNode("",!0):e.renderSlot(f.$slots,"button",e.normalizeProps(e.mergeProps({key:0},{expanded:e.unref(u),onBlur:e.unref(i),onClickToggle:e.unref(y)})),()=>[e.createElementVNode("button",{type:"button",class:e.normalizeClass(e.unref(r)),"aria-haspopup":"true","aria-expanded":e.unref(u),onBlur:n[0]||(n[0]=(...d)=>e.unref(i)&&e.unref(i)(...d)),onClick:n[1]||(n[1]=(...d)=>e.unref(p)&&e.unref(p)(...d))},e.toDisplayString(t.label),43,P)]),e.createElementVNode("div",$,[e.renderSlot(f.$slots,"toggle",e.normalizeProps(e.guardReactiveProps({target:d=>l.value=d,expanded:e.unref(u),onBlur:e.unref(i),onClickToggle:e.unref(y)})),()=>[e.createElementVNode("button",{ref_key:"target",ref:l,type:"button","aria-haspopup":"true","aria-expanded":e.unref(u),class:e.normalizeClass({...e.unref(r),"dropdown-toggle":!0,"dropdown-toggle-split":t.split}),onBlur:n[2]||(n[2]=(...d)=>e.unref(i)&&e.unref(i)(...d)),onClick:n[3]||(n[3]=(...d)=>e.unref(y)&&e.unref(y)(...d))},null,42,D)]),e.createVNode(e.unref(B.DropdownMenu),{ref_key:"menu",ref:s,class:e.normalizeClass({show:e.unref(u)}),style:e.normalizeStyle(e.unref(b)),onBlur:e.unref(i),onClick:e.unref(g),onMousedown:n[4]||(n[4]=e.withModifiers(()=>{},["prevent"]))},{default:e.withCtx(()=>[e.renderSlot(f.$slots,"default")]),_:3},8,["class","style","onBlur","onClick"])]),t.dropleft?e.renderSlot(f.$slots,"button",e.normalizeProps(e.mergeProps({key:1},{expanded:e.unref(u),onBlur:e.unref(i),onClickToggle:e.unref(y)})),()=>[e.createElementVNode("button",{type:"button",class:e.normalizeClass(e.unref(r)),"aria-haspopup":"true","aria-expanded":e.unref(u),onBlur:n[5]||(n[5]=(...d)=>e.unref(i)&&e.unref(i)(...d)),onClick:n[6]||(n[6]=(...d)=>e.unref(p)&&e.unref(p)(...d))},e.toDisplayString(t.label),43,E)]):e.createCommentVNode("",!0)],2))}}),M=e.defineComponent({__name:"BtnDropdown",props:{split:{type:Boolean,default:!1},align:{},block:{type:Boolean},buttonClass:{},caret:{type:Boolean,default:!0},dropup:{type:Boolean},dropright:{type:Boolean},dropleft:{type:Boolean},label:{},offset:{},middleware:{},side:{},size:{},variant:{}},emits:["click","clickToggle","show","hide"],setup(t,{emit:C}){const c=t,a=C;return(l,s)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.split?V:x),e.mergeProps(c,{onClick:s[0]||(s[0]=r=>a("click",r)),onClickToggle:s[1]||(s[1]=r=>a("clickToggle",r)),onShow:s[2]||(s[2]=()=>a("show")),onHide:s[3]||(s[3]=()=>a("hide"))}),{button:e.withCtx(r=>[e.renderSlot(l.$slots,"button",e.normalizeProps(e.guardReactiveProps(r)))]),toggle:e.withCtx(r=>[e.renderSlot(l.$slots,"toggle",e.normalizeProps(e.guardReactiveProps(r)))]),split:e.withCtx(r=>[e.renderSlot(l.$slots,"split",e.normalizeProps(e.guardReactiveProps(r)))]),default:e.withCtx(()=>[e.renderSlot(l.$slots,"default")]),_:3},16))}});m.BtnDropdown=M,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})}));
2
2
  //# sourceMappingURL=btn-dropdown.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"btn-dropdown.umd.cjs","sources":["../src/useDropdownHandler.ts","../src/BtnDropdownSingle.vue","../src/BtnDropdownSplit.vue","../src/BtnDropdown.vue"],"sourcesContent":["import { flip, offset, Placement, type Alignment, type Middleware, type OffsetOptions, type Side } from '@floating-ui/dom';\nimport { useFloating } from '@floating-ui/vue';\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { computed, ref, watchEffect, type EmitFn, type HTMLAttributes } from 'vue';\n\ntype LiteralUnion<T extends U, U = string> = T | (U & Record<never, never>);\n\nexport type BtnGroupSizes = 'btn-group-xs'\n | 'btn-group-sm' \n | 'btn-group-md'\n | 'btn-group-lg'\n | 'btn-group-xl'\n | 'btn-group-2xl'\n | 'btn-group-3xl'\n | 'btn-group-4xl';\n\nexport type BtnDropdownProps = {\n align?: Alignment;\n block?: boolean;\n buttonClass?: HTMLAttributes['class'],\n caret?: boolean;\n dropup?: boolean;\n dropright?: boolean;\n dropleft?: boolean;\n label?: string;\n offset?: OffsetOptions,\n middleware?: Middleware[],\n side?: Side;\n size?: LiteralUnion<BtnGroupSizes>;\n split?: boolean;\n variant?: string;\n}\n\nexport type BtnDropdownEvents = {\n click: [event: MouseEvent];\n clickToggle: [event: MouseEvent];\n show: [],\n hide: []\n}\n\nexport function useDropdownHandler(props: BtnDropdownProps, emit: EmitFn<BtnDropdownEvents>) {\n const target = ref<HTMLElement>();\n const menu = ref<InstanceType<typeof DropdownMenu>>();\n const expanded = ref(false);\n\n\n const alignment = computed<Alignment>(() => props.align ?? 'start');\n\n const side = computed<Side>(() => {\n if(props.dropup) {\n return 'top';\n }\n\n if(props.dropleft) {\n return 'left';\n }\n\n if(props.dropright) {\n return 'right';\n }\n\n return 'bottom';\n });\n\n const placement = computed<Placement>(() => `${side.value}-${alignment.value}`);\n\n const classes = computed(() => ({\n 'dropdown': props.dropup && props.dropright && props.dropleft,\n 'dropup': props.dropup,\n 'dropright': props.dropright,\n 'dropleft': props.dropleft,\n 'expanded': expanded.value,\n [props.size ?? '']: !!props.size,\n }));\n \n const buttonClasses = computed(() => {\n const classes = {\n btn: true,\n [props.variant ?? '']: !!props.variant,\n 'btn-block': !!props.block,\n 'no-caret': !props.caret\n };\n \n if(typeof props.buttonClass === 'string') {\n classes[props.buttonClass] = true;\n }\n else if(Array.isArray(props.buttonClass)) {\n for(const value of props.buttonClass) {\n classes[value] = true;\n }\n }\n else if(props.buttonClass) {\n Object.assign(classes, props.buttonClass);\n }\n\n return classes;\n });\n\n const { floatingStyles, update } = useFloating(target, menu, {\n placement: placement,\n middleware: props.middleware ?? [\n offset(props.offset ?? 5),\n flip()\n ]\n });\n\n function show() {\n expanded.value = true;\n\n if(!target.value || !menu.value) {\n return;\n }\n\n update();\n\n emit('show');\n }\n\n function hide() {\n expanded.value = false;\n\n target.value?.blur();\n\n emit('hide');\n }\n\n function toggle() {\n if(!expanded.value) {\n show();\n }\n else {\n hide();\n }\n }\n\n function isFocusable(element: HTMLElement) {\n const nodes = Array.from(menu.value?.$el.querySelectorAll('label, input, select, textarea') ?? []);\n\n for(const i in nodes) {\n if(element === nodes[i]) {\n return true;\n }\n }\n\n return false;\n }\n \n function onBlur(e: FocusEvent) {\n if(!(e.relatedTarget instanceof HTMLElement)) {\n hide();\n \n return;\n }\n \n if(menu.value && !menu.value?.$el.contains(e.relatedTarget) || !target.value?.contains(e.relatedTarget)) {\n hide();\n }\n }\n\n function onClick(e: MouseEvent) {\n emit('click', e);\n }\n\n function onClickToggle(e: MouseEvent) {\n e.target?.dispatchEvent(new Event('focus', e));\n \n emit('clickToggle', e);\n\n if(!e.defaultPrevented) {\n toggle();\n }\n }\n\n function onClickItem(e: PointerEvent) {\n if(!(e.target instanceof HTMLElement)) {\n hide();\n\n return;\n }\n\n if(!isFocusable(e.target) && !e.defaultPrevented) {\n hide();\n }\n }\n\n watchEffect(() => {\n if(expanded.value) {\n window.addEventListener('resize', update);\n }\n else {\n window.removeEventListener('resize', update);\n }\n });\n\n return {\n target,\n menu,\n alignment,\n expanded,\n floatingStyles,\n placement,\n side,\n classes,\n buttonClasses,\n show,\n hide,\n toggle,\n onBlur,\n onClick,\n onClickToggle,\n onClickItem\n };\n}","<script setup lang=\"ts\">\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { BtnDropdownEvents, BtnDropdownProps, useDropdownHandler } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<BtnDropdownProps>(), {\n caret: true,\n variant: 'btn-primary'\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n\nconst {\n target,\n menu,\n buttonClasses,\n classes,\n expanded,\n floatingStyles,\n onBlur,\n onClickToggle,\n onClickItem\n} = useDropdownHandler(props, emit);\n</script>\n\n<template>\n <div\n class=\"btn-group\"\n :class=\"classes\">\n <slot\n name=\"button\"\n v-bind=\"{ target: (el: HTMLElement) => target = el, expanded, onBlur, onClickToggle }\">\n <button\n ref=\"target\"\n type=\"button\"\n :class=\"{...buttonClasses, ['dropdown-toggle']: true}\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClickToggle\">\n {{ label }}\n </button>\n </slot>\n <DropdownMenu\n ref=\"menu\"\n :class=\"{\n 'show': expanded\n }\"\n :style=\"floatingStyles\"\n @blur=\"onBlur\"\n @click=\"onClickItem\"\n @mousedown.prevent>\n <slot />\n </DropdownMenu>\n </div>\n</template>","<script setup lang=\"ts\">\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { BtnDropdownEvents, BtnDropdownProps, useDropdownHandler } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<BtnDropdownProps>(), {\n caret: true,\n variant: 'btn-primary'\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n\nconst {\n target,\n menu,\n buttonClasses,\n classes,\n expanded,\n floatingStyles,\n onBlur,\n onClick,\n onClickToggle,\n onClickItem\n} = useDropdownHandler(props, emit);\n</script>\n\n<template>\n <div\n class=\"btn-group btn-dropdown-split\"\n :class=\"classes\">\n <slot\n v-if=\"!dropleft\"\n name=\"button\"\n v-bind=\"{ expanded, onBlur, onClickToggle }\">\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClick\">\n {{ label }}\n </button>\n </slot>\n <div class=\"btn-group\">\n <slot\n name=\"toggle\"\n v-bind=\"{ target: (el: HTMLElement) => target = el, expanded, onBlur, onClickToggle }\">\n <button\n ref=\"target\"\n type=\"button\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n :class=\"{...buttonClasses, 'dropdown-toggle': true, 'dropdown-toggle-split': split}\"\n @blur=\"onBlur\"\n @click=\"onClickToggle\" />\n </slot>\n <DropdownMenu\n ref=\"menu\"\n :class=\"{\n 'show': expanded\n }\"\n :style=\"floatingStyles\"\n @blur=\"onBlur\"\n @click=\"onClickItem\"\n @mousedown.prevent>\n <slot />\n </DropdownMenu>\n </div>\n <slot\n v-if=\"dropleft\"\n name=\"button\"\n v-bind=\"{ expanded, onBlur, onClickToggle }\">\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClick\">\n {{ label }}\n </button>\n </slot>\n </div>\n</template>","<script setup lang=\"ts\">\nimport BtnDropdownSingle from './BtnDropdownSingle.vue';\nimport BtnDropdownSplit from './BtnDropdownSplit.vue';\nimport { BtnDropdownEvents, BtnDropdownProps } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<{\n split?: boolean\n} & BtnDropdownProps>(), {\n split: false,\n caret: true\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n</script>\n\n<template>\n <Component\n :is=\"!split ? BtnDropdownSingle : BtnDropdownSplit\"\n v-bind=\"props\"\n @click=\"(...args) => emit('click', ...args)\"\n @click-toggle=\"(...args) => emit('clickToggle', ...args)\"\n @show=\"(...args) => emit('show', ...args)\"\n @hide=\"(...args) => emit('hide', ...args)\">\n <template #button=\"slot\">\n <slot\n name=\"button\"\n v-bind=\"slot\" />\n </template>\n <template #toggle=\"slot\">\n <slot\n name=\"toggle\"\n v-bind=\"slot\" />\n </template>\n <template #split=\"slot\">\n <slot\n name=\"split\"\n v-bind=\"slot\" />\n </template>\n <slot />\n </Component>\n</template>"],"names":["useDropdownHandler","props","emit","target","ref","menu","expanded","alignment","computed","side","placement","classes","buttonClasses","value","floatingStyles","update","useFloating","offset","flip","show","hide","toggle","isFocusable","element","nodes","i","onBlur","e","onClick","onClickToggle","onClickItem","watchEffect","__props","__emit","_createElementBlock","_normalizeClass","_unref","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps","el","_createElementVNode","_cache","args","_hoisted_1","_createVNode","DropdownMenu","_hoisted_2","_hoisted_4","_createBlock","_resolveDynamicComponent","BtnDropdownSplit","BtnDropdownSingle","_mergeProps","_withCtx","slot"],"mappings":"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"}
1
+ {"version":3,"file":"btn-dropdown.umd.cjs","sources":["../src/useDropdownHandler.ts","../src/BtnDropdownSingle.vue","../src/BtnDropdownSplit.vue","../src/BtnDropdown.vue"],"sourcesContent":["import { flip, offset, Placement, type Alignment, type Middleware, type OffsetOptions, type Side } from '@floating-ui/dom';\nimport { useFloating } from '@floating-ui/vue';\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { computed, ref, watchEffect, type EmitFn, type HTMLAttributes } from 'vue';\n\ntype LiteralUnion<T extends U, U = string> = T | (U & Record<never, never>);\n\nexport type BtnGroupSizes = 'btn-group-xs'\n | 'btn-group-sm' \n | 'btn-group-md'\n | 'btn-group-lg'\n | 'btn-group-xl'\n | 'btn-group-2xl'\n | 'btn-group-3xl'\n | 'btn-group-4xl';\n\nexport type BtnDropdownProps = {\n align?: Alignment;\n block?: boolean;\n buttonClass?: HTMLAttributes['class'],\n caret?: boolean;\n dropup?: boolean;\n dropright?: boolean;\n dropleft?: boolean;\n label?: string;\n offset?: OffsetOptions,\n middleware?: Middleware[],\n side?: Side;\n size?: LiteralUnion<BtnGroupSizes>;\n split?: boolean;\n variant?: string;\n}\n\nexport type BtnDropdownEvents = {\n click: [event: MouseEvent];\n clickToggle: [event: MouseEvent];\n show: [],\n hide: []\n}\n\nexport function useDropdownHandler(props: BtnDropdownProps, emit: EmitFn<BtnDropdownEvents>) {\n const target = ref<HTMLElement>();\n const menu = ref<InstanceType<typeof DropdownMenu>>();\n const expanded = ref(false);\n\n\n const alignment = computed<Alignment>(() => props.align ?? 'start');\n\n const side = computed<Side>(() => {\n if(props.dropup) {\n return 'top';\n }\n\n if(props.dropleft) {\n return 'left';\n }\n\n if(props.dropright) {\n return 'right';\n }\n\n return 'bottom';\n });\n\n const placement = computed<Placement>(() => `${side.value}-${alignment.value}`);\n\n const classes = computed(() => ({\n 'dropdown': props.dropup && props.dropright && props.dropleft,\n 'dropup': props.dropup,\n 'dropright': props.dropright,\n 'dropleft': props.dropleft,\n 'expanded': expanded.value,\n [props.size ?? '']: !!props.size,\n }));\n \n const buttonClasses = computed(() => {\n const classes = {\n btn: true,\n [props.variant ?? '']: !!props.variant,\n 'btn-block': !!props.block,\n 'no-caret': !props.caret\n };\n \n if(typeof props.buttonClass === 'string') {\n classes[props.buttonClass] = true;\n }\n else if(Array.isArray(props.buttonClass)) {\n for(const value of props.buttonClass) {\n classes[value] = true;\n }\n }\n else if(props.buttonClass) {\n Object.assign(classes, props.buttonClass);\n }\n\n return classes;\n });\n\n const { floatingStyles, update } = useFloating(target, menu, {\n placement: placement,\n middleware: props.middleware ?? [\n offset(props.offset ?? 5),\n flip()\n ]\n });\n\n function show() {\n expanded.value = true;\n\n if(!target.value || !menu.value) {\n return;\n }\n\n update();\n\n emit('show');\n }\n\n function hide() {\n expanded.value = false;\n\n target.value?.blur();\n\n emit('hide');\n }\n\n function toggle() {\n if(!expanded.value) {\n show();\n }\n else {\n hide();\n }\n }\n\n function isFocusable(element: HTMLElement) {\n const nodes = Array.from(menu.value?.$el.querySelectorAll('label, input, select, textarea') ?? []);\n\n for(const i in nodes) {\n if(element === nodes[i]) {\n return true;\n }\n }\n\n return false;\n }\n \n function onBlur(e: FocusEvent) {\n if(!(e.relatedTarget instanceof HTMLElement)) {\n hide();\n \n return;\n }\n \n if(menu.value && !menu.value?.$el.contains(e.relatedTarget) || !target.value?.contains(e.relatedTarget)) {\n hide();\n }\n }\n\n function onClick(e: MouseEvent) {\n emit('click', e);\n }\n\n function onClickToggle(e: MouseEvent) {\n e.target?.dispatchEvent(new Event('focus', e));\n \n emit('clickToggle', e);\n\n if(!e.defaultPrevented) {\n toggle();\n }\n }\n\n function onClickItem(e: PointerEvent) {\n if(!(e.target instanceof HTMLElement)) {\n hide();\n\n return;\n }\n\n if(!isFocusable(e.target) && !e.defaultPrevented) {\n hide();\n }\n }\n\n watchEffect(() => {\n if(expanded.value) {\n window.addEventListener('resize', update);\n }\n else {\n window.removeEventListener('resize', update);\n }\n });\n\n return {\n target,\n menu,\n alignment,\n expanded,\n floatingStyles,\n placement,\n side,\n classes,\n buttonClasses,\n show,\n hide,\n toggle,\n onBlur,\n onClick,\n onClickToggle,\n onClickItem\n };\n}","<script setup lang=\"ts\">\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { BtnDropdownEvents, BtnDropdownProps, useDropdownHandler } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<BtnDropdownProps>(), {\n caret: true,\n variant: 'btn-primary'\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n\nconst {\n target,\n menu,\n buttonClasses,\n classes,\n expanded,\n floatingStyles,\n onBlur,\n onClickToggle,\n onClickItem\n} = useDropdownHandler(props, emit);\n</script>\n\n<template>\n <div\n class=\"btn-group\"\n :class=\"classes\">\n <slot\n name=\"button\"\n v-bind=\"{ target: (el: HTMLElement) => target = el, expanded, onBlur, onClickToggle }\">\n <button\n ref=\"target\"\n type=\"button\"\n :class=\"{...buttonClasses, ['dropdown-toggle']: true}\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClickToggle\">\n {{ label }}\n </button>\n </slot>\n <DropdownMenu\n ref=\"menu\"\n :class=\"{\n 'show': expanded\n }\"\n :style=\"floatingStyles\"\n @blur=\"onBlur\"\n @click=\"onClickItem\"\n @mousedown.prevent>\n <slot />\n </DropdownMenu>\n </div>\n</template>","<script setup lang=\"ts\">\nimport { DropdownMenu } from '@vue-interface/dropdown-menu';\nimport { BtnDropdownEvents, BtnDropdownProps, useDropdownHandler } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<BtnDropdownProps>(), {\n caret: true,\n variant: 'btn-primary'\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n\nconst {\n target,\n menu,\n buttonClasses,\n classes,\n expanded,\n floatingStyles,\n onBlur,\n onClick,\n onClickToggle,\n onClickItem\n} = useDropdownHandler(props, emit);\n</script>\n\n<template>\n <div\n class=\"btn-group btn-dropdown-split\"\n :class=\"classes\">\n <slot\n v-if=\"!dropleft\"\n name=\"button\"\n v-bind=\"{ expanded, onBlur, onClickToggle }\">\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClick\">\n {{ label }}\n </button>\n </slot>\n <div class=\"btn-group\">\n <slot\n name=\"toggle\"\n v-bind=\"{ target: (el: HTMLElement) => target = el, expanded, onBlur, onClickToggle }\">\n <button\n ref=\"target\"\n type=\"button\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n :class=\"{...buttonClasses, 'dropdown-toggle': true, 'dropdown-toggle-split': split}\"\n @blur=\"onBlur\"\n @click=\"onClickToggle\" />\n </slot>\n <DropdownMenu\n ref=\"menu\"\n :class=\"{\n 'show': expanded\n }\"\n :style=\"floatingStyles\"\n @blur=\"onBlur\"\n @click=\"onClickItem\"\n @mousedown.prevent>\n <slot />\n </DropdownMenu>\n </div>\n <slot\n v-if=\"dropleft\"\n name=\"button\"\n v-bind=\"{ expanded, onBlur, onClickToggle }\">\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n aria-haspopup=\"true\"\n :aria-expanded=\"expanded\"\n @blur=\"onBlur\"\n @click=\"onClick\">\n {{ label }}\n </button>\n </slot>\n </div>\n</template>","<script setup lang=\"ts\">\nimport BtnDropdownSingle from './BtnDropdownSingle.vue';\nimport BtnDropdownSplit from './BtnDropdownSplit.vue';\nimport { BtnDropdownEvents, BtnDropdownProps } from './useDropdownHandler';\n\nconst props = withDefaults(defineProps<{\n split?: boolean\n} & BtnDropdownProps>(), {\n split: false,\n caret: true\n});\n\nconst emit = defineEmits<BtnDropdownEvents>();\n</script>\n\n<template>\n <Component\n :is=\"!split ? BtnDropdownSingle : BtnDropdownSplit\"\n v-bind=\"props\"\n @click=\"(e: MouseEvent) => emit('click', e)\"\n @click-toggle=\"(e: MouseEvent) => emit('clickToggle', e)\"\n @show=\"() => emit('show')\"\n @hide=\"() => emit('hide')\">\n <template #button=\"slot\">\n <slot\n name=\"button\"\n v-bind=\"slot\" />\n </template>\n <template #toggle=\"slot\">\n <slot\n name=\"toggle\"\n v-bind=\"slot\" />\n </template>\n <template #split=\"slot\">\n <slot\n name=\"split\"\n v-bind=\"slot\" />\n </template>\n <slot />\n </Component>\n</template>"],"names":["useDropdownHandler","props","emit","target","ref","menu","expanded","alignment","computed","side","placement","classes","buttonClasses","value","floatingStyles","update","useFloating","offset","flip","show","hide","toggle","isFocusable","element","nodes","i","onBlur","e","onClick","onClickToggle","onClickItem","watchEffect","__props","__emit","_createElementBlock","_normalizeClass","_unref","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps","el","_createElementVNode","_cache","args","_hoisted_1","_createVNode","DropdownMenu","_hoisted_2","_hoisted_4","_createBlock","_resolveDynamicComponent","BtnDropdownSplit","BtnDropdownSingle","_mergeProps","_withCtx","slot"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue-interface/btn-dropdown",
3
- "version": "4.0.5",
3
+ "version": "4.0.6",
4
4
  "description": "A Vue button dropdown component.",
5
5
  "type": "module",
6
6
  "main": "./dist/btn-dropdown.umd.js",
@@ -17,10 +17,10 @@ const emit = defineEmits<BtnDropdownEvents>();
17
17
  <Component
18
18
  :is="!split ? BtnDropdownSingle : BtnDropdownSplit"
19
19
  v-bind="props"
20
- @click="(...args) => emit('click', ...args)"
21
- @click-toggle="(...args) => emit('clickToggle', ...args)"
22
- @show="(...args) => emit('show', ...args)"
23
- @hide="(...args) => emit('hide', ...args)">
20
+ @click="(e: MouseEvent) => emit('click', e)"
21
+ @click-toggle="(e: MouseEvent) => emit('clickToggle', e)"
22
+ @show="() => emit('show')"
23
+ @hide="() => emit('hide')">
24
24
  <template #button="slot">
25
25
  <slot
26
26
  name="button"