@fewangsit/wangsvue-fats 1.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/components/animation/Animation.vue.d.ts +32 -0
  2. package/components/approverinfo/ApproverInfo.vue.d.ts +51 -0
  3. package/components/assetinfo/AssetInfo.vue.d.ts +44 -0
  4. package/components/badge/Badge.vue.d.ts +73 -0
  5. package/components/badgegroup/BadgeGroup.vue.d.ts +54 -0
  6. package/components/basecomponent/index.d.ts +28 -0
  7. package/components/basetree/BaseTree.vue.d.ts +596 -0
  8. package/components/basetree/TreeNode.vue.d.ts +35 -0
  9. package/components/breadcrumb/Breadcrumb.vue.d.ts +26 -0
  10. package/components/button/Button.vue.d.ts +189 -0
  11. package/components/buttonImportExcel/ButtonImportExcel.vue.d.ts +35 -0
  12. package/components/buttonaddbyscan/ButtonAddByScan.vue.d.ts +40 -0
  13. package/components/buttonbulkaction/ButtonBulkAction.vue.d.ts +105 -0
  14. package/components/buttoncopy/ButtonCopy.vue.d.ts +26 -0
  15. package/components/buttondownload/ButtonDownload.vue.d.ts +80 -0
  16. package/components/buttonfilter/ButtonFilter.vue.d.ts +12 -0
  17. package/components/buttonradio/ButtonRadio.vue.d.ts +258 -0
  18. package/components/buttonscan/ButtonScan.vue.d.ts +202 -0
  19. package/components/buttonsearch/ButtonSearch.vue.d.ts +38 -0
  20. package/components/buttonsearchbyscan/ButtonSearchByScan.vue.d.ts +46 -0
  21. package/components/buttonselecttree/ButtonSelectTree.vue.d.ts +201 -0
  22. package/components/buttonsplit/ButtonSplit.vue.d.ts +352 -0
  23. package/components/buttonsync/ButtonSync.vue.d.ts +22 -0
  24. package/components/buttontoggle/ButtonToggle.vue.d.ts +19 -0
  25. package/components/buttonviewlog/ButtonViewLog.vue.d.ts +17 -0
  26. package/components/calendar/Calendar.vue.d.ts +598 -0
  27. package/components/card/Card.vue.d.ts +140 -0
  28. package/components/carousel/Carousel.vue.d.ts +28 -0
  29. package/components/checkbox/Checkbox.vue.d.ts +330 -0
  30. package/components/customcolumn/CustomColumn.vue.d.ts +37 -0
  31. package/components/datatable/DataTable.vue.d.ts +745 -0
  32. package/components/datepicker/DatePicker.vue.d.ts +52 -0
  33. package/components/daypicker/DayPicker.vue.d.ts +52 -0
  34. package/components/dialog/Dialog.vue.d.ts +465 -0
  35. package/components/dialogassetnamedetail/DialogAssetNameDetail.vue.d.ts +46 -0
  36. package/components/dialogassetnamedetail/options/columns.d.ts +2 -0
  37. package/components/dialogassetnamedetail/options/filter.d.ts +2 -0
  38. package/components/dialogconfirm/DialogConfirm.vue.d.ts +165 -0
  39. package/components/dialogform/DialogForm.vue.d.ts +350 -0
  40. package/components/dialoglinkedasset/DialogLinkedAsset.vue.d.ts +106 -0
  41. package/components/dialogprintqr/DialogPrintQR.vue.d.ts +18 -0
  42. package/components/dialogreportdamage/DialogReportDamage.vue.d.ts +34 -0
  43. package/components/dialogreportmissing/DialogReportMissing.vue.d.ts +33 -0
  44. package/components/dialogreporttag/DialogReportTag.vue.d.ts +31 -0
  45. package/components/dialogselecttree/DialogSelectTree.vue.d.ts +137 -0
  46. package/components/dialogselectuser/DialogSelectUser.vue.d.ts +102 -0
  47. package/components/dialogselectuser/options/columns.d.ts +3 -0
  48. package/components/dialogtransferlog/DialogTransferLog.vue.d.ts +16 -0
  49. package/components/dropdown/Dropdown.vue.d.ts +288 -0
  50. package/components/editor/Editor.vue.d.ts +192 -0
  51. package/components/fieldwrapper/FieldWrapper.vue.d.ts +86 -0
  52. package/components/fileupload/FileUpload.vue.d.ts +170 -0
  53. package/components/filtercontainer/FilterContainer.vue.d.ts +217 -0
  54. package/components/form/Form.vue.d.ts +319 -0
  55. package/components/icon/Icon.vue.d.ts +260 -0
  56. package/components/image/Image.vue.d.ts +411 -0
  57. package/components/imagecompressor/ImageCompressor.vue.d.ts +237 -0
  58. package/components/index.d.ts +83 -0
  59. package/components/inlinemessage/InlineMessage.vue.d.ts +167 -0
  60. package/components/inputbadge/InputBadge.vue.d.ts +122 -0
  61. package/components/inputcurrency/InputCurrency.vue.d.ts +170 -0
  62. package/components/inputcurrency/helpers/currency.helper.d.ts +8 -0
  63. package/components/inputemail/InputEmail.vue.d.ts +26 -0
  64. package/components/inputnumber/InputNumber.vue.d.ts +288 -0
  65. package/components/inputotp/InputOtp.vue.d.ts +3 -0
  66. package/components/inputpassword/InputPassword.vue.d.ts +33 -0
  67. package/components/inputphonenumber/InputPhoneNumber.vue.d.ts +99 -0
  68. package/components/inputrangenumber/InputRangeNumber.vue.d.ts +121 -0
  69. package/components/inputsearch/InputSearch.vue.d.ts +36 -0
  70. package/components/inputtext/InputText.vue.d.ts +353 -0
  71. package/components/inputurl/InputURL.vue.d.ts +41 -0
  72. package/components/invisiblefield/InvisibleField.vue.d.ts +32 -0
  73. package/components/languagedropdown/LanguageDropdown.vue.d.ts +33 -0
  74. package/components/languageswitcher/LanguageSwitcher.vue.d.ts +15 -0
  75. package/components/litedropdown/LiteDropdown.vue.d.ts +98 -0
  76. package/components/loading/Loading.vue.d.ts +47 -0
  77. package/components/loading/store/loading.store.d.ts +8 -0
  78. package/components/menu/Menu.vue.d.ts +391 -0
  79. package/components/menuitem/index.d.ts +106 -0
  80. package/components/multiselect/MultiSelect.vue.d.ts +195 -0
  81. package/components/overlaypanel/OverlayPanel.vue.d.ts +302 -0
  82. package/components/paginator/Paginator.vue.d.ts +285 -0
  83. package/components/passthrough/index.d.ts +16 -0
  84. package/components/steps/Steps.vue.d.ts +20 -0
  85. package/components/tabmenu/TabMenu.vue.d.ts +104 -0
  86. package/components/tagtype/TagType.vue.d.ts +26 -0
  87. package/components/textarea/Textarea.vue.d.ts +171 -0
  88. package/components/timeline/Timeline.vue.d.ts +140 -0
  89. package/components/toast/Toast.vue.d.ts +368 -0
  90. package/components/toggleswitch/ToggleSwitch.vue.d.ts +282 -0
  91. package/components/transactionroles/TransactionRoles.vue.d.ts +58 -0
  92. package/components/tree/Tree.vue.d.ts +151 -0
  93. package/components/tree/helpers/filterNodeKeys.helper.d.ts +22 -0
  94. package/components/tree/helpers/flattenTreeNodeChildren.helper.d.ts +8 -0
  95. package/components/treesearchinput/TreeSearchInput.vue.d.ts +16 -0
  96. package/components/ts-helpers.d.ts +91 -0
  97. package/components/username/UserName.vue.d.ts +123 -0
  98. package/components/userwithicon/UserWithIcon.vue.d.ts +21 -0
  99. package/components/validatormessage/ValidatorMessage.vue.d.ts +12 -0
  100. package/config/defaultProps.d.ts +3 -0
  101. package/config/index.d.ts +3 -0
  102. package/config/locale.d.ts +3 -0
  103. package/directives/focus.d.ts +7 -0
  104. package/directives/index.d.ts +1 -0
  105. package/event-bus/index.d.ts +66 -0
  106. package/event-bus/mitt.d.ts +41 -0
  107. package/loading-page-BrQattYE.js +1 -0
  108. package/loading-page-CgfbWppy.js +1 -0
  109. package/loading-page-CoC9UhfC.js +4 -0
  110. package/loading-page-CoXtqoc9.js +4 -0
  111. package/loading-page-DbLuqCHa.js +1 -0
  112. package/loading-page-f8D03l3G.js +4 -0
  113. package/loading-plane-CgfbWppy.js +1 -0
  114. package/loading-plane-CoXtqoc9.js +4 -0
  115. package/loading-table-Bdr9ZhtP.js +1 -0
  116. package/loading-table-ByUoWqUo.js +4 -0
  117. package/loading-table-BygEMzFM.js +4 -0
  118. package/loading-table-BzrSQlA0.js +1 -0
  119. package/loading-table-D9bw9OcI.js +4 -0
  120. package/loading-table-chOgXi94.js +1 -0
  121. package/main.d.ts +34 -0
  122. package/no-data-CTKux8RI.js +4 -0
  123. package/no-data-Cgze_Rvp.js +1 -0
  124. package/no-data-DLHO1L_u.js +4 -0
  125. package/no-data-Dep79CBh.js +1 -0
  126. package/no-data-g0dJCy2p.js +4 -0
  127. package/no-data-y1X5WtcQ.js +1 -0
  128. package/package.json +27 -0
  129. package/plugins/VueHtmlToPaper.d.ts +11 -0
  130. package/plugins/WangsVue.d.ts +311 -0
  131. package/plugins/formValidation.d.ts +20 -0
  132. package/plugins/i18n-extension.d.ts +4 -0
  133. package/plugins/i18n.d.ts +103 -0
  134. package/stats.html +4949 -0
  135. package/style.css +1 -0
  136. package/utils/date.util.d.ts +79 -0
  137. package/utils/exportToExcel.util.d.ts +27 -0
  138. package/utils/formatTagCode.util.d.ts +1 -0
  139. package/utils/getStatusSeverity.util.d.ts +33 -0
  140. package/utils/index.d.ts +9 -0
  141. package/utils/isBasic.util.d.ts +1 -0
  142. package/utils/listenSidebarChanges.util.d.ts +16 -0
  143. package/utils/object.util.d.ts +27 -0
  144. package/utils/role.util.d.ts +70 -0
  145. package/utils/toast.util.d.ts +120 -0
  146. package/utils/xlsx.util.d.ts +19 -0
  147. package/wangsvue-fats.js +57238 -0
  148. package/wangsvue-fats.system.js +427 -0
