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.
@@ -1,5 +1,5 @@
1
- (function(l,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(l=typeof globalThis<"u"?globalThis:l||self,e(l.DendelionUI={},l.Vue))})(this,function(l,e){"use strict";var u=(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))(u||{});class m{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 B(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var b={exports:{}};/*!
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 './Button.vue';
2
- export type { ButtonProps, Type } from './interface';
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<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
2
- input: (...args: any[]) => void;
3
- }, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
4
- onInput?: ((...args: any[]) => any) | undefined;
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
- import { Size } from '@/types';
3
- declare const _default: import("vue").DefineComponent<TableProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<TableProps> & Readonly<{}>, {
4
- size: Size;
5
- zebra: boolean;
6
- pinRows: boolean;
7
- pinCols: boolean;
8
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {
9
- table: HTMLTableElement;
10
- }, HTMLTableElement>;
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 type { TableProps } from './interface';
2
+ export * from './interface';
@@ -1,17 +1,20 @@
1
1
  import { Size } from "@/types";
2
- export type TableProps = {
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: Size;
7
- columns: Column[];
8
- dataSource: Record<string, unknown>[];
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, record?: Record<string, unknown>) => 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.4",
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/apldendelion-uiayer.umd.js",
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": "~5.7.0",
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 { ref, watch } from 'vue';
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 = ref(classNames('btn',
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>
@@ -0,0 +1,8 @@
1
+ <template>
2
+ <button>
3
+
4
+ </button>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ </script>
@@ -1,2 +1,3 @@
1
- export { default as Button } from './Button.vue';
2
- export type { ButtonProps, Type } from './interface';
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('input', ($event.target as HTMLInputElement).value)"
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(['input']);
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 type { TableProps } from './interface';
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: Size
8
- columns: Column[];
9
- dataSource: Record<string, unknown>[];
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, record?: Record<string, unknown>) => string;
19
+ render?: (text: string, row: T) => string | Component | VNode;
17
20
  extraClasses?: ExtraClasses;
18
21
  }
19
22