vueless
Version:
Vue Styleless UI Component Library, powered by Tailwind CSS.
200 lines (191 loc) • 9.09 kB
text/typescript
/* eslint-disable prettier/prettier */
import { createLocale, LocaleSymbol } from "./composables/useLocale";
import { createLoaderOverlay, LoaderOverlaySymbol } from "./ui.loader-overlay/useLoaderOverlay";
import { createLoaderProgress, LoaderProgressSymbol } from "./ui.loader-progress/useLoaderProgress";
import { setTheme } from "./utils/theme";
import { setVuelessConfig } from "./utils/ui";
import type { App } from "vue"
import type { CreateVuelessOptions } from "./types.ts"
/* utils */
export {
isSSR,
isCSR,
setTitle,
getStored,
getRandomId,
getCookie,
setCookie,
deleteCookie,
createDebounce,
hasSlotContent,
} from "./utils/helper";
export { isMac, isPWA, isIOS, isAndroid, isMobileApp, isWindows } from "./utils/platform";
export { cx, cva, compose, getDefaults, setVuelessConfig, setColor, vuelessConfig } from "./utils/ui";
export { getTheme, setTheme, resetTheme, normalizeThemeConfig, cssVar } from "./utils/theme";
export { getArgs, getArgTypes, getSlotNames, getSlotsFragment, getSource, getDocsDescription } from "./utils/storybook";
/* adapters */
export { default as defaultEnLocale } from "./adapter.locale/locales/en";
export { createVuelessAdapter } from "./adapter.locale/vueless";
export { createVueI18nAdapter } from "./adapter.locale/vue-i18n";
/* composables */
export { useLocale } from "./composables/useLocale";
export { default as useUI } from "./composables/useUI";
export { useDarkMode } from "./composables/useDarkMode";
export { useLoaderProgress } from "./ui.loader-progress/useLoaderProgress";
export { useMutationObserver } from "./composables/useMutationObserver";
export { Direction, useAutoPosition } from "./composables/useAutoPosition";
export { useComponentLocaleMessages } from "./composables/useComponentLocaleMassages";
/* loaders */
export { loaderProgressOn, loaderProgressOff } from "./ui.loader-progress/utilLoaderProgress";
export { useLoaderOverlay } from "./ui.loader-overlay/useLoaderOverlay";
export { loaderOverlayOn, loaderOverlayOff } from "./ui.loader-overlay/utilLoaderOverlay";
/* notifications */
export {
notify,
notifySuccess,
notifyWarning,
notifyError,
clearNotifications,
setDelayedNotify,
getDelayedNotify,
} from "./ui.text-notify/utilNotify";
export { NotificationType, NotificationPosition, NotificationDuration } from "./ui.text-notify/constants";
/* directives */
export { default as vTooltip } from "./v.tooltip/vTooltip";
export { default as vClickOutside } from "./v.click-outside/vClickOutside";
/* components */
/* Buttons & Links */
export { default as UButton } from "./ui.button/UButton.vue";
export { default as ULink } from "./ui.button-link/ULink.vue";
export { default as UToggle } from "./ui.button-toggle/UToggle.vue";
/* Dropdowns */
export { default as UDropdownButton } from "./ui.dropdown-button/UDropdownButton.vue";
export { default as UDropdownBadge } from "./ui.dropdown-badge/UDropdownBadge.vue";
export { default as UDropdownLink } from "./ui.dropdown-link/UDropdownLink.vue";
/* Form Inputs & Controls */
export { default as UInput } from "./ui.form-input/UInput.vue";
export { default as UInputFile } from "./ui.form-input-file/UInputFile.vue";
export { default as UInputNumber } from "./ui.form-input-number/UInputNumber.vue";
export { default as UInputCounter } from "./ui.form-input-counter/UInputCounter.vue";
export { default as UInputPassword } from "./ui.form-input-password/UInputPassword.vue";
export { default as UInputRating } from "./ui.form-input-rating/UInputRating.vue";
export { default as UInputSearch } from "./ui.form-input-search/UInputSearch.vue";
export { default as UTextarea } from "./ui.form-textarea/UTextarea.vue";
export { default as USelect } from "./ui.form-select/USelect.vue";
export { default as UListbox } from "./ui.form-listbox/UListbox.vue";
export { default as UCheckbox } from "./ui.form-checkbox/UCheckbox.vue";
export { default as UCheckboxGroup } from "./ui.form-checkbox-group/UCheckboxGroup.vue";
export { default as UCheckboxMultiState } from "./ui.form-checkbox-multi-state/UCheckboxMultiState.vue";
export { default as USwitch } from "./ui.form-switch/USwitch.vue";
export { default as URadio } from "./ui.form-radio/URadio.vue";
export { default as URadioGroup } from "./ui.form-radio-group/URadioGroup.vue";
export { default as UCalendar } from "./ui.form-calendar/UCalendar.vue";
export { default as UDatePicker } from "./ui.form-date-picker/UDatePicker.vue";
export { default as UDatePickerRange } from "./ui.form-date-picker-range/UDatePickerRange.vue";
export { default as UColorPicker } from "./ui.form-color-picker/UColorPicker.vue";
export { default as ULabel } from "./ui.form-label/ULabel.vue";
/* Text & Content */
export { default as UHeader } from "./ui.text-header/UHeader.vue";
export { default as UText } from "./ui.text-block/UText.vue";
export { default as UAlert } from "./ui.text-alert/UAlert.vue";
export { default as UNotify } from "./ui.text-notify/UNotify.vue";
export { default as UNumber } from "./ui.text-number/UNumber.vue";
export { default as UFile } from "./ui.text-file/UFile.vue";
export { default as UFiles } from "./ui.text-files/UFiles.vue";
export { default as UEmpty } from "./ui.text-empty/UEmpty.vue";
export { default as UBadge } from "./ui.text-badge/UBadge.vue";
/* Containers */
export { default as UDivider } from "./ui.container-divider/UDivider.vue";
export { default as UCol } from "./ui.container-col/UCol.vue";
export { default as URow } from "./ui.container-row/URow.vue";
export { default as UGroup } from "./ui.container-group/UGroup.vue";
export { default as UGroups } from "./ui.container-groups/UGroups.vue";
export { default as UAccordion } from "./ui.container-accordion/UAccordion.vue";
export { default as UAccordionItem } from "./ui.container-accordion-item/UAccordionItem.vue";
export { default as UCard } from "./ui.container-card/UCard.vue";
export { default as UModal } from "./ui.container-modal/UModal.vue";
export { default as UModalConfirm } from "./ui.container-modal-confirm/UModalConfirm.vue";
export { default as UPage } from "./ui.container-page/UPage.vue";
/* Images and Icons */
export { default as UIcon } from "./ui.image-icon/UIcon.vue";
export { default as UAvatar } from "./ui.image-avatar/UAvatar.vue";
/* Data */
export { default as UTable } from "./ui.data-table/UTable.vue";
export { default as UDataList } from "./ui.data-list/UDataList.vue";
/* Navigation */
export { default as UTab } from "./ui.navigation-tab/UTab.vue";
export { default as UTabs } from "./ui.navigation-tabs/UTabs.vue";
export { default as UProgress } from "./ui.navigation-progress/UProgress.vue";
export { default as UPagination } from "./ui.navigation-pagination/UPagination.vue";
export { default as UBreadcrumbs } from "./ui.navigation-breadcrumbs/UBreadcrumbs.vue";
/* Loaders and Skeletons */
export { default as ULoader } from "./ui.loader/ULoader.vue";
export { default as ULoaderProgress } from "./ui.loader-progress/ULoaderProgress.vue";
export { default as ULoaderOverlay } from "./ui.loader-overlay/ULoaderOverlay.vue";
export { default as USkeleton } from "./ui.skeleton/USkeleton.vue";
export { default as USkeletonText } from "./ui.skeleton-text/USkeletonText.vue";
export { default as USkeletonInput } from "./ui.skeleton-input/USkeletonInput.vue";
export { default as USkeletonChoice } from "./ui.skeleton-choice/USkeletonChoice.vue";
/* Other */
export { default as UDot } from "./ui.other-dot/UDot.vue";
export { default as UChip } from "./ui.other-chip/UChip.vue";
export { default as UThemeColorToggle } from "./ui.other-theme-color-toggle/UThemeColorToggle.vue";
/* eslint-enable prettier/prettier */
/* types */
export type {
/* Core configuration types */
Config,
ThemeConfig,
ThemeConfigText,
ThemeConfigRounding,
ThemeConfigOutline,
MergedThemeConfig,
NestedComponent,
ComponentConfig,
ComponentDefaults,
CreateVuelessOptions,
/* Color and theme types */
StateColors,
PrimaryColors,
NeutralColors,
VuelessCssVariables,
/* Component and Directive types */
Directives,
Components,
ComponentNames,
/* Utility types */
UnknownType,
UnknownArray,
UnknownObject,
CVACompoundVariants,
CVA,
/* Vue component utility types */
ComponentType,
ComponentProps,
ComponentSlots,
ComponentEmit,
ComponentExposed,
/* Locale types */
LocaleOptions,
LocaleInstance,
LocaleMessages,
} from "./types";
/* Export enums directly (not as types) */
export { ColorMode } from "./types";
export function createVueless(options: CreateVuelessOptions = {}) {
const i18n = createLocale(options.i18n);
const loaderOverlay = createLoaderOverlay();
const loaderProgress = createLoaderProgress();
const install = (app: App) => {
app.provide(LocaleSymbol, i18n);
app.provide(LoaderOverlaySymbol, loaderOverlay);
app.provide(LoaderProgressSymbol, loaderProgress);
};
/* set vueless config from a client (uses in Nuxt) */
setVuelessConfig(options.config);
/* init theme after first render */
setTimeout(setTheme, 0);
return {
install,
};
}