@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,707 +0,0 @@
1
- <script setup lang="ts">
2
- import { ref, onMounted, watch, computed } from "vue";
3
- import {
4
- Table,
5
- TableBody,
6
- TableCell,
7
- TableHead,
8
- TableHeader,
9
- TableRow,
10
- } from "../../components/ui/table";
11
- import { Skeleton } from "../../components/ui/skeleton";
12
- import LoadingIndicator from "../../components/loadings/LoadingIndicator.vue";
13
- import {
14
- LucideArrowDownWideNarrow,
15
- LucideArrowUpDown,
16
- LucideArrowUpNarrowWide,
17
- LucideDatabase,
18
- LucideOctagonAlert,
19
- } from "lucide-vue-next";
20
- import BtnPrimary from "../../components/button/BtnPrimary.vue";
21
- import { cn } from "../../lib/utils";
22
- import { useRoute } from "vue-router";
23
- import type { ColumnRef } from "../../vueform/config/types";
24
-
25
- export interface DashboardColumnRef
26
- extends Omit<ColumnRef, "cellRender" | "textAlign"> {
27
- sticky?: boolean; // New property to mark columns as sticky
28
- textAlign?: "right" | "left" | "center";
29
- cellRender?: (index: number, row: any) => string;
30
- parentHeader?: string; // Parent header for grouped columns
31
- }
32
-
33
- interface Props {
34
- data: any[];
35
- columns: DashboardColumnRef[];
36
- loading?: boolean;
37
- loadingType?: "skeleton" | "loader";
38
- error?: string | null;
39
- showCheckboxItem?: boolean;
40
- stickyOffset?: number; // Offset for sticky positioning
41
- groupBy?: string; // New: key to group by (e.g., 'pltu')
42
- }
43
-
44
- const route = useRoute();
45
- const props = withDefaults(defineProps<Props>(), {
46
- loading: false,
47
- loadingType: "loader",
48
- error: null,
49
- showCheckboxItem: false,
50
- stickyOffset: 0,
51
- });
52
-
53
- const emits = defineEmits(["getData", "openDetail", "editItem", "rowClick"]);
54
- const selectedId = defineModel("selectedId");
55
- const sortBy = defineModel<any>("sortBy");
56
-
57
- // Compute sticky and scrollable columns
58
- const stickyColumns = computed<DashboardColumnRef[]>(() =>
59
- props.columns.filter((col) => col.visible && col.sticky)
60
- );
61
-
62
- const scrollableColumns = computed<DashboardColumnRef[]>(() =>
63
- props.columns.filter((col) => col.visible && !col.sticky)
64
- );
65
-
66
- // Group scrollable columns by parent header
67
- const groupedScrollableColumns = computed(() => {
68
- const groups: { [key: string]: DashboardColumnRef[] } = {};
69
- const ungrouped: DashboardColumnRef[] = [];
70
-
71
- scrollableColumns.value.forEach((col) => {
72
- if (col.parentHeader) {
73
- if (!groups[col.parentHeader]) {
74
- groups[col.parentHeader] = [];
75
- }
76
- groups[col.parentHeader].push(col);
77
- } else {
78
- ungrouped.push(col);
79
- }
80
- });
81
-
82
- return { groups, ungrouped };
83
- });
84
-
85
- // Calculate sticky positioning for each sticky column
86
- const getStickyLeft = (index: number) => {
87
- let offset = props.stickyOffset;
88
- for (let i = 0; i < index; i++) {
89
- offset += stickyColumns.value[i].size || 150; // Default width 150px
90
- }
91
- return `${offset}px`;
92
- };
93
-
94
- function setSortBy(key?: string) {
95
- if (!key) return;
96
- if (sortBy.value && sortBy.value.key === key) {
97
- const by = sortBy.value.by === "asc" ? "desc" : "asc";
98
- sortBy.value = { key, by };
99
- } else {
100
- sortBy.value = { key, by: "asc" };
101
- }
102
- }
103
-
104
- function handleRowClick(row: any, index: number) {
105
- selectedId.value = row.id;
106
- emits("rowClick", row, index);
107
- }
108
-
109
- /**
110
- * Handle edit from query parameter
111
- */
112
- function handleEditQueryParam() {
113
- const editId = route.query.edit;
114
- if (editId && props.data.length > 0) {
115
- const itemToEdit = props.data.find(
116
- (item: any) =>
117
- item.id === editId ||
118
- (typeof item.id === "object" && item.id.toString() === editId)
119
- );
120
-
121
- if (itemToEdit) {
122
- const itemIndex = props.data.findIndex(
123
- (item: any) =>
124
- item.id === editId ||
125
- (typeof item.id === "object" && item.id.toString() === editId)
126
- );
127
-
128
- if (itemIndex !== -1) {
129
- emits("editItem", itemIndex, itemToEdit);
130
- selectedId.value = itemToEdit.id;
131
- }
132
- }
133
- }
134
- }
135
-
136
- watch(
137
- () => props.data,
138
- () => {
139
- if (route.query.edit && props.data.length > 0) {
140
- handleEditQueryParam();
141
- }
142
- },
143
- { deep: true }
144
- );
145
-
146
- onMounted(() => {
147
- if (route.query.edit) {
148
- if (props.data.length > 0) {
149
- handleEditQueryParam();
150
- }
151
- }
152
- });
153
- </script>
154
-
155
- <template>
156
- <div class="relative">
157
- <div class="overflow-x-auto">
158
- <Table
159
- class="bg-white border-y dark:bg-slate-800 dark:border-y-slate-700 relative"
160
- >
161
- <TableHeader>
162
- <!-- First Header Row: Parent Headers -->
163
- <TableRow class="dark:border-slate-700">
164
- <!-- Sticky Headers (span both rows) -->
165
- <TableHead
166
- v-for="(cell, index) in stickyColumns"
167
- :key="`sticky-parent-${cell.key}`"
168
- :rowspan="2"
169
- :class="
170
- cn(
171
- 'bg-slate-100 pl-4 2xl:pl-6 pr-2.5 2xl:pr-3.5 dark:bg-slate-900 text-[13px] 2xl:text-sm sticky z-10',
172
- cell.headerClass
173
- )
174
- "
175
- :style="{
176
- width: cell.size ? `${cell.size}px` : '150px',
177
- left: getStickyLeft(index),
178
- minWidth: cell.size ? `${cell.size}px` : '150px',
179
- }"
180
- >
181
- <div
182
- class="flex items-center rounded-md px-2 py-1.5 -my-1.5 -mx-2"
183
- :class="{
184
- 'transition hover:bg-slate-200 cursor-pointer': cell.sortKey,
185
- 'justify-end': cell.textAlign === 'right',
186
- 'justify-center': cell.textAlign === 'center',
187
- }"
188
- v-on:click="setSortBy(cell.sortKey)"
189
- >
190
- {{ cell.header }}
191
- <div class="ml-2 flex-none" v-if="cell.sortKey">
192
- <LucideArrowDownWideNarrow
193
- :size="18"
194
- v-if="
195
- sortBy &&
196
- sortBy.key === cell.sortKey &&
197
- sortBy.by === 'desc'
198
- "
199
- />
200
- <LucideArrowUpNarrowWide
201
- :size="18"
202
- v-else-if="
203
- sortBy &&
204
- sortBy.key === cell.sortKey &&
205
- sortBy.by === 'asc'
206
- "
207
- />
208
- <LucideArrowUpDown :size="18" class="opacity-40" v-else />
209
- </div>
210
- </div>
211
- </TableHead>
212
-
213
- <!-- Parent Headers for Grouped Columns -->
214
- <TableHead
215
- v-for="(parentName, groupKey) in groupedScrollableColumns.groups"
216
- :key="`parent-${groupKey}`"
217
- :colspan="parentName.length"
218
- :class="
219
- cn(
220
- 'bg-slate-200 text-center text-[13px] 2xl:text-sm font-semibold border-b border-r-2 border-slate-300 dark:bg-slate-800 dark:border-slate-600'
221
- )
222
- "
223
- >
224
- {{ groupKey }}
225
- </TableHead>
226
-
227
- <!-- Ungrouped Headers (span both rows) -->
228
- <TableHead
229
- v-for="cell in groupedScrollableColumns.ungrouped"
230
- :key="`ungrouped-parent-${cell.key}`"
231
- :rowspan="2"
232
- :class="
233
- cn(
234
- 'bg-slate-100 pl-4 2xl:pl-6 pr-2.5 2xl:pr-3.5 dark:bg-slate-900 text-[13px] 2xl:text-sm',
235
- cell.headerClass
236
- )
237
- "
238
- :style="{
239
- width: cell.size ? `${cell.size}px` : 'auto',
240
- minWidth: cell.size ? `${cell.size}px` : '100px',
241
- }"
242
- >
243
- <div
244
- class="flex items-center rounded-md px-2 py-1.5 -my-1.5 -mx-2"
245
- :class="{
246
- 'transition hover:bg-slate-200 cursor-pointer': cell.sortKey,
247
- 'justify-end': cell.textAlign === 'right',
248
- 'justify-center': cell.textAlign === 'center',
249
- }"
250
- v-on:click="setSortBy(cell.sortKey)"
251
- >
252
- {{ cell.header }}
253
- <div class="ml-2 flex-none" v-if="cell.sortKey">
254
- <LucideArrowDownWideNarrow
255
- :size="18"
256
- v-if="
257
- sortBy &&
258
- sortBy.key === cell.sortKey &&
259
- sortBy.by === 'desc'
260
- "
261
- />
262
- <LucideArrowUpNarrowWide
263
- :size="18"
264
- v-else-if="
265
- sortBy &&
266
- sortBy.key === cell.sortKey &&
267
- sortBy.by === 'asc'
268
- "
269
- />
270
- <LucideArrowUpDown :size="18" class="opacity-40" v-else />
271
- </div>
272
- </div>
273
- </TableHead>
274
- </TableRow>
275
-
276
- <!-- Second Header Row: Child Headers -->
277
- <TableRow class="dark:border-slate-700">
278
- <!-- Child Headers for Grouped Columns -->
279
- <template
280
- v-for="(parentName, groupKey) in groupedScrollableColumns.groups"
281
- :key="`group-${groupKey}`"
282
- >
283
- <TableHead
284
- v-for="(cell, cellIndex) in parentName"
285
- :key="`child-${cell.key}`"
286
- :class="
287
- cn(
288
- 'bg-slate-100 pl-4 2xl:pl-6 pr-2.5 2xl:pr-3.5 dark:bg-slate-900 text-[13px] 2xl:text-sm',
289
- cell.headerClass,
290
- {
291
- 'border-r-2 border-r-slate-300':
292
- cellIndex === parentName.length - 1,
293
- }
294
- )
295
- "
296
- :style="{
297
- width: cell.size ? `${cell.size}px` : 'auto',
298
- minWidth: cell.size ? `${cell.size}px` : '100px',
299
- }"
300
- >
301
- <div
302
- class="flex items-center rounded-md px-2 py-1.5 -my-1.5 -mx-2"
303
- :class="{
304
- 'transition hover:bg-slate-200 cursor-pointer':
305
- cell.sortKey,
306
- 'justify-end': cell.textAlign === 'right',
307
- 'justify-center': cell.textAlign === 'center',
308
- }"
309
- v-on:click="setSortBy(cell.sortKey)"
310
- >
311
- {{ cell.header }}
312
- <div class="ml-2 flex-none" v-if="cell.sortKey">
313
- <LucideArrowDownWideNarrow
314
- :size="18"
315
- v-if="
316
- sortBy &&
317
- sortBy.key === cell.sortKey &&
318
- sortBy.by === 'desc'
319
- "
320
- />
321
- <LucideArrowUpNarrowWide
322
- :size="18"
323
- v-else-if="
324
- sortBy &&
325
- sortBy.key === cell.sortKey &&
326
- sortBy.by === 'asc'
327
- "
328
- />
329
- <LucideArrowUpDown :size="18" class="opacity-40" v-else />
330
- </div>
331
- </div>
332
- </TableHead>
333
- </template>
334
- </TableRow>
335
- </TableHeader>
336
-
337
- <TableBody v-if="error">
338
- <TableRow>
339
- <TableCell
340
- :colspan="stickyColumns.length + scrollableColumns.length"
341
- class="bg-red-50"
342
- >
343
- <div
344
- class="min-h-[400px] h-[60vh] flex items-center justify-center"
345
- >
346
- <div class="text-center w-full text-red-500">
347
- <LucideOctagonAlert
348
- :size="40"
349
- :stroke-width="1.5"
350
- class="mx-auto mb-3"
351
- />
352
- <div class="font-bold text-lg">Loading Data Error</div>
353
- <div class="text-sm mb-4">{{ error }}</div>
354
- <BtnPrimary
355
- class="py-0 h-9 rounded-full"
356
- v-on:click="emits('getData')"
357
- >Coba Lagi</BtnPrimary
358
- >
359
- </div>
360
- </div>
361
- </TableCell>
362
- </TableRow>
363
- </TableBody>
364
-
365
- <TableBody v-else-if="props.loading">
366
- <template v-if="props.loadingType === 'skeleton'">
367
- <TableRow
368
- v-for="i in 25"
369
- :key="i"
370
- class="border-slate-100 dark:border-slate-700"
371
- >
372
- <TableCell
373
- :colspan="stickyColumns.length + scrollableColumns.length"
374
- class="px-4 2xl:px-6 py-3 bg-white dark:bg-slate-800"
375
- >
376
- <div class="flex gap-2">
377
- <Skeleton class="h-6 w-6 rounded-s"></Skeleton>
378
- <Skeleton class="h-6 rounded-s w-full"></Skeleton>
379
- </div>
380
- </TableCell>
381
- </TableRow>
382
- </template>
383
- <TableRow v-else>
384
- <TableCell
385
- :colspan="stickyColumns.length + scrollableColumns.length"
386
- class="bg-slate-50 dark:bg-slate-900"
387
- >
388
- <div
389
- class="min-h-[400px] h-[60vh] flex items-center justify-center"
390
- >
391
- <div class="text-center">
392
- <LoadingIndicator
393
- class="mx-auto mb-4"
394
- ></LoadingIndicator>
395
- <p class="text-sm text-gray-500">Memuat data...</p>
396
- </div>
397
- </div>
398
- </TableCell>
399
- </TableRow>
400
- </TableBody>
401
-
402
- <!-- Grouped Table Body -->
403
- <TableBody v-else-if="props.groupBy && data.length">
404
- <template
405
- v-for="(group, groupIdx) in data"
406
- :key="group[props.groupBy]"
407
- >
408
- <!-- Parent Row -->
409
- <TableRow class="bg-blue-50 font-bold sticky top-0 z-10">
410
- <TableCell
411
- :colspan="stickyColumns.length + scrollableColumns.length"
412
- >
413
- <div class="flex items-center gap-4">
414
- <span class="text-blue-700">{{ group[props.groupBy] }}</span>
415
- <span v-if="group.kapasitas" class="text-xs text-gray-500">{{
416
- group.kapasitas
417
- }}</span>
418
- </div>
419
- </TableCell>
420
- </TableRow>
421
- <!-- Child Rows -->
422
- <TableRow
423
- v-for="(row, i) in group.children"
424
- :key="row.id || i"
425
- class="border-gray-100 dark:border-slate-700 hover:bg-gray-50 transition-colors cursor-pointer"
426
- :class="{ '!bg-blue-100': selectedId === row.id }"
427
- v-on:click.stop="handleRowClick(row, i)"
428
- >
429
- <!-- Sticky Cells -->
430
- <TableCell
431
- v-for="(cell, index) in stickyColumns"
432
- :key="`sticky-cell-${cell.key}`"
433
- :class="
434
- cn(
435
- 'pl-4 2xl:pl-6 pr-2.5 2xl:pr-3.5 align-top text-[13px] 2xl:text-sm bg-white sticky z-5 border-r border-gray-200',
436
- { 'font-semibold': cell.bold }
437
- )
438
- "
439
- :style="{
440
- width: cell.size ? `${cell.size}px` : '150px',
441
- left: getStickyLeft(index),
442
- minWidth: cell.size ? `${cell.size}px` : '150px',
443
- }"
444
- >
445
- <div
446
- v-if="cell.cellRender"
447
- v-html="cell.cellRender(i, row)"
448
- :class="{
449
- 'text-right': cell.textAlign === 'right',
450
- 'text-center': cell.textAlign === 'center',
451
- }"
452
- ></div>
453
- <div
454
- v-else
455
- :class="{
456
- 'text-right': cell.textAlign === 'right',
457
- 'text-center': cell.textAlign === 'center',
458
- }"
459
- >
460
- {{ row[cell.key] }}
461
- </div>
462
- </TableCell>
463
- <!-- Scrollable Cells -->
464
- <TableCell
465
- v-for="(cell, cellIndex) in scrollableColumns"
466
- :key="`scroll-cell-${cell.key}`"
467
- :class="
468
- cn(
469
- 'pl-4 2xl:pl-6 pr-2.5 2xl:pr-3.5 align-top text-[13px] 2xl:text-sm',
470
- { 'font-semibold': cell.bold },
471
- {
472
- 'border-r-2 border-r-slate-200':
473
- cell.parentHeader &&
474
- cellIndex < scrollableColumns.length - 1 &&
475
- cell.parentHeader !==
476
- scrollableColumns[cellIndex + 1].parentHeader,
477
- }
478
- )
479
- "
480
- :style="{
481
- width: cell.size ? `${cell.size}px` : 'auto',
482
- minWidth: cell.size ? `${cell.size}px` : '100px',
483
- }"
484
- >
485
- <div
486
- v-if="cell.cellRender"
487
- v-html="cell.cellRender(i, row)"
488
- :class="{
489
- 'text-right': cell.textAlign === 'right',
490
- 'text-center': cell.textAlign === 'center',
491
- }"
492
- ></div>
493
- <div
494
- v-else
495
- :class="{
496
- 'text-right': cell.textAlign === 'right',
497
- 'text-center': cell.textAlign === 'center',
498
- }"
499
- >
500
- {{ row[cell.key] }}
501
- </div>
502
- </TableCell>
503
- </TableRow>
504
- <!-- Subtotal Row -->
505
- <TableRow class="bg-gray-100 font-bold">
506
- <TableCell
507
- :colspan="stickyColumns.length + scrollableColumns.length - 2"
508
- class="text-right text-gray-700"
509
- >Sub Total</TableCell
510
- >
511
- <TableCell class="text-center text-blue-700">{{
512
- group.subtotal?.rencana?.toLocaleString() || "-"
513
- }}</TableCell>
514
- <TableCell class="text-center text-blue-700">{{
515
- group.subtotal?.realisasi?.toLocaleString() || "-"
516
- }}</TableCell>
517
- </TableRow>
518
- </template>
519
- </TableBody>
520
-
521
- <!-- Flat Table Body (default) -->
522
- <TableBody v-else-if="data.length">
523
- <TableRow
524
- v-for="(row, i) in data"
525
- :key="i"
526
- class="border-gray-100 dark:border-slate-700 hover:bg-gray-50 transition-colors cursor-pointer"
527
- :class="{ '!bg-blue-100': selectedId === row.id }"
528
- v-on:click.stop="handleRowClick(row, i)"
529
- >
530
- <!-- Sticky Cells -->
531
- <TableCell
532
- v-for="(cell, index) in stickyColumns"
533
- :key="`sticky-cell-${cell.key}`"
534
- :class="
535
- cn(
536
- 'pl-4 2xl:pl-6 pr-2.5 2xl:pr-3.5 align-top text-[13px] 2xl:text-sm bg-white sticky z-5 border-r border-gray-200',
537
- { 'font-semibold': cell.bold }
538
- )
539
- "
540
- :style="{
541
- width: cell.size ? `${cell.size}px` : '150px',
542
- left: getStickyLeft(index),
543
- minWidth: cell.size ? `${cell.size}px` : '150px',
544
- }"
545
- >
546
- <div
547
- v-if="cell.cellRender"
548
- v-html="cell.cellRender(i, row)"
549
- :class="{
550
- 'text-right': cell.textAlign === 'right',
551
- 'text-center': cell.textAlign === 'center',
552
- }"
553
- ></div>
554
- <div
555
- v-else
556
- :class="{
557
- 'text-right': cell.textAlign === 'right',
558
- 'text-center': cell.textAlign === 'center',
559
- }"
560
- >
561
- {{ row[cell.key] }}
562
- </div>
563
- </TableCell>
564
-
565
- <!-- Scrollable Cells -->
566
- <TableCell
567
- v-for="(cell, cellIndex) in scrollableColumns"
568
- :key="`scroll-cell-${cell.key}`"
569
- :class="
570
- cn(
571
- 'pl-4 2xl:pl-6 pr-2.5 2xl:pr-3.5 align-top text-[13px] 2xl:text-sm',
572
- { 'font-semibold': cell.bold },
573
- {
574
- 'border-r-2 border-r-slate-200':
575
- cell.parentHeader &&
576
- cellIndex < scrollableColumns.length - 1 &&
577
- cell.parentHeader !==
578
- scrollableColumns[cellIndex + 1].parentHeader,
579
- }
580
- )
581
- "
582
- :style="{
583
- width: cell.size ? `${cell.size}px` : 'auto',
584
- minWidth: cell.size ? `${cell.size}px` : '100px',
585
- }"
586
- >
587
- <div
588
- v-if="cell.cellRender"
589
- v-html="cell.cellRender(i, row)"
590
- :class="{
591
- 'text-right': cell.textAlign === 'right',
592
- 'text-center': cell.textAlign === 'center',
593
- }"
594
- ></div>
595
- <div
596
- v-else
597
- :class="{
598
- 'text-right': cell.textAlign === 'right',
599
- 'text-center': cell.textAlign === 'center',
600
- }"
601
- >
602
- {{ row[cell.key] }}
603
- </div>
604
- </TableCell>
605
- </TableRow>
606
- </TableBody>
607
-
608
- <TableBody v-else>
609
- <TableRow>
610
- <TableCell
611
- :colspan="stickyColumns.length + scrollableColumns.length"
612
- class="bg-slate-50"
613
- >
614
- <div
615
- class="min-h-[400px] h-[60vh] flex items-center justify-center"
616
- >
617
- <div class="text-center w-full">
618
- <LucideDatabase
619
- :stroke-width="1.5"
620
- class="mx-auto mb-3 text-gray-500 size-[34px] 2xl:size-[40px]"
621
- />
622
- <div class="font-semibold 2xl:text-lg">Tidak Ada Data</div>
623
- <div class="text-gray-500 text-xs 2xl:text-sm">
624
- Maaf! Data Anda belum tersedia
625
- </div>
626
- </div>
627
- </div>
628
- </TableCell>
629
- </TableRow>
630
- </TableBody>
631
- </Table>
632
- </div>
633
- </div>
634
- </template>
635
-
636
- <style scoped>
637
- /* Ensure sticky columns have proper shadows and z-index hierarchy */
638
- .sticky {
639
- box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
640
- }
641
-
642
- /* Ensure table sticky elements respect leftbar z-index */
643
- .sticky.z-10 {
644
- z-index: 10;
645
- }
646
-
647
- .sticky.z-5 {
648
- z-index: 5;
649
- }
650
-
651
- /* Custom scrollbar */
652
- .overflow-x-auto::-webkit-scrollbar {
653
- height: 8px;
654
- }
655
-
656
- .overflow-x-auto::-webkit-scrollbar-track {
657
- background: #f1f5f9;
658
- }
659
-
660
- .overflow-x-auto::-webkit-scrollbar-thumb {
661
- background: #cbd5e1;
662
- border-radius: 4px;
663
- }
664
-
665
- .overflow-x-auto::-webkit-scrollbar-thumb:hover {
666
- background: #94a3b8;
667
- }
668
-
669
- /* Hover effect for sticky cells */
670
- tr:hover .sticky {
671
- background-color: #f9fafb;
672
- }
673
-
674
- /* Selected row styling for sticky cells */
675
- tr.bg-blue-100 .sticky {
676
- background-color: #dbeafe !important;
677
- }
678
-
679
- /* Enhanced styling for grouped headers */
680
- .bg-slate-200 {
681
- background-color: #e2e8f0;
682
- border-bottom: 2px solid #cbd5e1;
683
- }
684
-
685
- /* Ensure proper border styling for grouped columns */
686
- thead th {
687
- border-bottom: 1px solid #e2e8f0;
688
- }
689
-
690
- thead tr:first-child th {
691
- border-bottom: 1px solid #cbd5e1;
692
- }
693
-
694
- /* Dark mode adjustments for grouped headers */
695
- .dark .bg-slate-200 {
696
- background-color: #475569;
697
- border-bottom-color: #64748b;
698
- }
699
-
700
- .dark thead th {
701
- border-bottom-color: #475569;
702
- }
703
-
704
- .dark thead tr:first-child th {
705
- border-bottom-color: #64748b;
706
- }
707
- </style>