@digitalwalletcorp/vue-core 1.2.1 → 1.3.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.
Files changed (188) hide show
  1. package/README.md +79 -3
  2. package/lib/accordion-fieldset.d.cts +14 -4
  3. package/lib/accordion-fieldset.d.ts +14 -4
  4. package/lib/accordion-section.d.cts +20 -10
  5. package/lib/accordion-section.d.ts +20 -10
  6. package/lib/components-BuTJ1wX8.js +26 -0
  7. package/lib/components-CKql5lWg.cjs +1 -0
  8. package/lib/components.d.cts +10 -0
  9. package/lib/components.d.ts +10 -0
  10. package/lib/copy-button.d.cts +34 -0
  11. package/lib/copy-button.d.ts +34 -0
  12. package/lib/dark-mode-selector.d.cts +32 -0
  13. package/lib/dark-mode-selector.d.ts +32 -0
  14. package/lib/data-table.d.cts +29 -0
  15. package/lib/data-table.d.ts +29 -0
  16. package/lib/help-button.d.cts +39 -0
  17. package/lib/help-button.d.ts +39 -0
  18. package/lib/help-popper.d.cts +39 -0
  19. package/lib/help-popper.d.ts +39 -0
  20. package/lib/helpers/data-table-csv.d.cts +17 -0
  21. package/lib/helpers/data-table-csv.d.ts +17 -0
  22. package/lib/helpers/show-floating-component.d.cts +86 -0
  23. package/lib/helpers/show-floating-component.d.ts +86 -0
  24. package/lib/helpers/show-modal-dialog.d.cts +73 -0
  25. package/lib/helpers/show-modal-dialog.d.ts +73 -0
  26. package/lib/helpers/show-overlay-box.d.cts +53 -0
  27. package/lib/helpers/show-overlay-box.d.ts +53 -0
  28. package/lib/helpers/show-screen-loading.d.cts +20 -0
  29. package/lib/helpers/show-screen-loading.d.ts +20 -0
  30. package/lib/helpers/show-snackbar.d.cts +47 -0
  31. package/lib/helpers/show-snackbar.d.ts +47 -0
  32. package/lib/hourglass-loading.d.cts +1 -1
  33. package/lib/hourglass-loading.d.ts +1 -1
  34. package/lib/index.cjs +1 -1
  35. package/lib/index.d.cts +34 -0
  36. package/lib/index.d.ts +34 -0
  37. package/lib/index.js +445 -18
  38. package/lib/internal/anchored-popover.d.cts +35 -0
  39. package/lib/internal/anchored-popover.d.ts +35 -0
  40. package/lib/internal/anchored-position.d.cts +50 -0
  41. package/lib/internal/anchored-position.d.ts +50 -0
  42. package/lib/internal/data-table-controls.d.cts +42 -0
  43. package/lib/internal/data-table-controls.d.ts +42 -0
  44. package/lib/internal/data-table-value.d.cts +32 -0
  45. package/lib/internal/data-table-value.d.ts +32 -0
  46. package/lib/internal/floating-component.d.cts +52 -0
  47. package/lib/internal/floating-component.d.ts +52 -0
  48. package/lib/internal/icon-popper.d.cts +32 -0
  49. package/lib/internal/icon-popper.d.ts +32 -0
  50. package/lib/internal/mount-window.d.cts +39 -0
  51. package/lib/internal/mount-window.d.ts +39 -0
  52. package/lib/internal/movable-window.d.cts +55 -0
  53. package/lib/internal/movable-window.d.ts +55 -0
  54. package/lib/internal/opened-overlay-boxes.d.cts +2 -0
  55. package/lib/internal/opened-overlay-boxes.d.ts +2 -0
  56. package/lib/internal/pagination.d.cts +22 -0
  57. package/lib/internal/pagination.d.ts +22 -0
  58. package/lib/internal/snackbar-container.d.cts +20 -0
  59. package/lib/internal/snackbar-container.d.ts +20 -0
  60. package/lib/internal/snackbar-item.d.cts +17 -0
  61. package/lib/internal/snackbar-item.d.ts +17 -0
  62. package/lib/internal/tab-group-context.d.cts +4 -2
  63. package/lib/internal/tab-group-context.d.ts +4 -2
  64. package/lib/internal/use-movable-window.d.cts +44 -0
  65. package/lib/internal/use-movable-window.d.ts +44 -0
  66. package/lib/internal/window-order.d.cts +6 -0
  67. package/lib/internal/window-order.d.ts +6 -0
  68. package/lib/intersection-lazy-component.d.cts +32 -0
  69. package/lib/intersection-lazy-component.d.ts +32 -0
  70. package/lib/label-button.d.cts +2 -2
  71. package/lib/label-button.d.ts +2 -2
  72. package/lib/label-icon.d.cts +2 -2
  73. package/lib/label-icon.d.ts +2 -2
  74. package/lib/modal-dialog.d.cts +67 -0
  75. package/lib/modal-dialog.d.ts +67 -0
  76. package/lib/nuxt.cjs +1 -1
  77. package/lib/nuxt.js +1 -1
  78. package/lib/overlay-box.d.cts +52 -0
  79. package/lib/overlay-box.d.ts +52 -0
  80. package/lib/page-section.d.cts +2 -2
  81. package/lib/page-section.d.ts +2 -2
  82. package/lib/page-title.d.cts +2 -2
  83. package/lib/page-title.d.ts +2 -2
  84. package/lib/register.cjs +1 -1
  85. package/lib/register.js +1 -1
  86. package/lib/screen-loading.d.cts +7 -0
  87. package/lib/screen-loading.d.ts +7 -0
  88. package/lib/style.css +1 -1
  89. package/lib/tab-content.d.cts +5 -5
  90. package/lib/tab-content.d.ts +5 -5
  91. package/lib/tab-group.d.cts +7 -10
  92. package/lib/tab-group.d.ts +7 -10
  93. package/lib/types/data-table.d.cts +185 -0
  94. package/lib/types/data-table.d.ts +185 -0
  95. package/lib/types/modal-dialog.d.cts +13 -0
  96. package/lib/types/modal-dialog.d.ts +13 -0
  97. package/lib/types/movable-window.d.cts +16 -0
  98. package/lib/types/movable-window.d.ts +16 -0
  99. package/lib/warning-popper.d.cts +39 -0
  100. package/lib/warning-popper.d.ts +39 -0
  101. package/lib/warning-popper.vue_vue_type_style_index_0_lang-BKV_FX6k.js +1837 -0
  102. package/lib/warning-popper.vue_vue_type_style_index_0_lang-CHmkjVCO.cjs +1 -0
  103. package/package.json +40 -14
  104. package/src/accordion-fieldset.vue +24 -19
  105. package/src/accordion-section.vue +33 -28
  106. package/src/components.ts +10 -0
  107. package/src/copy-button.vue +89 -0
  108. package/src/dark-mode-selector.vue +212 -0
  109. package/src/data-table.vue +648 -0
  110. package/src/help-button.vue +128 -0
  111. package/src/help-popper.vue +70 -0
  112. package/src/helpers/data-table-csv.ts +55 -0
  113. package/src/helpers/show-floating-component.ts +177 -0
  114. package/src/helpers/show-modal-dialog.ts +121 -0
  115. package/src/helpers/show-overlay-box.ts +106 -0
  116. package/src/helpers/show-screen-loading.ts +37 -0
  117. package/src/helpers/show-snackbar.ts +153 -0
  118. package/src/hourglass-loading.vue +1 -1
  119. package/src/index.ts +34 -0
  120. package/src/internal/anchored-popover.vue +192 -0
  121. package/src/internal/anchored-position.ts +135 -0
  122. package/src/internal/data-table-controls.vue +203 -0
  123. package/src/internal/data-table-value.ts +99 -0
  124. package/src/internal/floating-component.vue +202 -0
  125. package/src/internal/icon-popper.vue +185 -0
  126. package/src/internal/mount-window.ts +110 -0
  127. package/src/internal/movable-window.vue +315 -0
  128. package/src/internal/opened-overlay-boxes.ts +2 -0
  129. package/src/internal/pagination.vue +325 -0
  130. package/src/internal/snackbar-container.vue +258 -0
  131. package/src/internal/snackbar-item.ts +20 -0
  132. package/src/internal/tab-group-context.ts +4 -2
  133. package/src/internal/use-movable-window.ts +208 -0
  134. package/src/internal/window-order.ts +11 -0
  135. package/src/intersection-lazy-component.vue +84 -0
  136. package/src/label-button.vue +9 -6
  137. package/src/label-icon.vue +2 -2
  138. package/src/modal-dialog.vue +287 -0
  139. package/src/overlay-box.vue +218 -0
  140. package/src/page-section.vue +7 -7
  141. package/src/page-title.vue +4 -4
  142. package/src/screen-loading.vue +90 -0
  143. package/src/tab-content.vue +16 -15
  144. package/src/tab-group.vue +34 -36
  145. package/src/types/data-table.ts +196 -0
  146. package/src/types/modal-dialog.ts +16 -0
  147. package/src/types/movable-window.ts +18 -0
  148. package/src/warning-popper.vue +70 -0
  149. package/lib/accordion-fieldset.cjs +0 -1
  150. package/lib/accordion-fieldset.js +0 -4
  151. package/lib/accordion-fieldset.vue_vue_type_style_index_0_lang-Cf4czDXz.js +0 -66
  152. package/lib/accordion-fieldset.vue_vue_type_style_index_0_lang-DoM5QjpJ.cjs +0 -1
  153. package/lib/accordion-section.cjs +0 -1
  154. package/lib/accordion-section.js +0 -4
  155. package/lib/accordion-section.vue_vue_type_style_index_0_lang-CFDdUEnn.cjs +0 -1
  156. package/lib/accordion-section.vue_vue_type_style_index_0_lang-Gvjjx02P.js +0 -78
  157. package/lib/components-C63HJoCn.cjs +0 -1
  158. package/lib/components-q4Cf97bO.js +0 -24
  159. package/lib/hourglass-loading.cjs +0 -1
  160. package/lib/hourglass-loading.js +0 -4
  161. package/lib/hourglass-loading.vue_vue_type_style_index_0_lang-C72UVA9W.cjs +0 -1
  162. package/lib/hourglass-loading.vue_vue_type_style_index_0_lang-DkUGIxQ2.js +0 -22
  163. package/lib/label-button.cjs +0 -1
  164. package/lib/label-button.js +0 -4
  165. package/lib/label-button.vue_vue_type_style_index_0_lang-D7ZgfZOL.cjs +0 -1
  166. package/lib/label-button.vue_vue_type_style_index_0_lang-DqRYddVt.js +0 -44
  167. package/lib/label-icon.cjs +0 -1
  168. package/lib/label-icon.js +0 -4
  169. package/lib/label-icon.vue_vue_type_style_index_0_lang-D9Cimu20.cjs +0 -1
  170. package/lib/label-icon.vue_vue_type_style_index_0_lang-me52HE2V.js +0 -38
  171. package/lib/page-section.cjs +0 -1
  172. package/lib/page-section.js +0 -4
  173. package/lib/page-section.vue_vue_type_style_index_0_lang-DEAkTLxd.cjs +0 -1
  174. package/lib/page-section.vue_vue_type_style_index_0_lang-DpVQe_rV.js +0 -54
  175. package/lib/page-title.cjs +0 -1
  176. package/lib/page-title.js +0 -4
  177. package/lib/page-title.vue_vue_type_style_index_0_lang-BqIsIks5.cjs +0 -1
  178. package/lib/page-title.vue_vue_type_style_index_0_lang-ChZot85K.js +0 -36
  179. package/lib/tab-content.cjs +0 -1
  180. package/lib/tab-content.js +0 -4
  181. package/lib/tab-content.vue_vue_type_style_index_0_lang-BeCi7Xkp.cjs +0 -1
  182. package/lib/tab-content.vue_vue_type_style_index_0_lang-CcQLHmIF.js +0 -44
  183. package/lib/tab-group.cjs +0 -1
  184. package/lib/tab-group.js +0 -4
  185. package/lib/tab-group.vue_vue_type_style_index_0_lang-C84mDEOC.js +0 -103
  186. package/lib/tab-group.vue_vue_type_style_index_0_lang-CMaufRJV.cjs +0 -1
  187. package/lib/use-shrinkable-CS2bmsJJ.js +0 -17
  188. package/lib/use-shrinkable-Cu9JQZll.cjs +0 -1
