@dasidev/dasi-ui 1.0.19 → 1.0.21

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 (447) hide show
  1. package/README.md +6 -6
  2. package/dist/index.js +1 -1
  3. package/dist/types.js +1766 -1764
  4. package/package.json +2 -3
  5. package/template/index.html +0 -18
  6. package/template/package.json.template +0 -100
  7. package/template/postcss.config.js +0 -0
  8. package/template/public/favicon.ico +0 -0
  9. package/template/public/img/brand/ic_pln.svg +0 -12
  10. package/template/public/img/brand/mapp_power_logo.svg +0 -21
  11. package/template/public/img/common/pltu_ulumbu_flores_ntt.jpeg +0 -0
  12. package/template/public/scripts/pdf.worker.min.js +0 -29
  13. package/template/public/scripts/pdf.worker.min.mjs +0 -29
  14. package/template/public/scripts/pdf.worker.mjs +0 -57722
  15. package/template/public/scripts/pdf.worker.mjs.map +0 -1
  16. package/template/src/App.vue +0 -17
  17. package/template/src/__tests__/index.test.ts +0 -9
  18. package/template/src/api/api.ts +0 -117
  19. package/template/src/assets/app-selector.svg +0 -3
  20. package/template/src/assets/dasi.png +0 -0
  21. package/template/src/assets/foto_ss.svg +0 -21
  22. package/template/src/assets/icons/circle-blue.svg +0 -4
  23. package/template/src/assets/icons/circle-gray.svg +0 -15
  24. package/template/src/assets/icons/circle-green.svg +0 -4
  25. package/template/src/assets/icons/circle-orange.svg +0 -4
  26. package/template/src/assets/icons/circle-purple.svg +0 -4
  27. package/template/src/assets/icons/circle-red.svg +0 -15
  28. package/template/src/assets/icons/harbor.svg +0 -12
  29. package/template/src/assets/icons/ic-box-red.svg +0 -8
  30. package/template/src/assets/icons/ic-chevron-right.svg +0 -1
  31. package/template/src/assets/icons/ic-loading.svg +0 -9
  32. package/template/src/assets/icons/ic-reset.svg +0 -16
  33. package/template/src/assets/icons/ic-sailing.svg +0 -5
  34. package/template/src/assets/icons/icon-app-selector.svg +0 -3
  35. package/template/src/assets/icons/icon-browser-check.svg +0 -4
  36. package/template/src/assets/icons/icon-calendar.svg +0 -3
  37. package/template/src/assets/icons/icon-chart-bar.svg +0 -3
  38. package/template/src/assets/icons/icon-chart-doc.svg +0 -16
  39. package/template/src/assets/icons/icon-chart-line.svg +0 -10
  40. package/template/src/assets/icons/icon-chart-mix.svg +0 -15
  41. package/template/src/assets/icons/icon-chart-pie.svg +0 -11
  42. package/template/src/assets/icons/icon-continue.svg +0 -12
  43. package/template/src/assets/icons/icon-dashboard-2.svg +0 -17
  44. package/template/src/assets/icons/icon-dashboard.svg +0 -3
  45. package/template/src/assets/icons/icon-data-kelistrikan.svg +0 -19
  46. package/template/src/assets/icons/icon-data-sentral.svg +0 -11
  47. package/template/src/assets/icons/icon-database.svg +0 -5
  48. package/template/src/assets/icons/icon-desktop.svg +0 -3
  49. package/template/src/assets/icons/icon-download.svg +0 -13
  50. package/template/src/assets/icons/icon-energi-primer.svg +0 -12
  51. package/template/src/assets/icons/icon-faba-apk2.svg +0 -11
  52. package/template/src/assets/icons/icon-faba.svg +0 -11
  53. package/template/src/assets/icons/icon-factory.svg +0 -14
  54. package/template/src/assets/icons/icon-globe-doc.svg +0 -19
  55. package/template/src/assets/icons/icon-ikk.svg +0 -10
  56. package/template/src/assets/icons/icon-kbb.svg +0 -13
  57. package/template/src/assets/icons/icon-kos.svg +0 -16
  58. package/template/src/assets/icons/icon-kpi-bod.svg +0 -15
  59. package/template/src/assets/icons/icon-kss.svg +0 -14
  60. package/template/src/assets/icons/icon-map.svg +0 -12
  61. package/template/src/assets/icons/icon-monitoring-harian.svg +0 -13
  62. package/template/src/assets/icons/icon-notification.svg +0 -4
  63. package/template/src/assets/icons/icon-overview.svg +0 -17
  64. package/template/src/assets/icons/icon-pltu.svg +0 -13
  65. package/template/src/assets/icons/icon-sebaran-sentral.svg +0 -12
  66. package/template/src/assets/icons/icon-select-data-kelistrikan.svg +0 -19
  67. package/template/src/assets/icons/icon-select-data-sentral.svg +0 -11
  68. package/template/src/assets/icons/icon-select-energi-primer.svg +0 -12
  69. package/template/src/assets/icons/icon-select-faba-apk2.svg +0 -11
  70. package/template/src/assets/icons/icon-select-ikk.svg +0 -10
  71. package/template/src/assets/icons/icon-select-kbb.svg +0 -13
  72. package/template/src/assets/icons/icon-select-kos.svg +0 -16
  73. package/template/src/assets/icons/icon-select-kpi-bod.svg +0 -15
  74. package/template/src/assets/icons/icon-select-kss.svg +0 -14
  75. package/template/src/assets/icons/icon-select-monitoring-harian.svg +0 -13
  76. package/template/src/assets/icons/icon-select-overview.svg +0 -17
  77. package/template/src/assets/icons/icon-select-sebaran-sentral.svg +0 -12
  78. package/template/src/assets/icons/icon-sentral-white.svg +0 -13
  79. package/template/src/assets/icons/icon-shipping.svg +0 -5
  80. package/template/src/assets/icons/icon-sort.svg +0 -5
  81. package/template/src/assets/icons/icon-tree-box.svg +0 -14
  82. package/template/src/assets/icons/icon-warehouse.svg +0 -12
  83. package/template/src/assets/icons/pin-green.svg +0 -3
  84. package/template/src/assets/icons/pin-orange.svg +0 -3
  85. package/template/src/assets/icons/pin-purple.svg +0 -3
  86. package/template/src/assets/icons/ship.svg +0 -3
  87. package/template/src/assets/icons/shipment/icon-antri.svg +0 -15
  88. package/template/src/assets/icons/shipment/icon-bongkar.svg +0 -4
  89. package/template/src/assets/icons/shipment/icon-invoice.svg +0 -6
  90. package/template/src/assets/icons/shipment/icon-loading.svg +0 -8
  91. package/template/src/assets/icons/shipment/icon-pembayaran.svg +0 -13
  92. package/template/src/assets/icons/shipment/icon-pengiriman.svg +0 -4
  93. package/template/src/assets/icons/shipment/icon-sailing.svg +0 -4
  94. package/template/src/assets/icons/shipment/icon-shipment-completed.svg +0 -6
  95. package/template/src/assets/icons/shipment/icon-shipment-in-progress.svg +0 -6
  96. package/template/src/assets/icons/shipment/icon-shipment-over-sla.svg +0 -6
  97. package/template/src/assets/icons/shipment/icon-spt.svg +0 -4
  98. package/template/src/assets/icons/shipment/icon-total-shipment.svg +0 -4
  99. package/template/src/assets/icons/upload_doc_icon.svg +0 -42
  100. package/template/src/assets/icons/upload_icon_blue.svg +0 -14
  101. package/template/src/assets/login-bg-day-min.jpg +0 -0
  102. package/template/src/assets/login-bg-night-min.jpg +0 -0
  103. package/template/src/assets/login-bg.jpg +0 -0
  104. package/template/src/assets/login-day.png +0 -0
  105. package/template/src/assets/login-night.png +0 -0
  106. package/template/src/assets/lucide-circle-plus-blue.svg +0 -1
  107. package/template/src/assets/pdf-logo.svg +0 -11
  108. package/template/src/assets/pemasok-card-bg.svg +0 -6
  109. package/template/src/assets/success_animation.gif +0 -0
  110. package/template/src/assets/success_animation.mp4 +0 -0
  111. package/template/src/assets/success_animation.webm +0 -0
  112. package/template/src/components/button/BtnAddOutline.vue +0 -14
  113. package/template/src/components/button/BtnCircle.vue +0 -10
  114. package/template/src/components/button/BtnOutline.vue +0 -15
  115. package/template/src/components/button/BtnPrimary.vue +0 -25
  116. package/template/src/components/button/BtnSecondary.vue +0 -26
  117. package/template/src/components/detail/AccountDetailTimeline.vue +0 -144
  118. package/template/src/components/detail/ApprovalInfo.vue +0 -288
  119. package/template/src/components/detail/DCI2.vue +0 -164
  120. package/template/src/components/detail/DetailContentHeader.vue +0 -83
  121. package/template/src/components/detail/DetailContentItem.vue +0 -186
  122. package/template/src/components/detail/DetailContentItems.vue +0 -387
  123. package/template/src/components/detail/DetailContentLoading.vue +0 -12
  124. package/template/src/components/detail/DetailContentTablet.vue +0 -10
  125. package/template/src/components/detail/DetailSheet.vue +0 -294
  126. package/template/src/components/detail/DetailTimeline.vue +0 -191
  127. package/template/src/components/detail/DocApprovalDialog.vue +0 -29
  128. package/template/src/components/detail/DocViewerContent.vue +0 -991
  129. package/template/src/components/dialog/ConfirmDialog.vue +0 -96
  130. package/template/src/components/dialog/DialogBase.vue +0 -53
  131. package/template/src/components/dialog/DialogSelect.vue +0 -212
  132. package/template/src/components/dialog/ErrorDialog.vue +0 -63
  133. package/template/src/components/dialog/FormDialog.vue +0 -141
  134. package/template/src/components/dialog/FormInputerDialog.vue +0 -91
  135. package/template/src/components/dialog/InfoDialog.vue +0 -74
  136. package/template/src/components/dialog/SuccessDialog.vue +0 -50
  137. package/template/src/components/examples/TestSchemaExample.vue +0 -288
  138. package/template/src/components/forms/auth/LoginForm.vue +0 -806
  139. package/template/src/components/forms/auth/PwdScore.vue +0 -68
  140. package/template/src/components/helper/ApiTester.vue +0 -153
  141. package/template/src/components/helper/ChangePwd.vue +0 -149
  142. package/template/src/components/helper/CheckboxElement.vue +0 -43
  143. package/template/src/components/helper/ConfigSwitcher.vue +0 -54
  144. package/template/src/components/helper/Copyright.vue +0 -10
  145. package/template/src/components/helper/ErrorScreen.vue +0 -40
  146. package/template/src/components/helper/LucideIcon.vue +0 -27
  147. package/template/src/components/helper/PdfViewer.vue +0 -103
  148. package/template/src/components/helper/PinInputer.vue +0 -205
  149. package/template/src/components/helper/PrivacyPolicy.vue +0 -122
  150. package/template/src/components/layout/PageActivityHeader.vue +0 -48
  151. package/template/src/components/layout/PageHeader.vue +0 -69
  152. package/template/src/components/loadings/LoadingDialog.vue +0 -29
  153. package/template/src/components/loadings/LoadingDialogSpin.vue +0 -25
  154. package/template/src/components/loadings/LoadingIndicator.vue +0 -38
  155. package/template/src/components/loadings/LoadingScreen.vue +0 -23
  156. package/template/src/components/notif/Notif.vue +0 -102
  157. package/template/src/components/notif/NotifItem.vue +0 -40
  158. package/template/src/components/pages/Header.vue +0 -431
  159. package/template/src/components/pages/Leftbar.vue +0 -417
  160. package/template/src/components/pages/PageActivity.vue +0 -108
  161. package/template/src/components/pages/PageActivityContent.vue +0 -597
  162. package/template/src/components/pages/PageContentTable.vue +0 -589
  163. package/template/src/components/pages/PageTab.vue +0 -84
  164. package/template/src/components/selector/BaseSelector.vue +0 -1136
  165. package/template/src/components/selector/ConfigDataSelector.vue +0 -136
  166. package/template/src/components/settings/SettingsItem.vue +0 -38
  167. package/template/src/components/tab/TabView.vue +0 -11
  168. package/template/src/components/tab/TabViewItem.vue +0 -18
  169. package/template/src/components/tab/TabViewItemBar.vue +0 -9
  170. package/template/src/components/tables/CellHover.vue +0 -65
  171. package/template/src/components/tables/DashboardDataTable.vue +0 -707
  172. package/template/src/components/tables/DataStatusTag.vue +0 -52
  173. package/template/src/components/tables/DataTable.vue +0 -156
  174. package/template/src/components/tables/DataTableAccordion.vue +0 -249
  175. package/template/src/components/tables/DataTableActionRow.vue +0 -64
  176. package/template/src/components/tables/DataTableCell.vue +0 -271
  177. package/template/src/components/tables/DataTableHeader.vue +0 -60
  178. package/template/src/components/tables/DataTableRow.vue +0 -213
  179. package/template/src/components/tables/ExpandedTable.vue +0 -259
  180. package/template/src/components/tables/PageTable.vue +0 -73
  181. package/template/src/components/tables/Pagination.vue +0 -98
  182. package/template/src/components/tables/dropdown/BaseDropdownTable.vue +0 -140
  183. package/template/src/components/tables/dropdown/DropdownTableActivity.vue +0 -33
  184. package/template/src/components/tables/dropdown/DropdownTableAsset.vue +0 -30
  185. package/template/src/components/tables/dropdown/DropdownTableConfig.vue +0 -30
  186. package/template/src/components/tables/dropdown/DropdownTableDataKonektor.vue +0 -31
  187. package/template/src/components/tables/dropdown/DropdownTableDataLabel.vue +0 -30
  188. package/template/src/components/tables/dropdown/DropdownTableDataSchema.vue +0 -31
  189. package/template/src/components/tables/dropdown/DropdownTableFabaPemanfaat.vue +0 -30
  190. package/template/src/components/tables/dropdown/DropdownTableGroup.vue +0 -36
  191. package/template/src/components/tables/dropdown/DropdownTableHalaman.vue +0 -33
  192. package/template/src/components/tables/dropdown/DropdownTableLevel.vue +0 -66
  193. package/template/src/components/tables/dropdown/DropdownTableOrganization.vue +0 -47
  194. package/template/src/components/tables/dropdown/DropdownTablePengelola.vue +0 -28
  195. package/template/src/components/tables/dropdown/DropdownTableQueryLayer.vue +0 -29
  196. package/template/src/components/tables/dropdown/DropdownTableSentral.vue +0 -33
  197. package/template/src/components/tables/dropdown/DropdownTableWarehouse.vue +0 -30
  198. package/template/src/components/tables/dropdown/TableDropdown.vue +0 -52
  199. package/template/src/components/ui/accordion/Accordion.vue +0 -19
  200. package/template/src/components/ui/accordion/AccordionContent.vue +0 -24
  201. package/template/src/components/ui/accordion/AccordionItem.vue +0 -24
  202. package/template/src/components/ui/accordion/AccordionTrigger.vue +0 -41
  203. package/template/src/components/ui/accordion/index.ts +0 -4
  204. package/template/src/components/ui/alert-dialog/AlertDialog.vue +0 -14
  205. package/template/src/components/ui/alert-dialog/AlertDialogAction.vue +0 -20
  206. package/template/src/components/ui/alert-dialog/AlertDialogCancel.vue +0 -20
  207. package/template/src/components/ui/alert-dialog/AlertDialogContent.vue +0 -42
  208. package/template/src/components/ui/alert-dialog/AlertDialogDescription.vue +0 -25
  209. package/template/src/components/ui/alert-dialog/AlertDialogFooter.vue +0 -21
  210. package/template/src/components/ui/alert-dialog/AlertDialogHeader.vue +0 -16
  211. package/template/src/components/ui/alert-dialog/AlertDialogTitle.vue +0 -22
  212. package/template/src/components/ui/alert-dialog/AlertDialogTrigger.vue +0 -11
  213. package/template/src/components/ui/alert-dialog/index.ts +0 -9
  214. package/template/src/components/ui/avatar/Avatar.vue +0 -24
  215. package/template/src/components/ui/avatar/AvatarFallback.vue +0 -11
  216. package/template/src/components/ui/avatar/AvatarImage.vue +0 -9
  217. package/template/src/components/ui/avatar/UsersAvatar.vue +0 -27
  218. package/template/src/components/ui/avatar/index.ts +0 -24
  219. package/template/src/components/ui/button/Button.vue +0 -27
  220. package/template/src/components/ui/button/index.ts +0 -34
  221. package/template/src/components/ui/calendar/Calendar.vue +0 -325
  222. package/template/src/components/ui/calendar/index.ts +0 -22
  223. package/template/src/components/ui/checkbox/Checkbox.vue +0 -33
  224. package/template/src/components/ui/checkbox/index.ts +0 -1
  225. package/template/src/components/ui/command/Command.vue +0 -30
  226. package/template/src/components/ui/command/CommandDialog.vue +0 -21
  227. package/template/src/components/ui/command/CommandEmpty.vue +0 -20
  228. package/template/src/components/ui/command/CommandGroup.vue +0 -29
  229. package/template/src/components/ui/command/CommandInput.vue +0 -33
  230. package/template/src/components/ui/command/CommandItem.vue +0 -26
  231. package/template/src/components/ui/command/CommandList.vue +0 -27
  232. package/template/src/components/ui/command/CommandSeparator.vue +0 -23
  233. package/template/src/components/ui/command/CommandShortcut.vue +0 -14
  234. package/template/src/components/ui/command/index.ts +0 -9
  235. package/template/src/components/ui/context-menu/ContextMenu.vue +0 -15
  236. package/template/src/components/ui/context-menu/ContextMenuCheckboxItem.vue +0 -40
  237. package/template/src/components/ui/context-menu/ContextMenuContent.vue +0 -36
  238. package/template/src/components/ui/context-menu/ContextMenuGroup.vue +0 -11
  239. package/template/src/components/ui/context-menu/ContextMenuItem.vue +0 -34
  240. package/template/src/components/ui/context-menu/ContextMenuLabel.vue +0 -25
  241. package/template/src/components/ui/context-menu/ContextMenuPortal.vue +0 -11
  242. package/template/src/components/ui/context-menu/ContextMenuRadioGroup.vue +0 -19
  243. package/template/src/components/ui/context-menu/ContextMenuRadioItem.vue +0 -40
  244. package/template/src/components/ui/context-menu/ContextMenuSeparator.vue +0 -20
  245. package/template/src/components/ui/context-menu/ContextMenuShortcut.vue +0 -14
  246. package/template/src/components/ui/context-menu/ContextMenuSub.vue +0 -19
  247. package/template/src/components/ui/context-menu/ContextMenuSubContent.vue +0 -35
  248. package/template/src/components/ui/context-menu/ContextMenuSubTrigger.vue +0 -34
  249. package/template/src/components/ui/context-menu/ContextMenuTrigger.vue +0 -13
  250. package/template/src/components/ui/context-menu/index.ts +0 -14
  251. package/template/src/components/ui/datetime/DatetimeRangeComponent.vue +0 -52
  252. package/template/src/components/ui/dialog/Dialog.vue +0 -14
  253. package/template/src/components/ui/dialog/DialogClose.vue +0 -11
  254. package/template/src/components/ui/dialog/DialogContent.vue +0 -53
  255. package/template/src/components/ui/dialog/DialogDescription.vue +0 -24
  256. package/template/src/components/ui/dialog/DialogFooter.vue +0 -19
  257. package/template/src/components/ui/dialog/DialogHeader.vue +0 -16
  258. package/template/src/components/ui/dialog/DialogScrollContent.vue +0 -59
  259. package/template/src/components/ui/dialog/DialogTitle.vue +0 -29
  260. package/template/src/components/ui/dialog/DialogTrigger.vue +0 -11
  261. package/template/src/components/ui/dialog/index.ts +0 -9
  262. package/template/src/components/ui/dropdown-menu/DropdownMenu.vue +0 -14
  263. package/template/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -40
  264. package/template/src/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -38
  265. package/template/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -11
  266. package/template/src/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -28
  267. package/template/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -24
  268. package/template/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -19
  269. package/template/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -41
  270. package/template/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -22
  271. package/template/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -14
  272. package/template/src/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -19
  273. package/template/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -30
  274. package/template/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -33
  275. package/template/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -13
  276. package/template/src/components/ui/dropdown-menu/index.ts +0 -16
  277. package/template/src/components/ui/form/FormControl.vue +0 -16
  278. package/template/src/components/ui/form/FormDescription.vue +0 -20
  279. package/template/src/components/ui/form/FormItem.vue +0 -25
  280. package/template/src/components/ui/form/FormLabel.vue +0 -23
  281. package/template/src/components/ui/form/FormMessage.vue +0 -16
  282. package/template/src/components/ui/form/index.ts +0 -6
  283. package/template/src/components/ui/form/useFormField.ts +0 -30
  284. package/template/src/components/ui/hover-card/HoverCard.vue +0 -14
  285. package/template/src/components/ui/hover-card/HoverCardContent.vue +0 -41
  286. package/template/src/components/ui/hover-card/HoverCardTrigger.vue +0 -11
  287. package/template/src/components/ui/hover-card/index.ts +0 -3
  288. package/template/src/components/ui/input/Input.vue +0 -24
  289. package/template/src/components/ui/input/index.ts +0 -1
  290. package/template/src/components/ui/label/Label.vue +0 -27
  291. package/template/src/components/ui/label/index.ts +0 -1
  292. package/template/src/components/ui/pagination/PaginationEllipsis.vue +0 -22
  293. package/template/src/components/ui/pagination/PaginationFirst.vue +0 -29
  294. package/template/src/components/ui/pagination/PaginationLast.vue +0 -29
  295. package/template/src/components/ui/pagination/PaginationNext.vue +0 -29
  296. package/template/src/components/ui/pagination/PaginationPrev.vue +0 -29
  297. package/template/src/components/ui/pagination/index.ts +0 -10
  298. package/template/src/components/ui/pin-input/PinInput.vue +0 -23
  299. package/template/src/components/ui/pin-input/PinInputGroup.vue +0 -18
  300. package/template/src/components/ui/pin-input/PinInputInput.vue +0 -18
  301. package/template/src/components/ui/pin-input/PinInputSeparator.vue +0 -15
  302. package/template/src/components/ui/pin-input/index.ts +0 -4
  303. package/template/src/components/ui/popover/Popover.vue +0 -15
  304. package/template/src/components/ui/popover/PopoverContent.vue +0 -48
  305. package/template/src/components/ui/popover/PopoverTrigger.vue +0 -11
  306. package/template/src/components/ui/popover/index.ts +0 -4
  307. package/template/src/components/ui/preview/PreviewPdf.vue +0 -118
  308. package/template/src/components/ui/progress/ProgressCircle.vue +0 -27
  309. package/template/src/components/ui/progress/SemiCircularProgressBar.vue +0 -83
  310. package/template/src/components/ui/progress/TotalCalories.vue +0 -31
  311. package/template/src/components/ui/radio-group/RadioGroup.vue +0 -25
  312. package/template/src/components/ui/radio-group/RadioGroupItem.vue +0 -37
  313. package/template/src/components/ui/radio-group/index.ts +0 -2
  314. package/template/src/components/ui/scroll-area/ScrollArea.vue +0 -29
  315. package/template/src/components/ui/scroll-area/ScrollBar.vue +0 -30
  316. package/template/src/components/ui/scroll-area/index.ts +0 -2
  317. package/template/src/components/ui/select/Select.vue +0 -15
  318. package/template/src/components/ui/select/SelectContent.vue +0 -52
  319. package/template/src/components/ui/select/SelectGroup.vue +0 -19
  320. package/template/src/components/ui/select/SelectInline.vue +0 -84
  321. package/template/src/components/ui/select/SelectItem.vue +0 -44
  322. package/template/src/components/ui/select/SelectItemText.vue +0 -11
  323. package/template/src/components/ui/select/SelectLabel.vue +0 -13
  324. package/template/src/components/ui/select/SelectScrollDownButton.vue +0 -24
  325. package/template/src/components/ui/select/SelectScrollUpButton.vue +0 -24
  326. package/template/src/components/ui/select/SelectSeparator.vue +0 -17
  327. package/template/src/components/ui/select/SelectTrigger.vue +0 -31
  328. package/template/src/components/ui/select/SelectTriggerCustom.vue +0 -23
  329. package/template/src/components/ui/select/SelectValue.vue +0 -11
  330. package/template/src/components/ui/select/index.ts +0 -12
  331. package/template/src/components/ui/separator/Separator.vue +0 -20
  332. package/template/src/components/ui/separator/index.ts +0 -1
  333. package/template/src/components/ui/sheet/Sheet.vue +0 -14
  334. package/template/src/components/ui/sheet/SheetClose.vue +0 -11
  335. package/template/src/components/ui/sheet/SheetContent.vue +0 -48
  336. package/template/src/components/ui/sheet/SheetDescription.vue +0 -22
  337. package/template/src/components/ui/sheet/SheetFooter.vue +0 -19
  338. package/template/src/components/ui/sheet/SheetHeader.vue +0 -16
  339. package/template/src/components/ui/sheet/SheetTitle.vue +0 -22
  340. package/template/src/components/ui/sheet/SheetTrigger.vue +0 -11
  341. package/template/src/components/ui/sheet/index.ts +0 -31
  342. package/template/src/components/ui/skeleton/Skeleton.vue +0 -28
  343. package/template/src/components/ui/skeleton/index.ts +0 -1
  344. package/template/src/components/ui/sonner/Sonner.vue +0 -22
  345. package/template/src/components/ui/sonner/index.ts +0 -1
  346. package/template/src/components/ui/star/StarRating.vue +0 -19
  347. package/template/src/components/ui/switch/Switch.vue +0 -37
  348. package/template/src/components/ui/switch/index.ts +0 -1
  349. package/template/src/components/ui/table/Table.vue +0 -16
  350. package/template/src/components/ui/table/TableBody.vue +0 -14
  351. package/template/src/components/ui/table/TableCaption.vue +0 -14
  352. package/template/src/components/ui/table/TableCell.vue +0 -21
  353. package/template/src/components/ui/table/TableEmpty.vue +0 -37
  354. package/template/src/components/ui/table/TableFooter.vue +0 -14
  355. package/template/src/components/ui/table/TableHead.vue +0 -14
  356. package/template/src/components/ui/table/TableHeader.vue +0 -14
  357. package/template/src/components/ui/table/TableRow.vue +0 -14
  358. package/template/src/components/ui/table/index.ts +0 -8
  359. package/template/src/components/ui/tabs/Tabs.vue +0 -15
  360. package/template/src/components/ui/tabs/TabsContent.vue +0 -22
  361. package/template/src/components/ui/tabs/TabsList.vue +0 -25
  362. package/template/src/components/ui/tabs/TabsTrigger.vue +0 -27
  363. package/template/src/components/ui/tabs/index.ts +0 -4
  364. package/template/src/components/ui/tags-input/TagsInput.vue +0 -22
  365. package/template/src/components/ui/tags-input/TagsInputInput.vue +0 -19
  366. package/template/src/components/ui/tags-input/TagsInputItem.vue +0 -22
  367. package/template/src/components/ui/tags-input/TagsInputItemDelete.vue +0 -24
  368. package/template/src/components/ui/tags-input/TagsInputItemText.vue +0 -19
  369. package/template/src/components/ui/tags-input/index.ts +0 -5
  370. package/template/src/components/ui/textarea/Textarea.vue +0 -24
  371. package/template/src/components/ui/textarea/index.ts +0 -1
  372. package/template/src/components/ui/tooltip/Tooltip.vue +0 -14
  373. package/template/src/components/ui/tooltip/TooltipContent.vue +0 -31
  374. package/template/src/components/ui/tooltip/TooltipProvider.vue +0 -11
  375. package/template/src/components/ui/tooltip/TooltipTrigger.vue +0 -11
  376. package/template/src/components/ui/tooltip/index.ts +0 -4
  377. package/template/src/composables/useAppConfig.ts +0 -332
  378. package/template/src/composables/useDarkMode.ts +0 -71
  379. package/template/src/config/app.config.ts +0 -318
  380. package/template/src/config/examples/ecommerce.config.ts +0 -132
  381. package/template/src/config/examples/generic.config.ts +0 -132
  382. package/template/src/config/menu.config.ts +0 -149
  383. package/template/src/config/my-app.config.ts +0 -134
  384. package/template/src/config/test-config.ts +0 -31
  385. package/template/src/config/theme.config.ts +0 -250
  386. package/template/src/docs/index.ts +0 -21
  387. package/template/src/docs.scss +0 -403
  388. package/template/src/index.d.ts +0 -5
  389. package/template/src/index.ts +0 -20
  390. package/template/src/layouts/AuthLayout.vue +0 -68
  391. package/template/src/layouts/DefaultLayout.vue +0 -119
  392. package/template/src/layouts/DocsLayout.vue +0 -681
  393. package/template/src/layouts/FormGlobal.vue +0 -50
  394. package/template/src/layouts/GlobalDialog.vue +0 -122
  395. package/template/src/layouts/RakorConfirmDialog.vue +0 -95
  396. package/template/src/layouts/SettingsLayout.vue +0 -115
  397. package/template/src/lib/constants.ts +0 -2
  398. package/template/src/lib/detail.utils.ts +0 -213
  399. package/template/src/lib/form.utils.ts +0 -1009
  400. package/template/src/lib/page.flow.utils.ts +0 -81
  401. package/template/src/lib/page.utils.ts +0 -864
  402. package/template/src/lib/performance.utils.ts +0 -302
  403. package/template/src/lib/tablerow.utils.ts +0 -51
  404. package/template/src/lib/utils.ts +0 -643
  405. package/template/src/main.scss +0 -717
  406. package/template/src/main.ts +0 -74
  407. package/template/src/menu.ts +0 -78
  408. package/template/src/nestedlist_color.scss +0 -161
  409. package/template/src/router/index.ts +0 -91
  410. package/template/src/stores/auth.ts +0 -117
  411. package/template/src/stores/counter.ts +0 -12
  412. package/template/src/stores/dialog.ts +0 -168
  413. package/template/src/stores/form.ts +0 -103
  414. package/template/src/stores/tabs.ts +0 -52
  415. package/template/src/tw.scss +0 -419
  416. package/template/src/types/form.types.ts +0 -348
  417. package/template/src/types/types.ts +0 -7
  418. package/template/src/utils/config.utils.ts +0 -149
  419. package/template/src/views/NotFound.vue +0 -30
  420. package/template/src/views/PageActivity.vue +0 -15
  421. package/template/src/views/auth/LoginView.vue +0 -8
  422. package/template/src/views/auth/OauthCallback.vue +0 -101
  423. package/template/src/views/dashboard/index.vue +0 -16
  424. package/template/src/views/settings/AccountSettingsView.vue +0 -58
  425. package/template/src/views/settings/AuditLogsSettingsView.vue +0 -116
  426. package/template/src/views/settings/DeviceSettingsView.vue +0 -70
  427. package/template/src/views/settings/MainSettingsView.vue +0 -12
  428. package/template/src/views/settings/ProfileSettingsView.vue +0 -104
  429. package/template/src/vueform/config/informasi-gudang.ts +0 -46
  430. package/template/src/vueform/config/test-schema.ts +0 -7
  431. package/template/src/vueform/config/types.ts +0 -768
  432. package/template/src/vueform/customization/classes.js +0 -46
  433. package/template/src/vueform/customization/tailwind.classes.js +0 -2117
  434. package/template/src/vueform/elements/ConfigDataSelectorElement.vue +0 -50
  435. package/template/src/vueform/elements/DateSelectorElement.vue +0 -323
  436. package/template/src/vueform/elements/SelectorElement.vue +0 -153
  437. package/template/src/vueform/schemas/date-selector-test.ts +0 -103
  438. package/template/src/vueform/schemas/informasi-gudang.ts +0 -158
  439. package/template/src/vueform/schemas/test-schema.ts +0 -483
  440. package/template/src/vueform.config.js +0 -77
  441. package/template/src/vueform.validator.ts +0 -77
  442. package/template/tailwind.config.js +0 -137
  443. package/template/tsconfig.app.json +0 -28
  444. package/template/tsconfig.json +0 -14
  445. package/template/tsconfig.node.json +0 -19
  446. package/template/tsconfig.vitest.json +0 -11
  447. package/template/vite.config.ts +0 -33
