UNPKG

vueless

Version:

Vue Styleless UI Component Library, powered by Tailwind CSS.

43 lines (32 loc) 944 B
import { inject, readonly, ref } from "vue"; import type { Ref, InjectionKey } from "vue"; interface LoaderOverlay { isLoading: Readonly<Ref<boolean, boolean>>; loaderOverlayOn: () => void; loaderOverlayOff: () => void; } export const LoaderOverlaySymbol: InjectionKey<LoaderOverlay> = Symbol.for("vueless:loader-overlay"); const isLoading = ref(true); function loaderOverlayOn(): void { isLoading.value = true; } function loaderOverlayOff(): void { isLoading.value = false; } export function createLoaderOverlay(): LoaderOverlay { return { isLoading: readonly(isLoading), loaderOverlayOn, loaderOverlayOff, }; } export function useLoaderOverlay(): LoaderOverlay { const loaderOverlay = inject(LoaderOverlaySymbol); if (!loaderOverlay) { throw new Error( "[vueless] LoaderOverlay not provided. Ensure you are using `provide` with `LoaderOverlaySymbol`.", ); } return loaderOverlay; }