@digitalwalletcorp/vue-core 1.3.1 → 1.4.1
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/README.md +36 -0
- package/lib/accordion-section.d.cts +1 -1
- package/lib/accordion-section.d.ts +1 -1
- package/lib/components-BCJWnExf.cjs +1 -0
- package/lib/{components-BuTJ1wX8.js → components-CDIhw5uP.js} +5 -5
- package/lib/data-table.d.cts +101 -8
- package/lib/data-table.d.ts +101 -8
- package/lib/{types → helpers}/data-table.d.cts +47 -93
- package/lib/{types → helpers}/data-table.d.ts +47 -93
- package/lib/helpers/{show-floating-component.d.cts → floating-component.d.cts} +1 -1
- package/lib/helpers/{show-floating-component.d.ts → floating-component.d.ts} +1 -1
- package/lib/helpers/{show-modal-dialog.d.cts → modal-dialog.d.cts} +13 -1
- package/lib/helpers/{show-modal-dialog.d.ts → modal-dialog.d.ts} +13 -1
- package/lib/helpers/{show-overlay-box.d.ts → overlay-box.d.cts} +3 -1
- package/lib/helpers/{show-overlay-box.d.cts → overlay-box.d.ts} +3 -1
- package/lib/helpers/{show-snackbar.d.cts → snackbar.d.cts} +16 -1
- package/lib/helpers/{show-snackbar.d.ts → snackbar.d.ts} +16 -1
- package/lib/helpers/vue-core-options.d.cts +17 -0
- package/lib/helpers/vue-core-options.d.ts +17 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.cts +18 -18
- package/lib/index.d.ts +18 -18
- package/lib/index.js +187 -270
- package/lib/internal/data-table-controls.d.cts +3 -3
- package/lib/internal/data-table-controls.d.ts +3 -3
- package/lib/internal/floating-component.d.cts +1 -1
- package/lib/internal/floating-component.d.ts +1 -1
- package/lib/internal/movable-window.d.cts +1 -1
- package/lib/internal/movable-window.d.ts +1 -1
- package/lib/internal/pagination.d.cts +1 -1
- package/lib/internal/pagination.d.ts +1 -1
- package/lib/internal/snackbar-container.d.cts +1 -1
- package/lib/internal/snackbar-container.d.ts +1 -1
- package/lib/internal/use-movable-window.d.cts +1 -1
- package/lib/internal/use-movable-window.d.ts +1 -1
- package/lib/internal/{mount-window.d.cts → window-control.d.cts} +22 -1
- package/lib/internal/{mount-window.d.ts → window-control.d.ts} +22 -1
- package/lib/label-button.d.cts +1 -1
- package/lib/label-button.d.ts +1 -1
- package/lib/label-icon.d.cts +12 -2
- package/lib/label-icon.d.ts +12 -2
- package/lib/modal-dialog.d.cts +1 -1
- package/lib/modal-dialog.d.ts +1 -1
- package/lib/nuxt.cjs +1 -1
- package/lib/nuxt.js +1 -1
- package/lib/overlay-box.d.cts +1 -1
- package/lib/overlay-box.d.ts +1 -1
- package/lib/register.cjs +1 -1
- package/lib/register.js +1 -1
- package/lib/tab-content.d.cts +1 -1
- package/lib/tab-content.d.ts +1 -1
- package/lib/warning-popper.vue_vue_type_style_index_0_lang-BJxLA6aU.js +1954 -0
- package/lib/warning-popper.vue_vue_type_style_index_0_lang-TYmLM_h9.cjs +1 -0
- package/package.json +1 -1
- package/src/accordion-section.vue +1 -1
- package/src/data-table.vue +189 -49
- package/src/helpers/data-table.ts +250 -0
- package/src/helpers/{show-floating-component.ts → floating-component.ts} +2 -2
- package/src/helpers/{show-modal-dialog.ts → modal-dialog.ts} +17 -1
- package/src/helpers/{show-overlay-box.ts → overlay-box.ts} +5 -2
- package/src/helpers/{show-snackbar.ts → snackbar.ts} +19 -1
- package/src/helpers/vue-core-options.ts +20 -0
- package/src/index.ts +18 -18
- package/src/internal/data-table-controls.vue +1 -1
- package/src/internal/floating-component.vue +2 -2
- package/src/internal/movable-window.vue +1 -1
- package/src/internal/pagination.vue +1 -1
- package/src/internal/snackbar-container.vue +1 -1
- package/src/internal/use-movable-window.ts +1 -1
- package/src/internal/{mount-window.ts → window-control.ts} +31 -1
- package/src/label-button.vue +1 -1
- package/src/label-icon.vue +13 -2
- package/src/modal-dialog.vue +1 -1
- package/src/overlay-box.vue +3 -3
- package/src/tab-content.vue +2 -2
- package/src/tab-group.vue +2 -2
- package/lib/components-CKql5lWg.cjs +0 -1
- package/lib/helpers/data-table-csv.d.cts +0 -17
- package/lib/helpers/data-table-csv.d.ts +0 -17
- package/lib/internal/data-table-value.d.cts +0 -32
- package/lib/internal/data-table-value.d.ts +0 -32
- package/lib/internal/opened-overlay-boxes.d.cts +0 -2
- package/lib/internal/opened-overlay-boxes.d.ts +0 -2
- package/lib/internal/snackbar-item.d.cts +0 -17
- package/lib/internal/snackbar-item.d.ts +0 -17
- package/lib/internal/window-order.d.cts +0 -6
- package/lib/internal/window-order.d.ts +0 -6
- package/lib/types/label-preset.d.cts +0 -12
- package/lib/types/label-preset.d.ts +0 -12
- package/lib/types/modal-dialog.d.cts +0 -13
- package/lib/types/modal-dialog.d.ts +0 -13
- package/lib/types/movable-window.d.cts +0 -16
- package/lib/types/movable-window.d.ts +0 -16
- package/lib/warning-popper.vue_vue_type_style_index_0_lang-BKV_FX6k.js +0 -1837
- package/lib/warning-popper.vue_vue_type_style_index_0_lang-CHmkjVCO.cjs +0 -1
- package/src/helpers/data-table-csv.ts +0 -55
- package/src/internal/data-table-value.ts +0 -99
- package/src/internal/opened-overlay-boxes.ts +0 -2
- package/src/internal/snackbar-item.ts +0 -20
- package/src/internal/window-order.ts +0 -11
- package/src/types/data-table.ts +0 -196
- package/src/types/label-preset.ts +0 -13
- package/src/types/modal-dialog.ts +0 -16
- package/src/types/movable-window.ts +0 -18
- /package/lib/helpers/{show-screen-loading.d.cts → screen-loading.d.cts} +0 -0
- /package/lib/helpers/{show-screen-loading.d.ts → screen-loading.d.ts} +0 -0
- /package/lib/internal/{tab-group-context.d.cts → tab-group.d.cts} +0 -0
- /package/lib/internal/{tab-group-context.d.ts → tab-group.d.ts} +0 -0
- /package/src/helpers/{show-screen-loading.ts → screen-loading.ts} +0 -0
- /package/src/internal/{tab-group-context.ts → tab-group.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),S=require("@digitalwalletcorp/vue-svg-icons"),M=e.defineComponent({__name:"label-icon",props:{preset:{},gap:{},iconClass:{type:[Boolean,null,String,Object,Array]},iconStyle:{type:[Boolean,null,String,Object,Array]},labelClass:{type:[Boolean,null,String,Object,Array]},labelStyle:{type:[Boolean,null,String,Object,Array]}},setup(l){const o=l,t=e.useSlots();return(n,a)=>(e.openBlock(),e.createElementBlock("span",{class:"dwui-label-icon",style:e.normalizeStyle(o.gap==null?void 0:{"--dwui-gap-label-icon":o.gap})},[e.renderSlot(n.$slots,"icon",{},()=>[o.preset!=null?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.preset.icon),e.mergeProps({key:0},o.preset.iconProps,{class:o.iconClass,style:o.iconStyle}),null,16,["class","style"])):e.createCommentVNode("",!0)]),t.default!=null||o.preset!=null?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["dwui-label",o.labelClass]),style:e.normalizeStyle(o.labelStyle)},[e.renderSlot(n.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(typeof o.preset?.label=="function"?o.preset.label():o.preset?.label),1)])],6)):e.createCommentVNode("",!0)],4))}}),Ce=70;function ee(l){const o=e.ref(!0);let t;return e.onMounted(()=>{const n=l.value;n!=null&&(t=new ResizeObserver(()=>{o.value=Ce<=n.scrollHeight}),t.observe(n))}),e.onBeforeUnmount(()=>{t?.disconnect()}),o}const _e=["disabled"],Se={class:"dwui-accordion-legend"},Ee=["aria-expanded"],$e=e.defineComponent({__name:"accordion-fieldset",props:e.mergeModels({legend:{},disabled:{type:Boolean},initialExpand:{type:Boolean}},{expanded:{type:Boolean,default:void 0},expandedModifiers:{}}),emits:["update:expanded"],setup(l){const o=l,t=e.useSlots(),n=e.ref(),a=e.useModel(l,"expanded"),r=e.ref(!!o.initialExpand),s=e.computed({get:()=>a.value??r.value,set:u=>{r.value=u,a.value=u}}),p=ee(n),d=()=>{s.value=!s.value};return(u,g)=>(e.openBlock(),e.createElementBlock("fieldset",{class:"dwui-accordion-fieldset",disabled:o.disabled},[e.createElementVNode("legend",Se,[e.createElementVNode("button",{type:"button",class:"dwui-accordion-toggle","aria-expanded":s.value,onClick:d},[e.createVNode(e.unref(S.SvgTriangleButton),{direction:s.value?"up":"down"},null,8,["direction"]),o.legend!=null||t.legend!=null||t.icon!=null?(e.openBlock(),e.createBlock(M,{key:0},e.createSlots({_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[e.renderSlot(u.$slots,"icon")]),key:"0"}:void 0,o.legend!=null||t.legend!=null?{name:"default",fn:e.withCtx(()=>[e.renderSlot(u.$slots,"legend",{},()=>[e.createTextVNode(e.toDisplayString(o.legend),1)])]),key:"1"}:void 0]),1024)):e.createCommentVNode("",!0)],8,Ee)]),e.createElementVNode("div",{ref_key:"refContents",ref:n,class:e.normalizeClass(["dwui-accordion-contents",e.unref(p)?s.value?"dwui-expanded":"dwui-shrunk":""])},[e.renderSlot(u.$slots,"default")],2)],8,_e))}}),xe={class:"dwui-accordion-section"},Ne={key:0,class:"dwui-accordion-section-control"},Pe=["disabled","aria-expanded"],Ve=e.defineComponent({__name:"accordion-section",props:e.mergeModels({disabled:{type:Boolean},initialExpand:{type:Boolean},noGradient:{type:Boolean},expandLabel:{},collapseLabel:{},expandPreset:{},collapsePreset:{}},{expanded:{type:Boolean,default:void 0},expandedModifiers:{}}),emits:["update:expanded"],setup(l){const o=l,t=e.useSlots(),n=e.ref(),a=e.useModel(l,"expanded"),r=e.ref(!!o.initialExpand),s=e.computed({get:()=>a.value??r.value,set:k=>{r.value=k,a.value=k}}),p=ee(n),d=e.computed(()=>s.value?o.collapsePreset:o.expandPreset),u=()=>(s.value?t["collapse-icon"]:t["expand-icon"])??d.value?.icon,g=()=>(s.value?t["collapse-icon"]:t["expand-icon"])==null?d.value?.iconProps:void 0,v=e.computed(()=>{const k=s.value?o.collapseLabel:o.expandLabel;if(k!=null)return k;const C=d.value?.label;return typeof C=="function"?C():C}),m=()=>{s.value=!s.value};return(k,C)=>(e.openBlock(),e.createElementBlock("div",xe,[e.createElementVNode("div",{ref_key:"refContents",ref:n,class:e.normalizeClass(["dwui-accordion-section-contents",[e.unref(p)?s.value?"dwui-expanded":"dwui-shrunk":"",{"dwui-no-gradient":o.noGradient}]])},[e.renderSlot(k.$slots,"default")],2),e.unref(p)?(e.openBlock(),e.createElementBlock("div",Ne,[e.createElementVNode("button",{type:"button",class:"dwui-accordion-section-toggle",disabled:o.disabled,"aria-expanded":s.value,onClick:e.withModifiers(m,["stop"])},[u()!=null||v.value!=null?(e.openBlock(),e.createBlock(M,{key:0},e.createSlots({_:2},[u()!=null?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(u()),e.normalizeProps(e.guardReactiveProps(g())),null,16))]),key:"0"}:void 0,v.value!=null?{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(v.value),1)]),key:"1"}:void 0]),1024)):(e.openBlock(),e.createBlock(e.unref(S.SvgTriangleButton),{key:1,direction:s.value?"up":"down"},null,8,["direction"]))],8,Pe)])):e.createCommentVNode("",!0)]))}}),Le=["aria-label"],Me=e.defineComponent({__name:"copy-button",props:{value:{},label:{default:"Copy"}},emits:["emit:copy","emit:error"],setup(l,{emit:o}){const t=l,n=o,a=e.useSlots(),r=async()=>{const s=String(typeof t.value=="function"?t.value():t.value);try{await navigator.clipboard.writeText(s)}catch(p){n("emit:error",p);return}n("emit:copy",s)};return(s,p)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"dwui-copy-button","aria-label":a.default?void 0:t.label,onClick:r},[e.renderSlot(s.$slots,"default",{},()=>[e.createVNode(e.unref(S.SvgMemo))])],8,Le))}}),Te=["aria-label","aria-checked"],De={class:"dwui-dark-mode-selector-track"},ze={class:"dwui-dark-mode-selector-icon-light"},Ae={class:"dwui-dark-mode-selector-icon-dark"},Oe=e.defineComponent({__name:"dark-mode-selector",props:{storageKey:{default:"dwui-color-scheme"},label:{default:"Dark mode"}},emits:["emit:change"],setup(l,{emit:o}){const t=l,n=o,a=e.ref(!1);let r=null,s=null;const p=y=>y==="light"||y==="dark",d=()=>s?.matches?"dark":"light",u=()=>{try{const y=localStorage.getItem(t.storageKey);return p(y)?y:null}catch{return null}},g=y=>{const c=document.documentElement.classList;c.remove(y==="dark"?"light":"dark"),c.add(y),a.value=y==="dark",r!==y&&(r=y,n("emit:change",y))},v=y=>{try{localStorage.setItem(t.storageKey,y)}catch{}g(y)},m=()=>{v(a.value?"light":"dark")},k=y=>{v(y.matches?"dark":"light")},C=y=>{y.key===t.storageKey&&g(p(y.newValue)?y.newValue:d())};return e.onMounted(()=>{s=window.matchMedia("(prefers-color-scheme: dark)"),g(u()??d()),s.addEventListener("change",k),window.addEventListener("storage",C)}),e.onBeforeUnmount(()=>{s?.removeEventListener("change",k),window.removeEventListener("storage",C)}),(y,c)=>(e.openBlock(),e.createElementBlock("button",{type:"button",role:"switch",class:"dwui-dark-mode-selector","aria-label":t.label,"aria-checked":a.value,onClick:m},[e.createElementVNode("span",De,[e.createElementVNode("span",ze,[e.renderSlot(y.$slots,"icon-light",{},()=>[e.createVNode(e.unref(S.SvgHighBrightness))])]),e.createElementVNode("span",Ae,[e.renderSlot(y.$slots,"icon-dark",{},()=>[e.createVNode(e.unref(S.SvgMoonPhases),{"moon-age":3.85})])])]),c[0]||(c[0]=e.createElementVNode("span",{class:"dwui-dark-mode-selector-handle"},null,-1))],8,Te))}}),Ie={class:"dwui-pagination"},He={class:"dwui-pagination-list"},Re=["disabled","aria-label","title"],We=["disabled","aria-label","title"],je=["disabled","aria-label","title"],Fe=["aria-current","onClick"],Ke=["disabled","aria-label","title"],Ue=["disabled","aria-label","title"],Ge=["disabled","aria-label","title"],Xe={key:0,class:"dwui-pagination-select"},Ye=["value","disabled"],qe=["value"],Qe=e.defineComponent({__name:"pagination",props:{current:{},totalCount:{},limit:{},maxPagination:{},showPageSelect:{type:Boolean},labels:{}},emits:["emit:changePage"],setup(l,{emit:o}){const t=l,n=o,a=e.computed(()=>Math.ceil(t.totalCount/t.limit)),r=e.computed(()=>Math.min(Math.max(t.current,1),a.value)),s=e.ref(!1),p=e.computed(()=>a.value<1?[]:s.value?Array.from({length:a.value},(c,B)=>B+1):[r.value]),d=e.computed(()=>{if(a.value<1)return[];const c=Math.min(Math.max(r.value-Math.floor((t.maxPagination-1)/2),1),Math.max(a.value-t.maxPagination+1,1)),B=Math.min(c+t.maxPagination-1,a.value);return Array.from({length:B-c+1},(h,$)=>c+$)}),u=c=>{c!==t.current&&n("emit:changePage",c)},g=c=>{let B;c<0?B=Math.max(d.value[0]-t.maxPagination,1):B=Math.min(d.value[d.value.length-1]+t.maxPagination,a.value)-t.maxPagination+1,u(B+Math.round((t.maxPagination-1)/2))},v=c=>{u(Number(c.target.value))},m=()=>{s.value=!0},k=c=>{document.activeElement!==c.currentTarget&&(s.value=!1)},C=()=>{s.value=!0},y=()=>{s.value=!1};return(c,B)=>(e.openBlock(),e.createElementBlock("div",Ie,[e.createElementVNode("ul",He,[e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:r.value<=1,"aria-label":t.labels.firstPage,title:t.labels.firstPage,onClick:B[0]||(B[0]=h=>u(1))},[e.createVNode(e.unref(S.SvgChevronDouble),{direction:"left",size:"1em","stroke-width":8})],8,Re)]),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:r.value<=1,"aria-label":t.labels.previousPage,title:t.labels.previousPage,onClick:B[1]||(B[1]=h=>u(r.value-1))},[e.createVNode(e.unref(S.SvgChevron),{direction:"left",size:"1em","stroke-width":8})],8,We)]),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:d.value.length===0||d.value[0]===1,"aria-label":t.labels.previousPages,title:t.labels.previousPages,onClick:B[2]||(B[2]=h=>g(-1))},[e.createVNode(e.unref(S.SvgBlackArrow),{direction:"left",size:"1em"})],8,je)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,h=>(e.openBlock(),e.createElementBlock("li",{key:h},[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["dwui-pagination-page",{"dwui-current":h===r.value}]),"aria-current":h===r.value?"page":void 0,onClick:$=>u(h)},e.toDisplayString(h),11,Fe)]))),128)),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:d.value.length===0||d.value[d.value.length-1]===a.value,"aria-label":t.labels.nextPages,title:t.labels.nextPages,onClick:B[3]||(B[3]=h=>g(1))},[e.createVNode(e.unref(S.SvgBlackArrow),{direction:"right",size:"1em"})],8,Ke)]),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:a.value<=r.value,"aria-label":t.labels.nextPage,title:t.labels.nextPage,onClick:B[4]||(B[4]=h=>u(r.value+1))},[e.createVNode(e.unref(S.SvgChevron),{direction:"right",size:"1em","stroke-width":8})],8,Ue)]),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:a.value<=r.value,"aria-label":t.labels.lastPage,title:t.labels.lastPage,onClick:B[5]||(B[5]=h=>u(a.value))},[e.createVNode(e.unref(S.SvgChevronDouble),{direction:"right",size:"1em","stroke-width":8})],8,Ge)])]),t.showPageSelect?(e.openBlock(),e.createElementBlock("label",Xe,[e.createElementVNode("span",null,e.toDisplayString(t.labels.pageNumber),1),e.createElementVNode("select",{value:r.value,disabled:a.value<=1,onPointerenter:m,onPointerleave:k,onFocus:C,onBlur:y,onChange:v},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,h=>(e.openBlock(),e.createElementBlock("option",{key:h,value:h},e.toDisplayString(h)+" ("+e.toDisplayString((h-1)*t.limit+1)+" - "+e.toDisplayString(Math.min(h*t.limit,t.totalCount))+") ",9,qe))),128))],40,Ye)])):e.createCommentVNode("",!0)]))}}),Je={class:"dwui-data-table-controls"},Ze={class:"dwui-data-table-tools"},et={key:0,class:"dwui-data-table-total"},tt={class:"dwui-data-table-total-count"},ot={key:1,class:"dwui-data-table-limit"},nt=["value","max"],lt=["title","aria-label"],at=["title","aria-label"],X=e.defineComponent({__name:"data-table-controls",props:{pagination:{type:Boolean},showTotal:{type:Boolean},showLimit:{type:Boolean},showPageSelect:{type:Boolean},showDownloadPage:{type:Boolean},showDownloadAll:{type:Boolean},current:{},limit:{},maxLimit:{},maxPagination:{},totalCount:{},labels:{},formatTotalCount:{type:Function}},emits:["emit:changePage","emit:changeLimit","emit:downloadPage","emit:downloadAll"],setup(l,{emit:o}){const t=l,n=o,a=new Intl.NumberFormat("en-US"),r=e.computed(()=>t.formatTotalCount?t.formatTotalCount(t.totalCount):a.format(t.totalCount)),s=p=>{const d=p.target,u=Math.min(Math.max(Math.trunc(Number(d.value))||1,1),t.maxLimit);d.value=String(u),u!==t.limit&&n("emit:changeLimit",u)};return(p,d)=>(e.openBlock(),e.createElementBlock("div",Je,[t.pagination?(e.openBlock(),e.createBlock(Qe,{key:0,current:t.current,"total-count":t.totalCount,limit:t.limit,"max-pagination":t.maxPagination,"show-page-select":t.showPageSelect,labels:t.labels,"onEmit:changePage":d[0]||(d[0]=u=>n("emit:changePage",u))},null,8,["current","total-count","limit","max-pagination","show-page-select","labels"])):e.createCommentVNode("",!0),e.createElementVNode("div",Ze,[t.showTotal?(e.openBlock(),e.createElementBlock("span",et,[e.createElementVNode("span",null,e.toDisplayString(t.labels.totalCount),1),e.createElementVNode("span",tt,e.toDisplayString(r.value),1),e.createElementVNode("span",null,e.toDisplayString(t.labels.totalUnit),1)])):e.createCommentVNode("",!0),t.showLimit?(e.openBlock(),e.createElementBlock("label",ot,[e.createElementVNode("span",null,e.toDisplayString(t.labels.limit),1),e.createElementVNode("input",{type:"number",value:t.limit,min:"1",max:t.maxLimit,step:"1",onChange:s},null,40,nt)])):e.createCommentVNode("",!0),t.showDownloadPage?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",title:t.labels.downloadPage,"aria-label":t.labels.downloadPage,onClick:d[1]||(d[1]=u=>n("emit:downloadPage"))},[e.createVNode(e.unref(S.SvgFolderDownload))],8,lt)):e.createCommentVNode("",!0),t.showDownloadAll?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",title:t.labels.downloadAll,"aria-label":t.labels.downloadAll,onClick:d[2]||(d[2]=u=>n("emit:downloadAll"))},[e.createVNode(e.unref(S.SvgCloudDownload))],8,at)):e.createCommentVNode("",!0)])]))}}),R=(l,o)=>{let t=l;for(const n of o.replace(/\[(\w+)\]/g,".$1").split(".")){if(t==null)return;t=t[n]}return t},W=l=>typeof l=="function"?l():l??"",Y=l=>l===!0||l==="true"||l==="1"||l==="on"||l===1,q=l=>typeof l=="number"?l:Number(String(l).replace(/[^+\-\d.]/g,"")),rt=(l,o,t)=>{if(l==null&&o==null)return 0;if(l==null)return-1;if(o==null)return 1;if(l===o)return 0;switch(t){case"boolean":return(Y(l)?1:0)-(Y(o)?1:0);case"number":{const n=q(l),a=q(o);return Number.isNaN(n)||Number.isNaN(a)?(Number.isNaN(n)?0:1)-(Number.isNaN(a)?0:1):n-a}case"object":return A(l).localeCompare(A(o));default:return String(l).localeCompare(String(o))}},A=l=>{try{return JSON.stringify(l,(o,t)=>typeof t=="bigint"?t.toString():t)??""}catch{return""}},st="$index",te=l=>{const o=[];for(const t of l)if(t.csv===!0)o.push({header:t,column:{}});else if(Array.isArray(t.csv))for(const n of t.csv)n.disabled||o.push({header:t,column:n});return o},it=l=>te(l).map(({header:o,column:t})=>W(t.label??o.label)),ct=(l,o,t)=>te(l).map(({header:n,column:a})=>{if(a.format)return a.format(o);const r=a.key??n.id;return r===st?t:R(o,r)}),oe=Symbol("dwui-vue-core-options"),dt=["rowspan","colspan","title","aria-sort"],ut={class:"dwui-data-table-header"},mt=["role","tabindex","onClick","onKeydown"],pt=["innerHTML"],ft={key:2},vt=["onPointerdown"],gt={key:0,class:"dwui-data-table-no-data"},ht=["colspan"],wt={key:0,class:"dwui-data-table-loading"},bt=e.defineComponent({__name:"data-table",props:{dataList:{},headers:{},loading:{type:Boolean,default:!1},totalCount:{default:void 0},current:{default:1},limit:{default:100},maxLimit:{default:void 0},maxPagination:{default:void 0},selectable:{type:Boolean,default:void 0},controls:{default:void 0},pagination:{default:void 0},showDownloadPage:{type:Boolean,default:void 0},showDownloadAll:{type:Boolean,default:void 0},showTotal:{type:Boolean,default:void 0},showLimit:{type:Boolean,default:void 0},showPageSelect:{type:Boolean,default:void 0},showNoData:{type:Boolean,default:void 0},resizable:{type:Boolean,default:void 0},sortable:{type:Boolean,default:void 0},sortMode:{default:void 0},contentClass:{type:[Boolean,null,String,Object,Array],default:void 0},contentStyle:{type:[Boolean,null,String,Object,Array],default:void 0},tableClass:{type:[Boolean,null,String,Object,Array],default:void 0},tableStyle:{type:[Boolean,null,String,Object,Array],default:void 0},labels:{default:void 0},formatTotalCount:{type:Function,default:void 0}},emits:["emit:selectRow","emit:changeSort","emit:updateHeader","emit:dblclickRow","emit:changeLimit","emit:changePage","emit:downloadPage","emit:downloadAll"],setup(l,{expose:o,emit:t}){const n=l,a=t,r=e.inject(oe,{}),s=e.ref(),p=e.ref(),d=e.ref(),u=e.ref({}),g=e.ref(""),v=e.ref(!1),m=e.ref();let k;const C=e.computed(()=>n.headers.map(i=>u.value[i.id]==null?i:{...i,width:u.value[i.id]})),y={maxLimit:9999,maxPagination:7,selectable:!0,controls:"both",pagination:"both",showDownloadPage:!0,showDownloadAll:!0,showTotal:!0,showLimit:!0,showPageSelect:!1,showNoData:!0,resizable:!0,sortable:!0,sortMode:"remote",contentClass:void 0,contentStyle:void 0,tableClass:void 0,tableStyle:void 0,formatTotalCount:void 0},c=e.computed(()=>{const i={...y};for(const f of[r.dataTable??{},n])for(const w of Object.keys(y))f[w]!==void 0&&Object.assign(i,{[w]:f[w]});return i}),B=e.computed(()=>{const i={totalCount:"Total",totalUnit:"",limit:"Rows per page",noData:"No data found",pageNumber:"Page",downloadPage:"Download this page",downloadAll:"Download all",firstPage:"First page",previousPage:"Previous page",previousPages:"Previous pages",nextPages:"Next pages",nextPage:"Next page",lastPage:"Last page",...r.dataTable?.labels,...n.labels},f={};for(const w of Object.keys(i)){const E=i[w];f[w]=typeof E=="function"?E():E}return f}),h=e.computed(()=>Math.min(n.limit,c.value.maxLimit)),$=e.computed(()=>({showTotal:c.value.showTotal,showLimit:c.value.showLimit,showPageSelect:c.value.showPageSelect,showDownloadPage:c.value.showDownloadPage,showDownloadAll:c.value.showDownloadAll,current:n.current,limit:h.value,maxLimit:c.value.maxLimit,maxPagination:c.value.maxPagination,totalCount:n.totalCount??n.dataList.length,formatTotalCount:c.value.formatTotalCount,labels:B.value})),b=e.shallowRef(void 0),x=e.computed(()=>{const i=c.value.sortMode==="page"?n.headers.find(w=>w.id===g.value):void 0;if(!i)return n.dataList;const f=i.compare??((w,E)=>{const N=i.sortKey??i.id;return rt(R(w,N),R(E,N),i.type??"string")});return[...n.dataList].sort((w,E)=>v.value?f(E,w):f(w,E))}),_=e.computed(()=>{const i=b.value;if(i==null)return-1;const f=x.value.indexOf(i);if(f!==-1)return f;const w=A(i);return w===""?-1:x.value.findIndex(E=>A(E)===w)}),V=e.computed(()=>n.headers.reduce((i,f)=>i+(f.colspan==null?1:Number(f.colspan)),0)),P=i=>{if(i!=null)return typeof i=="number"?`${i}px`:i},L=i=>({width:P(i.width),minWidth:P(i.minWidth),maxWidth:P(i.maxWidth)}),ve=i=>{if(g.value===i)return v.value?"descending":"ascending"},j=i=>{if(!(!c.value.sortable||g.value!==i))return v.value?"down":"up"},ge=i=>(n.current-1)*h.value+i+1,F=()=>Array.from(d.value?.children??[]).filter(i=>i.tagName==="TR"&&!i.classList.contains("dwui-data-table-no-data")),he=i=>Array.from(i.children).filter(f=>f.tagName==="TD"||f.tagName==="TH"),K=()=>{a("emit:updateHeader",C.value.map(i=>({...i})))},O=()=>{F().forEach((i,f)=>i.classList.toggle("dwui-selected",f===_.value))},we=()=>{const i=s.value,f=F()[_.value];if(!i||!f)return;const w=p.value?.offsetHeight??0,E=f.offsetTop,N=E+f.offsetHeight;E<i.scrollTop+w?i.scrollTop=E-w:i.scrollTop+i.clientHeight<N&&(i.scrollTop=N-i.clientHeight)},D=(i,f)=>{b.value=i,a("emit:selectRow",i,f)},U=(i,f)=>{c.value.selectable&&(f===_.value?D(void 0,-1):(D(i,f),s.value?.focus({preventScroll:!0})))},be=(i,f)=>{f!==_.value&&U(i,f),a("emit:dblclickRow",i,f)},ye=i=>{if(i.target!==i.currentTarget||_.value<0||i.key!=="ArrowUp"&&i.key!=="ArrowDown")return;const f=_.value+(i.key==="ArrowUp"?-1:1);f<0||x.value.length<=f||(i.preventDefault(),D(x.value[f],f))},I=i=>{!c.value.sortable||n.dataList.length===0||(v.value=g.value===i.id?!v.value:!1,g.value=i.id,a("emit:changeSort",{sortKey:g.value,descending:v.value}))},ke=(i,f)=>{if(!c.value.resizable)return;i.preventDefault();const w=p.value?.firstElementChild,E=w?he(w):[];for(const[N,T]of E.entries())u.value[n.headers[N].id]=T.getBoundingClientRect().width;m.value={index:f,x:i.clientX},i.currentTarget.setPointerCapture(i.pointerId),K()},Be=i=>{if(!m.value)return;const f=i.clientX-m.value.x;if(f===0)return;m.value.x=i.clientX;const w=m.value.index,E=n.headers.map(T=>T.id);u.value[E[w]]+=f;const N=f/(E.length-w-1);for(const T of E.slice(w+1))u.value[T]-=N},G=()=>{m.value&&(m.value=void 0,K())};return e.onMounted(()=>{k=new MutationObserver(O),d.value&&k.observe(d.value,{childList:!0}),O()}),e.onBeforeUnmount(()=>{k?.disconnect()}),e.watch(()=>n.headers,(i,f)=>{const w=i.map(N=>N.id),E=f.map(N=>N.id);(w.length!==E.length||w.some(N=>!E.includes(N)))&&(u.value={})}),e.watch(()=>n.loading,(i,f)=>{f&&!i&&(c.value.sortMode==="page"&&(g.value="",v.value=!1),b.value!=null&&D(void 0,-1))}),e.watch(_,i=>{0<=i&&we()},{flush:"post"}),e.watch(_,O,{flush:"post"}),o({getSortContext:()=>({sortKey:g.value,descending:v.value})}),(i,f)=>(e.openBlock(),e.createElementBlock("section",{class:e.normalizeClass(["dwui-data-table",{"dwui-selectable":c.value.selectable}])},[c.value.controls==="both"||c.value.controls==="top"?(e.openBlock(),e.createBlock(X,e.mergeProps({key:0},$.value,{pagination:c.value.pagination==="both"||c.value.pagination==="top","onEmit:changePage":f[0]||(f[0]=w=>a("emit:changePage",w)),"onEmit:changeLimit":f[1]||(f[1]=w=>a("emit:changeLimit",w)),"onEmit:downloadPage":f[2]||(f[2]=w=>a("emit:downloadPage")),"onEmit:downloadAll":f[3]||(f[3]=w=>a("emit:downloadAll"))}),null,16,["pagination"])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"refContent",ref:s,class:e.normalizeClass(["dwui-data-table-content",[{"dwui-loading":n.loading},c.value.contentClass]]),style:e.normalizeStyle(c.value.contentStyle),tabindex:"-1",onKeydown:ye},[e.createElementVNode("table",{class:e.normalizeClass(c.value.tableClass),style:e.normalizeStyle(c.value.tableStyle)},[e.createElementVNode("thead",{ref_key:"refThead",ref:p},[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(w,E)=>(e.openBlock(),e.createElementBlock("th",{key:w.id,rowspan:w.rowspan,colspan:w.colspan,title:w.title,style:e.normalizeStyle(L(w)),"aria-sort":ve(w.id),scope:"col"},[e.createElementVNode("div",ut,[e.createElementVNode("span",{class:"dwui-data-table-sort",role:c.value.sortable?"button":void 0,tabindex:c.value.sortable?0:void 0,onClick:N=>I(w),onKeydown:[e.withKeys(e.withModifiers(N=>I(w),["prevent"]),["enter"]),e.withKeys(e.withModifiers(N=>I(w),["prevent"]),["space"])]},[j(w.id)?(e.openBlock(),e.createBlock(e.unref(S.SvgPointingTriangle),{key:0,direction:j(w.id),size:"0.7em"},null,8,["direction"])):e.createCommentVNode("",!0),w.html?(e.openBlock(),e.createElementBlock("span",{key:1,innerHTML:e.unref(W)(w.label)},null,8,pt)):(e.openBlock(),e.createElementBlock("span",ft,e.toDisplayString(e.unref(W)(w.label)),1))],40,mt)]),c.value.resizable&&E<C.value.length-1?(e.openBlock(),e.createElementBlock("div",{key:0,class:"dwui-data-table-resizer",onPointerdown:N=>ke(N,E),onPointermove:Be,onPointerup:G,onPointercancel:G},null,40,vt)):e.createCommentVNode("",!0)],12,dt))),128))])],512),e.createElementVNode("tbody",{ref_key:"refTbody",ref:d},[n.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.renderSlot(i.$slots,"default",{rows:x.value,clickRow:U,dblclickRow:be,rowNumber:ge,selectedIndex:_.value}),n.dataList.length===0&&c.value.showNoData?(e.openBlock(),e.createElementBlock("tr",gt,[e.createElementVNode("td",{colspan:V.value},e.toDisplayString(B.value.noData),9,ht)])):e.createCommentVNode("",!0)],64))],512)],6),n.loading?(e.openBlock(),e.createElementBlock("div",wt,[e.renderSlot(i.$slots,"loading",{},()=>[f[8]||(f[8]=e.createElementVNode("div",{class:"dwui-data-table-loading-spinner"},null,-1))])])):e.createCommentVNode("",!0)],38),c.value.controls==="both"||c.value.controls==="bottom"?(e.openBlock(),e.createBlock(X,e.mergeProps({key:1},$.value,{pagination:c.value.pagination==="both"||c.value.pagination==="bottom","onEmit:changePage":f[4]||(f[4]=w=>a("emit:changePage",w)),"onEmit:changeLimit":f[5]||(f[5]=w=>a("emit:changeLimit",w)),"onEmit:downloadPage":f[6]||(f[6]=w=>a("emit:downloadPage")),"onEmit:downloadAll":f[7]||(f[7]=w=>a("emit:downloadAll"))}),null,16,["pagination"])):e.createCommentVNode("",!0)],2))}}),Q={top:"bottom",bottom:"top",left:"right",right:"left"},H=(l,o,t)=>Math.min(Math.max(l,o),t),ne=(l,o,t,n)=>{const{offset:a,margin:r,arrowMargin:s}=n,[p,d="center"]=n.placement.split("-"),u=p==="top"||p==="bottom",g=l.top+l.height,v=l.left+l.width,m={top:l.top-r,bottom:t.height-g-r,left:l.left-r,right:t.width-v-r},y=(u?o.height:o.width)+a<=m[p]||m[Q[p]]<=m[p]?p:Q[p];let c;switch(y){case"top":c=l.top-a-o.height;break;case"bottom":c=g+a;break;case"left":c=l.left-a-o.width;break;default:c=v+a;break}const B=u?l.left:l.top,h=u?l.width:l.height,$=u?o.width:o.height;let b;switch(d){case"start":b=B;break;case"end":b=B+h-$;break;default:b=B+(h-$)/2;break}const x=H(u?c:b,r,Math.max(r,t.height-r-o.height)),_=H(u?b:c,r,Math.max(r,t.width-r-o.width)),V=B+h/2,L=H(V-(u?_:x),s,Math.max(s,$-s));return{top:x,left:_,side:y,arrow:L}},yt=["popover","data-side"],kt={class:"dwui-anchored-popover-content"},J=4,Bt=7,Ct=12,_t=8,le=e.defineComponent({__name:"anchored-popover",props:{anchor:{},placement:{},arrow:{type:Boolean},mode:{}},emits:["emit:open","emit:close"],setup(l,{expose:o,emit:t}){const n=l,a=t,r=e.ref(),s=e.ref(),p=()=>{r.value?.hidePopover()},d=()=>{r.value?.showPopover()},u=()=>{const m=r.value;if(!n.anchor||!m)return;const k={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight},C=ne(n.anchor.getBoundingClientRect(),m.getBoundingClientRect(),k,{placement:n.placement,offset:n.arrow?J+Bt:J,margin:_t,arrowMargin:Ct});s.value=C.side,m.style.top=`${C.top}px`,m.style.left=`${C.left}px`,m.style.setProperty("--dwui-offset-arrow",`${C.arrow}px`),m.style.visibility="visible"},g=m=>{r.value?.contains(m.target)||u()},v=m=>{m.newState==="open"?(u(),window.addEventListener("scroll",g,!0),window.addEventListener("resize",u),a("emit:open")):(r.value&&(r.value.style.visibility=""),window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",u),a("emit:close"))};return e.onBeforeUnmount(()=>{window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",u)}),o({element:r,show:d,hide:p}),(m,k)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"refPanel",ref:r,class:e.normalizeClass(["dwui-anchored-popover",{"dwui-arrow":n.arrow}]),popover:n.mode,"data-side":s.value,onToggle:v},[e.createElementVNode("div",kt,[e.renderSlot(m.$slots,"default")])],42,yt))}}),St=["aria-label"],Et=e.defineComponent({inheritAttrs:!1,__name:"help-button",props:{placement:{default:"bottom-start"},arrow:{type:Boolean,default:!1},label:{default:"Help"}},emits:["emit:open","emit:close"],setup(l,{emit:o}){const t=l,n=o,a=e.useAttrs(),r=e.ref(),s=e.ref();return e.onMounted(()=>{const p=s.value?.element;r.value&&p&&(r.value.popoverTargetElement=p)}),(p,d)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("button",e.mergeProps({ref_key:"refButton",ref:r,type:"button",class:"dwui-help-button","aria-label":t.label},e.unref(a)),[e.renderSlot(p.$slots,"icon",{},()=>[e.createVNode(e.unref(S.SvgQuestion))])],16,St),e.createVNode(le,{ref_key:"refPopover",ref:s,class:"dwui-help-button-popover",mode:"auto",anchor:r.value,placement:t.placement,arrow:t.arrow,"onEmit:open":d[0]||(d[0]=u=>n("emit:open")),"onEmit:close":d[1]||(d[1]=u=>n("emit:close"))},{default:e.withCtx(()=>[e.renderSlot(p.$slots,"default")]),_:3},8,["anchor","placement","arrow"])],64))}}),$t=["aria-label","aria-describedby"],xt=150,ae=e.defineComponent({inheritAttrs:!1,__name:"icon-popper",props:{placement:{},arrow:{type:Boolean},popoverClass:{},label:{}},emits:["emit:open","emit:close"],setup(l,{emit:o}){const t=l,n=o,a=e.useAttrs(),r=e.ref(),s=e.ref(),p=e.ref(!1),d=e.useId();let u;const g=()=>{u!==void 0&&(clearTimeout(u),u=void 0)},v=()=>{g(),s.value?.show()},m=()=>{g(),s.value?.hide()},k=()=>{g(),u=setTimeout(()=>{u=void 0,s.value?.hide()},xt)},C=P=>{const L=P.target;!r.value?.contains(L)&&!s.value?.element?.contains(L)&&m()},y=P=>{P.pointerType!=="touch"&&v()},c=P=>{P.pointerType!=="touch"&&k()},B=P=>{P.pointerType!=="touch"&&g()},h=P=>{P.pointerType==="touch"&&(p.value?m():v())},$=()=>{v()},b=()=>{m()},x=()=>{m()},_=()=>{p.value=!0,document.addEventListener("pointerdown",C,!0),n("emit:open")},V=()=>{p.value=!1,document.removeEventListener("pointerdown",C,!0),n("emit:close")};return e.onBeforeUnmount(()=>{g(),document.removeEventListener("pointerdown",C,!0)}),(P,L)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("span",e.mergeProps({ref_key:"refTrigger",ref:r,class:"dwui-icon-popper",tabindex:"0","aria-label":t.label,"aria-describedby":e.unref(d)},e.unref(a),{onPointerenter:y,onPointerleave:c,onPointerdown:h,onFocus:$,onBlur:b,onKeydown:e.withKeys(x,["esc"])}),[e.renderSlot(P.$slots,"icon")],16,$t),e.createVNode(le,{ref_key:"refPopover",ref:s,id:e.unref(d),class:e.normalizeClass(["dwui-icon-popper-popover",t.popoverClass]),role:"tooltip",mode:"manual",anchor:r.value,placement:t.placement,arrow:t.arrow,onPointerenter:B,onPointerleave:c,"onEmit:open":_,"onEmit:close":V},{default:e.withCtx(()=>[e.renderSlot(P.$slots,"default")]),_:3},8,["id","class","anchor","placement","arrow"])],64))}}),Nt=e.defineComponent({__name:"help-popper",props:{placement:{default:"right"},arrow:{type:Boolean,default:!0},label:{default:"Help"}},emits:["emit:open","emit:close"],setup(l,{emit:o}){const t=l,n=o;return(a,r)=>(e.openBlock(),e.createBlock(ae,{class:"dwui-help-popper","popover-class":"dwui-help-popper-popover",placement:t.placement,arrow:t.arrow,label:t.label,"onEmit:open":r[0]||(r[0]=s=>n("emit:open")),"onEmit:close":r[1]||(r[1]=s=>n("emit:close"))},{icon:e.withCtx(()=>[e.renderSlot(a.$slots,"icon",{},()=>[e.createVNode(e.unref(S.SvgQuestion))])]),default:e.withCtx(()=>[e.renderSlot(a.$slots,"default")]),_:3},8,["placement","arrow","label"]))}}),Pt=e.defineComponent({__name:"hourglass-loading",props:{loading:{type:Boolean},duration:{},size:{default:"1.2em"}},setup(l){const o=l;return(t,n)=>o.loading?(e.openBlock(),e.createBlock(e.unref(S.SvgHourglass),{key:0,duration:o.duration,size:o.size,class:"dwui-hourglass-loading"},null,8,["duration","size"])):e.renderSlot(t.$slots,"default",{},void 0,void 0,1)}}),Vt=e.defineComponent({__name:"intersection-lazy-component",props:{root:{},rootMargin:{},threshold:{}},emits:["emit:visible"],setup(l,{emit:o}){const t=l,n=o,a=e.ref(),r=e.ref(!1);let s;const p=()=>{s?.disconnect(),s=void 0,!(!a.value||r.value)&&(s=new IntersectionObserver(d=>{d.some(u=>u.isIntersecting)&&(r.value=!0,s?.disconnect(),s=void 0,n("emit:visible"))},{root:t.root,rootMargin:t.rootMargin,threshold:t.threshold}),s.observe(a.value))};return e.onMounted(()=>{p()}),e.onBeforeUnmount(()=>{s?.disconnect()}),e.watch(()=>[t.root,t.rootMargin,t.threshold],()=>{p()},{flush:"post"}),(d,u)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"refTarget",ref:a,class:"dwui-intersection-lazy-component"},[r.value?e.renderSlot(d.$slots,"default",{},void 0,void 0,0):e.renderSlot(d.$slots,"placeholder",{},void 0,void 0,1)],512))}}),Lt={type:"button",class:"dwui-label-button"},Mt=e.defineComponent({__name:"label-button",props:{preset:{},gap:{},iconClass:{type:[Boolean,null,String,Object,Array]},iconStyle:{type:[Boolean,null,String,Object,Array]},labelClass:{type:[Boolean,null,String,Object,Array]},labelStyle:{type:[Boolean,null,String,Object,Array]}},setup(l){const o=l,t=e.useSlots();return(n,a)=>(e.openBlock(),e.createElementBlock("button",Lt,[e.createVNode(M,{preset:o.preset,gap:o.gap,"icon-class":o.iconClass,"icon-style":o.iconStyle,"label-class":o.labelClass,"label-style":o.labelStyle},e.createSlots({_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[e.renderSlot(n.$slots,"icon")]),key:"0"}:void 0,t.default!=null?{name:"default",fn:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),key:"1"}:void 0]),1032,["preset","gap","icon-class","icon-style","label-class","label-style"])]))}}),Tt=["aria-labelledby","aria-describedby"],Dt={class:"dwui-modal-dialog-header"},zt={class:"dwui-modal-dialog-icon"},At=["id","innerHTML"],Ot=["id"],It=["id"],Ht=["innerHTML"],Rt={key:1},Wt={key:0,class:"dwui-modal-dialog-images"},jt=["src","alt"],Ft=["onClick"],Kt=e.defineComponent({__name:"modal-dialog",props:e.mergeModels({type:{default:"info"},title:{default:void 0},message:{default:void 0},html:{type:Boolean,default:!1},image:{default:void 0},buttons:{default:void 0},okLabel:{default:"OK"},yesLabel:{default:"Yes"},noLabel:{default:"No"},cancelLabel:{default:"Cancel"}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:e.mergeModels(["emit:close"],["update:open"]),setup(l,{emit:o}){const t=l,n=o,a=e.useModel(l,"open"),r=e.ref(),s=e.ref(),p=e.useId(),d=e.useId(),u={info:S.SvgInfo,confirm:S.SvgQuestion,warn:S.SvgWarningSign,error:S.SvgCritical},g=["cancel","no","yes","ok"],v=e.computed(()=>t.buttons??(t.type==="confirm"?["yes","no"]:["ok"])),m=e.computed(()=>({ok:t.okLabel,yes:t.yesLabel,no:t.noLabel,cancel:t.cancelLabel})),k=e.computed(()=>t.message==null?[]:[t.message].flat()),C=e.computed(()=>[t.image??[]].flat().map(b=>typeof b=="string"?{src:b,alt:""}:b)),y=b=>{$(b)},c=b=>{b.preventDefault(),$("cancel")},B=b=>{if(b.key!=="ArrowLeft"&&b.key!=="ArrowRight")return;const x=[...s.value?.children??[]],_=x.indexOf(document.activeElement);_<0||x[b.key==="ArrowRight"?_+1:_-1]?.focus()},h=()=>{r.value?.showModal();const b=g.find(_=>v.value.includes(_)),x=b?v.value.indexOf(b):-1;s.value?.children[x]?.focus()},$=b=>{r.value?.close(),a.value=!1,n("emit:close",b)};return e.onMounted(()=>{a.value&&h()}),e.watch(a,b=>{b?h():r.value?.close()},{flush:"post"}),(b,x)=>(e.openBlock(),e.createElementBlock("dialog",{ref_key:"refDialog",ref:r,class:e.normalizeClass(["dwui-modal-dialog",`dwui-modal-dialog-${t.type}`]),"aria-labelledby":t.title?e.unref(p):void 0,"aria-describedby":e.unref(d),onCancel:c,onKeydown:B},[e.createElementVNode("div",Dt,[e.createElementVNode("span",zt,[e.renderSlot(b.$slots,"icon",{},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(u[t.type])))])]),t.title?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[t.html?(e.openBlock(),e.createElementBlock("span",{key:0,id:e.unref(p),class:"dwui-modal-dialog-title",innerHTML:t.title},null,8,At)):(e.openBlock(),e.createElementBlock("span",{key:1,id:e.unref(p),class:"dwui-modal-dialog-title"},e.toDisplayString(t.title),9,Ot))],64)):e.createCommentVNode("",!0)]),e.createElementVNode("div",{id:e.unref(d),class:"dwui-modal-dialog-body"},[e.renderSlot(b.$slots,"default",{},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,(_,V)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:V},[t.html?(e.openBlock(),e.createElementBlock("p",{key:0,innerHTML:_},null,8,Ht)):(e.openBlock(),e.createElementBlock("p",Rt,e.toDisplayString(_),1))],64))),128)),C.value.length?(e.openBlock(),e.createElementBlock("div",Wt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(_,V)=>(e.openBlock(),e.createElementBlock("img",{key:V,src:_.src,alt:_.alt},null,8,jt))),128))])):e.createCommentVNode("",!0)])],8,It),e.createElementVNode("div",{ref_key:"refButtons",ref:s,class:"dwui-modal-dialog-buttons"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,_=>(e.openBlock(),e.createElementBlock("button",{key:_,type:"button",class:e.normalizeClass(["dwui-modal-dialog-button",`dwui-modal-dialog-button-${_}`]),onClick:V=>y(_)},e.toDisplayString(m.value[_]),11,Ft))),128))],512)],42,Tt))}});function Ut(l){const o=l.minWidth??20,t=l.minHeight??20,n=e.ref(!1),a=e.ref(!1),r=e.reactive({x:0,y:0}),s=e.reactive({width:-1,height:-1});let p=null,d="bottom-right",u={x:0,y:0};const g=h=>{if(h.pointerId!==p)return;h.preventDefault();const $=h.clientX-u.x,b=h.clientY-u.y;if(u={x:h.clientX,y:h.clientY},n.value)r.x+=$,r.y+=b;else if(a.value){if(d.endsWith("left")){const x=Math.max(o,s.width-$);r.x+=s.width-x,s.width=x}else s.width=Math.max(o,s.width+$);if(d.startsWith("top")){const x=Math.max(t,s.height-b);r.y+=s.height-x,s.height=x}else s.height=Math.max(t,s.height+b)}},v=()=>{const h=l.target.value?.getBoundingClientRect().width||0;r.x<40-h&&(r.x=40-h),window.innerWidth-40<r.x&&(r.x=window.innerWidth-40),r.y<0&&(r.y=0),l.clampBottom&&window.innerHeight-20<r.y&&(r.y=window.innerHeight-20)},m=h=>{if(h.pointerId!==p)return;const $=n.value;k(),$&&v()},k=()=>{document.removeEventListener("pointermove",g,!0),document.removeEventListener("pointerup",m,!0),document.removeEventListener("pointercancel",m,!0),p=null,n.value=!1,a.value=!1},C=h=>{k(),p=h.pointerId,u={x:h.clientX,y:h.clientY},document.addEventListener("pointermove",g,!0),document.addEventListener("pointerup",m,!0),document.addEventListener("pointercancel",m,!0)},y=h=>{h.isPrimary&&l.dragMode()==="body"&&(C(h),n.value=!0)},c=h=>{h.isPrimary&&l.dragMode()==="header"&&(C(h),n.value=!0)},B=(h,$="bottom-right")=>{if(!h.isPrimary)return;d=$;const b=l.target.value?.getBoundingClientRect();b&&(s.width<0&&(s.width=b.width),s.height<0&&(s.height=b.height)),C(h),a.value=!0};return e.onBeforeUnmount(k),{moving:n,resizing:a,currentPosition:r,currentRect:s,onDragStart:y,onDragHeaderStart:c,onResizeStart:B,teardown:k}}const Gt=["aria-labelledby"],Xt=["id"],Yt=["aria-label"],qt=["onPointerdown"],re=e.defineComponent({__name:"movable-window",props:{name:{},dragMode:{},loading:{type:Boolean},closeLabel:{},clampBottom:{type:Boolean},headerClass:{type:[Boolean,null,String,Object,Array]},headerStyle:{type:[Boolean,null,String,Object,Array]}},emits:["emit:close"],setup(l,{expose:o,emit:t}){const n=l,a=t,r=e.ref(),s=e.useId(),p=["top-left","top-right","bottom-left"],d=Ut({target:r,dragMode:()=>n.dragMode,clampBottom:n.clampBottom}),u=e.computed(()=>{const{currentPosition:g,currentRect:v}=d;return{top:`${g.y}px`,left:`${g.x}px`,width:0<=v.width?`${v.width}px`:void 0,height:0<=v.height?`${v.height}px`:void 0}});return o({element:r,position:d.currentPosition,size:d.currentRect,teardown:d.teardown}),(g,v)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"refWindow",ref:r,class:"dwui-movable-window",role:"dialog","aria-labelledby":e.unref(s),style:e.normalizeStyle(u.value)},[e.createElementVNode("div",{class:"dwui-movable-window-frame",onPointerdown:v[2]||(v[2]=(...m)=>e.unref(d).onDragStart&&e.unref(d).onDragStart(...m))},[e.createElementVNode("div",{class:e.normalizeClass(["dwui-movable-window-header",[`${n.name}-header`,n.headerClass,{"dwui-movable":n.dragMode}]]),style:e.normalizeStyle(n.headerStyle),onPointerdown:v[1]||(v[1]=(...m)=>e.unref(d).onDragHeaderStart&&e.unref(d).onDragHeaderStart(...m))},[e.createElementVNode("div",{id:e.unref(s),class:e.normalizeClass(["dwui-movable-window-title",`${n.name}-title`])},[e.renderSlot(g.$slots,"title")],10,Xt),e.renderSlot(g.$slots,"actions"),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["dwui-movable-window-close-button",`${n.name}-close-button`]),"aria-label":n.closeLabel,onClick:v[0]||(v[0]=m=>a("emit:close"))},[e.createVNode(e.unref(S.SvgNegativeSquaredCrossMark))],10,Yt)],38),e.createElementVNode("div",{class:e.normalizeClass(["dwui-movable-window-body",[`${n.name}-body`,{"dwui-movable":n.dragMode==="body"}]])},[e.renderSlot(g.$slots,"default")],2)],32),n.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["dwui-movable-window-loading",`${n.name}-loading`])},[e.createElementVNode("div",{class:e.normalizeClass(["dwui-movable-window-spinner",`${n.name}-spinner`])},null,2)],2)):e.createCommentVNode("",!0),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(p,m=>e.createElementVNode("div",{key:m,class:e.normalizeClass(["dwui-movable-window-corner",[`${n.name}-corner`,`dwui-${m}`]]),onPointerdown:e.withModifiers(k=>e.unref(d).onResizeStart(k,m),["prevent"])},null,42,qt)),64)),e.createElementVNode("div",{class:e.normalizeClass(["dwui-movable-window-resizer",`${n.name}-resizer`]),onPointerdown:v[3]||(v[3]=e.withModifiers(m=>e.unref(d).onResizeStart(m,"bottom-right"),["prevent"]))},[e.createVNode(e.unref(S.SvgCornerDiagonal),{direction:"bottom-right"})],34)],12,Gt))}});let Z=0;const se=()=>(Z+=1,Z);function ie(l,o,t){const n=document.createElement("div");document.body.appendChild(n);const a=e.ref(!0),r=e.ref(!1),s={close:()=>{a.value=!1},setLoading:u=>{r.value=u}},p=e.defineComponent(()=>()=>l({open:a.value,loading:r.value,"onUpdate:open":u=>{a.value=u},"onEmit:close":()=>{t.delete(s),e.render(null,n),n.remove(),o.onClosed?.(),o.onClose?.()}},s)),d=e.h(p);return o.appContext&&(d.appContext=o.appContext),e.render(d,n),t.add(s),s}function ce(l){const o=e.getCurrentInstance();if(!o)throw new Error(`${l}() must be called inside setup().`);const t=new Set;return e.onBeforeUnmount(()=>{for(const n of t)n.close()}),{appContext:o.appContext,own:n=>{const a=n(()=>{t.delete(a)});return t.add(a),a}}}const z=[],de=new Set,ue=(l,o,t,n)=>{const{appContext:a,onClose:r,...s}=t??{};return ie((p,d)=>e.h(me,{...s,...p},{default:()=>e.h(l,{...o,close:d.close,setLoading:d.setLoading})}),{appContext:a,onClose:r,onClosed:n},de)};function Qt(l,o,t){return ue(l,o,t)}function Jt(){for(const l of[...de])l.close()}function Zt(){const l=ce("useOverlayBox");return{showOverlayBox:(o,t,n)=>l.own(a=>ue(o,t,{appContext:l.appContext,...n},a))}}const me=e.defineComponent({__name:"overlay-box",props:e.mergeModels({title:{default:void 0},dragMode:{default:void 0},closeOnBackdrop:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},closeLabel:{default:"Close"}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:e.mergeModels(["emit:close"],["update:open"]),setup(l,{emit:o}){const t=l,n=o,a=e.useModel(l,"open"),r=e.ref(),s=e.ref(0),p=Symbol("dwui-overlay-box");let d=null;const u=()=>{t.closeOnBackdrop&&(a.value=!1)},g=()=>{a.value=!1},v=c=>{c.key!=="Escape"||!c.isTrusted||c.isComposing||c.target instanceof Element&&c.target.closest("dialog")||z.at(-1)===p&&(a.value=!1)},m=()=>{n("emit:close")},k=()=>{const c=z.indexOf(p);0<=c&&z.splice(c,1)},C=()=>{s.value=se();const c=r.value,B=c?.element?.getBoundingClientRect();c&&(c.position.x=(window.innerWidth-(B?.width||0))/2,c.position.y=Math.max(0,(window.innerHeight-(B?.height||0))/2)),d=document.activeElement instanceof HTMLElement?document.activeElement:null,c?.element?.focus(),z.push(p)},y=()=>{r.value?.teardown(),k(),d?.isConnected&&d.focus(),d=null};return e.onMounted(()=>{a.value&&C()}),e.onBeforeUnmount(()=>{k()}),e.watch(a,c=>{c?C():y()},{flush:"post"}),(c,B)=>(e.openBlock(),e.createBlock(e.Transition,{name:"dwui-overlay-box-fade",onAfterLeave:m},{default:e.withCtx(()=>[a.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"dwui-overlay-box",style:e.normalizeStyle({"--dwui-order-window":s.value})},[e.createElementVNode("div",{class:"dwui-overlay-box-backdrop",onClick:u}),e.createVNode(re,{ref_key:"refWindow",ref:r,class:"dwui-overlay-box-container",name:"dwui-overlay-box",tabindex:"-1","drag-mode":t.dragMode,loading:t.loading,"close-label":t.closeLabel,"clamp-bottom":"",onKeydown:v,"onEmit:close":g},{title:e.withCtx(()=>[e.renderSlot(c.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(t.title),1)])]),default:e.withCtx(()=>[e.renderSlot(c.$slots,"default")]),_:3},8,["drag-mode","loading","close-label"])],4)):e.createCommentVNode("",!0)]),_:3}))}}),eo={class:"dwui-page-section"},to={class:"dwui-page-section-content"},oo=e.defineComponent({__name:"page-section",props:{title:{},icon:{default:"diamond"},iconVariant:{},iconColor:{},titleClass:{type:[Boolean,null,String,Object,Array]},titleStyle:{type:[Boolean,null,String,Object,Array]}},setup(l){const o=l,t={diamond:{component:S.SvgDiamond,shape:!0,color:"#1a44b6"},circle:{component:S.SvgCircle,shape:!0,color:"#e78b2f"},square:{component:S.SvgSquare,shape:!0,color:"#d13a2b"},pushpin:{component:S.SvgPushpin,shape:!1},"round-pushpin":{component:S.SvgRoundPushpin,shape:!1}},n=e.computed(()=>{const a=t[o.icon];return{component:a.component,props:a.shape?{variant:o.iconVariant,color:o.iconColor??a.color}:{}}});return(a,r)=>(e.openBlock(),e.createElementBlock("section",eo,[o.title!=null?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["dwui-page-section-title",o.titleClass]),style:e.normalizeStyle(o.titleStyle)},[e.createVNode(M,null,{icon:e.withCtx(()=>[e.renderSlot(a.$slots,"icon",{},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.value.component),e.normalizeProps(e.guardReactiveProps(n.value.props)),null,16))])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(o.title),1)]),_:3})],6)):e.createCommentVNode("",!0),e.createElementVNode("div",to,[e.renderSlot(a.$slots,"default")])]))}}),no={class:"dwui-page-title"},lo={key:0,class:"dwui-page-title-actions"},ao=e.defineComponent({__name:"page-title",props:{title:{}},setup(l){const o=l,t=e.useSlots();return(n,a)=>(e.openBlock(),e.createElementBlock("section",no,[e.createVNode(M,{class:"dwui-page-title-label"},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(o.title),1)]),_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[e.renderSlot(n.$slots,"icon")]),key:"0"}:void 0]),1024),t.default!=null?(e.openBlock(),e.createElementBlock("span",lo,[e.renderSlot(n.$slots,"default")])):e.createCommentVNode("",!0)]))}}),ro=e.defineComponent({__name:"screen-loading",props:{loading:{type:Boolean}},setup(l){const o=l,t=e.ref(null),n=()=>{const r=t.value;r&&!r.open&&r.showModal()},a=()=>{const r=t.value;r?.open&&r.close()};return e.onMounted(()=>{o.loading&&n()}),e.onBeforeUnmount(()=>{a()}),e.watch(()=>o.loading,r=>{r?n():a()},{flush:"post"}),(r,s)=>(e.openBlock(),e.createElementBlock("dialog",{ref_key:"refDialog",ref:t,class:"dwui-screen-loading",closedby:"none",onCancel:s[0]||(s[0]=e.withModifiers(()=>{},["prevent"]))},[...s[1]||(s[1]=[e.createElementVNode("div",{class:"dwui-screen-loading-spinner"},null,-1)])],544))}}),pe=Symbol("dwui-tab-group"),so=["id","aria-labelledby","aria-busy","hidden"],io={key:0,class:"dwui-tab-loading"},co={key:1,class:"dwui-tab-loading-spinner"},fe=e.defineComponent({__name:"tab-content",props:{tabId:{},label:{},disabled:{type:Boolean},status:{},headerClass:{type:[Boolean,null,String,Object,Array]},headerStyle:{type:[Boolean,null,String,Object,Array]}},setup(l){const o=l,t=e.inject(pe,void 0),n=e.ref(!1),a=()=>t?.loadingSlot(),r=e.computed(()=>t?.activeTabId.value===o.tabId),s=e.computed(()=>!!t?.mounted.value&&r.value),p=d=>{n.value=d};return(d,u)=>o.disabled?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,id:e.unref(t)?`${e.unref(t).groupName}-${o.tabId}-panel`:void 0,class:"dwui-tab-content",role:"tabpanel","aria-labelledby":e.unref(t)?`${e.unref(t).groupName}-${o.tabId}`:void 0,"aria-busy":n.value?"true":void 0,hidden:!r.value},[e.renderSlot(d.$slots,"default",{activated:s.value,setLoading:p}),n.value?(e.openBlock(),e.createElementBlock("div",io,[a()!=null?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a()),{key:0})):(e.openBlock(),e.createElementBlock("span",co))])):e.createCommentVNode("",!0)],8,so))}}),uo={class:"dwui-tab-group"},mo=["id","name","disabled","checked","aria-selected","aria-controls","onChange"],po=["for"],fo={class:"dwui-tab-items"},vo=e.defineComponent({__name:"tab-group",props:e.mergeModels({tabGroupName:{},selectFirstEnabled:{type:Boolean},headerClass:{type:[Boolean,null,String,Object,Array]},headerStyle:{type:[Boolean,null,String,Object,Array]},teleport:{}},{selectedTabId:{},selectedTabIdModifiers:{}}),emits:["update:selectedTabId"],setup(l){const o=l,t=e.useModel(l,"selectedTabId"),n=e.useSlots(),a=o.tabGroupName??e.useId(),r=g=>{if(g.type!==fe)return;const v=g.props??{},m=v.disabled;return{tabId:String(v["tab-id"]??v.tabId),label:v.label,disabled:m===""||!!m,status:v.status,headerClass:v["header-class"]??v.headerClass,headerStyle:v["header-style"]??v.headerStyle,icon:g.children?.icon}},s=e.computed(()=>{const g=[];for(const v of n.default?.()??[]){const m=Array.isArray(v.children)?v.children:[v];for(const k of m){const C=r(k);C&&g.push(C)}}return g}),p=e.computed(()=>t.value!=null?t.value:(o.selectFirstEnabled?s.value.find(v=>!v.disabled):s.value[0])?.tabId),d=e.ref(!1);e.provide(pe,{groupName:a,activeTabId:p,mounted:d,loadingSlot:()=>n.loading}),e.onMounted(()=>{d.value=!0});const u=g=>{t.value=g};return(g,v)=>(e.openBlock(),e.createElementBlock("div",uo,[(e.openBlock(),e.createBlock(e.Teleport,{to:o.teleport??"body",disabled:o.teleport==null},[e.createElementVNode("div",{class:e.normalizeClass(["dwui-tab-headers",o.headerClass]),role:"tablist",style:e.normalizeStyle(o.headerStyle)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.tabId},[e.createElementVNode("input",{id:`${e.unref(a)}-${m.tabId}`,type:"radio",class:"dwui-tab-radio",role:"tab",name:e.unref(a),disabled:m.disabled,checked:m.tabId===p.value,"aria-selected":m.tabId===p.value?"true":"false","aria-controls":`${e.unref(a)}-${m.tabId}-panel`,onChange:k=>u(m.tabId)},null,40,mo),e.createElementVNode("label",{for:`${e.unref(a)}-${m.tabId}`,class:e.normalizeClass(["dwui-tab-item",[m.status!=null?`dwui-tab-${m.status}`:void 0,m.headerClass]]),style:e.normalizeStyle(m.headerStyle)},[e.createVNode(M,null,e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(m.label),1)]),_:2},[m.icon!=null?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(m.icon)))]),key:"0"}:void 0]),1024)],14,po)],64))),128))],6)],8,["to","disabled"])),e.createElementVNode("div",fo,[e.renderSlot(g.$slots,"default")])]))}}),go=e.defineComponent({__name:"warning-popper",props:{placement:{default:"right"},arrow:{type:Boolean,default:!0},label:{default:"Warning"}},emits:["emit:open","emit:close"],setup(l,{emit:o}){const t=l,n=o;return(a,r)=>(e.openBlock(),e.createBlock(ae,{class:"dwui-warning-popper","popover-class":"dwui-warning-popper-popover",placement:t.placement,arrow:t.arrow,label:t.label,"onEmit:open":r[0]||(r[0]=s=>n("emit:open")),"onEmit:close":r[1]||(r[1]=s=>n("emit:close"))},{icon:e.withCtx(()=>[e.renderSlot(a.$slots,"icon",{},()=>[e.createVNode(e.unref(S.SvgWarningSign))])]),default:e.withCtx(()=>[e.renderSlot(a.$slots,"default")]),_:3},8,["placement","arrow","label"]))}});exports._sfc_main=re;exports._sfc_main$1=Me;exports._sfc_main$10=Pt;exports._sfc_main$11=Vt;exports._sfc_main$12=Mt;exports._sfc_main$13=M;exports._sfc_main$14=me;exports._sfc_main$15=oo;exports._sfc_main$16=ao;exports._sfc_main$17=fe;exports._sfc_main$18=vo;exports._sfc_main$19=go;exports._sfc_main$2=Kt;exports._sfc_main$3=ro;exports._sfc_main$4=$e;exports._sfc_main$5=Ve;exports._sfc_main$6=Oe;exports._sfc_main$7=bt;exports._sfc_main$8=Et;exports._sfc_main$9=Nt;exports.closeAllOverlayBoxes=Jt;exports.computeAnchoredPosition=ne;exports.headersToCsvColumns=it;exports.mountWindow=ie;exports.nextWindowOrder=se;exports.rowToCsvColumns=ct;exports.showOverlayBox=Qt;exports.useOverlayBox=Zt;exports.useWindowOwner=ce;exports.vueCoreOptionsKey=oe;
|
package/package.json
CHANGED
|
@@ -56,7 +56,7 @@ import type { Component, Slot } from 'vue';
|
|
|
56
56
|
import { SvgTriangleButton } from '@digitalwalletcorp/vue-svg-icons';
|
|
57
57
|
import LabelIcon from '@/label-icon.vue';
|
|
58
58
|
import { useShrinkable } from '@/internal/use-shrinkable';
|
|
59
|
-
import type { LabelPreset } from '@/
|
|
59
|
+
import type { LabelPreset } from '@/label-icon.vue';
|
|
60
60
|
|
|
61
61
|
// 開閉ボタンのアイコンとラベルは別々に決める。どちらも、スロット/ラベルの指定 > プリセット の順で使う
|
|
62
62
|
// 何も指定が無い場合だけ、既定の三角を表示する
|
package/src/data-table.vue
CHANGED
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
<template>
|
|
20
20
|
<section
|
|
21
21
|
class="dwui-data-table"
|
|
22
|
-
:class="{ 'dwui-selectable':
|
|
22
|
+
:class="{ 'dwui-selectable': settings.selectable }"
|
|
23
23
|
>
|
|
24
24
|
<DataTableControls
|
|
25
|
-
v-if="
|
|
25
|
+
v-if="settings.controls === 'both' || settings.controls === 'top'"
|
|
26
26
|
v-bind="controlProps"
|
|
27
|
-
:pagination="
|
|
27
|
+
:pagination="settings.pagination === 'both' || settings.pagination === 'top'"
|
|
28
28
|
@emit:change-page="emit('emit:changePage', $event)"
|
|
29
29
|
@emit:change-limit="emit('emit:changeLimit', $event)"
|
|
30
30
|
@emit:download-page="emit('emit:downloadPage')"
|
|
@@ -33,14 +33,14 @@
|
|
|
33
33
|
<div
|
|
34
34
|
ref="refContent"
|
|
35
35
|
class="dwui-data-table-content"
|
|
36
|
-
:class="[{ 'dwui-loading': props.loading },
|
|
37
|
-
:style="
|
|
36
|
+
:class="[{ 'dwui-loading': props.loading }, settings.contentClass]"
|
|
37
|
+
:style="settings.contentStyle"
|
|
38
38
|
tabindex="-1"
|
|
39
39
|
@keydown="onKeyDown"
|
|
40
40
|
>
|
|
41
41
|
<table
|
|
42
|
-
:class="
|
|
43
|
-
:style="
|
|
42
|
+
:class="settings.tableClass"
|
|
43
|
+
:style="settings.tableStyle"
|
|
44
44
|
>
|
|
45
45
|
<thead ref="refThead">
|
|
46
46
|
<tr>
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
<div class="dwui-data-table-header">
|
|
58
58
|
<span
|
|
59
59
|
class="dwui-data-table-sort"
|
|
60
|
-
:role="
|
|
61
|
-
:tabindex="
|
|
60
|
+
:role="settings.sortable ? 'button' : undefined"
|
|
61
|
+
:tabindex="settings.sortable ? 0 : undefined"
|
|
62
62
|
@click="onClickSort(header)"
|
|
63
63
|
@keydown.enter.prevent="onClickSort(header)"
|
|
64
64
|
@keydown.space.prevent="onClickSort(header)"
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
</span>
|
|
77
77
|
</div>
|
|
78
78
|
<div
|
|
79
|
-
v-if="
|
|
79
|
+
v-if="settings.resizable && index < innerHeaders.length - 1"
|
|
80
80
|
class="dwui-data-table-resizer"
|
|
81
81
|
@pointerdown="onResizeStart($event, index)"
|
|
82
82
|
@pointermove="onResizing"
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
:selected-index="selectedIndex"
|
|
97
97
|
/>
|
|
98
98
|
<tr
|
|
99
|
-
v-if="props.dataList.length === 0 &&
|
|
99
|
+
v-if="props.dataList.length === 0 && settings.showNoData"
|
|
100
100
|
class="dwui-data-table-no-data"
|
|
101
101
|
>
|
|
102
102
|
<td :colspan="totalColSize">
|
|
@@ -116,9 +116,9 @@
|
|
|
116
116
|
</div>
|
|
117
117
|
</div>
|
|
118
118
|
<DataTableControls
|
|
119
|
-
v-if="
|
|
119
|
+
v-if="settings.controls === 'both' || settings.controls === 'bottom'"
|
|
120
120
|
v-bind="controlProps"
|
|
121
|
-
:pagination="
|
|
121
|
+
:pagination="settings.pagination === 'both' || settings.pagination === 'bottom'"
|
|
122
122
|
@emit:change-page="emit('emit:changePage', $event)"
|
|
123
123
|
@emit:change-limit="emit('emit:changeLimit', $event)"
|
|
124
124
|
@emit:download-page="emit('emit:downloadPage')"
|
|
@@ -128,32 +128,130 @@
|
|
|
128
128
|
</template>
|
|
129
129
|
|
|
130
130
|
<script setup lang="ts" generic="T">
|
|
131
|
-
import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue';
|
|
132
|
-
import type { StyleValue } from 'vue';
|
|
131
|
+
import { computed, inject, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue';
|
|
132
|
+
import type { ClassValue, StyleValue } from 'vue';
|
|
133
133
|
import { SvgPointingTriangle } from '@digitalwalletcorp/vue-svg-icons';
|
|
134
134
|
import DataTableControls from '@/internal/data-table-controls.vue';
|
|
135
|
-
import { compareValues, getValueByPath, resolveLabel, stringifyValue } from '@/
|
|
136
|
-
import
|
|
135
|
+
import { compareValues, getValueByPath, resolveLabel, stringifyValue } from '@/helpers/data-table';
|
|
136
|
+
import { vueCoreOptionsKey } from '@/helpers/vue-core-options';
|
|
137
|
+
import type { DataTableOptions } from '@/helpers/vue-core-options';
|
|
138
|
+
import type { DataTableControlsPlacement, DataTableHeader, DataTableLabels, DataTableResolvedLabels, DataTableSortContext, DataTableSortMode } from '@/helpers/data-table';
|
|
137
139
|
|
|
138
|
-
|
|
140
|
+
/**
|
|
141
|
+
* DataTable の props
|
|
142
|
+
*/
|
|
143
|
+
export interface Props<T = unknown> {
|
|
144
|
+
/** 表示している行のデータ。スロットで描画する行と同じ順に並んでいること */
|
|
145
|
+
dataList: T[];
|
|
146
|
+
/** ヘッダ。id は一意であること */
|
|
147
|
+
headers: DataTableHeader<T>[];
|
|
148
|
+
/** 読み込み中。true の間は行を描画せず読み込み中の表示を出す */
|
|
149
|
+
loading?: boolean;
|
|
150
|
+
/** 総件数。未指定なら dataList の件数 */
|
|
151
|
+
totalCount?: number;
|
|
152
|
+
/** 現在ページ(1起点) */
|
|
153
|
+
current?: number;
|
|
154
|
+
/** 1ページあたりの表示件数 */
|
|
155
|
+
limit?: number;
|
|
156
|
+
/** 1ページあたりの表示件数の上限 */
|
|
157
|
+
maxLimit?: number;
|
|
158
|
+
/** ページネーションに並べるページ番号の最大数 */
|
|
159
|
+
maxPagination?: number;
|
|
160
|
+
/** 行をクリックで選択できるか */
|
|
161
|
+
selectable?: boolean;
|
|
162
|
+
/** コントロールを出す位置 */
|
|
163
|
+
controls?: DataTableControlsPlacement;
|
|
164
|
+
/** ページネーションを出す位置。controls が無い側には出ない */
|
|
165
|
+
pagination?: DataTableControlsPlacement;
|
|
166
|
+
/** ページダウンロードボタンを表示するか */
|
|
167
|
+
showDownloadPage?: boolean;
|
|
168
|
+
/** 全件ダウンロードボタンを表示するか */
|
|
169
|
+
showDownloadAll?: boolean;
|
|
170
|
+
/** 総件数を表示するか */
|
|
171
|
+
showTotal?: boolean;
|
|
172
|
+
/** 1ページあたりの表示件数の入力を表示するか */
|
|
173
|
+
showLimit?: boolean;
|
|
174
|
+
/** ページネーションにページ番号の選択を表示するか */
|
|
175
|
+
showPageSelect?: boolean;
|
|
176
|
+
/** dataList が空のときにデータが無い旨の行を表示するか */
|
|
177
|
+
showNoData?: boolean;
|
|
178
|
+
/** ヘッダの境界のドラッグで列幅を変えられるか */
|
|
179
|
+
resizable?: boolean;
|
|
180
|
+
/** ヘッダのクリックでソートできるか */
|
|
181
|
+
sortable?: boolean;
|
|
182
|
+
/** ソートの方式。未指定なら remote */
|
|
183
|
+
sortMode?: DataTableSortMode;
|
|
184
|
+
/** テーブルをスクロールする領域に付ける class */
|
|
185
|
+
contentClass?: ClassValue;
|
|
186
|
+
/** テーブルをスクロールする領域に付ける style */
|
|
187
|
+
contentStyle?: StyleValue;
|
|
188
|
+
/** table に付ける class */
|
|
189
|
+
tableClass?: ClassValue;
|
|
190
|
+
/** table に付ける style */
|
|
191
|
+
tableStyle?: StyleValue;
|
|
192
|
+
/** 表示する文言。未指定の項目は英語 */
|
|
193
|
+
labels?: DataTableLabels;
|
|
194
|
+
/** 総件数の整形。未指定なら en-US の桁区切り。SSR とクライアントで同じ文字列を返すこと */
|
|
195
|
+
formatTotalCount?: (count: number) => string;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* DataTable が発行するイベント
|
|
200
|
+
*/
|
|
201
|
+
export interface Emits<T = unknown> {
|
|
202
|
+
/** 選択が変わった。クリックでの選択・解除、カーソルキーでの移動、読み込み完了時の解除で発行する。解除は undefined と -1 */
|
|
203
|
+
(e: 'emit:selectRow', value: T | undefined, index: number): void;
|
|
204
|
+
/** ソートの条件が変わった。sortMode に関わらず発行する */
|
|
205
|
+
(e: 'emit:changeSort', context: DataTableSortContext): void;
|
|
206
|
+
(e: 'emit:updateHeader', headers: DataTableHeader<T>[]): void;
|
|
207
|
+
(e: 'emit:dblclickRow', value: T, index: number): void;
|
|
208
|
+
(e: 'emit:changeLimit', limit: number): void;
|
|
209
|
+
(e: 'emit:changePage', page: number): void;
|
|
210
|
+
(e: 'emit:downloadPage'): void;
|
|
211
|
+
(e: 'emit:downloadAll'): void;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* DataTable のスロット
|
|
216
|
+
*/
|
|
217
|
+
export interface Slots<T = unknown> {
|
|
218
|
+
/** 行。tr を rows と同じ順に並べ、tr の click で clickRow(row, index) を呼ぶ */
|
|
219
|
+
default?(props: {
|
|
220
|
+
/** 表示する行。sortMode が page のときはソートした順、それ以外は dataList そのもの */
|
|
221
|
+
rows: T[];
|
|
222
|
+
/** 行を選択する。選択している行なら選択を解除する */
|
|
223
|
+
clickRow: (row: T, index: number) => void;
|
|
224
|
+
/** 行を選択してダブルクリックを通知する */
|
|
225
|
+
dblclickRow: (row: T, index: number) => void;
|
|
226
|
+
/** 行のインデックスから、ページをまたいだ1起点の行番号を返す */
|
|
227
|
+
rowNumber: (index: number) => number;
|
|
228
|
+
/** 選択している行のインデックス。選択していなければ -1 */
|
|
229
|
+
selectedIndex: number;
|
|
230
|
+
}): unknown;
|
|
231
|
+
/** 読み込み中の表示。未指定なら既定のスピナー */
|
|
232
|
+
loading?(): unknown;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// 設定の props は未指定を undefined のまま受け、vueCoreOptionsKey の値とライブラリ既定で埋める(boolean が false にならないよう既定を明示する)
|
|
236
|
+
const props = withDefaults(defineProps<Props<T>>(), {
|
|
139
237
|
loading: false,
|
|
140
238
|
totalCount: undefined,
|
|
141
239
|
current: 1,
|
|
142
240
|
limit: 100,
|
|
143
|
-
maxLimit:
|
|
144
|
-
maxPagination:
|
|
145
|
-
selectable:
|
|
146
|
-
controls:
|
|
147
|
-
pagination:
|
|
148
|
-
showDownloadPage:
|
|
149
|
-
showDownloadAll:
|
|
150
|
-
showTotal:
|
|
151
|
-
showLimit:
|
|
152
|
-
showPageSelect:
|
|
153
|
-
showNoData:
|
|
154
|
-
resizable:
|
|
155
|
-
sortable:
|
|
156
|
-
sortMode:
|
|
241
|
+
maxLimit: undefined,
|
|
242
|
+
maxPagination: undefined,
|
|
243
|
+
selectable: undefined,
|
|
244
|
+
controls: undefined,
|
|
245
|
+
pagination: undefined,
|
|
246
|
+
showDownloadPage: undefined,
|
|
247
|
+
showDownloadAll: undefined,
|
|
248
|
+
showTotal: undefined,
|
|
249
|
+
showLimit: undefined,
|
|
250
|
+
showPageSelect: undefined,
|
|
251
|
+
showNoData: undefined,
|
|
252
|
+
resizable: undefined,
|
|
253
|
+
sortable: undefined,
|
|
254
|
+
sortMode: undefined,
|
|
157
255
|
formatTotalCount: undefined,
|
|
158
256
|
contentClass: undefined,
|
|
159
257
|
contentStyle: undefined,
|
|
@@ -162,9 +260,11 @@ const props = withDefaults(defineProps<DataTableProps<T>>(), {
|
|
|
162
260
|
labels: undefined
|
|
163
261
|
});
|
|
164
262
|
|
|
165
|
-
const emit = defineEmits<
|
|
263
|
+
const emit = defineEmits<Emits<T>>();
|
|
166
264
|
|
|
167
|
-
defineSlots<
|
|
265
|
+
defineSlots<Slots<T>>();
|
|
266
|
+
|
|
267
|
+
const appOptions = inject(vueCoreOptionsKey, {});
|
|
168
268
|
|
|
169
269
|
const refContent = ref<HTMLDivElement>();
|
|
170
270
|
const refThead = ref<HTMLTableSectionElement>();
|
|
@@ -186,6 +286,45 @@ const innerHeaders = computed((): DataTableHeader<T>[] => {
|
|
|
186
286
|
return props.headers.map(header => widths.value[header.id] == null ? header : { ...header, width: widths.value[header.id] });
|
|
187
287
|
});
|
|
188
288
|
|
|
289
|
+
/** 設定のライブラリ既定。labels は項目ごとに合わせるため別に持つ */
|
|
290
|
+
const DEFAULT_SETTINGS: Omit<DataTableOptions, 'labels'> = {
|
|
291
|
+
maxLimit: 9999,
|
|
292
|
+
maxPagination: 7,
|
|
293
|
+
selectable: true,
|
|
294
|
+
controls: 'both',
|
|
295
|
+
pagination: 'both',
|
|
296
|
+
showDownloadPage: true,
|
|
297
|
+
showDownloadAll: true,
|
|
298
|
+
showTotal: true,
|
|
299
|
+
showLimit: true,
|
|
300
|
+
showPageSelect: false,
|
|
301
|
+
showNoData: true,
|
|
302
|
+
resizable: true,
|
|
303
|
+
sortable: true,
|
|
304
|
+
sortMode: 'remote',
|
|
305
|
+
contentClass: undefined,
|
|
306
|
+
contentStyle: undefined,
|
|
307
|
+
tableClass: undefined,
|
|
308
|
+
tableStyle: undefined,
|
|
309
|
+
formatTotalCount: undefined
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
type OptionalSettingKey = 'contentClass' | 'contentStyle' | 'tableClass' | 'tableStyle' | 'formatTotalCount';
|
|
313
|
+
type DataTableSettings = Required<Omit<DataTableOptions, 'labels' | OptionalSettingKey>> & Pick<DataTableOptions, OptionalSettingKey>;
|
|
314
|
+
|
|
315
|
+
/** 設定。props、vueCoreOptionsKey の dataTable、ライブラリ既定の順に、指定のあるものを使う */
|
|
316
|
+
const settings = computed((): DataTableSettings => {
|
|
317
|
+
const resolved = { ...DEFAULT_SETTINGS } as DataTableSettings;
|
|
318
|
+
for (const source of [appOptions.dataTable ?? {}, props]) {
|
|
319
|
+
for (const key of Object.keys(DEFAULT_SETTINGS) as (keyof typeof DEFAULT_SETTINGS)[]) {
|
|
320
|
+
if (source[key] !== undefined) {
|
|
321
|
+
Object.assign(resolved, { [key]: source[key] });
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return resolved;
|
|
326
|
+
});
|
|
327
|
+
|
|
189
328
|
const labels = computed((): DataTableResolvedLabels => {
|
|
190
329
|
const merged: Required<DataTableLabels> = {
|
|
191
330
|
totalCount: 'Total',
|
|
@@ -201,6 +340,7 @@ const labels = computed((): DataTableResolvedLabels => {
|
|
|
201
340
|
nextPages: 'Next pages',
|
|
202
341
|
nextPage: 'Next page',
|
|
203
342
|
lastPage: 'Last page',
|
|
343
|
+
...appOptions.dataTable?.labels,
|
|
204
344
|
...props.labels
|
|
205
345
|
};
|
|
206
346
|
const resolved = {} as DataTableResolvedLabels;
|
|
@@ -212,22 +352,22 @@ const labels = computed((): DataTableResolvedLabels => {
|
|
|
212
352
|
});
|
|
213
353
|
|
|
214
354
|
const limit = computed((): number => {
|
|
215
|
-
return Math.min(props.limit,
|
|
355
|
+
return Math.min(props.limit, settings.value.maxLimit);
|
|
216
356
|
});
|
|
217
357
|
|
|
218
358
|
const controlProps = computed(() => {
|
|
219
359
|
return {
|
|
220
|
-
showTotal:
|
|
221
|
-
showLimit:
|
|
222
|
-
showPageSelect:
|
|
223
|
-
showDownloadPage:
|
|
224
|
-
showDownloadAll:
|
|
360
|
+
showTotal: settings.value.showTotal,
|
|
361
|
+
showLimit: settings.value.showLimit,
|
|
362
|
+
showPageSelect: settings.value.showPageSelect,
|
|
363
|
+
showDownloadPage: settings.value.showDownloadPage,
|
|
364
|
+
showDownloadAll: settings.value.showDownloadAll,
|
|
225
365
|
current: props.current,
|
|
226
366
|
limit: limit.value,
|
|
227
|
-
maxLimit:
|
|
228
|
-
maxPagination:
|
|
367
|
+
maxLimit: settings.value.maxLimit,
|
|
368
|
+
maxPagination: settings.value.maxPagination,
|
|
229
369
|
totalCount: props.totalCount ?? props.dataList.length,
|
|
230
|
-
formatTotalCount:
|
|
370
|
+
formatTotalCount: settings.value.formatTotalCount,
|
|
231
371
|
labels: labels.value
|
|
232
372
|
};
|
|
233
373
|
});
|
|
@@ -237,7 +377,7 @@ const selectedRow = shallowRef<T | undefined>(undefined);
|
|
|
237
377
|
|
|
238
378
|
/** 表示する行。ページ内ソート中は dataList を並べ替えたコピー、それ以外は dataList そのもの */
|
|
239
379
|
const rows = computed((): T[] => {
|
|
240
|
-
const header =
|
|
380
|
+
const header = settings.value.sortMode === 'page' ? props.headers.find(header => header.id === sortKey.value) : undefined;
|
|
241
381
|
if (!header) {
|
|
242
382
|
return props.dataList;
|
|
243
383
|
}
|
|
@@ -293,7 +433,7 @@ const ariaSort = (id: string): 'ascending' | 'descending' | undefined => {
|
|
|
293
433
|
};
|
|
294
434
|
|
|
295
435
|
const caretDirection = (id: string): 'up' | 'down' | undefined => {
|
|
296
|
-
if (!
|
|
436
|
+
if (!settings.value.sortable || sortKey.value !== id) {
|
|
297
437
|
return undefined;
|
|
298
438
|
}
|
|
299
439
|
return descending.value ? 'down' : 'up';
|
|
@@ -356,7 +496,7 @@ const select = (row: T | undefined, index: number): void => {
|
|
|
356
496
|
* 行を選択する。選択している行なら選択を解除する
|
|
357
497
|
*/
|
|
358
498
|
const clickRow = (row: T, index: number): void => {
|
|
359
|
-
if (!
|
|
499
|
+
if (!settings.value.selectable) {
|
|
360
500
|
return;
|
|
361
501
|
}
|
|
362
502
|
if (index === selectedIndex.value) {
|
|
@@ -395,7 +535,7 @@ const onKeyDown = (event: KeyboardEvent): void => {
|
|
|
395
535
|
};
|
|
396
536
|
|
|
397
537
|
const onClickSort = (header: DataTableHeader<T>): void => {
|
|
398
|
-
if (!
|
|
538
|
+
if (!settings.value.sortable || props.dataList.length === 0) {
|
|
399
539
|
return;
|
|
400
540
|
}
|
|
401
541
|
descending.value = sortKey.value === header.id ? !descending.value : false;
|
|
@@ -410,7 +550,7 @@ const onClickSort = (header: DataTableHeader<T>): void => {
|
|
|
410
550
|
* 列幅の変更を始める。すべての列の幅を今の表示幅で固定してから変更する
|
|
411
551
|
*/
|
|
412
552
|
const onResizeStart = (event: PointerEvent, index: number): void => {
|
|
413
|
-
if (!
|
|
553
|
+
if (!settings.value.resizable) {
|
|
414
554
|
return;
|
|
415
555
|
}
|
|
416
556
|
event.preventDefault();
|
|
@@ -478,7 +618,7 @@ watch(() => props.loading, (newValue, oldValue) => {
|
|
|
478
618
|
// 読み込みが終わったら、前のデータに対する選択は引き継がない。
|
|
479
619
|
// ページ内ソートも同様だが、remote のソート条件は再取得後も有効なので保つ
|
|
480
620
|
if (oldValue && !newValue) {
|
|
481
|
-
if (
|
|
621
|
+
if (settings.value.sortMode === 'page') {
|
|
482
622
|
sortKey.value = '';
|
|
483
623
|
descending.value = false;
|
|
484
624
|
}
|