vueless 0.0.825-beta.99 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -8
- package/{adatper.locale → adapter.locale}/locales/en.ts +10 -10
- package/{adatper.locale → adapter.locale}/vueless.ts +32 -3
- package/bin/commands/copy.js +11 -5
- package/bin/commands/create.js +35 -15
- package/bin/commands/init.js +14 -12
- package/bin/constants.js +2 -1
- package/bin/utils/dataUtils.js +2 -2
- package/composables/useComponentLocaleMassages.ts +29 -0
- package/composables/useDarkMode.ts +2 -2
- package/composables/useLocale.ts +2 -2
- package/composables/useUI.ts +3 -3
- package/constants.js +38 -26
- package/directives/clickOutside/storybook/docs.mdx +1 -1
- package/directives/tooltip/storybook/docs.mdx +1 -1
- package/icons/storybook/add_circle.svg +1 -0
- package/icons/storybook/arrow_outward.svg +1 -0
- package/icons/storybook/delivery_truck_speed.svg +1 -0
- package/index.d.ts +2 -2
- package/index.ts +3 -6
- package/locales/en.json +1 -0
- package/package.json +37 -37
- package/plugin-vite.d.ts +5 -1
- package/plugin-vite.js +94 -38
- package/tailwind.css +5 -0
- package/types.ts +58 -41
- package/ui.boilerplate/storybook/docs.hidden.mdx +16 -0
- package/ui.button/UButton.vue +13 -12
- package/ui.button/config.ts +7 -6
- package/ui.button/storybook/docs.mdx +1 -1
- package/ui.button/storybook/stories.ts +3 -3
- package/ui.button/tests/UButton.test.ts +366 -16
- package/ui.button-link/config.ts +1 -1
- package/ui.button-link/storybook/docs.mdx +1 -1
- package/ui.button-link/storybook/stories.ts +45 -110
- package/ui.button-link/types.ts +2 -1
- package/ui.button-toggle/storybook/docs.mdx +1 -1
- package/ui.button-toggle/storybook/stories.ts +48 -44
- package/ui.container-accordion/UAccordion.vue +11 -3
- package/ui.container-accordion/storybook/docs.mdx +1 -1
- package/ui.container-accordion/storybook/stories.ts +11 -18
- package/ui.container-accordion/types.ts +5 -0
- package/ui.container-card/storybook/docs.mdx +1 -1
- package/ui.container-card/storybook/stories.ts +22 -5
- package/ui.container-col/storybook/docs.mdx +1 -1
- package/ui.container-col/storybook/stories.ts +37 -28
- package/ui.container-divider/storybook/docs.mdx +1 -1
- package/ui.container-divider/storybook/stories.ts +11 -23
- package/ui.container-group/storybook/docs.mdx +1 -1
- package/ui.container-group/storybook/stories.ts +1 -5
- package/ui.container-groups/storybook/docs.mdx +1 -1
- package/ui.container-groups/storybook/stories.ts +17 -21
- package/ui.container-modal/UModal.vue +83 -20
- package/ui.container-modal/config.ts +1 -0
- package/ui.container-modal/storybook/docs.mdx +1 -1
- package/ui.container-modal/storybook/stories.ts +91 -101
- package/ui.container-modal-confirm/UModalConfirm.vue +7 -9
- package/ui.container-modal-confirm/storybook/docs.mdx +1 -1
- package/ui.container-modal-confirm/storybook/stories.ts +120 -117
- package/ui.container-page/UPage.vue +0 -1
- package/ui.container-page/storybook/docs.mdx +1 -1
- package/ui.container-page/storybook/stories.ts +19 -29
- package/ui.container-row/storybook/docs.mdx +1 -1
- package/ui.container-row/storybook/stories.ts +46 -33
- package/ui.data-list/UDataList.vue +15 -13
- package/ui.data-list/storybook/docs.mdx +1 -1
- package/ui.data-list/storybook/stories.ts +20 -22
- package/ui.data-table/UTable.vue +40 -19
- package/ui.data-table/UTableRow.vue +5 -3
- package/ui.data-table/config.ts +8 -7
- package/ui.data-table/storybook/docs.mdx +1 -1
- package/ui.data-table/storybook/stories.ts +24 -24
- package/ui.dropdown-badge/UDropdownBadge.vue +28 -8
- package/ui.dropdown-badge/config.ts +16 -6
- package/ui.dropdown-badge/storybook/docs.mdx +1 -1
- package/ui.dropdown-badge/storybook/stories.ts +102 -104
- package/ui.dropdown-badge/types.ts +21 -11
- package/ui.dropdown-button/UDropdownButton.vue +28 -8
- package/ui.dropdown-button/config.ts +4 -4
- package/ui.dropdown-button/storybook/docs.mdx +1 -1
- package/ui.dropdown-button/storybook/stories.ts +99 -79
- package/ui.dropdown-button/types.ts +19 -14
- package/ui.dropdown-link/UDropdownLink.vue +24 -5
- package/ui.dropdown-link/config.ts +4 -4
- package/ui.dropdown-link/storybook/docs.mdx +1 -1
- package/ui.dropdown-link/storybook/stories.ts +94 -121
- package/ui.dropdown-link/types.ts +19 -14
- package/ui.form-calendar/UCalendar.vue +72 -38
- package/ui.form-calendar/UCalendarDayView.vue +74 -10
- package/ui.form-calendar/UCalendarMonthView.vue +4 -4
- package/ui.form-calendar/UCalendarYearView.vue +77 -7
- package/ui.form-calendar/config.ts +2 -2
- package/ui.form-calendar/storybook/dateTokensTable.mdx +1 -1
- package/ui.form-calendar/storybook/docs.mdx +1 -1
- package/ui.form-calendar/storybook/stories.ts +14 -27
- package/ui.form-calendar/utilDate.ts +1 -1
- package/ui.form-checkbox/UCheckbox.vue +0 -1
- package/ui.form-checkbox/config.ts +2 -2
- package/ui.form-checkbox/storybook/docs.mdx +1 -1
- package/ui.form-checkbox/storybook/stories.ts +18 -32
- package/ui.form-checkbox-group/storybook/docs.mdx +1 -1
- package/ui.form-checkbox-group/storybook/stories.ts +16 -39
- package/ui.form-checkbox-multi-state/storybook/docs.mdx +1 -1
- package/ui.form-checkbox-multi-state/storybook/stories.ts +12 -22
- package/ui.form-color-picker/UColorPicker.vue +3 -3
- package/ui.form-color-picker/config.ts +3 -2
- package/ui.form-color-picker/storybook/docs.mdx +1 -1
- package/ui.form-color-picker/storybook/stories.ts +9 -18
- package/ui.form-date-picker/UDatePicker.vue +7 -10
- package/ui.form-date-picker/storybook/docs.mdx +1 -1
- package/ui.form-date-picker/storybook/stories.ts +28 -30
- package/ui.form-date-picker-range/UDatePickerRange.vue +57 -49
- package/ui.form-date-picker-range/UDatePickerRangeInputs.vue +30 -7
- package/ui.form-date-picker-range/UDatePickerRangePeriodMenu.vue +21 -6
- package/ui.form-date-picker-range/config.ts +2 -2
- package/ui.form-date-picker-range/storybook/docs.mdx +1 -1
- package/ui.form-date-picker-range/storybook/stories.ts +26 -29
- package/ui.form-date-picker-range/useLocale.ts +15 -20
- package/ui.form-date-picker-range/useUserFormat.ts +3 -2
- package/ui.form-date-picker-range/utilDateRange.ts +3 -1
- package/ui.form-input/UInput.vue +7 -10
- package/ui.form-input/storybook/docs.mdx +1 -1
- package/ui.form-input/storybook/stories.ts +16 -26
- package/ui.form-input-counter/UInputCounter.vue +47 -18
- package/ui.form-input-counter/config.ts +23 -14
- package/ui.form-input-counter/storybook/docs.mdx +1 -1
- package/ui.form-input-counter/storybook/stories.ts +11 -26
- package/ui.form-input-counter/types.ts +3 -3
- package/ui.form-input-file/UInputFile.vue +10 -11
- package/ui.form-input-file/config.ts +1 -1
- package/ui.form-input-file/storybook/docs.mdx +1 -1
- package/ui.form-input-file/storybook/stories.ts +15 -25
- package/ui.form-input-number/UInputNumber.vue +4 -4
- package/ui.form-input-number/storybook/docs.mdx +1 -1
- package/ui.form-input-number/storybook/stories.ts +12 -29
- package/ui.form-input-number/useFormatNumber.ts +3 -4
- package/ui.form-input-password/UInputPassword.vue +0 -1
- package/ui.form-input-password/storybook/docs.mdx +1 -1
- package/ui.form-input-password/storybook/stories.ts +12 -38
- package/ui.form-input-rating/UInputRating.vue +63 -25
- package/ui.form-input-rating/config.ts +7 -4
- package/ui.form-input-rating/storybook/docs.mdx +1 -1
- package/ui.form-input-rating/storybook/stories.ts +27 -34
- package/ui.form-input-rating/types.ts +18 -3
- package/ui.form-input-search/UInputSearch.vue +2 -2
- package/ui.form-input-search/config.ts +1 -6
- package/ui.form-input-search/storybook/docs.mdx +1 -1
- package/ui.form-input-search/storybook/stories.ts +12 -35
- package/ui.form-label/ULabel.vue +4 -3
- package/ui.form-label/storybook/docs.mdx +1 -1
- package/ui.form-label/storybook/stories.ts +15 -41
- package/ui.form-listbox/UListbox.vue +108 -20
- package/ui.form-listbox/config.ts +35 -5
- package/ui.form-listbox/storybook/docs.mdx +2 -1
- package/ui.form-listbox/storybook/stories.ts +26 -24
- package/ui.form-listbox/types.ts +25 -0
- package/ui.form-listbox/utilListbox.ts +55 -0
- package/ui.form-radio/config.ts +1 -1
- package/ui.form-radio/storybook/docs.mdx +1 -1
- package/ui.form-radio/storybook/stories.ts +18 -29
- package/ui.form-radio-group/storybook/docs.mdx +1 -1
- package/ui.form-radio-group/storybook/stories.ts +17 -38
- package/ui.form-select/USelect.vue +345 -243
- package/ui.form-select/config.ts +53 -65
- package/ui.form-select/constants.ts +6 -0
- package/ui.form-select/storybook/docs.mdx +1 -1
- package/ui.form-select/storybook/stories.ts +31 -35
- package/ui.form-select/types.ts +20 -0
- package/ui.form-select/utilSelect.ts +0 -87
- package/ui.form-switch/USwitch.vue +8 -9
- package/ui.form-switch/config.ts +8 -8
- package/ui.form-switch/storybook/docs.mdx +1 -1
- package/ui.form-switch/storybook/stories.ts +15 -25
- package/ui.form-textarea/storybook/docs.mdx +1 -1
- package/ui.form-textarea/storybook/stories.ts +22 -35
- package/ui.image-avatar/UAvatar.vue +19 -11
- package/ui.image-avatar/config.ts +10 -4
- package/ui.image-avatar/storybook/assets/john-doe.png +0 -0
- package/ui.image-avatar/storybook/docs.mdx +1 -1
- package/ui.image-avatar/storybook/stories.ts +60 -47
- package/ui.image-avatar/types.ts +9 -9
- package/ui.image-icon/UIcon.vue +23 -82
- package/ui.image-icon/config.ts +1 -1
- package/ui.image-icon/storybook/docs.mdx +1 -1
- package/ui.image-icon/storybook/stories.ts +39 -24
- package/ui.image-icon/types.ts +1 -11
- package/ui.loader/storybook/docs.mdx +1 -1
- package/ui.loader/storybook/stories.ts +14 -20
- package/ui.loader-overlay/storybook/docs.mdx +1 -1
- package/ui.loader-overlay/storybook/stories.ts +7 -17
- package/ui.loader-progress/ULoaderProgress.vue +2 -2
- package/ui.loader-progress/storybook/docs.mdx +1 -1
- package/ui.loader-progress/storybook/stories.ts +16 -29
- package/ui.navigation-breadcrumbs/storybook/docs.mdx +1 -1
- package/ui.navigation-breadcrumbs/storybook/stories.ts +39 -46
- package/ui.navigation-pagination/UPagination.vue +0 -4
- package/ui.navigation-pagination/storybook/docs.mdx +1 -1
- package/ui.navigation-pagination/storybook/stories.ts +20 -33
- package/ui.navigation-progress/storybook/docs.mdx +1 -1
- package/ui.navigation-progress/storybook/stories.ts +25 -25
- package/ui.navigation-tab/storybook/docs.mdx +1 -1
- package/ui.navigation-tab/storybook/stories.ts +3 -11
- package/ui.navigation-tabs/config.ts +2 -12
- package/ui.navigation-tabs/storybook/docs.mdx +1 -1
- package/ui.navigation-tabs/storybook/stories.ts +20 -28
- package/ui.other-chip/UChip.vue +57 -0
- package/ui.other-chip/config.ts +31 -0
- package/{ui.text-money → ui.other-chip}/constants.ts +1 -1
- package/{ui.boilerplate → ui.other-chip}/storybook/docs.mdx +1 -1
- package/ui.other-chip/storybook/stories.ts +112 -0
- package/ui.other-chip/types.ts +55 -0
- package/ui.other-dot/config.ts +7 -5
- package/ui.other-dot/storybook/docs.mdx +1 -1
- package/ui.other-dot/storybook/stories.ts +21 -26
- package/ui.other-dot/types.ts +1 -1
- package/ui.other-theme-color-toggle/UThemeColorToggle.vue +3 -3
- package/ui.other-theme-color-toggle/storybook/docs.mdx +1 -1
- package/ui.other-theme-color-toggle/storybook/stories.ts +15 -20
- package/ui.skeleton/USkeleton.vue +27 -0
- package/ui.skeleton/config.ts +15 -0
- package/ui.skeleton/constants.ts +5 -0
- package/ui.skeleton/storybook/docs.mdx +16 -0
- package/ui.skeleton/storybook/stories.ts +65 -0
- package/ui.skeleton/types.ts +22 -0
- package/ui.skeleton-choice/USkeletonChoice.vue +32 -0
- package/ui.skeleton-choice/config.ts +51 -0
- package/ui.skeleton-choice/constants.ts +5 -0
- package/{ui.text-money → ui.skeleton-choice}/storybook/docs.mdx +1 -1
- package/ui.skeleton-choice/storybook/stories.ts +92 -0
- package/ui.skeleton-choice/types.ts +42 -0
- package/ui.skeleton-input/USkeletonInput.vue +34 -0
- package/ui.skeleton-input/config.ts +69 -0
- package/ui.skeleton-input/constants.ts +12 -0
- package/ui.skeleton-input/storybook/docs.mdx +16 -0
- package/ui.skeleton-input/storybook/stories.ts +111 -0
- package/ui.skeleton-input/types.ts +42 -0
- package/ui.skeleton-text/USkeletonText.vue +35 -0
- package/ui.skeleton-text/config.ts +38 -0
- package/ui.skeleton-text/constants.ts +5 -0
- package/ui.skeleton-text/storybook/docs.mdx +16 -0
- package/ui.skeleton-text/storybook/stories.ts +67 -0
- package/ui.skeleton-text/types.ts +37 -0
- package/ui.text-alert/UAlert.vue +4 -5
- package/ui.text-alert/storybook/docs.mdx +1 -1
- package/ui.text-alert/storybook/stories.ts +15 -32
- package/ui.text-badge/UBadge.vue +31 -37
- package/ui.text-badge/config.ts +7 -14
- package/ui.text-badge/storybook/docs.mdx +1 -1
- package/ui.text-badge/storybook/stories.ts +37 -56
- package/ui.text-block/config.ts +1 -0
- package/ui.text-block/storybook/docs.mdx +1 -1
- package/ui.text-block/storybook/stories.ts +16 -25
- package/ui.text-block/types.ts +1 -1
- package/ui.text-empty/UEmpty.vue +1 -6
- package/ui.text-empty/config.ts +1 -1
- package/ui.text-empty/storybook/docs.mdx +1 -1
- package/ui.text-empty/storybook/stories.ts +15 -25
- package/ui.text-file/UFile.vue +0 -2
- package/ui.text-file/storybook/docs.mdx +1 -1
- package/ui.text-file/storybook/stories.ts +9 -11
- package/ui.text-files/storybook/docs.mdx +1 -1
- package/ui.text-files/storybook/stories.ts +10 -17
- package/ui.text-header/config.ts +0 -10
- package/ui.text-header/storybook/docs.mdx +1 -1
- package/ui.text-header/storybook/stories.ts +16 -43
- package/ui.text-header/types.ts +0 -5
- package/ui.text-notify/UNotify.vue +8 -12
- package/ui.text-notify/config.ts +1 -1
- package/ui.text-notify/storybook/docs.mdx +1 -1
- package/ui.text-number/UNumber.vue +14 -2
- package/ui.text-number/config.ts +8 -0
- package/ui.text-number/storybook/docs.mdx +1 -1
- package/ui.text-number/storybook/stories.ts +21 -26
- package/ui.text-number/types.ts +16 -1
- package/utils/helper.ts +13 -8
- package/utils/node/dynamicProps.js +3 -14
- package/utils/node/dynamicStories.js +4 -7
- package/utils/node/helper.js +25 -11
- package/utils/node/loaderIcon.js +199 -192
- package/utils/node/loaderSvg.js +0 -3
- package/utils/node/tailwindSafelist.js +205 -82
- package/utils/node/webTypes.js +2 -2
- package/utils/storybook.ts +21 -3
- package/utils/theme.ts +272 -181
- package/utils/ui.ts +2 -1
- package/icons/storybook/@material-symbols/confirmation_number.svg +0 -1
- package/icons/storybook/@material-symbols/subscriptions.svg +0 -1
- package/icons/storybook/@material-symbols/unfold_more.svg +0 -1
- package/ui.text-money/UMoney.vue +0 -77
- package/ui.text-money/assets/credit.svg +0 -7
- package/ui.text-money/assets/debit.svg +0 -12
- package/ui.text-money/config.ts +0 -32
- package/ui.text-money/storybook/stories.ts +0 -194
- package/ui.text-money/types.ts +0 -90
- /package/{adatper.locale → adapter.locale}/vue-i18n.ts +0 -0
- /package/icons/{app → internal}/add.svg +0 -0
- /package/icons/{app → internal}/apps.svg +0 -0
- /package/icons/{app → internal}/arrow_back.svg +0 -0
- /package/icons/{app → internal}/arrow_right.svg +0 -0
- /package/icons/{app → internal}/attach_file.svg +0 -0
- /package/icons/{app → internal}/calendar_month-fill.svg +0 -0
- /package/icons/{app → internal}/check.svg +0 -0
- /package/icons/{app → internal}/check_circle.svg +0 -0
- /package/icons/{app → internal}/chevron_left.svg +0 -0
- /package/icons/{app → internal}/chevron_right.svg +0 -0
- /package/icons/{app → internal}/close.svg +0 -0
- /package/icons/{app → internal}/close_small.svg +0 -0
- /package/icons/{app → internal}/description.svg +0 -0
- /package/icons/{app → internal}/drag_indicator.svg +0 -0
- /package/icons/{app → internal}/emoji_food_beverage.svg +0 -0
- /package/icons/{app → internal}/error.svg +0 -0
- /package/icons/{app → internal}/first_page.svg +0 -0
- /package/icons/{app → internal}/image.svg +0 -0
- /package/icons/{app → internal}/keyboard_arrow_down.svg +0 -0
- /package/icons/{app → internal}/keyboard_arrow_left.svg +0 -0
- /package/icons/{app → internal}/keyboard_arrow_right.svg +0 -0
- /package/icons/{app → internal}/keyboard_double_arrow_left.svg +0 -0
- /package/icons/{app → internal}/keyboard_double_arrow_right.svg +0 -0
- /package/icons/{app → internal}/last_page.svg +0 -0
- /package/icons/{app → internal}/remove.svg +0 -0
- /package/icons/{app → internal}/search.svg +0 -0
- /package/icons/{app → internal}/star-fill.svg +0 -0
- /package/icons/{app → internal}/star.svg +0 -0
- /package/icons/{app → internal}/visibility-fill.svg +0 -0
- /package/icons/{app → internal}/visibility_off-fill.svg +0 -0
- /package/icons/{app → internal}/warning.svg +0 -0
- /package/icons/storybook/{@material-symbols/account_circle.svg → account_circle.svg} +0 -0
- /package/icons/storybook/{@material-symbols/chat.svg → chat.svg} +0 -0
- /package/icons/storybook/{@material-symbols/check.svg → check.svg} +0 -0
- /package/icons/storybook/{@material-symbols/check_circle.svg → check_circle.svg} +0 -0
- /package/icons/storybook/{@material-symbols/currency_exchange.svg → currency_exchange.svg} +0 -0
- /package/icons/storybook/{@material-symbols/delete.svg → delete.svg} +0 -0
- /package/icons/storybook/{@material-symbols/double_arrow.svg → double_arrow.svg} +0 -0
- /package/icons/storybook/{@material-symbols/download.svg → download.svg} +0 -0
- /package/icons/storybook/{@material-symbols/edit_calendar.svg → edit_calendar.svg} +0 -0
- /package/icons/storybook/{@material-symbols/edit_note.svg → edit_note.svg} +0 -0
- /package/icons/storybook/{@material-symbols/error.svg → error.svg} +0 -0
- /package/icons/storybook/{@material-symbols/expand_circle_down.svg → expand_circle_down.svg} +0 -0
- /package/icons/storybook/{@material-symbols/favorite.svg → favorite.svg} +0 -0
- /package/icons/storybook/{@material-symbols/feedback.svg → feedback.svg} +0 -0
- /package/icons/storybook/{@material-symbols/filter_list.svg → filter_list.svg} +0 -0
- /package/icons/storybook/{@material-symbols/flight.svg → flight.svg} +0 -0
- /package/icons/storybook/{@material-symbols/heart_plus.svg → heart_plus.svg} +0 -0
- /package/icons/storybook/{@material-symbols/inbox.svg → inbox.svg} +0 -0
- /package/icons/storybook/{@material-symbols/inbox_customize.svg → inbox_customize.svg} +0 -0
- /package/icons/storybook/{@material-symbols/info.svg → info.svg} +0 -0
- /package/icons/storybook/{@material-symbols/key.svg → key.svg} +0 -0
- /package/icons/storybook/{@material-symbols/label.svg → label.svg} +0 -0
- /package/icons/storybook/{@material-symbols/lock.svg → lock.svg} +0 -0
- /package/icons/storybook/{@material-symbols/lock_open.svg → lock_open.svg} +0 -0
- /package/icons/storybook/{@material-symbols/mail.svg → mail.svg} +0 -0
- /package/icons/storybook/{@material-symbols/menu.svg → menu.svg} +0 -0
- /package/icons/storybook/{@material-symbols/monitoring.svg → monitoring.svg} +0 -0
- /package/icons/storybook/{@material-symbols/more_horiz.svg → more_horiz.svg} +0 -0
- /package/icons/storybook/{@material-symbols/palette.svg → palette.svg} +0 -0
- /package/icons/storybook/{@material-symbols/payments.svg → payments.svg} +0 -0
- /package/icons/storybook/{@material-symbols/person.svg → person.svg} +0 -0
- /package/icons/storybook/{@material-symbols/person_search.svg → person_search.svg} +0 -0
- /package/icons/storybook/{@material-symbols/play_arrow.svg → play_arrow.svg} +0 -0
- /package/icons/storybook/{@material-symbols/progress_activity.svg → progress_activity.svg} +0 -0
- /package/icons/storybook/{@material-symbols/remove.svg → remove.svg} +0 -0
- /package/icons/storybook/{@material-symbols/sailing.svg → sailing.svg} +0 -0
- /package/icons/storybook/{@material-symbols/send.svg → send.svg} +0 -0
- /package/icons/storybook/{@material-symbols/sentiment_satisfied.svg → sentiment_satisfied.svg} +0 -0
- /package/icons/storybook/{@material-symbols/settings.svg → settings.svg} +0 -0
- /package/icons/storybook/{@material-symbols/stop_circle.svg → stop_circle.svg} +0 -0
- /package/icons/storybook/{@material-symbols/travel_explore.svg → travel_explore.svg} +0 -0
- /package/icons/storybook/{@material-symbols/update.svg → update.svg} +0 -0
- /package/icons/storybook/{@material-symbols/verified.svg → verified.svg} +0 -0
- /package/icons/storybook/{@material-symbols/warning.svg → warning.svg} +0 -0
- /package/ui.boilerplate/storybook/{stories.ts → stories.hidden.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,12 +1,42 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# Vueless UI
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
* [UI Components](https://ui.vueless.com/)
|
|
7
|
-
* [Website](http://vueless.com/)
|
|
5
|
+
Vueless is an open-source UI library and design system framework for Vue.js 3 and Nuxt.js 3, built on top of Tailwind CSS v4.
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
It’s completely styleless, allowing you to extend or override default styles without modifying the components themselves — only your custom styles are included in the final build.
|
|
8
|
+
|
|
9
|
+
Vueless is simple enough for everyday use and powerful enough for advanced scenarios, making it ideal for quickly building beautiful UIs in minutes or developing a fully customized corporate UI library that strictly follows your design guidelines.
|
|
10
|
+
|
|
11
|
+
[Documentation](https://docs.vueless.com/) | [UI Components](https://ui.vueless.com/) | [Website](http://vueless.com/)
|
|
12
|
+
|
|
13
|
+
### Key features
|
|
14
|
+
|
|
15
|
+
- 🧩 65+ UI components (including range date picker, multi-selects, and nested table)
|
|
16
|
+
- 📘 Built-in Storybook support
|
|
17
|
+
- 🌈 Beautiful, modern default UI theme
|
|
18
|
+
- 🌗 Light and dark mode support
|
|
19
|
+
- 🌀 Unstyled mode
|
|
20
|
+
- 🎨️ Flexible color palettes
|
|
21
|
+
- 🎛️ Runtime theme and color switching
|
|
22
|
+
- 🧬 Design tokens powered by CSS variables
|
|
23
|
+
- ✨ Powerful yet simple styling customization system
|
|
24
|
+
- 🌍 Internationalization (i18n)
|
|
25
|
+
- ♿️ Accessibility (a11y)
|
|
26
|
+
- ⚙️ Server-side rendering (SSR) friendly
|
|
27
|
+
- 🖼️ 1000+ built-in SVG icons
|
|
28
|
+
- 🛡️ Full TypeScript support with type safety
|
|
29
|
+
|
|
30
|
+
### Advanced Features
|
|
31
|
+
|
|
32
|
+
- 🧰 Copy and extend existing components
|
|
33
|
+
- 🧱 Create your own components
|
|
34
|
+
- 🔧️ Define default values for props
|
|
35
|
+
- 🔩️ Add or hide props to components
|
|
36
|
+
- 🧿 `npm` package ships full source without TypeScript transpilation for better DX.
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
## Quick Start (Vue)
|
|
10
40
|
|
|
11
41
|
1. Install `vueless` UI library packages.
|
|
12
42
|
|
|
@@ -15,7 +45,6 @@ npm install vueless
|
|
|
15
45
|
npx vueless init
|
|
16
46
|
```
|
|
17
47
|
|
|
18
|
-
|
|
19
48
|
2. In the file where you create the Vue application, add the following code:
|
|
20
49
|
```javascript
|
|
21
50
|
import { createApp } from 'vue';
|
|
@@ -49,7 +78,32 @@ export default defineConfig({
|
|
|
49
78
|
})
|
|
50
79
|
```
|
|
51
80
|
|
|
52
|
-
|
|
81
|
+
## Quick Start (Nuxt)
|
|
82
|
+
|
|
83
|
+
1. Install Vueless Nuxt module.
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npm install @vueless/nuxt
|
|
87
|
+
npx vueless init
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
2. Register `@vueless/nuxt` into the Nuxt config modules section.
|
|
92
|
+
```javascript
|
|
93
|
+
export default defineNuxtConfig({
|
|
94
|
+
modules: [
|
|
95
|
+
'@vueless/nuxt'
|
|
96
|
+
],
|
|
97
|
+
...
|
|
98
|
+
})
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
3. Import Tailwind CSS and Vueless at the top of the main CSS file.
|
|
102
|
+
|
|
103
|
+
```scss
|
|
104
|
+
@import "tailwindcss";
|
|
105
|
+
@import "vueless";
|
|
106
|
+
```
|
|
53
107
|
|
|
54
108
|
## Contributing
|
|
55
109
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import selectConfig from "../../ui.form-select/config.
|
|
2
|
-
import switchConfig from "../../ui.form-switch/config.
|
|
3
|
-
import inputFileConfig from "../../ui.form-input-file/config.
|
|
4
|
-
import listboxConfig from "../../ui.form-listbox/config.
|
|
5
|
-
import modalConfirmConfig from "../../ui.container-modal-confirm/config.
|
|
6
|
-
import tableConfig from "../../ui.data-table/config.
|
|
1
|
+
import selectConfig from "../../ui.form-select/config.ts";
|
|
2
|
+
import switchConfig from "../../ui.form-switch/config.ts";
|
|
3
|
+
import inputFileConfig from "../../ui.form-input-file/config.ts";
|
|
4
|
+
import listboxConfig from "../../ui.form-listbox/config.ts";
|
|
5
|
+
import modalConfirmConfig from "../../ui.container-modal-confirm/config.ts";
|
|
6
|
+
import tableConfig from "../../ui.data-table/config.ts";
|
|
7
7
|
import calendarConfig from "../../ui.form-calendar/config.ts";
|
|
8
|
-
import datepickerConfig from "../../ui.form-date-picker/config.
|
|
9
|
-
import datepickerRangeConfig from "../../ui.form-date-picker-range/config.
|
|
10
|
-
import dataListConfig from "../../ui.data-list/config.
|
|
11
|
-
import notifyDefaultConfig from "../../ui.text-notify/config.
|
|
8
|
+
import datepickerConfig from "../../ui.form-date-picker/config.ts";
|
|
9
|
+
import datepickerRangeConfig from "../../ui.form-date-picker-range/config.ts";
|
|
10
|
+
import dataListConfig from "../../ui.data-list/config.ts";
|
|
11
|
+
import notifyDefaultConfig from "../../ui.text-notify/config.ts";
|
|
12
12
|
|
|
13
13
|
export default {
|
|
14
14
|
USelect: selectConfig.i18n,
|
|
@@ -5,6 +5,7 @@ import en from "./locales/en.ts";
|
|
|
5
5
|
|
|
6
6
|
import type { Ref } from "vue";
|
|
7
7
|
import type { UnknownObject } from "../types.ts";
|
|
8
|
+
import type { VueMessageType } from "vue-i18n";
|
|
8
9
|
|
|
9
10
|
export interface LocaleMessages {
|
|
10
11
|
[key: string]: LocaleMessages | string;
|
|
@@ -148,19 +149,47 @@ export function getNestedValue<T, K = unknown>(
|
|
|
148
149
|
return obj === undefined ? fallback : (obj as unknown as K);
|
|
149
150
|
}
|
|
150
151
|
|
|
151
|
-
const unknownObject = obj as Record<string | number, unknown>;
|
|
152
|
-
|
|
153
152
|
for (let i = 0; i < last; i++) {
|
|
154
153
|
if (obj == null) {
|
|
155
154
|
return fallback;
|
|
156
155
|
}
|
|
157
156
|
|
|
158
|
-
obj =
|
|
157
|
+
obj = (obj as Record<string | number, unknown>)[path[i]] as T;
|
|
159
158
|
}
|
|
160
159
|
|
|
161
160
|
if (obj == null) {
|
|
162
161
|
return fallback;
|
|
163
162
|
}
|
|
164
163
|
|
|
164
|
+
const unknownObject = obj as Record<string | number, unknown>;
|
|
165
|
+
|
|
165
166
|
return (unknownObject[path[last]] === undefined ? fallback : unknownObject[path[last]]) as K;
|
|
166
167
|
}
|
|
168
|
+
|
|
169
|
+
export function recursiveRt(obj: VueMessageType): unknown {
|
|
170
|
+
if (typeof obj !== "object" || obj === null) {
|
|
171
|
+
return obj;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if ("loc" in obj) {
|
|
175
|
+
return obj.loc!.source;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const messages: Record<string, unknown> = {};
|
|
179
|
+
|
|
180
|
+
for (const key in obj) {
|
|
181
|
+
const val = obj[key as keyof typeof obj];
|
|
182
|
+
|
|
183
|
+
if (val && typeof val === "object") {
|
|
184
|
+
if ("loc" in val) {
|
|
185
|
+
messages[key] = val.loc.source;
|
|
186
|
+
} else {
|
|
187
|
+
messages[key] = recursiveRt(val as VueMessageType);
|
|
188
|
+
}
|
|
189
|
+
} else {
|
|
190
|
+
messages[key] = val;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return messages;
|
|
195
|
+
}
|
package/bin/commands/copy.js
CHANGED
|
@@ -11,21 +11,25 @@ import { replaceRelativeImports } from "../utils/formatUtil.js";
|
|
|
11
11
|
import { getStorybookId, getStoryMetaKeyIndex } from "../utils/dataUtils.js";
|
|
12
12
|
|
|
13
13
|
import { SRC_COMPONENTS_PATH, COMPONENTS_PATH } from "../constants.js";
|
|
14
|
-
import { COMPONENTS,
|
|
14
|
+
import { COMPONENTS, VUELESS_PACKAGE_DIR, VUELESS_LOCAL_DIR } from "../../constants.js";
|
|
15
15
|
|
|
16
16
|
function getSourcePath(componentName) {
|
|
17
|
-
return path.join(cwd(),
|
|
17
|
+
return path.join(cwd(), VUELESS_PACKAGE_DIR, COMPONENTS[componentName]);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export async function copyVuelessComponent(options) {
|
|
21
21
|
const [componentName, newComponentName] = options;
|
|
22
22
|
|
|
23
23
|
if (!componentName) {
|
|
24
|
-
|
|
24
|
+
console.log(styleText("red", "Component name is required."));
|
|
25
|
+
|
|
26
|
+
return;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
if (!(componentName in COMPONENTS)) {
|
|
28
|
-
|
|
30
|
+
console.log(styleText("red", "There is no such component."));
|
|
31
|
+
|
|
32
|
+
return;
|
|
29
33
|
}
|
|
30
34
|
|
|
31
35
|
const sourceComponentPath = getSourcePath(componentName);
|
|
@@ -39,7 +43,9 @@ export async function copyVuelessComponent(options) {
|
|
|
39
43
|
const isComponentExists = newComponentName in COMPONENTS || existsSync(absoluteDestPath);
|
|
40
44
|
|
|
41
45
|
if (isComponentExists) {
|
|
42
|
-
|
|
46
|
+
console.log(styleText("red", `Component with name ${newComponentName} already exists.`));
|
|
47
|
+
|
|
48
|
+
return;
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
await cp(sourceComponentPath, absoluteDestPath, { recursive: true });
|
package/bin/commands/create.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { cwd } from "node:process";
|
|
6
|
-
import {
|
|
6
|
+
import { readFile, writeFile, rename, mkdir, readdir, copyFile } from "node:fs/promises";
|
|
7
7
|
import { styleText } from "node:util";
|
|
8
8
|
|
|
9
9
|
import { getDirFiles } from "../../utils/node/helper.js";
|
|
@@ -12,16 +12,18 @@ import { getStorybookId } from "../utils/dataUtils.js";
|
|
|
12
12
|
|
|
13
13
|
import { SRC_COMPONENTS_PATH, COMPONENTS_PATH } from "../constants.js";
|
|
14
14
|
|
|
15
|
-
import { COMPONENTS,
|
|
15
|
+
import { COMPONENTS, VUELESS_PACKAGE_DIR, VUELESS_LOCAL_DIR } from "../../constants.js";
|
|
16
16
|
|
|
17
|
-
const
|
|
18
|
-
const
|
|
17
|
+
const BOILERPLATE_NAME = "UBoilerplate";
|
|
18
|
+
const BOILERPLATE_PATH = path.join(cwd(), VUELESS_PACKAGE_DIR, "ui.boilerplate");
|
|
19
19
|
|
|
20
20
|
export async function createVuelessComponent(options) {
|
|
21
21
|
const [componentName] = options;
|
|
22
22
|
|
|
23
23
|
if (!componentName) {
|
|
24
|
-
|
|
24
|
+
console.log(styleText("red", "Component name is required."));
|
|
25
|
+
|
|
26
|
+
return;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
const isSrcDir = existsSync(path.join(cwd(), VUELESS_LOCAL_DIR));
|
|
@@ -33,18 +35,36 @@ export async function createVuelessComponent(options) {
|
|
|
33
35
|
const isComponentExists = componentName in COMPONENTS || existsSync(absoluteDestPath);
|
|
34
36
|
|
|
35
37
|
if (isComponentExists) {
|
|
36
|
-
|
|
38
|
+
console.log(styleText("red", `Component with name ${componentName} already exists.`));
|
|
39
|
+
|
|
40
|
+
return;
|
|
37
41
|
}
|
|
38
42
|
|
|
39
|
-
await
|
|
43
|
+
await copyAndRenameFiles(BOILERPLATE_PATH, absoluteDestPath);
|
|
40
44
|
await modifyCreatedComponent(absoluteDestPath, componentName);
|
|
41
45
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
`The '${componentName}' was successfully created in the '${destPath}' directory.`,
|
|
46
|
+
console.log(
|
|
47
|
+
// eslint-disable-next-line prettier/prettier
|
|
48
|
+
styleText("green", `The '${componentName}' was successfully created in the '${destPath}' directory.`,),
|
|
45
49
|
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async function copyAndRenameFiles(srcDir, destDir) {
|
|
53
|
+
await mkdir(destDir, { recursive: true });
|
|
54
|
+
const entries = await readdir(srcDir, { withFileTypes: true });
|
|
46
55
|
|
|
47
|
-
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
58
|
+
|
|
59
|
+
const renamed = entry.name.replace(".hidden", "");
|
|
60
|
+
const destPath = path.join(destDir, renamed);
|
|
61
|
+
|
|
62
|
+
console.log(entry.name, renamed);
|
|
63
|
+
|
|
64
|
+
entry.isDirectory()
|
|
65
|
+
? await copyAndRenameFiles(srcPath, destPath)
|
|
66
|
+
: await copyFile(srcPath, destPath);
|
|
67
|
+
}
|
|
48
68
|
}
|
|
49
69
|
|
|
50
70
|
async function modifyCreatedComponent(destPath, componentName) {
|
|
@@ -58,17 +78,17 @@ async function modifyCreatedComponent(destPath, componentName) {
|
|
|
58
78
|
let targetPath = filePath;
|
|
59
79
|
|
|
60
80
|
if (filePath.endsWith("constants.ts")) {
|
|
61
|
-
updatedContent = updatedContent.replace(
|
|
81
|
+
updatedContent = updatedContent.replace(BOILERPLATE_NAME, componentName);
|
|
62
82
|
}
|
|
63
83
|
|
|
64
84
|
if (filePath.endsWith("stories.ts")) {
|
|
65
85
|
updatedContent = updatedContent
|
|
66
|
-
.replaceAll(
|
|
86
|
+
.replaceAll(BOILERPLATE_NAME, componentName)
|
|
67
87
|
.replace("{{component_id}}", String(storybookId));
|
|
68
88
|
}
|
|
69
89
|
|
|
70
|
-
if (targetPath.endsWith(`${
|
|
71
|
-
targetPath = targetPath.replace(
|
|
90
|
+
if (targetPath.endsWith(`${BOILERPLATE_NAME}.vue`)) {
|
|
91
|
+
targetPath = targetPath.replace(BOILERPLATE_NAME, componentName);
|
|
72
92
|
|
|
73
93
|
await rename(filePath, targetPath);
|
|
74
94
|
}
|
package/bin/commands/init.js
CHANGED
|
@@ -15,7 +15,9 @@ export async function vuelessInit(options) {
|
|
|
15
15
|
const isValidOptions = options.every((option) => vuelessInitOptions.includes(option));
|
|
16
16
|
|
|
17
17
|
if (options.length && !isValidOptions) {
|
|
18
|
-
|
|
18
|
+
console.log(styleText("red", "Invalid options were provided."));
|
|
19
|
+
|
|
20
|
+
return;
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
const fileExt = options.includes("--ts") ? TYPESCRIPT_EXT : JAVASCRIPT_EXT;
|
|
@@ -31,21 +33,21 @@ export async function vuelessInit(options) {
|
|
|
31
33
|
|
|
32
34
|
await rename(formattedDestPath, renamedTarget);
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
console.warn(
|
|
37
|
+
styleText(
|
|
38
|
+
"yellow",
|
|
39
|
+
// eslint-disable-next-line vue/max-len
|
|
40
|
+
`Current Vueless config backed into: '${path.basename(renamedTarget)}' folder. Don't forget to remove it before commit.`,
|
|
41
|
+
),
|
|
38
42
|
);
|
|
39
|
-
|
|
40
|
-
console.warn(warnMessage);
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
await writeFile(formattedDestPath, DEFAULT_VUELESS_CONFIG_CONTENT, "utf-8");
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
console.log(
|
|
48
|
+
styleText(
|
|
49
|
+
"green",
|
|
50
|
+
`The '${formattedDestPath.split(path.sep).at(-1)}' was created in the project root directory.`,
|
|
51
|
+
),
|
|
48
52
|
);
|
|
49
|
-
|
|
50
|
-
console.log(successMessage);
|
|
51
53
|
}
|
package/bin/constants.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export const SRC_COMPONENTS_PATH = "/src/components";
|
|
2
2
|
export const COMPONENTS_PATH = "/components";
|
|
3
|
+
|
|
3
4
|
export const DEFAULT_VUELESS_CONFIG_CONTENT = `
|
|
4
5
|
export default {
|
|
5
6
|
/**
|
|
@@ -10,7 +11,7 @@ export default {
|
|
|
10
11
|
text: 14,
|
|
11
12
|
outline: 2,
|
|
12
13
|
rounding: 8,
|
|
13
|
-
|
|
14
|
+
disabledOpacity: 50,
|
|
14
15
|
colorMode: "auto",
|
|
15
16
|
|
|
16
17
|
/**
|
package/bin/utils/dataUtils.js
CHANGED
|
@@ -6,14 +6,14 @@ import { readFile } from "node:fs/promises";
|
|
|
6
6
|
import { getDirFiles } from "../../utils/node/helper.js";
|
|
7
7
|
|
|
8
8
|
import { SRC_COMPONENTS_PATH, COMPONENTS_PATH } from "../constants.js";
|
|
9
|
-
import {
|
|
9
|
+
import { VUELESS_PACKAGE_DIR } from "../../constants.js";
|
|
10
10
|
|
|
11
11
|
const storiesName = "stories.ts";
|
|
12
12
|
|
|
13
13
|
export async function getStorybookId() {
|
|
14
14
|
const srcComponentsDir = path.join(cwd(), SRC_COMPONENTS_PATH);
|
|
15
15
|
const componentsDir = path.join(cwd(), COMPONENTS_PATH);
|
|
16
|
-
const vuelessPackagePath = path.join(cwd(),
|
|
16
|
+
const vuelessPackagePath = path.join(cwd(), VUELESS_PACKAGE_DIR);
|
|
17
17
|
const isSrcComponentsDir = existsSync(srcComponentsDir);
|
|
18
18
|
const isComponentsDir = existsSync(componentsDir);
|
|
19
19
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { computed, ref, watch } from "vue";
|
|
2
|
+
import { merge } from "lodash-es";
|
|
3
|
+
import { recursiveRt } from "../adapter.locale/vueless.ts";
|
|
4
|
+
|
|
5
|
+
import { useLocale } from "./useLocale.ts";
|
|
6
|
+
|
|
7
|
+
import { COMPONENTS } from "../constants";
|
|
8
|
+
|
|
9
|
+
import type { VueMessageType } from "vue-i18n";
|
|
10
|
+
|
|
11
|
+
export function useComponentLocaleMessages<TLocale>(
|
|
12
|
+
componentName: keyof typeof COMPONENTS,
|
|
13
|
+
defaultLocale: Record<string, unknown>,
|
|
14
|
+
propsLocale: Record<string, unknown> = {},
|
|
15
|
+
) {
|
|
16
|
+
const { tm, locale } = useLocale();
|
|
17
|
+
|
|
18
|
+
const globalComponentMassages = ref(recursiveRt(tm(componentName) as VueMessageType));
|
|
19
|
+
|
|
20
|
+
watch(locale, () => {
|
|
21
|
+
globalComponentMassages.value = recursiveRt(tm(componentName) as VueMessageType);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const localeMessages = computed(
|
|
25
|
+
() => merge({}, defaultLocale, globalComponentMassages.value, propsLocale) as TLocale,
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
return { localeMessages };
|
|
29
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { onMounted, ref, nextTick } from "vue";
|
|
2
|
-
import { COLOR_MODE_KEY,
|
|
2
|
+
import { COLOR_MODE_KEY, DARK_MODE_CLASS } from "../constants.js";
|
|
3
3
|
import { ColorMode } from "../types.js";
|
|
4
4
|
|
|
5
5
|
export function useDarkMode() {
|
|
@@ -7,7 +7,7 @@ export function useDarkMode() {
|
|
|
7
7
|
|
|
8
8
|
onMounted(async () => {
|
|
9
9
|
await nextTick(() => {
|
|
10
|
-
const isDarkModeClass = document.documentElement.classList.contains(
|
|
10
|
+
const isDarkModeClass = document.documentElement.classList.contains(DARK_MODE_CLASS);
|
|
11
11
|
const cashedDarkMode = localStorage.getItem(COLOR_MODE_KEY) as ColorMode | null;
|
|
12
12
|
const isDarkModeCashed = cashedDarkMode !== null && cashedDarkMode === ColorMode.Dark;
|
|
13
13
|
|
package/composables/useLocale.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject } from "vue";
|
|
2
|
-
import createVuelessAdapter from "../
|
|
2
|
+
import createVuelessAdapter from "../adapter.locale/vueless.ts";
|
|
3
3
|
|
|
4
|
-
import type { LocaleInstance, LocaleOptions } from "../
|
|
4
|
+
import type { LocaleInstance, LocaleOptions } from "../adapter.locale/vueless.ts";
|
|
5
5
|
import type { InjectionKey } from "vue";
|
|
6
6
|
|
|
7
7
|
export const LocaleSymbol: InjectionKey<LocaleInstance> = Symbol.for("vueless:locale");
|
package/composables/useUI.ts
CHANGED
|
@@ -67,7 +67,7 @@ export default function useUI<T>(
|
|
|
67
67
|
);
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
|
-
* Get classes by given key (including CVA if config set).
|
|
70
|
+
* Get classes by a given key (including CVA if config set).
|
|
71
71
|
*/
|
|
72
72
|
function getClasses(key: string, mutatedProps?: MutatedProps) {
|
|
73
73
|
return computed(() => {
|
|
@@ -117,7 +117,7 @@ export default function useUI<T>(
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
/**
|
|
120
|
-
* Get
|
|
120
|
+
* Get element attributes for a given key.
|
|
121
121
|
*/
|
|
122
122
|
function getAttrs(configKey: string, classes: ComputedRef<string>) {
|
|
123
123
|
const vuelessAttrs = ref({} as KeyAttrs);
|
|
@@ -215,7 +215,7 @@ export default function useUI<T>(
|
|
|
215
215
|
|
|
216
216
|
if (config.value[firstKey] === undefined) {
|
|
217
217
|
// eslint-disable-next-line no-console
|
|
218
|
-
console.warn(`[
|
|
218
|
+
console.warn(`[vueless] Missing ${firstKey} extend key.`);
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
extendsKeyConfig = getMergedConfig({
|
package/constants.js
CHANGED
|
@@ -10,16 +10,17 @@ export const SECONDARY_COLOR = "secondary";
|
|
|
10
10
|
export const GRAYSCALE_COLOR = "grayscale";
|
|
11
11
|
export const INHERIT_COLOR = "inherit";
|
|
12
12
|
|
|
13
|
-
/* Vueless
|
|
14
|
-
export const
|
|
15
|
-
export const
|
|
16
|
-
export const
|
|
13
|
+
/* Vueless keys */
|
|
14
|
+
export const TEXT = "text";
|
|
15
|
+
export const OUTLINE = "outline";
|
|
16
|
+
export const ROUNDING = "rounding";
|
|
17
|
+
export const DISABLED_OPACITY = "disabled-opacity";
|
|
18
|
+
|
|
19
|
+
/* Vueless color mode keys */
|
|
17
20
|
export const COLOR_MODE_KEY = "vl-color-mode";
|
|
18
21
|
export const AUTO_MODE_KEY = "vl-auto-mode";
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export const DARK_MODE_SELECTOR = "vl-dark";
|
|
22
|
-
export const LIGHT_MODE_SELECTOR = "vl-light";
|
|
22
|
+
export const DARK_MODE_CLASS = "vl-dark";
|
|
23
|
+
export const LIGHT_MODE_CLASS = "vl-light";
|
|
23
24
|
|
|
24
25
|
/* Vueless defaults */
|
|
25
26
|
export const DEFAULT_PRIMARY_COLOR = GRAYSCALE_COLOR;
|
|
@@ -33,6 +34,7 @@ export const OUTLINE_INCREMENT = 1; /* pixels */
|
|
|
33
34
|
export const DEFAULT_ROUNDING = 8; /* pixels */
|
|
34
35
|
export const ROUNDING_DECREMENT = 4; /* pixels */
|
|
35
36
|
export const ROUNDING_INCREMENT = 6; /* pixels */
|
|
37
|
+
export const DEFAULT_DISABLED_OPACITY = 50; /* presents */
|
|
36
38
|
|
|
37
39
|
/* Vueless supported color shades */
|
|
38
40
|
export const PRIMARY_COLORS = [
|
|
@@ -239,10 +241,10 @@ export const COMPONENTS = {
|
|
|
239
241
|
UInput: "ui.form-input",
|
|
240
242
|
UInputFile: "ui.form-input-file",
|
|
241
243
|
UInputNumber: "ui.form-input-number",
|
|
242
|
-
UInputSearch: "ui.form-input-search",
|
|
243
244
|
UInputCounter: "ui.form-input-counter",
|
|
244
245
|
UInputPassword: "ui.form-input-password",
|
|
245
246
|
UInputRating: "ui.form-input-rating",
|
|
247
|
+
UInputSearch: "ui.form-input-search",
|
|
246
248
|
UTextarea: "ui.form-textarea",
|
|
247
249
|
USelect: "ui.form-select",
|
|
248
250
|
UListbox: "ui.form-listbox",
|
|
@@ -263,12 +265,11 @@ export const COMPONENTS = {
|
|
|
263
265
|
UText: "ui.text-block",
|
|
264
266
|
UAlert: "ui.text-alert",
|
|
265
267
|
UNotify: "ui.text-notify",
|
|
266
|
-
|
|
268
|
+
UNumber: "ui.text-number",
|
|
267
269
|
UFile: "ui.text-file",
|
|
268
270
|
UFiles: "ui.text-files",
|
|
269
271
|
UEmpty: "ui.text-empty",
|
|
270
272
|
UBadge: "ui.text-badge",
|
|
271
|
-
UNumber: "ui.text-number",
|
|
272
273
|
|
|
273
274
|
/* Containers */
|
|
274
275
|
UDivider: "ui.container-divider",
|
|
@@ -301,9 +302,14 @@ export const COMPONENTS = {
|
|
|
301
302
|
ULoader: "ui.loader",
|
|
302
303
|
ULoaderProgress: "ui.loader-progress",
|
|
303
304
|
ULoaderOverlay: "ui.loader-overlay",
|
|
305
|
+
USkeleton: "ui.skeleton",
|
|
306
|
+
USkeletonText: "ui.skeleton-text",
|
|
307
|
+
USkeletonInput: "ui.skeleton-input",
|
|
308
|
+
USkeletonChoice: "ui.skeleton-choice",
|
|
304
309
|
|
|
305
310
|
/* Other */
|
|
306
311
|
UDot: "ui.other-dot",
|
|
312
|
+
UChip: "ui.other-chip",
|
|
307
313
|
UThemeColorToggle: "ui.other-theme-color-toggle",
|
|
308
314
|
};
|
|
309
315
|
|
|
@@ -315,7 +321,6 @@ export const COMPONENTS = {
|
|
|
315
321
|
export const TAILWIND_MERGE_EXTENSION = {
|
|
316
322
|
extend: {
|
|
317
323
|
theme: {
|
|
318
|
-
colors: ["brand", "brand-"],
|
|
319
324
|
spacing: ["safe-top", "safe-bottom", "safe-left", "safe-right"],
|
|
320
325
|
},
|
|
321
326
|
classGroups: {
|
|
@@ -367,23 +372,29 @@ export const DEFAULT_SVGO_CONFIG = {
|
|
|
367
372
|
};
|
|
368
373
|
|
|
369
374
|
/* Vueless general */
|
|
375
|
+
export const INTERNAL_ENV = "internal";
|
|
376
|
+
export const STORYBOOK_ENV = "storybook";
|
|
377
|
+
export const NUXT_MODULE_ENV = "nuxt-module";
|
|
378
|
+
|
|
379
|
+
export const VUELESS_LIBRARY = "vueless";
|
|
380
|
+
export const INTERNAL_ICONS_LIBRARY = "internal";
|
|
381
|
+
export const STORYBOOK_ICONS_LIBRARY = "storybook";
|
|
382
|
+
|
|
383
|
+
export const NODE_MODULES_DIR = "node_modules";
|
|
384
|
+
export const VUELESS_PACKAGE_DIR = `${NODE_MODULES_DIR}/vueless`;
|
|
385
|
+
export const VUELESS_CACHE_DIR = `${NODE_MODULES_DIR}/.cache/vueless`;
|
|
386
|
+
export const VUELESS_LOCAL_DIR = "src";
|
|
370
387
|
export const ICONS_DIR = "icons";
|
|
371
|
-
export const
|
|
372
|
-
export const
|
|
373
|
-
|
|
374
|
-
export const
|
|
375
|
-
export const
|
|
376
|
-
|
|
377
|
-
export const
|
|
378
|
-
export const VUELESS_LOCAL_DIR = `src`;
|
|
379
|
-
export const VUELESS_ICONS_DIR = `${VUELESS_DIR}/${ICONS_DIR}/app`;
|
|
380
|
-
export const APP_ICONS_LOCAL_DIR = `src/${ICONS_DIR}/app`;
|
|
381
|
-
export const APP_ICONS_CACHED_DIR = `${VUELESS_CACHE_DIR}/${ICONS_DIR}/app`;
|
|
388
|
+
export const ICONS_VUELESS_DIR = `${VUELESS_PACKAGE_DIR}/${ICONS_DIR}`;
|
|
389
|
+
export const ICONS_CACHED_DIR = `${VUELESS_CACHE_DIR}/${ICONS_DIR}`;
|
|
390
|
+
|
|
391
|
+
export const ICONS_VIRTUAL_MODULE_ID = "virtual:vueless/icons";
|
|
392
|
+
export const RESOLVED_ICONS_VIRTUAL_MODULE_ID = `\0${ICONS_VIRTUAL_MODULE_ID}`;
|
|
393
|
+
|
|
394
|
+
export const VUELESS_TAILWIND_SAFELIST = `${VUELESS_CACHE_DIR}/safelist.txt`;
|
|
382
395
|
export const VUELESS_CONFIGS_CACHED_DIR = `${VUELESS_CACHE_DIR}/configs`;
|
|
383
396
|
export const VUELESS_MERGED_CONFIGS_CACHED_DIR = `${VUELESS_CACHE_DIR}/mergedConfigs`;
|
|
384
|
-
export const
|
|
385
|
-
export const STORYBOOK_ICONS_LOCAL_DIR = `${VUELESS_LOCAL_DIR}/${STORYBOOK_ICONS}`;
|
|
386
|
-
export const STORYBOOK_ICONS_CACHED_DIR = `${VUELESS_CACHE_DIR}/${STORYBOOK_ICONS}`;
|
|
397
|
+
export const VUELESS_CONFIG_FILE_NAME = "vueless.config";
|
|
387
398
|
|
|
388
399
|
/* System error codes */
|
|
389
400
|
export const DEFAULT_EXIT_CODE = 0;
|
|
@@ -396,3 +407,4 @@ export const EXTENDS_PATTERN_REG_EXP = /\{>[^}]*}/g;
|
|
|
396
407
|
export const DYNAMIC_COLOR_PATTERN = "{color}";
|
|
397
408
|
export const JAVASCRIPT_EXT = ".js";
|
|
398
409
|
export const TYPESCRIPT_EXT = ".ts";
|
|
410
|
+
export const VUE_EXT = ".vue";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/addon-docs/blocks";
|
|
2
2
|
|
|
3
3
|
import * as stories from "./stories.ts";
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/addon-docs/blocks";
|
|
2
2
|
|
|
3
3
|
import * as stories from "./stories.ts";
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M451.57-278.57h62.86v-166h167v-62.86h-167v-174h-62.86v174h-173v62.86h173v166ZM480.3-74.02q-84.2 0-158.04-31.88-73.84-31.88-129.16-87.2-55.32-55.32-87.2-129.2-31.88-73.88-31.88-158.17 0-84.28 31.88-158.2 31.88-73.91 87.16-128.74 55.28-54.84 129.18-86.82 73.9-31.99 158.21-31.99 84.3 0 158.25 31.97 73.94 31.97 128.75 86.77 54.82 54.8 86.79 128.88 31.98 74.08 31.98 158.33 0 84.24-31.99 158.07-31.98 73.84-86.82 128.95-54.83 55.1-128.87 87.17Q564.5-74.02 480.3-74.02Zm.2-68.13q140.54 0 238.95-98.75 98.4-98.76 98.4-239.6 0-140.54-98.22-238.95-98.21-98.4-239.75-98.4-140.16 0-238.95 98.22-98.78 98.21-98.78 239.75 0 140.16 98.75 238.95 98.76 98.78 239.6 98.78ZM480-480Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M243.91-240.02 195.93-288l407.94-407.93H231.61v-68.14h488.37v488.14h-68.37v-372.03l-407.7 407.94Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M268.09-146.85q-51.7 0-84.88-37.18-33.19-37.19-28.19-87.88H53.35l14.91-68.13h119.65q14.52-16.09 35.04-25.51 20.52-9.43 45.11-9.43t45.01 9.44q20.41 9.45 35.19 25.5h199.2l93.19-404.98h-458l3.37-14.8q5.55-23.95 23.85-38.76 18.29-14.81 42.15-14.81h473.91l-40.91 179.32h124.76L926.17-479.2l-41.39 207.29H802.1q5 50.69-28.67 87.88-33.67 37.18-85.34 37.18-51.7 0-84.88-37.18-33.19-37.19-28.19-87.88H382.15q5 50.91-28.68 87.99-33.69 37.07-85.38 37.07Zm369.74-282.19h208.06l6.48-34.44-76.65-102.45h-106.6l-31.29 136.89Zm-5.94-279.47 8.76-36.51-93.19 404.98 8-36 35.19-151.26 41.24-181.21ZM17.46-432.46l16.91-68.13h228.37l-16.91 68.13H17.46Zm80-151.26 16.91-68.37h268.37l-16.91 68.37H97.46Zm170.59 368.74q19.26 0 32.61-13.82 13.36-13.82 13.36-32.08 0-19.25-13.32-32.61t-32.58-13.36q-18.25 0-32.11 13.32t-13.86 32.58q0 18.26 13.82 32.11 13.82 13.86 32.08 13.86Zm420 0q19.26 0 32.61-13.82 13.36-13.82 13.36-32.08 0-19.25-13.32-32.61t-32.58-13.36q-18.25 0-32.11 13.32t-13.86 32.58q0 18.26 13.82 32.11 13.82 13.86 32.08 13.86Z"/></svg>
|
package/index.d.ts
CHANGED
|
@@ -12,8 +12,8 @@ export {
|
|
|
12
12
|
} from "./utils/helper.ts";
|
|
13
13
|
export { getArgTypes, getSlotNames, getSlotsFragment, getSource } from "./utils/storybook.ts";
|
|
14
14
|
export { isMac, isPWA, isIOS, isAndroid, isMobileApp, isWindows } from "./utils/platform.ts";
|
|
15
|
-
export { default as createVueI18nAdapter } from "./
|
|
16
|
-
export { default as defaultEnLocale } from "./
|
|
15
|
+
export { default as createVueI18nAdapter } from "./adapter.locale/vue-i18n.ts";
|
|
16
|
+
export { default as defaultEnLocale } from "./adapter.locale/locales/en.ts";
|
|
17
17
|
export { default as useUI } from "./composables/useUI.ts";
|
|
18
18
|
export { useLocale } from "./composables/useLocale.ts";
|
|
19
19
|
export { useLoaderProgress } from "./ui.loader-progress/useLoaderProgress.ts";
|