@@ -0,0 +1 @@
1
+ "use strict";const e=require("vue"),C=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(r){const n=r,t=e.useSlots();return(o,a)=>(e.openBlock(),e.createElementBlock("span",{class:"dwui-label-icon",style:e.normalizeStyle(n.gap==null?void 0:{"--dwui-gap-label-icon":n.gap})},[e.renderSlot(o.$slots,"icon",{},()=>[n.preset!=null?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.preset.icon),e.mergeProps({key:0},n.preset.iconProps,{class:n.iconClass,style:n.iconStyle}),null,16,["class","style"])):e.createCommentVNode("",!0)]),t.default!=null||n.preset!=null?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["dwui-label",n.labelClass]),style:e.normalizeStyle(n.labelStyle)},[e.renderSlot(o.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(typeof n.preset?.label=="function"?n.preset.label():n.preset?.label),1)])],6)):e.createCommentVNode("",!0)],4))}}),pe=70;function Z(r){const n=e.ref(!0);let t;return e.onMounted(()=>{const o=r.value;o!=null&&(t=new ResizeObserver(()=>{n.value=pe<=o.scrollHeight}),t.observe(o))}),e.onBeforeUnmount(()=>{t?.disconnect()}),n}const fe=["disabled"],ge={class:"dwui-accordion-legend"},ve=["aria-expanded"],he=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(r){const n=r,t=e.useSlots(),o=e.ref(),a=e.useModel(r,"expanded"),l=e.ref(!!n.initialExpand),i=e.computed({get:()=>a.value??l.value,set:d=>{l.value=d,a.value=d}}),m=Z(o),c=()=>{i.value=!i.value};return(d,v)=>(e.openBlock(),e.createElementBlock("fieldset",{class:"dwui-accordion-fieldset",disabled:n.disabled},[e.createElementVNode("legend",ge,[e.createElementVNode("button",{type:"button",class:"dwui-accordion-toggle","aria-expanded":i.value,onClick:c},[e.createVNode(e.unref(C.SvgTriangleButton),{direction:i.value?"up":"down"},null,8,["direction"]),n.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(d.$slots,"icon")]),key:"0"}:void 0,n.legend!=null||t.legend!=null?{name:"default",fn:e.withCtx(()=>[e.renderSlot(d.$slots,"legend",{},()=>[e.createTextVNode(e.toDisplayString(n.legend),1)])]),key:"1"}:void 0]),1024)):e.createCommentVNode("",!0)],8,ve)]),e.createElementVNode("div",{ref_key:"refContents",ref:o,class:e.normalizeClass(["dwui-accordion-contents",e.unref(m)?i.value?"dwui-expanded":"dwui-shrunk":""])},[e.renderSlot(d.$slots,"default")],2)],8,fe))}}),be={class:"dwui-accordion-section"},we={key:0,class:"dwui-accordion-section-control"},ye=["disabled","aria-expanded"],ke=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(r){const n=r,t=e.useSlots(),o=e.ref(),a=e.useModel(r,"expanded"),l=e.ref(!!n.initialExpand),i=e.computed({get:()=>a.value??l.value,set:y=>{l.value=y,a.value=y}}),m=Z(o),c=e.computed(()=>i.value?n.collapsePreset:n.expandPreset),d=()=>(i.value?t["collapse-icon"]:t["expand-icon"])??c.value?.icon,v=()=>(i.value?t["collapse-icon"]:t["expand-icon"])==null?c.value?.iconProps:void 0,p=e.computed(()=>{const y=i.value?n.collapseLabel:n.expandLabel;if(y!=null)return y;const _=c.value?.label;return typeof _=="function"?_():_}),u=()=>{i.value=!i.value};return(y,_)=>(e.openBlock(),e.createElementBlock("div",be,[e.createElementVNode("div",{ref_key:"refContents",ref:o,class:e.normalizeClass(["dwui-accordion-section-contents",[e.unref(m)?i.value?"dwui-expanded":"dwui-shrunk":"",{"dwui-no-gradient":n.noGradient}]])},[e.renderSlot(y.$slots,"default")],2),e.unref(m)?(e.openBlock(),e.createElementBlock("div",we,[e.createElementVNode("button",{type:"button",class:"dwui-accordion-section-toggle",disabled:n.disabled,"aria-expanded":i.value,onClick:e.withModifiers(u,["stop"])},[d()!=null||p.value!=null?(e.openBlock(),e.createBlock(M,{key:0},e.createSlots({_:2},[d()!=null?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d()),e.normalizeProps(e.guardReactiveProps(v())),null,16))]),key:"0"}:void 0,p.value!=null?{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),key:"1"}:void 0]),1024)):(e.openBlock(),e.createBlock(e.unref(C.SvgTriangleButton),{key:1,direction:i.value?"up":"down"},null,8,["direction"]))],8,ye)])):e.createCommentVNode("",!0)]))}}),Be=["aria-label"],_e=e.defineComponent({__name:"copy-button",props:{value:{},label:{default:"Copy"}},emits:["emit:copy","emit:error"],setup(r,{emit:n}){const t=r,o=n,a=e.useSlots(),l=async()=>{const i=String(typeof t.value=="function"?t.value():t.value);try{await navigator.clipboard.writeText(i)}catch(m){o("emit:error",m);return}o("emit:copy",i)};return(i,m)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"dwui-copy-button","aria-label":a.default?void 0:t.label,onClick:l},[e.renderSlot(i.$slots,"default",{},()=>[e.createVNode(e.unref(C.SvgMemo))])],8,Be))}}),Se=["aria-label","aria-checked"],Ce={class:"dwui-dark-mode-selector-track"},$e={class:"dwui-dark-mode-selector-icon-light"},Ee={class:"dwui-dark-mode-selector-icon-dark"},Ne=e.defineComponent({__name:"dark-mode-selector",props:{storageKey:{default:"dwui-color-scheme"},label:{default:"Dark mode"}},emits:["emit:change"],setup(r,{emit:n}){const t=r,o=n,a=e.ref(!1);let l=null,i=null;const m=w=>w==="light"||w==="dark",c=()=>i?.matches?"dark":"light",d=()=>{try{const w=localStorage.getItem(t.storageKey);return m(w)?w:null}catch{return null}},v=w=>{const h=document.documentElement.classList;h.remove(w==="dark"?"light":"dark"),h.add(w),a.value=w==="dark",l!==w&&(l=w,o("emit:change",w))},p=w=>{try{localStorage.setItem(t.storageKey,w)}catch{}v(w)},u=()=>{p(a.value?"light":"dark")},y=w=>{p(w.matches?"dark":"light")},_=w=>{w.key===t.storageKey&&v(m(w.newValue)?w.newValue:c())};return e.onMounted(()=>{i=window.matchMedia("(prefers-color-scheme: dark)"),v(d()??c()),i.addEventListener("change",y),window.addEventListener("storage",_)}),e.onBeforeUnmount(()=>{i?.removeEventListener("change",y),window.removeEventListener("storage",_)}),(w,h)=>(e.openBlock(),e.createElementBlock("button",{type:"button",role:"switch",class:"dwui-dark-mode-selector","aria-label":t.label,"aria-checked":a.value,onClick:u},[e.createElementVNode("span",Ce,[e.createElementVNode("span",$e,[e.renderSlot(w.$slots,"icon-light",{},()=>[e.createVNode(e.unref(C.SvgHighBrightness))])]),e.createElementVNode("span",Ee,[e.renderSlot(w.$slots,"icon-dark",{},()=>[e.createVNode(e.unref(C.SvgMoonPhases),{"moon-age":3.85})])])]),h[0]||(h[0]=e.createElementVNode("span",{class:"dwui-dark-mode-selector-handle"},null,-1))],8,Se))}}),xe={class:"dwui-pagination"},Pe={class:"dwui-pagination-list"},Ve=["disabled","aria-label","title"],Le=["disabled","aria-label","title"],Me=["disabled","aria-label","title"],Te=["aria-current","onClick"],De=["disabled","aria-label","title"],ze=["disabled","aria-label","title"],Ae=["disabled","aria-label","title"],Ie={key:0,class:"dwui-pagination-select"},Oe=["value","disabled"],He=["value"],Re=e.defineComponent({__name:"pagination",props:{current:{},totalCount:{},limit:{},maxPagination:{},showPageSelect:{type:Boolean},labels:{}},emits:["emit:changePage"],setup(r,{emit:n}){const t=r,o=n,a=e.computed(()=>Math.ceil(t.totalCount/t.limit)),l=e.computed(()=>Math.min(Math.max(t.current,1),a.value)),i=e.ref(!1),m=e.computed(()=>a.value<1?[]:i.value?Array.from({length:a.value},(h,k)=>k+1):[l.value]),c=e.computed(()=>{if(a.value<1)return[];const h=Math.min(Math.max(l.value-Math.floor((t.maxPagination-1)/2),1),Math.max(a.value-t.maxPagination+1,1)),k=Math.min(h+t.maxPagination-1,a.value);return Array.from({length:k-h+1},(g,S)=>h+S)}),d=h=>{h!==t.current&&o("emit:changePage",h)},v=h=>{let k;h<0?k=Math.max(c.value[0]-t.maxPagination,1):k=Math.min(c.value[c.value.length-1]+t.maxPagination,a.value)-t.maxPagination+1,d(k+Math.round((t.maxPagination-1)/2))},p=h=>{d(Number(h.target.value))},u=()=>{i.value=!0},y=h=>{document.activeElement!==h.currentTarget&&(i.value=!1)},_=()=>{i.value=!0},w=()=>{i.value=!1};return(h,k)=>(e.openBlock(),e.createElementBlock("div",xe,[e.createElementVNode("ul",Pe,[e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:l.value<=1,"aria-label":t.labels.firstPage,title:t.labels.firstPage,onClick:k[0]||(k[0]=g=>d(1))},[e.createVNode(e.unref(C.SvgChevronDouble),{direction:"left",size:"1em","stroke-width":8})],8,Ve)]),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:l.value<=1,"aria-label":t.labels.previousPage,title:t.labels.previousPage,onClick:k[1]||(k[1]=g=>d(l.value-1))},[e.createVNode(e.unref(C.SvgChevron),{direction:"left",size:"1em","stroke-width":8})],8,Le)]),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:c.value.length===0||c.value[0]===1,"aria-label":t.labels.previousPages,title:t.labels.previousPages,onClick:k[2]||(k[2]=g=>v(-1))},[e.createVNode(e.unref(C.SvgBlackArrow),{direction:"left",size:"1em"})],8,Me)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,g=>(e.openBlock(),e.createElementBlock("li",{key:g},[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["dwui-pagination-page",{"dwui-current":g===l.value}]),"aria-current":g===l.value?"page":void 0,onClick:S=>d(g)},e.toDisplayString(g),11,Te)]))),128)),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:c.value.length===0||c.value[c.value.length-1]===a.value,"aria-label":t.labels.nextPages,title:t.labels.nextPages,onClick:k[3]||(k[3]=g=>v(1))},[e.createVNode(e.unref(C.SvgBlackArrow),{direction:"right",size:"1em"})],8,De)]),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:a.value<=l.value,"aria-label":t.labels.nextPage,title:t.labels.nextPage,onClick:k[4]||(k[4]=g=>d(l.value+1))},[e.createVNode(e.unref(C.SvgChevron),{direction:"right",size:"1em","stroke-width":8})],8,ze)]),e.createElementVNode("li",null,[e.createElementVNode("button",{type:"button",disabled:a.value<=l.value,"aria-label":t.labels.lastPage,title:t.labels.lastPage,onClick:k[5]||(k[5]=g=>d(a.value))},[e.createVNode(e.unref(C.SvgChevronDouble),{direction:"right",size:"1em","stroke-width":8})],8,Ae)])]),t.showPageSelect?(e.openBlock(),e.createElementBlock("label",Ie,[e.createElementVNode("span",null,e.toDisplayString(t.labels.pageNumber),1),e.createElementVNode("select",{value:l.value,disabled:a.value<=1,onPointerenter:u,onPointerleave:y,onFocus:_,onBlur:w,onChange:p},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,g=>(e.openBlock(),e.createElementBlock("option",{key:g,value:g},e.toDisplayString(g)+" ("+e.toDisplayString((g-1)*t.limit+1)+" - "+e.toDisplayString(Math.min(g*t.limit,t.totalCount))+") ",9,He))),128))],40,Oe)])):e.createCommentVNode("",!0)]))}}),Fe={class:"dwui-data-table-controls"},We={class:"dwui-data-table-tools"},je={key:0,class:"dwui-data-table-total"},Ke={class:"dwui-data-table-total-count"},Ue={key:1,class:"dwui-data-table-limit"},Ge=["value","max"],Xe=["title","aria-label"],qe=["title","aria-label"],G=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(r,{emit:n}){const t=r,o=n,a=new Intl.NumberFormat("en-US"),l=e.computed(()=>t.formatTotalCount?t.formatTotalCount(t.totalCount):a.format(t.totalCount)),i=m=>{const c=m.target,d=Math.min(Math.max(Math.trunc(Number(c.value))||1,1),t.maxLimit);c.value=String(d),d!==t.limit&&o("emit:changeLimit",d)};return(m,c)=>(e.openBlock(),e.createElementBlock("div",Fe,[t.pagination?(e.openBlock(),e.createBlock(Re,{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":c[0]||(c[0]=d=>o("emit:changePage",d))},null,8,["current","total-count","limit","max-pagination","show-page-select","labels"])):e.createCommentVNode("",!0),e.createElementVNode("div",We,[t.showTotal?(e.openBlock(),e.createElementBlock("span",je,[e.createElementVNode("span",null,e.toDisplayString(t.labels.totalCount),1),e.createElementVNode("span",Ke,e.toDisplayString(l.value),1),e.createElementVNode("span",null,e.toDisplayString(t.labels.totalUnit),1)])):e.createCommentVNode("",!0),t.showLimit?(e.openBlock(),e.createElementBlock("label",Ue,[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:i},null,40,Ge)])):e.createCommentVNode("",!0),t.showDownloadPage?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",title:t.labels.downloadPage,"aria-label":t.labels.downloadPage,onClick:c[1]||(c[1]=d=>o("emit:downloadPage"))},[e.createVNode(e.unref(C.SvgFolderDownload))],8,Xe)):e.createCommentVNode("",!0),t.showDownloadAll?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",title:t.labels.downloadAll,"aria-label":t.labels.downloadAll,onClick:c[2]||(c[2]=d=>o("emit:downloadAll"))},[e.createVNode(e.unref(C.SvgCloudDownload))],8,qe)):e.createCommentVNode("",!0)])]))}}),R=(r,n)=>{let t=r;for(const o of n.replace(/\[(\w+)\]/g,".$1").split(".")){if(t==null)return;t=t[o]}return t},F=r=>typeof r=="function"?r():r??"",X=r=>r===!0||r==="true"||r==="1"||r==="on"||r===1,q=r=>typeof r=="number"?r:Number(String(r).replace(/[^+\-\d.]/g,"")),Ye=(r,n,t)=>{if(r==null&&n==null)return 0;if(r==null)return-1;if(n==null)return 1;if(r===n)return 0;switch(t){case"boolean":return(X(r)?1:0)-(X(n)?1:0);case"number":{const o=q(r),a=q(n);return Number.isNaN(o)||Number.isNaN(a)?(Number.isNaN(o)?0:1)-(Number.isNaN(a)?0:1):o-a}case"object":return A(r).localeCompare(A(n));default:return String(r).localeCompare(String(n))}},A=r=>{try{return JSON.stringify(r,(n,t)=>typeof t=="bigint"?t.toString():t)??""}catch{return""}},Qe=["rowspan","colspan","title","aria-sort"],Je={class:"dwui-data-table-header"},Ze=["role","tabindex","onClick","onKeydown"],et=["innerHTML"],tt={key:2},ot=["onPointerdown"],nt={key:0,class:"dwui-data-table-no-data"},lt=["colspan"],at={key:0,class:"dwui-data-table-loading"},rt=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:9999},maxPagination:{default:7},selectable:{type:Boolean,default:!0},controls:{default:"both"},pagination:{default:"both"},showDownloadPage:{type:Boolean,default:!0},showDownloadAll:{type:Boolean,default:!0},showTotal:{type:Boolean,default:!0},showLimit:{type:Boolean,default:!0},showPageSelect:{type:Boolean,default:!1},showNoData:{type:Boolean,default:!0},resizable:{type:Boolean,default:!0},sortable:{type:Boolean,default:!0},sortMode:{default:"remote"},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(r,{expose:n,emit:t}){const o=r,a=t,l=e.ref(),i=e.ref(),m=e.ref(),c=e.ref({}),d=e.ref(""),v=e.ref(!1),p=e.ref();let u;const y=e.computed(()=>o.headers.map(s=>c.value[s.id]==null?s:{...s,width:c.value[s.id]})),_=e.computed(()=>{const s={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",...o.labels},f={};for(const b of Object.keys(s)){const $=s[b];f[b]=typeof $=="function"?$():$}return f}),w=e.computed(()=>Math.min(o.limit,o.maxLimit)),h=e.computed(()=>({showTotal:o.showTotal,showLimit:o.showLimit,showPageSelect:o.showPageSelect,showDownloadPage:o.showDownloadPage,showDownloadAll:o.showDownloadAll,current:o.current,limit:w.value,maxLimit:o.maxLimit,maxPagination:o.maxPagination,totalCount:o.totalCount??o.dataList.length,formatTotalCount:o.formatTotalCount,labels:_.value})),k=e.shallowRef(void 0),g=e.computed(()=>{const s=o.sortMode==="page"?o.headers.find(b=>b.id===d.value):void 0;if(!s)return o.dataList;const f=s.compare??((b,$)=>{const x=s.sortKey??s.id;return Ye(R(b,x),R($,x),s.type??"string")});return[...o.dataList].sort((b,$)=>v.value?f($,b):f(b,$))}),S=e.computed(()=>{const s=k.value;if(s==null)return-1;const f=g.value.indexOf(s);if(f!==-1)return f;const b=A(s);return b===""?-1:g.value.findIndex($=>A($)===b)}),B=e.computed(()=>o.headers.reduce((s,f)=>s+(f.colspan==null?1:Number(f.colspan)),0)),N=s=>{if(s!=null)return typeof s=="number"?`${s}px`:s},E=s=>({width:N(s.width),minWidth:N(s.minWidth),maxWidth:N(s.maxWidth)}),V=s=>{if(d.value===s)return v.value?"descending":"ascending"},P=s=>{if(!(!o.sortable||d.value!==s))return v.value?"down":"up"},L=s=>(o.current-1)*w.value+s+1,W=()=>Array.from(m.value?.children??[]).filter(s=>s.tagName==="TR"&&!s.classList.contains("dwui-data-table-no-data")),ie=s=>Array.from(s.children).filter(f=>f.tagName==="TD"||f.tagName==="TH"),j=()=>{a("emit:updateHeader",y.value.map(s=>({...s})))},I=()=>{W().forEach((s,f)=>s.classList.toggle("dwui-selected",f===S.value))},se=()=>{const s=l.value,f=W()[S.value];if(!s||!f)return;const b=i.value?.offsetHeight??0,$=f.offsetTop,x=$+f.offsetHeight;$<s.scrollTop+b?s.scrollTop=$-b:s.scrollTop+s.clientHeight<x&&(s.scrollTop=x-s.clientHeight)},D=(s,f)=>{k.value=s,a("emit:selectRow",s,f)},K=(s,f)=>{o.selectable&&(f===S.value?D(void 0,-1):(D(s,f),l.value?.focus({preventScroll:!0})))},ce=(s,f)=>{f!==S.value&&K(s,f),a("emit:dblclickRow",s,f)},de=s=>{if(s.target!==s.currentTarget||S.value<0||s.key!=="ArrowUp"&&s.key!=="ArrowDown")return;const f=S.value+(s.key==="ArrowUp"?-1:1);f<0||g.value.length<=f||(s.preventDefault(),D(g.value[f],f))},O=s=>{!o.sortable||o.dataList.length===0||(v.value=d.value===s.id?!v.value:!1,d.value=s.id,a("emit:changeSort",{sortKey:d.value,descending:v.value}))},ue=(s,f)=>{if(!o.resizable)return;s.preventDefault();const b=i.value?.firstElementChild,$=b?ie(b):[];for(const[x,T]of $.entries())c.value[o.headers[x].id]=T.getBoundingClientRect().width;p.value={index:f,x:s.clientX},s.currentTarget.setPointerCapture(s.pointerId),j()},me=s=>{if(!p.value)return;const f=s.clientX-p.value.x;if(f===0)return;p.value.x=s.clientX;const b=p.value.index,$=o.headers.map(T=>T.id);c.value[$[b]]+=f;const x=f/($.length-b-1);for(const T of $.slice(b+1))c.value[T]-=x},U=()=>{p.value&&(p.value=void 0,j())};return e.onMounted(()=>{u=new MutationObserver(I),m.value&&u.observe(m.value,{childList:!0}),I()}),e.onBeforeUnmount(()=>{u?.disconnect()}),e.watch(()=>o.headers,(s,f)=>{const b=s.map(x=>x.id),$=f.map(x=>x.id);(b.length!==$.length||b.some(x=>!$.includes(x)))&&(c.value={})}),e.watch(()=>o.loading,(s,f)=>{f&&!s&&(o.sortMode==="page"&&(d.value="",v.value=!1),k.value!=null&&D(void 0,-1))}),e.watch(S,s=>{0<=s&&se()},{flush:"post"}),e.watch(S,I,{flush:"post"}),n({getSortContext:()=>({sortKey:d.value,descending:v.value})}),(s,f)=>(e.openBlock(),e.createElementBlock("section",{class:e.normalizeClass(["dwui-data-table",{"dwui-selectable":o.selectable}])},[o.controls==="both"||o.controls==="top"?(e.openBlock(),e.createBlock(G,e.mergeProps({key:0},h.value,{pagination:o.pagination==="both"||o.pagination==="top","onEmit:changePage":f[0]||(f[0]=b=>a("emit:changePage",b)),"onEmit:changeLimit":f[1]||(f[1]=b=>a("emit:changeLimit",b)),"onEmit:downloadPage":f[2]||(f[2]=b=>a("emit:downloadPage")),"onEmit:downloadAll":f[3]||(f[3]=b=>a("emit:downloadAll"))}),null,16,["pagination"])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"refContent",ref:l,class:e.normalizeClass(["dwui-data-table-content",[{"dwui-loading":o.loading},o.contentClass]]),style:e.normalizeStyle(o.contentStyle),tabindex:"-1",onKeydown:de},[e.createElementVNode("table",{class:e.normalizeClass(o.tableClass),style:e.normalizeStyle(o.tableStyle)},[e.createElementVNode("thead",{ref_key:"refThead",ref:i},[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,(b,$)=>(e.openBlock(),e.createElementBlock("th",{key:b.id,rowspan:b.rowspan,colspan:b.colspan,title:b.title,style:e.normalizeStyle(E(b)),"aria-sort":V(b.id),scope:"col"},[e.createElementVNode("div",Je,[e.createElementVNode("span",{class:"dwui-data-table-sort",role:o.sortable?"button":void 0,tabindex:o.sortable?0:void 0,onClick:x=>O(b),onKeydown:[e.withKeys(e.withModifiers(x=>O(b),["prevent"]),["enter"]),e.withKeys(e.withModifiers(x=>O(b),["prevent"]),["space"])]},[P(b.id)?(e.openBlock(),e.createBlock(e.unref(C.SvgPointingTriangle),{key:0,direction:P(b.id),size:"0.7em"},null,8,["direction"])):e.createCommentVNode("",!0),b.html?(e.openBlock(),e.createElementBlock("span",{key:1,innerHTML:e.unref(F)(b.label)},null,8,et)):(e.openBlock(),e.createElementBlock("span",tt,e.toDisplayString(e.unref(F)(b.label)),1))],40,Ze)]),o.resizable&&$<y.value.length-1?(e.openBlock(),e.createElementBlock("div",{key:0,class:"dwui-data-table-resizer",onPointerdown:x=>ue(x,$),onPointermove:me,onPointerup:U,onPointercancel:U},null,40,ot)):e.createCommentVNode("",!0)],12,Qe))),128))])],512),e.createElementVNode("tbody",{ref_key:"refTbody",ref:m},[o.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.renderSlot(s.$slots,"default",{rows:g.value,clickRow:K,dblclickRow:ce,rowNumber:L,selectedIndex:S.value}),o.dataList.length===0&&o.showNoData?(e.openBlock(),e.createElementBlock("tr",nt,[e.createElementVNode("td",{colspan:B.value},e.toDisplayString(_.value.noData),9,lt)])):e.createCommentVNode("",!0)],64))],512)],6),o.loading?(e.openBlock(),e.createElementBlock("div",at,[e.renderSlot(s.$slots,"loading",{},()=>[f[8]||(f[8]=e.createElementVNode("div",{class:"dwui-data-table-loading-spinner"},null,-1))])])):e.createCommentVNode("",!0)],38),o.controls==="both"||o.controls==="bottom"?(e.openBlock(),e.createBlock(G,e.mergeProps({key:1},h.value,{pagination:o.pagination==="both"||o.pagination==="bottom","onEmit:changePage":f[4]||(f[4]=b=>a("emit:changePage",b)),"onEmit:changeLimit":f[5]||(f[5]=b=>a("emit:changeLimit",b)),"onEmit:downloadPage":f[6]||(f[6]=b=>a("emit:downloadPage")),"onEmit:downloadAll":f[7]||(f[7]=b=>a("emit:downloadAll"))}),null,16,["pagination"])):e.createCommentVNode("",!0)],2))}}),Y={top:"bottom",bottom:"top",left:"right",right:"left"},H=(r,n,t)=>Math.min(Math.max(r,n),t),ee=(r,n,t,o)=>{const{offset:a,margin:l,arrowMargin:i}=o,[m,c="center"]=o.placement.split("-"),d=m==="top"||m==="bottom",v=r.top+r.height,p=r.left+r.width,u={top:r.top-l,bottom:t.height-v-l,left:r.left-l,right:t.width-p-l},w=(d?n.height:n.width)+a<=u[m]||u[Y[m]]<=u[m]?m:Y[m];let h;switch(w){case"top":h=r.top-a-n.height;break;case"bottom":h=v+a;break;case"left":h=r.left-a-n.width;break;default:h=p+a;break}const k=d?r.left:r.top,g=d?r.width:r.height,S=d?n.width:n.height;let B;switch(c){case"start":B=k;break;case"end":B=k+g-S;break;default:B=k+(g-S)/2;break}const N=H(d?h:B,l,Math.max(l,t.height-l-n.height)),E=H(d?B:h,l,Math.max(l,t.width-l-n.width)),V=k+g/2,L=H(V-(d?E:N),i,Math.max(i,S-i));return{top:N,left:E,side:w,arrow:L}},it=["popover","data-side"],st={class:"dwui-anchored-popover-content"},Q=4,ct=7,dt=12,ut=8,te=e.defineComponent({__name:"anchored-popover",props:{anchor:{},placement:{},arrow:{type:Boolean},mode:{}},emits:["emit:open","emit:close"],setup(r,{expose:n,emit:t}){const o=r,a=t,l=e.ref(),i=e.ref(),m=()=>{l.value?.hidePopover()},c=()=>{l.value?.showPopover()},d=()=>{const u=l.value;if(!o.anchor||!u)return;const y={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight},_=ee(o.anchor.getBoundingClientRect(),u.getBoundingClientRect(),y,{placement:o.placement,offset:o.arrow?Q+ct:Q,margin:ut,arrowMargin:dt});i.value=_.side,u.style.top=`${_.top}px`,u.style.left=`${_.left}px`,u.style.setProperty("--dwui-offset-arrow",`${_.arrow}px`),u.style.visibility="visible"},v=u=>{l.value?.contains(u.target)||d()},p=u=>{u.newState==="open"?(d(),window.addEventListener("scroll",v,!0),window.addEventListener("resize",d),a("emit:open")):(l.value&&(l.value.style.visibility=""),window.removeEventListener("scroll",v,!0),window.removeEventListener("resize",d),a("emit:close"))};return e.onBeforeUnmount(()=>{window.removeEventListener("scroll",v,!0),window.removeEventListener("resize",d)}),n({element:l,show:c,hide:m}),(u,y)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"refPanel",ref:l,class:e.normalizeClass(["dwui-anchored-popover",{"dwui-arrow":o.arrow}]),popover:o.mode,"data-side":i.value,onToggle:p},[e.createElementVNode("div",st,[e.renderSlot(u.$slots,"default")])],42,it))}}),mt=["aria-label"],pt=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(r,{emit:n}){const t=r,o=n,a=e.useAttrs(),l=e.ref(),i=e.ref();return e.onMounted(()=>{const m=i.value?.element;l.value&&m&&(l.value.popoverTargetElement=m)}),(m,c)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("button",e.mergeProps({ref_key:"refButton",ref:l,type:"button",class:"dwui-help-button","aria-label":t.label},e.unref(a)),[e.renderSlot(m.$slots,"icon",{},()=>[e.createVNode(e.unref(C.SvgQuestion))])],16,mt),e.createVNode(te,{ref_key:"refPopover",ref:i,class:"dwui-help-button-popover",mode:"auto",anchor:l.value,placement:t.placement,arrow:t.arrow,"onEmit:open":c[0]||(c[0]=d=>o("emit:open")),"onEmit:close":c[1]||(c[1]=d=>o("emit:close"))},{default:e.withCtx(()=>[e.renderSlot(m.$slots,"default")]),_:3},8,["anchor","placement","arrow"])],64))}}),ft=["aria-label","aria-describedby"],gt=150,oe=e.defineComponent({inheritAttrs:!1,__name:"icon-popper",props:{placement:{},arrow:{type:Boolean},popoverClass:{},label:{}},emits:["emit:open","emit:close"],setup(r,{emit:n}){const t=r,o=n,a=e.useAttrs(),l=e.ref(),i=e.ref(),m=e.ref(!1),c=e.useId();let d;const v=()=>{d!==void 0&&(clearTimeout(d),d=void 0)},p=()=>{v(),i.value?.show()},u=()=>{v(),i.value?.hide()},y=()=>{v(),d=setTimeout(()=>{d=void 0,i.value?.hide()},gt)},_=P=>{const L=P.target;!l.value?.contains(L)&&!i.value?.element?.contains(L)&&u()},w=P=>{P.pointerType!=="touch"&&p()},h=P=>{P.pointerType!=="touch"&&y()},k=P=>{P.pointerType!=="touch"&&v()},g=P=>{P.pointerType==="touch"&&(m.value?u():p())},S=()=>{p()},B=()=>{u()},N=()=>{u()},E=()=>{m.value=!0,document.addEventListener("pointerdown",_,!0),o("emit:open")},V=()=>{m.value=!1,document.removeEventListener("pointerdown",_,!0),o("emit:close")};return e.onBeforeUnmount(()=>{v(),document.removeEventListener("pointerdown",_,!0)}),(P,L)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("span",e.mergeProps({ref_key:"refTrigger",ref:l,class:"dwui-icon-popper",tabindex:"0","aria-label":t.label,"aria-describedby":e.unref(c)},e.unref(a),{onPointerenter:w,onPointerleave:h,onPointerdown:g,onFocus:S,onBlur:B,onKeydown:e.withKeys(N,["esc"])}),[e.renderSlot(P.$slots,"icon")],16,ft),e.createVNode(te,{ref_key:"refPopover",ref:i,id:e.unref(c),class:e.normalizeClass(["dwui-icon-popper-popover",t.popoverClass]),role:"tooltip",mode:"manual",anchor:l.value,placement:t.placement,arrow:t.arrow,onPointerenter:k,onPointerleave:h,"onEmit:open":E,"onEmit:close":V},{default:e.withCtx(()=>[e.renderSlot(P.$slots,"default")]),_:3},8,["id","class","anchor","placement","arrow"])],64))}}),vt=e.defineComponent({__name:"help-popper",props:{placement:{default:"right"},arrow:{type:Boolean,default:!0},label:{default:"Help"}},emits:["emit:open","emit:close"],setup(r,{emit:n}){const t=r,o=n;return(a,l)=>(e.openBlock(),e.createBlock(oe,{class:"dwui-help-popper","popover-class":"dwui-help-popper-popover",placement:t.placement,arrow:t.arrow,label:t.label,"onEmit:open":l[0]||(l[0]=i=>o("emit:open")),"onEmit:close":l[1]||(l[1]=i=>o("emit:close"))},{icon:e.withCtx(()=>[e.renderSlot(a.$slots,"icon",{},()=>[e.createVNode(e.unref(C.SvgQuestion))])]),default:e.withCtx(()=>[e.renderSlot(a.$slots,"default")]),_:3},8,["placement","arrow","label"]))}}),ht=e.defineComponent({__name:"hourglass-loading",props:{loading:{type:Boolean},duration:{},size:{default:"1.2em"}},setup(r){const n=r;return(t,o)=>n.loading?(e.openBlock(),e.createBlock(e.unref(C.SvgHourglass),{key:0,duration:n.duration,size:n.size,class:"dwui-hourglass-loading"},null,8,["duration","size"])):e.renderSlot(t.$slots,"default",{},void 0,void 0,1)}}),bt=e.defineComponent({__name:"intersection-lazy-component",props:{root:{},rootMargin:{},threshold:{}},emits:["emit:visible"],setup(r,{emit:n}){const t=r,o=n,a=e.ref(),l=e.ref(!1);let i;const m=()=>{i?.disconnect(),i=void 0,!(!a.value||l.value)&&(i=new IntersectionObserver(c=>{c.some(d=>d.isIntersecting)&&(l.value=!0,i?.disconnect(),i=void 0,o("emit:visible"))},{root:t.root,rootMargin:t.rootMargin,threshold:t.threshold}),i.observe(a.value))};return e.onMounted(()=>{m()}),e.onBeforeUnmount(()=>{i?.disconnect()}),e.watch(()=>[t.root,t.rootMargin,t.threshold],()=>{m()},{flush:"post"}),(c,d)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"refTarget",ref:a,class:"dwui-intersection-lazy-component"},[l.value?e.renderSlot(c.$slots,"default",{},void 0,void 0,0):e.renderSlot(c.$slots,"placeholder",{},void 0,void 0,1)],512))}}),wt={type:"button",class:"dwui-label-button"},yt=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(r){const n=r,t=e.useSlots();return(o,a)=>(e.openBlock(),e.createElementBlock("button",wt,[e.createVNode(M,{preset:n.preset,gap:n.gap,"icon-class":n.iconClass,"icon-style":n.iconStyle,"label-class":n.labelClass,"label-style":n.labelStyle},e.createSlots({_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[e.renderSlot(o.$slots,"icon")]),key:"0"}:void 0,t.default!=null?{name:"default",fn:e.withCtx(()=>[e.renderSlot(o.$slots,"default")]),key:"1"}:void 0]),1032,["preset","gap","icon-class","icon-style","label-class","label-style"])]))}}),kt=["aria-labelledby","aria-describedby"],Bt={class:"dwui-modal-dialog-header"},_t={class:"dwui-modal-dialog-icon"},St=["id","innerHTML"],Ct=["id"],$t=["id"],Et=["innerHTML"],Nt={key:1},xt={key:0,class:"dwui-modal-dialog-images"},Pt=["src","alt"],Vt=["onClick"],Lt=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(r,{emit:n}){const t=r,o=n,a=e.useModel(r,"open"),l=e.ref(),i=e.ref(),m=e.useId(),c=e.useId(),d={info:C.SvgInfo,confirm:C.SvgQuestion,warn:C.SvgWarningSign,error:C.SvgCritical},v=["cancel","no","yes","ok"],p=e.computed(()=>t.buttons??(t.type==="confirm"?["yes","no"]:["ok"])),u=e.computed(()=>({ok:t.okLabel,yes:t.yesLabel,no:t.noLabel,cancel:t.cancelLabel})),y=e.computed(()=>t.message==null?[]:[t.message].flat()),_=e.computed(()=>[t.image??[]].flat().map(B=>typeof B=="string"?{src:B,alt:""}:B)),w=B=>{S(B)},h=B=>{B.preventDefault(),S("cancel")},k=B=>{if(B.key!=="ArrowLeft"&&B.key!=="ArrowRight")return;const N=[...i.value?.children??[]],E=N.indexOf(document.activeElement);E<0||N[B.key==="ArrowRight"?E+1:E-1]?.focus()},g=()=>{l.value?.showModal();const B=v.find(E=>p.value.includes(E)),N=B?p.value.indexOf(B):-1;i.value?.children[N]?.focus()},S=B=>{l.value?.close(),a.value=!1,o("emit:close",B)};return e.onMounted(()=>{a.value&&g()}),e.watch(a,B=>{B?g():l.value?.close()},{flush:"post"}),(B,N)=>(e.openBlock(),e.createElementBlock("dialog",{ref_key:"refDialog",ref:l,class:e.normalizeClass(["dwui-modal-dialog",`dwui-modal-dialog-${t.type}`]),"aria-labelledby":t.title?e.unref(m):void 0,"aria-describedby":e.unref(c),onCancel:h,onKeydown:k},[e.createElementVNode("div",Bt,[e.createElementVNode("span",_t,[e.renderSlot(B.$slots,"icon",{},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d[t.type])))])]),t.title?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[t.html?(e.openBlock(),e.createElementBlock("span",{key:0,id:e.unref(m),class:"dwui-modal-dialog-title",innerHTML:t.title},null,8,St)):(e.openBlock(),e.createElementBlock("span",{key:1,id:e.unref(m),class:"dwui-modal-dialog-title"},e.toDisplayString(t.title),9,Ct))],64)):e.createCommentVNode("",!0)]),e.createElementVNode("div",{id:e.unref(c),class:"dwui-modal-dialog-body"},[e.renderSlot(B.$slots,"default",{},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,(E,V)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:V},[t.html?(e.openBlock(),e.createElementBlock("p",{key:0,innerHTML:E},null,8,Et)):(e.openBlock(),e.createElementBlock("p",Nt,e.toDisplayString(E),1))],64))),128)),_.value.length?(e.openBlock(),e.createElementBlock("div",xt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,(E,V)=>(e.openBlock(),e.createElementBlock("img",{key:V,src:E.src,alt:E.alt},null,8,Pt))),128))])):e.createCommentVNode("",!0)])],8,$t),e.createElementVNode("div",{ref_key:"refButtons",ref:i,class:"dwui-modal-dialog-buttons"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,E=>(e.openBlock(),e.createElementBlock("button",{key:E,type:"button",class:e.normalizeClass(["dwui-modal-dialog-button",`dwui-modal-dialog-button-${E}`]),onClick:V=>w(E)},e.toDisplayString(u.value[E]),11,Vt))),128))],512)],42,kt))}});function Mt(r){const n=r.minWidth??20,t=r.minHeight??20,o=e.ref(!1),a=e.ref(!1),l=e.reactive({x:0,y:0}),i=e.reactive({width:-1,height:-1});let m=null,c="bottom-right",d={x:0,y:0};const v=g=>{if(g.pointerId!==m)return;g.preventDefault();const S=g.clientX-d.x,B=g.clientY-d.y;if(d={x:g.clientX,y:g.clientY},o.value)l.x+=S,l.y+=B;else if(a.value){if(c.endsWith("left")){const N=Math.max(n,i.width-S);l.x+=i.width-N,i.width=N}else i.width=Math.max(n,i.width+S);if(c.startsWith("top")){const N=Math.max(t,i.height-B);l.y+=i.height-N,i.height=N}else i.height=Math.max(t,i.height+B)}},p=()=>{const g=r.target.value?.getBoundingClientRect().width||0;l.x<40-g&&(l.x=40-g),window.innerWidth-40<l.x&&(l.x=window.innerWidth-40),l.y<0&&(l.y=0),r.clampBottom&&window.innerHeight-20<l.y&&(l.y=window.innerHeight-20)},u=g=>{if(g.pointerId!==m)return;const S=o.value;y(),S&&p()},y=()=>{document.removeEventListener("pointermove",v,!0),document.removeEventListener("pointerup",u,!0),document.removeEventListener("pointercancel",u,!0),m=null,o.value=!1,a.value=!1},_=g=>{y(),m=g.pointerId,d={x:g.clientX,y:g.clientY},document.addEventListener("pointermove",v,!0),document.addEventListener("pointerup",u,!0),document.addEventListener("pointercancel",u,!0)},w=g=>{g.isPrimary&&r.dragMode()==="body"&&(_(g),o.value=!0)},h=g=>{g.isPrimary&&r.dragMode()==="header"&&(_(g),o.value=!0)},k=(g,S="bottom-right")=>{if(!g.isPrimary)return;c=S;const B=r.target.value?.getBoundingClientRect();B&&(i.width<0&&(i.width=B.width),i.height<0&&(i.height=B.height)),_(g),a.value=!0};return e.onBeforeUnmount(y),{moving:o,resizing:a,currentPosition:l,currentRect:i,onDragStart:w,onDragHeaderStart:h,onResizeStart:k,teardown:y}}const Tt=["aria-labelledby"],Dt=["id"],zt=["aria-label"],At=["onPointerdown"],ne=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(r,{expose:n,emit:t}){const o=r,a=t,l=e.ref(),i=e.useId(),m=["top-left","top-right","bottom-left"],c=Mt({target:l,dragMode:()=>o.dragMode,clampBottom:o.clampBottom}),d=e.computed(()=>{const{currentPosition:v,currentRect:p}=c;return{top:`${v.y}px`,left:`${v.x}px`,width:0<=p.width?`${p.width}px`:void 0,height:0<=p.height?`${p.height}px`:void 0}});return n({element:l,position:c.currentPosition,size:c.currentRect,teardown:c.teardown}),(v,p)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"refWindow",ref:l,class:"dwui-movable-window",role:"dialog","aria-labelledby":e.unref(i),style:e.normalizeStyle(d.value)},[e.createElementVNode("div",{class:"dwui-movable-window-frame",onPointerdown:p[2]||(p[2]=(...u)=>e.unref(c).onDragStart&&e.unref(c).onDragStart(...u))},[e.createElementVNode("div",{class:e.normalizeClass(["dwui-movable-window-header",[`${o.name}-header`,o.headerClass,{"dwui-movable":o.dragMode}]]),style:e.normalizeStyle(o.headerStyle),onPointerdown:p[1]||(p[1]=(...u)=>e.unref(c).onDragHeaderStart&&e.unref(c).onDragHeaderStart(...u))},[e.createElementVNode("div",{id:e.unref(i),class:e.normalizeClass(["dwui-movable-window-title",`${o.name}-title`])},[e.renderSlot(v.$slots,"title")],10,Dt),e.renderSlot(v.$slots,"actions"),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["dwui-movable-window-close-button",`${o.name}-close-button`]),"aria-label":o.closeLabel,onClick:p[0]||(p[0]=u=>a("emit:close"))},[e.createVNode(e.unref(C.SvgNegativeSquaredCrossMark))],10,zt)],38),e.createElementVNode("div",{class:e.normalizeClass(["dwui-movable-window-body",[`${o.name}-body`,{"dwui-movable":o.dragMode==="body"}]])},[e.renderSlot(v.$slots,"default")],2)],32),o.loading?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["dwui-movable-window-loading",`${o.name}-loading`])},[e.createElementVNode("div",{class:e.normalizeClass(["dwui-movable-window-spinner",`${o.name}-spinner`])},null,2)],2)):e.createCommentVNode("",!0),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(m,u=>e.createElementVNode("div",{key:u,class:e.normalizeClass(["dwui-movable-window-corner",[`${o.name}-corner`,`dwui-${u}`]]),onPointerdown:e.withModifiers(y=>e.unref(c).onResizeStart(y,u),["prevent"])},null,42,At)),64)),e.createElementVNode("div",{class:e.normalizeClass(["dwui-movable-window-resizer",`${o.name}-resizer`]),onPointerdown:p[3]||(p[3]=e.withModifiers(u=>e.unref(c).onResizeStart(u,"bottom-right"),["prevent"]))},[e.createVNode(e.unref(C.SvgCornerDiagonal),{direction:"bottom-right"})],34)],12,Tt))}}),z=[];let J=0;const le=()=>(J+=1,J),It=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(r,{emit:n}){const t=r,o=n,a=e.useModel(r,"open"),l=e.ref(),i=e.ref(0),m=Symbol("dwui-overlay-box");let c=null;const d=()=>{t.closeOnBackdrop&&(a.value=!1)},v=()=>{a.value=!1},p=h=>{h.key!=="Escape"||!h.isTrusted||h.isComposing||h.target instanceof Element&&h.target.closest("dialog")||z.at(-1)===m&&(a.value=!1)},u=()=>{o("emit:close")},y=()=>{const h=z.indexOf(m);0<=h&&z.splice(h,1)},_=()=>{i.value=le();const h=l.value,k=h?.element?.getBoundingClientRect();h&&(h.position.x=(window.innerWidth-(k?.width||0))/2,h.position.y=Math.max(0,(window.innerHeight-(k?.height||0))/2)),c=document.activeElement instanceof HTMLElement?document.activeElement:null,h?.element?.focus(),z.push(m)},w=()=>{l.value?.teardown(),y(),c?.isConnected&&c.focus(),c=null};return e.onMounted(()=>{a.value&&_()}),e.onBeforeUnmount(()=>{y()}),e.watch(a,h=>{h?_():w()},{flush:"post"}),(h,k)=>(e.openBlock(),e.createBlock(e.Transition,{name:"dwui-overlay-box-fade",onAfterLeave:u},{default:e.withCtx(()=>[a.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"dwui-overlay-box",style:e.normalizeStyle({"--dwui-order-window":i.value})},[e.createElementVNode("div",{class:"dwui-overlay-box-backdrop",onClick:d}),e.createVNode(ne,{ref_key:"refWindow",ref:l,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:p,"onEmit:close":v},{title:e.withCtx(()=>[e.renderSlot(h.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(t.title),1)])]),default:e.withCtx(()=>[e.renderSlot(h.$slots,"default")]),_:3},8,["drag-mode","loading","close-label"])],4)):e.createCommentVNode("",!0)]),_:3}))}}),Ot={class:"dwui-page-section"},Ht={class:"dwui-page-section-content"},Rt=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(r){const n=r,t={diamond:{component:C.SvgDiamond,shape:!0,color:"#1a44b6"},circle:{component:C.SvgCircle,shape:!0,color:"#e78b2f"},square:{component:C.SvgSquare,shape:!0,color:"#d13a2b"},pushpin:{component:C.SvgPushpin,shape:!1},"round-pushpin":{component:C.SvgRoundPushpin,shape:!1}},o=e.computed(()=>{const a=t[n.icon];return{component:a.component,props:a.shape?{variant:n.iconVariant,color:n.iconColor??a.color}:{}}});return(a,l)=>(e.openBlock(),e.createElementBlock("section",Ot,[n.title!=null?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["dwui-page-section-title",n.titleClass]),style:e.normalizeStyle(n.titleStyle)},[e.createVNode(M,null,{icon:e.withCtx(()=>[e.renderSlot(a.$slots,"icon",{},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.value.component),e.normalizeProps(e.guardReactiveProps(o.value.props)),null,16))])]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(n.title),1)]),_:3})],6)):e.createCommentVNode("",!0),e.createElementVNode("div",Ht,[e.renderSlot(a.$slots,"default")])]))}}),Ft={class:"dwui-page-title"},Wt={key:0,class:"dwui-page-title-actions"},jt=e.defineComponent({__name:"page-title",props:{title:{}},setup(r){const n=r,t=e.useSlots();return(o,a)=>(e.openBlock(),e.createElementBlock("section",Ft,[e.createVNode(M,{class:"dwui-page-title-label"},e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(n.title),1)]),_:2},[t.icon!=null?{name:"icon",fn:e.withCtx(()=>[e.renderSlot(o.$slots,"icon")]),key:"0"}:void 0]),1024),t.default!=null?(e.openBlock(),e.createElementBlock("span",Wt,[e.renderSlot(o.$slots,"default")])):e.createCommentVNode("",!0)]))}}),Kt=e.defineComponent({__name:"screen-loading",props:{loading:{type:Boolean}},setup(r){const n=r,t=e.ref(null),o=()=>{const l=t.value;l&&!l.open&&l.showModal()},a=()=>{const l=t.value;l?.open&&l.close()};return e.onMounted(()=>{n.loading&&o()}),e.onBeforeUnmount(()=>{a()}),e.watch(()=>n.loading,l=>{l?o():a()},{flush:"post"}),(l,i)=>(e.openBlock(),e.createElementBlock("dialog",{ref_key:"refDialog",ref:t,class:"dwui-screen-loading",closedby:"none",onCancel:i[0]||(i[0]=e.withModifiers(()=>{},["prevent"]))},[...i[1]||(i[1]=[e.createElementVNode("div",{class:"dwui-screen-loading-spinner"},null,-1)])],544))}}),ae=Symbol("dwui-tab-group"),Ut=["id","aria-labelledby","aria-busy","hidden"],Gt={key:0,class:"dwui-tab-loading"},Xt={key:1,class:"dwui-tab-loading-spinner"},re=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(r){const n=r,t=e.inject(ae,void 0),o=e.ref(!1),a=()=>t?.loadingSlot(),l=e.computed(()=>t?.activeTabId.value===n.tabId),i=e.computed(()=>!!t?.mounted.value&&l.value),m=c=>{o.value=c};return(c,d)=>n.disabled?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,id:e.unref(t)?`${e.unref(t).groupName}-${n.tabId}-panel`:void 0,class:"dwui-tab-content",role:"tabpanel","aria-labelledby":e.unref(t)?`${e.unref(t).groupName}-${n.tabId}`:void 0,"aria-busy":o.value?"true":void 0,hidden:!l.value},[e.renderSlot(c.$slots,"default",{activated:i.value,setLoading:m}),o.value?(e.openBlock(),e.createElementBlock("div",Gt,[a()!=null?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a()),{key:0})):(e.openBlock(),e.createElementBlock("span",Xt))])):e.createCommentVNode("",!0)],8,Ut))}}),qt={class:"dwui-tab-group"},Yt=["id","name","disabled","checked","aria-selected","aria-controls","onChange"],Qt=["for"],Jt={class:"dwui-tab-items"},Zt=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(r){const n=r,t=e.useModel(r,"selectedTabId"),o=e.useSlots(),a=n.tabGroupName??e.useId(),l=v=>{if(v.type!==re)return;const p=v.props??{},u=p.disabled;return{tabId:String(p["tab-id"]??p.tabId),label:p.label,disabled:u===""||!!u,status:p.status,headerClass:p["header-class"]??p.headerClass,headerStyle:p["header-style"]??p.headerStyle,icon:v.children?.icon}},i=e.computed(()=>{const v=[];for(const p of o.default?.()??[]){const u=Array.isArray(p.children)?p.children:[p];for(const y of u){const _=l(y);_&&v.push(_)}}return v}),m=e.computed(()=>t.value!=null?t.value:(n.selectFirstEnabled?i.value.find(p=>!p.disabled):i.value[0])?.tabId),c=e.ref(!1);e.provide(ae,{groupName:a,activeTabId:m,mounted:c,loadingSlot:()=>o.loading}),e.onMounted(()=>{c.value=!0});const d=v=>{t.value=v};return(v,p)=>(e.openBlock(),e.createElementBlock("div",qt,[(e.openBlock(),e.createBlock(e.Teleport,{to:n.teleport??"body",disabled:n.teleport==null},[e.createElementVNode("div",{class:e.normalizeClass(["dwui-tab-headers",n.headerClass]),role:"tablist",style:e.normalizeStyle(n.headerStyle)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,u=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:u.tabId},[e.createElementVNode("input",{id:`${e.unref(a)}-${u.tabId}`,type:"radio",class:"dwui-tab-radio",role:"tab",name:e.unref(a),disabled:u.disabled,checked:u.tabId===m.value,"aria-selected":u.tabId===m.value?"true":"false","aria-controls":`${e.unref(a)}-${u.tabId}-panel`,onChange:y=>d(u.tabId)},null,40,Yt),e.createElementVNode("label",{for:`${e.unref(a)}-${u.tabId}`,class:e.normalizeClass(["dwui-tab-item",[u.status!=null?`dwui-tab-${u.status}`:void 0,u.headerClass]]),style:e.normalizeStyle(u.headerStyle)},[e.createVNode(M,null,e.createSlots({default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(u.label),1)]),_:2},[u.icon!=null?{name:"icon",fn:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(u.icon)))]),key:"0"}:void 0]),1024)],14,Qt)],64))),128))],6)],8,["to","disabled"])),e.createElementVNode("div",Jt,[e.renderSlot(v.$slots,"default")])]))}}),eo=e.defineComponent({__name:"warning-popper",props:{placement:{default:"right"},arrow:{type:Boolean,default:!0},label:{default:"Warning"}},emits:["emit:open","emit:close"],setup(r,{emit:n}){const t=r,o=n;return(a,l)=>(e.openBlock(),e.createBlock(oe,{class:"dwui-warning-popper","popover-class":"dwui-warning-popper-popover",placement:t.placement,arrow:t.arrow,label:t.label,"onEmit:open":l[0]||(l[0]=i=>o("emit:open")),"onEmit:close":l[1]||(l[1]=i=>o("emit:close"))},{icon:e.withCtx(()=>[e.renderSlot(a.$slots,"icon",{},()=>[e.createVNode(e.unref(C.SvgWarningSign))])]),default:e.withCtx(()=>[e.renderSlot(a.$slots,"default")]),_:3},8,["placement","arrow","label"]))}});exports._sfc_main=ne;exports._sfc_main$1=_e;exports._sfc_main$10=vt;exports._sfc_main$11=ht;exports._sfc_main$12=bt;exports._sfc_main$13=yt;exports._sfc_main$14=M;exports._sfc_main$15=Rt;exports._sfc_main$16=jt;exports._sfc_main$17=re;exports._sfc_main$18=Zt;exports._sfc_main$19=eo;exports._sfc_main$2=Lt;exports._sfc_main$3=It;exports._sfc_main$4=Kt;exports._sfc_main$5=he;exports._sfc_main$6=ke;exports._sfc_main$7=Ne;exports._sfc_main$8=rt;exports._sfc_main$9=pt;exports.computeAnchoredPosition=ee;exports.getValueByPath=R;exports.nextWindowOrder=le;exports.resolveLabel=F;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitalwalletcorp/vue-core",
3
- "version": "1.2.1",
3
+ "version": "1.3.1",
4
4
  "type": "module",
