@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,332 +0,0 @@
1
- /**
2
- * App Configuration Composable
3
- * Provides reactive access to application configuration
4
- */
5
-
6
- import { ref, computed, watch } from 'vue'
7
- import { useAppConfig as useAppConfigCore, type AppConfig } from '../config/app.config'
8
- import { useMenuConfig } from '../config/menu.config'
9
- import { useThemeConfig } from '../config/theme.config'
10
- import { myAppConfig } from '../config/my-app.config'
11
-
12
- export const useAppConfig = () => {
13
- const { config, setConfig, getConfig, getConfigValue } = useAppConfigCore()
14
- const { setMenuConfig, getMenuConfig, getMenuItems, getMenuByOrgLevel, searchMenu } = useMenuConfig()
15
- const { setThemeConfig, getThemeConfig, getColor, generateCSSVariables } = useThemeConfig()
16
-
17
- // Make config reactive
18
- const reactiveConfig = ref(getConfig())
19
-
20
- // Check if config is loaded - config is considered loaded if it has meaningful data
21
- // Since we now use myAppConfig as default, config should always be available
22
- const isConfigLoaded = computed(() => {
23
- const currentConfig = getConfig()
24
- // Config is loaded if it has a name and it's not the base template name
25
- // Also check if branding exists (means config was properly initialized)
26
- return !!(
27
- currentConfig?.name &&
28
- currentConfig.name !== 'Vue Framework Template' &&
29
- currentConfig.branding?.companyName
30
- )
31
- })
32
-
33
- const configError = ref<string | null>(null)
34
-
35
- // Initialize configuration
36
- const initializeConfig = async (customConfig?: Partial<AppConfig>) => {
37
- try {
38
- // Use myAppConfig as default if no custom config provided
39
- const configToUse = customConfig || myAppConfig
40
-
41
- // Load configuration
42
- if (configToUse) {
43
- setConfig(configToUse)
44
- }
45
-
46
- // Load configuration from localStorage if available
47
- const savedConfig = localStorage.getItem('app.config')
48
- if (savedConfig) {
49
- const parsedConfig = JSON.parse(savedConfig)
50
- setConfig(parsedConfig)
51
- }
52
-
53
- // Load configuration from environment variables
54
- const currentConfig = getConfig()
55
- const envConfig: Partial<AppConfig> = {
56
- api: {
57
- baseUrl: import.meta.env.VITE_API_URL || currentConfig.api.baseUrl,
58
- endpoints: currentConfig.api.endpoints
59
- },
60
- branding: {
61
- logo: currentConfig.branding.logo,
62
- companyName: import.meta.env.VITE_COMPANY_NAME || currentConfig.branding.companyName,
63
- primaryColor: import.meta.env.VITE_PRIMARY_COLOR || currentConfig.branding.primaryColor
64
- }
65
- }
66
-
67
- setConfig(envConfig)
68
-
69
- // Get updated config after all changes
70
- const finalConfig = getConfig()
71
-
72
- // Initialize menu configuration
73
- setMenuConfig({
74
- items: finalConfig.ui.features.search ? getMenuItems() : [],
75
- searchEnabled: finalConfig.ui.features.search,
76
- historyEnabled: true,
77
- maxHistoryItems: 5,
78
- defaultOpenItems: ['dashboard']
79
- })
80
-
81
- // Initialize theme configuration
82
- setThemeConfig({
83
- colors: {
84
- primary: finalConfig.branding.primaryColor,
85
- primaryHover: finalConfig.branding.secondaryColor || finalConfig.branding.primaryColor,
86
- primaryActive: finalConfig.ui.theme.accent || '#e8f1fb',
87
- secondary: finalConfig.branding.secondaryColor,
88
- accent: finalConfig.ui.theme.accent,
89
- background: '#ffffff',
90
- surface: '#f8f9fa',
91
- text: '#4D5E80',
92
- textSecondary: '#6c757d',
93
- border: '#dee2e6',
94
- error: '#dc3545',
95
- warning: '#ffc107',
96
- success: '#28a745',
97
- info: '#17a2b8'
98
- },
99
- darkMode: {
100
- enabled: finalConfig.ui.theme.darkMode,
101
- colors: {
102
- background: '#0a0a0a',
103
- surface: '#111111',
104
- text: '#cccccc',
105
- textSecondary: '#999999',
106
- border: '#151515'
107
- }
108
- }
109
- })
110
-
111
- configError.value = null
112
-
113
- // Update reactive config
114
- reactiveConfig.value = getConfig()
115
- } catch (error) {
116
- configError.value = error instanceof Error ? error.message : 'Failed to load configuration'
117
- console.error('Configuration initialization failed:', error)
118
- }
119
- }
120
-
121
- // Save configuration to localStorage
122
- const saveConfig = () => {
123
- try {
124
- localStorage.setItem('app.config', JSON.stringify(getConfig()))
125
- } catch (error) {
126
- console.error('Failed to save configuration:', error)
127
- }
128
- }
129
-
130
- // Reset configuration to defaults
131
- const resetConfig = () => {
132
- localStorage.removeItem('app.config')
133
- initializeConfig()
134
- }
135
-
136
- // Computed properties for easy access with null checks
137
- const appName = computed(() => reactiveConfig.value?.name || 'Loading...')
138
- const logoAlt = computed(() => reactiveConfig.value?.branding?.logoAlt || 'Logo Alt')
139
- const appVersion = computed(() => reactiveConfig.value?.version || '1.0.0')
140
- const companyName = computed(() => reactiveConfig.value?.branding?.companyName || 'Loading...')
141
- const primaryColor = computed(() => reactiveConfig.value?.branding?.primaryColor || '#3B82F6')
142
- const logo = computed(() => reactiveConfig.value?.branding?.logo || '/img/brand/logo.svg')
143
- const loginBackgroundDay = computed(() => reactiveConfig.value?.branding?.loginBackgroundDay || '/src/assets/login-day.png')
144
- const loginBackgroundNight = computed(() => reactiveConfig.value?.branding?.loginBackgroundNight || '/src/assets/login-night.png')
145
-
146
- // API configuration
147
- const apiBaseUrl = computed(() => reactiveConfig.value?.api?.baseUrl || 'http://localhost:3000/api')
148
- const apiEndpoints = computed(() => reactiveConfig.value?.api?.endpoints || {
149
- auth: {
150
- login: '/auth/login',
151
- logout: '/auth/logout',
152
- refresh: '/auth/refresh',
153
- forgotPassword: '/auth/forgot-password',
154
- changePassword: '/auth/change-password',
155
- info: '/auth/info',
156
- status: '/auth/status',
157
- init: '/auth/init',
158
- captcha: '/auth/captcha'
159
- },
160
- notifications: {
161
- unreadCount: '/notifications/unread-count',
162
- list: '/notifications'
163
- },
164
- media: {
165
- upload: '/media/upload',
166
- delete: '/media'
167
- }
168
- })
169
-
170
- // Authentication configuration
171
- const authConfig = computed(() => reactiveConfig.value?.auth || {
172
- tokenKey: 'app.user.token',
173
- userKey: 'app.user.name',
174
- organizationKey: 'app.user.organization',
175
- defaultRedirect: '/',
176
- ssoEnabled: false,
177
- captchaEnabled: false,
178
- otpEnabled: false,
179
- passwordPolicy: {
180
- minLength: 6,
181
- requireUppercase: false,
182
- requireLowercase: false,
183
- requireNumbers: false,
184
- requireSpecialChars: false
185
- }
186
- })
187
- const tokenKey = computed(() => reactiveConfig.value?.auth?.tokenKey || 'app.user.token')
188
- const userKey = computed(() => reactiveConfig.value?.auth?.userKey || 'app.user.name')
189
- const organizationKey = computed(() => reactiveConfig.value?.auth?.organizationKey || 'app.user.organization')
190
-
191
- // Organization configuration
192
- const organizationLevels = computed(() => reactiveConfig.value?.organization?.levels || ['user', 'admin', 'superadmin'])
193
- const defaultOrgLevel = computed(() => reactiveConfig.value?.organization?.defaultLevel || 'user')
194
- const superAdminLevel = computed(() => reactiveConfig.value?.organization?.superAdminLevel || 'superadmin')
195
-
196
- // UI configuration
197
- const uiConfig = computed(() => reactiveConfig.value?.ui || {
198
- theme: {
199
- primary: '#3B82F6',
200
- secondary: '#1D4ED8',
201
- accent: '#EFF6FF',
202
- darkMode: false
203
- },
204
- layout: {
205
- sidebarWidth: 80,
206
- headerHeight: 40,
207
- tabHeight: 32
208
- },
209
- features: {
210
- search: true,
211
- notifications: false,
212
- darkMode: false,
213
- tabs: true,
214
- breadcrumbs: true
215
- }
216
- })
217
- const themeConfig = computed(() => reactiveConfig.value?.ui?.theme || {
218
- primary: '#3B82F6',
219
- secondary: '#1D4ED8',
220
- accent: '#EFF6FF',
221
- darkMode: false
222
- })
223
- const layoutConfig = computed(() => reactiveConfig.value?.ui?.layout || {
224
- sidebarWidth: 80,
225
- headerHeight: 40,
226
- tabHeight: 32
227
- })
228
- const features = computed(() => reactiveConfig.value?.ui?.features || {
229
- search: true,
230
- notifications: false,
231
- darkMode: false,
232
- tabs: true,
233
- breadcrumbs: true
234
- })
235
-
236
- // Localization
237
- const locale = computed(() => reactiveConfig.value?.i18n?.defaultLocale || 'en')
238
- const messages = computed(() => reactiveConfig.value?.i18n?.messages || {})
239
-
240
- // Features
241
- const enabledFeatures = computed(() => reactiveConfig.value?.features || {
242
- fileUpload: true,
243
- export: true,
244
- import: false,
245
- realTimeNotifications: false,
246
- websocket: false
247
- })
248
-
249
- // Watch for configuration changes and save to localStorage
250
- watch(
251
- () => getConfig(),
252
- (newConfig) => {
253
- if (isConfigLoaded.value) {
254
- saveConfig()
255
- reactiveConfig.value = newConfig
256
- }
257
- },
258
- { deep: true }
259
- )
260
-
261
- // Watch reactiveConfig to keep it in sync
262
- watch(
263
- () => getConfig(),
264
- (newConfig) => {
265
- reactiveConfig.value = newConfig
266
- },
267
- { immediate: true }
268
- )
269
-
270
- return {
271
- // State
272
- isConfigLoaded,
273
- configError,
274
-
275
- // Configuration
276
- config: computed(() => reactiveConfig.value),
277
- appName,
278
- appVersion,
279
- companyName,
280
- primaryColor,
281
- logo,
282
- logoAlt,
283
- loginBackgroundDay,
284
- loginBackgroundNight,
285
-
286
- // API
287
- apiBaseUrl,
288
- apiEndpoints,
289
-
290
- // Authentication
291
- authConfig,
292
- tokenKey,
293
- userKey,
294
- organizationKey,
295
-
296
- // Organization
297
- organizationLevels,
298
- defaultOrgLevel,
299
- superAdminLevel,
300
-
301
- // UI
302
- uiConfig,
303
- themeConfig,
304
- layoutConfig,
305
- features,
306
-
307
- // Localization
308
- locale,
309
- messages,
310
-
311
- // Features
312
- enabledFeatures,
313
-
314
- // Methods
315
- initializeConfig,
316
- saveConfig,
317
- resetConfig,
318
- setConfig,
319
- getConfigValue,
320
-
321
- // Menu
322
- getMenuConfig,
323
- getMenuItems,
324
- getMenuByOrgLevel,
325
- searchMenu,
326
-
327
- // Theme
328
- getThemeConfig,
329
- getColor,
330
- generateCSSVariables
331
- }
332
- }
@@ -1,71 +0,0 @@
1
- // composables/useDarkMode.ts
2
- import { ref, onMounted, watch } from 'vue'
3
-
4
- const isDark = ref<boolean>(false)
5
- const isInitialized = ref<boolean>(false)
6
- const followSystem = ref<boolean>(true)
7
-
8
- export function useDarkMode() {
9
- const updateDarkMode = (dark: boolean) => {
10
- if (dark) {
11
- document.documentElement.classList.add('dark')
12
- } else {
13
- document.documentElement.classList.remove('dark')
14
- }
15
- }
16
-
17
- const toggleDarkMode = () => {
18
- followSystem.value = false
19
- isDark.value = !isDark.value
20
- localStorage.setItem('darkMode', JSON.stringify(isDark.value))
21
- localStorage.setItem('followSystem', 'false')
22
- }
23
-
24
- const resetToSystem = () => {
25
- followSystem.value = true
26
- localStorage.removeItem('darkMode')
27
- localStorage.setItem('followSystem', 'true')
28
-
29
- isDark.value = window.matchMedia('(prefers-color-scheme: dark)').matches
30
- }
31
-
32
- const initializeDarkMode = () => {
33
- if (isInitialized.value) return
34
-
35
- const savedFollowSystem = localStorage.getItem('followSystem')
36
- const savedDarkMode = localStorage.getItem('darkMode')
37
-
38
- if (savedFollowSystem === 'false' && savedDarkMode !== null) {
39
- followSystem.value = false
40
- isDark.value = JSON.parse(savedDarkMode)
41
- } else {
42
- followSystem.value = true
43
- isDark.value = window.matchMedia('(prefers-color-scheme: dark)').matches
44
- }
45
-
46
- isInitialized.value = true
47
- }
48
-
49
- watch(isDark, updateDarkMode, { immediate: true })
50
-
51
- onMounted(() => {
52
- const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
53
- const handleChange = (e: MediaQueryListEvent) => {
54
- if (followSystem.value) {
55
- isDark.value = e.matches
56
- }
57
- }
58
-
59
- mediaQuery.addEventListener('change', handleChange)
60
-
61
- return () => mediaQuery.removeEventListener('change', handleChange)
62
- })
63
-
64
- return {
65
- isDark,
66
- followSystem,
67
- toggleDarkMode,
68
- resetToSystem,
69
- initializeDarkMode
70
- }
71
- }
@@ -1,318 +0,0 @@
1
- /**
2
- * Application Configuration
3
- * Centralized configuration for the framework template
4
- */
5
-
6
- import { myAppConfig } from './my-app.config'
7
-
8
- export interface AppConfig {
9
- // Application Identity
10
- name: string
11
- version: string
12
- description?: string
13
-
14
- // Branding
15
- branding: {
16
- logo: string
17
- logoAlt?: string
18
- favicon?: string
19
- primaryColor: string
20
- secondaryColor?: string
21
- companyName: string
22
- companyUrl?: string
23
- loginBackgroundDay?: string
24
- loginBackgroundNight?: string
25
- }
26
-
27
- // API Configuration
28
- api: {
29
- baseUrl: string
30
- timeout?: number
31
- retryAttempts?: number
32
- endpoints: {
33
- auth: {
34
- login: string
35
- logout: string
36
- refresh: string
37
- forgotPassword: string
38
- changePassword: string
39
- info: string
40
- status: string
41
- init: string
42
- captcha: string
43
- }
44
- notifications: {
45
- unreadCount: string
46
- list: string
47
- }
48
- media: {
49
- upload: string
50
- delete: string
51
- }
52
- }
53
- }
54
-
55
- // Authentication
56
- auth: {
57
- tokenKey: string
58
- userKey: string
59
- organizationKey: string
60
- defaultRedirect: string
61
- ssoEnabled: boolean
62
- ssoUrl?: string
63
- captchaEnabled: boolean
64
- otpEnabled: boolean
65
- passwordPolicy: {
66
- minLength: number
67
- requireUppercase: boolean
68
- requireLowercase: boolean
69
- requireNumbers: boolean
70
- requireSpecialChars: boolean
71
- }
72
- }
73
-
74
- // Organization & Permissions
75
- organization: {
76
- levels: string[]
77
- defaultLevel?: string
78
- superAdminLevel?: string
79
- }
80
-
81
- // UI Configuration
82
- ui: {
83
- theme: {
84
- primary: string
85
- secondary?: string
86
- accent?: string
87
- darkMode: boolean
88
- }
89
- layout: {
90
- sidebarWidth: number
91
- headerHeight: number
92
- tabHeight: number
93
- }
94
- features: {
95
- search: boolean
96
- notifications: boolean
97
- darkMode: boolean
98
- tabs: boolean
99
- breadcrumbs: boolean
100
- }
101
- }
102
-
103
- // Localization
104
- i18n: {
105
- defaultLocale: string
106
- fallbackLocale: string
107
- messages: Record<string, any>
108
- }
109
-
110
- // Features
111
- features: {
112
- fileUpload: boolean
113
- export: boolean
114
- import: boolean
115
- realTimeNotifications: boolean
116
- websocket: boolean
117
- }
118
- }
119
-
120
- // Base default configuration (fallback values)
121
- const baseDefaultConfig: AppConfig = {
122
- name: 'Vue Framework Template',
123
- version: '1.0.0',
124
- description: 'A configurable Vue.js framework template',
125
-
126
- branding: {
127
- logo: '/img/brand/logo.svg',
128
- logoAlt: 'Application Logo',
129
- favicon: '/favicon.ico',
130
- primaryColor: '#2671D9',
131
- secondaryColor: '#297df0',
132
- companyName: 'Your Company',
133
- companyUrl: 'https://yourcompany.com',
134
- loginBackgroundDay: '/src/assets/login-day.png',
135
- loginBackgroundNight: '/src/assets/login-night.png'
136
- },
137
-
138
- api: {
139
- baseUrl: import.meta.env.VITE_API_URL || 'http://localhost:3000/api',
140
- timeout: 30000,
141
- retryAttempts: 3,
142
- endpoints: {
143
- auth: {
144
- login: '/auth/login',
145
- logout: '/auth/logout',
146
- refresh: '/user/refresh-token',
147
- forgotPassword: '/auth/forgotpassword',
148
- changePassword: '/auth/changepassword',
149
- info: '/auth/info',
150
- status: '/auth/status',
151
- init: '/auth/login/init',
152
- captcha: '/auth/captcha/init'
153
- },
154
- notifications: {
155
- unreadCount: '/notif/unreadCount',
156
- list: '/notif/list'
157
- },
158
- media: {
159
- upload: '/media',
160
- delete: '/media'
161
- }
162
- }
163
- },
164
-
165
- auth: {
166
- tokenKey: 'app.user.token',
167
- userKey: 'app.user.name',
168
- organizationKey: 'app.user.organization',
169
- defaultRedirect: '/',
170
- ssoEnabled: false,
171
- captchaEnabled: true,
172
- otpEnabled: true,
173
- passwordPolicy: {
174
- minLength: 8,
175
- requireUppercase: true,
176
- requireLowercase: true,
177
- requireNumbers: true,
178
- requireSpecialChars: false
179
- }
180
- },
181
-
182
- organization: {
183
- levels: ['user', 'admin', 'superadmin'],
184
- defaultLevel: 'user',
185
- superAdminLevel: 'superadmin'
186
- },
187
-
188
- ui: {
189
- theme: {
190
- primary: '#2671D9',
191
- secondary: '#297df0',
192
- accent: '#e8f1fb',
193
- darkMode: true
194
- },
195
- layout: {
196
- sidebarWidth: 80,
197
- headerHeight: 40,
198
- tabHeight: 32
199
- },
200
- features: {
201
- search: true,
202
- notifications: true,
203
- darkMode: true,
204
- tabs: true,
205
- breadcrumbs: true
206
- }
207
- },
208
-
209
- i18n: {
210
- defaultLocale: 'en',
211
- fallbackLocale: 'en',
212
- messages: {
213
- en: {
214
- common: {
215
- search: 'Search...',
216
- loading: 'Loading...',
217
- error: 'An error occurred',
218
- success: 'Success',
219
- cancel: 'Cancel',
220
- confirm: 'Confirm',
221
- save: 'Save',
222
- delete: 'Delete',
223
- edit: 'Edit',
224
- view: 'View'
225
- },
226
- auth: {
227
- login: 'Login',
228
- logout: 'Logout',
229
- email: 'Email',
230
- password: 'Password',
231
- forgotPassword: 'Forgot Password?',
232
- changePassword: 'Change Password',
233
- loginSuccess: 'Login successful',
234
- loginError: 'Login failed'
235
- }
236
- }
237
- }
238
- },
239
-
240
- features: {
241
- fileUpload: true,
242
- export: true,
243
- import: true,
244
- realTimeNotifications: false,
245
- websocket: false
246
- }
247
- }
248
-
249
- // Deep merge helper function
250
- function deepMerge(target: AppConfig, source: Partial<AppConfig>): AppConfig {
251
- const output = { ...target } as any
252
-
253
- if (isObject(target) && isObject(source)) {
254
- Object.keys(source).forEach(key => {
255
- const sourceValue = (source as any)[key]
256
- const targetValue = (target as any)[key]
257
-
258
- if (isObject(sourceValue) && isObject(targetValue) && !Array.isArray(sourceValue) && !Array.isArray(targetValue)) {
259
- output[key] = deepMergeObject(targetValue, sourceValue)
260
- } else if (sourceValue !== undefined) {
261
- output[key] = sourceValue
262
- }
263
- })
264
- }
265
-
266
- return output as AppConfig
267
- }
268
-
269
- // Helper for merging nested objects (not full AppConfig)
270
- function deepMergeObject(target: Record<string, any>, source: Record<string, any>): Record<string, any> {
271
- const output = { ...target }
272
-
273
- Object.keys(source).forEach(key => {
274
- const sourceValue = source[key]
275
- const targetValue = target[key]
276
-
277
- if (isObject(sourceValue) && isObject(targetValue) && !Array.isArray(sourceValue) && !Array.isArray(targetValue)) {
278
- output[key] = deepMergeObject(targetValue, sourceValue)
279
- } else if (sourceValue !== undefined) {
280
- output[key] = sourceValue
281
- }
282
- })
283
-
284
- return output
285
- }
286
-
287
- function isObject(item: any): item is Record<string, any> {
288
- return item && typeof item === 'object' && !Array.isArray(item)
289
- }
290
-
291
- // Default configuration - merges myAppConfig with base defaults
292
- export const defaultConfig: AppConfig = deepMerge(baseDefaultConfig, myAppConfig)
293
-
294
- // Configuration instance
295
- let appConfig: AppConfig = { ...defaultConfig }
296
-
297
- export const useAppConfig = () => {
298
- const setConfig = (config: Partial<AppConfig>) => {
299
- appConfig = { ...appConfig, ...config }
300
- }
301
-
302
- const getConfig = (): AppConfig => {
303
- return appConfig
304
- }
305
-
306
- const getConfigValue = <T>(path: string): T => {
307
- return path.split('.').reduce((obj: any, key) => obj?.[key], appConfig) as T
308
- }
309
-
310
- return {
311
- config: appConfig,
312
- setConfig,
313
- getConfig,
314
- getConfigValue
315
- }
316
- }
317
-
318
- export default appConfig