├── .eslintignore ├── .github └── workflows │ ├── ci.yaml │ └── production.yaml ├── .gitignore ├── .husky └── pre-commit ├── .prettierignore ├── .prettierrc ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── Contribute.md ├── License ├── README.md ├── Routes └── routes.ts ├── commitlint.config.cjs ├── components ├── Command │ ├── Command.vue │ ├── CommandDialog.vue │ ├── CommandEmpty.vue │ ├── CommandGroup.vue │ ├── CommandInput.vue │ ├── CommandItem.vue │ ├── CommandList.vue │ ├── CommandSeparator.vue │ └── CommandShortcut.vue ├── DocSidebar.vue ├── DocsContentLayout.vue ├── EditPage.vue ├── Footer.vue ├── HeaderComponent.vue ├── Hero.vue ├── NotFound.vue ├── SearchBar.vue ├── TableOfContent.vue ├── ThemeSwitcher.vue └── content │ ├── CodeHighlight.vue │ ├── CodeHighlightWithPreview.vue │ ├── ComponentApiTable.vue │ ├── PropertiesTable.vue │ └── docs │ ├── components │ ├── accordion │ │ ├── AccordionApi.vue │ │ ├── AccordionCode.ts │ │ └── variant │ │ │ ├── AccordionOpenFirstPanel.vue │ │ │ ├── AccordionWithCustomIcon.vue │ │ │ ├── AccordionWithoutIcon.vue │ │ │ ├── DefaultAccordion.vue │ │ │ ├── DisabledAccordion.vue │ │ │ └── FlushAccordion.vue │ ├── alert │ │ ├── AlertApi.vue │ │ ├── AlertCode.ts │ │ ├── AlertColorVariant.vue │ │ ├── AlertWithBgColor.vue │ │ ├── AlertWithDismissIcon.vue │ │ └── DefaultAlert.vue │ ├── avatar │ │ ├── AvatarWithGroup.vue │ │ ├── AvatarWithStatus.vue │ │ ├── DefaultAvatar.vue │ │ └── avatarCode.ts │ ├── badge │ │ ├── BadgeApi.vue │ │ ├── ColorsOfBadge.vue │ │ ├── DefaultBadge.vue │ │ ├── VariantOfBadge.vue │ │ └── badgeCode.ts │ ├── breadcrumb │ │ ├── ApiReference │ │ │ ├── BreadcrumbItemApi.vue │ │ │ ├── BreadcrumbLinkApi.vue │ │ │ ├── BreadcrumbListApi.vue │ │ │ └── BreadcrumbPageApi.vue │ │ ├── breadcrumbCode.ts │ │ └── variant │ │ │ ├── BreadcrumbActiveOutline.vue │ │ │ ├── BreadcrumbDividerIcon.vue │ │ │ ├── BreadcrumbWitEllipsis.vue │ │ │ ├── BreadcrumbWithBorder.vue │ │ │ └── DefaultBreadcrumb.vue │ ├── button │ │ ├── ButtonApi.vue │ │ ├── buttonCode.ts │ │ └── variant │ │ │ ├── ButtonColorVariant.vue │ │ │ ├── ButtonLinkVariant.vue │ │ │ ├── ButtonOutlineVariant.vue │ │ │ ├── ButtonPrimary.vue │ │ │ ├── ButtonRadiusVariant.vue │ │ │ ├── ButtonShapeVariant.vue │ │ │ ├── ButtonSizeVariant.vue │ │ │ ├── ButtonSoftBgVariant.vue │ │ │ ├── ButtonWithLeftSideIcon.vue │ │ │ └── ButtonWithRightSideIcon.vue │ ├── buttonGroup │ │ ├── ButtonGroupApi.vue │ │ ├── ButtonGroupSize.vue │ │ ├── ButtonGroupWithIcon.vue │ │ ├── ButtonGroupWithOnlyIcon.vue │ │ ├── DefaultButtonGroup.vue │ │ └── buttonGroupCode.ts │ ├── card │ │ ├── CardWithAvatar.vue │ │ ├── DefaultCard.vue │ │ ├── ProductCard.vue │ │ ├── RegisterCard.vue │ │ └── cardCode.ts │ ├── carousel │ │ ├── CarouselApi.vue │ │ ├── CarouselIndicatorsApi.vue │ │ ├── CarouselWithAutoPlay.vue │ │ ├── CarouselWithClassNames.vue │ │ ├── CarouselWithLoop.vue │ │ ├── DefaultCarousel.vue │ │ ├── SlidesToScroll.vue │ │ └── carouselCode.ts │ ├── checkbox │ │ ├── CheckboxApi.vue │ │ ├── CheckboxVariant.vue │ │ ├── DefaultCheckbox.vue │ │ └── checkboxCode.ts │ ├── datePicker │ │ ├── CircleDatePicker.vue │ │ ├── CustomDateTrigger.vue │ │ ├── DatePickerAPi.vue │ │ ├── DateRangePicker.vue │ │ ├── DefaultDatePicker.vue │ │ ├── MultipleDatePicker.vue │ │ ├── MultipleDateRangePicker.vue │ │ └── datePickerCodes.ts │ ├── divider │ │ ├── DefaultDivider.vue │ │ ├── DividerAlign.vue │ │ ├── DividerApi.vue │ │ ├── DividerColor.vue │ │ ├── DividerSize.vue │ │ └── dividerCode.ts │ ├── drawer │ │ ├── DefaultDrawer.vue │ │ ├── DrawerPosition.vue │ │ ├── api │ │ │ ├── DrawerApi.vue │ │ │ └── DrawerContentApi.vue │ │ └── drawerCode.ts │ ├── dropdown │ │ ├── CustomDropdown.vue │ │ ├── DefaultDropdown.vue │ │ ├── DropdownWithArrowIcon.vue │ │ ├── DropdownWithCheckbox.vue │ │ ├── DropdownWithIcon.vue │ │ ├── DropdownWithRadio.vue │ │ ├── DropdownWithSubmenu.vue │ │ ├── api │ │ │ ├── DropDownApi.vue │ │ │ ├── DropDownCheckboxItemApi.vue │ │ │ ├── DropDownContentApi.vue │ │ │ ├── DropDownRadioGroupApi.vue │ │ │ └── DropDownRadioItemApi.vue │ │ └── dropdownCode.ts │ ├── empty │ │ ├── DefaultEmpty.vue │ │ ├── EmptyFolder.vue │ │ ├── NoDataFound.vue │ │ ├── NoResultPage.vue │ │ ├── NotFoundPage.vue │ │ ├── PageNotAvailable.vue │ │ └── emptyCode.ts │ ├── input │ │ ├── DefaultInput.vue │ │ ├── DisabledInput.vue │ │ ├── InputApi.vue │ │ ├── InputUseCases.vue │ │ ├── InputWithIcon.vue │ │ ├── LabelInput.vue │ │ └── inputCode.ts │ ├── inputOTP │ │ ├── DefaultInputOtp.vue │ │ ├── InputOtpApi.vue │ │ ├── InputOtpSeparator.vue │ │ └── inputOTPCode.ts │ ├── modal │ │ ├── CustomizeModal.vue │ │ ├── DefaultModal.vue │ │ ├── ModalApi.vue │ │ └── modalCode.ts │ ├── notification │ │ ├── DefaultNotification.vue │ │ ├── NotificationApi.vue │ │ ├── NotificationPosition.vue │ │ ├── NotificationWithCard.vue │ │ └── notificationCode.ts │ ├── numberInput │ │ ├── DefaultNumberInput.vue │ │ └── numberInputCode.ts │ ├── pagination │ │ ├── Api │ │ │ ├── PaginationAPi.vue │ │ │ ├── PaginationItemApi.vue │ │ │ └── PaginationNavigatorApi.vue │ │ ├── paginationCode.ts │ │ └── variants │ │ │ ├── DefaultPagination.vue │ │ │ ├── PaginationNavigatorWithIcon.vue │ │ │ ├── PaginationNavigatorWithText.vue │ │ │ ├── PaginationShape.vue │ │ │ └── PaginationWithInput.vue │ ├── popover │ │ ├── CardPopover.vue │ │ ├── DefaultPopover.vue │ │ ├── IconPopover.vue │ │ ├── PopoverApi.vue │ │ ├── PopoverContentApi.vue │ │ └── popoverCode.ts │ ├── progress │ │ ├── CircleProgressApi.vue │ │ ├── CustomizeCircleProgress.vue │ │ ├── CustomizeLineProgress.vue │ │ ├── DefaultLineProgress.vue │ │ ├── DefaultProgress.vue │ │ ├── LineProgressApi.vue │ │ └── progressCode.ts │ ├── radio │ │ ├── DefaultRadio.vue │ │ ├── RadioAPi.vue │ │ ├── RadioVariant.vue │ │ └── radioCode.ts │ ├── rating │ │ ├── DefaultRating.vue │ │ ├── RatingApi.vue │ │ ├── RatingTypes.vue │ │ ├── StarApi.vue │ │ ├── ValueFromRating.vue │ │ └── ratingCode.ts │ ├── select │ │ ├── DefaultSelect.vue │ │ ├── SelectActionWithIcon.vue │ │ ├── SelectApi.vue │ │ ├── SelectItemWithIcon.vue │ │ └── selectCode.ts │ ├── skeleton │ │ ├── CommentLayout.vue │ │ ├── DefaultSkeleton.vue │ │ ├── ParagraphSkeleton.vue │ │ ├── PostSkeleton.vue │ │ ├── SkeletonWithoutAnimation.vue │ │ ├── skeletonApi.vue │ │ └── skeletonCode.ts │ ├── slider │ │ ├── DefaultSlider.vue │ │ ├── DoubleSlider.vue │ │ ├── SliderApi.vue │ │ └── sliderCode.ts │ ├── spinner │ │ ├── DefaultSpinner.vue │ │ ├── SpinnerApi.vue │ │ ├── SpinnerColors.vue │ │ └── spinnerCode.ts │ ├── steps │ │ ├── DefaultStep.vue │ │ ├── StepLineApi.vue │ │ ├── StepPointApi.vue │ │ ├── StepWithBorder.vue │ │ ├── StepWithIcon.vue │ │ └── stepCode.ts │ ├── switch │ │ ├── DefaultSwitch.vue │ │ ├── DisabledSwitch.vue │ │ ├── SwitchApi.vue │ │ ├── SwitchCode.ts │ │ └── SwitchWithIcon.vue │ ├── table │ │ ├── DefaultTable.vue │ │ ├── OrdersTable.vue │ │ ├── ProductTable.vue │ │ ├── TableData.ts │ │ ├── TeamTable.vue │ │ └── tableCode.ts │ ├── tabs │ │ ├── DefaultTabs.vue │ │ ├── TabsApi.vue │ │ ├── TabsFill.vue │ │ ├── TabsItemApi.vue │ │ ├── TabsUnderline.vue │ │ ├── TabsWithIcon.vue │ │ └── tabsCode.ts │ ├── textarea │ │ ├── DefaultTextArea.vue │ │ ├── DisabledTextArea.vue │ │ ├── TextAreaWithForm.vue │ │ ├── TextAreaWithHelperText.vue │ │ ├── TextareaApi.vue │ │ └── textareaCode.ts │ ├── timeLine │ │ ├── DashedBorderTimeline.vue │ │ ├── DefaultTimeline.vue │ │ ├── DottedBorderTimeline.vue │ │ ├── TimelineWithImage.vue │ │ └── timelineCode.ts │ ├── toast │ │ ├── DefaultToast.vue │ │ ├── NuxtConfigForToast.vue │ │ ├── NuxtpluginForToast.vue │ │ ├── ToastSetupCode.vue │ │ ├── ToastVariant.vue │ │ ├── ToastWithAction.vue │ │ ├── ToastWithDescription.vue │ │ ├── ToastWithPromise.vue │ │ ├── ToastWrapperCode.vue │ │ └── toastCode.ts │ ├── tooltip │ │ ├── DefaultTooltip.vue │ │ ├── ToolTipColorVariant.vue │ │ ├── TooltipApi.vue │ │ ├── TooltipContentApi.vue │ │ ├── TooltipPlacement.vue │ │ ├── TooltipWithLargeText.vue │ │ ├── tooltipApiData.ts │ │ └── tooltipCode.ts │ └── upload │ │ ├── DefaultUpload.vue │ │ ├── HorizontalUpload.vue │ │ ├── SingleUpload.vue │ │ ├── UploadApi.vue │ │ ├── UploadDisabled.vue │ │ └── uploadCode.ts │ └── getting-started │ ├── colors │ ├── CodeBox.vue │ ├── ColorsApi.ts │ ├── ColorsTable.vue │ └── CustomizeSteps.vue │ ├── dark-mode │ ├── DarkModeForNuxt.vue │ ├── DarkModeForVue.vue │ ├── ThemeSwitcherForDoc.vue │ └── darkModeCodes.ts │ ├── introduction │ ├── IntroductionForNuxt.vue │ ├── IntroductionForVue.vue │ └── introductionCode.ts │ └── typography │ ├── TypographyAPI.ts │ ├── content │ ├── TypographyBodyContent.vue │ ├── TypographyDisplayContent.vue │ └── TypographyHeadingContent.vue │ ├── typographyCode.ts │ └── variant │ ├── TypographyBody.vue │ ├── TypographyDisplay.vue │ └── TypographyHeading.vue ├── content └── docs │ ├── components │ ├── accordion.md │ ├── alert.md │ ├── avatar.md │ ├── badge.md │ ├── breadcrumb.md │ ├── button-group.md │ ├── button.md │ ├── card.md │ ├── carousel.md │ ├── checkbox.md │ ├── date-picker.md │ ├── divider.md │ ├── drawer.md │ ├── dropdown.md │ ├── empty.md │ ├── input-otp.md │ ├── input.md │ ├── modal.md │ ├── notification.md │ ├── number-input.md │ ├── pagination.md │ ├── popover.md │ ├── progress.md │ ├── radio.md │ ├── rating.md │ ├── select.md │ ├── skeleton.md │ ├── slider.md │ ├── spinner.md │ ├── steps.md │ ├── switch.md │ ├── table.md │ ├── tabs.md │ ├── textarea.md │ ├── timeline.md │ ├── toast.md │ ├── tooltip.md │ └── upload.md │ ├── getting-started │ ├── 1.introduction.md │ ├── 2.typography.md │ ├── 3.colors.md │ └── 4.dark-mode.md │ └── layout │ ├── 1.container.md │ ├── 2.column.md │ ├── 3.flex.md │ └── 4.grid.md ├── error.vue ├── eslint.config.mjs ├── layouts ├── default.vue └── docs.vue ├── nuxt.config.ts ├── package.json ├── pages ├── [...slug].vue ├── blog │ └── index.vue ├── index.vue └── test │ └── index.vue ├── plugins ├── highlight.client.ts └── sonner.client.ts ├── public ├── apple-touch-icon.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── images │ ├── avatar │ │ ├── avatar-1.png │ │ ├── avatar-2.png │ │ ├── avatar-3.png │ │ ├── avatar-4.png │ │ ├── avatar-5.png │ │ ├── default-avatar.svg │ │ └── verify.svg │ ├── company │ │ ├── Visa.png │ │ ├── mastercard.png │ │ ├── paypal.png │ │ ├── stripe.png │ │ └── western.png │ ├── home │ │ ├── community.svg │ │ └── hero-1.png │ ├── icon │ │ ├── CloudArrowUp.svg │ │ ├── CloudArrowUpDark.svg │ │ ├── Series.png │ │ ├── X.svg │ │ ├── checkedDark.svg │ │ ├── checkedLight.svg │ │ ├── country-0.svg │ │ ├── country-1.svg │ │ ├── country-2.svg │ │ ├── country-4.svg │ │ ├── country-5.svg │ │ ├── dashedDark.svg │ │ ├── dashedLight.svg │ │ ├── discord.svg │ │ ├── figma.svg │ │ ├── file.svg │ │ ├── folder.svg │ │ ├── github-dark.svg │ │ ├── github-white.svg │ │ ├── github.svg │ │ ├── google.svg │ │ ├── plus.png │ │ └── pricing.png │ ├── keep-card.jpg │ ├── keep-dark.svg │ ├── keep.svg │ ├── readme.png │ └── series │ │ ├── series-1.svg │ │ ├── series-2.svg │ │ ├── series-3.svg │ │ ├── series-4.svg │ │ └── series-5.svg └── site.webmanifest ├── server └── tsconfig.json ├── src ├── components │ ├── Accordion │ │ ├── Accordion.vue │ │ ├── AccordionContainer.vue │ │ ├── AccordionContent.vue │ │ ├── AccordionIcon.vue │ │ ├── AccordionPanel.vue │ │ ├── AccordionTitle.vue │ │ ├── accordionTheme.ts │ │ └── useAccordionStore.ts │ ├── Alert │ │ ├── Alert.vue │ │ ├── AlertContainer.vue │ │ ├── AlertDescription.vue │ │ ├── AlertDismiss.vue │ │ ├── AlertIcon.vue │ │ ├── AlertLink.vue │ │ ├── AlertTitle.vue │ │ ├── alertTheme.ts │ │ └── useAlert.ts │ ├── Avatar │ │ ├── Avatar.vue │ │ ├── AvatarFallback.vue │ │ ├── AvatarGroup.vue │ │ └── AvatarImage.vue │ ├── Badge │ │ ├── Badge.vue │ │ └── badgeTheme.ts │ ├── Breadcrumb │ │ ├── Breadcrumb.vue │ │ ├── BreadcrumbDivider.vue │ │ ├── BreadcrumbEllipsis.vue │ │ ├── BreadcrumbItem.vue │ │ ├── BreadcrumbLink.vue │ │ ├── BreadcrumbList.vue │ │ └── BreadcrumbPage.vue │ ├── Button │ │ ├── Button.vue │ │ └── buttonTheme.ts │ ├── ButtonGroup │ │ └── ButtonGroup.vue │ ├── Calender │ │ ├── Calendar.vue │ │ ├── CalendarCell.vue │ │ ├── CalendarCellTrigger.vue │ │ ├── CalendarGrid.vue │ │ ├── CalendarGridBody.vue │ │ ├── CalendarGridHead.vue │ │ ├── CalendarGridRow.vue │ │ ├── CalendarHeadCell.vue │ │ ├── CalendarHeader.vue │ │ ├── CalendarHeading.vue │ │ ├── CalendarNextButton.vue │ │ ├── CalendarPrevButton.vue │ │ ├── CalendarTypes.ts │ │ └── useCalenderStore.ts │ ├── Card │ │ ├── Card.vue │ │ ├── CardContent.vue │ │ ├── CardDescription.vue │ │ ├── CardFooter.vue │ │ ├── CardHeader.vue │ │ └── CardTitle.vue │ ├── Carousel │ │ ├── Carousel.vue │ │ ├── CarouselButtons.vue │ │ ├── CarouselControl.vue │ │ ├── CarouselIndicators.vue │ │ ├── CarouselItem.vue │ │ ├── CarouselNextButton.vue │ │ ├── CarouselPrevButton.vue │ │ ├── CarouselSlides.vue │ │ ├── CarouselViewport.vue │ │ ├── DotButton.vue │ │ ├── carouselTheme.ts │ │ ├── interface.ts │ │ └── useCarousel.ts │ ├── Checkbox │ │ └── Checkbox.vue │ ├── Divider │ │ ├── Divider.vue │ │ └── theme.ts │ ├── Drawer │ │ ├── Drawer.vue │ │ ├── DrawerBar.vue │ │ ├── DrawerContent.vue │ │ ├── DrawerDescription.vue │ │ ├── DrawerFooter.vue │ │ ├── DrawerHeader.vue │ │ ├── DrawerOverlay.vue │ │ ├── DrawerTitle.vue │ │ ├── drawerTheme.ts │ │ └── useDrawerStore.ts │ ├── Dropdown │ │ ├── Dropdown.vue │ │ ├── DropdownAction.vue │ │ ├── DropdownArrow.vue │ │ ├── DropdownCheckboxItem.vue │ │ ├── DropdownContent.vue │ │ ├── DropdownDivider.vue │ │ ├── DropdownGroup.vue │ │ ├── DropdownItem.vue │ │ ├── DropdownLabel.vue │ │ ├── DropdownList.vue │ │ ├── DropdownRadioGroup.vue │ │ ├── DropdownRadioItem.vue │ │ ├── DropdownShortcut.vue │ │ ├── DropdownSub.vue │ │ ├── DropdownSubAction.vue │ │ ├── DropdownSubContent.vue │ │ └── dropdownTheme.ts │ ├── Empty │ │ ├── Empty.vue │ │ ├── EmptyDescription.vue │ │ ├── EmptyImage.vue │ │ ├── EmptyTitle.vue │ │ └── emptyTheme.ts │ ├── Helpers │ │ └── VisuallyHidden.vue │ ├── Input │ │ ├── Input.vue │ │ ├── InputIcon.vue │ │ └── inputTheme.ts │ ├── InputOTP │ │ ├── InputOTP.vue │ │ ├── InputOTPDivider.vue │ │ ├── InputOTPGroup.vue │ │ └── InputOTPInputField.vue │ ├── Label │ │ └── Label.vue │ ├── Modal │ │ ├── Modal.vue │ │ ├── ModalAction.vue │ │ ├── ModalClose.vue │ │ ├── ModalContent.vue │ │ ├── ModalDescription.vue │ │ ├── ModalFooter.vue │ │ ├── ModalHeader.vue │ │ └── ModalTitle.vue │ ├── Notification │ │ ├── Notification.vue │ │ ├── NotificationAction.vue │ │ ├── NotificationClose.vue │ │ ├── NotificationContent.vue │ │ ├── NotificationDescription.vue │ │ ├── NotificationFooter.vue │ │ ├── NotificationTitle.vue │ │ ├── notificationTheme.ts │ │ └── useNotification.ts │ ├── NumberInput │ │ ├── NumberInput.vue │ │ ├── NumberInputBox.vue │ │ └── NumberInputButton.vue │ ├── Pagination │ │ ├── Pagination.vue │ │ ├── PaginationGoTo.vue │ │ ├── PaginationItem.vue │ │ ├── PaginationList.vue │ │ ├── PaginationNavigator.vue │ │ ├── paginationTheme.ts │ │ └── usePaginationStore.ts │ ├── Popover │ │ ├── Popover.vue │ │ ├── PopoverAction.vue │ │ ├── PopoverArrow.vue │ │ ├── PopoverContent.vue │ │ ├── PopoverDescription.vue │ │ └── PopoverTitle.vue │ ├── Progress │ │ ├── CircleProgress.vue │ │ ├── CircleProgressLine.vue │ │ ├── CircleProgressText.vue │ │ ├── LineProgress.vue │ │ ├── LineProgressBar.vue │ │ ├── LineProgressText.vue │ │ ├── progressTheme.ts │ │ └── useProgressStore.ts │ ├── Radio │ │ ├── Radio.vue │ │ └── radioTheme.ts │ ├── RangeCalender │ │ ├── RangeCalendar.vue │ │ ├── RangeCalendarCell.vue │ │ ├── RangeCalendarCellTrigger.vue │ │ ├── RangeCalendarGrid.vue │ │ ├── RangeCalendarGridBody.vue │ │ ├── RangeCalendarGridHead.vue │ │ ├── RangeCalendarGridRow.vue │ │ ├── RangeCalendarHeadCell.vue │ │ ├── RangeCalendarHeader.vue │ │ ├── RangeCalendarHeading.vue │ │ ├── RangeCalendarNextButton.vue │ │ ├── RangeCalendarPrevButton.vue │ │ └── RangeCalenderStore.ts │ ├── Rating │ │ ├── Rating.vue │ │ ├── RatingStar.vue │ │ └── useRatingStore.ts │ ├── Select │ │ ├── Select.vue │ │ ├── SelectAction.vue │ │ ├── SelectContent.vue │ │ ├── SelectDivider.vue │ │ ├── SelectGroup.vue │ │ ├── SelectItem.vue │ │ ├── SelectLabel.vue │ │ ├── SelectScrollDownButton.vue │ │ ├── SelectScrollUpButton.vue │ │ └── SelectValue.vue │ ├── Skeleton │ │ ├── Skeleton.vue │ │ ├── SkeletonLine.vue │ │ └── skeletonTheme.ts │ ├── Slider │ │ └── Slider.vue │ ├── Spinner │ │ ├── Spinner.vue │ │ └── spinnerTheme.ts │ ├── Steps │ │ ├── StepLine.vue │ │ ├── StepPoint.vue │ │ ├── Steps.vue │ │ └── stepPointTheme.ts │ ├── Switch │ │ └── Switch.vue │ ├── Table │ │ ├── Table.vue │ │ ├── TableBody.vue │ │ ├── TableCaption.vue │ │ ├── TableCell.vue │ │ ├── TableFooter.vue │ │ ├── TableHead.vue │ │ ├── TableHeader.vue │ │ └── TableRow.vue │ ├── Tabs │ │ ├── TabContent.vue │ │ ├── TabItem.vue │ │ ├── TabList.vue │ │ ├── Tabs.vue │ │ └── useTabs.ts │ ├── Test │ │ └── Child.vue │ ├── Textarea │ │ └── Textarea.vue │ ├── Timeline │ │ ├── Timeline.vue │ │ ├── TimelineContent.vue │ │ ├── TimelineItem.vue │ │ └── TimelinePoint.vue │ ├── Toast │ │ ├── Toast.ts │ │ └── ToastWrapper.vue │ ├── Tooltip │ │ ├── Tooltip.vue │ │ ├── TooltipAction.vue │ │ ├── TooltipArrow.vue │ │ ├── TooltipContent.vue │ │ ├── tooltipTheme.ts │ │ └── useTooltipStore.ts │ └── Upload │ │ ├── Upload.vue │ │ ├── UploadBody.vue │ │ ├── UploadFooter.vue │ │ ├── UploadIcon.vue │ │ ├── UploadText.vue │ │ ├── uploadInterface.ts │ │ └── useUpload.ts ├── index.ts ├── themes │ └── keepTheme.ts └── utils │ ├── cn.ts │ ├── interface.ts │ └── keepTw.ts ├── styles ├── codeHighLigher.css ├── docs.css ├── keepStyle.css └── main.css ├── tailwind.config.js ├── tsconfig.json ├── utils └── remToPx.ts └── yarn.lock /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .output 3 | .data 4 | .nuxt 5 | .nitro 6 | .cache 7 | dist -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | # name: Continuous Integration 2 | 3 | # on: 4 | # push: 5 | # pull_request: 6 | 7 | # jobs: 8 | # build: 9 | # runs-on: ubuntu-latest 10 | 11 | # steps: 12 | # - uses: actions/checkout@v2 13 | # with: 14 | # fetch-depth: 0 # Fetch all history for all branches and tags 15 | # - name: Use Node.js 16 | # uses: actions/setup-node@v2 17 | # with: 18 | # node-version: "20.9.0" 19 | 20 | # - name: Install dependencies 21 | # run: npm install 22 | 23 | # - name: Run lint 24 | # run: npm run lint 25 | 26 | # - name: Run format check 27 | # run: npm run format 28 | 29 | # - name: Check commit messages 30 | # uses: wagoid/commitlint-github-action@v3 31 | # with: 32 | # configFile: commitlint.config.cjs 33 | -------------------------------------------------------------------------------- /.github/workflows/production.yaml: -------------------------------------------------------------------------------- 1 | # name: Keep Vue Production Deployment 2 | # env: 3 | # VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} 4 | # VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} 5 | # on: 6 | # push: 7 | # branches: 8 | # - main 9 | # jobs: 10 | # Deploy-Production: 11 | # runs-on: ubuntu-latest 12 | # steps: 13 | # - uses: actions/checkout@v2 14 | # - name: Install Vercel CLI 15 | # run: npm install --global vercel@canary 16 | # - name: Pull Vercel Environment Information 17 | # run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} 18 | # - name: Build Project Artifacts 19 | # run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }} 20 | # - name: Deploy Project Artifacts to Vercel 21 | # run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }} 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Nuxt dev/build outputs 2 | .output 3 | .data 4 | .nuxt 5 | .nitro 6 | .cache 7 | dist 8 | 9 | # Node dependencies 10 | node_modules 11 | 12 | # Logs 13 | logs 14 | *.log 15 | 16 | # Misc 17 | .DS_Store 18 | .fleet 19 | .idea 20 | 21 | # Local env files 22 | .env 23 | .env.* 24 | !.env.example 25 | lib 26 | 27 | yarn.lock 28 | vercel.json 29 | package-lock.json 30 | 31 | pages\test 32 | src\components\Test 33 | 34 | # Ide files 35 | .idea 36 | .vscode -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | npx lint-staged -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore artifacts: 2 | .output 3 | .data 4 | .nuxt 5 | .nitro 6 | .cache 7 | dist 8 | node_modules 9 | lib 10 | # Ignore specific files: 11 | package-lock.json -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "plugins": ["prettier-plugin-css-order", "prettier-plugin-tailwindcss"], 4 | "useTabs": false, 5 | "bracketSpacing": true, 6 | "bracketSameLine": true, 7 | "cursorOffset": -1, 8 | "endOfLine": "lf", 9 | "quoteProps": "as-needed", 10 | "arrowParens": "always", 11 | "htmlWhitespaceSensitivity": "ignore", 12 | "singleAttributePerLine": false 13 | } 14 | -------------------------------------------------------------------------------- /commitlint.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [], 3 | rules: { 4 | "header-min-length": [2, "always", 14], 5 | "header-case-start-capital": [2, "always"], 6 | "header-end-period": [2, "always"], 7 | }, 8 | plugins: [ 9 | { 10 | rules: { 11 | "header-case-start-capital": ({ raw }) => { 12 | return [ 13 | /^[A-Z]/.test(raw), 14 | "Commit message must start with a capital letter", 15 | ]; 16 | }, 17 | "header-end-period": ({ header }) => { 18 | return [/\.$/.test(header), "Commit message must end with a dot(.)"]; 19 | }, 20 | }, 21 | }, 22 | ], 23 | }; 24 | -------------------------------------------------------------------------------- /components/Command/Command.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 32 | -------------------------------------------------------------------------------- /components/Command/CommandEmpty.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /components/Command/CommandSeparator.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 23 | -------------------------------------------------------------------------------- /components/Command/CommandShortcut.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | -------------------------------------------------------------------------------- /components/DocsContentLayout.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 26 | -------------------------------------------------------------------------------- /components/ThemeSwitcher.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 24 | -------------------------------------------------------------------------------- /components/content/PropertiesTable.vue: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /components/content/docs/components/alert/AlertApi.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /components/content/docs/components/alert/DefaultAlert.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 26 | -------------------------------------------------------------------------------- /components/content/docs/components/avatar/AvatarWithStatus.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 21 | -------------------------------------------------------------------------------- /components/content/docs/components/avatar/DefaultAvatar.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 16 | -------------------------------------------------------------------------------- /components/content/docs/components/badge/BadgeApi.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /components/content/docs/components/badge/ColorsOfBadge.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/badge/DefaultBadge.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | -------------------------------------------------------------------------------- /components/content/docs/components/breadcrumb/ApiReference/BreadcrumbItemApi.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/breadcrumb/ApiReference/BreadcrumbLinkApi.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/breadcrumb/ApiReference/BreadcrumbListApi.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/breadcrumb/ApiReference/BreadcrumbPageApi.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonColorVariant.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonLinkVariant.vue: -------------------------------------------------------------------------------- 1 | 6 | 14 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonOutlineVariant.vue: -------------------------------------------------------------------------------- 1 | 6 | 14 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonPrimary.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonRadiusVariant.vue: -------------------------------------------------------------------------------- 1 | 5 | 15 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonShapeVariant.vue: -------------------------------------------------------------------------------- 1 | 5 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonSizeVariant.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonSoftBgVariant.vue: -------------------------------------------------------------------------------- 1 | 6 | 14 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonWithLeftSideIcon.vue: -------------------------------------------------------------------------------- 1 | 5 | 23 | -------------------------------------------------------------------------------- /components/content/docs/components/button/variant/ButtonWithRightSideIcon.vue: -------------------------------------------------------------------------------- 1 | 5 | 23 | -------------------------------------------------------------------------------- /components/content/docs/components/card/DefaultCard.vue: -------------------------------------------------------------------------------- 1 | 6 | 21 | -------------------------------------------------------------------------------- /components/content/docs/components/carousel/CarouselApi.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 29 | -------------------------------------------------------------------------------- /components/content/docs/components/carousel/CarouselIndicatorsApi.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/divider/DefaultDivider.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 23 | -------------------------------------------------------------------------------- /components/content/docs/components/divider/DividerAlign.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/divider/DividerApi.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 32 | -------------------------------------------------------------------------------- /components/content/docs/components/divider/DividerColor.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | -------------------------------------------------------------------------------- /components/content/docs/components/divider/DividerSize.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 21 | -------------------------------------------------------------------------------- /components/content/docs/components/drawer/api/DrawerContentApi.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/dropdown/api/DropDownContentApi.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 26 | -------------------------------------------------------------------------------- /components/content/docs/components/dropdown/api/DropDownRadioGroupApi.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 24 | -------------------------------------------------------------------------------- /components/content/docs/components/input/DefaultInput.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 23 | -------------------------------------------------------------------------------- /components/content/docs/components/input/DisabledInput.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /components/content/docs/components/input/InputApi.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /components/content/docs/components/input/InputWithIcon.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 26 | -------------------------------------------------------------------------------- /components/content/docs/components/input/LabelInput.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 24 | -------------------------------------------------------------------------------- /components/content/docs/components/inputOTP/DefaultInputOtp.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 27 | -------------------------------------------------------------------------------- /components/content/docs/components/modal/ModalApi.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 24 | -------------------------------------------------------------------------------- /components/content/docs/components/notification/NotificationApi.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 24 | -------------------------------------------------------------------------------- /components/content/docs/components/pagination/Api/PaginationAPi.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /components/content/docs/components/pagination/Api/PaginationItemApi.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /components/content/docs/components/pagination/Api/PaginationNavigatorApi.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 25 | -------------------------------------------------------------------------------- /components/content/docs/components/progress/CircleProgressApi.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 32 | -------------------------------------------------------------------------------- /components/content/docs/components/progress/CustomizeCircleProgress.vue: -------------------------------------------------------------------------------- 1 | 5 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/progress/CustomizeLineProgress.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/progress/DefaultLineProgress.vue: -------------------------------------------------------------------------------- 1 | 5 | 15 | -------------------------------------------------------------------------------- /components/content/docs/components/progress/DefaultProgress.vue: -------------------------------------------------------------------------------- 1 | 5 | 15 | -------------------------------------------------------------------------------- /components/content/docs/components/progress/LineProgressApi.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 25 | -------------------------------------------------------------------------------- /components/content/docs/components/radio/RadioAPi.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /components/content/docs/components/rating/DefaultRating.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | -------------------------------------------------------------------------------- /components/content/docs/components/rating/RatingApi.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/rating/StarApi.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 26 | -------------------------------------------------------------------------------- /components/content/docs/components/rating/ValueFromRating.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 21 | -------------------------------------------------------------------------------- /components/content/docs/components/skeleton/CommentLayout.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | -------------------------------------------------------------------------------- /components/content/docs/components/skeleton/DefaultSkeleton.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | -------------------------------------------------------------------------------- /components/content/docs/components/skeleton/ParagraphSkeleton.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | -------------------------------------------------------------------------------- /components/content/docs/components/skeleton/SkeletonWithoutAnimation.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 20 | -------------------------------------------------------------------------------- /components/content/docs/components/skeleton/skeletonApi.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/slider/DefaultSlider.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 17 | -------------------------------------------------------------------------------- /components/content/docs/components/slider/DoubleSlider.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 21 | -------------------------------------------------------------------------------- /components/content/docs/components/slider/SliderApi.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 29 | -------------------------------------------------------------------------------- /components/content/docs/components/slider/sliderCode.ts: -------------------------------------------------------------------------------- 1 | const DefaultSliderCode = { 2 | "SliderComponent.vue": ` 8 | 9 | `, 13 | }; 14 | 15 | const DoubleSliderCode = { 16 | "SliderComponent.vue": ` 22 | 23 | `, 27 | }; 28 | 29 | export { DefaultSliderCode, DoubleSliderCode }; 30 | -------------------------------------------------------------------------------- /components/content/docs/components/spinner/DefaultSpinner.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | -------------------------------------------------------------------------------- /components/content/docs/components/spinner/SpinnerApi.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/spinner/SpinnerColors.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/spinner/spinnerCode.ts: -------------------------------------------------------------------------------- 1 | const DefaultSpinnerCode = { 2 | "SpinnerCode.vue": ` 5 | 6 | `, 9 | }; 10 | 11 | const SpinnerColorsCode = { 12 | "SpinnerCode.vue": ` 15 | 16 | `, 23 | }; 24 | 25 | export { DefaultSpinnerCode, SpinnerColorsCode }; 26 | -------------------------------------------------------------------------------- /components/content/docs/components/steps/StepLineApi.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/steps/StepPointApi.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 25 | -------------------------------------------------------------------------------- /components/content/docs/components/switch/DefaultSwitch.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/switch/DisabledSwitch.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /components/content/docs/components/switch/SwitchWithIcon.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 18 | -------------------------------------------------------------------------------- /components/content/docs/components/tabs/TabsApi.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 25 | -------------------------------------------------------------------------------- /components/content/docs/components/tabs/TabsItemApi.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 32 | -------------------------------------------------------------------------------- /components/content/docs/components/textarea/DefaultTextArea.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 |