5
5
  "description": "Basic UI components for Vue 3",
6
6
  "main": "lib/index.cjs",
@@ -37,23 +37,15 @@
37
37
  "./global": {
38
38
  "types": "./lib/global.d.ts"
39
39
  },
40
- "./style.css": "./lib/style.css",
41
- "./*": {
42
- "import": {
43
- "types": "./lib/*.d.ts",
44
- "default": "./lib/*.js"
45
- },
46
- "require": {
47
- "types": "./lib/*.d.cts",
48
- "default": "./lib/*.cjs"
49
- }
50
- }
40
+ "./style.css": "./lib/style.css"
51
41
  },
52
42
  "scripts": {
53
43
  "build": "vite build",
54
44
  "yarn:dedupe": "npx yarn-deduplicate --strategy highest yarn.lock",
55
45
  "install:dev": "rm -rf lib dest && find node_modules -mindepth 1 -delete && yarn install",
56
- "typecheck": "vue-tsc --noEmit -p tsconfig.json",
46
+ "tsc": "vue-tsc --noEmit -p tsconfig.json",
47
+ "lint": "eslint . && stylelint \"src/**/*.vue\" \"src/**/*.css\"",
48
+ "lint:fix": "eslint --fix . && stylelint --fix \"**/*.vue\" \"**/*.css\"",
57
49
  "version:patch": "npm version patch",
58
50
  "version:minor": "npm version minor",
59
51
  "version:major": "npm version major",
@@ -69,7 +61,7 @@
69
61
  "components",
70
62
  "ui"
71
63
  ],
