dendelion-ui 0.0.4 → 0.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.
- package/dist/dendelion-ui.cjs.js +2 -2
- package/dist/dendelion-ui.es.js +385 -176
- package/dist/dendelion-ui.umd.js +2 -2
- package/dist/types/components/button/SimpleButton.vue.d.ts +2 -0
- package/dist/types/components/button/index.d.ts +3 -2
- package/dist/types/components/search/SearchBar.vue.d.ts +8 -4
- package/dist/types/components/table/Table.vue.d.ts +12 -9
- package/dist/types/components/table/index.d.ts +1 -1
- package/dist/types/components/table/interface.d.ts +10 -7
- package/package.json +6 -3
- package/src/components/button/Button.vue +3 -11
- package/src/components/button/SimpleButton.vue +8 -0
- package/src/components/button/index.ts +3 -2
- package/src/components/search/SearchBar.vue +4 -2
- package/src/components/table/Table.vue +81 -4
- package/src/components/table/index.ts +1 -1
- package/src/components/table/interface.ts +10 -7
package/dist/dendelion-ui.umd.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(p,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(p=typeof globalThis<"u"?globalThis:p||self,e(p.DendelionUI={},p.Vue))})(this,function(p,e){"use strict";var z=(t=>(t[t.Primary=0]="Primary",t[t.PrimaryContent=1]="PrimaryContent",t[t.Secondary=2]="Secondary",t[t.SecondaryContent=3]="SecondaryContent",t[t.Accent=4]="Accent",t[t.AccentContent=5]="AccentContent",t[t.Neutral=6]="Neutral",t[t.NeutralContent=7]="NeutralContent",t[t.Base100=8]="Base100",t[t.Base200=9]="Base200",t[t.Base300=10]="Base300",t[t.BaseContent=11]="BaseContent",t[t.Info=12]="Info",t[t.InfoContent=13]="InfoContent",t[t.Success=14]="Success",t[t.SuccessContent=15]="SuccessContent",t[t.Warning=16]="Warning",t[t.WarningContent=17]="WarningContent",t[t.Error=18]="Error",t[t.ErrorContent=19]="ErrorContent",t))(z||{});class P{static toClassName(n){switch(n){case 0:return"primary";case 1:return"primary-content";case 2:return"secondary";case 3:return"secondary-content";case 4:return"accent";case 5:return"accent-content";case 6:return"neutral";case 7:return"neutral-content";case 8:return"base-100";case 9:return"base-200";case 10:return"base-300";case 11:return"base-content";case 12:return"info";case 13:return"info-content";case 14:return"success";case 15:return"success-content";case 16:return"warning";case 17:return"warning-content";case 18:return"error";case 19:return"error-content";default:return"primary"}}}function A(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var T={exports:{}};/*!
|
|
2
2
|
Copyright (c) 2018 Jed Watson.
|
|
3
3
|
Licensed under the MIT License (MIT), see
|
|
4
4
|
http://jedwatson.github.io/classnames
|
|
5
|
-
*/var y;function k(){return y||(y=1,function(t){(function(){var n={}.hasOwnProperty;function r(){for(var a="",c=0;c<arguments.length;c++){var d=arguments[c];d&&(a=o(a,s(d)))}return a}function s(a){if(typeof a=="string"||typeof a=="number")return a;if(typeof a!="object")return"";if(Array.isArray(a))return r.apply(null,a);if(a.toString!==Object.prototype.toString&&!a.toString.toString().includes("[native code]"))return a.toString();var c="";for(var d in a)n.call(a,d)&&a[d]&&(c=o(c,d));return c}function o(a,c){return c?a?a+" "+c:a+c:a}t.exports?(r.default=r,t.exports=r):window.classNames=r})()}(b)),b.exports}var w=k();const p=B(w),S=["type"],x={class:"group-[.is-loading]:text-transparent"},E=e.defineComponent({__name:"Button",props:{type:{default:"button"},loading:{type:Boolean},color:{default:u.Neutral},click:{}},setup(t){const n=t,r=e.ref(p("btn","group",`btn-${m.toClassName(n.color)}`,n.loading?"is-loading":""));return e.watch(()=>n.loading,s=>{r.value=p("btn","group",`btn-${m.toClassName(n.color)}`,s?"is-loading":"")}),(s,o)=>(e.openBlock(),e.createElementBlock("button",{onClick:o[0]||(o[0]=(...a)=>s.click&&s.click(...a)),class:e.normalizeClass(r.value),type:s.type},[o[1]||(o[1]=e.createElementVNode("span",{class:"loading loading-spinner loading-md absolute hidden group-[.is-loading]:block"},null,-1)),e.createElementVNode("span",x,[e.renderSlot(s.$slots,"default")])],10,S))}});var _=(t=>(t[t.XS=0]="XS",t[t.SM=1]="SM",t[t.MD=2]="MD",t[t.LG=3]="LG",t[t.XL=4]="XL",t[t.TWOXL=5]="TWOXL",t[t.THREEXL=6]="THREEXL",t))(_||{});class g{static toClassName(n){switch(n){case 0:return"xs";case 1:return"sm";case 2:return"md";case 3:return"lg";case 4:return"xl";case 5:return"2xl";case 6:return"3xl";default:return"md"}}}const N=e.defineComponent({__name:"Card",props:{backgroundColor:{default:u.Primary},shadow:{type:Boolean,default:!1},fullWidth:{type:Boolean,default:!1},rounded:{type:Boolean},roundedSize:{}},setup(t){const n=t,r=e.ref(p("card",`bg-${n.backgroundColor}`,n.shadow?"shadow-lg":"",n.fullWidth?"w-full":"",n.rounded&&!n.roundedSize?"rounded":n.roundedSize?`rounded-${n.roundedSize}`:""));return(s,o)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(r.value)},[e.renderSlot(s.$slots,"default")],2))}}),h=(t,n)=>{const r=t.__vccOpts||t;for(const[s,o]of n)r[s]=o;return r},$={},C={class:"card-body"};function V(t,n){return e.openBlock(),e.createElementBlock("div",C,[e.renderSlot(t.$slots,"default")])}const M=h($,[["render",V]]),L=e.defineComponent({__name:"CardTitle",props:{is:{default:"h1"},text:{default:""}},setup(t){return(n,r)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.is),{class:"card-title"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.text),1)]),_:1}))}}),P=e.defineComponent({__name:"Container",props:{container:{type:Boolean,default:!0},padding:{type:Boolean,default:!0}},setup(t){const n=t,r=e.ref([n.container?"container":"",n.padding?"p-6":""]);return(s,o)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(r.value)},[e.renderSlot(s.$slots,"default")],2))}}),T=e.defineComponent({__name:"Table",props:{zebra:{type:Boolean,default:!1},pinRows:{type:Boolean,default:!1},pinCols:{type:Boolean,default:!1},size:{default:_.MD},columns:{},dataSource:{},ajax:{}},setup(t){const n=e.ref(null),r=t,s=e.ref(p("table",`table-${g.toClassName(r.size)}`,{"table-zebra":r.zebra,"table-pin-rows":r.pinRows,"table-pin-cols ":r.pinCols}));return(o,a)=>(e.openBlock(),e.createElementBlock("table",{ref_key:"table",ref:n,class:e.normalizeClass(s.value)},null,2))}}),j=e.defineComponent({__name:"Stepper",props:{value:{}},emits:["update:value"],setup(t,{expose:n,emit:r}){const s=t,o=e.ref(s.value),a=r,c=d=>{o.value=d,a("update:value",d)};return e.provide("stepper",{value:o,updateValue:c}),e.watch(()=>s.value,d=>{o.value=d}),n({updateValue:c}),(d,Y)=>e.renderSlot(d.$slots,"default",{updateValue:c})}}),z=e.defineComponent({__name:"Step",props:{value:{}},setup(t){const n=t,r=e.inject("stepper"),s=e.ref("");return e.watch(()=>r==null?void 0:r.value.value,o=>{o&&n.value&&(s.value=Number(o)>=Number(n.value)?"step-primary":"")}),e.onMounted(()=>{r&&(s.value=r.value.value===n.value?"step-primary":"",Number(r.value.value)>=Number(n.value)&&(s.value="step-primary"))}),(o,a)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass(["step",s.value])},[e.renderSlot(o.$slots,"default")],2))}}),O={},D={class:"steps"};function I(t,n){return e.openBlock(),e.createElementBlock("ul",D,[e.renderSlot(t.$slots,"default")])}const W=h(O,[["render",I]]),X={key:0},A=e.defineComponent({__name:"StepPanels",setup(t){const n=e.inject("stepper");return(r,s)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade",mode:"out-in"},{default:e.withCtx(()=>{var o,a;return[(o=e.unref(n))!=null&&o.value?(e.openBlock(),e.createElementBlock("div",X,[e.renderSlot(r.$slots,"default",{currentStep:(a=e.unref(n))==null?void 0:a.value})])):e.createCommentVNode("",!0)]}),_:3}))}}),U={key:0},R=e.defineComponent({__name:"StepPanel",props:{value:{}},setup(t,{expose:n}){const r=e.computed(()=>s==null?void 0:s.value.value),s=e.inject("stepper"),o=a=>{s&&s.updateValue(a.toString())};return n({activateCallback:o}),(a,c)=>a.value===r.value?(e.openBlock(),e.createElementBlock("div",U,[e.renderSlot(a.$slots,"default",{activateCallback:o})])):e.createCommentVNode("",!0)}}),K={className:"modal-box"},q={key:0,method:"dialog"},H=e.defineComponent({__name:"Modal",props:{closeButton:{type:Boolean,default:!0},overflow:{type:Boolean,default:!1}},emits:["close"],setup(t,{expose:n,emit:r}){const s=e.ref(null),o=r,a=t,c=e.ref(p("modal",{"overflow-visible":a.overflow}));return n({showModal:()=>{var i;(i=s.value)==null||i.showModal()},closeModal:()=>{var i;(i=s.value)==null||i.close()}}),(i,f)=>(e.openBlock(),e.createElementBlock("dialog",{ref_key:"modal",ref:s,class:e.normalizeClass(c.value),"aria-modal":"true","aria-hidden":"true",role:"dialog",onClose:f[0]||(f[0]=v=>o("close",v))},[e.createElementVNode("div",K,[i.closeButton?(e.openBlock(),e.createElementBlock("form",q,f[1]||(f[1]=[e.createElementVNode("button",{className:"btn btn-sm btn-circle btn-ghost absolute right-2 top-2"},"✕",-1)]))):e.createCommentVNode("",!0),e.renderSlot(i.$slots,"default")])],34))}}),G={class:"hidden w-full max-w-sm lg:flex"},F={class:"relative mx-3 w-full"},Z={class:"w-full max-w-full relative"},J=e.defineComponent({__name:"SearchBar",emits:["input"],setup(t,{emit:n}){const r=e.ref(null),s=n,o=a=>{(a.ctrlKey||a.metaKey)&&a.key.toLowerCase()==="k"&&(a.preventDefault(),r.value&&r.value.focus())};return e.onMounted(()=>{document.addEventListener("keydown",o)}),e.onUnmounted(()=>{document.removeEventListener("keydown",o)}),(a,c)=>(e.openBlock(),e.createElementBlock("div",G,[e.createElementVNode("label",F,[c[1]||(c[1]=e.createElementVNode("svg",{class:"pointer-events-none absolute z-10 my-3.5 ms-4 opacity-60 text-base-content","aria-hidden":"true",width:"16",height:"16",viewBox:"0.48 0.48 23.04 23.04",fill:"currentColor"},[e.createElementVNode("path",{fill:"none",d:"M0 0h24v24H0z"}),e.createElementVNode("path",{d:"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"})],-1)),e.createElementVNode("div",Z,[e.createElementVNode("form",null,[e.createElementVNode("input",{ref_key:"searchInput",ref:r,type:"search",placeholder:"Zoeken...",onInput:c[0]||(c[0]=d=>s("input",d.target.value)),class:"bg-transparent color-[inherit] border-[2px] border-solid border-transparent focus:border-[2px] focus:border-base-200 focus:outline-none rounded-xl w-full px-3 py-2 ps-10"},null,544)])]),c[2]||(c[2]=e.createElementVNode("div",{class:"pointer-events-none absolute end-10 top-2.5 gap-1 opacity-50 rtl:flex-row-reverse hidden lg:flex"},[e.createElementVNode("kbd",{class:"kbd kbd-sm"},"ctrl"),e.createElementVNode("kbd",{class:"kbd kbd-sm"},"K")],-1))])]))}}),Q=["bg-primary","bg-primary-content","bg-secondary","bg-secondary-content","bg-accent","bg-accent-content","bg-neutral","bg-neutral-content","bg-base-100","bg-base-200","bg-base-300","bg-base-content","bg-info","bg-info-content","bg-success","bg-success-content","bg-warning","bg-warning-content","bg-error","bg-error-content","btn-primary","btn-primary-content","btn-secondary","btn-secondary-content","btn-accent","btn-accent-content","btn-neutral","btn-neutral-content","btn-base-100","btn-base-200","btn-base-300","btn-base-content","btn-info","btn-info-content","btn-success","btn-success-content","btn-warning","btn-warning-content","btn-error","btn-error-content","text-primary","text-primary-content","text-secondary","text-secondary-content","text-accent","text-accent-content","text-neutral","text-neutral-content","text-base-100","text-base-200","text-base-300","text-base-content","text-info","text-info-content","text-success","text-success-content","text-warning","text-warning-content","text-error","text-error-content","text-transparent","step","steps","modal","modal-box","btn","btn-sm","btn-circle","btn-ghost","absolute","right-2","top-2","shadow-lg","w-full","rounded-xs","rounded-sm","rounded-md","rounded-lg","rounded-xl","rounded-2xl","rounded-3xl","hidden","block"];l.Button=E,l.Card=N,l.CardBody=M,l.CardTitle=L,l.Color=u,l.ColorUtils=m,l.Container=P,l.Modal=H,l.SearchBar=J,l.Size=_,l.SizeUtils=g,l.Step=z,l.StepList=W,l.StepPanel=R,l.StepPanels=A,l.Stepper=j,l.Table=T,l.dendelionSafeList=Q,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
|
|
5
|
+
*/var I;function Z(){return I||(I=1,function(t){(function(){var n={}.hasOwnProperty;function s(){for(var r="",c=0;c<arguments.length;c++){var f=arguments[c];f&&(r=a(r,o(f)))}return r}function o(r){if(typeof r=="string"||typeof r=="number")return r;if(typeof r!="object")return"";if(Array.isArray(r))return s.apply(null,r);if(r.toString!==Object.prototype.toString&&!r.toString.toString().includes("[native code]"))return r.toString();var c="";for(var f in r)n.call(r,f)&&r[f]&&(c=a(c,f));return c}function a(r,c){return c?r?r+" "+c:r+c:r}t.exports?(s.default=s,t.exports=s):window.classNames=s})()}(T)),T.exports}var J=Z();const L=A(J),Y=["type"],Q={class:"group-[.is-loading]:text-transparent"},ee=e.defineComponent({__name:"Button",props:{type:{default:"button"},loading:{type:Boolean},color:{default:z.Neutral},click:{}},setup(t){const n=t,s=e.computed(()=>L("btn","group",`btn-${P.toClassName(n.color)}`,n.loading?"is-loading":""));return(o,a)=>(e.openBlock(),e.createElementBlock("button",{onClick:a[0]||(a[0]=r=>o.click?o.click:void 0),class:e.normalizeClass(s.value),type:o.type},[a[1]||(a[1]=e.createElementVNode("span",{class:"loading loading-spinner loading-md absolute hidden group-[.is-loading]:block"},null,-1)),e.createElementVNode("span",Q,[e.renderSlot(o.$slots,"default")])],10,Y))}}),v=(t,n)=>{const s=t.__vccOpts||t;for(const[o,a]of n)s[o]=a;return s},te={};function ne(t,n){return e.openBlock(),e.createElementBlock("button")}const re=v(te,[["render",ne]]);var F=(t=>(t[t.XS=0]="XS",t[t.SM=1]="SM",t[t.MD=2]="MD",t[t.LG=3]="LG",t[t.XL=4]="XL",t[t.TWOXL=5]="TWOXL",t[t.THREEXL=6]="THREEXL",t))(F||{});class X{static toClassName(n){switch(n){case 0:return"xs";case 1:return"sm";case 2:return"md";case 3:return"lg";case 4:return"xl";case 5:return"2xl";case 6:return"3xl";default:return"md"}}}const ae=e.defineComponent({__name:"Card",props:{backgroundColor:{default:z.Primary},shadow:{type:Boolean,default:!1},fullWidth:{type:Boolean,default:!1},rounded:{type:Boolean},roundedSize:{}},setup(t){const n=t,s=e.ref(L("card",`bg-${n.backgroundColor}`,n.shadow?"shadow-lg":"",n.fullWidth?"w-full":"",n.rounded&&!n.roundedSize?"rounded":n.roundedSize?`rounded-${n.roundedSize}`:""));return(o,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s.value)},[e.renderSlot(o.$slots,"default")],2))}}),se={},oe={class:"card-body"};function ce(t,n){return e.openBlock(),e.createElementBlock("div",oe,[e.renderSlot(t.$slots,"default")])}const le=v(se,[["render",ce]]),ie=e.defineComponent({__name:"CardTitle",props:{is:{default:"h1"},text:{default:""}},setup(t){return(n,s)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.is),{class:"card-title"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.text),1)]),_:1}))}}),de=e.defineComponent({__name:"Container",props:{container:{type:Boolean,default:!0},padding:{type:Boolean,default:!0}},setup(t){const n=t,s=e.ref([n.container?"container":"",n.padding?"p-6":""]);return(o,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s.value)},[e.renderSlot(o.$slots,"default")],2))}});var D={},W={},K;function U(){return K||(K=1,function(t){t.__esModule=!0,t.default=a;var n=/[\u0300-\u036f]/g,s=/ł/g,o=/ñ/g;function a(r){return r.toLowerCase().normalize("NFD").replace(n,"").replace(s,"l").replace(o,"n").trim()}}(W)),W}var M={},H;function j(){if(H)return M;H=1,M.__esModule=!0,M.aggressiveFuzzyMatch=y,M.createFuzzySearchImpl=O,M.experimentalSmartFuzzyMatch=B,M.fuzzyMatchImpl=_;var t=n(U());function n(i){return i&&i.__esModule?i:{default:i}}var s=Number.MAX_SAFE_INTEGER,o=function(l,h){return l.score-h.score},a=function(l,h){return l[0]-h[0]},r=new Set(` []()-–—'"“”`.split(""));function c(i){return r.has(i)}function f(i,l,h,S,d,k,b){if(i===S)return[0,[[0,i.length-1]]];var u=S.length,g=l.length,E=d.length;if(l===d)return[.1,[[0,g-1]]];if(l.startsWith(d))return[.5,[[0,E-1]]];var N=i.indexOf(S);if(N>-1&&c(i[N-1]))return[.9,[[N,N+u-1]]];var x=l.indexOf(d);if(x>-1&&c(l[x-1]))return[1,[[x,x+u-1]]];var w=k.length;if(w>1&&k.every(function($){return h.has($)})){var C=1.5+w*.2;return[C,k.map(function($){var V=l.indexOf($);return[V,V+$.length-1]}).sort(a)]}return x>-1?[2,[[x,x+u-1]]]:b==="aggressive"?y(l,d):b==="smart"?B(l,d):null}function y(i,l){for(var h=i.length,S=l.length,d=0,k=l[d],b=[],u=-1,g=-2,E=0;E<h;E+=1)if(i[E]===k){if(E!==g+1&&(u>=0&&b.push([u,g]),u=E),g=E,d+=1,d===S)return b.push([u,g]),m(b,i);k=l[d]}return null}function B(i,l){for(var h=i.length,S=[],d=0,k=l[d],b=-1,u=-2;;){var g=i.indexOf(k,u+1);if(g===-1)break;if(g===0||c(i[g-1]))b=g;else{var E=l.length-d,N=i.length-g,x=Math.min(3,E,N),w=l.slice(d,d+x);if(i.slice(g,g+x)===w)b=g;else{u+=1;continue}}for(u=b;u<h&&i[u]===k;u+=1)d+=1,k=l[d];if(u-=1,S.push([b,u]),d===l.length)return m(S,i)}return null}function m(i,l){var h=2;return i.forEach(function(S){var d=S[0],k=S[1],b=k-d+1,u=d===0||l[d]===" "||l[d-1]===" ",g=k===l.length-1||l[k]===" "||l[k+1]===" ",E=u&&g;E?h+=.2:u?h+=.4:b>=3?h+=.8:h+=1.6}),[h,i]}function _(i,l){var h=(0,t.default)(l),S=h.split(" "),d=(0,t.default)(i),k=new Set(d.split(" ")),b=f(i,d,k,l,h,S,"smart");return b?{item:i,score:b[0],matches:[b[1]]}:null}function O(i,l){var h=l.strategy,S=h===void 0?"aggressive":h,d=l.getText,k=i.map(function(b){var u;if(d)u=d(b);else{var g=l.key?b[l.key]:b;u=[g]}var E=u.map(function(N){var x=N||"",w=(0,t.default)(x),C=new Set(w.split(" "));return[x,w,C]});return[b,E]});return function(b){var u=[],g=(0,t.default)(b),E=g.split(" ");return g.length?(k.forEach(function(N){for(var x=N[0],w=N[1],C=s,$=[],V=0,We=w.length;V<We;V+=1){var R=w[V],Oe=R[0],Re=R[1],qe=R[2],q=f(Oe,Re,qe,b,g,E,S);q?(C=Math.min(C,q[0]),$.push(q[1])):$.push(null)}C<s&&u.push({item:x,score:C,matches:$})}),u.sort(o),u):[]}}return M}var G;function ue(){return G||(G=1,function(t){t.__esModule=!0,t.default=o,t.fuzzyMatch=a;var n=s(U());t.normalizeText=n.default;function s(r){return r&&r.__esModule?r:{default:r}}function o(r,c){return c===void 0&&(c={}),j().createFuzzySearchImpl(r,c)}function a(r,c){return j().fuzzyMatchImpl(r,c)}}(D)),D}var fe=ue();const pe=A(fe),me={key:0},he=["colspan"],be=["innerHTML"],ge=e.defineComponent({__name:"Table",props:{zebra:{type:Boolean,default:!1},pinRows:{type:Boolean,default:!1},pinCols:{type:Boolean,default:!1},size:{default:F.MD},columns:{},dataSource:{},ajax:{},searchValue:{},searchFunction:{}},setup(t){const n=e.ref([]),s=e.ref([]),o=e.ref(null),a=t,r=e.ref(L("table",`table-${X.toClassName(a.size)}`,{"table-zebra":a.zebra,"table-pin-rows":a.pinRows,"table-pin-cols ":a.pinCols})),c=(y,B)=>String(!y||typeof y!="object"?y:B.split(".").reduce((m,_)=>m&&(typeof m=="object"?m[_]:m),y));e.onMounted(()=>{n.value=a.dataSource,s.value=a.dataSource}),e.watch(()=>a.dataSource,y=>{n.value=y,s.value=y},{immediate:!0}),e.watch(()=>a.searchValue,y=>{if(a.searchFunction){s.value=a.searchFunction(y??"");return}s.value=y?f(y):n.value},{immediate:!0});const f=y=>{const B=[];return n.value.length>0?(Object.keys(n.value[0]).forEach(_=>{const O=n.value.map(h=>c(h,_)),l=pe(O)(y);for(const h of l){const S=n.value.filter(d=>c(d,_)===h.item);B.push(...S)}}),B):[]};return(y,B)=>(e.openBlock(),e.createElementBlock("table",{ref_key:"table",ref:o,class:e.normalizeClass(r.value)},[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.columns,m=>(e.openBlock(),e.createElementBlock("th",{key:m.title},e.toDisplayString(m.title),1))),128))])]),e.createElementVNode("tbody",null,[s.value.length===0?(e.openBlock(),e.createElementBlock("tr",me,[e.createElementVNode("td",{colspan:a.columns.length}," No data found ",8,he)])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock("tr",{key:String(m)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.columns,_=>(e.openBlock(),e.createElementBlock("td",{key:_.title},[_.render?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(c(m,_.data)),1)],64)),typeof _.render=="function"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[typeof _.render(c(m,_.data),m)=="string"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:_.render(c(m,_.data),m)},null,8,be)):(e.openBlock(),e.createBlock(e.resolveDynamicComponent(_.render(c(m,_.data),m)),{key:1}))],64)):e.createCommentVNode("",!0)]))),128))]))),128))])],2))}}),ye=e.defineComponent({__name:"Stepper",props:{value:{}},emits:["update:value"],setup(t,{expose:n,emit:s}){const o=t,a=e.ref(o.value),r=s,c=f=>{a.value=f,r("update:value",f)};return e.provide("stepper",{value:a,updateValue:c}),e.watch(()=>o.value,f=>{a.value=f}),n({updateValue:c}),(f,y)=>e.renderSlot(f.$slots,"default",{updateValue:c})}}),_e=e.defineComponent({__name:"Step",props:{value:{}},setup(t){const n=t,s=e.inject("stepper"),o=e.ref("");return e.watch(()=>s==null?void 0:s.value.value,a=>{a&&n.value&&(o.value=Number(a)>=Number(n.value)?"step-primary":"")}),e.onMounted(()=>{s&&(o.value=s.value.value===n.value?"step-primary":"",Number(s.value.value)>=Number(n.value)&&(o.value="step-primary"))}),(a,r)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass(["step",o.value])},[e.renderSlot(a.$slots,"default")],2))}}),ke={},Be={class:"steps"};function Se(t,n){return e.openBlock(),e.createElementBlock("ul",Be,[e.renderSlot(t.$slots,"default")])}const Ee=v(ke,[["render",Se]]),xe={key:0},Ne=e.defineComponent({__name:"StepPanels",setup(t){const n=e.inject("stepper");return(s,o)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade",mode:"out-in"},{default:e.withCtx(()=>{var a,r;return[(a=e.unref(n))!=null&&a.value?(e.openBlock(),e.createElementBlock("div",xe,[e.renderSlot(s.$slots,"default",{currentStep:(r=e.unref(n))==null?void 0:r.value})])):e.createCommentVNode("",!0)]}),_:3}))}}),we={key:0},Ce=e.defineComponent({__name:"StepPanel",props:{value:{}},setup(t,{expose:n}){const s=e.computed(()=>o==null?void 0:o.value.value),o=e.inject("stepper"),a=r=>{o&&o.updateValue(r.toString())};return n({activateCallback:a}),(r,c)=>r.value===s.value?(e.openBlock(),e.createElementBlock("div",we,[e.renderSlot(r.$slots,"default",{activateCallback:a})])):e.createCommentVNode("",!0)}}),$e={className:"modal-box"},Me={key:0,method:"dialog"},Ve=e.defineComponent({__name:"Modal",props:{closeButton:{type:Boolean,default:!0},overflow:{type:Boolean,default:!1}},emits:["close"],setup(t,{expose:n,emit:s}){const o=e.ref(null),a=s,r=t,c=e.ref(L("modal",{"overflow-visible":r.overflow}));return n({showModal:()=>{var B;(B=o.value)==null||B.showModal()},closeModal:()=>{var B;(B=o.value)==null||B.close()}}),(B,m)=>(e.openBlock(),e.createElementBlock("dialog",{ref_key:"modal",ref:o,class:e.normalizeClass(c.value),"aria-modal":"true","aria-hidden":"true",role:"dialog",onClose:m[0]||(m[0]=_=>a("close",_))},[e.createElementVNode("div",$e,[B.closeButton?(e.openBlock(),e.createElementBlock("form",Me,m[1]||(m[1]=[e.createElementVNode("button",{className:"btn btn-sm btn-circle btn-ghost absolute right-2 top-2"},"✕",-1)]))):e.createCommentVNode("",!0),e.renderSlot(B.$slots,"default")])],34))}}),ze={class:"hidden w-full max-w-sm lg:flex"},Le={class:"relative mx-3 w-full"},Te={class:"w-full max-w-full relative"},ve=["value"],Fe=e.defineComponent({__name:"SearchBar",props:["modelValue"],emits:["update:modelValue"],setup(t,{emit:n}){const s=t,o=e.ref(null),a=n,r=c=>{(c.ctrlKey||c.metaKey)&&c.key.toLowerCase()==="k"&&(c.preventDefault(),o.value&&o.value.focus())};return e.onMounted(()=>{document.addEventListener("keydown",r)}),e.onUnmounted(()=>{document.removeEventListener("keydown",r)}),(c,f)=>(e.openBlock(),e.createElementBlock("div",ze,[e.createElementVNode("label",Le,[f[1]||(f[1]=e.createElementVNode("svg",{class:"pointer-events-none absolute z-10 my-3.5 ms-4 opacity-60 text-base-content","aria-hidden":"true",width:"16",height:"16",viewBox:"0.48 0.48 23.04 23.04",fill:"currentColor"},[e.createElementVNode("path",{fill:"none",d:"M0 0h24v24H0z"}),e.createElementVNode("path",{d:"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"})],-1)),e.createElementVNode("div",Te,[e.createElementVNode("form",null,[e.createElementVNode("input",{ref_key:"searchInput",ref:o,type:"search",placeholder:"Zoeken...",value:s.modelValue,onInput:f[0]||(f[0]=y=>a("update:modelValue",y.target.value)),class:"bg-transparent color-[inherit] border-[2px] border-solid border-transparent focus:border-[2px] focus:border-base-200 focus:outline-none rounded-xl w-full px-3 py-2 ps-10"},null,40,ve)])]),f[2]||(f[2]=e.createElementVNode("div",{class:"pointer-events-none absolute end-10 top-2.5 gap-1 opacity-50 rtl:flex-row-reverse hidden lg:flex"},[e.createElementVNode("kbd",{class:"kbd kbd-sm"},"ctrl"),e.createElementVNode("kbd",{class:"kbd kbd-sm"},"K")],-1))])]))}}),De=["bg-primary","bg-primary-content","bg-secondary","bg-secondary-content","bg-accent","bg-accent-content","bg-neutral","bg-neutral-content","bg-base-100","bg-base-200","bg-base-300","bg-base-content","bg-info","bg-info-content","bg-success","bg-success-content","bg-warning","bg-warning-content","bg-error","bg-error-content","btn-primary","btn-primary-content","btn-secondary","btn-secondary-content","btn-accent","btn-accent-content","btn-neutral","btn-neutral-content","btn-base-100","btn-base-200","btn-base-300","btn-base-content","btn-info","btn-info-content","btn-success","btn-success-content","btn-warning","btn-warning-content","btn-error","btn-error-content","text-primary","text-primary-content","text-secondary","text-secondary-content","text-accent","text-accent-content","text-neutral","text-neutral-content","text-base-100","text-base-200","text-base-300","text-base-content","text-info","text-info-content","text-success","text-success-content","text-warning","text-warning-content","text-error","text-error-content","text-transparent","step","steps","modal","modal-box","btn","btn-sm","btn-circle","btn-ghost","absolute","right-2","top-2","shadow-lg","w-full","rounded-xs","rounded-sm","rounded-md","rounded-lg","rounded-xl","rounded-2xl","rounded-3xl","hidden","block"];p.Button=ee,p.Card=ae,p.CardBody=le,p.CardTitle=ie,p.Color=z,p.ColorUtils=P,p.Container=de,p.Modal=Ve,p.SearchBar=Fe,p.SimpleButton=re,p.Size=F,p.SizeUtils=X,p.Step=_e,p.StepList=Ee,p.StepPanel=Ce,p.StepPanels=Ne,p.Stepper=ye,p.Table=ge,p.dendelionSafeList=De,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, HTMLButtonElement>;
|
|
2
|
+
export default _default;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { default as Button } from
|
|
2
|
-
export
|
|
1
|
+
export { default as Button } from "./Button.vue";
|
|
2
|
+
export { default as SimpleButton } from "./SimpleButton.vue";
|
|
3
|
+
export type { ButtonProps, Type } from "./interface";
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
declare const _default: import("vue").DefineComponent<{
|
|
2
|
-
|
|
3
|
-
},
|
|
4
|
-
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{
|
|
2
|
+
modelValue?: any;
|
|
3
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
4
|
+
"update:modelValue": (...args: any[]) => void;
|
|
5
|
+
}, string, import("vue").PublicProps, Readonly<{
|
|
6
|
+
modelValue?: any;
|
|
7
|
+
}> & Readonly<{
|
|
8
|
+
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
5
9
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {
|
|
6
10
|
searchInput: HTMLInputElement;
|
|
7
11
|
}, HTMLDivElement>;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { TableProps } from './interface';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
}
|
|
2
|
+
declare const _default: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
3
|
+
props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, never> & TableProps<T> & Partial<{}>> & import("vue").PublicProps;
|
|
4
|
+
expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
|
|
5
|
+
attrs: any;
|
|
6
|
+
slots: {};
|
|
7
|
+
emit: {};
|
|
8
|
+
}>) => import("vue").VNode & {
|
|
9
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
10
|
+
};
|
|
11
11
|
export default _default;
|
|
12
|
+
type __VLS_PrettifyLocal<T> = {
|
|
13
|
+
[K in keyof T]: T[K];
|
|
14
|
+
} & {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { default as Table } from './Table.vue';
|
|
2
|
-
export
|
|
2
|
+
export * from './interface';
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { Size } from "@/types";
|
|
2
|
-
|
|
2
|
+
import { Component, VNode } from "vue";
|
|
3
|
+
export type TableProps<T> = {
|
|
3
4
|
zebra?: boolean;
|
|
4
5
|
pinRows?: boolean;
|
|
5
6
|
pinCols?: boolean;
|
|
6
|
-
size
|
|
7
|
-
columns: Column[];
|
|
8
|
-
dataSource:
|
|
9
|
-
ajax?: (params: object) => Promise<object
|
|
7
|
+
size?: Size;
|
|
8
|
+
columns: Column<T>[];
|
|
9
|
+
dataSource: T[];
|
|
10
|
+
ajax?: (params: object) => Promise<object> | string;
|
|
11
|
+
searchValue?: string;
|
|
12
|
+
searchFunction?: (searchValue: string) => T[];
|
|
10
13
|
};
|
|
11
|
-
export type Column = {
|
|
14
|
+
export type Column<T> = {
|
|
12
15
|
title: string;
|
|
13
16
|
data: string;
|
|
14
|
-
render?: (text: string,
|
|
17
|
+
render?: (text: string, row: T) => string | Component | VNode;
|
|
15
18
|
extraClasses?: ExtraClasses;
|
|
16
19
|
};
|
|
17
20
|
export type ExtraClasses = {
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "dendelion-ui",
|
|
3
3
|
"private": false,
|
|
4
4
|
"description": "Simpel component library using Tailwind css and DaisyUI",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.6",
|
|
6
6
|
"author": "ThatzOkay",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"homepage": "https://github.com/ThatzOkay/DendelionUI#readme",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dist",
|
|
26
26
|
"src"
|
|
27
27
|
],
|
|
28
|
-
"main": "./dist/
|
|
28
|
+
"main": "./dist/dendelion-ui.umd.js",
|
|
29
29
|
"module": "./dist/dendelion-ui.es.js",
|
|
30
30
|
"typings": "./dist/types/index.d.ts",
|
|
31
31
|
"types": "./dist/types/index.d.ts",
|
|
@@ -52,19 +52,22 @@
|
|
|
52
52
|
"preview": "vite preview"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
+
"@nozbe/microfuzz": "^1.0.0",
|
|
55
56
|
"classnames": "^2.5.1",
|
|
57
|
+
"fuzzysearch": "^1.0.3",
|
|
56
58
|
"vue": "^3.5.13"
|
|
57
59
|
},
|
|
58
60
|
"devDependencies": {
|
|
59
61
|
"@vitejs/plugin-vue": "^5.2.1",
|
|
60
62
|
"@vue/tsconfig": "^0.7.0",
|
|
63
|
+
"autoprefixer": "^10.4.20",
|
|
61
64
|
"cross-env": "^7.0.3",
|
|
62
65
|
"daisyui": "^4.12.23",
|
|
63
66
|
"eslint": "^9.20.1",
|
|
64
67
|
"eslint-plugin-vue": "^9.32.0",
|
|
65
68
|
"fluid-tailwind": "^1.0.4",
|
|
66
69
|
"rimraf": "^6.0.1",
|
|
67
|
-
"typescript": "
|
|
70
|
+
"typescript": "^5.8.2",
|
|
68
71
|
"typescript-eslint": "^8.24.0",
|
|
69
72
|
"vite": "^6.1.0",
|
|
70
73
|
"vue-tsc": "^2.2.0"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<button v-on:click="click" :class="classes" :type="type">
|
|
2
|
+
<button v-on:click="click ? click : undefined" :class="classes" :type="type">
|
|
3
3
|
<span class="loading loading-spinner loading-md absolute hidden group-[.is-loading]:block"></span>
|
|
4
4
|
<span class="group-[.is-loading]:text-transparent"><slot /></span>
|
|
5
5
|
</button>
|
|
@@ -9,24 +9,16 @@
|
|
|
9
9
|
import { Color, ColorUtils } from '@/types/color';
|
|
10
10
|
import { ButtonProps } from './interface';
|
|
11
11
|
import classNames from 'classnames';
|
|
12
|
-
import {
|
|
12
|
+
import { computed } from 'vue';
|
|
13
13
|
|
|
14
14
|
const props = withDefaults(defineProps<ButtonProps>(), {
|
|
15
15
|
type: 'button',
|
|
16
16
|
color: Color.Neutral
|
|
17
17
|
})
|
|
18
18
|
|
|
19
|
-
const classes =
|
|
19
|
+
const classes = computed(() => classNames('btn',
|
|
20
20
|
'group',
|
|
21
21
|
`btn-${ColorUtils.toClassName(props.color)}`,
|
|
22
22
|
props.loading ? 'is-loading' : '',
|
|
23
23
|
))
|
|
24
|
-
|
|
25
|
-
watch(() => props.loading, (loading: boolean) => {
|
|
26
|
-
classes.value = classNames('btn',
|
|
27
|
-
'group',
|
|
28
|
-
`btn-${ColorUtils.toClassName(props.color)}`,
|
|
29
|
-
loading ? 'is-loading' : '',
|
|
30
|
-
)
|
|
31
|
-
})
|
|
32
24
|
</script>
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { default as Button } from
|
|
2
|
-
export
|
|
1
|
+
export { default as Button } from "./Button.vue";
|
|
2
|
+
export { default as SimpleButton } from "./SimpleButton.vue";
|
|
3
|
+
export type { ButtonProps, Type } from "./interface";
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
</svg>
|
|
11
11
|
<div class="w-full max-w-full relative">
|
|
12
12
|
<form>
|
|
13
|
-
<input ref="searchInput" type="search" placeholder="Zoeken..." @input="emit('
|
|
13
|
+
<input ref="searchInput" type="search" placeholder="Zoeken..." :value="props.modelValue" @input="emit('update:modelValue', ($event.target as HTMLInputElement).value)"
|
|
14
14
|
class="bg-transparent color-[inherit] border-[2px] border-solid border-transparent focus:border-[2px] focus:border-base-200 focus:outline-none rounded-xl w-full px-3 py-2 ps-10">
|
|
15
15
|
</form>
|
|
16
16
|
</div>
|
|
@@ -26,9 +26,11 @@
|
|
|
26
26
|
<script setup lang="ts">
|
|
27
27
|
import { onMounted, onUnmounted, ref } from 'vue';
|
|
28
28
|
|
|
29
|
+
const props = defineProps(['modelValue']);
|
|
30
|
+
|
|
29
31
|
const searchInput = ref<HTMLInputElement | null>(null);
|
|
30
32
|
|
|
31
|
-
const emit = defineEmits(['
|
|
33
|
+
const emit = defineEmits(['update:modelValue']);
|
|
32
34
|
|
|
33
35
|
const handleKeyPress = (event: KeyboardEvent) => {
|
|
34
36
|
if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'k') {
|
|
@@ -1,18 +1,47 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<table ref="table" :class="tableClasses">
|
|
3
|
-
|
|
3
|
+
<thead>
|
|
4
|
+
<tr>
|
|
5
|
+
<th v-for="column in props.columns" v-bind:key="column.title">
|
|
6
|
+
{{ column.title }}
|
|
7
|
+
</th>
|
|
8
|
+
</tr>
|
|
9
|
+
</thead>
|
|
10
|
+
<tbody>
|
|
11
|
+
<tr v-if="filteredDataSource.length === 0">
|
|
12
|
+
<td :colspan="props.columns.length">
|
|
13
|
+
No data found
|
|
14
|
+
</td>
|
|
15
|
+
</tr>
|
|
16
|
+
<tr v-else v-for="row in filteredDataSource" v-bind:key="String(row)">
|
|
17
|
+
<td v-for="column in props.columns" v-bind:key="column.title">
|
|
18
|
+
<template v-if="!column.render">
|
|
19
|
+
{{ getValue(row, column.data) }}
|
|
20
|
+
</template>
|
|
21
|
+
<template v-if="typeof column.render === 'function'">
|
|
22
|
+
<div v-if="typeof column.render(getValue(row, column.data), row as T) === 'string'"
|
|
23
|
+
v-html="column.render(getValue(row, column.data), row as T)" />
|
|
24
|
+
<component v-else :is="column.render(getValue(row, column.data), row as T)" />
|
|
25
|
+
</template>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
</tbody>
|
|
4
29
|
</table>
|
|
5
30
|
</template>
|
|
6
31
|
|
|
7
|
-
<script setup lang="ts">
|
|
8
|
-
import { ref } from 'vue';
|
|
32
|
+
<script setup lang="ts" generic="T">
|
|
33
|
+
import { onMounted, ref, watch } from 'vue';
|
|
9
34
|
import { TableProps } from './interface';
|
|
10
35
|
import classNames from 'classnames';
|
|
11
36
|
import { Size, SizeUtils } from '@/types';
|
|
37
|
+
import createFuzzySearch from '@nozbe/microfuzz'
|
|
38
|
+
|
|
39
|
+
const originalDataSource = ref<T[]>([]);
|
|
40
|
+
const filteredDataSource = ref<T[]>([]);
|
|
12
41
|
|
|
13
42
|
const table = ref<HTMLTableElement | null>(null)
|
|
14
43
|
|
|
15
|
-
const props = withDefaults(defineProps<TableProps
|
|
44
|
+
const props = withDefaults(defineProps<TableProps<T>>(), {
|
|
16
45
|
size: Size.MD,
|
|
17
46
|
zebra: false,
|
|
18
47
|
pinRows: false,
|
|
@@ -24,4 +53,52 @@ const tableClasses = ref(classNames('table', `table-${SizeUtils.toClassName(prop
|
|
|
24
53
|
'table-pin-rows': props.pinRows,
|
|
25
54
|
'table-pin-cols ': props.pinCols,
|
|
26
55
|
}));
|
|
56
|
+
|
|
57
|
+
//I'll figure pagination later
|
|
58
|
+
const getValue = (obj: any, keyPath: string): string => {
|
|
59
|
+
if (!obj || typeof obj !== 'object') return String(obj);
|
|
60
|
+
return String(
|
|
61
|
+
keyPath.split('.').reduce<unknown>((acc, key) => acc && (typeof acc === 'object' ? (acc as Record<string, any>)[key] : acc), obj)
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
onMounted(() => {
|
|
66
|
+
originalDataSource.value = props.dataSource;
|
|
67
|
+
filteredDataSource.value = props.dataSource;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
watch(() => props.dataSource, (value) => {
|
|
71
|
+
originalDataSource.value = value;
|
|
72
|
+
filteredDataSource.value = value;
|
|
73
|
+
}, { immediate: true });
|
|
74
|
+
|
|
75
|
+
watch(() => props.searchValue, (value) => {
|
|
76
|
+
if (props.searchFunction) {
|
|
77
|
+
filteredDataSource.value = props.searchFunction(value ?? "");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
filteredDataSource.value = value ? doFuzzySearch(value) : originalDataSource.value;
|
|
81
|
+
}, { immediate: true });
|
|
82
|
+
|
|
83
|
+
const doFuzzySearch = (value: string): T[] => {
|
|
84
|
+
const foundRows: T[] = [];
|
|
85
|
+
if (originalDataSource.value.length > 0) {
|
|
86
|
+
const dataKeys = Object.keys(originalDataSource.value[0] as object);
|
|
87
|
+
|
|
88
|
+
dataKeys.forEach((key) => {
|
|
89
|
+
const list = originalDataSource.value.map((row) => getValue(row, key));
|
|
90
|
+
const fuzzySearch = createFuzzySearch(list);
|
|
91
|
+
const found = fuzzySearch(value);
|
|
92
|
+
for (const item of found) {
|
|
93
|
+
const matchingItems = originalDataSource.value.filter((i) => getValue(i, key) === item.item);
|
|
94
|
+
foundRows.push(...matchingItems as T[]);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
return foundRows;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
|
|
27
104
|
</script>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { default as Table } from './Table.vue';
|
|
2
|
-
export
|
|
2
|
+
export * from './interface';
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { Size } from "@/types";
|
|
2
|
+
import { Component, VNode } from "vue";
|
|
2
3
|
|
|
3
|
-
export type TableProps = {
|
|
4
|
+
export type TableProps<T> = {
|
|
4
5
|
zebra?: boolean;
|
|
5
6
|
pinRows?: boolean;
|
|
6
7
|
pinCols?: boolean;
|
|
7
|
-
size
|
|
8
|
-
columns: Column[];
|
|
9
|
-
dataSource:
|
|
10
|
-
ajax?: (params: object) => Promise<object
|
|
8
|
+
size?: Size
|
|
9
|
+
columns: Column<T>[];
|
|
10
|
+
dataSource: T[];
|
|
11
|
+
ajax?: (params: object) => Promise<object> | string;
|
|
12
|
+
searchValue?: string;
|
|
13
|
+
searchFunction?: (searchValue: string) => T[];
|
|
11
14
|
}
|
|
12
15
|
|
|
13
|
-
export type Column = {
|
|
16
|
+
export type Column<T> = {
|
|
14
17
|
title: string;
|
|
15
18
|
data: string;
|
|
16
|
-
render?: (text: string,
|
|
19
|
+
render?: (text: string, row: T) => string | Component | VNode;
|
|
17
20
|
extraClasses?: ExtraClasses;
|
|
18
21
|
}
|
|
19
22
|
|