@dasidev/dasi-ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +346 -0
- package/bin/dasi-cli.cjs +184 -0
- package/dist/date-selector-test-BlukYeWl.js +91 -0
- package/dist/favicon.ico +0 -0
- package/dist/html2canvas.esm-CKxSAI8P.js +4886 -0
- package/dist/img/brand/ic_pln.svg +12 -0
- package/dist/img/brand/mapp_power_logo.svg +21 -0
- package/dist/img/common/pltu_ulumbu_flores_ntt.jpeg +0 -0
- package/dist/index-BQSA2aPs.js +126556 -0
- package/dist/index.es-DQWt-PZn.js +5769 -0
- package/dist/index.es.js +11 -0
- package/dist/index.umd.js +8564 -0
- package/dist/informasi-gudang-BmoEy2RL.js +164 -0
- package/dist/informasi-gudang-DXfS46Nh.js +50 -0
- package/dist/purify.es-C-9oolON.js +546 -0
- package/dist/scripts/pdf.worker.min.js +29 -0
- package/dist/scripts/pdf.worker.min.mjs +29 -0
- package/dist/scripts/pdf.worker.mjs +57722 -0
- package/dist/scripts/pdf.worker.mjs.map +1 -0
- package/dist/style.css +1 -0
- package/dist/test-schema-JFghGc0_.js +8 -0
- package/dist/test-schema-uusFsJe4.js +438 -0
- package/dist/types-l0sNRNKZ.js +1 -0
- package/package.json +178 -0
- package/src/App.vue +18 -0
- package/src/__tests__/index.test.ts +9 -0
- package/src/api/api.ts +117 -0
- package/src/assets/app-selector.svg +3 -0
- package/src/assets/dasi.png +0 -0
- package/src/assets/foto_ss.svg +21 -0
- package/src/assets/icons/circle-blue.svg +4 -0
- package/src/assets/icons/circle-gray.svg +15 -0
- package/src/assets/icons/circle-green.svg +4 -0
- package/src/assets/icons/circle-orange.svg +4 -0
- package/src/assets/icons/circle-purple.svg +4 -0
- package/src/assets/icons/circle-red.svg +15 -0
- package/src/assets/icons/harbor.svg +12 -0
- package/src/assets/icons/ic-box-red.svg +8 -0
- package/src/assets/icons/ic-chevron-right.svg +1 -0
- package/src/assets/icons/ic-loading.svg +9 -0
- package/src/assets/icons/ic-reset.svg +16 -0
- package/src/assets/icons/ic-sailing.svg +5 -0
- package/src/assets/icons/icon-app-selector.svg +3 -0
- package/src/assets/icons/icon-browser-check.svg +4 -0
- package/src/assets/icons/icon-calendar.svg +3 -0
- package/src/assets/icons/icon-chart-bar.svg +3 -0
- package/src/assets/icons/icon-chart-doc.svg +16 -0
- package/src/assets/icons/icon-chart-line.svg +10 -0
- package/src/assets/icons/icon-chart-mix.svg +15 -0
- package/src/assets/icons/icon-chart-pie.svg +11 -0
- package/src/assets/icons/icon-continue.svg +12 -0
- package/src/assets/icons/icon-dashboard-2.svg +17 -0
- package/src/assets/icons/icon-dashboard.svg +3 -0
- package/src/assets/icons/icon-data-kelistrikan.svg +19 -0
- package/src/assets/icons/icon-data-sentral.svg +11 -0
- package/src/assets/icons/icon-database.svg +5 -0
- package/src/assets/icons/icon-desktop.svg +3 -0
- package/src/assets/icons/icon-download.svg +13 -0
- package/src/assets/icons/icon-energi-primer.svg +12 -0
- package/src/assets/icons/icon-faba-apk2.svg +11 -0
- package/src/assets/icons/icon-faba.svg +11 -0
- package/src/assets/icons/icon-factory.svg +14 -0
- package/src/assets/icons/icon-globe-doc.svg +19 -0
- package/src/assets/icons/icon-ikk.svg +10 -0
- package/src/assets/icons/icon-kbb.svg +13 -0
- package/src/assets/icons/icon-kos.svg +16 -0
- package/src/assets/icons/icon-kpi-bod.svg +15 -0
- package/src/assets/icons/icon-kss.svg +14 -0
- package/src/assets/icons/icon-map.svg +12 -0
- package/src/assets/icons/icon-monitoring-harian.svg +13 -0
- package/src/assets/icons/icon-notification.svg +4 -0
- package/src/assets/icons/icon-overview.svg +17 -0
- package/src/assets/icons/icon-pltu.svg +13 -0
- package/src/assets/icons/icon-sebaran-sentral.svg +12 -0
- package/src/assets/icons/icon-select-data-kelistrikan.svg +19 -0
- package/src/assets/icons/icon-select-data-sentral.svg +11 -0
- package/src/assets/icons/icon-select-energi-primer.svg +12 -0
- package/src/assets/icons/icon-select-faba-apk2.svg +11 -0
- package/src/assets/icons/icon-select-ikk.svg +10 -0
- package/src/assets/icons/icon-select-kbb.svg +13 -0
- package/src/assets/icons/icon-select-kos.svg +16 -0
- package/src/assets/icons/icon-select-kpi-bod.svg +15 -0
- package/src/assets/icons/icon-select-kss.svg +14 -0
- package/src/assets/icons/icon-select-monitoring-harian.svg +13 -0
- package/src/assets/icons/icon-select-overview.svg +17 -0
- package/src/assets/icons/icon-select-sebaran-sentral.svg +12 -0
- package/src/assets/icons/icon-sentral-white.svg +13 -0
- package/src/assets/icons/icon-shipping.svg +5 -0
- package/src/assets/icons/icon-sort.svg +5 -0
- package/src/assets/icons/icon-tree-box.svg +14 -0
- package/src/assets/icons/icon-warehouse.svg +12 -0
- package/src/assets/icons/pin-green.svg +3 -0
- package/src/assets/icons/pin-orange.svg +3 -0
- package/src/assets/icons/pin-purple.svg +3 -0
- package/src/assets/icons/ship.svg +3 -0
- package/src/assets/icons/shipment/icon-antri.svg +15 -0
- package/src/assets/icons/shipment/icon-bongkar.svg +4 -0
- package/src/assets/icons/shipment/icon-invoice.svg +6 -0
- package/src/assets/icons/shipment/icon-loading.svg +8 -0
- package/src/assets/icons/shipment/icon-pembayaran.svg +13 -0
- package/src/assets/icons/shipment/icon-pengiriman.svg +4 -0
- package/src/assets/icons/shipment/icon-sailing.svg +4 -0
- package/src/assets/icons/shipment/icon-shipment-completed.svg +6 -0
- package/src/assets/icons/shipment/icon-shipment-in-progress.svg +6 -0
- package/src/assets/icons/shipment/icon-shipment-over-sla.svg +6 -0
- package/src/assets/icons/shipment/icon-spt.svg +4 -0
- package/src/assets/icons/shipment/icon-total-shipment.svg +4 -0
- package/src/assets/icons/upload_doc_icon.svg +42 -0
- package/src/assets/icons/upload_icon_blue.svg +14 -0
- package/src/assets/login-bg-day-min.jpg +0 -0
- package/src/assets/login-bg-night-min.jpg +0 -0
- package/src/assets/login-bg.jpg +0 -0
- package/src/assets/login-day.png +0 -0
- package/src/assets/login-night.png +0 -0
- package/src/assets/lucide-circle-plus-blue.svg +1 -0
- package/src/assets/pdf-logo.svg +11 -0
- package/src/assets/pemasok-card-bg.svg +6 -0
- package/src/assets/success_animation.gif +0 -0
- package/src/assets/success_animation.mp4 +0 -0
- package/src/assets/success_animation.webm +0 -0
- package/src/components/button/BtnAddOutline.vue +14 -0
- package/src/components/button/BtnCircle.vue +10 -0
- package/src/components/button/BtnOutline.vue +15 -0
- package/src/components/button/BtnPrimary.vue +25 -0
- package/src/components/button/BtnSecondary.vue +26 -0
- package/src/components/detail/AccountDetailTimeline.vue +144 -0
- package/src/components/detail/ApprovalInfo.vue +288 -0
- package/src/components/detail/DCI2.vue +164 -0
- package/src/components/detail/DetailContentHeader.vue +83 -0
- package/src/components/detail/DetailContentItem.vue +186 -0
- package/src/components/detail/DetailContentItems.vue +388 -0
- package/src/components/detail/DetailContentLoading.vue +12 -0
- package/src/components/detail/DetailContentTablet.vue +10 -0
- package/src/components/detail/DetailSheet.vue +294 -0
- package/src/components/detail/DetailTimeline.vue +191 -0
- package/src/components/detail/DocApprovalDialog.vue +29 -0
- package/src/components/detail/DocViewerContent.vue +991 -0
- package/src/components/dialog/ConfirmDialog.vue +96 -0
- package/src/components/dialog/DialogBase.vue +53 -0
- package/src/components/dialog/DialogSelect.vue +212 -0
- package/src/components/dialog/ErrorDialog.vue +63 -0
- package/src/components/dialog/FormDialog.vue +141 -0
- package/src/components/dialog/FormInputerDialog.vue +91 -0
- package/src/components/dialog/InfoDialog.vue +74 -0
- package/src/components/dialog/SuccessDialog.vue +51 -0
- package/src/components/examples/TestSchemaExample.vue +288 -0
- package/src/components/forms/auth/LoginForm.vue +806 -0
- package/src/components/forms/auth/PwdScore.vue +68 -0
- package/src/components/helper/ApiTester.vue +153 -0
- package/src/components/helper/ChangePwd.vue +150 -0
- package/src/components/helper/CheckboxElement.vue +43 -0
- package/src/components/helper/ConfigSwitcher.vue +54 -0
- package/src/components/helper/Copyright.vue +10 -0
- package/src/components/helper/ErrorScreen.vue +40 -0
- package/src/components/helper/LucideIcon.vue +27 -0
- package/src/components/helper/PdfViewer.vue +103 -0
- package/src/components/helper/PinInputer.vue +205 -0
- package/src/components/helper/PrivacyPolicy.vue +122 -0
- package/src/components/layout/PageActivityHeader.vue +48 -0
- package/src/components/layout/PageHeader.vue +70 -0
- package/src/components/loadings/LoadingDialog.vue +29 -0
- package/src/components/loadings/LoadingDialogSpin.vue +25 -0
- package/src/components/loadings/LoadingIndicator.vue +38 -0
- package/src/components/loadings/LoadingScreen.vue +23 -0
- package/src/components/notif/Notif.vue +103 -0
- package/src/components/notif/NotifItem.vue +41 -0
- package/src/components/pages/Header.vue +431 -0
- package/src/components/pages/Leftbar.vue +417 -0
- package/src/components/pages/PageActivity.vue +108 -0
- package/src/components/pages/PageActivityContent.vue +597 -0
- package/src/components/pages/PageContentTable.vue +589 -0
- package/src/components/pages/PageTab.vue +84 -0
- package/src/components/selector/BaseSelector.vue +1136 -0
- package/src/components/selector/ConfigDataSelector.vue +136 -0
- package/src/components/settings/SettingsItem.vue +38 -0
- package/src/components/tab/TabView.vue +11 -0
- package/src/components/tab/TabViewItem.vue +18 -0
- package/src/components/tab/TabViewItemBar.vue +9 -0
- package/src/components/tables/CellHover.vue +65 -0
- package/src/components/tables/DashboardDataTable.vue +707 -0
- package/src/components/tables/DataStatusTag.vue +52 -0
- package/src/components/tables/DataTable.vue +156 -0
- package/src/components/tables/DataTableAccordion.vue +249 -0
- package/src/components/tables/DataTableActionRow.vue +64 -0
- package/src/components/tables/DataTableCell.vue +272 -0
- package/src/components/tables/DataTableHeader.vue +60 -0
- package/src/components/tables/DataTableRow.vue +213 -0
- package/src/components/tables/ExpandedTable.vue +259 -0
- package/src/components/tables/PageTable.vue +73 -0
- package/src/components/tables/Pagination.vue +98 -0
- package/src/components/tables/dropdown/BaseDropdownTable.vue +140 -0
- package/src/components/tables/dropdown/DropdownTableActivity.vue +33 -0
- package/src/components/tables/dropdown/DropdownTableAsset.vue +30 -0
- package/src/components/tables/dropdown/DropdownTableConfig.vue +30 -0
- package/src/components/tables/dropdown/DropdownTableDataKonektor.vue +31 -0
- package/src/components/tables/dropdown/DropdownTableDataLabel.vue +30 -0
- package/src/components/tables/dropdown/DropdownTableDataSchema.vue +31 -0
- package/src/components/tables/dropdown/DropdownTableFabaPemanfaat.vue +30 -0
- package/src/components/tables/dropdown/DropdownTableGroup.vue +36 -0
- package/src/components/tables/dropdown/DropdownTableHalaman.vue +33 -0
- package/src/components/tables/dropdown/DropdownTableLevel.vue +66 -0
- package/src/components/tables/dropdown/DropdownTableOrganization.vue +47 -0
- package/src/components/tables/dropdown/DropdownTablePengelola.vue +28 -0
- package/src/components/tables/dropdown/DropdownTableQueryLayer.vue +29 -0
- package/src/components/tables/dropdown/DropdownTableSentral.vue +33 -0
- package/src/components/tables/dropdown/DropdownTableWarehouse.vue +30 -0
- package/src/components/tables/dropdown/TableDropdown.vue +52 -0
- package/src/components/ui/accordion/Accordion.vue +19 -0
- package/src/components/ui/accordion/AccordionContent.vue +24 -0
- package/src/components/ui/accordion/AccordionItem.vue +24 -0
- package/src/components/ui/accordion/AccordionTrigger.vue +42 -0
- package/src/components/ui/accordion/index.ts +4 -0
- package/src/components/ui/alert-dialog/AlertDialog.vue +14 -0
- package/src/components/ui/alert-dialog/AlertDialogAction.vue +20 -0
- package/src/components/ui/alert-dialog/AlertDialogCancel.vue +20 -0
- package/src/components/ui/alert-dialog/AlertDialogContent.vue +42 -0
- package/src/components/ui/alert-dialog/AlertDialogDescription.vue +25 -0
- package/src/components/ui/alert-dialog/AlertDialogFooter.vue +21 -0
- package/src/components/ui/alert-dialog/AlertDialogHeader.vue +16 -0
- package/src/components/ui/alert-dialog/AlertDialogTitle.vue +22 -0
- package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +11 -0
- package/src/components/ui/alert-dialog/index.ts +9 -0
- package/src/components/ui/avatar/Avatar.vue +24 -0
- package/src/components/ui/avatar/AvatarFallback.vue +11 -0
- package/src/components/ui/avatar/AvatarImage.vue +9 -0
- package/src/components/ui/avatar/UsersAvatar.vue +28 -0
- package/src/components/ui/avatar/index.ts +24 -0
- package/src/components/ui/button/Button.vue +27 -0
- package/src/components/ui/button/index.ts +34 -0
- package/src/components/ui/calendar/Calendar.vue +325 -0
- package/src/components/ui/calendar/index.ts +22 -0
- package/src/components/ui/checkbox/Checkbox.vue +33 -0
- package/src/components/ui/checkbox/index.ts +1 -0
- package/src/components/ui/command/Command.vue +30 -0
- package/src/components/ui/command/CommandDialog.vue +21 -0
- package/src/components/ui/command/CommandEmpty.vue +20 -0
- package/src/components/ui/command/CommandGroup.vue +29 -0
- package/src/components/ui/command/CommandInput.vue +33 -0
- package/src/components/ui/command/CommandItem.vue +26 -0
- package/src/components/ui/command/CommandList.vue +27 -0
- package/src/components/ui/command/CommandSeparator.vue +23 -0
- package/src/components/ui/command/CommandShortcut.vue +14 -0
- package/src/components/ui/command/index.ts +9 -0
- package/src/components/ui/context-menu/ContextMenu.vue +15 -0
- package/src/components/ui/context-menu/ContextMenuCheckboxItem.vue +40 -0
- package/src/components/ui/context-menu/ContextMenuContent.vue +36 -0
- package/src/components/ui/context-menu/ContextMenuGroup.vue +11 -0
- package/src/components/ui/context-menu/ContextMenuItem.vue +34 -0
- package/src/components/ui/context-menu/ContextMenuLabel.vue +25 -0
- package/src/components/ui/context-menu/ContextMenuPortal.vue +11 -0
- package/src/components/ui/context-menu/ContextMenuRadioGroup.vue +19 -0
- package/src/components/ui/context-menu/ContextMenuRadioItem.vue +40 -0
- package/src/components/ui/context-menu/ContextMenuSeparator.vue +20 -0
- package/src/components/ui/context-menu/ContextMenuShortcut.vue +14 -0
- package/src/components/ui/context-menu/ContextMenuSub.vue +19 -0
- package/src/components/ui/context-menu/ContextMenuSubContent.vue +35 -0
- package/src/components/ui/context-menu/ContextMenuSubTrigger.vue +34 -0
- package/src/components/ui/context-menu/ContextMenuTrigger.vue +13 -0
- package/src/components/ui/context-menu/index.ts +14 -0
- package/src/components/ui/datetime/DatetimeRangeComponent.vue +52 -0
- package/src/components/ui/dialog/Dialog.vue +14 -0
- package/src/components/ui/dialog/DialogClose.vue +11 -0
- package/src/components/ui/dialog/DialogContent.vue +53 -0
- package/src/components/ui/dialog/DialogDescription.vue +24 -0
- package/src/components/ui/dialog/DialogFooter.vue +19 -0
- package/src/components/ui/dialog/DialogHeader.vue +16 -0
- package/src/components/ui/dialog/DialogScrollContent.vue +59 -0
- package/src/components/ui/dialog/DialogTitle.vue +29 -0
- package/src/components/ui/dialog/DialogTrigger.vue +11 -0
- package/src/components/ui/dialog/index.ts +9 -0
- package/src/components/ui/dropdown-menu/DropdownMenu.vue +14 -0
- package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +40 -0
- package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +38 -0
- package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +11 -0
- package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +28 -0
- package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +24 -0
- package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +19 -0
- package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +41 -0
- package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +22 -0
- package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +14 -0
- package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
- package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +30 -0
- package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +33 -0
- package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +13 -0
- package/src/components/ui/dropdown-menu/index.ts +16 -0
- package/src/components/ui/form/FormControl.vue +16 -0
- package/src/components/ui/form/FormDescription.vue +20 -0
- package/src/components/ui/form/FormItem.vue +25 -0
- package/src/components/ui/form/FormLabel.vue +23 -0
- package/src/components/ui/form/FormMessage.vue +16 -0
- package/src/components/ui/form/index.ts +6 -0
- package/src/components/ui/form/useFormField.ts +30 -0
- package/src/components/ui/hover-card/HoverCard.vue +14 -0
- package/src/components/ui/hover-card/HoverCardContent.vue +41 -0
- package/src/components/ui/hover-card/HoverCardTrigger.vue +11 -0
- package/src/components/ui/hover-card/index.ts +3 -0
- package/src/components/ui/input/Input.vue +24 -0
- package/src/components/ui/input/index.ts +1 -0
- package/src/components/ui/label/Label.vue +27 -0
- package/src/components/ui/label/index.ts +1 -0
- package/src/components/ui/pagination/PaginationEllipsis.vue +22 -0
- package/src/components/ui/pagination/PaginationFirst.vue +29 -0
- package/src/components/ui/pagination/PaginationLast.vue +29 -0
- package/src/components/ui/pagination/PaginationNext.vue +29 -0
- package/src/components/ui/pagination/PaginationPrev.vue +29 -0
- package/src/components/ui/pagination/index.ts +10 -0
- package/src/components/ui/pin-input/PinInput.vue +23 -0
- package/src/components/ui/pin-input/PinInputGroup.vue +18 -0
- package/src/components/ui/pin-input/PinInputInput.vue +18 -0
- package/src/components/ui/pin-input/PinInputSeparator.vue +15 -0
- package/src/components/ui/pin-input/index.ts +4 -0
- package/src/components/ui/popover/Popover.vue +15 -0
- package/src/components/ui/popover/PopoverContent.vue +48 -0
- package/src/components/ui/popover/PopoverTrigger.vue +11 -0
- package/src/components/ui/popover/index.ts +4 -0
- package/src/components/ui/preview/PreviewPdf.vue +118 -0
- package/src/components/ui/progress/ProgressCircle.vue +27 -0
- package/src/components/ui/progress/SemiCircularProgressBar.vue +83 -0
- package/src/components/ui/progress/TotalCalories.vue +31 -0
- package/src/components/ui/radio-group/RadioGroup.vue +25 -0
- package/src/components/ui/radio-group/RadioGroupItem.vue +37 -0
- package/src/components/ui/radio-group/index.ts +2 -0
- package/src/components/ui/scroll-area/ScrollArea.vue +29 -0
- package/src/components/ui/scroll-area/ScrollBar.vue +30 -0
- package/src/components/ui/scroll-area/index.ts +2 -0
- package/src/components/ui/select/Select.vue +15 -0
- package/src/components/ui/select/SelectContent.vue +52 -0
- package/src/components/ui/select/SelectGroup.vue +19 -0
- package/src/components/ui/select/SelectInline.vue +84 -0
- package/src/components/ui/select/SelectItem.vue +44 -0
- package/src/components/ui/select/SelectItemText.vue +11 -0
- package/src/components/ui/select/SelectLabel.vue +13 -0
- package/src/components/ui/select/SelectScrollDownButton.vue +24 -0
- package/src/components/ui/select/SelectScrollUpButton.vue +24 -0
- package/src/components/ui/select/SelectSeparator.vue +17 -0
- package/src/components/ui/select/SelectTrigger.vue +31 -0
- package/src/components/ui/select/SelectTriggerCustom.vue +23 -0
- package/src/components/ui/select/SelectValue.vue +11 -0
- package/src/components/ui/select/index.ts +12 -0
- package/src/components/ui/separator/Separator.vue +20 -0
- package/src/components/ui/separator/index.ts +1 -0
- package/src/components/ui/sheet/Sheet.vue +14 -0
- package/src/components/ui/sheet/SheetClose.vue +11 -0
- package/src/components/ui/sheet/SheetContent.vue +48 -0
- package/src/components/ui/sheet/SheetDescription.vue +22 -0
- package/src/components/ui/sheet/SheetFooter.vue +19 -0
- package/src/components/ui/sheet/SheetHeader.vue +16 -0
- package/src/components/ui/sheet/SheetTitle.vue +22 -0
- package/src/components/ui/sheet/SheetTrigger.vue +11 -0
- package/src/components/ui/sheet/index.ts +31 -0
- package/src/components/ui/skeleton/Skeleton.vue +28 -0
- package/src/components/ui/skeleton/index.ts +1 -0
- package/src/components/ui/sonner/Sonner.vue +22 -0
- package/src/components/ui/sonner/index.ts +1 -0
- package/src/components/ui/star/StarRating.vue +19 -0
- package/src/components/ui/switch/Switch.vue +37 -0
- package/src/components/ui/switch/index.ts +1 -0
- package/src/components/ui/table/Table.vue +16 -0
- package/src/components/ui/table/TableBody.vue +14 -0
- package/src/components/ui/table/TableCaption.vue +14 -0
- package/src/components/ui/table/TableCell.vue +21 -0
- package/src/components/ui/table/TableEmpty.vue +37 -0
- package/src/components/ui/table/TableFooter.vue +14 -0
- package/src/components/ui/table/TableHead.vue +14 -0
- package/src/components/ui/table/TableHeader.vue +14 -0
- package/src/components/ui/table/TableRow.vue +14 -0
- package/src/components/ui/table/index.ts +8 -0
- package/src/components/ui/tabs/Tabs.vue +15 -0
- package/src/components/ui/tabs/TabsContent.vue +22 -0
- package/src/components/ui/tabs/TabsList.vue +25 -0
- package/src/components/ui/tabs/TabsTrigger.vue +27 -0
- package/src/components/ui/tabs/index.ts +4 -0
- package/src/components/ui/tags-input/TagsInput.vue +22 -0
- package/src/components/ui/tags-input/TagsInputInput.vue +19 -0
- package/src/components/ui/tags-input/TagsInputItem.vue +22 -0
- package/src/components/ui/tags-input/TagsInputItemDelete.vue +24 -0
- package/src/components/ui/tags-input/TagsInputItemText.vue +19 -0
- package/src/components/ui/tags-input/index.ts +5 -0
- package/src/components/ui/textarea/Textarea.vue +24 -0
- package/src/components/ui/textarea/index.ts +1 -0
- package/src/components/ui/tooltip/Tooltip.vue +14 -0
- package/src/components/ui/tooltip/TooltipContent.vue +31 -0
- package/src/components/ui/tooltip/TooltipProvider.vue +11 -0
- package/src/components/ui/tooltip/TooltipTrigger.vue +11 -0
- package/src/components/ui/tooltip/index.ts +4 -0
- package/src/composables/useAppConfig.ts +332 -0
- package/src/composables/useDarkMode.ts +71 -0
- package/src/config/app.config.ts +318 -0
- package/src/config/examples/ecommerce.config.ts +132 -0
- package/src/config/examples/generic.config.ts +132 -0
- package/src/config/menu.config.ts +149 -0
- package/src/config/my-app.config.ts +134 -0
- package/src/config/test-config.ts +32 -0
- package/src/config/theme.config.ts +250 -0
- package/src/docs/index.ts +21 -0
- package/src/docs.scss +403 -0
- package/src/index.d.ts +5 -0
- package/src/index.ts +20 -0
- package/src/layouts/AuthLayout.vue +68 -0
- package/src/layouts/DefaultLayout.vue +119 -0
- package/src/layouts/DocsLayout.vue +681 -0
- package/src/layouts/FormGlobal.vue +50 -0
- package/src/layouts/GlobalDialog.vue +122 -0
- package/src/layouts/RakorConfirmDialog.vue +95 -0
- package/src/layouts/SettingsLayout.vue +115 -0
- package/src/lib/constants.ts +2 -0
- package/src/lib/detail.utils.ts +213 -0
- package/src/lib/form.utils.ts +1009 -0
- package/src/lib/page.flow.utils.ts +81 -0
- package/src/lib/page.utils.ts +865 -0
- package/src/lib/performance.utils.ts +302 -0
- package/src/lib/tablerow.utils.ts +51 -0
- package/src/lib/utils.ts +643 -0
- package/src/main.scss +717 -0
- package/src/main.ts +74 -0
- package/src/menu.ts +78 -0
- package/src/nestedlist_color.scss +161 -0
- package/src/router/index.ts +92 -0
- package/src/stores/auth.ts +117 -0
- package/src/stores/counter.ts +12 -0
- package/src/stores/dialog.ts +168 -0
- package/src/stores/form.ts +103 -0
- package/src/stores/tabs.ts +52 -0
- package/src/tw.scss +419 -0
- package/src/types/form.types.ts +348 -0
- package/src/types/types.ts +7 -0
- package/src/utils/config.utils.ts +149 -0
- package/src/views/NotFound.vue +30 -0
- package/src/views/PageActivity.vue +15 -0
- package/src/views/auth/LoginView.vue +7 -0
- package/src/views/auth/OauthCallback.vue +101 -0
- package/src/views/dashboard/index.vue +16 -0
- package/src/views/settings/AccountSettingsView.vue +70 -0
- package/src/views/settings/AuditLogsSettingsView.vue +116 -0
- package/src/views/settings/DeviceSettingsView.vue +70 -0
- package/src/views/settings/MainSettingsView.vue +12 -0
- package/src/views/settings/ProfileSettingsView.vue +104 -0
- package/src/vueform/config/informasi-gudang.ts +47 -0
- package/src/vueform/config/test-schema.ts +8 -0
- package/src/vueform/config/types.ts +768 -0
- package/src/vueform/customization/classes.js +46 -0
- package/src/vueform/customization/tailwind.classes.js +2117 -0
- package/src/vueform/elements/ConfigDataSelectorElement.vue +50 -0
- package/src/vueform/elements/DateSelectorElement.vue +323 -0
- package/src/vueform/elements/SelectorElement.vue +153 -0
- package/src/vueform/schemas/date-selector-test.ts +103 -0
- package/src/vueform/schemas/informasi-gudang.ts +160 -0
- package/src/vueform/schemas/test-schema.ts +483 -0
- package/src/vueform.config.js +77 -0
- package/src/vueform.validator.ts +77 -0
package/README.md
ADDED
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
# Framework Web
|
|
2
|
+
|
|
3
|
+
A starter Vue 3 + TypeScript framework for building configurable, enterprise-ready web apps. It ships with a configuration-driven architecture, unified components, and type-safe development. Forms are powered by Vueform, which serves as the built-in form builder across the project.
|
|
4
|
+
|
|
5
|
+
## š Quick Start
|
|
6
|
+
|
|
7
|
+
Make sure you guys use node v20 or above
|
|
8
|
+
|
|
9
|
+
### Installation
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npm install
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Development
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
npm run dev
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Production Build
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
npm run build
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Testing
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
npm run test:unit
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Linting
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
npm run lint
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## šļø Architecture Overview
|
|
40
|
+
|
|
41
|
+
This framework follows a **configuration-driven architecture** where pages are defined through schemas and configurations, making it highly reusable and maintainable.
|
|
42
|
+
|
|
43
|
+
### Core Flow
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Route ā PageActivity ā Schema ā Table ā DataTableCell
|
|
47
|
+
ā ā ā ā ā
|
|
48
|
+
Config ā PageConfig ā Columns ā Render ā Display
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Key Components
|
|
52
|
+
|
|
53
|
+
- **PageActivity.vue** - Main page container
|
|
54
|
+
- **DataTable.vue** - Unified table component
|
|
55
|
+
- **DataTableCell.vue** - Smart cell renderer
|
|
56
|
+
- **BaseSelector.vue** - Unified selector component
|
|
57
|
+
- **DateSelectorElement.vue** - Unified date picker
|
|
58
|
+
|
|
59
|
+
## š Configuration System
|
|
60
|
+
|
|
61
|
+
### 1. Application Configuration
|
|
62
|
+
|
|
63
|
+
Create your app configuration in `src/config/my-app.config.ts`:
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
export default {
|
|
67
|
+
app: {
|
|
68
|
+
name: "My Application",
|
|
69
|
+
version: "1.0.0"
|
|
70
|
+
},
|
|
71
|
+
api: {
|
|
72
|
+
baseUrl: process.env.VITE_API_URL || "http://localhost:3000/api",
|
|
73
|
+
timeout: 10000
|
|
74
|
+
},
|
|
75
|
+
branding: {
|
|
76
|
+
companyName: "My Company",
|
|
77
|
+
logo: "/logo.svg"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 2. Page Configuration
|
|
83
|
+
|
|
84
|
+
Create page-specific configs in `src/vueform/config/{endpoint}.ts`:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
export default {
|
|
88
|
+
endpoint: "/users",
|
|
89
|
+
title: "User Management",
|
|
90
|
+
columns: [
|
|
91
|
+
{ key: "name", header: "Name", visible: true },
|
|
92
|
+
{ key: "email", header: "Email", visible: true }
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 3. Form Schema
|
|
98
|
+
|
|
99
|
+
Define your form schemas in `src/vueform/schemas/{pageCode}/{schema}.ts`:
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
export default {
|
|
103
|
+
schema: {
|
|
104
|
+
name: {
|
|
105
|
+
type: "text",
|
|
106
|
+
label: "Full Name",
|
|
107
|
+
rules: ["required"],
|
|
108
|
+
showInTable: true
|
|
109
|
+
},
|
|
110
|
+
organizationId: {
|
|
111
|
+
type: "selector",
|
|
112
|
+
endpoint: "/organizations",
|
|
113
|
+
label: "Organization",
|
|
114
|
+
showAvatar: true,
|
|
115
|
+
condition: { levels: "admin" },
|
|
116
|
+
showInTable: true
|
|
117
|
+
},
|
|
118
|
+
birthDate: {
|
|
119
|
+
type: "date_selector",
|
|
120
|
+
label: "Birth Date",
|
|
121
|
+
pickerType: "date",
|
|
122
|
+
showInTable: true
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## šÆ Unified Components
|
|
129
|
+
|
|
130
|
+
### BaseSelector
|
|
131
|
+
|
|
132
|
+
A unified selector component that handles all selection needs:
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
// Single selection
|
|
136
|
+
{
|
|
137
|
+
type: "selector",
|
|
138
|
+
endpoint: "/users",
|
|
139
|
+
showAvatar: true,
|
|
140
|
+
nameField: "name"
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Multiple selection
|
|
144
|
+
{
|
|
145
|
+
type: "selector",
|
|
146
|
+
endpoint: "/users",
|
|
147
|
+
multiple: true,
|
|
148
|
+
showAvatar: true,
|
|
149
|
+
returnObject: true
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// With conditions and sorting
|
|
153
|
+
{
|
|
154
|
+
type: "selector",
|
|
155
|
+
endpoint: "/organizations",
|
|
156
|
+
condition: { levels: "admin" },
|
|
157
|
+
orderBy: "name",
|
|
158
|
+
sort: "asc"
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### DateSelectorElement
|
|
163
|
+
|
|
164
|
+
A unified date picker supporting all date types:
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
// Single date
|
|
168
|
+
{
|
|
169
|
+
type: "date_selector",
|
|
170
|
+
pickerType: "date",
|
|
171
|
+
label: "Select Date"
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Date range
|
|
175
|
+
{
|
|
176
|
+
type: "date_selector",
|
|
177
|
+
pickerType: "date",
|
|
178
|
+
range: true,
|
|
179
|
+
label: "Select Date Range"
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// DateTime with time picker
|
|
183
|
+
{
|
|
184
|
+
type: "date_selector",
|
|
185
|
+
pickerType: "datetime",
|
|
186
|
+
enableTimePicker: true,
|
|
187
|
+
label: "Select Date & Time"
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Month picker
|
|
191
|
+
{
|
|
192
|
+
type: "date_selector",
|
|
193
|
+
pickerType: "month",
|
|
194
|
+
label: "Select Month"
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Year picker
|
|
198
|
+
{
|
|
199
|
+
type: "date_selector",
|
|
200
|
+
pickerType: "year",
|
|
201
|
+
yearRange: [2020, 2030],
|
|
202
|
+
label: "Select Year"
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## š Table System
|
|
207
|
+
|
|
208
|
+
### Automatic Column Generation
|
|
209
|
+
|
|
210
|
+
The framework automatically generates table columns from your form schema:
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
// Schema definition
|
|
214
|
+
{
|
|
215
|
+
name: {
|
|
216
|
+
type: "text",
|
|
217
|
+
label: "Name",
|
|
218
|
+
showInTable: true,
|
|
219
|
+
textAlign: "left"
|
|
220
|
+
},
|
|
221
|
+
organizationId: {
|
|
222
|
+
type: "selector",
|
|
223
|
+
endpoint: "/organizations",
|
|
224
|
+
showAvatar: true,
|
|
225
|
+
showInTable: true
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Automatically becomes table columns
|
|
230
|
+
// - Name (text column)
|
|
231
|
+
// - Organization (selector with avatar)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Cell Types
|
|
235
|
+
|
|
236
|
+
The `DataTableCell.vue` component automatically handles different cell types:
|
|
237
|
+
|
|
238
|
+
- **`text`** - Plain text display
|
|
239
|
+
- **`selector`** - Selector with avatar support
|
|
240
|
+
- **`date_selector`** - Date picker with all variants
|
|
241
|
+
- **`toggle`** - Boolean toggle display
|
|
242
|
+
- **`checkboxgroup`** - Checkbox group display
|
|
243
|
+
- **`radiogroup`** - Radio group display
|
|
244
|
+
- **`select`** - Select dropdown display
|
|
245
|
+
|
|
246
|
+
## š§ Development Workflow
|
|
247
|
+
|
|
248
|
+
### 1. Create New Page
|
|
249
|
+
|
|
250
|
+
1. **Add Route**: Define route in `src/router/index.ts`
|
|
251
|
+
2. **Create Schema**: Add schema in `src/vueform/schemas/{pageCode}/`
|
|
252
|
+
3. **Create Config**: Add page config in `src/vueform/config/`
|
|
253
|
+
4. **Test**: The page will automatically work with the framework
|
|
254
|
+
|
|
255
|
+
### 2. Add New Field
|
|
256
|
+
|
|
257
|
+
1. **Define in Schema**: Add field to your form schema
|
|
258
|
+
2. **Set Properties**: Configure `showInTable`, `cellType`, etc.
|
|
259
|
+
3. **Test**: Field automatically appears in both form and table
|
|
260
|
+
|
|
261
|
+
### 3. Custom Cell Rendering
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
// Custom cell renderer
|
|
265
|
+
{
|
|
266
|
+
name: {
|
|
267
|
+
type: "text",
|
|
268
|
+
cellRender: (i: number, row: any) => {
|
|
269
|
+
return `<strong>${row.name}</strong>`;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## šØ Styling & Theming
|
|
276
|
+
|
|
277
|
+
### Tailwind CSS
|
|
278
|
+
|
|
279
|
+
The framework uses Tailwind CSS with custom configuration:
|
|
280
|
+
|
|
281
|
+
- **Dark Mode**: Automatic dark mode support
|
|
282
|
+
- **Custom Colors**: Brand-specific color schemes
|
|
283
|
+
- **Responsive**: Mobile-first responsive design
|
|
284
|
+
|
|
285
|
+
### Component Styling
|
|
286
|
+
|
|
287
|
+
Components are styled with Tailwind classes and support:
|
|
288
|
+
|
|
289
|
+
- **Hover States**: Interactive hover effects
|
|
290
|
+
- **Focus States**: Keyboard navigation support
|
|
291
|
+
- **Disabled States**: Proper disabled styling
|
|
292
|
+
- **Loading States**: Loading indicators
|
|
293
|
+
|
|
294
|
+
## š Key Libraries
|
|
295
|
+
|
|
296
|
+
- **Vue 3** - Main framework with Composition API
|
|
297
|
+
- **TypeScript** - Type safety and better DX
|
|
298
|
+
- **Tailwind CSS** - Utility-first CSS framework
|
|
299
|
+
- **Shadcn-vue** - Component library
|
|
300
|
+
- **Lucide Vue** - Icon library
|
|
301
|
+
- **Vueform** - Form handling
|
|
302
|
+
- **Pinia** - State management
|
|
303
|
+
- **Vue Router** - Client-side routing
|
|
304
|
+
- **Axios** - HTTP client
|
|
305
|
+
- **Moment.js** - Date manipulation
|
|
306
|
+
|
|
307
|
+
## š¤ Contribution
|
|
308
|
+
|
|
309
|
+
1. **Clone** the repository
|
|
310
|
+
2. **Create** a new branch for your feature: `git checkout -b feature-name`
|
|
311
|
+
3. **Develop** your feature following the framework patterns
|
|
312
|
+
4. **Test** your changes thoroughly
|
|
313
|
+
5. **Create** a pull request to the `dev` branch
|
|
314
|
+
|
|
315
|
+
### Branch Naming
|
|
316
|
+
|
|
317
|
+
Use descriptive branch names:
|
|
318
|
+
- `feature/user-management`
|
|
319
|
+
- `fix/date-picker-bug`
|
|
320
|
+
- `enhancement/table-performance`
|
|
321
|
+
|
|
322
|
+
## š Documentation
|
|
323
|
+
|
|
324
|
+
- **Framework Guide**: See `FRAMEWORK_GUIDE.md` for detailed documentation
|
|
325
|
+
- **Quick Start**: See `QUICK_START.md` for getting started
|
|
326
|
+
- **API Reference**: Check component documentation in code
|
|
327
|
+
|
|
328
|
+
## š§ Customization
|
|
329
|
+
|
|
330
|
+
### Environment Variables
|
|
331
|
+
|
|
332
|
+
Create `.env.local`:
|
|
333
|
+
|
|
334
|
+
```env
|
|
335
|
+
VITE_API_URL=http://localhost:3000/api
|
|
336
|
+
VITE_APP_NAME=My Application
|
|
337
|
+
VITE_COMPANY_NAME=My Company
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Vite Configuration
|
|
341
|
+
|
|
342
|
+
See [Vite Configuration Reference](https://vitejs.dev/config/) for advanced configuration options.
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
**Built with ā¤ļø using Vue 3, TypeScript, and modern web technologies.**
|
package/bin/dasi-cli.cjs
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
const { program } = require('commander');
|
|
2
|
+
const inquirer = require('inquirer');
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const chalk = require('chalk');
|
|
6
|
+
const ora = require('ora');
|
|
7
|
+
|
|
8
|
+
const { execSync } = require('child_process');
|
|
9
|
+
program
|
|
10
|
+
.name('dasi-ui')
|
|
11
|
+
.description('DASI UI - Create admin dashboard projects')
|
|
12
|
+
.version('1.0.0')
|
|
13
|
+
|
|
14
|
+
program
|
|
15
|
+
.command('create <project-name>')
|
|
16
|
+
.description('Create a new DASI UI project')
|
|
17
|
+
.option('-t --template <template>', 'Template to use', 'default')
|
|
18
|
+
.option('-p, --package-manager <pm>', 'Package manager to use', 'npm')
|
|
19
|
+
.option('--no-git', 'Skip git initialization')
|
|
20
|
+
.option('--no-install', 'Skip package installation')
|
|
21
|
+
.action(async (projectName, options) => {
|
|
22
|
+
console.log(chalk.blue.bold('š Creating DASI UI project...'));
|
|
23
|
+
|
|
24
|
+
const questions = [
|
|
25
|
+
{
|
|
26
|
+
type: 'input',
|
|
27
|
+
name: 'title',
|
|
28
|
+
message: 'Enter project title:',
|
|
29
|
+
default: projectName
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'input',
|
|
33
|
+
name: 'description',
|
|
34
|
+
message: 'Enter project description:',
|
|
35
|
+
default: 'Admin dashboard built with DASI UI'
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
type: 'input',
|
|
39
|
+
name: 'author',
|
|
40
|
+
message: 'Author name:',
|
|
41
|
+
default: 'DASI Developer'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: 'input',
|
|
45
|
+
name: 'email',
|
|
46
|
+
message: 'Author email:',
|
|
47
|
+
default: 'hello@dasi.co.id'
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'list',
|
|
51
|
+
name: 'packageManager',
|
|
52
|
+
message: 'Choose package manager:',
|
|
53
|
+
choices: ['npm', 'yarn', 'pnpm'],
|
|
54
|
+
default: options.packageManager
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'list',
|
|
58
|
+
name: 'template',
|
|
59
|
+
message: 'Choose template:',
|
|
60
|
+
choices: [
|
|
61
|
+
{ name: 'Default - Complete admin dashboard', value: 'default' },
|
|
62
|
+
{ name: 'Minimal - Basic admin setup', value: 'minimal' },
|
|
63
|
+
{ name: 'Full - All features included', value: 'full' }
|
|
64
|
+
],
|
|
65
|
+
default: options.template
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'confirm',
|
|
69
|
+
name: 'includeAuth',
|
|
70
|
+
message: 'Include authentication module?',
|
|
71
|
+
default: true
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
type: 'confirm',
|
|
75
|
+
name: 'includeCharts',
|
|
76
|
+
message: 'Include chart components?',
|
|
77
|
+
default: true
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: 'confirm',
|
|
81
|
+
name: 'includeMaps',
|
|
82
|
+
message: 'Include map components?',
|
|
83
|
+
default: false
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'confirm',
|
|
87
|
+
name: 'includeForms',
|
|
88
|
+
message: 'Include advanced form components?',
|
|
89
|
+
default: true
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'list',
|
|
93
|
+
name: 'typescript',
|
|
94
|
+
message: 'Use TypeScript?',
|
|
95
|
+
choices: [
|
|
96
|
+
{ name: 'Yes - Recommended', value: true },
|
|
97
|
+
{ name: 'No', value: false }
|
|
98
|
+
],
|
|
99
|
+
default: true
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'input',
|
|
103
|
+
name: 'apiUrl',
|
|
104
|
+
message: 'API base URL:',
|
|
105
|
+
default: 'http://localhost:8080/api'
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
type: 'confirm',
|
|
109
|
+
name: 'darkMode',
|
|
110
|
+
message: 'Enable dark mode?',
|
|
111
|
+
default: true
|
|
112
|
+
}
|
|
113
|
+
];
|
|
114
|
+
|
|
115
|
+
const answers = await inquirer.prompt(questions);
|
|
116
|
+
const spinner = ora('Creating project...').start();
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
const projectPath = path.join(process.cwd(), projectName);
|
|
120
|
+
|
|
121
|
+
if (fs.existsSync(projectPath)) {
|
|
122
|
+
spinner.fail(`Directory ${projectName} already exists!`);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
fs.mkdirSync(projectPath, { recursive: true });
|
|
127
|
+
|
|
128
|
+
const templatePath = path.join(__dirname, '../templates', answers.template);
|
|
129
|
+
await fs.copy(templatePath, projectPath);
|
|
130
|
+
|
|
131
|
+
const packagejsonPath = path.join(projectPath, 'package.json');
|
|
132
|
+
const packagejson = await fs.readJson(packagejsonPath);
|
|
133
|
+
|
|
134
|
+
packagejson.name = projectName;
|
|
135
|
+
packagejson.description = answers.description;
|
|
136
|
+
packagejson.author = answers.author;
|
|
137
|
+
packagejson.email = answers.email;
|
|
138
|
+
packagejson.version = '0.1.0';
|
|
139
|
+
|
|
140
|
+
await fs.writeJson(packagejsonPath, packagejson, { spaces: 2 });
|
|
141
|
+
|
|
142
|
+
const envExamplePath = path.join(projectPath, '.env.example');
|
|
143
|
+
let envContent = await fs.readFile(envExamplePath, 'utf-8');
|
|
144
|
+
|
|
145
|
+
envContent = envContent.replace(/VITE_APP_TITLE=.*/, `VITE_APP_TITLE=${answers.title}`);
|
|
146
|
+
envContent = envContent.replace(/VITE_APP_DESCRIPTION=.*/, `VITE_APP_DESCRIPTION=${answers.description}`);
|
|
147
|
+
envContent = envContent.replace(/VITE_APP_AUTHOR=.*/, `VITE_APP_AUTHOR=${answers.author}`);
|
|
148
|
+
envContent = envContent.replace(/VITE_APP_EMAIL=.*/, `VITE_APP_EMAIL=${answers.email}`);
|
|
149
|
+
envContent = envContent.replace(/VITE_API_URL=.*/, `VITE_API_URL=${answers.apiUrl}`);
|
|
150
|
+
envContent = envContent.replace(/VITE_API_KEY=.*/, `VITE_API_KEY=${answers.apiKey}`);
|
|
151
|
+
envContent = envContent.replace(/VITE_DARK_MODE=.*/, `VITE_DARK_MODE=${answers.darkMode}`);
|
|
152
|
+
|
|
153
|
+
await fs.writeFile(envPath, envContent);
|
|
154
|
+
await fs.copyFile(envExamplePath, path.join(projectPath, '.env'));
|
|
155
|
+
|
|
156
|
+
if (options.git) {
|
|
157
|
+
execSync('git init', { cwd: projectPath, stdio: 'ignore' });
|
|
158
|
+
execSync('git add .', { cwd: projectPath, stdio: 'ignore' });
|
|
159
|
+
execSync('git commit -m "Initial commit"', { cwd: projectPath, stdio: 'ignore' });
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (options.install) {
|
|
163
|
+
spinner.text = 'Installing dependencies...';
|
|
164
|
+
execSync(`${answers.packageManager} install`, { cwd: projectPath, stdio: 'ignore' });
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
spinner.succeed(`Project ${projectName} created successfully!`);
|
|
168
|
+
|
|
169
|
+
console.log(chalk.green('\nā
Next steps:'));
|
|
170
|
+
console.log(chalk.green(` cd ${projectName}`));
|
|
171
|
+
|
|
172
|
+
if (!options.install) {
|
|
173
|
+
console.log(chalk.green(` ${answers.packageManager} install`));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
console.log(chalk.green(` ${answers.packageManager} run dev`));
|
|
177
|
+
console.log(chalk.green('\nHappy coding! š Your admin dashboard is ready!'));
|
|
178
|
+
} catch (error) {
|
|
179
|
+
spinner.fail('Failed to create project!');
|
|
180
|
+
console.error('Error:', error);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
})
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const e = {
|
|
2
|
+
schema: {
|
|
3
|
+
// Test 1: Basic date picker
|
|
4
|
+
testDate: {
|
|
5
|
+
type: "DateSelectorElement",
|
|
6
|
+
label: "Test Date",
|
|
7
|
+
placeholder: "Select a date",
|
|
8
|
+
pickerType: "date",
|
|
9
|
+
rules: ["required"]
|
|
10
|
+
},
|
|
11
|
+
// Test 2: Date range
|
|
12
|
+
testDateRange: {
|
|
13
|
+
type: "DateSelectorElement",
|
|
14
|
+
label: "Test Date Range",
|
|
15
|
+
placeholder: "Select date range",
|
|
16
|
+
pickerType: "date",
|
|
17
|
+
range: !0
|
|
18
|
+
},
|
|
19
|
+
// Test 3: DateTime picker
|
|
20
|
+
testDateTime: {
|
|
21
|
+
type: "DateSelectorElement",
|
|
22
|
+
label: "Test DateTime",
|
|
23
|
+
placeholder: "Select date and time",
|
|
24
|
+
pickerType: "datetime",
|
|
25
|
+
timePickerInline: !0
|
|
26
|
+
},
|
|
27
|
+
// Test 4: DateTime range
|
|
28
|
+
testDateTimeRange: {
|
|
29
|
+
type: "DateSelectorElement",
|
|
30
|
+
label: "Test DateTime Range",
|
|
31
|
+
placeholder: "Select date time range",
|
|
32
|
+
pickerType: "datetime",
|
|
33
|
+
range: !0,
|
|
34
|
+
timePickerInline: !0
|
|
35
|
+
},
|
|
36
|
+
// Test 5: Month picker
|
|
37
|
+
testMonth: {
|
|
38
|
+
type: "DateSelectorElement",
|
|
39
|
+
label: "Test Month",
|
|
40
|
+
placeholder: "Select month",
|
|
41
|
+
pickerType: "month",
|
|
42
|
+
locale: "id"
|
|
43
|
+
},
|
|
44
|
+
// Test 6: Month range
|
|
45
|
+
testMonthRange: {
|
|
46
|
+
type: "DateSelectorElement",
|
|
47
|
+
label: "Test Month Range",
|
|
48
|
+
placeholder: "Select month range",
|
|
49
|
+
pickerType: "month",
|
|
50
|
+
range: !0,
|
|
51
|
+
locale: "id"
|
|
52
|
+
},
|
|
53
|
+
// Test 7: Year picker (using date picker with year navigation)
|
|
54
|
+
testYear: {
|
|
55
|
+
type: "DateSelectorElement",
|
|
56
|
+
label: "Test Year",
|
|
57
|
+
placeholder: "Select year",
|
|
58
|
+
pickerType: "year",
|
|
59
|
+
yearRange: [2020, 2030]
|
|
60
|
+
},
|
|
61
|
+
// Test 8: Year range (using date range picker with year navigation)
|
|
62
|
+
testYearRange: {
|
|
63
|
+
type: "DateSelectorElement",
|
|
64
|
+
label: "Test Year Range",
|
|
65
|
+
placeholder: "Select year range",
|
|
66
|
+
pickerType: "year",
|
|
67
|
+
range: !0,
|
|
68
|
+
yearRange: [2020, 2030]
|
|
69
|
+
},
|
|
70
|
+
// Test 9: Custom format
|
|
71
|
+
testCustomFormat: {
|
|
72
|
+
type: "DateSelectorElement",
|
|
73
|
+
label: "Test Custom Format",
|
|
74
|
+
placeholder: "Select date",
|
|
75
|
+
pickerType: "date",
|
|
76
|
+
displayFormat: "DD-MM-YYYY"
|
|
77
|
+
},
|
|
78
|
+
// Test 10: Disabled
|
|
79
|
+
testDisabled: {
|
|
80
|
+
type: "DateSelectorElement",
|
|
81
|
+
label: "Test Disabled",
|
|
82
|
+
placeholder: "This is disabled",
|
|
83
|
+
pickerType: "date",
|
|
84
|
+
disabled: !0,
|
|
85
|
+
default: "2024-01-01"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
export {
|
|
90
|
+
e as dateSelectorTestSchema
|
|
91
|
+
};
|
package/dist/favicon.ico
ADDED
|
Binary file
|