72
- "author": "satoshi kotaki",
64
+ "author": "Digital Wallet Corporation",
73
65
  "license": "MIT",
74
66
  "repository": {
75
67
  "type": "git",
@@ -85,23 +77,57 @@
85
77
  ],
86
78
  "peerDependencies": {
87
79
  "@digitalwalletcorp/vue-svg-icons": "^1.15.3",
80
+ "@nuxt/kit": "^3.17.5",
88
81
  "vue": "^3.5.29"
89
82
  },
83
+ "peerDependenciesMeta": {
84
+ "@nuxt/kit": {
85
+ "optional": true
86
+ }
87
+ },
90
88
  "devDependencies": {
91
89
  "@digitalwalletcorp/vue-svg-icons": "^1.15.3",
92
90
  "@nuxt/kit": "^3.17.5",
91
+ "@stylistic/eslint-plugin": "5.10.0",
92
+ "@stylistic/stylelint-plugin": "5.3.1",
93
93
  "@types/node": "24.13.6",
94
94
  "@vitejs/plugin-vue": "^6.0.0",
95
95
  "@vitest/coverage-v8": "3.2.4",
96
+ "@vue/compiler-core": "3.5.43",
96
97
  "@vue/test-utils": "2.4.6",
98
+ "eslint": "10.11.0",
99
+ "eslint-plugin-vue": "10.11.1",
100
+ "globals": "17.13.0",
97
101
  "happy-dom": "20.14.5",
98
102
  "nuxt": "^3.17.5",
103
+ "postcss-html": "2.0.0",
104
+ "stylelint": "17.16.0",
105
+ "stylelint-config-recommended-vue": "2.0.0",
106
+ "stylelint-config-standard": "40.0.0",
99
107
  "typescript": "6.0.3",
108
+ "typescript-eslint": "8.71.0",
100
109
  "vite": "^7.0.0",
101
110
  "vite-plugin-dts": "5.1.0",
102
111
  "vite-tsconfig-paths": "6.1.1",
103
112
  "vitest": "3.2.4",
104
113
  "vue": "^3.5.29",
114
+ "vue-eslint-parser": "10.4.1",
105
115
  "vue-tsc": "3.1.5"
116
+ },
117
+ "resolutions": {
118
+ "eslint": "10.11.0",
119
+ "eslint-plugin-vue": "10.11.1",
120
+ "typescript-eslint": "8.71.0",
121
+ "@stylistic/eslint-plugin": "5.10.0",
122
+ "globals": "17.13.0",
123
+ "vue-eslint-parser": "10.4.1",
124
+ "stylelint": "17.16.0",
125
+ "@stylistic/stylelint-plugin": "5.3.1",
126
+ "stylelint-config-standard": "40.0.0",
127
+ "stylelint-config-recommended-vue": "2.0.0",
128
+ "stylelint-config-recommended": "18.0.0",
129
+ "stylelint-config-html": "2.0.0",
130
+ "postcss-html": "2.0.0",
131
+ "postcss": "8.5.28"
106
132
  }
