vueless
Version:
Vue Styleless UI Component Library, powered by Tailwind CSS.
141 lines (132 loc) • 4.36 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 {
cx,
cva,
compose,
setColor,
getDefaults,
vuelessConfig,
setVuelessConfig,
getMergedConfig as mergeConfigs,
} from "./utils/ui";
export { addToRequestQueue, removeFromRequestQueue } from "./utils/requestQueue";
export { isMac, isPWA, isIOS, isAndroid, isMobileApp, isWindows } from "./utils/platform";
export { getTheme, setTheme, resetTheme, normalizeThemeConfig, cssVar, setRootCSSVariables } 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 { useUI } from "./composables/useUI";
export { useDarkMode } from "./composables/useDarkMode";
export { useRequestQueue } from "./composables/useRequestQueue";
export { useBreakpoint, r } from "./composables/useBreakpoint";
export { useLoaderOverlay } from "./ui.loader-overlay/useLoaderOverlay";
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 { loaderOverlayOn, loaderOverlayOff } from "./ui.loader-overlay/utilLoaderOverlay";
/* notifications */
export {
notify,
notifySuccess,
notifyWarning,
notifyInfo,
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";
/* eslint-enable prettier/prettier */
/* types */
export type {
/* Core configuration types */
Config,
ThemeConfig,
ThemeConfigText,
ThemeConfigRounding,
ThemeConfigOutline,
MergedThemeConfig,
NestedComponent,
ComponentConfig,
ComponentDefaults,
ComponentCustomProp,
ComponentCustomProps,
CreateVuelessOptions,
/* Color and theme types */
StateColors,
ColorShades,
PrimaryColors,
NeutralColors,
PrimaryColorName,
NeutralColorName,
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,
};
}