@prefecthq/prefect-ui-library
Version:
This library is the Vue and Typescript component library for [Prefect 2](https://github.com/PrefectHQ/prefect) and [Prefect Cloud 2](https://www.prefect.io/cloud/). _The components and utilities in this project are not meant to be used independently_.
36 lines (26 loc) • 879 B
text/typescript
import { Ref, readonly, ref } from 'vue'
import { ColorMode, colorModes } from '@/types/ColorMode'
const internalValue = ref<ColorMode | null>(null)
export function getColorModeClass(mode: ColorMode | null): string {
return `color-mode-${mode ?? 'default'}`
}
export function isColorMode(value: unknown): value is ColorMode {
if (typeof value !== 'string') {
return false
}
return colorModes.includes(value as ColorMode)
}
export function applyColorModeClass(value: ColorMode | null): void {
colorModes.forEach(mode => document.body.classList.remove(getColorModeClass(mode)))
const classes = getColorModeClass(value)
document.body.classList.add(classes)
internalValue.value = value
}
type UseColorMode = {
value: Readonly<Ref<ColorMode | null>>,
}
export function useColorMode(): UseColorMode {
return {
value: readonly(internalValue),
}
}