107
133
  }
@@ -10,10 +10,10 @@
10
10
  <button
11
11
  type="button"
12
12
  class="dwui-accordion-toggle"
13
- :aria-expanded="pageContext.expanded"
13
+ :aria-expanded="expanded"
14
14
  @click="onClickToggle"
15
15
  >
16
- <SvgTriangleButton :direction="pageContext.expanded ? 'up' : 'down'" />
16
+ <SvgTriangleButton :direction="expanded ? 'up' : 'down'" />
17
17
  <LabelIcon v-if="props.legend != null || slots.legend != null || slots.icon != null">
18
18
  <!-- 渡されたスロットだけを中継する。空のラベルを渡すとアイコンの後ろに間隔が空くため -->
19
19
  <template
@@ -33,7 +33,7 @@
33
33
  </legend>
34
34
  <div
35
35
  ref="refContents"
36
- :class="[ 'dwui-accordion-contents', shrinkable ? pageContext.expanded ? 'dwui-expanded' : 'dwui-shrunk' : '' ]"
36
+ :class="[ 'dwui-accordion-contents', shrinkable ? expanded ? 'dwui-expanded' : 'dwui-shrunk' : '' ]"
37
37
  >
38
38
  <slot />
39
39
  </div>
@@ -41,22 +41,22 @@
41
41
  </template>