@@ -1,643 +0,0 @@
1
- import { type ClassValue, clsx } from "clsx";
2
- import { twMerge } from "tailwind-merge";
3
- import moment from "moment";
4
- import { saveAs } from "file-saver";
5
- import jsPDF from "jspdf";
6
- import autoTable from "jspdf-autotable";
7
- import * as XLSX from "xlsx";
8
- import menu from "../menu";
9
-
10
- export const monthNames = ["-", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"];
11
-
12
- export function cn(...inputs: ClassValue[]) {
13
- return twMerge(clsx(inputs));
14
- }
15
-
16
- export function clearFormSchema(schema: any[]) {
17
- for (const [_, item] of schema) {
18
- item.default = item.nullValue;
19
- if (item.disabledValue) item.disabled = item.disabledValue;
20
- if (item.schema) clearFormSchema(Object.entries(item.schema));
21
- }
22
- }
23
-
24
- // Helper function to check if a value is meaningful
25
- export function isValidValue(value: any): boolean {
26
- if (value === null || value === undefined || value === false) return false;
27
- if (typeof value === "string" && value.trim() === "") return false;
28
- if (typeof value === "number" && String(value).trim() === "") return false;
29
- if (value === "0001-01-01") return false; // Invalid date placeholder
30
- if (Array.isArray(value) && value.length === 0) return false;
31
- return true;
32
- }
33
-
34
- // Helper function to check if a value is meaningful
35
- function isValidFormValue(value: any): boolean {
36
- if (value === null || value === undefined) return false;
37
- if (typeof value === "string" && value.trim() === "") return false;
38
- if (typeof value === "number" && String(value).trim() === "") return false;
39
- if (value === "0001-01-01") return false; // Invalid date placeholder
40
- if (Array.isArray(value) && value.length === 0) return false;
41
- return true;
42
- }
43
-
44
- export function fillFormSchema(schema: any, items: any) {
45
- /**
46
- * Clear schema before filling new data
47
- *
48
- */
49
- clearFormSchema(schema);
50
-
51
- /**
52
- * Now fill the schema with data
53
- *
54
- */
55
- for (const [key, item] of schema) {
56
- // Handle array items with nested object structure
57
- // Generic pattern: if key ends with "Items" and is an array, transform to selector format
58
- if (key.endsWith("Items") && Array.isArray(items[key]) && items[key].length > 0) {
59
- const transformedData = items[key]
60
- .filter((item: any) => item && item !== null && item !== undefined)
61
- .map((item: any) => {
62
- if (!item) return null;
63
-
64
- const id = item.id || item[`${key.replace("Items", "")}Id`];
65
- const nameKey = key.replace("Items", "");
66
- const name = item[nameKey]?.name || item[nameKey]?.nama || item.name || item.nama || `ID: ${id}`;
67
-
68
- if (id) {
69
- return { id, name };
70
- }
71
- return null;
72
- })
73
- .filter((item: any) => item !== null);
74
-
75
- if (transformedData.length > 0) {
76
- item.default = transformedData;
77
- continue;
78
- }
79
- }
80
-
81
- // Handle dasi_v2_date_range type specifically
82
- if (item.type === "dasi_v2_date_range") {
83
- const keyAwal = `${key}Awal`;
84
- const keyAkhir = `${key}Akhir`;
85
-
86
- const awalValue = items[keyAwal];
87
- const akhirValue = items[keyAkhir];
88
-
89
- // Only set if both dates are valid and not placeholder dates
90
- if (isValidFormValue(awalValue) && isValidFormValue(akhirValue) && awalValue !== "0001-01-01" && akhirValue !== "0001-01-01") {
91
- item.default = [new Date(awalValue), new Date(akhirValue)];
92
- }
93
- // If invalid, keep the original default value from schema
94
- continue;
95
- }
96
-
97
- if (item.type === "dasi_v2_selector_single_v2") {
98
- const theKey = key.substring(key.length - 2, key.length) === "Id" ? key.substring(0, key.length - 2) : key;
99
- const value: any = items[theKey];
100
- if (value && item.subItem) {
101
- if (item.subItem.fillFromFunc) value.subItemSelected = item.subItem.fillFromFunc(items);
102
- else value.subItemSelected = items[item.subItem.fillFrom];
103
- }
104
- item.default = { value };
105
- continue;
106
- }
107
-
108
- for (const [key2, item2] of Object.entries(items)) {
109
- if (key.substring(key.length - 2, key.length) === "Id") {
110
- // Handle ID fields
111
- if (key.substring(0, key.length - 2) === key2) {
112
- // Skip if already processed by custom field mapping
113
- if (item._processed) {
114
- continue;
115
- }
116
- if (isValidFormValue(item2)) {
117
- if (item2 && (item2 as any).mimetype) {
118
- item.default = item2;
119
- } else {
120
- item.default = [item2];
121
- }
122
- }
123
- // If invalid, keep the original default value from schema
124
- }
125
-
126
- /**
127
- * @deprecated
128
- * ___Code no need to pass object,
129
- * this is normal dropdown
130
- *
131
- */
132
- // } else if (key.substring(key.length - 4, key.length) === "Code") {
133
- // // Handle ID fields
134
- // if (key.substring(0, key.length - 4) === key2) {
135
- // if (isValidFormValue(item2)) {
136
- // if (item2 && (item2 as any).mimetype) {
137
- // item.default = item2;
138
- // } else {
139
- // item.default = [item2];
140
- // }
141
- // }
142
- // // If invalid, keep the original default value from schema
143
- // }
144
- } else if (key.substring(key.length - 3, key.length) === "Ids") {
145
- // Handle multiple selector
146
- if (key.substring(0, key.length - 3) === key2) {
147
- if (isValidFormValue(item2)) item.default = item2;
148
- }
149
- } else {
150
- // Handle regular fields
151
- if (key === key2 && key.substring(key.length - 2, key.length) !== "Id") {
152
- if (isValidFormValue(item2)) item.default = item2;
153
- // If invalid, keep the original default value from schema
154
- }
155
- }
156
- }
157
-
158
- // Recursively handle nested schemas
159
- if (item.schema) {
160
- fillFormSchema(Object.entries(item.schema), items);
161
- }
162
- }
163
- }
164
-
165
- export function validateFormSilent(el: any, schema: any, path: string = ""): any {
166
- let isValid = true;
167
- for (const [key, item] of Object.entries(schema) as any) {
168
- let conditionMeet = true;
169
- if (item.conditions && item.conditions.length > 0) {
170
- for (const condition of item.conditions) {
171
- if (condition[1] === "==") {
172
- const val = el.el$(condition[0]).value;
173
- if (val !== condition[2]) {
174
- conditionMeet = false;
175
- break;
176
- }
177
- } else if (condition[1] === "in") {
178
- const val = el.el$(condition[0]).value;
179
- if (!condition[2].includes(val)) {
180
- conditionMeet = false;
181
- break;
182
- }
183
- }
184
- }
185
- }
186
- if (!conditionMeet) continue;
187
- if (item.rules && item.rules.length > 0 && !el.el$(path + key).value) {
188
- isValid = false;
189
- break;
190
- }
191
- if (item.schema) {
192
- isValid = validateFormSilent(el, item.schema, key + ".");
193
- if (!isValid) break;
194
- }
195
- }
196
- console.log("Validation result", isValid);
197
- return isValid;
198
- }
199
-
200
- export function formatNumber(number: Number): string {
201
- return Number(number || 0).toLocaleString("id", { maximumFractionDigits: 1 });
202
- }
203
-
204
- export function formatNumberIntl(number: number | undefined, minFraction = 0, maxFraction = 3): string {
205
- return Number(number || 0).toLocaleString("us", {
206
- maximumFractionDigits: maxFraction,
207
- minimumFractionDigits: minFraction
208
- });
209
- }
210
-
211
- export function displayNumberFormatedIntl(number: number, before: string, after: string) {
212
- if (!number) return "-";
213
- return `${before} <b>${formatNumberIntl(number || 0)}</b> ${after}`;
214
- }
215
-
216
- export function intlFormatedToNumber(v: string): number | null {
217
- return v ? Number(String(v).replace(/\,/g, "")) : null;
218
- }
219
-
220
- export function formatToCommaFloat(value: number): string {
221
- return value
222
- .toFixed(0) // Round to 2 decimal places
223
- .replace(",", ".") // Replace dot with comma
224
- .replace(/\B(?=(\d{3})+(?!\d))/g, ","); // Add thousand separators
225
- }
226
-
227
- export function getMenuItemByUrl(url: string) {
228
- for (const item of menu ?? []) {
229
- for (const submenu of item.submenu ?? []) {
230
- if (submenu.url === url) {
231
- return submenu;
232
- }
233
- }
234
- }
235
- }
236
-
237
- export function numberToWords(n: any) {
238
- // If input is a string, remove commas
239
- if (typeof n === "string") {
240
- n = n.replace(/,/g, "");
241
- }
242
-
243
- // Validate input and convert to string
244
- if (typeof n !== "number" && typeof n !== "string") {
245
- return "Input must be a number";
246
- }
247
- if (isNaN(Number(n))) {
248
- return "Input must be a number";
249
- }
250
-
251
- // Convert input to string for splitting on the decimal point.
252
- let numStr = n.toString();
253
- let result = "";
254
-
255
- // Handle negative numbers
256
- if (numStr[0] === "-") {
257
- result = "minus ";
258
- numStr = numStr.slice(1);
259
- }
260
-
261
- // Split the number by the decimal point.
262
- let parts = numStr.split(".");
263
- let integerPart = parseInt(parts[0]);
264
- let fractionalPart = parts[1]; // undefined if no decimal
265
-
266
- // Convert the integer part
267
- result += convertInteger(integerPart);
268
-
269
- // If there is a fractional part, convert each digit individually.
270
- if (fractionalPart !== undefined && fractionalPart.length > 0) {
271
- result += " koma";
272
- for (let i = 0; i < fractionalPart.length; i++) {
273
- let digit = parseInt(fractionalPart[i]);
274
- result += " " + digitToWord(digit);
275
- }
276
- }
277
-
278
- return result;
279
- }
280
-
281
- /**
282
- * Number to month name start with 1,
283
- * 1 = Januari,
284
- * 2 = Februari,
285
- * ...
286
- *
287
- */
288
- export function numberToMonth(n: number = 0) {
289
- return monthNames[n];
290
- }
291
-
292
- export function formatMonthYear(monthYear: string | Date): string {
293
- if (!monthYear) return "";
294
- return `${numberToMonth(moment(monthYear).month() + 1)} ${moment(monthYear).year()}`;
295
- }
296
-
297
- function convertInteger(n: number): any {
298
- // Special case for zero
299
- if (n === 0) return "nol";
300
-
301
- const angka = ["", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas"];
302
-
303
- if (n < 12) {
304
- return angka[n];
305
- } else if (n < 20) {
306
- return convertInteger(n - 10) + " belas";
307
- } else if (n < 100) {
308
- return convertInteger(Math.floor(n / 10)) + " puluh" + (n % 10 !== 0 ? " " + convertInteger(n % 10) : "");
309
- } else if (n < 200) {
310
- return "seratus" + (n % 100 !== 0 ? " " + convertInteger(n - 100) : "");
311
- } else if (n < 1000) {
312
- return convertInteger(Math.floor(n / 100)) + " ratus" + (n % 100 !== 0 ? " " + convertInteger(n % 100) : "");
313
- } else if (n < 2000) {
314
- return "seribu" + (n % 1000 !== 0 ? " " + convertInteger(n - 1000) : "");
315
- } else if (n < 1000000) {
316
- return convertInteger(Math.floor(n / 1000)) + " ribu" + (n % 1000 !== 0 ? " " + convertInteger(n % 1000) : "");
317
- } else if (n < 1000000000) {
318
- return convertInteger(Math.floor(n / 1000000)) + " juta" + (n % 1000000 !== 0 ? " " + convertInteger(n % 1000000) : "");
319
- } else if (n < 1000000000000) {
320
- return convertInteger(Math.floor(n / 1000000000)) + " milyar" + (n % 1000000000 !== 0 ? " " + convertInteger(n % 1000000000) : "");
321
- } else if (n < 1000000000000000) {
322
- return convertInteger(Math.floor(n / 1000000000000)) + " triliun" + (n % 1000000000000 !== 0 ? " " + convertInteger(n % 1000000000000) : "");
323
- } else {
324
- return "Number too large";
325
- }
326
- }
327
-
328
- function digitToWord(digit: number) {
329
- const angka = ["nol", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan"];
330
- return angka[digit];
331
- }
332
-
333
- export function isValidDate(value: string) {
334
- const parsedDate = moment(new Date(value));
335
-
336
- return parsedDate.isValid();
337
- }
338
-
339
- export function upFirst(str: string) {
340
- return `${str.substring(0, 1).toUpperCase()}${str.substring(1)}`;
341
- }
342
-
343
- export function convertFormatDate(value: string): string | null {
344
- if (!value) return null;
345
-
346
- // Try to detect common date patterns using regex
347
- const dateRegex = /\b\d{1,4}[-/]\d{1,2}[-/]\d{1,4}\b/;
348
-
349
- if (dateRegex.test(value)) {
350
- const parsedDate = moment(value, ["YYYY-MM-DD", "DD-MM-YYYY", "MM-DD-YYYY", "YYYY/MM/DD", "DD/MM/YYYY", "MM/DD/YYYY"], true); // 'true' = strict parsing
351
-
352
- if (parsedDate.isValid()) {
353
- return parsedDate.format("DD/MM/YYYY");
354
- }
355
- }
356
-
357
- return null;
358
- }
359
-
360
- export function parseDate(dateString: string) {
361
- if (!dateString) {
362
- return null;
363
- }
364
- const formats = [moment.ISO_8601, "YYYY-MM"];
365
-
366
- const parsedMoment = moment(dateString, formats);
367
-
368
- return parsedMoment.isValid() ? parsedMoment : null;
369
- }
370
-
371
- // Helper function to get nested property value
372
- export function getNestedValue(obj: any, path: string): any {
373
- return path.split(".").reduce((current, key) => current?.[key], obj);
374
- }
375
-
376
-
377
- export function isValidVariable(variable: string) {
378
- const regex = /^[a-zA-Z][a-zA-Z0-9_]*$/;
379
- const disallowedVariables = [
380
- "null",
381
- "undefined",
382
- "var",
383
- "const",
384
- "let",
385
- "type",
386
- "struct",
387
- "func",
388
- "function",
389
- "package",
390
- "return",
391
- "panic",
392
- "log",
393
- "error",
394
- "open",
395
- "db",
396
- "nil",
397
- "err",
398
- "new",
399
- "string",
400
- "int",
401
- "number",
402
- "float"
403
- ];
404
- if (!variable) return false;
405
- if (disallowedVariables.includes(variable.toLowerCase())) return false;
406
- return regex.test(variable);
407
- }
408
-
409
- export function escapeRegex(str: string): string {
410
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
411
- }
412
-
413
- export function exportToCSV(data: any[], filename: string, columns?: { key: string; label: string }[]) {
414
- // Handle empty data
415
- if (!data || !data.length) {
416
- console.warn("No data to export");
417
- return;
418
- }
419
-
420
- try {
421
- // If columns are not specified, use object keys
422
- const headers = columns ? columns.map(col => col.label) : Object.keys(data[0]);
423
-
424
- // Create CSV content
425
- const csvContent = [
426
- // Add headers
427
- headers.join(","),
428
- // Add data rows
429
- ...data.map(row => {
430
- return columns
431
- ? columns.map(col => formatCSVCell(row[col.key])).join(",")
432
- : Object.values(row)
433
- .map(cell => formatCSVCell(cell))
434
- .join(",");
435
- })
436
- ].join("\n");
437
-
438
- // Create Blob and download
439
- const blob = new Blob([`\uFEFF${csvContent}`], {
440
- type: "text/csv;charset=utf-8"
441
- });
442
- saveAs(blob, `${filename}.csv`);
443
- } catch (error) {
444
- console.error("Error exporting CSV:", error);
445
- }
446
- }
447
-
448
- function formatCSVCell(value: any): string {
449
- if (value === null || value === undefined) {
450
- return "";
451
- }
452
-
453
- const stringValue = String(value);
454
-
455
- // If value contains comma, quotes, or newline, wrap in quotes
456
- if (/[,"\n]/.test(stringValue)) {
457
- return `"${stringValue.replace(/"/g, '""')}"`;
458
- }
459
-
460
- return stringValue;
461
- }
462
-
463
- export function exportToPDF(data: any[], filename: string, columns?: { key: string; label: string }[], title?: string, pltuName?: string, periode?: string) {
464
- if (!data || !data.length) {
465
- console.warn("No data to export");
466
- return;
467
- }
468
-
469
- try {
470
- const doc = new jsPDF();
471
- let currentY = 15;
472
-
473
- // Add PLTU Name as main title
474
- if (pltuName) {
475
- doc.setFontSize(16);
476
- doc.setFont("helvetica", "bold");
477
- doc.text(pltuName, 14, currentY);
478
- currentY += 10;
479
- }
480
-
481
- // Add Periode as subtitle
482
- if (periode) {
483
- doc.setFontSize(12);
484
- doc.setFont("helvetica", "normal");
485
- doc.text(periode, 14, currentY);
486
- currentY += 10;
487
- }
488
-
489
- // Add additional title if provided
490
- if (title) {
491
- doc.setFontSize(14);
492
- doc.setFont("helvetica", "bold");
493
- doc.text(title, 14, currentY);
494
- currentY += 10;
495
- }
496
-
497
- const headers = columns ? columns.map(col => col.label) : Object.keys(data[0]);
498
- const rows = data.map(row => {
499
- return columns ? columns.map(col => formatPDFCell(row[col.key])) : Object.values(row).map(cell => formatPDFCell(cell));
500
- });
501
-
502
- autoTable(doc, {
503
- head: [headers],
504
- body: rows,
505
- startY: currentY + 5,
506
- styles: {
507
- fontSize: 8,
508
- cellPadding: 2
509
- },
510
- headStyles: {
511
- fillColor: [66, 139, 202],
512
- textColor: 255,
513
- fontStyle: "bold"
514
- },
515
- alternateRowStyles: {
516
- fillColor: [245, 245, 245]
517
- },
518
- margin: { top: currentY + 5, left: 10, right: 10 }
519
- });
520
-
521
- doc.save(`${filename}.pdf`);
522
- } catch (error) {
523
- console.error("Error exporting PDF:", error);
524
- }
525
- }
526
-
527
- export function exportToExcel(data: any[], filename: string, columns?: { key: string; label: string }[], sheetName: string = "Sheet1", pltuName?: string, periode?: string) {
528
- if (!data || !data.length) {
529
- console.warn("No data to export");
530
- return;
531
- }
532
-
533
- try {
534
- let exportData: any[];
535
- let headerRowsCount = 0;
536
-
537
- // Prepare title and subtitle rows
538
- const titleRows: any[] = [];
539
-
540
- if (pltuName) {
541
- titleRows.push({ A: pltuName });
542
- headerRowsCount++;
543
- }
544
-
545
- if (periode) {
546
- titleRows.push({ A: periode });
547
- headerRowsCount++;
548
- }
549
-
550
- // Add empty row if we have title/subtitle
551
- if (headerRowsCount > 0) {
552
- titleRows.push({});
553
- headerRowsCount++;
554
- }
555
-
556
- if (columns) {
557
- const headers = columns.reduce((acc, col) => {
558
- acc[col.key] = col.label;
559
- return acc;
560
- }, {} as any);
561
-
562
- exportData = [
563
- ...titleRows,
564
- headers,
565
- ...data.map(row => {
566
- return columns.reduce((acc, col) => {
567
- acc[col.key] = formatExcelCell(row[col.key]);
568
- return acc;
569
- }, {} as any);
570
- })
571
- ];
572
- } else {
573
- exportData = [
574
- ...titleRows,
575
- ...data.map(row => {
576
- return Object.keys(row).reduce((acc, key) => {
577
- acc[key] = formatExcelCell(row[key]);
578
- return acc;
579
- }, {} as any);
580
- })
581
- ];
582
- }
583
-
584
- const ws = XLSX.utils.json_to_sheet(exportData, { skipHeader: !!columns });
585
-
586
- // Style the title and subtitle rows
587
- if (pltuName && ws['A1']) {
588
- ws['A1'].s = {
589
- font: { bold: true, sz: 16 },
590
- alignment: { horizontal: 'left' }
591
- };
592
- }
593
-
594
- if (periode && ws['A2']) {
595
- ws['A2'].s = {
596
- font: { sz: 12 },
597
- alignment: { horizontal: 'left' }
598
- };
599
- }
600
-
601
- const wb = XLSX.utils.book_new();
602
- XLSX.utils.book_append_sheet(wb, ws, sheetName);
603
-
604
- const excelBuffer = XLSX.write(wb, { bookType: "xlsx", type: "array" });
605
- const blob = new Blob([excelBuffer], {
606
- type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
607
- });
608
-
609
- saveAs(blob, `${filename}.xlsx`);
610
- } catch (error) {
611
- console.error("Error exporting Excel:", error);
612
- }
613
- }
614
-
615
- function formatPDFCell(value: any): string {
616
- if (value === null || value === undefined) {
617
- return "";
618
- }
619
- return String(value);
620
- }
621
-
622
- function formatExcelCell(value: any): any {
623
- if (value === null || value === undefined) {
624
- return "";
625
- }
626
-
627
- if (typeof value === "string" && /^\d{4}-\d{2}-\d{2}/.test(value)) {
628
- return new Date(value);
629
- }
630
-
631
- return value;
632
- }
633
-
634
- export function convertToUtf8(inputString: string) {
635
- const encoder = new TextEncoder();
636
- const utf8Bytes = encoder.encode(inputString);
637
-
638
- const hexString = Array.from(utf8Bytes)
639
- .map(byte => byte.toString(16).padStart(2, "0"))
640
- .join("");
641
-
642
- return `%${hexString}`;
643
- }