vlite3 0.1.0 → 0.1.2
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/_virtual/_plugin-vue_export-helper.js +9 -0
- package/components/Accordion/Accordion.vue.d.ts +44 -0
- package/components/Accordion/Accordion.vue.js +95 -0
- package/components/Accordion/Accordion.vue2.js +4 -0
- package/components/Accordion/AccordionContent.vue.d.ts +22 -0
- package/components/Accordion/AccordionContent.vue.js +7 -0
- package/components/Accordion/AccordionContent.vue2.js +47 -0
- package/components/Accordion/AccordionItem.vue.d.ts +56 -0
- package/components/Accordion/AccordionItem.vue.js +115 -0
- package/components/Accordion/AccordionItem.vue2.js +4 -0
- package/components/Accordion/AccordionTrigger.vue.d.ts +43 -0
- package/components/Accordion/AccordionTrigger.vue.js +94 -0
- package/components/Accordion/AccordionTrigger.vue2.js +4 -0
- package/components/Accordion/index.d.ts +5 -0
- package/components/Accordion/types.d.ts +33 -0
- package/components/Alert.vue.d.ts +36 -0
- package/components/Alert.vue.js +84 -0
- package/components/Alert.vue2.js +4 -0
- package/components/Avatar.vue.d.ts +32 -0
- package/components/Avatar.vue.js +78 -0
- package/components/Avatar.vue2.js +4 -0
- package/components/AvatarUploader/AvatarUploader.vue.d.ts +32 -0
- package/components/AvatarUploader/AvatarUploader.vue.js +99 -0
- package/components/AvatarUploader/AvatarUploader.vue2.js +4 -0
- package/{src/components/AvatarUploader/index.ts → components/AvatarUploader/index.d.ts} +2 -2
- package/components/Badge.vue.d.ts +25 -0
- package/components/Badge.vue.js +27 -0
- package/components/Badge.vue2.js +4 -0
- package/components/Button.vue.d.ts +26 -0
- package/components/Button.vue.js +107 -0
- package/components/Button.vue2.js +4 -0
- package/components/ButtonGroup.vue.d.ts +29 -0
- package/components/ButtonGroup.vue.js +7 -0
- package/components/ButtonGroup.vue2.js +30 -0
- package/components/Carousel/Carousel.vue.d.ts +847 -0
- package/components/Carousel/Carousel.vue.js +7 -0
- package/components/Carousel/Carousel.vue2.js +68 -0
- package/components/Carousel/index.d.ts +2 -0
- package/components/Carousel/types.d.ts +24 -0
- package/components/CheckBox.vue.d.ts +27 -0
- package/components/CheckBox.vue.js +115 -0
- package/components/CheckBox.vue2.js +4 -0
- package/components/Chip/Chip.vue.d.ts +33 -0
- package/components/Chip/Chip.vue.js +113 -0
- package/components/Chip/Chip.vue2.js +4 -0
- package/components/Chip/index.d.ts +2 -0
- package/components/Chip/types.d.ts +12 -0
- package/components/ChoiceBox/ChoiceBox.vue.d.ts +32 -0
- package/components/ChoiceBox/ChoiceBox.vue.js +141 -0
- package/components/ChoiceBox/ChoiceBox.vue2.js +4 -0
- package/components/ChoiceBox/index.d.ts +2 -0
- package/components/ColorPicker/ColorIro.vue.d.ts +18 -0
- package/components/ColorPicker/ColorIro.vue.js +142 -0
- package/components/ColorPicker/ColorIro.vue3.js +5 -0
- package/components/ColorPicker/ColorPicker.vue.d.ts +22 -0
- package/components/ColorPicker/ColorPicker.vue.js +56 -0
- package/components/ColorPicker/ColorPicker.vue2.js +4 -0
- package/components/ConfirmationModal.vue.d.ts +39 -0
- package/components/ConfirmationModal.vue.js +55 -0
- package/components/ConfirmationModal.vue2.js +4 -0
- package/components/DataTable/DataTable.vue.d.ts +60 -0
- package/components/DataTable/DataTable.vue.js +7 -0
- package/components/DataTable/DataTable.vue2.js +310 -0
- package/components/DataTable/DataTableHeader.vue.d.ts +14 -0
- package/components/DataTable/DataTableHeader.vue.js +49 -0
- package/components/DataTable/DataTableHeader.vue2.js +4 -0
- package/components/DataTable/DataTableRow.vue.d.ts +51 -0
- package/components/DataTable/DataTableRow.vue.js +114 -0
- package/components/DataTable/DataTableRow.vue2.js +4 -0
- package/components/DataTable/DataTableToolbar.vue.d.ts +31 -0
- package/components/DataTable/DataTableToolbar.vue.js +45 -0
- package/components/DataTable/DataTableToolbar.vue2.js +4 -0
- package/components/DataTable/index.d.ts +4 -0
- package/components/DataTable/types.d.ts +75 -0
- package/components/DatePicker.vue.d.ts +44 -0
- package/components/DatePicker.vue.js +84 -0
- package/components/DatePicker.vue2.js +4 -0
- package/components/Dropdown/Dropdown.vue.d.ts +105 -0
- package/components/Dropdown/Dropdown.vue.js +206 -0
- package/components/Dropdown/Dropdown.vue2.js +4 -0
- package/components/Dropdown/DropdownBooleanItem.vue.d.ts +12 -0
- package/components/Dropdown/DropdownBooleanItem.vue.js +41 -0
- package/components/Dropdown/DropdownBooleanItem.vue2.js +4 -0
- package/components/Dropdown/DropdownGroupedLayout.vue.d.ts +21 -0
- package/components/Dropdown/DropdownGroupedLayout.vue.js +73 -0
- package/components/Dropdown/DropdownGroupedLayout.vue2.js +4 -0
- package/components/Dropdown/DropdownItem.vue.d.ts +35 -0
- package/components/Dropdown/DropdownItem.vue.js +56 -0
- package/components/Dropdown/DropdownItem.vue2.js +4 -0
- package/components/Dropdown/DropdownMenu.vue.d.ts +73 -0
- package/components/Dropdown/DropdownMenu.vue.js +232 -0
- package/components/Dropdown/DropdownMenu.vue2.js +4 -0
- package/components/Dropdown/DropdownTrigger.vue.d.ts +15 -0
- package/components/Dropdown/DropdownTrigger.vue.js +26 -0
- package/components/Dropdown/DropdownTrigger.vue2.js +4 -0
- package/components/Dropdown/composables/useDropdownIds.d.ts +5 -0
- package/components/Dropdown/composables/useDropdownIds.js +20 -0
- package/components/Dropdown/composables/useDropdownNavigation.d.ts +19 -0
- package/components/Dropdown/composables/useDropdownNavigation.js +49 -0
- package/components/Dropdown/composables/useDropdownSelection.d.ts +16 -0
- package/components/Dropdown/composables/useDropdownSelection.js +41 -0
- package/components/Dropdown/index.d.ts +6 -0
- package/components/FilePicker/FilePicker.vue.d.ts +65 -0
- package/components/FilePicker/FilePicker.vue.js +285 -0
- package/components/FilePicker/FilePicker.vue2.js +4 -0
- package/components/FilePicker/index.d.ts +2 -0
- package/components/FileTree/FileTree.vue.d.ts +20 -0
- package/components/FileTree/FileTree.vue.js +139 -0
- package/components/FileTree/FileTree.vue2.js +4 -0
- package/components/FileTree/FileTreeNode.vue.d.ts +28 -0
- package/components/FileTree/FileTreeNode.vue.js +184 -0
- package/components/FileTree/FileTreeNode.vue2.js +4 -0
- package/components/FileTree/index.d.ts +4 -0
- package/components/FileTree/types.d.ts +36 -0
- package/components/FileTree/useTreeSelection.d.ts +12 -0
- package/components/FileTree/useTreeSelection.js +25 -0
- package/components/Form/CustomFields.vue.d.ts +38 -0
- package/components/Form/CustomFields.vue.js +7 -0
- package/components/Form/CustomFields.vue2.js +161 -0
- package/components/Form/Form.vue.d.ts +94 -0
- package/components/Form/Form.vue.js +7 -0
- package/components/Form/Form.vue2.js +238 -0
- package/components/Form/FormField.vue.d.ts +28 -0
- package/components/Form/FormField.vue.js +207 -0
- package/components/Form/FormField.vue2.js +4 -0
- package/components/Form/FormFields.vue.d.ts +29 -0
- package/components/Form/FormFields.vue.js +7 -0
- package/components/Form/FormFields.vue2.js +95 -0
- package/components/Form/composables/useFileUpload.d.ts +24 -0
- package/components/Form/composables/useFileUpload.js +40 -0
- package/components/Form/composables/useForm.d.ts +48 -0
- package/components/Form/composables/useForm.js +109 -0
- package/components/Form/index.d.ts +9 -0
- package/components/Form/types.d.ts +167 -0
- package/components/Form/utils/form.utils.d.ts +44 -0
- package/components/Form/utils/form.utils.js +97 -0
- package/components/Heatmap/Heatmap.vue.d.ts +26 -0
- package/components/Heatmap/Heatmap.vue.js +7 -0
- package/components/Heatmap/Heatmap.vue2.js +326 -0
- package/components/Heatmap/index.d.ts +2 -0
- package/components/Heatmap/types.d.ts +66 -0
- package/components/Icon.vue.d.ts +7 -0
- package/components/Icon.vue.js +25 -0
- package/components/Icon.vue2.js +4 -0
- package/components/IconPicker.vue.d.ts +38 -0
- package/components/IconPicker.vue.js +124 -0
- package/components/IconPicker.vue2.js +4 -0
- package/components/Input.vue.d.ts +54 -0
- package/components/Input.vue.js +267 -0
- package/components/Input.vue2.js +4 -0
- package/components/Label.vue.d.ts +23 -0
- package/components/Label.vue.js +23 -0
- package/components/Label.vue2.js +4 -0
- package/components/Logo.vue.d.ts +2 -0
- package/components/Logo.vue.js +10 -0
- package/components/Logo.vue2.js +4 -0
- package/components/Masonry/Masonry.vue.d.ts +31 -0
- package/components/Masonry/Masonry.vue.js +7 -0
- package/components/Masonry/Masonry.vue2.js +83 -0
- package/components/Masonry/index.d.ts +2 -0
- package/components/Masonry/types.d.ts +33 -0
- package/components/Masonry/types.js +10 -0
- package/components/Modal.vue.d.ts +52 -0
- package/components/Modal.vue.js +116 -0
- package/components/Modal.vue2.js +4 -0
- package/components/MultiSelect/MultiSelect.vue.d.ts +40 -0
- package/components/MultiSelect/MultiSelect.vue.js +126 -0
- package/components/MultiSelect/MultiSelect.vue2.js +4 -0
- package/components/MultiSelect/index.d.ts +1 -0
- package/components/Navbar/Navbar.vue.d.ts +51 -0
- package/components/Navbar/Navbar.vue.js +198 -0
- package/components/Navbar/Navbar.vue2.js +4 -0
- package/components/Navbar/NavbarGroup.vue.d.ts +24 -0
- package/components/Navbar/NavbarGroup.vue.js +23 -0
- package/components/Navbar/NavbarGroup.vue2.js +4 -0
- package/components/Navbar/NavbarItem.vue.d.ts +40 -0
- package/components/Navbar/NavbarItem.vue.js +104 -0
- package/components/Navbar/NavbarItem.vue2.js +4 -0
- package/components/Navbar/index.d.ts +3 -0
- package/components/OTPInput/OTPInput.vue.d.ts +33 -0
- package/components/OTPInput/OTPInput.vue.js +115 -0
- package/components/OTPInput/OTPInput.vue2.js +4 -0
- package/components/OTPInput/index.d.ts +1 -0
- package/components/Pagination/Pagination.vue.d.ts +34 -0
- package/components/Pagination/Pagination.vue.js +196 -0
- package/components/Pagination/Pagination.vue2.js +4 -0
- package/components/Pagination/index.d.ts +1 -0
- package/components/PricingPlan/PricingPlan.vue.d.ts +22 -0
- package/components/PricingPlan/PricingPlan.vue.js +55 -0
- package/components/PricingPlan/PricingPlan.vue2.js +4 -0
- package/components/PricingPlan/PricingPlanItem.vue.d.ts +17 -0
- package/components/PricingPlan/PricingPlanItem.vue.js +94 -0
- package/components/PricingPlan/PricingPlanItem.vue2.js +4 -0
- package/components/PricingPlan/index.d.ts +3 -0
- package/components/PricingPlan/types.d.ts +25 -0
- package/components/SidePanel.vue.d.ts +64 -0
- package/components/SidePanel.vue.js +7 -0
- package/components/SidePanel.vue2.js +131 -0
- package/components/SidebarMenu/SidebarMenu.vue.d.ts +11 -0
- package/components/SidebarMenu/SidebarMenu.vue.js +78 -0
- package/components/SidebarMenu/SidebarMenu.vue2.js +4 -0
- package/components/SidebarMenu/SidebarMenuItem.vue.d.ts +9 -0
- package/components/SidebarMenu/SidebarMenuItem.vue.js +269 -0
- package/components/SidebarMenu/SidebarMenuItem.vue3.js +5 -0
- package/components/SidebarMenu/index.d.ts +3 -0
- package/components/SidebarMenu/types.d.ts +35 -0
- package/components/Slider.vue.d.ts +31 -0
- package/components/Slider.vue.js +157 -0
- package/components/Slider.vue2.js +4 -0
- package/components/Switch.vue.d.ts +16 -0
- package/components/Switch.vue.js +40 -0
- package/components/Switch.vue2.js +4 -0
- package/components/Tabes/Tabes.vue.d.ts +21 -0
- package/components/Tabes/Tabes.vue.js +75 -0
- package/components/Tabes/Tabes.vue2.js +4 -0
- package/components/Tabes/index.d.ts +2 -0
- package/components/Tabes/types.d.ts +8 -0
- package/components/Textarea.vue.d.ts +22 -0
- package/components/Textarea.vue.js +34 -0
- package/components/Textarea.vue2.js +4 -0
- package/components/ThemeToggle.vue.d.ts +2 -0
- package/components/ThemeToggle.vue.js +18 -0
- package/components/ThemeToggle.vue2.js +4 -0
- package/components/Timeline.vue.d.ts +39 -0
- package/components/Timeline.vue.js +174 -0
- package/components/Timeline.vue2.js +4 -0
- package/components/ToastNotification.vue.d.ts +7 -0
- package/components/ToastNotification.vue.js +7 -0
- package/components/ToastNotification.vue2.js +151 -0
- package/components/Tooltip.vue.d.ts +31 -0
- package/components/Tooltip.vue.js +45 -0
- package/components/Tooltip.vue2.js +4 -0
- package/components/Workbook/Sheet.vue.d.ts +38 -0
- package/components/Workbook/Sheet.vue.js +141 -0
- package/components/Workbook/Sheet.vue2.js +4 -0
- package/components/Workbook/Workbook.vue.d.ts +54 -0
- package/components/Workbook/Workbook.vue.js +7 -0
- package/components/Workbook/Workbook.vue2.js +146 -0
- package/components/Workbook/WorkbookAddButton.vue.d.ts +6 -0
- package/components/Workbook/WorkbookAddButton.vue.js +20 -0
- package/components/Workbook/WorkbookAddButton.vue2.js +4 -0
- package/components/Workbook/index.d.ts +3 -0
- package/components/Workbook/types.d.ts +34 -0
- package/composables/useKeyStroke.d.ts +21 -0
- package/composables/useKeyStroke.js +93 -0
- package/composables/useNotifications.d.ts +113 -0
- package/composables/useNotifications.js +99 -0
- package/composables/useTheme.d.ts +6 -0
- package/composables/useTheme.js +32 -0
- package/core/config.d.ts +29 -0
- package/core/config.js +12 -0
- package/core/index.d.ts +31 -0
- package/core/index.js +15 -0
- package/directives/vRipple.d.ts +4 -0
- package/directives/vRipple.js +17 -0
- package/index.d.ts +49 -0
- package/index.js +156 -0
- package/package.json +2 -2
- package/style.css +590 -0
- package/types/alert.type.d.ts +10 -0
- package/{src/types/avatar.type.ts → types/avatar.type.d.ts} +8 -9
- package/types/button.d.ts +15 -0
- package/types/buttongroup.type.d.ts +1 -0
- package/{src/types/config.type.ts → types/config.type.d.ts} +13 -16
- package/types/form.type.d.ts +45 -0
- package/types/index.d.ts +10 -0
- package/types/navbar.type.d.ts +27 -0
- package/types/sidepanel.type.d.ts +13 -0
- package/types/styles.d.ts +28 -0
- package/types/timeline.type.d.ts +9 -0
- package/{src/utils/functions.ts → utils/functions.d.ts} +1 -9
- package/utils/functions.js +11 -0
- package/utils/index.d.ts +2 -0
- package/utils/object.d.ts +6 -0
- package/utils/object.js +14 -0
- package/.vscode/extensions.json +0 -3
- package/LICENSE +0 -21
- package/index.html +0 -16
- package/scripts/bundle-css.js +0 -45
- package/src/App.vue +0 -7
- package/src/components/Accordion/Accordion.vue +0 -139
- package/src/components/Accordion/AccordionContent.vue +0 -63
- package/src/components/Accordion/AccordionItem.vue +0 -163
- package/src/components/Accordion/AccordionTrigger.vue +0 -125
- package/src/components/Accordion/index.ts +0 -5
- package/src/components/Accordion/types.ts +0 -41
- package/src/components/Alert.vue +0 -112
- package/src/components/Avatar.vue +0 -110
- package/src/components/AvatarUploader/AvatarUploader.vue +0 -129
- package/src/components/Badge.vue +0 -45
- package/src/components/Button.vue +0 -122
- package/src/components/ButtonGroup.vue +0 -173
- package/src/components/Carousel/Carousel.vue +0 -84
- package/src/components/Carousel/index.ts +0 -2
- package/src/components/Carousel/types.ts +0 -25
- package/src/components/CheckBox.vue +0 -132
- package/src/components/Chip/Chip.vue +0 -158
- package/src/components/Chip/index.ts +0 -2
- package/src/components/Chip/types.ts +0 -23
- package/src/components/ChoiceBox/ChoiceBox.vue +0 -181
- package/src/components/ChoiceBox/index.ts +0 -2
- package/src/components/ColorPicker/ColorIro.vue +0 -207
- package/src/components/ColorPicker/ColorPicker.vue +0 -61
- package/src/components/ConfirmationModal.vue +0 -46
- package/src/components/DataTable/DataTable.vue +0 -478
- package/src/components/DataTable/DataTableHeader.vue +0 -78
- package/src/components/DataTable/DataTableRow.vue +0 -171
- package/src/components/DataTable/DataTableToolbar.vue +0 -45
- package/src/components/DataTable/index.ts +0 -5
- package/src/components/DataTable/types.ts +0 -85
- package/src/components/DatePicker.vue +0 -102
- package/src/components/Dropdown/Dropdown.vue +0 -348
- package/src/components/Dropdown/DropdownBooleanItem.vue +0 -40
- package/src/components/Dropdown/DropdownGroupedLayout.vue +0 -115
- package/src/components/Dropdown/DropdownItem.vue +0 -56
- package/src/components/Dropdown/DropdownMenu.vue +0 -374
- package/src/components/Dropdown/DropdownTrigger.vue +0 -27
- package/src/components/Dropdown/composables/useDropdownIds.ts +0 -27
- package/src/components/Dropdown/composables/useDropdownNavigation.ts +0 -109
- package/src/components/Dropdown/composables/useDropdownSelection.ts +0 -106
- package/src/components/Dropdown/index.ts +0 -6
- package/src/components/FilePicker/FilePicker.vue +0 -459
- package/src/components/FilePicker/index.ts +0 -2
- package/src/components/FileTree/FileTree.vue +0 -334
- package/src/components/FileTree/FileTreeNode.vue +0 -225
- package/src/components/FileTree/index.ts +0 -2
- package/src/components/FileTree/types.ts +0 -31
- package/src/components/FileTree/useTreeSelection.ts +0 -66
- package/src/components/Form/CustomFields.vue +0 -294
- package/src/components/Form/Form.vue +0 -406
- package/src/components/Form/FormField.vue +0 -404
- package/src/components/Form/FormFields.vue +0 -161
- package/src/components/Form/composables/useFileUpload.ts +0 -112
- package/src/components/Form/composables/useForm.ts +0 -356
- package/src/components/Form/index.ts +0 -16
- package/src/components/Form/types.ts +0 -203
- package/src/components/Form/utils/form.utils.ts +0 -209
- package/src/components/Heatmap/Heatmap.vue +0 -629
- package/src/components/Heatmap/index.ts +0 -2
- package/src/components/Heatmap/types.ts +0 -84
- package/src/components/Icon.vue +0 -47
- package/src/components/IconPicker.vue +0 -138
- package/src/components/Input.vue +0 -366
- package/src/components/Label.vue +0 -25
- package/src/components/Logo.vue +0 -5
- package/src/components/Masonry/Masonry.vue +0 -148
- package/src/components/Masonry/index.ts +0 -2
- package/src/components/Masonry/types.ts +0 -44
- package/src/components/Modal.vue +0 -135
- package/src/components/MultiSelect/MultiSelect.vue +0 -176
- package/src/components/MultiSelect/index.ts +0 -1
- package/src/components/Navbar/Navbar.vue +0 -277
- package/src/components/Navbar/NavbarGroup.vue +0 -27
- package/src/components/Navbar/NavbarItem.vue +0 -124
- package/src/components/Navbar/index.ts +0 -3
- package/src/components/OTPInput/OTPInput.vue +0 -220
- package/src/components/OTPInput/index.ts +0 -1
- package/src/components/Pagination/Pagination.vue +0 -238
- package/src/components/Pagination/index.ts +0 -1
- package/src/components/PricingPlan/PricingPlan.vue +0 -102
- package/src/components/PricingPlan/PricingPlanItem.vue +0 -148
- package/src/components/PricingPlan/index.ts +0 -3
- package/src/components/PricingPlan/types.ts +0 -29
- package/src/components/SidePanel.vue +0 -184
- package/src/components/SidebarMenu/SidebarMenu.vue +0 -146
- package/src/components/SidebarMenu/SidebarMenuItem.vue +0 -333
- package/src/components/SidebarMenu/index.ts +0 -3
- package/src/components/SidebarMenu/types.ts +0 -54
- package/src/components/Slider.vue +0 -181
- package/src/components/Switch.vue +0 -51
- package/src/components/Tabes/Tabes.vue +0 -112
- package/src/components/Tabes/index.ts +0 -2
- package/src/components/Tabes/types.ts +0 -17
- package/src/components/Textarea.vue +0 -48
- package/src/components/ThemeToggle.vue +0 -14
- package/src/components/Timeline.vue +0 -250
- package/src/components/ToastNotification.vue +0 -257
- package/src/components/Tooltip.vue +0 -25
- package/src/components/Workbook/Sheet.vue +0 -185
- package/src/components/Workbook/Workbook.vue +0 -231
- package/src/components/Workbook/WorkbookAddButton.vue +0 -17
- package/src/components/Workbook/index.ts +0 -3
- package/src/components/Workbook/types.ts +0 -43
- package/src/composables/useKeyStroke.ts +0 -291
- package/src/composables/useNotifications.ts +0 -206
- package/src/composables/useTheme.ts +0 -55
- package/src/core/config.ts +0 -37
- package/src/core/index.ts +0 -49
- package/src/css/base.css +0 -148
- package/src/css/input.css +0 -61
- package/src/css/main.css +0 -6
- package/src/css/theme.css +0 -344
- package/src/directives/vRipple.ts +0 -38
- package/src/index.ts +0 -53
- package/src/main.ts +0 -5
- package/src/playground/Playground.vue +0 -429
- package/src/playground/composables/useGetUsers.ts +0 -538
- package/src/playground/demos/AccordionDemo.vue +0 -361
- package/src/playground/demos/AlertDemo.vue +0 -36
- package/src/playground/demos/AvatarDemo.vue +0 -41
- package/src/playground/demos/AvatarUploaderDemo.vue +0 -133
- package/src/playground/demos/BadgeDemo.vue +0 -31
- package/src/playground/demos/BadgesDemo.vue +0 -26
- package/src/playground/demos/ButtonDemo.vue +0 -99
- package/src/playground/demos/ButtonGroupDemo.vue +0 -39
- package/src/playground/demos/ButtonsDemo.vue +0 -111
- package/src/playground/demos/CarouselDemo.vue +0 -135
- package/src/playground/demos/CheckBoxDemo.vue +0 -43
- package/src/playground/demos/ChipDemo.vue +0 -190
- package/src/playground/demos/ChoiceBoxDemo.vue +0 -160
- package/src/playground/demos/ColorPickerDemo.vue +0 -30
- package/src/playground/demos/ColorsDemo.vue +0 -295
- package/src/playground/demos/DataTableDemo.vue +0 -215
- package/src/playground/demos/DatePickerDemo.vue +0 -43
- package/src/playground/demos/DisplayDemo.vue +0 -101
- package/src/playground/demos/DropdownDemo.vue +0 -651
- package/src/playground/demos/FilePickerDemo.vue +0 -175
- package/src/playground/demos/FileTreeDemo.vue +0 -150
- package/src/playground/demos/FormDemo.vue +0 -1144
- package/src/playground/demos/HeatmapDemo.vue +0 -467
- package/src/playground/demos/IconPickerDemo.vue +0 -27
- package/src/playground/demos/InputDemo.vue +0 -80
- package/src/playground/demos/InputsDemo.vue +0 -127
- package/src/playground/demos/LabelDemo.vue +0 -32
- package/src/playground/demos/MasonryDemo.vue +0 -241
- package/src/playground/demos/ModalDemo.vue +0 -67
- package/src/playground/demos/MultiSelectDemo.vue +0 -300
- package/src/playground/demos/NavbarDemo.vue +0 -59
- package/src/playground/demos/NavigationDemo.vue +0 -116
- package/src/playground/demos/OTPInputDemo.vue +0 -170
- package/src/playground/demos/OverlaysDemo.vue +0 -104
- package/src/playground/demos/PaginationDemo.vue +0 -130
- package/src/playground/demos/PricingPlanDemo.vue +0 -110
- package/src/playground/demos/SidePanelDemo.vue +0 -45
- package/src/playground/demos/SidebarMenuDemo.vue +0 -170
- package/src/playground/demos/SliderDemo.vue +0 -48
- package/src/playground/demos/SwitchDemo.vue +0 -40
- package/src/playground/demos/TabesDemo.vue +0 -178
- package/src/playground/demos/TextareaDemo.vue +0 -31
- package/src/playground/demos/ThemeToggleDemo.vue +0 -20
- package/src/playground/demos/TimelineDemo.vue +0 -43
- package/src/playground/demos/ToastDemo.vue +0 -111
- package/src/playground/demos/TooltipDemo.vue +0 -30
- package/src/playground/demos/WorkbookDemo.vue +0 -227
- package/src/types/alert.type.ts +0 -11
- package/src/types/button.ts +0 -36
- package/src/types/buttongroup.type.ts +0 -1
- package/src/types/form.type.ts +0 -75
- package/src/types/index.ts +0 -11
- package/src/types/navbar.type.ts +0 -28
- package/src/types/sidepanel.type.ts +0 -14
- package/src/types/styles.ts +0 -42
- package/src/types/timeline.type.ts +0 -11
- package/src/utils/index.ts +0 -2
- package/src/utils/object.ts +0 -40
- package/tsconfig.app.json +0 -27
- package/tsconfig.json +0 -48
- package/tsconfig.node.json +0 -18
- package/tsconfig.node.tsbuildinfo +0 -1
- package/tsconfig.tsbuildinfo +0 -1
- package/vercel.json +0 -8
- package/vite.config.d.ts +0 -2
- package/vite.config.js +0 -63
- package/vite.config.ts +0 -64
- package/vite.config.vercel.ts +0 -17
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed } from 'vue'
|
|
3
|
-
import Icon from '../Icon.vue'
|
|
4
|
-
|
|
5
|
-
interface Props {
|
|
6
|
-
class?: string
|
|
7
|
-
icon?: string
|
|
8
|
-
open?: boolean
|
|
9
|
-
disabled?: boolean
|
|
10
|
-
index?: number
|
|
11
|
-
showIndex?: boolean
|
|
12
|
-
|
|
13
|
-
// Custom icons from parent/root
|
|
14
|
-
openIcon?: string
|
|
15
|
-
closeIcon?: string
|
|
16
|
-
// Icon Style
|
|
17
|
-
iconVariant?: 'simple' | 'solid' | 'outline' | 'primary' | 'ghost'
|
|
18
|
-
activeIconVariant?: 'simple' | 'solid' | 'outline' | 'primary' | 'ghost'
|
|
19
|
-
chevron?: boolean
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
23
|
-
class: '',
|
|
24
|
-
chevron: true,
|
|
25
|
-
showIndex: false,
|
|
26
|
-
iconVariant: 'simple',
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
const emit = defineEmits<{
|
|
30
|
-
(e: 'click', event: MouseEvent): void
|
|
31
|
-
}>()
|
|
32
|
-
|
|
33
|
-
const handleClick = (e: MouseEvent) => {
|
|
34
|
-
if (props.disabled) return
|
|
35
|
-
emit('click', e)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Icon Logic
|
|
39
|
-
const currentIcon = computed(() => {
|
|
40
|
-
// If specific open/close icons are provided
|
|
41
|
-
if (props.open && props.openIcon) return props.openIcon
|
|
42
|
-
if (!props.open && props.closeIcon) return props.closeIcon
|
|
43
|
-
|
|
44
|
-
// Default chevron behavior
|
|
45
|
-
return 'lucide:chevron-down'
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
const iconRotationClass = computed(() => {
|
|
49
|
-
// Only rotate if we are NOT using distinct icons (i.e. using chevron for both or same icon)
|
|
50
|
-
if (props.openIcon && props.closeIcon) return ''
|
|
51
|
-
return props.open ? 'rotate-180' : ''
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
const currentIconVariant = computed(() => {
|
|
55
|
-
if (props.open && props.activeIconVariant) return props.activeIconVariant
|
|
56
|
-
return props.iconVariant
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
const iconContainerClass = computed(() => {
|
|
60
|
-
const base = 'flex items-center justify-center shrink-0 transition-all duration-300'
|
|
61
|
-
const size = 'h-8 w-8 rounded-full' // Standard click target/visual size for updated designs
|
|
62
|
-
|
|
63
|
-
const variants: Record<string, string> = {
|
|
64
|
-
simple: 'text-muted-foreground bg-transparent',
|
|
65
|
-
solid: 'text-foreground bg-muted',
|
|
66
|
-
outline: 'text-foreground border bg-transparent',
|
|
67
|
-
primary: 'text-primary-dark bg-primary-light',
|
|
68
|
-
ghost: 'text-muted-foreground hover:bg-accent bg-transparent',
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const variantClass = variants[currentIconVariant.value] || variants['simple']
|
|
72
|
-
|
|
73
|
-
// If simple, we might not want the fixed size container unless it's intended to be a button?
|
|
74
|
-
// User requested "customizable it's variant like transparent, solid...".
|
|
75
|
-
// Solid/Outline implies a shape.
|
|
76
|
-
if (currentIconVariant.value === 'simple')
|
|
77
|
-
return `text-muted-foreground group-hover:text-foreground ${iconRotationClass.value}`
|
|
78
|
-
|
|
79
|
-
return `${base} ${size} ${variantClass} ${iconRotationClass.value}`
|
|
80
|
-
})
|
|
81
|
-
</script>
|
|
82
|
-
|
|
83
|
-
<template>
|
|
84
|
-
<button
|
|
85
|
-
type="button"
|
|
86
|
-
class="group flex flex-1 w-full items-center justify-between py-3 text-left font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2"
|
|
87
|
-
:class="[props.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer', props.class]"
|
|
88
|
-
:data-state="props.open ? 'open' : 'closed'"
|
|
89
|
-
:disabled="props.disabled"
|
|
90
|
-
@click="handleClick">
|
|
91
|
-
<div class="flex items-center gap-3">
|
|
92
|
-
<!-- Number Badge -->
|
|
93
|
-
<div
|
|
94
|
-
v-if="showIndex && index !== undefined"
|
|
95
|
-
class="flex items-center justify-center h-7 w-7 rounded-full bg-primary-light text-primary text-xs font-bold shrink-0">
|
|
96
|
-
{{ index }}
|
|
97
|
-
</div>
|
|
98
|
-
|
|
99
|
-
<!-- Item Icon (Leader) -->
|
|
100
|
-
<Icon
|
|
101
|
-
v-if="icon"
|
|
102
|
-
:icon="icon"
|
|
103
|
-
class="h-5 w-5 shrink-0 text-muted-foreground group-hover:text-foreground transition-colors" />
|
|
104
|
-
|
|
105
|
-
<!-- Content Slot -->
|
|
106
|
-
<div class="flex flex-col">
|
|
107
|
-
<slot />
|
|
108
|
-
</div>
|
|
109
|
-
</div>
|
|
110
|
-
|
|
111
|
-
<!-- Expand/Collapse Icon -->
|
|
112
|
-
<slot name="icon">
|
|
113
|
-
<div v-if="chevron || openIcon || closeIcon" :class="iconContainerClass">
|
|
114
|
-
<Icon
|
|
115
|
-
:icon="currentIcon"
|
|
116
|
-
class="h-4 w-4 shrink-0 transition-transform duration-200"
|
|
117
|
-
:class="{ 'rotate-0': currentIconVariant !== 'simple' }" />
|
|
118
|
-
<!-- Note: Rotation handled in container for shapes, or on icon for simple.
|
|
119
|
-
If container rotates, the shadow/border rotates too which is fine for circle,
|
|
120
|
-
but checking logic above: iconContainerClass includes iconRotationClass.
|
|
121
|
-
-->
|
|
122
|
-
</div>
|
|
123
|
-
</slot>
|
|
124
|
-
</button>
|
|
125
|
-
</template>
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { default as Accordion } from './Accordion.vue'
|
|
2
|
-
export { default as AccordionItem } from './AccordionItem.vue'
|
|
3
|
-
export { default as AccordionTrigger } from './AccordionTrigger.vue'
|
|
4
|
-
export { default as AccordionContent } from './AccordionContent.vue'
|
|
5
|
-
export * from './types'
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export interface AccordionItemSchema {
|
|
2
|
-
id: string
|
|
3
|
-
title: string
|
|
4
|
-
description?: string
|
|
5
|
-
content?: string // HTML or text
|
|
6
|
-
bodyComponent?: any // Component to render in body
|
|
7
|
-
disabled?: boolean
|
|
8
|
-
icon?: string
|
|
9
|
-
// Allow any arbitrary data for slots
|
|
10
|
-
[key: string]: any
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type AccordionVariant = 'default' | 'solid' | 'outline' | 'ghost' | 'separated' // Items have gaps between them
|
|
14
|
-
|
|
15
|
-
export interface AccordionProps {
|
|
16
|
-
items?: AccordionItemSchema[]
|
|
17
|
-
modelValue?: string | string[]
|
|
18
|
-
allowMultiple?: boolean
|
|
19
|
-
defaultValue?: string | string[]
|
|
20
|
-
disabled?: boolean
|
|
21
|
-
variant?: AccordionVariant
|
|
22
|
-
|
|
23
|
-
// Layout
|
|
24
|
-
attached?: boolean
|
|
25
|
-
|
|
26
|
-
// Icon Customization
|
|
27
|
-
openIcon?: string
|
|
28
|
-
closeIcon?: string
|
|
29
|
-
iconPosition?: 'left' | 'right'
|
|
30
|
-
iconVariant?: 'simple' | 'solid' | 'outline' | 'primary' | 'ghost'
|
|
31
|
-
activeIconVariant?: 'simple' | 'solid' | 'outline' | 'primary' | 'ghost'
|
|
32
|
-
|
|
33
|
-
// Numbering
|
|
34
|
-
showIndex?: boolean
|
|
35
|
-
|
|
36
|
-
// Classes for deep customization
|
|
37
|
-
class?: string
|
|
38
|
-
itemClass?: string
|
|
39
|
-
triggerClass?: string
|
|
40
|
-
contentClass?: string
|
|
41
|
-
}
|
package/src/components/Alert.vue
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed, ref } from 'vue'
|
|
3
|
-
import Icon from './Icon.vue'
|
|
4
|
-
import type { AlertVariant } from '@/types'
|
|
5
|
-
import Button from './Button.vue'
|
|
6
|
-
|
|
7
|
-
interface Props {
|
|
8
|
-
title?: string
|
|
9
|
-
description?: string
|
|
10
|
-
icon?: string
|
|
11
|
-
variant?: AlertVariant
|
|
12
|
-
closable?: boolean
|
|
13
|
-
role?: 'alert' | 'status' | 'none'
|
|
14
|
-
class?: string
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
18
|
-
variant: 'primary',
|
|
19
|
-
closable: false,
|
|
20
|
-
class: '',
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
const emit = defineEmits<{
|
|
24
|
-
(e: 'close'): void
|
|
25
|
-
}>()
|
|
26
|
-
|
|
27
|
-
const isVisible = ref(true)
|
|
28
|
-
|
|
29
|
-
const handleClose = () => {
|
|
30
|
-
isVisible.value = false
|
|
31
|
-
emit('close')
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const variantClasses = computed(() => {
|
|
35
|
-
const variants: Record<AlertVariant, string> = {
|
|
36
|
-
primary: 'bg-primary-light text-primary border-primary/15',
|
|
37
|
-
success: 'bg-success-light text-success-dark border-success/25',
|
|
38
|
-
warning: 'bg-warning-light text-warning-dark border-warning/20',
|
|
39
|
-
danger: 'bg-danger-light text-danger-dark border-danger/15',
|
|
40
|
-
}
|
|
41
|
-
return variants[props.variant]
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
const iconClasses = computed(() => {
|
|
45
|
-
const variants: Record<AlertVariant, string> = {
|
|
46
|
-
primary: 'text-primary!',
|
|
47
|
-
success: 'text-success-dark!',
|
|
48
|
-
warning: 'text-warning-dark!',
|
|
49
|
-
danger: 'text-danger-dark!',
|
|
50
|
-
}
|
|
51
|
-
return variants[props.variant]
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
const isTitleOnly = computed(() => !props.description && !useSlots().default)
|
|
55
|
-
|
|
56
|
-
// Helper to check if default slot is present (requires import useSlots)
|
|
57
|
-
import { useSlots } from 'vue'
|
|
58
|
-
|
|
59
|
-
const containerClasses = computed(() => {
|
|
60
|
-
return [
|
|
61
|
-
'relative w-full rounded-lg border px-4 [&>svg]:absolute [&>svg]:left-4 [&>svg]:text-foreground',
|
|
62
|
-
isTitleOnly.value ? 'py-3' : 'pt-4 pb-2',
|
|
63
|
-
// Icon Position: Center vertically if title only, otherwise top-4
|
|
64
|
-
isTitleOnly.value
|
|
65
|
-
? '[&>svg]:top-1/2 [&>svg]:-translate-y-1/2'
|
|
66
|
-
: '[&>svg]:top-4 top-4 [&>svg+div]:translate-y-[-3px]',
|
|
67
|
-
variantClasses.value,
|
|
68
|
-
props.class,
|
|
69
|
-
].join(' ')
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
const titleClasses = computed(() => {
|
|
73
|
-
return [
|
|
74
|
-
'font-medium leading-none tracking-tight text-inherit!',
|
|
75
|
-
isTitleOnly.value ? '' : 'mb-1',
|
|
76
|
-
].join(' ')
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
const computedRole = computed(() => {
|
|
80
|
-
if (props.role) return props.role
|
|
81
|
-
return ['danger', 'warning'].includes(props.variant) ? 'alert' : 'status'
|
|
82
|
-
})
|
|
83
|
-
</script>
|
|
84
|
-
|
|
85
|
-
<template>
|
|
86
|
-
<div v-if="isVisible" :class="containerClasses" :role="computedRole">
|
|
87
|
-
<slot name="icon">
|
|
88
|
-
<Icon v-if="icon" :icon="icon" class="h-4 w-4" :class="iconClasses" />
|
|
89
|
-
</slot>
|
|
90
|
-
|
|
91
|
-
<div :class="{ 'pl-7': icon || $slots.icon, 'pr-6': closable }">
|
|
92
|
-
<h5 :class="titleClasses" v-if="title">
|
|
93
|
-
{{ title }}
|
|
94
|
-
</h5>
|
|
95
|
-
<div v-if="description || $slots.default" class="text-sm opacity-90 [&_p]:leading-relaxed">
|
|
96
|
-
<slot>
|
|
97
|
-
{{ description }}
|
|
98
|
-
</slot>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
|
|
102
|
-
<button
|
|
103
|
-
v-if="closable"
|
|
104
|
-
type="button"
|
|
105
|
-
@click="handleClose"
|
|
106
|
-
class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
|
|
107
|
-
:class="[isTitleOnly ? 'top-1/2 -translate-y-1/2' : 'top-4']">
|
|
108
|
-
<Icon icon="lucide:x" class="h-4 w-4" />
|
|
109
|
-
<span class="sr-only">Close</span>
|
|
110
|
-
</button>
|
|
111
|
-
</div>
|
|
112
|
-
</template>
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed, ref, watch } from 'vue'
|
|
3
|
-
import Icon from './Icon.vue'
|
|
4
|
-
import type { AvatarSize, AvatarRounded } from '@/types'
|
|
5
|
-
|
|
6
|
-
interface Props {
|
|
7
|
-
src?: string
|
|
8
|
-
alt?: string
|
|
9
|
-
fallback?: string
|
|
10
|
-
size?: AvatarSize
|
|
11
|
-
rounded?: AvatarRounded
|
|
12
|
-
class?: string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
16
|
-
src: '',
|
|
17
|
-
alt: 'Avatar',
|
|
18
|
-
size: 'md',
|
|
19
|
-
rounded: 'full',
|
|
20
|
-
class: '',
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
const hasError = ref(false)
|
|
24
|
-
const isLoaded = ref(false)
|
|
25
|
-
|
|
26
|
-
// Reset state when src changes
|
|
27
|
-
watch(
|
|
28
|
-
() => props.src,
|
|
29
|
-
() => {
|
|
30
|
-
hasError.value = false
|
|
31
|
-
isLoaded.value = false
|
|
32
|
-
}
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
const onError = () => {
|
|
36
|
-
hasError.value = true
|
|
37
|
-
isLoaded.value = false
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const onLoad = () => {
|
|
41
|
-
isLoaded.value = true
|
|
42
|
-
hasError.value = false
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const showImage = computed(() => {
|
|
46
|
-
return props.src && !hasError.value
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
const initials = computed(() => {
|
|
50
|
-
if (props.fallback) return props.fallback
|
|
51
|
-
|
|
52
|
-
if (!props.alt) return ''
|
|
53
|
-
|
|
54
|
-
const words = props.alt.trim().split(/\s+/)
|
|
55
|
-
if (words.length === 1) {
|
|
56
|
-
return words[0].slice(0, 2).toUpperCase()
|
|
57
|
-
}
|
|
58
|
-
return (words[0][0] + words[words.length - 1][0]).toUpperCase()
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
const sizeClasses: Record<AvatarSize, string> = {
|
|
62
|
-
xs: 'h-6 w-6 text-[10px]',
|
|
63
|
-
sm: 'h-8 w-8 text-xs',
|
|
64
|
-
md: 'h-10 w-10 text-sm',
|
|
65
|
-
lg: 'h-14 w-14 text-base',
|
|
66
|
-
xl: 'h-20 w-20 text-lg',
|
|
67
|
-
'2xl': 'h-22 w-22 text-xl',
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const roundedClasses: Record<AvatarRounded, string> = {
|
|
71
|
-
none: 'rounded-none',
|
|
72
|
-
sm: 'rounded-sm',
|
|
73
|
-
md: 'rounded-md',
|
|
74
|
-
lg: 'rounded-lg',
|
|
75
|
-
xl: 'rounded-xl',
|
|
76
|
-
'2xl': 'rounded-2xl',
|
|
77
|
-
full: 'rounded-full',
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const containerClass = computed(() => {
|
|
81
|
-
return [
|
|
82
|
-
'relative flex shrink-0 overflow-hidden bg-muted border border-border/50',
|
|
83
|
-
sizeClasses[props.size],
|
|
84
|
-
roundedClasses[props.rounded],
|
|
85
|
-
props.class,
|
|
86
|
-
].join(' ')
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
const fallbackClass = computed(() => {
|
|
90
|
-
return 'flex h-full w-full items-center justify-center bg-muted text-muted-foreground font-medium'
|
|
91
|
-
})
|
|
92
|
-
</script>
|
|
93
|
-
|
|
94
|
-
<template>
|
|
95
|
-
<div :class="containerClass">
|
|
96
|
-
<img
|
|
97
|
-
v-if="showImage"
|
|
98
|
-
:src="src"
|
|
99
|
-
:alt="alt"
|
|
100
|
-
class="aspect-square h-full w-full object-cover"
|
|
101
|
-
@error="onError"
|
|
102
|
-
@load="onLoad" />
|
|
103
|
-
<div v-else :class="fallbackClass">
|
|
104
|
-
<slot name="fallback">
|
|
105
|
-
<span v-if="initials">{{ initials }}</span>
|
|
106
|
-
<Icon v-else icon="lucide:user" class="h-1/2 w-1/2" />
|
|
107
|
-
</slot>
|
|
108
|
-
</div>
|
|
109
|
-
</div>
|
|
110
|
-
</template>
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed, ref } from 'vue'
|
|
3
|
-
import Icon from '@/components/Icon.vue'
|
|
4
|
-
import FilePicker from '@/components/FilePicker/FilePicker.vue'
|
|
5
|
-
import type { FilePickerValue } from '@/components/FilePicker/FilePicker.vue'
|
|
6
|
-
import Avatar from '@/components/Avatar.vue'
|
|
7
|
-
import type { AvatarSize, AvatarRounded } from '@/types'
|
|
8
|
-
|
|
9
|
-
defineOptions({
|
|
10
|
-
name: 'AvatarUploader',
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
export interface Props {
|
|
14
|
-
modelValue?: any
|
|
15
|
-
size?: AvatarSize
|
|
16
|
-
rounded?: AvatarRounded
|
|
17
|
-
editable?: boolean
|
|
18
|
-
loading?: boolean
|
|
19
|
-
disabled?: boolean
|
|
20
|
-
fallback?: string
|
|
21
|
-
alt?: string
|
|
22
|
-
maxSize?: number
|
|
23
|
-
className?: string
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
27
|
-
modelValue: null,
|
|
28
|
-
size: 'xl',
|
|
29
|
-
rounded: 'full',
|
|
30
|
-
editable: true,
|
|
31
|
-
loading: false,
|
|
32
|
-
disabled: false,
|
|
33
|
-
alt: 'Avatar',
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
const emit = defineEmits<{
|
|
37
|
-
(e: 'update:modelValue', value: string | null): void
|
|
38
|
-
(e: 'change', value: FilePickerValue | null): void
|
|
39
|
-
(e: 'error', error: string): void
|
|
40
|
-
}>()
|
|
41
|
-
|
|
42
|
-
const previewUrl = ref<string | null>(null)
|
|
43
|
-
|
|
44
|
-
const currentImage = computed(() => {
|
|
45
|
-
return previewUrl.value || props.modelValue
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
const handleFileChange = (fileVal: FilePickerValue | FilePickerValue[] | null) => {
|
|
49
|
-
if (!fileVal || Array.isArray(fileVal)) {
|
|
50
|
-
if (Array.isArray(fileVal) && fileVal.length === 0) {
|
|
51
|
-
handleRemove()
|
|
52
|
-
}
|
|
53
|
-
return
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (fileVal.base64) {
|
|
57
|
-
previewUrl.value = fileVal.base64
|
|
58
|
-
emit('update:modelValue', fileVal.base64)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
emit('change', fileVal)
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const handleError = (err: string) => {
|
|
65
|
-
emit('error', err)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const handleRemove = () => {
|
|
69
|
-
previewUrl.value = null
|
|
70
|
-
emit('update:modelValue', null)
|
|
71
|
-
emit('change', null)
|
|
72
|
-
}
|
|
73
|
-
</script>
|
|
74
|
-
|
|
75
|
-
<template>
|
|
76
|
-
<div class="inline-block">
|
|
77
|
-
<div
|
|
78
|
-
class="relative inline-block group"
|
|
79
|
-
:class="rounded === 'full' ? 'rounded-full' : 'rounded-md'">
|
|
80
|
-
<Avatar
|
|
81
|
-
:src="currentImage || undefined"
|
|
82
|
-
:fallback="fallback"
|
|
83
|
-
:alt="alt"
|
|
84
|
-
:size="size"
|
|
85
|
-
:rounded="rounded"
|
|
86
|
-
:class="className" />
|
|
87
|
-
|
|
88
|
-
<FilePicker
|
|
89
|
-
:disabled="!editable || disabled || loading"
|
|
90
|
-
:return-format="'base64'"
|
|
91
|
-
:file-types="['image/jpeg', 'image/png', 'image/webp', 'image/gif']"
|
|
92
|
-
:max-size="maxSize"
|
|
93
|
-
class="absolute inset-0"
|
|
94
|
-
@change="(v: any) => handleFileChange(v)"
|
|
95
|
-
@error="handleError">
|
|
96
|
-
<template #trigger="{ trigger, isLoading }">
|
|
97
|
-
<button
|
|
98
|
-
type="button"
|
|
99
|
-
class="absolute inset-0 cursor-pointer"
|
|
100
|
-
:class="{ 'cursor-default': !editable || disabled }"
|
|
101
|
-
@click="editable && !disabled ? trigger() : null">
|
|
102
|
-
<div
|
|
103
|
-
v-if="loading || isLoading"
|
|
104
|
-
class="absolute inset-0 flex items-center justify-center bg-black/40 text-white"
|
|
105
|
-
:class="rounded === 'full' ? 'rounded-full' : 'rounded-md'">
|
|
106
|
-
<Icon icon="lucide:loader-2" class="animate-spin w-1/3 h-1/3" />
|
|
107
|
-
</div>
|
|
108
|
-
|
|
109
|
-
<div
|
|
110
|
-
v-else-if="editable && !disabled"
|
|
111
|
-
class="absolute inset-0 flex items-center justify-center bg-black/40 text-white opacity-0 group-hover:opacity-100 transition-opacity"
|
|
112
|
-
:class="rounded === 'full' ? 'rounded-full' : 'rounded-md'">
|
|
113
|
-
<Icon icon="lucide:camera" class="w-1/3 h-1/3" />
|
|
114
|
-
</div>
|
|
115
|
-
</button>
|
|
116
|
-
</template>
|
|
117
|
-
</FilePicker>
|
|
118
|
-
|
|
119
|
-
<button
|
|
120
|
-
v-if="currentImage && editable && !disabled && !loading"
|
|
121
|
-
type="button"
|
|
122
|
-
class="absolute -top-1 -right-1 z-10 p-1 bg-background border border-border rounded-full text-muted-foreground shadow-sm hover:text-destructive hover:border-destructive transition-all opacity-0 group-hover:opacity-100 scale-75 group-hover:scale-100"
|
|
123
|
-
@click.stop="handleRemove"
|
|
124
|
-
title="Remove image">
|
|
125
|
-
<Icon icon="lucide:x" class="w-3 h-3" />
|
|
126
|
-
</button>
|
|
127
|
-
</div>
|
|
128
|
-
</div>
|
|
129
|
-
</template>
|
package/src/components/Badge.vue
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed } from 'vue'
|
|
3
|
-
|
|
4
|
-
export type BadgeVariant =
|
|
5
|
-
| 'default'
|
|
6
|
-
| 'secondary'
|
|
7
|
-
| 'danger'
|
|
8
|
-
| 'outline'
|
|
9
|
-
| 'warning'
|
|
10
|
-
| 'info'
|
|
11
|
-
| 'success'
|
|
12
|
-
|
|
13
|
-
interface Props {
|
|
14
|
-
variant?: BadgeVariant
|
|
15
|
-
class?: string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
19
|
-
variant: 'default',
|
|
20
|
-
class: '',
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
const classes = computed(() => {
|
|
24
|
-
const baseClasses =
|
|
25
|
-
'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2'
|
|
26
|
-
|
|
27
|
-
const variants: Record<BadgeVariant, string> = {
|
|
28
|
-
default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',
|
|
29
|
-
secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
|
30
|
-
danger: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
|
|
31
|
-
warning: 'border-transparent bg-warning text-warning-fg hover:bg-warning/80',
|
|
32
|
-
info: 'border-transparent bg-info text-info-fg hover:bg-info/80',
|
|
33
|
-
success: 'border-transparent bg-success text-success-fg hover:bg-success/80',
|
|
34
|
-
outline: 'text-foreground border-border',
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return [baseClasses, variants[props.variant], props.class].join(' ')
|
|
38
|
-
})
|
|
39
|
-
</script>
|
|
40
|
-
|
|
41
|
-
<template>
|
|
42
|
-
<div :class="classes">
|
|
43
|
-
<slot />
|
|
44
|
-
</div>
|
|
45
|
-
</template>
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed, useSlots } from 'vue'
|
|
3
|
-
import Icon from './Icon.vue'
|
|
4
|
-
import { vRipple } from '../directives/vRipple'
|
|
5
|
-
import type { ButtonVariant, ButtonSize, ButtonRounded, ButtonProps } from '@/types'
|
|
6
|
-
|
|
7
|
-
const props = withDefaults(defineProps<ButtonProps>(), {
|
|
8
|
-
variant: 'primary',
|
|
9
|
-
size: 'md',
|
|
10
|
-
type: 'button',
|
|
11
|
-
rounded: 'md',
|
|
12
|
-
disabled: false,
|
|
13
|
-
loading: false,
|
|
14
|
-
class: '',
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
const slots = useSlots()
|
|
18
|
-
const isOnlyIcon = computed(() => props.icon && !props.text && !slots.default)
|
|
19
|
-
|
|
20
|
-
const classes = computed(() => {
|
|
21
|
-
const baseClasses =
|
|
22
|
-
'inline-flex items-center justify-center whitespace-nowrap text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 active:scale-95 cursor-pointer'
|
|
23
|
-
|
|
24
|
-
const variants: Record<ButtonVariant, string> = {
|
|
25
|
-
primary: 'bg-primary text-primary-foreground hover:bg-primary/90',
|
|
26
|
-
'primary-light': 'bg-primary-light text-primary-fg-light hover:bg-primary/20',
|
|
27
|
-
secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
|
28
|
-
danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
|
|
29
|
-
'danger-light': 'bg-destructive/10 text-destructive hover:bg-destructive/20',
|
|
30
|
-
warning: 'bg-warning text-warning-fg hover:bg-warning/80',
|
|
31
|
-
'warning-light': 'bg-warning-light text-warning-fg-light hover:bg-warning/20',
|
|
32
|
-
info: 'bg-info text-info-fg hover:bg-info/80',
|
|
33
|
-
'info-light': 'bg-info-light text-info-fg-light hover:bg-info/20',
|
|
34
|
-
success: 'bg-success text-success-fg hover:bg-success/80',
|
|
35
|
-
'success-light': 'bg-success-light text-success-fg-light hover:bg-success/20',
|
|
36
|
-
|
|
37
|
-
outline:
|
|
38
|
-
'border border-input bg-background hover:bg-accent hover:text-accent-foreground text-foreground',
|
|
39
|
-
'outline-primary': 'border border-primary text-primary hover:bg-primary/10',
|
|
40
|
-
'outline-danger': 'border border-destructive text-destructive hover:bg-destructive/10',
|
|
41
|
-
'outline-warning': 'border border-warning text-warning hover:bg-warning/10',
|
|
42
|
-
'outline-info': 'border border-info text-info hover:bg-info/10',
|
|
43
|
-
'outline-success': 'border border-success text-success hover:bg-success/10',
|
|
44
|
-
|
|
45
|
-
ghost: 'hover:bg-accent hover:text-accent-foreground text-foreground',
|
|
46
|
-
link: 'text-primary underline-offset-4 hover:underline',
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const sizes: Record<ButtonSize, string> = {
|
|
50
|
-
xs: 'h-6.5 px-2',
|
|
51
|
-
sm: 'h-8 px-3',
|
|
52
|
-
md: 'h-9 px-4 py-2',
|
|
53
|
-
lg: 'h-10 px-8',
|
|
54
|
-
xl: 'h-12 px-10',
|
|
55
|
-
}
|
|
56
|
-
const iconSizes: Record<ButtonSize, string> = {
|
|
57
|
-
xs: 'h-6.5 w-6.5 min-h-6.5 min-w-6.5',
|
|
58
|
-
sm: 'h-8 w-8 min-h-9 min-w-9',
|
|
59
|
-
md: 'h-9 w-9 min-h-9 min-w-9',
|
|
60
|
-
lg: 'h-10 w-10 min-h-11 min-w-11',
|
|
61
|
-
xl: 'h-12 w-12 min-h-12 min-w-12',
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const roundedVariants: Record<ButtonRounded, string> = {
|
|
65
|
-
none: 'rounded-none',
|
|
66
|
-
sm: 'rounded-sm',
|
|
67
|
-
md: 'rounded',
|
|
68
|
-
lg: 'rounded-lg',
|
|
69
|
-
xl: 'rounded-xl',
|
|
70
|
-
'2xl': 'rounded-2xl',
|
|
71
|
-
full: 'rounded-full',
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return [
|
|
75
|
-
baseClasses,
|
|
76
|
-
variants[props.variant],
|
|
77
|
-
roundedVariants[props.rounded],
|
|
78
|
-
isOnlyIcon.value ? iconSizes[props.size] : sizes[props.size],
|
|
79
|
-
props.class,
|
|
80
|
-
].join(' ')
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
const iconClasses = computed(() => {
|
|
84
|
-
const sizes: Record<ButtonSize, string> = {
|
|
85
|
-
xs: 'w-3 h-3',
|
|
86
|
-
sm: 'w-4 h-4',
|
|
87
|
-
md: 'w-4 h-4',
|
|
88
|
-
lg: 'w-4 h-4',
|
|
89
|
-
xl: 'w-4 h-4',
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return sizes[props.size]
|
|
93
|
-
})
|
|
94
|
-
</script>
|
|
95
|
-
|
|
96
|
-
<template>
|
|
97
|
-
<button v-ripple :type="type" :class="classes" :disabled="disabled || loading">
|
|
98
|
-
<Icon
|
|
99
|
-
v-if="loading"
|
|
100
|
-
icon="lucide:loader-2"
|
|
101
|
-
class="mr-2 animate-spin"
|
|
102
|
-
:class="{ 'mr-0': isOnlyIcon, [iconClasses]: true }" />
|
|
103
|
-
|
|
104
|
-
<!-- Icon logic: center if only icon -->
|
|
105
|
-
<Icon
|
|
106
|
-
v-else-if="icon"
|
|
107
|
-
:icon="icon"
|
|
108
|
-
:class="{
|
|
109
|
-
'mr-2': $slots.default || text,
|
|
110
|
-
'mx-auto': isOnlyIcon,
|
|
111
|
-
[iconClasses]: true,
|
|
112
|
-
}" />
|
|
113
|
-
|
|
114
|
-
<slot>{{ text }}</slot>
|
|
115
|
-
|
|
116
|
-
<Icon
|
|
117
|
-
v-if="iconRight && !loading"
|
|
118
|
-
:icon="iconRight"
|
|
119
|
-
:class="iconClasses"
|
|
120
|
-
class="ml-2 h-4 w-4" />
|
|
121
|
-
</button>
|
|
122
|
-
</template>
|