@nuxt/ui
Version:
A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.
75 lines (74 loc) • 1.9 kB
JavaScript
import { ref, onScopeDispose } from "vue";
import { createHooks } from "hookable";
import appConfig from "#build/app.config";
import { useColorMode as useColorModeVueUse } from "@vueuse/core";
export { useHead } from "@unhead/vue";
export { useRoute, useRouter } from "vue-router";
export { defineShortcuts } from "../composables/defineShortcuts.js";
export { defineLocale } from "../composables/defineLocale.js";
export { useLocale } from "../composables/useLocale.js";
export const useColorMode = () => {
if (!appConfig.colorMode) {
return {
forced: true
};
}
const { store, system } = useColorModeVueUse();
return {
get preference() {
return store.value === "auto" ? "system" : store.value;
},
set preference(value) {
store.value = value === "system" ? "auto" : value;
},
get value() {
return store.value === "auto" ? system.value : store.value;
},
forced: false
};
};
export const useAppConfig = () => appConfig;
export const useCookie = (_name, _options = {}) => {
const value = ref(null);
return {
value,
get: () => value.value,
set: () => {
},
update: () => {
},
refresh: () => Promise.resolve(value.value),
remove: () => {
}
};
};
const state = {};
export const useState = (key, init) => {
if (state[key]) {
return state[key];
}
const value = ref(init());
state[key] = value;
return value;
};
const hooks = createHooks();
export function useNuxtApp() {
return {
isHydrating: true,
payload: { serverRendered: false },
hooks,
hook: hooks.hook
};
}
export function useRuntimeHook(name, fn) {
const nuxtApp = useNuxtApp();
const unregister = nuxtApp.hook(name, fn);
onScopeDispose(unregister);
}
export function defineNuxtPlugin(plugin) {
return {
install(app) {
app.runWithContext(() => plugin({ vueApp: app }));
}
};
}