package/style.css ADDED
@@ -0,0 +1 @@
1
+ /*! tailwindcss v3.4.9 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.\!absolute{position:absolute!important}.absolute{position:absolute}.relative{position:relative}.\!bottom-\[80px\]{bottom:80px!important}.col-start-2{grid-column-start:2}.\!m-0{margin:0!important}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.\!mt-0{margin-top:0!important}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-auto{margin-right:auto}.mt-3{margin-top:.75rem}.mt-\[6px\]{margin-top:6px}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.\!h-4{height:1rem!important}.\!h-auto{height:auto!important}.\!h-max{height:-moz-max-content!important;height:max-content!important}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-\[13\.33px\]{height:13.33px}.h-\[26px\]{height:26px}.h-\[34px\]{height:34px}.h-\[6px\]{height:6px}.h-auto{height:auto}.max-h-20{max-height:5rem}.\!min-h-0{min-height:0!important}.\!min-h-\[67px\]{min-height:67px!important}.\!w-4{width:1rem!important}.\!w-\[600px\]{width:600px!important}.\!w-max{width:-moz-max-content!important;width:max-content!important}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-\[13\.33px\]{width:13.33px}.w-\[400px\]{width:400px}.w-\[600px\]{width:600px}.w-\[69px\]{width:69px}.w-\[6px\]{width:6px}.w-\[76px\]{width:76px}.w-\[800px\]{width:800px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.\!min-w-0{min-width:0!important}.\!max-w-\[250px\]{max-width:250px!important}.shrink-0{flex-shrink:0}.-rotate-90{--tw-rotate:-90deg}.-rotate-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[1fr\,max-content\]{grid-template-columns:1fr max-content}.grid-rows-\[repeat\(5\,max-content\)\]{grid-template-rows:repeat(5,max-content)}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.\!items-center{align-items:center!important}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-\[18px\]{gap:18px}.gap-\[6px\]{gap:6px}.\!gap-x-3{-moz-column-gap:.75rem!important;column-gap:.75rem!important}.\!gap-y-4{row-gap:1rem!important}.gap-x-\[15px\]{-moz-column-gap:15px;column-gap:15px}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.self-center{align-self:center}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[18px\]{border-radius:18px}.rounded-\[20px\]{border-radius:20px}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-2{border-width:2px}.border-none{border-style:none}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.\!p-0{padding:0!important}.\!p-3{padding:.75rem!important}.p-0{padding:0}.p-2{padding:.5rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-\[21px\]{padding-left:21px;padding-right:21px}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-4{padding-bottom:1rem;padding-top:1rem}.pr-4{padding-right:1rem}.text-center{text-align:center}.\!text-base{font-size:1rem!important;line-height:1.5rem!important}.\!text-xs{font-size:.75rem!important;line-height:1rem!important}.text-\[12px\]{font-size:12px}.text-\[16px\]{font-size:16px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.\!font-bold{font-weight:700!important}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-\[16\.39px\]{line-height:16.39px}.leading-\[19\.12px\]{line-height:19.12px}.leading-\[21\.86px\]{line-height:21.86px}.tracking-\[0\.02em\]{letter-spacing:.02em}.tracking-\[0\.03em\]{letter-spacing:.03em}.tracking-tight{letter-spacing:-.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.\!shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.\!ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\[\&\[aria-selected\=\'true\'\]\]\:text-white[aria-selected=true]{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.\[\&\[data-in-range\=\'true\'\]\]\:rounded-\[0\][data-in-range=true]{border-radius:0}[data-simplebar]{align-content:flex-start;align-items:flex-start;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;position:relative}.simplebar-wrapper{height:inherit;max-height:inherit;max-width:inherit;overflow:hidden;width:inherit}.simplebar-mask{direction:inherit;height:auto!important;overflow:hidden;width:auto!important;z-index:0}.simplebar-mask,.simplebar-offset{bottom:0;left:0;margin:0;padding:0;position:absolute;right:0;top:0}.simplebar-offset{box-sizing:inherit!important;direction:inherit!important;resize:none!important;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{box-sizing:border-box!important;direction:inherit;display:block;height:100%;max-height:100%;max-width:100%;overflow:auto;position:relative;scrollbar-width:none;width:auto;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{display:none;height:0;width:0}.simplebar-content:after,.simplebar-content:before{content:" ";display:table}.simplebar-placeholder{max-height:100%;max-width:100%;pointer-events:none;width:100%}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;flex-basis:0;flex-grow:inherit;flex-shrink:0;float:left;height:100%;margin:0;max-height:1px;max-width:1px;overflow:hidden;padding:0;pointer-events:none;position:relative;width:100%;z-index:-1}.simplebar-height-auto-observer{box-sizing:inherit;display:block;height:1000%;left:0;min-height:1px;min-width:1px;opacity:0;top:0;width:1000%;z-index:-1}.simplebar-height-auto-observer,.simplebar-track{overflow:hidden;pointer-events:none;position:absolute}.simplebar-track{bottom:0;right:0;z-index:1}[data-simplebar].simplebar-dragging,[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{left:0;min-height:10px;position:absolute;right:0}.simplebar-scrollbar:before{background:#000;border-radius:7px;content:"";opacity:0;position:absolute;transition:opacity .2s linear .5s}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-scrollbar:before{bottom:2px;left:2px;right:2px;top:2px}.simplebar-track.simplebar-horizontal{height:11px;left:0}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{bottom:0;left:0;min-height:0;min-width:10px;right:auto;top:0;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{left:0;right:auto}.simplebar-dummy-scrollbar-size{direction:rtl;height:500px;opacity:0;overflow-x:scroll;overflow-y:hidden;position:fixed;visibility:hidden;width:500px;-ms-overflow-style:scrollbar!important}.simplebar-dummy-scrollbar-size>div{height:200%;margin:10px 0;width:200%}.simplebar-hide-scrollbar{left:0;overflow-y:scroll;position:fixed;scrollbar-width:none;visibility:hidden;-ms-overflow-style:none}[data-v-96b7926f] .custom-scrollbar .simplebar-scrollbar{pointer-events:auto!important}[data-v-96b7926f] .custom-scrollbar .simplebar-track{background:#f0f0f0;pointer-events:auto}[data-v-96b7926f] .custom-scrollbar .simplebar-scrollbar:before{background:silver;left:4px;opacity:1;right:4px}[data-v-96b7926f] .custom-scrollbar .simplebar-scrollbar:active:before,[data-v-96b7926f] .custom-scrollbar .simplebar-scrollbar:hover:before{background:#8c8c8c}[data-v-96b7926f] .custom-scrollbar .simplebar-content-wrapper,[data-v-96b7926f] .custom-scrollbar .simplebar-wrapper{border-radius:8px;padding-bottom:12px!important}[data-v-96b7926f] .custom-scrollbar .simplebar-track.simplebar-vertical{width:0}[data-v-96b7926f] .custom-scrollbar .simplebar-track.simplebar-horizontal{height:10px}.cropper-event-notification[data-v-9031c32d]{align-items:center;background:#0009;bottom:0;color:#fff;display:flex;font-size:20px;justify-content:center;left:0;opacity:0;padding-left:50px;padding-right:50px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;transition:opacity .5s}.cropper-event-notification--visible[data-v-9031c32d]{opacity:1!important;pointer-events:all!important;transition:opacity .25s!important}.vue-advanced-cropper{direction:ltr;max-height:100%;max-width:100%;position:relative;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-advanced-cropper__stretcher{max-height:100%;max-width:100%;pointer-events:none;position:relative}.vue-advanced-cropper__image{max-width:none!important;position:absolute;transform-origin:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-advanced-cropper__background,.vue-advanced-cropper__foreground{background:#000;left:50%;opacity:1;position:absolute;top:50%;transform:translate(-50%,-50%)}.vue-advanced-cropper__foreground{opacity:.5}.vue-advanced-cropper__boundaries{left:50%;opacity:1;position:absolute;top:50%;transform:translate(-50%,-50%)}.vue-advanced-cropper__cropper-wrapper{height:100%;width:100%}.vue-advanced-cropper__image-wrapper{height:100%;overflow:hidden;position:absolute;width:100%}.vue-advanced-cropper__stencil-wrapper{position:absolute}.vue-simple-handler{background:#fff;display:block;height:10px;width:10px}.vue-handler-wrapper{height:30px;position:absolute;transform:translate(-50%,-50%);width:30px}.vue-handler-wrapper__draggable{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.vue-handler-wrapper--west-north{cursor:nw-resize}.vue-handler-wrapper--north{cursor:n-resize}.vue-handler-wrapper--east-north{cursor:ne-resize}.vue-handler-wrapper--east{cursor:e-resize}.vue-handler-wrapper--east-south{cursor:se-resize}.vue-handler-wrapper--south{cursor:s-resize}.vue-handler-wrapper--west-south{cursor:sw-resize}.vue-handler-wrapper--west{cursor:w-resize}.vue-handler-wrapper--disabled{cursor:auto}.vue-line-wrapper{align-items:center;background:none;display:flex;justify-content:center;position:absolute}.vue-line-wrapper--north,.vue-line-wrapper--south{height:12px;left:0;transform:translateY(-50%);width:100%}.vue-line-wrapper--north{cursor:n-resize;top:0}.vue-line-wrapper--south{cursor:s-resize;top:100%}.vue-line-wrapper--east,.vue-line-wrapper--west{height:100%;top:0;transform:translate(-50%);width:12px}.vue-line-wrapper--east{cursor:e-resize;left:100%}.vue-line-wrapper--west{cursor:w-resize;left:0}.vue-line-wrapper--disabled{cursor:auto}.vue-bounding-box{height:100%;position:relative;width:100%}.vue-bounding-box__handler{position:absolute}.vue-bounding-box__handler--west-north{left:0;top:0}.vue-bounding-box__handler--north{left:50%;top:0}.vue-bounding-box__handler--east-north{left:100%;top:0}.vue-bounding-box__handler--east{left:100%;top:50%}.vue-bounding-box__handler--east-south{left:100%;top:100%}.vue-bounding-box__handler--south{left:50%;top:100%}.vue-bounding-box__handler--west-south{left:0;top:100%}.vue-bounding-box__handler--west{left:0;top:50%}.vue-draggable-area{position:relative}.vue-preview-result{box-sizing:border-box;height:100%;overflow:hidden;position:absolute;width:100%}.vue-preview-result__wrapper{position:absolute}.vue-preview-result__image{max-width:none!important;pointer-events:none;position:relative;transform-origin:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-rectangle-stencil{box-sizing:border-box}.vue-rectangle-stencil,.vue-rectangle-stencil__preview{height:100%;position:absolute;width:100%}.vue-rectangle-stencil--movable{cursor:move}.vue-circle-stencil{box-sizing:content-box;cursor:move;height:100%;position:absolute;width:100%}.vue-circle-stencil__preview{border-radius:50%;height:100%;position:absolute;width:100%}.vue-circle-stencil--movable{cursor:move}.vue-preview{box-sizing:border-box;overflow:hidden;position:relative}.vue-preview--fill,.vue-preview__wrapper{height:100%;position:absolute;width:100%}.vue-preview__image{max-width:none!important;pointer-events:none;position:absolute;transform-origin:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-simple-line{background:none;border:0 solid hsla(0,0%,100%,.3);transition:border .5s}.vue-simple-line--north,.vue-simple-line--south{height:0;width:100%}.vue-simple-line--east,.vue-simple-line--west{height:100%;width:0}.vue-simple-line--east{border-right-width:1px}.vue-simple-line--west{border-left-width:1px}.vue-simple-line--south{border-bottom-width:1px}.vue-simple-line--north{border-top-width:1px}.vue-simple-line--hover{border-color:#fff;opacity:1}body.loading,body.loading *{overflow:hidden}
@@ -0,0 +1,79 @@
1
+ export type TDateFormat =
2
+ | 'd/m/yy'
3
+ | 'm/d/yy'
4
+ | 'd/mm/yy'
5
+ | 'dd/mm/yy'
6
+ | 'dd/mm/yyyy'
7
+ | 'dd M yy'
8
+ | 'dd M yyyy'
9
+ | 'dd MM yy'
10
+ | 'dd MM yyyy'
11
+ | 'D dd M yy'
12
+ | 'D dd M yyyy'
13
+ | 'DD dd MM yy'
14
+ | 'DD dd MM yyyy'
15
+ | 'D, dd M yy'
16
+ | 'D, dd M yyyy'
17
+ | 'DD, dd MM yy'
18
+ | 'DD, dd MM yyyy';
19
+ export type GoDateLayout =
20
+ | '02/01/06'
21
+ | '_2/_1/06'
22
+ | '_1/_2/06'
23
+ | '02 Jan 06'
24
+ | 'Mon, 02 Jan 06'
25
+ | 'Mon, 02 Jan 2006';
26
+ export type TTimeFormat = 'HH:mm' | 'HH:mm a' | 'HH:mm:ss' | 'HH:mm:ss a';
27
+ export type GoTimeLayout = '15:04' | '03:04 PM' | '15:04:05' | '03:04:05 PM';
28
+ export type CustomDateTimeFormatOptions = Omit<
29
+ Intl.DateTimeFormatOptions,
30
+ 'timeZone'
31
+ > & {
32
+ timezone?: string;
33
+ locale?: string;
34
+ };
35
+ export type DateOptions = {
36
+ locale?: string;
37
+ dateFormat?: TDateFormat | GoDateLayout;
38
+ timeFormat?: TTimeFormat | GoTimeLayout;
39
+ timezone?: string;
40
+ /**
41
+ * Show the time in the formatted date.
42
+ *
43
+ * @default true - when `timeFormat` is provided
44
+ */
45
+ showTime?: boolean;
46
+ /**
47
+ * Show the date in the formatted date.
48
+ *
49
+ * @default true
50
+ */
51
+ showDate?: boolean;
52
+ /**
53
+ * This is old format (general settings), if configuration still using old settings then this option parameter can be used
54
+ */
55
+ formatPreset?: CustomDateTimeFormatOptions;
56
+ };
57
+ export declare const formatDate: (
58
+ date: Date,
59
+ options?: DateOptions,
60
+ useGeneralSettings?: boolean,
61
+ ) => string;
62
+ export declare const formatISODate: (date: string | Date) => string;
63
+ /**
64
+ * Formats a date to human readable form (timeago / relative time from now).
65
+ *
66
+ * @param date - The date to be displayed. Can be a Date object or a string in a recognized date format.
67
+ * @param maxSeconds - Max value of seconds difference. Use it for formats a date according to the user's general settings.
68
+ * @returns The formatted date string.
69
+ */
70
+ export declare const formatDateReadable: (
71
+ date: Date,
72
+ maxSeconds?: number,
73
+ ) => string;
74
+ export declare const getRemainingTime: (deadline: string) => {
75
+ seconds: number;
76
+ days: number;
77
+ hours: number;
78
+ minutes: number;
79
+ };
@@ -0,0 +1,27 @@
1
+ import { ButtonDownloadLocaleConfig } from '../components/buttondownload/ButtonDownload.vue.d';
2
+ import {
3
+ Data,
4
+ DataTableLocaleConfig,
5
+ TableColumn,
6
+ } from '../components/datatable/DataTable.vue.d';
7
+ import { LocaleConfig } from '../plugins/WangsVue';
8
+ export interface ITable {
9
+ headers: string[];
10
+ data: Record<string, unknown>[];
11
+ tableName?: string;
12
+ tableTitle?: string;
13
+ }
14
+ interface IExcelOptions {
15
+ tables: ITable[];
16
+ fileName: string;
17
+ additionalTexts?: (string | string[])[];
18
+ }
19
+ export declare const exportToExcel: (options: IExcelOptions) => Promise<void>;
20
+ export declare const normalizeTableData: (
21
+ data?: Data[],
22
+ includedColumns?: TableColumn[],
23
+ locale?: (DataTableLocaleConfig | ButtonDownloadLocaleConfig) & {
24
+ global: LocaleConfig['global'];
25
+ },
26
+ ) => Record<string, unknown>[];
27
+ export {};
@@ -0,0 +1 @@
1
+ export declare const formatTagCode: (tagCode?: string) => string;
@@ -0,0 +1,33 @@
1
+ import { BadgeProps } from '../components/badge/Badge.vue.d';
2
+ export type FixedAssetStatus =
3
+ | 'Active'
4
+ | 'Approved'
5
+ | 'Available'
6
+ | 'Completed'
7
+ | 'Completion Approval'
8
+ | 'Damaged'
9
+ | 'Disposed'
10
+ | 'Expired License'
11
+ | 'Finished Approval'
12
+ | 'Managed'
13
+ | 'Missing'
14
+ | 'Need Approval'
15
+ | 'Non-Transactionable'
16
+ | 'Not Paired Yet'
17
+ | 'On Disposal Process'
18
+ | 'On Transfer'
19
+ | 'Pending Activation'
20
+ | 'Rejected'
21
+ | 'Reported Disposal'
22
+ | 'Reported Missing'
23
+ | 'Reported Damaged'
24
+ | 'TAG Not Set'
25
+ | 'TAG Reported'
26
+ | 'Unassigned'
27
+ | 'Unmanaged'
28
+ | 'Waiting for Approval'
29
+ | 'Waiting for Handover'
30
+ | 'Waiting for Verification';
31
+ export default function getStatusSeverity(
32
+ status: FixedAssetStatus,
33
+ ): BadgeProps['severity'];
@@ -0,0 +1,9 @@
1
+ export * from '../components/tree/helpers/filterNodeKeys.helper';
2
+ export * from './role.util';
3
+ export * from './listenSidebarChanges.util';
4
+ export { isEmptyObject, getNestedPropertyValue } from '../utils/object.util';
5
+ export { formatDate, formatDateReadable } from '../utils/date.util';
6
+ export { exportToExcel } from '../utils/exportToExcel.util';
7
+ export { default as flattenTreeNodeChildren } from '../components/tree/helpers/flattenTreeNodeChildren.helper';
8
+ export { default as getStatusSeverity } from './getStatusSeverity.util';
9
+ export { default as useToast } from './toast.util';
@@ -0,0 +1 @@
1
+ export declare const isBasic: () => boolean;
@@ -0,0 +1,16 @@
1
+ import { TreeNode } from '../components/basetree/BaseTree.vue.d';
2
+ export type SidebarEvent = CustomEvent<{
3
+ /**
4
+ * Stringified keys array.
5
+ */
6
+ keys: string;
7
+ node: TreeNode;
8
+ }>;
9
+ export declare const listenSidebarChanges: (
10
+ type: 'group' | 'category',
11
+ callback: (e: SidebarEvent) => any,
12
+ ) => void;
13
+ export declare const unListenSidebarChanges: (
14
+ type: 'group' | 'category',
15
+ callback: (e: SidebarEvent) => any,
16
+ ) => void;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Utility function to get nested property value.
3
+ */
4
+ export declare const getNestedPropertyValue: (
5
+ obj: Record<string, any>,
6
+ path: string,
7
+ ) => any;
8
+ /**
9
+ * Utility function to set nested property value.
10
+ */
11
+ export declare const setNestedPropertyValue: (
12
+ obj: Record<string, any>,
13
+ path: string,
14
+ value: any,
15
+ ) => void;
16
+ export declare const isEmptyObject: (obj: object) => boolean;
17
+ export declare const deepEquals: (a: object, b: object) => boolean;
18
+ export declare const equals: (
19
+ obj1: object,
20
+ obj2: object,
21
+ field?: string,
22
+ ) => boolean;
23
+ export declare const resolveFieldData: (data: object, field?: string) => object;
24
+ export declare const contains: (value: object, list: object[]) => boolean;
25
+ export declare const isNotEmpty: (value: object) => boolean;
26
+ export declare const isEmpty: (value: object | string) => boolean;
27
+ export declare const deepMerge: <T>(target: T, source: Partial<T>) => T;
@@ -0,0 +1,70 @@
1
+ import { NavigationGuardNext, RouteLocationNormalized } from 'vue-router';
2
+ export type TransactionRole = {
3
+ manager: boolean;
4
+ monitoringReport: boolean;
5
+ staff: boolean;
6
+ approver: boolean;
7
+ };
8
+ export type SystemRole = {
9
+ create: boolean;
10
+ view: boolean;
11
+ update: boolean;
12
+ delete: boolean;
13
+ };
14
+ export type SystemRoleAttribute =
15
+ | 'importData'
16
+ | 'assetAttribute'
17
+ | 'assetPolicies'
18
+ | 'depreciationGroup'
19
+ | 'depreciationMethod'
20
+ | 'documentDeletion'
21
+ | 'group'
22
+ | 'iotReader'
23
+ | 'license'
24
+ | 'purchaseDocument'
25
+ | 'purchaseInformation'
26
+ | 'userAndRole'
27
+ | 'tag'
28
+ | 'tagType'
29
+ | 'registerAsset';
30
+ export type TransactionAttribute =
31
+ | 'borrowingRole'
32
+ | 'assignmentRole'
33
+ | 'disposalRole'
34
+ | 'transferRole'
35
+ | 'auditRole'
36
+ | 'maintenanceRole'
37
+ | 'repairRole'
38
+ | 'trackingRole'
39
+ | 'damagedRole'
40
+ | 'missingRole';
41
+ export interface UserLogin {
42
+ transactionRoles: Record<TransactionAttribute, TransactionRole>;
43
+ systemRoles: Record<SystemRoleAttribute, SystemRole>;
44
+ userType: 'Admin' | 'Basic';
45
+ plan: 'Enterprise' | 'Basic';
46
+ }
47
+ export declare const getUserPlan: () => UserLogin['plan'];
48
+ export declare const getTransactionRole: (
49
+ name: keyof UserLogin['transactionRoles'],
50
+ ) => TransactionRole;
51
+ export declare const getSystemRole: (
52
+ name: keyof UserLogin['systemRoles'],
53
+ ) => SystemRole;
54
+ export declare const hasSystemRole: (name: SystemRoleAttribute) => boolean;
55
+ export declare const hasTransactionRole: (
56
+ name: TransactionAttribute,
57
+ ) => boolean;
58
+ export declare const hasManagerRole: (name: TransactionAttribute) => boolean;
59
+ export declare const hasAnyManagerRole: () => boolean;
60
+ export declare const hasAnyMonitoringReportRole: () => boolean;
61
+ export declare const hasStaffRole: (name: TransactionAttribute) => boolean;
62
+ export declare const hasMonitoringReportRole: (
63
+ name: TransactionAttribute,
64
+ ) => boolean;
65
+ export declare const hasApprovalRole: (name: TransactionAttribute) => boolean;
66
+ export declare const checkRouteAccess: (
67
+ to: RouteLocationNormalized,
68
+ from: RouteLocationNormalized,
69
+ next: NavigationGuardNext,
70
+ ) => void;
@@ -0,0 +1,120 @@
1
+ import { WangsIcons } from '../components/icon/Icon.vue.d';
2
+ export type ToastSeverity = 'success' | 'error' | 'info';
3
+ export interface ToastParams {
4
+ /**
5
+ * The main message to display in the toast. Will be formatted based on template message.
6
+ */
7
+ message: string;
8
+ /**
9
+ * Indicates whether the message is customized and does not follow the default message template.
10
+ * If true, custom formatting will be applied.
11
+ */
12
+ customMessage?: boolean;
13
+ /**
14
+ * The severity level of the toast message.
15
+ * Can be 'success', 'error', or 'info'.
16
+ */
17
+ severity?: ToastSeverity;
18
+ /**
19
+ * The icon to display in the toast.
20
+ */
21
+ icon?: WangsIcons;
22
+ /**
23
+ * The custom CSS class to apply to the icon.
24
+ */
25
+ iconClass?: any;
26
+ /**
27
+ * The error object from a catch statement, used to provide additional details for error toasts.
28
+ * Accepts any type of error object.
29
+ */
30
+ error?: unknown;
31
+ /**
32
+ * The duration for which the toast will be displayed, in milliseconds.
33
+ * Set to 0 to show the message infinitely.
34
+ *
35
+ * @default 3000 - 3 seconds
36
+ */
37
+ life?: number;
38
+ /**
39
+ * The name of the message group to which this toast belongs.
40
+ */
41
+ group?: string;
42
+ /**
43
+ * Unique identifier of the toast message.
44
+ */
45
+ messageId?: string;
46
+ }
47
+ export interface ToastMethod {
48
+ add(params: ToastParams): void;
49
+ /**
50
+ * Clears the messages that belongs to the group.
51
+ * @param {string} group - Name of the message group.
52
+ */
53
+ removeGroup(group: string): void;
54
+ removeAllGroups(): void;
55
+ }
56
+ /**
57
+ * Configuration options for the `useToast` hook.
58
+ */
59
+ export interface UseToastConfig {
60
+ /**
61
+ * Default message templates for each severity level.
62
+ * Keys represent the severity, and values are the template strings.
63
+ *
64
+ * @example
65
+ * {
66
+ * severity: {
67
+ * success: 'Success, {message}',
68
+ * error: 'Error, {message} {additionalMessage}',
69
+ * info: 'Info, {message} {additionalMessage}',
70
+ * },
71
+ * additionalMessage: ' Silahkan cek kembali koneksi Anda.'
72
+ * }
73
+ */
74
+ template?: {
75
+ severity?: Record<string, string>;
76
+ additionalMessage?: string;
77
+ };
78
+ /**
79
+ * Icons for each severity level.
80
+ * Keys represent the severity, and values are the corresponding icon identifiers.
81
+ *
82
+ * @example
83
+ * {
84
+ * success: 'emotion-happy-fill',
85
+ * error: 'emotion-unhappy-fill',
86
+ * }
87
+ */
88
+ icons?: Record<string, WangsIcons>;
89
+ }
90
+ /**
91
+ * Hook to create and manage toast notifications.
92
+ *
93
+ * @param {UseToastConfig} config - Configuration object for the toast notifications.
94
+ * Refer to {@link UseToastConfig} for the structure and details of this object.
95
+ *
96
+ * @returns {ToastMethod} A method to trigger toast notifications.
97
+ * The method accepts {@link ToastParams} to customize individual notifications.
98
+ *
99
+ * @example
100
+ * const toast = useToast({
101
+ * template: {
102
+ * success: 'Success, {message}',
103
+ * error: 'Error, {message} {additionalMessage}',
104
+ * info: 'Info, {message} {additionalMessage}',
105
+ * },
106
+ * icons: {
107
+ * success: 'emotion-happy-fill',
108
+ * error: 'emotion-unhappy-fill',
109
+ * }
110
+ * });
111
+ *
112
+ * // Overiding the default config with ToastParams
113
+ * toast.add({
114
+ * message: 'Operation completed successfully!',
115
+ * customMessage: true,
116
+ * icon: 'custom-success-icon',
117
+ * });
118
+ */
119
+ declare const useToast: ({ icons, template }?: UseToastConfig) => ToastMethod;
120
+ export default useToast;
@@ -0,0 +1,19 @@
1
+ import * as XLSX from 'xlsx/types/index';
2
+ /**
3
+ * Dynamically loads SheetJS (XLSX) from a CDN to avoid bundling its large package size.
4
+ *
5
+ * SheetJS is a powerful but heavy library (~700KB+ uncompressed). To improve bundle performance and reduce initial
6
+ * JavaScript payload, we load it only when needed (on demand), directly from a CDN.
7
+ *
8
+ * The official CDN build is a UMD module that exposes the `XLSX` object on the global `window`.
9
+ * This function ensures it's loaded once and cached for subsequent use.
10
+ *
11
+ * @returns {Promise<XLSXType>} A promise that resolves with the XLSX object once the script is loaded.
12
+ */
13
+ declare const loadSheetJSFromCDN: () => Promise<typeof XLSX>;
14
+ export default loadSheetJSFromCDN;
15
+ declare global {
16
+ interface Window {
17
+ XLSX: typeof XLSX;
18
+ }
19
+ }