42
42
 
43
43
  <script setup lang="ts">
44
- import { onMounted, reactive, ref } from 'vue';
44
+ import { computed, ref } from 'vue';
45
45
  import { SvgTriangleButton } from '@digitalwalletcorp/vue-svg-icons';
46
46
  import LabelIcon from '@/label-icon.vue';
47
47
  import { useShrinkable } from '@/internal/use-shrinkable';
48
48
 
49
- interface Props {
49
+ export interface Props {
50
50
  /** 凡例の文字。HTMLを含める場合は#legendスロットを使う */
51
51
  legend?: string;
52
52
  /** trueの場合、fieldsetを無効にする */
53
53
  disabled?: boolean;
54
- /** trueの場合、開いた状態で表示する デフォルト false */
54
+ /** trueの場合、開いた状態で表示する デフォルト false。v-model:expanded で束縛しないときの初期値 */
55
55
  initialExpand?: boolean;
56
56
  }
57
57
  const props = defineProps<Props>();
58
58
 
59
- interface Slots {
59
+ export interface Slots {
60
60
  /** 凡例の文字の前に表示するアイコン */
61
61
  icon?(): unknown;
62
62
  /** 凡例。legendより優先する */
@@ -66,18 +66,23 @@ interface Slots {
66
66
  const slots = defineSlots<Slots>();
67
67
 
68
68
  const refContents = ref<HTMLElement>();
69
- const pageContext = reactive({
70
- expanded: true
69
+ // 真偽値の prop は未指定だと false に変換されるため、未指定を undefined のまま受けるよう既定値を明示する
70
+ /** 親が v-model:expanded で束縛したときの開閉状態。束縛しなければ undefined */
71
+ const model = defineModel<boolean | undefined>('expanded', { default: undefined });
72
+ /** 束縛しないときの開閉状態 */
73
+ const localExpanded = ref(!!props.initialExpand);
74
+ const expanded = computed({
75
+ get: (): boolean => model.value ?? localExpanded.value,
76
+ set: (value: boolean): void => {
77
+ localExpanded.value = value;
78
+ model.value = value;
79
+ }
71
80
  });
72
81
  const shrinkable = useShrinkable(refContents);
73
82
 
74
83
  const onClickToggle = () => {
75
- pageContext.expanded = !pageContext.expanded;
84
+ expanded.value = !expanded.value;
76
85
  };
77
-
78
- onMounted(() => {
79
- pageContext.expanded = !!props.initialExpand;
80
- });
81
86
  </script>
82
87
 
83
88
  <style>
@@ -89,8 +94,8 @@ onMounted(() => {
89
94
  :where(.dwui-accordion-toggle) {
90
95
  display: inline-flex;
91
96
  align-items: center;
92
- gap: 4px;
93
- margin-left: 4px;
97
+ gap: 0.33em;
98
+ margin-left: 0.33em;
94
99
  padding: 0;
95
100
  border: none;
96
101
  background: none;
@@ -104,14 +109,14 @@ onMounted(() => {
104
109
  }
105
110
 
106
111
  :where(.dwui-accordion-toggle:focus-visible) {
107
- outline: var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);
108
- outline-offset: var(--dwui-offset-focus-ring, 2px);
112
+ outline: var(--dwui-outline-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);
113
+ outline-offset: var(--dwui-outline-offset-focus-ring, 2px);
109
114
  }
110
115
 
111
116
  :where(.dwui-accordion-contents) {
112
117
  position: relative;
113
118
  width: fit-content;
114
- padding: 2px;
119
+ padding: 0.17em;
115
120
  overflow: hidden;
116
121
  opacity: 1;
117
122
  }
@@ -7,7 +7,7 @@
7
7
  ref="refContents"
8
8
  class="dwui-accordion-section-contents"
9
9
  :class="[
10
- shrinkable ? pageContext.expanded ? 'dwui-expanded' : 'dwui-shrunk' : '',
10
+ shrinkable ? expanded ? 'dwui-expanded' : 'dwui-shrunk' : '',
11
11
  { 'dwui-no-gradient': props.noGradient }
12
12
  ]"
13
13
  >
@@ -21,7 +21,7 @@
21
21
  type="button"
22
22
  class="dwui-accordion-section-toggle"
23
23
  :disabled="props.disabled"
24
- :aria-expanded="pageContext.expanded"
24
+ :aria-expanded="expanded"
25
25
  @click.stop="onClickToggle"
26
26
  >
27
27
  <LabelIcon v-if="toggleIcon() != null || toggleLabel != null">
@@ -43,7 +43,7 @@
43
43
  </LabelIcon>
44
44
  <SvgTriangleButton
45
45
  v-else
46
- :direction="pageContext.expanded ? 'up' : 'down'"
46
+ :direction="expanded ? 'up' : 'down'"
47
47
  />
48
48
  </button>
49
49
  </div>
@@ -51,7 +51,7 @@
51
51
  </template>
52
52
 
53
53
  <script setup lang="ts">
54
- import { computed, onMounted, reactive, ref } from 'vue';
54
+ import { computed, ref } from 'vue';
55
55
  import type { Component, Slot } from 'vue';
56
56
  import { SvgTriangleButton } from '@digitalwalletcorp/vue-svg-icons';
57
57
  import LabelIcon from '@/label-icon.vue';
@@ -60,40 +60,49 @@ import type { LabelPreset } from '@/types/label-preset';
60
60
 
61
61
  // 開閉ボタンのアイコンとラベルは別々に決める。どちらも、スロット/ラベルの指定 > プリセット の順で使う
62
62
  // 何も指定が無い場合だけ、既定の三角を表示する
63
- interface Props {
63
+ export interface Props {
64
64
  /** trueの場合、開閉ボタンを無効にする */
65
65
  disabled?: boolean;
66
- /** trueの場合、開いた状態で表示する デフォルト false */
66
+ /** trueの場合、開いた状態で表示する デフォルト false。v-model:expanded で束縛しないときの初期値 */
67
67
  initialExpand?: boolean;
68
68
  /** trueの場合、縮めたときに中身の下側をぼかさない */
69
69
  noGradient?: boolean;
70
70
  /** 縮めているときの開閉ボタン(開く)のラベル */
71
- openLabel?: string;
71
+ expandLabel?: string;
72
72
  /** 開いているときの開閉ボタン(閉じる)のラベル */
73
- closeLabel?: string;
73
+ collapseLabel?: string;
74
74
  /** 縮めているときの開閉ボタン(開く)のアイコンとラベル */
75
- openPreset?: LabelPreset;
75
+ expandPreset?: LabelPreset;
76
76
  /** 開いているときの開閉ボタン(閉じる)のアイコンとラベル */
77
- closePreset?: LabelPreset;
77
+ collapsePreset?: LabelPreset;
78
78
  }
79
79
  const props = defineProps<Props>();
80
80
 
81
- interface Slots {
81
+ export interface Slots {
82
82
  /** 縮めているときの開閉ボタン(開く)のアイコン */
83
- 'open-icon'?(): unknown;
83
+ 'expand-icon'?(): unknown;
84
84
  /** 開いているときの開閉ボタン(閉じる)のアイコン */
85
- 'close-icon'?(): unknown;
85
+ 'collapse-icon'?(): unknown;
86
86
  default?(): unknown;
87
87
  }
88
88
  const slots = defineSlots<Slots>();
89
89
 
90
90
  const refContents = ref<HTMLElement>();
91
- const pageContext = reactive({
92
- expanded: true
91
+ // 真偽値の prop は未指定だと false に変換されるため、未指定を undefined のまま受けるよう既定値を明示する
92
+ /** 親が v-model:expanded で束縛したときの開閉状態。束縛しなければ undefined */
93
+ const model = defineModel<boolean | undefined>('expanded', { default: undefined });
94
+ /** 束縛しないときの開閉状態 */
95
+ const localExpanded = ref(!!props.initialExpand);
96
+ const expanded = computed({
97
+ get: (): boolean => model.value ?? localExpanded.value,
98
+ set: (value: boolean): void => {
99
+ localExpanded.value = value;
100
+ model.value = value;
101
+ }
93
102
  });
94
103
  const shrinkable = useShrinkable(refContents);
95
104
 
96
- const togglePreset = computed((): LabelPreset | undefined => pageContext.expanded ? props.closePreset : props.openPreset);
105
+ const togglePreset = computed((): LabelPreset | undefined => expanded.value ? props.collapsePreset : props.expandPreset);
97
106
 
98
107
  /**
99
108
  * 開閉ボタンに表示するアイコン。スロットは関数のままコンポーネントとして描画する
@@ -102,7 +111,7 @@ const togglePreset = computed((): LabelPreset | undefined => pageContext.expande
102
111
  * @returns {Slot | Component | undefined}
103
112
  */
104
113
  const toggleIcon = (): Slot | Component | undefined => {
105
- const slot = pageContext.expanded ? slots['close-icon'] : slots['open-icon'];
114
+ const slot = expanded.value ? slots['collapse-icon'] : slots['expand-icon'];
106
115
  return (slot as Slot | undefined) ?? togglePreset.value?.icon;
107
116
  };
108
117
 
@@ -112,12 +121,12 @@ const toggleIcon = (): Slot | Component | undefined => {
112
121
  * @returns {Record<string, unknown> | undefined}
113
122
  */
114
123
  const toggleIconProps = (): Record<string, unknown> | undefined => {
115
- const slot = pageContext.expanded ? slots['close-icon'] : slots['open-icon'];
124
+ const slot = expanded.value ? slots['collapse-icon'] : slots['expand-icon'];
116
125
  return slot == null ? togglePreset.value?.iconProps : undefined;
117
126
  };
118
127
 
119
128
  const toggleLabel = computed((): string | undefined => {
120
- const label = pageContext.expanded ? props.closeLabel : props.openLabel;
129
+ const label = expanded.value ? props.collapseLabel : props.expandLabel;
121
130
  if (label != null) {
122
131
  return label;
123
132
  }
@@ -126,12 +135,8 @@ const toggleLabel = computed((): string | undefined => {
126
135
  });
127
136
 
128
137
  const onClickToggle = () => {
129
- pageContext.expanded = !pageContext.expanded;
138
+ expanded.value = !expanded.value;
130
139
  };
131
-
132
- onMounted(() => {
133
- pageContext.expanded = !!props.initialExpand;
134
- });
135
140
  </script>
136
141
 
137
142
  <style>
@@ -189,16 +194,16 @@ onMounted(() => {
189
194
  }
190
195
 
191
196
  :where(.dwui-accordion-section-toggle:focus-visible) {
192
- outline: var(--dwui-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);
193
- outline-offset: var(--dwui-offset-focus-ring, 2px);
197
+ outline: var(--dwui-outline-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);
198
+ outline-offset: var(--dwui-outline-offset-focus-ring, 2px);
194
199
  }
195
200
 
196
201
  :where(.dwui-accordion-section-toggle[aria-expanded='true']) {
197
- margin-top: 8px;
202
+ margin-top: 0.67em;
198
203
  }
199
204
 
200
205
  /* 縮めたときはボタンを中身のぼかしに少し重ね、中身とボタンの間を詰める */
201
206
  :where(.dwui-accordion-section-toggle[aria-expanded='false']) {
202
- margin-top: -10px;
207
+ margin-top: -0.83em;
203
208
  }
204
209
  </style>
package/src/components.ts CHANGED
@@ -1,10 +1,20 @@
1
1
  // 公開するコンポーネントをここに列挙する。index/register/nuxtはここから読む
2
2
  export { default as AccordionFieldset } from '@/accordion-fieldset.vue';
3
3
  export { default as AccordionSection } from '@/accordion-section.vue';
4
+ export { default as CopyButton } from '@/copy-button.vue';
5
+ export { default as DarkModeSelector } from '@/dark-mode-selector.vue';
6
+ export { default as DataTable } from '@/data-table.vue';
7
+ export { default as HelpButton } from '@/help-button.vue';
8
+ export { default as HelpPopper } from '@/help-popper.vue';
4
9
  export { default as HourglassLoading } from '@/hourglass-loading.vue';
10
+ export { default as IntersectionLazyComponent } from '@/intersection-lazy-component.vue';
5
11
  export { default as LabelButton } from '@/label-button.vue';
6
12
  export { default as LabelIcon } from '@/label-icon.vue';
13
+ export { default as ModalDialog } from '@/modal-dialog.vue';
14
+ export { default as OverlayBox } from '@/overlay-box.vue';
7
15
  export { default as PageSection } from '@/page-section.vue';
8
16
  export { default as PageTitle } from '@/page-title.vue';
17
+ export { default as ScreenLoading } from '@/screen-loading.vue';
9
18
  export { default as TabContent } from '@/tab-content.vue';
10
19
  export { default as TabGroup } from '@/tab-group.vue';
20
+ export { default as WarningPopper } from '@/warning-popper.vue';
@@ -0,0 +1,89 @@
1
+ <!--
2
+ 値をクリップボードにコピーするボタン
3
+ -->
4
+ <template>
5
+ <button
6
+ type="button"
7
+ class="dwui-copy-button"
8
+ :aria-label="slots.default ? undefined : props.label"
9
+ @click="onClickCopy"
10
+ >
11
+ <slot>
12
+ <SvgMemo />
13
+ </slot>
14
+ </button>
15
+ </template>
16
+
17
+ <script setup lang="ts">
18
+ import { SvgMemo } from '@digitalwalletcorp/vue-svg-icons';
19
+
20
+ export interface Props {
21
+ /** コピーする値。関数を渡すとクリック時に呼び出して値を得る */
22
+ value: string | number | (() => string | number);
23
+ /** ボタンの読み上げ名。スロットで文字を渡したときは使わない */
24
+ label?: string;
25
+ }
26
+ const props = withDefaults(defineProps<Props>(), {
27
+ label: 'Copy'
28
+ });
29
+
30
+ export interface Emits {
31
+ /** コピーに成功したときに、コピーした文字列を発行する */
32
+ (e: 'emit:copy', value: string): void;
33
+ /** コピーに失敗したときに、原因のエラーを発行する */
34
+ (e: 'emit:error', error: unknown): void;
35
+ }
36
+ const emit = defineEmits<Emits>();
37
+
38
+ export interface Slots {
39
+ /** ボタンの中身。未指定ならメモのアイコン */
40
+ default?(): unknown;
41
+ }
42
+ const slots = defineSlots<Slots>();
43
+
44
+ const onClickCopy = async () => {
45
+ const value = String(typeof props.value === 'function' ? props.value() : props.value);
46
+ try {
47
+ await navigator.clipboard.writeText(value);
48
+ } catch (error) {
49
+ emit('emit:error', error);
50
+ return;
51
+ }
52
+ emit('emit:copy', value);
53
+ };
54
+ </script>
55
+
56
+ <style>
57
+ :where(.dwui-copy-button) {
58
+ display: inline-flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+ padding: 0.17em;
62
+ border: none;
63
+ border-radius: 4px;
64
+ background-color: transparent;
65
+ background-image: none;
66
+ color: inherit;
67
+ font: inherit;
68
+ line-height: 0;
69
+ cursor: pointer;
70
+ }
71
+
72
+ :where(.dwui-copy-button:not(:disabled):hover) {
73
+ background: var(--dwui-background-copy-button-hover, light-dark(rgba(0, 0, 0, 0.08), rgba(255, 255, 255, 0.12)));
74
+ }
75
+
76
+ :where(.dwui-copy-button:not(:disabled):active) {
77
+ transform: translate(1px, 1px);
78
+ }
79
+
80
+ :where(.dwui-copy-button:disabled) {
81
+ opacity: 0.4;
82
+ cursor: not-allowed;
83
+ }
84
+
85
+ :where(.dwui-copy-button:focus-visible) {
86
+ outline: var(--dwui-outline-width-focus-ring, 2px) solid var(--dwui-outline-color-focus-ring, Highlight);
87
+ outline-offset: var(--dwui-outline-offset-focus-ring, 2px);
88
+ }
89
+ </style>