@night-owl-elite/vue-select 1.0.0 → 1.2.0

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.
@@ -1,6 +1,6 @@
1
- import { computed as C, resolveComponent as ne, createElementBlock as u, openBlock as d, createElementVNode as S, createCommentVNode as w, normalizeStyle as ie, normalizeClass as T, createBlock as L, unref as I, withModifiers as D, renderSlot as N, Fragment as J, renderList as Q, withCtx as W, ref as A, onMounted as se, onUnmounted as ae, watch as oe, toDisplayString as z, withDirectives as de, vModelText as re, createVNode as U, createTextVNode as G, nextTick as H } from "vue";
1
+ import { computed as C, resolveComponent as ne, createElementBlock as u, openBlock as d, createElementVNode as S, createCommentVNode as w, normalizeStyle as ie, normalizeClass as K, createBlock as L, unref as V, withModifiers as D, renderSlot as N, Fragment as J, renderList as Q, withCtx as W, ref as A, onMounted as se, onUnmounted as ae, watch as oe, toDisplayString as z, withDirectives as de, vModelText as re, createVNode as U, createTextVNode as G, nextTick as H } from "vue";
2
2
  import { createPopper as ce } from "@popperjs/core";
3
- import { FontAwesomeIcon as V } from "@fortawesome/vue-fontawesome";
3
+ import { FontAwesomeIcon as I } from "@fortawesome/vue-fontawesome";
4
4
  const X = (t, B) => {
5
5
  const l = t.__vccOpts || t;
6
6
  for (const [m, f] of B)
@@ -38,17 +38,17 @@ const X = (t, B) => {
38
38
  const x = ne("TreeSelectItem", !0);
39
39
  return d(), u("div", ue, [
40
40
  S("div", {
41
- class: T(["list-group-item list-group-item-action d-flex align-items-center gap-2", {
41
+ class: K(["list-group-item list-group-item-action d-flex align-items-center gap-2", {
42
42
  "bg-primary": v.value,
43
43
  disabled: f(t.item)
44
44
  }]),
45
45
  style: ie({ "padding-left": `${t.level * 1.5 + 1}rem` }),
46
46
  onClick: a[2] || (a[2] = (c) => o.$emit("select", t.item))
47
47
  }, [
48
- y.value ? (d(), L(I(V), {
48
+ y.value ? (d(), L(V(I), {
49
49
  key: 0,
50
50
  icon: "chevron-right",
51
- class: T(["expander-icon", { "rotate-90": p.value }]),
51
+ class: K(["expander-icon", { "rotate-90": p.value }]),
52
52
  onClick: a[0] || (a[0] = D((c) => o.$emit("toggle-expand", m(t.item)), ["stop"]))
53
53
  }, null, 8, ["class"])) : (d(), u("span", me)),
54
54
  t.multiple && t.selectMode === "checkbox" ? (d(), u("input", {
@@ -101,11 +101,11 @@ const X = (t, B) => {
101
101
  }, we = {
102
102
  key: 1,
103
103
  class: "p-4 text-muted text-center"
104
- }, Ie = {
104
+ }, Ve = {
105
105
  key: 2,
106
106
  class: "tree-select-body",
107
107
  style: { "max-height": "300px", "overflow-y": "auto" }
108
- }, Ve = {
108
+ }, Ie = {
109
109
  key: 0,
110
110
  class: "list-group list-group-flush"
111
111
  }, Le = { class: "d-flex align-items-center gap-2" }, Ce = {
@@ -202,7 +202,7 @@ const X = (t, B) => {
202
202
  }
203
203
  }
204
204
  return null;
205
- }, K = C(() => {
205
+ }, T = C(() => {
206
206
  const e = new Set(Array.isArray(l.modelValue) ? l.modelValue : [l.modelValue].filter(Boolean));
207
207
  if (l.multiple && l.selectAll) {
208
208
  const i = (n) => {
@@ -216,12 +216,12 @@ const X = (t, B) => {
216
216
  i(l.items);
217
217
  }
218
218
  return Array.from(e);
219
- }), M = (e, i = l.items, n = []) => {
219
+ }), q = (e, i = l.items, n = []) => {
220
220
  for (const s of i) {
221
221
  const r = [...n, o(s)];
222
222
  if (a(s) === e) return r;
223
223
  if (c(s)) {
224
- const h = M(e, s.children, r);
224
+ const h = q(e, s.children, r);
225
225
  if (h) return h;
226
226
  }
227
227
  }
@@ -235,21 +235,21 @@ const X = (t, B) => {
235
235
  if (e.length === 0) return l.placeholder;
236
236
  if (l.multiple) {
237
237
  if (e.length === 1) {
238
- const n = M(e[0]);
238
+ const n = q(e[0]);
239
239
  return n ? F(n) : e[0];
240
240
  }
241
241
  return `${e.length} items selected`;
242
242
  }
243
- const i = M(e[0]);
243
+ const i = q(e[0]);
244
244
  return i ? F(i) : e[0];
245
245
  }), R = (e, i) => e.map((n) => {
246
246
  const s = o(n).toLowerCase().includes(i);
247
247
  let r = [];
248
248
  return c(n) && (r = R(n.children, i)), s || r.length > 0 ? { ...n, children: r } : null;
249
- }).filter(Boolean), q = C(() => p.value.trim() ? R(l.items, p.value.toLowerCase()) : l.items), Z = (e) => {
249
+ }).filter(Boolean), M = C(() => p.value.trim() ? R(l.items, p.value.toLowerCase()) : l.items), Z = (e) => {
250
250
  if (x(e)) return;
251
251
  const i = a(e);
252
- let n = new Set(K.value);
252
+ let n = new Set(T.value);
253
253
  if (l.multiple) {
254
254
  const r = n.has(i);
255
255
  if (l.selectAll && c(e)) {
@@ -293,14 +293,14 @@ const X = (t, B) => {
293
293
  c(s) && (b.value.add(a(s)), i(s.children));
294
294
  });
295
295
  };
296
- i(q.value);
296
+ i(M.value);
297
297
  }
298
298
  }), (e, i) => (d(), u("div", ye, [
299
299
  S("button", {
300
300
  ref_key: "triggerRef",
301
301
  ref: y,
302
302
  type: "button",
303
- class: T(["btn tree-select-trigger w-100 d-flex justify-content-between align-items-center tree-select-main sm", {
303
+ class: K(["btn tree-select-trigger w-100 d-flex justify-content-between align-items-center tree-select-main sm", {
304
304
  "btn-outline-secondary": !t.isInvalid,
305
305
  "border-danger": t.isInvalid,
306
306
  disabled: t.disabled || t.isLoading,
@@ -311,22 +311,22 @@ const X = (t, B) => {
311
311
  }, [
312
312
  S("span", xe, z(Y.value), 1),
313
313
  S("div", ke, [
314
- t.isLoading ? (d(), L(I(V), {
314
+ t.isLoading ? (d(), L(V(I), {
315
315
  key: 0,
316
316
  icon: "spinner",
317
317
  spin: "",
318
318
  class: "loading-icon"
319
319
  })) : w("", !0),
320
- t.showClearButton && K.value.length > 0 && !t.disabled && !t.isLoading ? (d(), L(I(V), {
320
+ t.showClearButton && T.value.length > 0 && !t.disabled && !t.isLoading ? (d(), L(V(I), {
321
321
  key: 1,
322
322
  icon: "times",
323
323
  onClick: D(ee, ["stop"]),
324
324
  class: "clear-icon"
325
325
  })) : w("", !0),
326
- t.isLoading ? w("", !0) : (d(), L(I(V), {
326
+ t.isLoading ? w("", !0) : (d(), L(V(I), {
327
327
  key: 2,
328
328
  icon: "chevron-down",
329
- class: T(["transition-transform", { "rotate-180": v.value }])
329
+ class: K(["transition-transform", { "rotate-180": v.value }])
330
330
  }, null, 8, ["class"]))
331
331
  ])
332
332
  ], 10, be),
@@ -348,19 +348,19 @@ const X = (t, B) => {
348
348
  ])
349
349
  ])) : w("", !0),
350
350
  t.isLoading ? (d(), u("div", we, [
351
- U(I(V), {
351
+ U(V(I), {
352
352
  icon: "spinner",
353
353
  spin: "",
354
354
  class: "me-2"
355
355
  }),
356
356
  i[1] || (i[1] = S("span", null, "Loading...", -1))
357
- ])) : (d(), u("div", Ie, [
358
- q.value.length > 0 ? (d(), u("div", Ve, [
359
- (d(!0), u(J, null, Q(q.value, (n) => (d(), L(ge, {
357
+ ])) : (d(), u("div", Ve, [
358
+ M.value.length > 0 ? (d(), u("div", Ie, [
359
+ (d(!0), u(J, null, Q(M.value, (n) => (d(), L(ge, {
360
360
  key: a(n),
361
361
  item: n,
362
362
  level: 0,
363
- "selected-items": K.value,
363
+ "selected-items": T.value,
364
364
  "expanded-items": b.value,
365
365
  multiple: t.multiple,
366
366
  "select-all": t.selectAll,
@@ -378,7 +378,7 @@ const X = (t, B) => {
378
378
  }, () => [
379
379
  S("div", Le, [
380
380
  G(z(o(s)) + " ", 1),
381
- s.icon ? (d(), L(I(V), {
381
+ s.icon ? (d(), L(V(I), {
382
382
  key: 0,
383
383
  icon: s.icon
384
384
  }, null, 8, ["icon"])) : w("", !0)
@@ -388,19 +388,19 @@ const X = (t, B) => {
388
388
  _: 2
389
389
  }, 1032, ["item", "selected-items", "expanded-items", "multiple", "select-all", "select-mode", "option-label", "option-value", "disabled-key"]))), 128))
390
390
  ])) : (d(), u("div", Ce, [
391
- U(I(V), { icon: "search" }),
391
+ U(V(I), { icon: "search" }),
392
392
  i[2] || (i[2] = G(" No items found ", -1))
393
393
  ]))
394
394
  ]))
395
395
  ], 512)) : w("", !0)
396
396
  ]));
397
397
  }
398
- }, Ae = /* @__PURE__ */ X($e, [["__scopeId", "data-v-9f38e289"]]), Ke = {
398
+ }, Ae = /* @__PURE__ */ X($e, [["__scopeId", "data-v-9f38e289"]]), Te = {
399
399
  install(t) {
400
- t.component("TreeSelectMain", Ae);
400
+ t.component("VSelect", Ae);
401
401
  }
402
402
  };
403
403
  export {
404
- Ae as TreeSelectMain,
405
- Ke as default
404
+ Ae as VSelect,
405
+ Te as default
406
406
  };
@@ -1 +1 @@
1
- (function(u,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@popperjs/core"),require("@fortawesome/vue-fontawesome")):typeof define=="function"&&define.amd?define(["exports","vue","@popperjs/core","@fortawesome/vue-fontawesome"],e):(u=typeof globalThis<"u"?globalThis:u||self,e(u.VueSelect={},u.Vue,u.Popper,u.VueFontAwesome))})(this,function(u,e,P,S){"use strict";const N=(l,w)=>{const n=l.__vccOpts||l;for(const[m,f]of w)n[m]=f;return n},D={class:"tree-select-item-wrapper"},O={key:1,class:"expander-placeholder"},j=["checked",".indeterminate","disabled"],F={class:"item-content text-truncate"},z={key:0,class:"children-wrapper"},R=N({__name:"TreeSelectItem",props:{item:{type:Object,required:!0},level:{type:Number,required:!0},selectedItems:{type:Array,required:!0},expandedItems:{type:Set,required:!0},multiple:{type:Boolean,required:!0},selectAll:{type:Boolean,required:!0},selectMode:{type:String,required:!0},optionLabel:{type:String,required:!0},optionValue:{type:String,required:!0},disabledKey:{type:String,default:null}},emits:["select","toggle-expand"],setup(l,{emit:w}){const n=l,m=r=>r[n.optionValue]||r.id||r.value,f=r=>!n.disabledKey||!r?!1:r.hasOwnProperty(n.disabledKey)&&r[n.disabledKey]!==null,k=e.computed(()=>n.item.children&&n.item.children.length>0),h=e.computed(()=>n.expandedItems.has(m(n.item))),g=e.computed(()=>n.selectedItems.includes(m(n.item))),b=r=>{let s=[];return r.children&&r.children.forEach(B=>{s.push(m(B)),s.push(...b(B))}),s},V=e.computed(()=>!n.multiple||!n.selectAll||!k.value||g.value?!1:b(n.item).some(s=>n.selectedItems.includes(s)));return(r,s)=>{const B=e.resolveComponent("TreeSelectItem",!0);return e.openBlock(),e.createElementBlock("div",D,[e.createElementVNode("div",{class:e.normalizeClass(["list-group-item list-group-item-action d-flex align-items-center gap-2",{"bg-primary":g.value,disabled:f(l.item)}]),style:e.normalizeStyle({"padding-left":`${l.level*1.5+1}rem`}),onClick:s[2]||(s[2]=d=>r.$emit("select",l.item))},[k.value?(e.openBlock(),e.createBlock(e.unref(S.FontAwesomeIcon),{key:0,icon:"chevron-right",class:e.normalizeClass(["expander-icon",{"rotate-90":h.value}]),onClick:s[0]||(s[0]=e.withModifiers(d=>r.$emit("toggle-expand",m(l.item)),["stop"]))},null,8,["class"])):(e.openBlock(),e.createElementBlock("span",O)),l.multiple&&l.selectMode==="checkbox"?(e.openBlock(),e.createElementBlock("input",{key:2,type:"checkbox",class:"form-check-input",checked:g.value,".indeterminate":V.value,disabled:f(l.item),onClick:s[1]||(s[1]=e.withModifiers(d=>r.$emit("select",l.item),["stop"]))},null,40,j)):e.createCommentVNode("",!0),e.createElementVNode("div",F,[e.renderSlot(r.$slots,"default",{item:l.item,level:l.level},void 0,!0)])],6),k.value&&h.value?(e.openBlock(),e.createElementBlock("div",z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.item.children,d=>(e.openBlock(),e.createBlock(B,{key:m(d),item:d,level:l.level+1,"selected-items":l.selectedItems,"expanded-items":l.expandedItems,multiple:l.multiple,"select-all":l.selectAll,"select-mode":l.selectMode,"option-label":l.optionLabel,"option-value":l.optionValue,"disabled-key":l.disabledKey,onSelect:s[3]||(s[3]=x=>r.$emit("select",x)),onToggleExpand:s[4]||(s[4]=x=>r.$emit("toggle-expand",x))},{default:e.withCtx(({item:x,level:E})=>[e.renderSlot(r.$slots,"default",{item:x,level:E},void 0,!0)]),_:2},1032,["item","level","selected-items","expanded-items","multiple","select-all","select-mode","option-label","option-value","disabled-key"]))),128))])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-303c37e7"]]),U={class:"tree-select-wrapper"},G=["disabled"],H={class:"tree-select-display-text text-truncate me-2 text-start"},J={class:"d-flex align-items-center gap-2"},Q={key:0,class:"p-2 border-bottom"},W={key:1,class:"p-4 text-muted text-center"},X={key:2,class:"tree-select-body",style:{"max-height":"300px","overflow-y":"auto"}},Y={key:0,class:"list-group list-group-flush"},Z={class:"d-flex align-items-center gap-2"},v={key:1,class:"p-3 text-muted text-center"},$=N({__name:"TreeSelectMain",props:{modelValue:{type:[String,Number,Array],default:null},items:{type:Array,default:()=>[]},multiple:{type:Boolean,default:!1},selectMode:{type:String,default:"checkbox",validator:l=>["checkbox","highlight"].includes(l)},placeholder:{type:String,default:"Select item..."},isInvalid:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},searchable:{type:Boolean,default:!0},isLoading:{type:Boolean,default:!1},showClearButton:{type:Boolean,default:!0},selectAll:{type:Boolean,default:!1},optionLabel:{type:String,default:"value"},optionValue:{type:String,default:"code"},disabledKey:{type:String,default:null},excludeFromSelectedListKey:{type:String,default:null}},emits:["update:modelValue","change"],setup(l,{emit:w}){const n=l,m=w,f=e.ref(null),k=e.ref(null),h=e.ref(""),g=e.ref(!1),b=e.ref(new Set),V=e.ref(null),r=t=>t[n.optionLabel]||t.label||t.name||"",s=t=>t[n.optionValue]||t.id||t.value,B=t=>!n.disabledKey||!t?!1:t.hasOwnProperty(n.disabledKey)&&t[n.disabledKey]!==null,d=t=>t.children&&t.children.length>0,x=(t,i=n.items)=>{for(const o of i){if(s(o)===t)return o;if(d(o)){const a=x(t,o.children);if(a)return a}}return null},E=t=>{const i=[];return d(t)&&t.children.forEach(o=>{B(o)||(i.push(s(o)),i.push(...E(o)))}),i},T=(t,i=n.items,o=[])=>{for(const a of i){if(s(a)===t)return o;if(d(a)){const c=T(t,a.children,[...o,s(a)]);if(c)return c}}return null},I=e.computed(()=>{const t=new Set(Array.isArray(n.modelValue)?n.modelValue:[n.modelValue].filter(Boolean));if(n.multiple&&n.selectAll){const i=o=>{o.forEach(a=>{if(d(a)){const c=a.children.filter(y=>!B(y));c.length>0&&c.every(y=>t.has(s(y)))&&t.add(s(a)),i(a.children)}})};i(n.items)}return Array.from(t)}),C=(t,i=n.items,o=[])=>{for(const a of i){const c=[...o,r(a)];if(s(a)===t)return c;if(d(a)){const p=C(t,a.children,c);if(p)return p}}return null},M=t=>{if(!t||t.length===0)return"";const i=t.join(" → ");return i.length<=40?i:t.length>2?`${t[0]} → ... → ${t[t.length-1]}`:i},ee=e.computed(()=>{const t=Array.isArray(n.modelValue)?n.modelValue:[n.modelValue].filter(Boolean);if(t.length===0)return n.placeholder;if(n.multiple){if(t.length===1){const o=C(t[0]);return o?M(o):t[0]}return`${t.length} items selected`}const i=C(t[0]);return i?M(i):t[0]}),q=(t,i)=>t.map(o=>{const a=r(o).toLowerCase().includes(i);let c=[];return d(o)&&(c=q(o.children,i)),a||c.length>0?{...o,children:c}:null}).filter(Boolean),A=e.computed(()=>h.value.trim()?q(n.items,h.value.toLowerCase()):n.items),te=t=>{if(B(t))return;const i=s(t);let o=new Set(I.value);if(n.multiple){const c=o.has(i);if(n.selectAll&&d(t)){const p=E(t);c?(o.delete(i),p.forEach(y=>o.delete(y))):(o.add(i),p.forEach(y=>o.add(y)))}else c?(o.delete(i),n.selectAll&&T(i)?.forEach(y=>o.delete(y))):o.add(i)}else o=new Set([i]),L();let a=Array.from(o);n.multiple&&n.excludeFromSelectedListKey&&(a=a.filter(c=>{const p=x(c);return!p||!p[n.excludeFromSelectedListKey]})),m("update:modelValue",n.multiple?a:a[0]||null),m("change",n.multiple?a:a[0]||null)},le=t=>{b.value.has(t)?b.value.delete(t):b.value.add(t)},ne=()=>{const t=n.multiple?[]:null;m("update:modelValue",t),m("change",t)},oe=async()=>{n.disabled||(g.value=!0,await e.nextTick(),f.value&&k.value&&(V.value=P.createPopper(k.value,f.value,{placement:"bottom-start",strategy:"fixed",modifiers:[{name:"offset",options:{offset:[0,4]}},{name:"preventOverflow",options:{padding:8}},{name:"flip",options:{fallbackPlacements:["top-start"]}}]})),n.searchable&&(await e.nextTick(),f.value?.querySelector(".tree-search-input")?.focus()))},L=()=>{g.value=!1,h.value="",V.value?.destroy(),V.value=null},ie=()=>g.value?L():oe(),K=t=>{!k.value?.contains(t.target)&&!f.value?.contains(t.target)&&L()};return e.onMounted(()=>document.addEventListener("click",K)),e.onUnmounted(()=>{document.removeEventListener("click",K),V.value?.destroy()}),e.watch(h,t=>{if(t.trim()){const i=o=>{o.forEach(a=>{d(a)&&(b.value.add(s(a)),i(a.children))})};i(A.value)}}),(t,i)=>(e.openBlock(),e.createElementBlock("div",U,[e.createElementVNode("button",{ref_key:"triggerRef",ref:k,type:"button",class:e.normalizeClass(["btn tree-select-trigger w-100 d-flex justify-content-between align-items-center tree-select-main sm",{"btn-outline-secondary":!l.isInvalid,"border-danger":l.isInvalid,disabled:l.disabled||l.isLoading,"is-loading":l.isLoading}]),disabled:l.disabled||l.isLoading,onClick:ie},[e.createElementVNode("span",H,e.toDisplayString(ee.value),1),e.createElementVNode("div",J,[l.isLoading?(e.openBlock(),e.createBlock(e.unref(S.FontAwesomeIcon),{key:0,icon:"spinner",spin:"",class:"loading-icon"})):e.createCommentVNode("",!0),l.showClearButton&&I.value.length>0&&!l.disabled&&!l.isLoading?(e.openBlock(),e.createBlock(e.unref(S.FontAwesomeIcon),{key:1,icon:"times",onClick:e.withModifiers(ne,["stop"]),class:"clear-icon"})):e.createCommentVNode("",!0),l.isLoading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(S.FontAwesomeIcon),{key:2,icon:"chevron-down",class:e.normalizeClass(["transition-transform",{"rotate-180":g.value}])},null,8,["class"]))])],10,G),g.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:f,class:"tree-select-dropdown card shadow-lg border-0",style:{"z-index":"1050","min-width":"200px","max-width":"400px"}},[l.searchable?(e.openBlock(),e.createElementBlock("div",Q,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":i[0]||(i[0]=o=>h.value=o),type:"text",class:"form-control form-control-sm tree-search-input",placeholder:"Search..."},null,512),[[e.vModelText,h.value]])])):e.createCommentVNode("",!0),l.isLoading?(e.openBlock(),e.createElementBlock("div",W,[e.createVNode(e.unref(S.FontAwesomeIcon),{icon:"spinner",spin:"",class:"me-2"}),i[1]||(i[1]=e.createElementVNode("span",null,"Loading...",-1))])):(e.openBlock(),e.createElementBlock("div",X,[A.value.length>0?(e.openBlock(),e.createElementBlock("div",Y,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,o=>(e.openBlock(),e.createBlock(R,{key:s(o),item:o,level:0,"selected-items":I.value,"expanded-items":b.value,multiple:l.multiple,"select-all":l.selectAll,"select-mode":l.selectMode,"option-label":l.optionLabel,"option-value":l.optionValue,"disabled-key":l.disabledKey,onSelect:te,onToggleExpand:le},{default:e.withCtx(({item:a,level:c})=>[e.renderSlot(t.$slots,"default",{item:a,level:c},()=>[e.createElementVNode("div",Z,[e.createTextVNode(e.toDisplayString(r(a))+" ",1),a.icon?(e.openBlock(),e.createBlock(e.unref(S.FontAwesomeIcon),{key:0,icon:a.icon},null,8,["icon"])):e.createCommentVNode("",!0)])],!0)]),_:2},1032,["item","selected-items","expanded-items","multiple","select-all","select-mode","option-label","option-value","disabled-key"]))),128))])):(e.openBlock(),e.createElementBlock("div",v,[e.createVNode(e.unref(S.FontAwesomeIcon),{icon:"search"}),i[2]||(i[2]=e.createTextVNode(" No items found ",-1))]))]))],512)):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-9f38e289"]]),_={install(l){l.component("TreeSelectMain",$)}};u.TreeSelectMain=$,u.default=_,Object.defineProperties(u,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(u,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@popperjs/core"),require("@fortawesome/vue-fontawesome")):typeof define=="function"&&define.amd?define(["exports","vue","@popperjs/core","@fortawesome/vue-fontawesome"],e):(u=typeof globalThis<"u"?globalThis:u||self,e(u.VueSelect={},u.Vue,u.Popper,u.VueFontAwesome))})(this,function(u,e,P,x){"use strict";const N=(l,w)=>{const n=l.__vccOpts||l;for(const[m,f]of w)n[m]=f;return n},D={class:"tree-select-item-wrapper"},O={key:1,class:"expander-placeholder"},j=["checked",".indeterminate","disabled"],F={class:"item-content text-truncate"},z={key:0,class:"children-wrapper"},R=N({__name:"TreeSelectItem",props:{item:{type:Object,required:!0},level:{type:Number,required:!0},selectedItems:{type:Array,required:!0},expandedItems:{type:Set,required:!0},multiple:{type:Boolean,required:!0},selectAll:{type:Boolean,required:!0},selectMode:{type:String,required:!0},optionLabel:{type:String,required:!0},optionValue:{type:String,required:!0},disabledKey:{type:String,default:null}},emits:["select","toggle-expand"],setup(l,{emit:w}){const n=l,m=r=>r[n.optionValue]||r.id||r.value,f=r=>!n.disabledKey||!r?!1:r.hasOwnProperty(n.disabledKey)&&r[n.disabledKey]!==null,k=e.computed(()=>n.item.children&&n.item.children.length>0),h=e.computed(()=>n.expandedItems.has(m(n.item))),g=e.computed(()=>n.selectedItems.includes(m(n.item))),b=r=>{let s=[];return r.children&&r.children.forEach(B=>{s.push(m(B)),s.push(...b(B))}),s},S=e.computed(()=>!n.multiple||!n.selectAll||!k.value||g.value?!1:b(n.item).some(s=>n.selectedItems.includes(s)));return(r,s)=>{const B=e.resolveComponent("TreeSelectItem",!0);return e.openBlock(),e.createElementBlock("div",D,[e.createElementVNode("div",{class:e.normalizeClass(["list-group-item list-group-item-action d-flex align-items-center gap-2",{"bg-primary":g.value,disabled:f(l.item)}]),style:e.normalizeStyle({"padding-left":`${l.level*1.5+1}rem`}),onClick:s[2]||(s[2]=d=>r.$emit("select",l.item))},[k.value?(e.openBlock(),e.createBlock(e.unref(x.FontAwesomeIcon),{key:0,icon:"chevron-right",class:e.normalizeClass(["expander-icon",{"rotate-90":h.value}]),onClick:s[0]||(s[0]=e.withModifiers(d=>r.$emit("toggle-expand",m(l.item)),["stop"]))},null,8,["class"])):(e.openBlock(),e.createElementBlock("span",O)),l.multiple&&l.selectMode==="checkbox"?(e.openBlock(),e.createElementBlock("input",{key:2,type:"checkbox",class:"form-check-input",checked:g.value,".indeterminate":S.value,disabled:f(l.item),onClick:s[1]||(s[1]=e.withModifiers(d=>r.$emit("select",l.item),["stop"]))},null,40,j)):e.createCommentVNode("",!0),e.createElementVNode("div",F,[e.renderSlot(r.$slots,"default",{item:l.item,level:l.level},void 0,!0)])],6),k.value&&h.value?(e.openBlock(),e.createElementBlock("div",z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.item.children,d=>(e.openBlock(),e.createBlock(B,{key:m(d),item:d,level:l.level+1,"selected-items":l.selectedItems,"expanded-items":l.expandedItems,multiple:l.multiple,"select-all":l.selectAll,"select-mode":l.selectMode,"option-label":l.optionLabel,"option-value":l.optionValue,"disabled-key":l.disabledKey,onSelect:s[3]||(s[3]=V=>r.$emit("select",V)),onToggleExpand:s[4]||(s[4]=V=>r.$emit("toggle-expand",V))},{default:e.withCtx(({item:V,level:E})=>[e.renderSlot(r.$slots,"default",{item:V,level:E},void 0,!0)]),_:2},1032,["item","level","selected-items","expanded-items","multiple","select-all","select-mode","option-label","option-value","disabled-key"]))),128))])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-303c37e7"]]),U={class:"tree-select-wrapper"},G=["disabled"],H={class:"tree-select-display-text text-truncate me-2 text-start"},J={class:"d-flex align-items-center gap-2"},Q={key:0,class:"p-2 border-bottom"},W={key:1,class:"p-4 text-muted text-center"},X={key:2,class:"tree-select-body",style:{"max-height":"300px","overflow-y":"auto"}},Y={key:0,class:"list-group list-group-flush"},Z={class:"d-flex align-items-center gap-2"},v={key:1,class:"p-3 text-muted text-center"},$=N({__name:"TreeSelectMain",props:{modelValue:{type:[String,Number,Array],default:null},items:{type:Array,default:()=>[]},multiple:{type:Boolean,default:!1},selectMode:{type:String,default:"checkbox",validator:l=>["checkbox","highlight"].includes(l)},placeholder:{type:String,default:"Select item..."},isInvalid:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},searchable:{type:Boolean,default:!0},isLoading:{type:Boolean,default:!1},showClearButton:{type:Boolean,default:!0},selectAll:{type:Boolean,default:!1},optionLabel:{type:String,default:"value"},optionValue:{type:String,default:"code"},disabledKey:{type:String,default:null},excludeFromSelectedListKey:{type:String,default:null}},emits:["update:modelValue","change"],setup(l,{emit:w}){const n=l,m=w,f=e.ref(null),k=e.ref(null),h=e.ref(""),g=e.ref(!1),b=e.ref(new Set),S=e.ref(null),r=t=>t[n.optionLabel]||t.label||t.name||"",s=t=>t[n.optionValue]||t.id||t.value,B=t=>!n.disabledKey||!t?!1:t.hasOwnProperty(n.disabledKey)&&t[n.disabledKey]!==null,d=t=>t.children&&t.children.length>0,V=(t,i=n.items)=>{for(const o of i){if(s(o)===t)return o;if(d(o)){const a=V(t,o.children);if(a)return a}}return null},E=t=>{const i=[];return d(t)&&t.children.forEach(o=>{B(o)||(i.push(s(o)),i.push(...E(o)))}),i},T=(t,i=n.items,o=[])=>{for(const a of i){if(s(a)===t)return o;if(d(a)){const c=T(t,a.children,[...o,s(a)]);if(c)return c}}return null},I=e.computed(()=>{const t=new Set(Array.isArray(n.modelValue)?n.modelValue:[n.modelValue].filter(Boolean));if(n.multiple&&n.selectAll){const i=o=>{o.forEach(a=>{if(d(a)){const c=a.children.filter(y=>!B(y));c.length>0&&c.every(y=>t.has(s(y)))&&t.add(s(a)),i(a.children)}})};i(n.items)}return Array.from(t)}),C=(t,i=n.items,o=[])=>{for(const a of i){const c=[...o,r(a)];if(s(a)===t)return c;if(d(a)){const p=C(t,a.children,c);if(p)return p}}return null},M=t=>{if(!t||t.length===0)return"";const i=t.join(" → ");return i.length<=40?i:t.length>2?`${t[0]} → ... → ${t[t.length-1]}`:i},ee=e.computed(()=>{const t=Array.isArray(n.modelValue)?n.modelValue:[n.modelValue].filter(Boolean);if(t.length===0)return n.placeholder;if(n.multiple){if(t.length===1){const o=C(t[0]);return o?M(o):t[0]}return`${t.length} items selected`}const i=C(t[0]);return i?M(i):t[0]}),q=(t,i)=>t.map(o=>{const a=r(o).toLowerCase().includes(i);let c=[];return d(o)&&(c=q(o.children,i)),a||c.length>0?{...o,children:c}:null}).filter(Boolean),A=e.computed(()=>h.value.trim()?q(n.items,h.value.toLowerCase()):n.items),te=t=>{if(B(t))return;const i=s(t);let o=new Set(I.value);if(n.multiple){const c=o.has(i);if(n.selectAll&&d(t)){const p=E(t);c?(o.delete(i),p.forEach(y=>o.delete(y))):(o.add(i),p.forEach(y=>o.add(y)))}else c?(o.delete(i),n.selectAll&&T(i)?.forEach(y=>o.delete(y))):o.add(i)}else o=new Set([i]),L();let a=Array.from(o);n.multiple&&n.excludeFromSelectedListKey&&(a=a.filter(c=>{const p=V(c);return!p||!p[n.excludeFromSelectedListKey]})),m("update:modelValue",n.multiple?a:a[0]||null),m("change",n.multiple?a:a[0]||null)},le=t=>{b.value.has(t)?b.value.delete(t):b.value.add(t)},ne=()=>{const t=n.multiple?[]:null;m("update:modelValue",t),m("change",t)},oe=async()=>{n.disabled||(g.value=!0,await e.nextTick(),f.value&&k.value&&(S.value=P.createPopper(k.value,f.value,{placement:"bottom-start",strategy:"fixed",modifiers:[{name:"offset",options:{offset:[0,4]}},{name:"preventOverflow",options:{padding:8}},{name:"flip",options:{fallbackPlacements:["top-start"]}}]})),n.searchable&&(await e.nextTick(),f.value?.querySelector(".tree-search-input")?.focus()))},L=()=>{g.value=!1,h.value="",S.value?.destroy(),S.value=null},ie=()=>g.value?L():oe(),K=t=>{!k.value?.contains(t.target)&&!f.value?.contains(t.target)&&L()};return e.onMounted(()=>document.addEventListener("click",K)),e.onUnmounted(()=>{document.removeEventListener("click",K),S.value?.destroy()}),e.watch(h,t=>{if(t.trim()){const i=o=>{o.forEach(a=>{d(a)&&(b.value.add(s(a)),i(a.children))})};i(A.value)}}),(t,i)=>(e.openBlock(),e.createElementBlock("div",U,[e.createElementVNode("button",{ref_key:"triggerRef",ref:k,type:"button",class:e.normalizeClass(["btn tree-select-trigger w-100 d-flex justify-content-between align-items-center tree-select-main sm",{"btn-outline-secondary":!l.isInvalid,"border-danger":l.isInvalid,disabled:l.disabled||l.isLoading,"is-loading":l.isLoading}]),disabled:l.disabled||l.isLoading,onClick:ie},[e.createElementVNode("span",H,e.toDisplayString(ee.value),1),e.createElementVNode("div",J,[l.isLoading?(e.openBlock(),e.createBlock(e.unref(x.FontAwesomeIcon),{key:0,icon:"spinner",spin:"",class:"loading-icon"})):e.createCommentVNode("",!0),l.showClearButton&&I.value.length>0&&!l.disabled&&!l.isLoading?(e.openBlock(),e.createBlock(e.unref(x.FontAwesomeIcon),{key:1,icon:"times",onClick:e.withModifiers(ne,["stop"]),class:"clear-icon"})):e.createCommentVNode("",!0),l.isLoading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(x.FontAwesomeIcon),{key:2,icon:"chevron-down",class:e.normalizeClass(["transition-transform",{"rotate-180":g.value}])},null,8,["class"]))])],10,G),g.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:f,class:"tree-select-dropdown card shadow-lg border-0",style:{"z-index":"1050","min-width":"200px","max-width":"400px"}},[l.searchable?(e.openBlock(),e.createElementBlock("div",Q,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":i[0]||(i[0]=o=>h.value=o),type:"text",class:"form-control form-control-sm tree-search-input",placeholder:"Search..."},null,512),[[e.vModelText,h.value]])])):e.createCommentVNode("",!0),l.isLoading?(e.openBlock(),e.createElementBlock("div",W,[e.createVNode(e.unref(x.FontAwesomeIcon),{icon:"spinner",spin:"",class:"me-2"}),i[1]||(i[1]=e.createElementVNode("span",null,"Loading...",-1))])):(e.openBlock(),e.createElementBlock("div",X,[A.value.length>0?(e.openBlock(),e.createElementBlock("div",Y,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,o=>(e.openBlock(),e.createBlock(R,{key:s(o),item:o,level:0,"selected-items":I.value,"expanded-items":b.value,multiple:l.multiple,"select-all":l.selectAll,"select-mode":l.selectMode,"option-label":l.optionLabel,"option-value":l.optionValue,"disabled-key":l.disabledKey,onSelect:te,onToggleExpand:le},{default:e.withCtx(({item:a,level:c})=>[e.renderSlot(t.$slots,"default",{item:a,level:c},()=>[e.createElementVNode("div",Z,[e.createTextVNode(e.toDisplayString(r(a))+" ",1),a.icon?(e.openBlock(),e.createBlock(e.unref(x.FontAwesomeIcon),{key:0,icon:a.icon},null,8,["icon"])):e.createCommentVNode("",!0)])],!0)]),_:2},1032,["item","selected-items","expanded-items","multiple","select-all","select-mode","option-label","option-value","disabled-key"]))),128))])):(e.openBlock(),e.createElementBlock("div",v,[e.createVNode(e.unref(x.FontAwesomeIcon),{icon:"search"}),i[2]||(i[2]=e.createTextVNode(" No items found ",-1))]))]))],512)):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-9f38e289"]]),_={install(l){l.component("VSelect",$)}};u.VSelect=$,u.default=_,Object.defineProperties(u,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@night-owl-elite/vue-select",
3
3
  "private": false,
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/vue-select.umd.js",
7
7
  "module": "./dist/vue-select.es.js",
@@ -10,6 +10,13 @@
10
10
  "build": "vite build",
11
11
  "preview": "vite preview"
12
12
  },
13
+ "exports": {
14
+ ".": {
15
+ "import": "./dist/vue-select.es.js",
16
+ "require": "./dist/vue-select.umd.js"
17
+ },
18
+ "./style.css": "./dist/vue-select.css"
19
+ },
13
20
  "files": [
14
21
  "dist"
15
22
  ],