UNPKG

@lui-ui/lui-vue

Version:

This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.

75 lines (74 loc) 3.23 kB
import { computed } from "vue"; import { useGlobalHiddenInputClasses } from "../../../composables/index.mjs"; export function useSwitchClasses(props) { const inputClasses = computed(() => { const classes = { ...useGlobalHiddenInputClasses(), width: { "w-8": props.size.value === "xs", "w-10": props.size.value === "sm", "w-12": props.size.value === "md", "w-14": props.size.value === "lg", "w-16": props.size.value === "xl" }, height: { "h-4": props.size.value === "xs", "h-5": props.size.value === "sm", "h-6": props.size.value === "md", "h-7": props.size.value === "lg", "h-8": props.size.value === "xl" }, borderRadius: { "rounded-full": props.rounded.value === "full", "rounded": props.rounded.value === true } }; return Object.values({ ...classes }); }); const spanClasses = computed(() => { const classes = { lineHeight: "leading-none", width: { "w-8 before:w-3": props.size.value === "xs", "w-10 before:w-4": props.size.value === "sm", "w-12 before:w-5": props.size.value === "md", "w-14 before:w-6": props.size.value === "lg", "w-16 before:w-7": props.size.value === "xl" }, height: { "h-4 before:h-3": props.size.value === "xs", "h-5 before:h-4": props.size.value === "sm", "h-6 before:h-5": props.size.value === "md", "h-7 before:h-6": props.size.value === "lg", "h-8 before:h-7": props.size.value === "xl" }, backgroundColor: "bg-secondary-500 dark:bg-secondary-800 peer-disabled:bg-secondary-100 peer-checked:peer-disabled:bg-success-100 peer-checked:bg-success-500 before:bg-white dark:before:bg-secondary-300", borderRadius: { "rounded-full before:rounded-full": props.rounded.value === "full", "rounded before:rounded-sm": props.rounded.value === true }, display: "inline-flex", position: "relative before:absolute", top: "before:top-0", bottom: "before:bottom-0", translate: { "before:translate-x-0.5 peer-checked:before:translate-x-[1.125rem]": props.size.value === "xs", "before:translate-x-0.5 peer-checked:before:translate-x-[1.375rem]": props.size.value === "sm", "before:translate-x-0.5 peer-checked:before:translate-x-[1.625rem]": props.size.value === "md", "before:translate-x-0.5 peer-checked:before:translate-x-[1.875rem]": props.size.value === "lg", "before:translate-x-0.5 peer-checked:before:translate-x-[2.125rem]": props.size.value === "xl" }, margin: "before:my-auto", transitionProperty: "before:transition transition", ringWidth: "peer-focus-visible:ring-2", ringColor: { "peer-focus-visible:ring-primary-500/40": props.state.value === null, "peer-focus-visible:ring-warning-500/40": props.state.value === "warning", "peer-focus-visible:ring-danger-500/40": props.state.value === false, "peer-focus-visible:ring-success-500/40": props.state.value === true } }; return Object.values({ ...classes }); }); return { inputClasses, spanClasses }; }