UNPKG

sigma-ui

Version:
16 lines 3.32 kB
{ "name": "checkbox", "dependencies": [], "registryDependencies": [], "files": [ { "name": "Checkbox.vue", "content": "<script setup lang=\"ts\">\nimport type { CheckboxRootEmits, CheckboxRootProps } from 'reka-ui';\nimport { CheckboxIndicator, CheckboxRoot, useForwardPropsEmits } from 'reka-ui';\nimport { CheckIcon } from 'lucide-vue-next';\n\ninterface Props extends CheckboxRootProps {\n label?: string;\n description?: string;\n id?: string;\n}\n\nconst props = defineProps<Props>();\nconst emits = defineEmits<CheckboxRootEmits>();\n\nconst forwarded = useForwardPropsEmits(props, emits);\n</script>\n\n<template>\n <div\n class=\"sigma-ui-checkbox-wrapper\"\n :class=\"[{ 'sigma-ui-checkbox-wrapper--flex-start': props.description }]\"\n >\n <CheckboxRoot\n v-bind=\"forwarded\"\n :id=\"(props.label && props.id) || forwarded.id\"\n class=\"sigma-ui-checkbox\"\n >\n <transition name=\"fade-slide-top\">\n <CheckboxIndicator class=\"sigma-ui-checkbox__indicator\">\n <slot>\n <CheckIcon class=\"sigma-ui-checkbox__icon\" />\n </slot>\n </CheckboxIndicator>\n </transition>\n </CheckboxRoot>\n <div\n v-if=\"props.label\"\n class=\"sigma-ui-checkbox__content\"\n >\n <label\n v-if=\"props.label\"\n class=\"sigma-ui-checkbox__label\"\n :for=\"props.id\"\n >{{ props.label }}\n </label>\n <p\n v-if=\"props.description\"\n class=\"sigma-ui-checkbox__description\"\n >\n {{ props.description }}\n </p>\n </div>\n </div>\n</template>\n\n<style>\n.sigma-ui-checkbox-wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.sigma-ui-checkbox-wrapper--flex-start {\n align-items: flex-start;\n}\n\n.sigma-ui-checkbox {\n overflow: hidden;\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n border: 1px solid hsl(var(--primary));\n border-radius: var(--radius-xs);\n background-color: hsl(var(--background));\n}\n\n.sigma-ui-checkbox:focus-visible {\n box-shadow:\n 0 0 0 2px hsl(var(--background)),\n 0 0 0 4px hsl(var(--ring));\n outline: none;\n}\n\n.sigma-ui-checkbox:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.sigma-ui-checkbox[data-state=\"checked\"] {\n background-color: hsl(var(--primary));\n color: hsl(var(--primary-foreground));\n}\n\n.sigma-ui-checkbox__indicator {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n color: currentcolor;\n}\n\n.sigma-ui-checkbox__content {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n line-height: 1;\n}\n\n.sigma-ui-checkbox__label {\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1;\n user-select: none;\n}\n\n.sigma-ui-checkbox:disabled + .sigma-ui-checkbox__content .sigma-ui-checkbox__label,\n.sigma-ui-checkbox:disabled + .sigma-ui-checkbox__content .sigma-ui-checkbox__description {\n opacity: 0.7;\n}\n\n.sigma-ui-checkbox__description {\n color: hsl(var(--muted-foreground));\n font-size: 0.875rem;\n line-height: 1.25rem;\n user-select: none;\n}\n</style>\n" }, { "name": "index.ts", "content": "export { default as Checkbox } from './Checkbox.vue';\n" } ], "type": "components:ui" }