[ { "name": "utils", "type": "registry:lib", "dependencies": [ "clsx", "tailwind-merge" ], "files": [ { "path": "lib/utils.ts", "type": "registry:lib" } ] }, { "name": "theme-daylight", "type": "registry:theme", "cssVars": { "light": { "background": "36 39% 88%", "foreground": "36 45% 15%", "primary": "36 45% 70%", "primary-foreground": "36 45% 11%", "secondary": "40 35% 77%", "secondary-foreground": "36 45% 25%", "accent": "36 64% 57%", "accent-foreground": "36 72% 17%", "destructive": "0 84% 37%", "destructive-foreground": "0 0% 98%", "muted": "36 33% 75%", "muted-foreground": "36 45% 25%", "card": "36 46% 82%", "card-foreground": "36 45% 20%", "popover": "0 0% 100%", "popover-foreground": "240 10% 3.9%", "border": "36 45% 60%", "input": "36 45% 60%", "ring": "36 45% 30%", "chart-1": "25 34% 28%", "chart-2": "26 36% 34%", "chart-3": "28 40% 40%", "chart-4": "31 41% 48%", "chart-5": "35 43% 53%" }, "dark": { "background": "36 39% 88%", "foreground": "36 45% 15%", "primary": "36 45% 70%", "primary-foreground": "36 45% 11%", "secondary": "40 35% 77%", "secondary-foreground": "36 45% 25%", "accent": "36 64% 57%", "accent-foreground": "36 72% 17%", "destructive": "0 84% 37%", "destructive-foreground": "0 0% 98%", "muted": "36 33% 75%", "muted-foreground": "36 45% 25%", "card": "36 46% 82%", "card-foreground": "36 45% 20%", "popover": "0 0% 100%", "popover-foreground": "240 10% 3.9%", "border": "36 45% 60%", "input": "36 45% 60%", "ring": "36 45% 30%", "chart-1": "25 34% 28%", "chart-2": "26 36% 34%", "chart-3": "28 40% 40%", "chart-4": "31 41% 48%", "chart-5": "35 43% 53%" } } }, { "name": "theme-midnight", "type": "registry:theme", "cssVars": { "light": { "background": "240 5% 6%", "foreground": "60 5% 90%", "primary": "240 0% 90%", "primary-foreground": "60 0% 0%", "secondary": "240 4% 15%", "secondary-foreground": "60 5% 85%", "accent": "240 0% 13%", "accent-foreground": "60 0% 100%", "destructive": "0 60% 50%", "destructive-foreground": "0 0% 98%", "muted": "240 5% 25%", "muted-foreground": "60 5% 85%", "card": "240 4% 10%", "card-foreground": "60 5% 90%", "popover": "240 5% 15%", "popover-foreground": "60 5% 85%", "border": "240 6% 20%", "input": "240 6% 20%", "ring": "240 5% 90%", "chart-1": "359 2% 90%", "chart-2": "240 1% 74%", "chart-3": "240 1% 58%", "chart-4": "240 1% 42%", "chart-5": "240 2% 26%" }, "dark": { "background": "240 5% 6%", "foreground": "60 5% 90%", "primary": "240 0% 90%", "primary-foreground": "60 0% 0%", "secondary": "240 4% 15%", "secondary-foreground": "60 5% 85%", "accent": "240 0% 13%", "accent-foreground": "60 0% 100%", "destructive": "0 60% 50%", "destructive-foreground": "0 0% 98%", "muted": "240 5% 25%", "muted-foreground": "60 5% 85%", "card": "240 4% 10%", "card-foreground": "60 5% 90%", "popover": "240 5% 15%", "popover-foreground": "60 5% 85%", "border": "240 6% 20%", "input": "240 6% 20%", "ring": "240 5% 90%", "chart-1": "359 2% 90%", "chart-2": "240 1% 74%", "chart-3": "240 1% 58%", "chart-4": "240 1% 42%", "chart-5": "240 2% 26%" } } }, { "name": "theme-emerald", "type": "registry:theme", "cssVars": { "light": { "background": "0 0% 100%", "foreground": "240 10% 3.9%", "card": "0 0% 100%", "card-foreground": "240 10% 3.9%", "popover": "0 0% 100%", "popover-foreground": "240 10% 3.9%", "primary": "142 86% 28%", "primary-foreground": "356 29% 98%", "secondary": "240 4.8% 95.9%", "secondary-foreground": "240 5.9% 10%", "muted": "240 4.8% 95.9%", "muted-foreground": "240 3.8% 45%", "accent": "240 4.8% 95.9%", "accent-foreground": "240 5.9% 10%", "destructive": "0 72% 51%", "destructive-foreground": "0 0% 98%", "border": "240 5.9% 90%", "input": "240 5.9% 90%", "ring": "142 86% 28%", "chart-1": "139 65% 20%", "chart-2": "140 74% 44%", "chart-3": "142 88% 28%", "chart-4": "137 55% 15%", "chart-5": "141 40% 9%" }, "dark": { "background": "240 10% 3.9%", "foreground": "0 0% 98%", "card": "240 10% 3.9%", "card-foreground": "0 0% 98%", "popover": "240 10% 3.9%", "popover-foreground": "0 0% 98%", "primary": "142 86% 28%", "primary-foreground": "356 29% 98%", "secondary": "240 4.8% 95.9%", "secondary-foreground": "240 5.9% 10%", "muted": "240 3.7% 15.9%", "muted-foreground": "240 5% 64.9%", "accent": "240 3.7% 15.9%", "accent-foreground": "0 0% 98%", "destructive": "0 72% 51%", "destructive-foreground": "0 0% 98%", "border": "240 3.7% 15.9%", "input": "240 3.7% 15.9%", "ring": "142 86% 28%", "chart-1": "142 88% 28%", "chart-2": "139 65% 20%", "chart-3": "140 74% 24%", "chart-4": "137 55% 15%", "chart-5": "141 40% 9%" } } }, { "name": "accordion", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/accordion/Accordion.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/accordion/AccordionContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/accordion/AccordionItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/accordion/AccordionTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/accordion/index.ts", "content": "export { default as Accordion } from './Accordion.vue'\nexport { default as AccordionContent } from './AccordionContent.vue'\nexport { default as AccordionItem } from './AccordionItem.vue'\nexport { default as AccordionTrigger } from './AccordionTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "alert", "type": "registry:ui", "dependencies": [], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/alert/Alert.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert/AlertDescription.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert/AlertTitle.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert/index.ts", "content": "import { cva, type VariantProps } from 'class-variance-authority'\n\nexport { default as Alert } from './Alert.vue'\nexport { default as AlertDescription } from './AlertDescription.vue'\nexport { default as AlertTitle } from './AlertTitle.vue'\n\nexport const alertVariants = cva(\n 'relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7',\n {\n variants: {\n variant: {\n default: 'bg-background text-foreground',\n destructive:\n 'border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nexport type AlertVariants = VariantProps\n", "type": "registry:ui", "target": "" } ] }, { "name": "alert-dialog", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils", "button" ], "files": [ { "path": "ui/alert-dialog/AlertDialog.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/AlertDialogAction.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/AlertDialogCancel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/AlertDialogContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/AlertDialogDescription.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/AlertDialogFooter.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/AlertDialogHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/AlertDialogTitle.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/AlertDialogTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/alert-dialog/index.ts", "content": "export { default as AlertDialog } from './AlertDialog.vue'\nexport { default as AlertDialogAction } from './AlertDialogAction.vue'\nexport { default as AlertDialogCancel } from './AlertDialogCancel.vue'\nexport { default as AlertDialogContent } from './AlertDialogContent.vue'\nexport { default as AlertDialogDescription } from './AlertDialogDescription.vue'\nexport { default as AlertDialogFooter } from './AlertDialogFooter.vue'\nexport { default as AlertDialogHeader } from './AlertDialogHeader.vue'\nexport { default as AlertDialogTitle } from './AlertDialogTitle.vue'\nexport { default as AlertDialogTrigger } from './AlertDialogTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "aspect-ratio", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [], "files": [ { "path": "ui/aspect-ratio/AspectRatio.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/aspect-ratio/index.ts", "content": "export { default as AspectRatio } from './AspectRatio.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "auto-form", "type": "registry:ui", "dependencies": [ "vee-validate", "@vee-validate/zod", "zod", "reka-ui" ], "registryDependencies": [ "form", "accordion", "button", "separator", "checkbox", "switch", "utils", "calendar", "popover", "label", "radio-group", "select", "input", "textarea" ], "files": [ { "path": "ui/auto-form/AutoForm.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormField.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormFieldArray.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormFieldBoolean.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormFieldDate.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormFieldEnum.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormFieldFile.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormFieldInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormFieldNumber.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormFieldObject.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/AutoFormLabel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/constant.ts", "content": "import type { InputComponents } from './interface'\nimport AutoFormFieldArray from './AutoFormFieldArray.vue'\nimport AutoFormFieldBoolean from './AutoFormFieldBoolean.vue'\nimport AutoFormFieldDate from './AutoFormFieldDate.vue'\nimport AutoFormFieldEnum from './AutoFormFieldEnum.vue'\nimport AutoFormFieldFile from './AutoFormFieldFile.vue'\nimport AutoFormFieldInput from './AutoFormFieldInput.vue'\nimport AutoFormFieldNumber from './AutoFormFieldNumber.vue'\nimport AutoFormFieldObject from './AutoFormFieldObject.vue'\n\nexport const INPUT_COMPONENTS: InputComponents = {\n date: AutoFormFieldDate,\n select: AutoFormFieldEnum,\n radio: AutoFormFieldEnum,\n checkbox: AutoFormFieldBoolean,\n switch: AutoFormFieldBoolean,\n textarea: AutoFormFieldInput,\n number: AutoFormFieldNumber,\n string: AutoFormFieldInput,\n file: AutoFormFieldFile,\n array: AutoFormFieldArray,\n object: AutoFormFieldObject,\n}\n\n/**\n * Define handlers for specific Zod types.\n * You can expand this object to support more types.\n */\nexport const DEFAULT_ZOD_HANDLERS: {\n [key: string]: keyof typeof INPUT_COMPONENTS\n} = {\n ZodString: 'string',\n ZodBoolean: 'checkbox',\n ZodDate: 'date',\n ZodEnum: 'select',\n ZodNativeEnum: 'select',\n ZodNumber: 'number',\n ZodArray: 'array',\n ZodObject: 'object',\n}\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/dependencies.ts", "content": "import type { Ref } from 'vue'\nimport type * as z from 'zod'\nimport { createContext } from 'reka-ui'\nimport { useFieldValue, useFormValues } from 'vee-validate'\nimport { computed, ref, watch } from 'vue'\nimport { type Dependency, DependencyType, type EnumValues } from './interface'\nimport { getFromPath, getIndexIfArray } from './utils'\n\nexport const [injectDependencies, provideDependencies] = createContext>>[] | undefined>>('AutoFormDependencies')\n\nexport default function useDependencies(\n fieldName: string,\n) {\n const form = useFormValues()\n // parsed test[0].age => test.age\n const currentFieldName = fieldName.replace(/\\[\\d+\\]/g, '')\n const currentFieldValue = useFieldValue(fieldName)\n\n if (!form)\n throw new Error('useDependencies should be used within ')\n\n const dependencies = injectDependencies()\n const isDisabled = ref(false)\n const isHidden = ref(false)\n const isRequired = ref(false)\n const overrideOptions = ref()\n\n const currentFieldDependencies = computed(() => dependencies.value?.filter(\n dependency => dependency.targetField === currentFieldName,\n ))\n\n function getSourceValue(dep: Dependency) {\n const source = dep.sourceField as string\n const index = getIndexIfArray(fieldName) ?? -1\n const [sourceLast, ...sourceInitial] = source.split('.').toReversed()\n const [_targetLast, ...targetInitial] = (dep.targetField as string).split('.').toReversed()\n\n if (index >= 0 && sourceInitial.join(',') === targetInitial.join(',')) {\n const [_currentLast, ...currentInitial] = fieldName.split('.').toReversed()\n return getFromPath(form.value, currentInitial.join('.') + sourceLast)\n }\n\n return getFromPath(form.value, source)\n }\n\n const sourceFieldValues = computed(() => currentFieldDependencies.value?.map(dep => getSourceValue(dep)))\n\n const resetConditionState = () => {\n isDisabled.value = false\n isHidden.value = false\n isRequired.value = false\n overrideOptions.value = undefined\n }\n\n watch([sourceFieldValues, dependencies], () => {\n resetConditionState()\n currentFieldDependencies.value?.forEach((dep) => {\n const sourceValue = getSourceValue(dep)\n const conditionMet = dep.when(sourceValue, currentFieldValue.value)\n\n switch (dep.type) {\n case DependencyType.DISABLES:\n if (conditionMet)\n isDisabled.value = true\n\n break\n case DependencyType.REQUIRES:\n if (conditionMet)\n isRequired.value = true\n\n break\n case DependencyType.HIDES:\n if (conditionMet)\n isHidden.value = true\n\n break\n case DependencyType.SETS_OPTIONS:\n if (conditionMet)\n overrideOptions.value = dep.options\n\n break\n }\n })\n }, { immediate: true, deep: true })\n\n return {\n isDisabled,\n isHidden,\n isRequired,\n overrideOptions,\n }\n}\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/index.ts", "content": "export { default as AutoForm } from './AutoForm.vue'\nexport { default as AutoFormField } from './AutoFormField.vue'\n\nexport { default as AutoFormFieldArray } from './AutoFormFieldArray.vue'\nexport { default as AutoFormFieldBoolean } from './AutoFormFieldBoolean.vue'\nexport { default as AutoFormFieldDate } from './AutoFormFieldDate.vue'\n\nexport { default as AutoFormFieldEnum } from './AutoFormFieldEnum.vue'\nexport { default as AutoFormFieldFile } from './AutoFormFieldFile.vue'\nexport { default as AutoFormFieldInput } from './AutoFormFieldInput.vue'\nexport { default as AutoFormFieldNumber } from './AutoFormFieldNumber.vue'\nexport { default as AutoFormFieldObject } from './AutoFormFieldObject.vue'\nexport { default as AutoFormLabel } from './AutoFormLabel.vue'\nexport type { Config, ConfigItem, FieldProps } from './interface'\nexport { getBaseSchema, getBaseType, getObjectFormSchema } from './utils'\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/interface.ts", "content": "import type { Component, InputHTMLAttributes } from 'vue'\nimport type { z, ZodAny } from 'zod'\nimport type { INPUT_COMPONENTS } from './constant'\n\nexport interface FieldProps {\n fieldName: string\n label?: string\n required?: boolean\n config?: ConfigItem\n disabled?: boolean\n}\n\nexport interface Shape {\n type: string\n default?: any\n required?: boolean\n options?: string[]\n schema?: ZodAny\n}\n\nexport interface InputComponents {\n date: Component\n select: Component\n radio: Component\n checkbox: Component\n switch: Component\n textarea: Component\n number: Component\n string: Component\n file: Component\n array: Component\n object: Component\n};\n\nexport interface ConfigItem {\n /** Value for the `FormLabel` */\n label?: string\n /** Value for the `FormDescription` */\n description?: string\n /** Pick which component to be rendered. */\n component?: keyof typeof INPUT_COMPONENTS | Component\n /** Hide `FormLabel`. */\n hideLabel?: boolean\n inputProps?: InputHTMLAttributes\n}\n\n// Define a type to unwrap an array\ntype UnwrapArray = T extends (infer U)[] ? U : never\n\nexport type Config = {\n // If SchemaType.key is an object, create a nested Config, otherwise ConfigItem\n [Key in keyof SchemaType]?:\n SchemaType[Key] extends any[]\n ? UnwrapArray>\n : SchemaType[Key] extends object\n ? Config\n : ConfigItem;\n}\n\nexport enum DependencyType {\n DISABLES,\n REQUIRES,\n HIDES,\n SETS_OPTIONS,\n}\n\ninterface BaseDependency>> {\n sourceField: keyof SchemaType\n type: DependencyType\n targetField: keyof SchemaType\n when: (sourceFieldValue: any, targetFieldValue: any) => boolean\n}\n\nexport type ValueDependency>> =\n BaseDependency & {\n type:\n | DependencyType.DISABLES\n | DependencyType.REQUIRES\n | DependencyType.HIDES\n }\n\nexport type EnumValues = readonly [string, ...string[]]\n\nexport type OptionsDependency<\n SchemaType extends z.infer>,\n> = BaseDependency & {\n type: DependencyType.SETS_OPTIONS\n\n // Partial array of values from sourceField that will trigger the dependency\n options: EnumValues\n}\n\nexport type Dependency>> =\n | ValueDependency\n | OptionsDependency\n", "type": "registry:ui", "target": "" }, { "path": "ui/auto-form/utils.ts", "content": "import type { z } from 'zod'\n\n// TODO: This should support recursive ZodEffects but TypeScript doesn't allow circular type definitions.\nexport type ZodObjectOrWrapped =\n | z.ZodObject\n | z.ZodEffects>\n\n/**\n * Beautify a camelCase string.\n * e.g. \"myString\" -> \"My String\"\n */\nexport function beautifyObjectName(string: string) {\n // Remove bracketed indices\n // if numbers only return the string\n let output = string.replace(/\\[\\d+\\]/g, '').replace(/([A-Z])/g, ' $1')\n output = output.charAt(0).toUpperCase() + output.slice(1)\n return output\n}\n\n/**\n * Parse string and extract the index\n * @param string\n * @returns index or undefined\n */\nexport function getIndexIfArray(string: string) {\n const indexRegex = /\\[(\\d+)\\]/\n // Match the index\n const match = string.match(indexRegex)\n // Extract the index (number)\n const index = match ? Number.parseInt(match[1]) : undefined\n return index\n}\n\n/**\n * Get the lowest level Zod type.\n * This will unpack optionals, refinements, etc.\n */\nexport function getBaseSchema<\n ChildType extends z.ZodAny | z.AnyZodObject = z.ZodAny,\n>(schema: ChildType | z.ZodEffects): ChildType | null {\n if (!schema)\n return null\n if ('innerType' in schema._def)\n return getBaseSchema(schema._def.innerType as ChildType)\n\n if ('schema' in schema._def)\n return getBaseSchema(schema._def.schema as ChildType)\n\n return schema as ChildType\n}\n\n/**\n * Get the type name of the lowest level Zod type.\n * This will unpack optionals, refinements, etc.\n */\nexport function getBaseType(schema: z.ZodAny) {\n const baseSchema = getBaseSchema(schema)\n return baseSchema ? baseSchema._def.typeName : ''\n}\n\n/**\n * Search for a \"ZodDefault\" in the Zod stack and return its value.\n */\nexport function getDefaultValueInZodStack(schema: z.ZodAny): any {\n const typedSchema = schema as unknown as z.ZodDefault<\n z.ZodNumber | z.ZodString\n >\n\n if (typedSchema._def.typeName === 'ZodDefault')\n return typedSchema._def.defaultValue()\n\n if ('innerType' in typedSchema._def) {\n return getDefaultValueInZodStack(\n typedSchema._def.innerType as unknown as z.ZodAny,\n )\n }\n if ('schema' in typedSchema._def) {\n return getDefaultValueInZodStack(\n (typedSchema._def as any).schema as z.ZodAny,\n )\n }\n\n return undefined\n}\n\nexport function getObjectFormSchema(\n schema: ZodObjectOrWrapped,\n): z.ZodObject {\n if (schema?._def.typeName === 'ZodEffects') {\n const typedSchema = schema as z.ZodEffects>\n return getObjectFormSchema(typedSchema._def.schema)\n }\n return schema as z.ZodObject\n}\n\nfunction isIndex(value: unknown): value is number {\n return Number(value) >= 0\n}\n/**\n * Constructs a path with dot paths for arrays to use brackets to be compatible with vee-validate path syntax\n */\nexport function normalizeFormPath(path: string): string {\n const pathArr = path.split('.')\n if (!pathArr.length)\n return ''\n\n let fullPath = String(pathArr[0])\n for (let i = 1; i < pathArr.length; i++) {\n if (isIndex(pathArr[i])) {\n fullPath += `[${pathArr[i]}]`\n continue\n }\n\n fullPath += `.${pathArr[i]}`\n }\n\n return fullPath\n}\n\ntype NestedRecord = Record | { [k: string]: NestedRecord }\n/**\n * Checks if the path opted out of nested fields using `[fieldName]` syntax\n */\nexport function isNotNestedPath(path: string) {\n return /^\\[.+\\]$/.test(path)\n}\nfunction isObject(obj: unknown): obj is Record {\n return obj !== null && !!obj && typeof obj === 'object' && !Array.isArray(obj)\n}\nfunction isContainerValue(value: unknown): value is Record {\n return isObject(value) || Array.isArray(value)\n}\nfunction cleanupNonNestedPath(path: string) {\n if (isNotNestedPath(path))\n return path.replace(/\\[|\\]/g, '')\n\n return path\n}\n\n/**\n * Gets a nested property value from an object\n */\nexport function getFromPath(object: NestedRecord | undefined, path: string): TValue | undefined\nexport function getFromPath(\n object: NestedRecord | undefined,\n path: string,\n fallback?: TFallback,\n): TValue | TFallback\nexport function getFromPath(\n object: NestedRecord | undefined,\n path: string,\n fallback?: TFallback,\n): TValue | TFallback | undefined {\n if (!object)\n return fallback\n\n if (isNotNestedPath(path))\n return object[cleanupNonNestedPath(path)] as TValue | undefined\n\n const resolvedValue = (path || '')\n .split(/\\.|\\[(\\d+)\\]/)\n .filter(Boolean)\n .reduce((acc, propKey) => {\n if (isContainerValue(acc) && propKey in acc)\n return acc[propKey]\n\n return fallback\n }, object as unknown)\n\n return resolvedValue as TValue | undefined\n}\n", "type": "registry:ui", "target": "" } ] }, { "name": "avatar", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/avatar/Avatar.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/avatar/AvatarFallback.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/avatar/AvatarImage.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/avatar/index.ts", "content": "import { cva, type VariantProps } from 'class-variance-authority'\n\nexport { default as Avatar } from './Avatar.vue'\nexport { default as AvatarFallback } from './AvatarFallback.vue'\nexport { default as AvatarImage } from './AvatarImage.vue'\n\nexport const avatarVariant = cva(\n 'inline-flex items-center justify-center font-normal text-foreground select-none shrink-0 bg-secondary overflow-hidden',\n {\n variants: {\n size: {\n sm: 'h-10 w-10 text-xs',\n base: 'h-16 w-16 text-2xl',\n lg: 'h-32 w-32 text-5xl',\n },\n shape: {\n circle: 'rounded-full',\n square: 'rounded-md',\n },\n },\n },\n)\n\nexport type AvatarVariants = VariantProps\n", "type": "registry:ui", "target": "" } ] }, { "name": "badge", "type": "registry:ui", "dependencies": [], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/badge/Badge.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/badge/index.ts", "content": "import { cva, type VariantProps } from 'class-variance-authority'\n\nexport { default as Badge } from './Badge.vue'\n\nexport const badgeVariants = cva(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nexport type BadgeVariants = VariantProps\n", "type": "registry:ui", "target": "" } ] }, { "name": "breadcrumb", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/breadcrumb/Breadcrumb.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/breadcrumb/BreadcrumbEllipsis.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/breadcrumb/BreadcrumbItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/breadcrumb/BreadcrumbLink.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/breadcrumb/BreadcrumbList.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/breadcrumb/BreadcrumbPage.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/breadcrumb/BreadcrumbSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/breadcrumb/index.ts", "content": "export { default as Breadcrumb } from './Breadcrumb.vue'\nexport { default as BreadcrumbEllipsis } from './BreadcrumbEllipsis.vue'\nexport { default as BreadcrumbItem } from './BreadcrumbItem.vue'\nexport { default as BreadcrumbLink } from './BreadcrumbLink.vue'\nexport { default as BreadcrumbList } from './BreadcrumbList.vue'\nexport { default as BreadcrumbPage } from './BreadcrumbPage.vue'\nexport { default as BreadcrumbSeparator } from './BreadcrumbSeparator.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "button", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/button/Button.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/button/index.ts", "content": "import { cva, type VariantProps } from 'class-variance-authority'\n\nexport { default as Button } from './Button.vue'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n xs: 'h-7 rounded px-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nexport type ButtonVariants = VariantProps\n", "type": "registry:ui", "target": "" } ] }, { "name": "calendar", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils", "button" ], "files": [ { "path": "ui/calendar/Calendar.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarCell.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarCellTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarGrid.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarGridBody.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarGridHead.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarGridRow.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarHeadCell.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarHeading.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarNextButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/CalendarPrevButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/calendar/index.ts", "content": "export { default as Calendar } from './Calendar.vue'\nexport { default as CalendarCell } from './CalendarCell.vue'\nexport { default as CalendarCellTrigger } from './CalendarCellTrigger.vue'\nexport { default as CalendarGrid } from './CalendarGrid.vue'\nexport { default as CalendarGridBody } from './CalendarGridBody.vue'\nexport { default as CalendarGridHead } from './CalendarGridHead.vue'\nexport { default as CalendarGridRow } from './CalendarGridRow.vue'\nexport { default as CalendarHeadCell } from './CalendarHeadCell.vue'\nexport { default as CalendarHeader } from './CalendarHeader.vue'\nexport { default as CalendarHeading } from './CalendarHeading.vue'\nexport { default as CalendarNextButton } from './CalendarNextButton.vue'\nexport { default as CalendarPrevButton } from './CalendarPrevButton.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "card", "type": "registry:ui", "dependencies": [], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/card/Card.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/card/CardContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/card/CardDescription.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/card/CardFooter.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/card/CardHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/card/CardTitle.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/card/index.ts", "content": "export { default as Card } from './Card.vue'\nexport { default as CardContent } from './CardContent.vue'\nexport { default as CardDescription } from './CardDescription.vue'\nexport { default as CardFooter } from './CardFooter.vue'\nexport { default as CardHeader } from './CardHeader.vue'\nexport { default as CardTitle } from './CardTitle.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "carousel", "type": "registry:ui", "dependencies": [ "embla-carousel-vue", "@vueuse/core" ], "registryDependencies": [ "utils", "button" ], "files": [ { "path": "ui/carousel/Carousel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/carousel/CarouselContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/carousel/CarouselItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/carousel/CarouselNext.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/carousel/CarouselPrevious.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/carousel/index.ts", "content": "export { default as Carousel } from './Carousel.vue'\nexport { default as CarouselContent } from './CarouselContent.vue'\nexport { default as CarouselItem } from './CarouselItem.vue'\nexport { default as CarouselNext } from './CarouselNext.vue'\nexport { default as CarouselPrevious } from './CarouselPrevious.vue'\nexport type {\n UnwrapRefCarouselApi as CarouselApi,\n} from './interface'\n\nexport { useCarousel } from './useCarousel'\n", "type": "registry:ui", "target": "" }, { "path": "ui/carousel/interface.ts", "content": "import type useEmblaCarousel from 'embla-carousel-vue'\nimport type {\n EmblaCarouselVueType,\n} from 'embla-carousel-vue'\nimport type { HTMLAttributes, UnwrapRef } from 'vue'\n\ntype CarouselApi = EmblaCarouselVueType[1]\ntype UseCarouselParameters = Parameters\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\nexport type UnwrapRefCarouselApi = UnwrapRef\n\nexport interface CarouselProps {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: 'horizontal' | 'vertical'\n}\n\nexport interface CarouselEmits {\n (e: 'init-api', payload: UnwrapRefCarouselApi): void\n}\n\nexport interface WithClassAsProps {\n class?: HTMLAttributes['class']\n}\n", "type": "registry:ui", "target": "" }, { "path": "ui/carousel/useCarousel.ts", "content": "import type { UnwrapRefCarouselApi as CarouselApi, CarouselEmits, CarouselProps } from './interface'\nimport { createInjectionState } from '@vueuse/core'\nimport emblaCarouselVue from 'embla-carousel-vue'\nimport { onMounted, ref } from 'vue'\n\nconst [useProvideCarousel, useInjectCarousel] = createInjectionState(\n ({\n opts,\n orientation,\n plugins,\n }: CarouselProps, emits: CarouselEmits) => {\n const [emblaNode, emblaApi] = emblaCarouselVue({\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n }, plugins)\n\n function scrollPrev() {\n emblaApi.value?.scrollPrev()\n }\n function scrollNext() {\n emblaApi.value?.scrollNext()\n }\n\n const canScrollNext = ref(false)\n const canScrollPrev = ref(false)\n\n function onSelect(api: CarouselApi) {\n canScrollNext.value = api?.canScrollNext() || false\n canScrollPrev.value = api?.canScrollPrev() || false\n }\n\n onMounted(() => {\n if (!emblaApi.value)\n return\n\n emblaApi.value?.on('init', onSelect)\n emblaApi.value?.on('reInit', onSelect)\n emblaApi.value?.on('select', onSelect)\n\n emits('init-api', emblaApi.value)\n })\n\n return { carouselRef: emblaNode, carouselApi: emblaApi, canScrollPrev, canScrollNext, scrollPrev, scrollNext, orientation }\n },\n)\n\nfunction useCarousel() {\n const carouselState = useInjectCarousel()\n\n if (!carouselState)\n throw new Error('useCarousel must be used within a ')\n\n return carouselState\n}\n\nexport { useCarousel, useProvideCarousel }\n", "type": "registry:ui", "target": "" } ] }, { "name": "chart", "type": "registry:ui", "dependencies": [ "@unovis/vue", "@unovis/ts" ], "registryDependencies": [ "button", "card" ], "files": [ { "path": "ui/chart/ChartCrosshair.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart/ChartLegend.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart/ChartSingleTooltip.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart/ChartTooltip.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart/index.ts", "content": "export { default as ChartCrosshair } from './ChartCrosshair.vue'\nexport { default as ChartLegend } from './ChartLegend.vue'\nexport { default as ChartSingleTooltip } from './ChartSingleTooltip.vue'\nexport { default as ChartTooltip } from './ChartTooltip.vue'\n\nexport function defaultColors(count: number = 3) {\n const quotient = Math.floor(count / 2)\n const remainder = count % 2\n\n const primaryCount = quotient + remainder\n const secondaryCount = quotient\n return [\n ...Array.from(new Array(primaryCount).keys()).map(i => `hsl(var(--vis-primary-color) / ${1 - (1 / primaryCount) * i})`),\n ...Array.from(new Array(secondaryCount).keys()).map(i => `hsl(var(--vis-secondary-color) / ${1 - (1 / secondaryCount) * i})`),\n ]\n}\n\nexport * from './interface'\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart/interface.ts", "content": "import type { Spacing } from '@unovis/ts'\n\ntype KeyOf> = Extract\n\nexport interface BaseChartProps> {\n /**\n * The source data, in which each entry is a dictionary.\n */\n data: T[]\n /**\n * Select the categories from your data. Used to populate the legend and toolip.\n */\n categories: KeyOf[]\n /**\n * Sets the key to map the data to the axis.\n */\n index: KeyOf\n /**\n * Change the default colors.\n */\n colors?: string[]\n /**\n * Margin of each the container\n */\n margin?: Spacing\n /**\n * Change the opacity of the non-selected field\n * @default 0.2\n */\n filterOpacity?: number\n /**\n * Function to format X label\n */\n xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string\n /**\n * Function to format Y label\n */\n yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string\n /**\n * Controls the visibility of the X axis.\n * @default true\n */\n showXAxis?: boolean\n /**\n * Controls the visibility of the Y axis.\n * @default true\n */\n showYAxis?: boolean\n /**\n * Controls the visibility of tooltip.\n * @default true\n */\n showTooltip?: boolean\n /**\n * Controls the visibility of legend.\n * @default true\n */\n showLegend?: boolean\n /**\n * Controls the visibility of gridline.\n * @default true\n */\n showGridLine?: boolean\n}\n", "type": "registry:ui", "target": "" } ] }, { "name": "chart-area", "type": "registry:ui", "dependencies": [ "@unovis/vue", "@unovis/ts", "@vueuse/core", "reka-ui" ], "registryDependencies": [ "utils", "chart" ], "files": [ { "path": "ui/chart-area/AreaChart.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart-area/index.ts", "content": "export { default as AreaChart } from './AreaChart.vue'\n\nimport type { Spacing } from '@unovis/ts'\n\ntype KeyOf> = Extract\n\nexport interface BaseChartProps> {\n /**\n * The source data, in which each entry is a dictionary.\n */\n data: T[]\n /**\n * Select the categories from your data. Used to populate the legend and toolip.\n */\n categories: KeyOf[]\n /**\n * Sets the key to map the data to the axis.\n */\n index: KeyOf\n /**\n * Change the default colors.\n */\n colors?: string[]\n /**\n * Margin of each the container\n */\n margin?: Spacing\n /**\n * Change the opacity of the non-selected field\n * @default 0.2\n */\n filterOpacity?: number\n /**\n * Function to format X label\n */\n xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string\n /**\n * Function to format Y label\n */\n yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string\n /**\n * Controls the visibility of the X axis.\n * @default true\n */\n showXAxis?: boolean\n /**\n * Controls the visibility of the Y axis.\n * @default true\n */\n showYAxis?: boolean\n /**\n * Controls the visibility of tooltip.\n * @default true\n */\n showTooltip?: boolean\n /**\n * Controls the visibility of legend.\n * @default true\n */\n showLegend?: boolean\n /**\n * Controls the visibility of gridline.\n * @default true\n */\n showGridLine?: boolean\n}\n", "type": "registry:ui", "target": "" } ] }, { "name": "chart-bar", "type": "registry:ui", "dependencies": [ "@unovis/vue", "@unovis/ts", "@vueuse/core" ], "registryDependencies": [ "utils", "chart" ], "files": [ { "path": "ui/chart-bar/BarChart.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart-bar/index.ts", "content": "export { default as BarChart } from './BarChart.vue'\n\nimport type { Spacing } from '@unovis/ts'\n\ntype KeyOf> = Extract\n\nexport interface BaseChartProps> {\n /**\n * The source data, in which each entry is a dictionary.\n */\n data: T[]\n /**\n * Select the categories from your data. Used to populate the legend and toolip.\n */\n categories: KeyOf[]\n /**\n * Sets the key to map the data to the axis.\n */\n index: KeyOf\n /**\n * Change the default colors.\n */\n colors?: string[]\n /**\n * Margin of each the container\n */\n margin?: Spacing\n /**\n * Change the opacity of the non-selected field\n * @default 0.2\n */\n filterOpacity?: number\n /**\n * Function to format X label\n */\n xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string\n /**\n * Function to format Y label\n */\n yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string\n /**\n * Controls the visibility of the X axis.\n * @default true\n */\n showXAxis?: boolean\n /**\n * Controls the visibility of the Y axis.\n * @default true\n */\n showYAxis?: boolean\n /**\n * Controls the visibility of tooltip.\n * @default true\n */\n showTooltip?: boolean\n /**\n * Controls the visibility of legend.\n * @default true\n */\n showLegend?: boolean\n /**\n * Controls the visibility of gridline.\n * @default true\n */\n showGridLine?: boolean\n}\n", "type": "registry:ui", "target": "" } ] }, { "name": "chart-donut", "type": "registry:ui", "dependencies": [ "@unovis/vue", "@unovis/ts", "@vueuse/core" ], "registryDependencies": [ "utils", "chart" ], "files": [ { "path": "ui/chart-donut/DonutChart.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart-donut/index.ts", "content": "export { default as DonutChart } from './DonutChart.vue'\n\nimport type { Spacing } from '@unovis/ts'\n\ntype KeyOf> = Extract\n\nexport interface BaseChartProps> {\n /**\n * The source data, in which each entry is a dictionary.\n */\n data: T[]\n /**\n * Sets the key to map the data to the axis.\n */\n index: KeyOf\n /**\n * Change the default colors.\n */\n colors?: string[]\n /**\n * Margin of each the container\n */\n margin?: Spacing\n /**\n * Change the opacity of the non-selected field\n * @default 0.2\n */\n filterOpacity?: number\n /**\n * Controls the visibility of tooltip.\n * @default true\n */\n showTooltip?: boolean\n /**\n * Controls the visibility of legend.\n * @default true\n */\n showLegend?: boolean\n}\n", "type": "registry:ui", "target": "" } ] }, { "name": "chart-line", "type": "registry:ui", "dependencies": [ "@unovis/vue", "@unovis/ts", "@vueuse/core" ], "registryDependencies": [ "utils", "chart" ], "files": [ { "path": "ui/chart-line/LineChart.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/chart-line/index.ts", "content": "export { default as LineChart } from './LineChart.vue'\n\nimport type { Spacing } from '@unovis/ts'\n\ntype KeyOf> = Extract\n\nexport interface BaseChartProps> {\n /**\n * The source data, in which each entry is a dictionary.\n */\n data: T[]\n /**\n * Select the categories from your data. Used to populate the legend and toolip.\n */\n categories: KeyOf[]\n /**\n * Sets the key to map the data to the axis.\n */\n index: KeyOf\n /**\n * Change the default colors.\n */\n colors?: string[]\n /**\n * Margin of each the container\n */\n margin?: Spacing\n /**\n * Change the opacity of the non-selected field\n * @default 0.2\n */\n filterOpacity?: number\n /**\n * Function to format X label\n */\n xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string\n /**\n * Function to format Y label\n */\n yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string\n /**\n * Controls the visibility of the X axis.\n * @default true\n */\n showXAxis?: boolean\n /**\n * Controls the visibility of the Y axis.\n * @default true\n */\n showYAxis?: boolean\n /**\n * Controls the visibility of tooltip.\n * @default true\n */\n showTooltip?: boolean\n /**\n * Controls the visibility of legend.\n * @default true\n */\n showLegend?: boolean\n /**\n * Controls the visibility of gridline.\n * @default true\n */\n showGridLine?: boolean\n}\n", "type": "registry:ui", "target": "" } ] }, { "name": "checkbox", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/checkbox/Checkbox.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/checkbox/index.ts", "content": "export { default as Checkbox } from './Checkbox.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "collapsible", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [], "files": [ { "path": "ui/collapsible/Collapsible.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/collapsible/CollapsibleContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/collapsible/CollapsibleTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/collapsible/index.ts", "content": "export { default as Collapsible } from './Collapsible.vue'\nexport { default as CollapsibleContent } from './CollapsibleContent.vue'\nexport { default as CollapsibleTrigger } from './CollapsibleTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "command", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils", "dialog" ], "files": [ { "path": "ui/command/Command.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/CommandDialog.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/CommandEmpty.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/CommandGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/CommandInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/CommandItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/CommandList.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/CommandSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/CommandShortcut.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/command/index.ts", "content": "export { default as Command } from './Command.vue'\nexport { default as CommandDialog } from './CommandDialog.vue'\nexport { default as CommandEmpty } from './CommandEmpty.vue'\nexport { default as CommandGroup } from './CommandGroup.vue'\nexport { default as CommandInput } from './CommandInput.vue'\nexport { default as CommandItem } from './CommandItem.vue'\nexport { default as CommandList } from './CommandList.vue'\nexport { default as CommandSeparator } from './CommandSeparator.vue'\nexport { default as CommandShortcut } from './CommandShortcut.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "context-menu", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/context-menu/ContextMenu.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuCheckboxItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuLabel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuPortal.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuRadioGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuRadioItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuShortcut.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuSub.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuSubContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuSubTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/ContextMenuTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/context-menu/index.ts", "content": "export { default as ContextMenu } from './ContextMenu.vue'\nexport { default as ContextMenuCheckboxItem } from './ContextMenuCheckboxItem.vue'\nexport { default as ContextMenuContent } from './ContextMenuContent.vue'\nexport { default as ContextMenuGroup } from './ContextMenuGroup.vue'\nexport { default as ContextMenuItem } from './ContextMenuItem.vue'\nexport { default as ContextMenuLabel } from './ContextMenuLabel.vue'\nexport { default as ContextMenuRadioGroup } from './ContextMenuRadioGroup.vue'\nexport { default as ContextMenuRadioItem } from './ContextMenuRadioItem.vue'\nexport { default as ContextMenuSeparator } from './ContextMenuSeparator.vue'\nexport { default as ContextMenuShortcut } from './ContextMenuShortcut.vue'\nexport { default as ContextMenuSub } from './ContextMenuSub.vue'\nexport { default as ContextMenuSubContent } from './ContextMenuSubContent.vue'\nexport { default as ContextMenuSubTrigger } from './ContextMenuSubTrigger.vue'\nexport { default as ContextMenuTrigger } from './ContextMenuTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "dialog", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/dialog/Dialog.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/DialogClose.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/DialogContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/DialogDescription.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/DialogFooter.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/DialogHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/DialogScrollContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/DialogTitle.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/DialogTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dialog/index.ts", "content": "export { default as Dialog } from './Dialog.vue'\nexport { default as DialogClose } from './DialogClose.vue'\nexport { default as DialogContent } from './DialogContent.vue'\nexport { default as DialogDescription } from './DialogDescription.vue'\nexport { default as DialogFooter } from './DialogFooter.vue'\nexport { default as DialogHeader } from './DialogHeader.vue'\nexport { default as DialogScrollContent } from './DialogScrollContent.vue'\nexport { default as DialogTitle } from './DialogTitle.vue'\nexport { default as DialogTrigger } from './DialogTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "drawer", "type": "registry:ui", "dependencies": [ "vaul-vue", "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/drawer/Drawer.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/drawer/DrawerContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/drawer/DrawerDescription.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/drawer/DrawerFooter.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/drawer/DrawerHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/drawer/DrawerOverlay.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/drawer/DrawerTitle.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/drawer/index.ts", "content": "export { default as Drawer } from './Drawer.vue'\nexport { default as DrawerContent } from './DrawerContent.vue'\nexport { default as DrawerDescription } from './DrawerDescription.vue'\nexport { default as DrawerFooter } from './DrawerFooter.vue'\nexport { default as DrawerHeader } from './DrawerHeader.vue'\nexport { default as DrawerOverlay } from './DrawerOverlay.vue'\nexport { default as DrawerTitle } from './DrawerTitle.vue'\nexport { DrawerClose, DrawerPortal, DrawerTrigger } from 'vaul-vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "dropdown-menu", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/dropdown-menu/DropdownMenu.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuCheckboxItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuLabel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuRadioGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuRadioItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuShortcut.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuSub.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuSubContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuSubTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/DropdownMenuTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/dropdown-menu/index.ts", "content": "export { default as DropdownMenu } from './DropdownMenu.vue'\n\nexport { default as DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem.vue'\nexport { default as DropdownMenuContent } from './DropdownMenuContent.vue'\nexport { default as DropdownMenuGroup } from './DropdownMenuGroup.vue'\nexport { default as DropdownMenuItem } from './DropdownMenuItem.vue'\nexport { default as DropdownMenuLabel } from './DropdownMenuLabel.vue'\nexport { default as DropdownMenuRadioGroup } from './DropdownMenuRadioGroup.vue'\nexport { default as DropdownMenuRadioItem } from './DropdownMenuRadioItem.vue'\nexport { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue'\nexport { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue'\nexport { default as DropdownMenuSub } from './DropdownMenuSub.vue'\nexport { default as DropdownMenuSubContent } from './DropdownMenuSubContent.vue'\nexport { default as DropdownMenuSubTrigger } from './DropdownMenuSubTrigger.vue'\nexport { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue'\nexport { DropdownMenuPortal } from 'reka-ui'\n", "type": "registry:ui", "target": "" } ] }, { "name": "form", "type": "registry:ui", "dependencies": [ "reka-ui", "vee-validate", "@vee-validate/zod", "zod" ], "registryDependencies": [ "utils", "label" ], "files": [ { "path": "ui/form/FormControl.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/form/FormDescription.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/form/FormItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/form/FormLabel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/form/FormMessage.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/form/index.ts", "content": "export { default as FormControl } from './FormControl.vue'\nexport { default as FormDescription } from './FormDescription.vue'\nexport { default as FormItem } from './FormItem.vue'\nexport { default as FormLabel } from './FormLabel.vue'\nexport { default as FormMessage } from './FormMessage.vue'\nexport { FORM_ITEM_INJECTION_KEY } from './injectionKeys'\nexport { Field as FormField, FieldArray as FormFieldArray, Form } from 'vee-validate'\n", "type": "registry:ui", "target": "" }, { "path": "ui/form/injectionKeys.ts", "content": "import type { InjectionKey } from 'vue'\n\nexport const FORM_ITEM_INJECTION_KEY\n = Symbol() as InjectionKey\n", "type": "registry:ui", "target": "" }, { "path": "ui/form/useFormField.ts", "content": "import { FieldContextKey, useFieldError, useIsFieldDirty, useIsFieldTouched, useIsFieldValid } from 'vee-validate'\nimport { inject } from 'vue'\nimport { FORM_ITEM_INJECTION_KEY } from './injectionKeys'\n\nexport function useFormField() {\n const fieldContext = inject(FieldContextKey)\n const fieldItemContext = inject(FORM_ITEM_INJECTION_KEY)\n\n if (!fieldContext)\n throw new Error('useFormField should be used within ')\n\n const { name } = fieldContext\n const id = fieldItemContext\n\n const fieldState = {\n valid: useIsFieldValid(name),\n isDirty: useIsFieldDirty(name),\n isTouched: useIsFieldTouched(name),\n error: useFieldError(name),\n }\n\n return {\n id,\n name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n", "type": "registry:ui", "target": "" } ] }, { "name": "hover-card", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/hover-card/HoverCard.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/hover-card/HoverCardContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/hover-card/HoverCardTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/hover-card/index.ts", "content": "export { default as HoverCard } from './HoverCard.vue'\nexport { default as HoverCardContent } from './HoverCardContent.vue'\nexport { default as HoverCardTrigger } from './HoverCardTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "input", "type": "registry:ui", "dependencies": [ "@vueuse/core" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/input/Input.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/input/index.ts", "content": "export { default as Input } from './Input.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "label", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/label/Label.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/label/index.ts", "content": "export { default as Label } from './Label.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "menubar", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/menubar/Menubar.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarCheckboxItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarLabel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarMenu.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarRadioGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarRadioItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarShortcut.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarSub.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarSubContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarSubTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/MenubarTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/menubar/index.ts", "content": "export { default as Menubar } from './Menubar.vue'\nexport { default as MenubarCheckboxItem } from './MenubarCheckboxItem.vue'\nexport { default as MenubarContent } from './MenubarContent.vue'\nexport { default as MenubarGroup } from './MenubarGroup.vue'\nexport { default as MenubarItem } from './MenubarItem.vue'\nexport { default as MenubarLabel } from './MenubarLabel.vue'\nexport { default as MenubarMenu } from './MenubarMenu.vue'\nexport { default as MenubarRadioGroup } from './MenubarRadioGroup.vue'\nexport { default as MenubarRadioItem } from './MenubarRadioItem.vue'\nexport { default as MenubarSeparator } from './MenubarSeparator.vue'\nexport { default as MenubarShortcut } from './MenubarShortcut.vue'\nexport { default as MenubarSub } from './MenubarSub.vue'\nexport { default as MenubarSubContent } from './MenubarSubContent.vue'\nexport { default as MenubarSubTrigger } from './MenubarSubTrigger.vue'\nexport { default as MenubarTrigger } from './MenubarTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "navigation-menu", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/navigation-menu/NavigationMenu.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/navigation-menu/NavigationMenuContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/navigation-menu/NavigationMenuIndicator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/navigation-menu/NavigationMenuItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/navigation-menu/NavigationMenuLink.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/navigation-menu/NavigationMenuList.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/navigation-menu/NavigationMenuTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/navigation-menu/NavigationMenuViewport.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/navigation-menu/index.ts", "content": "import { cva } from 'class-variance-authority'\n\nexport { default as NavigationMenu } from './NavigationMenu.vue'\nexport { default as NavigationMenuContent } from './NavigationMenuContent.vue'\nexport { default as NavigationMenuItem } from './NavigationMenuItem.vue'\nexport { default as NavigationMenuLink } from './NavigationMenuLink.vue'\nexport { default as NavigationMenuList } from './NavigationMenuList.vue'\nexport { default as NavigationMenuTrigger } from './NavigationMenuTrigger.vue'\nexport { default as NavigationMenuViewport } from './NavigationMenuViewport.vue'\n\nexport const navigationMenuTriggerStyle = cva(\n 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50',\n)\n", "type": "registry:ui", "target": "" } ] }, { "name": "number-field", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/number-field/NumberField.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/number-field/NumberFieldContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/number-field/NumberFieldDecrement.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/number-field/NumberFieldIncrement.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/number-field/NumberFieldInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/number-field/index.ts", "content": "export { default as NumberField } from './NumberField.vue'\nexport { default as NumberFieldContent } from './NumberFieldContent.vue'\nexport { default as NumberFieldDecrement } from './NumberFieldDecrement.vue'\nexport { default as NumberFieldIncrement } from './NumberFieldIncrement.vue'\nexport { default as NumberFieldInput } from './NumberFieldInput.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "pagination", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils", "button" ], "files": [ { "path": "ui/pagination/PaginationEllipsis.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pagination/PaginationFirst.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pagination/PaginationLast.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pagination/PaginationNext.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pagination/PaginationPrev.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pagination/index.ts", "content": "export { default as PaginationEllipsis } from './PaginationEllipsis.vue'\nexport { default as PaginationFirst } from './PaginationFirst.vue'\nexport { default as PaginationLast } from './PaginationLast.vue'\nexport { default as PaginationNext } from './PaginationNext.vue'\nexport { default as PaginationPrev } from './PaginationPrev.vue'\nexport {\n PaginationList,\n PaginationListItem,\n PaginationRoot as Pagination,\n} from 'reka-ui'\n", "type": "registry:ui", "target": "" } ] }, { "name": "pin-input", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/pin-input/PinInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pin-input/PinInputGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pin-input/PinInputInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pin-input/PinInputSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/pin-input/index.ts", "content": "export { default as PinInput } from './PinInput.vue'\nexport { default as PinInputGroup } from './PinInputGroup.vue'\nexport { default as PinInputInput } from './PinInputInput.vue'\nexport { default as PinInputSeparator } from './PinInputSeparator.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "popover", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/popover/Popover.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/popover/PopoverContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/popover/PopoverTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/popover/index.ts", "content": "export { default as Popover } from './Popover.vue'\nexport { default as PopoverContent } from './PopoverContent.vue'\nexport { default as PopoverTrigger } from './PopoverTrigger.vue'\nexport { PopoverAnchor } from 'reka-ui'\n", "type": "registry:ui", "target": "" } ] }, { "name": "progress", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/progress/Progress.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/progress/index.ts", "content": "export { default as Progress } from './Progress.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "radio-group", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/radio-group/RadioGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/radio-group/RadioGroupItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/radio-group/index.ts", "content": "export { default as RadioGroup } from './RadioGroup.vue'\nexport { default as RadioGroupItem } from './RadioGroupItem.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "range-calendar", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils", "button" ], "files": [ { "path": "ui/range-calendar/RangeCalendar.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarCell.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarCellTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarGrid.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarGridBody.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarGridHead.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarGridRow.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarHeadCell.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarHeading.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarNextButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/RangeCalendarPrevButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/range-calendar/index.ts", "content": "export { default as RangeCalendar } from './RangeCalendar.vue'\nexport { default as RangeCalendarCell } from './RangeCalendarCell.vue'\nexport { default as RangeCalendarCellTrigger } from './RangeCalendarCellTrigger.vue'\nexport { default as RangeCalendarGrid } from './RangeCalendarGrid.vue'\nexport { default as RangeCalendarGridBody } from './RangeCalendarGridBody.vue'\nexport { default as RangeCalendarGridHead } from './RangeCalendarGridHead.vue'\nexport { default as RangeCalendarGridRow } from './RangeCalendarGridRow.vue'\nexport { default as RangeCalendarHeadCell } from './RangeCalendarHeadCell.vue'\nexport { default as RangeCalendarHeader } from './RangeCalendarHeader.vue'\nexport { default as RangeCalendarHeading } from './RangeCalendarHeading.vue'\nexport { default as RangeCalendarNextButton } from './RangeCalendarNextButton.vue'\nexport { default as RangeCalendarPrevButton } from './RangeCalendarPrevButton.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "resizable", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/resizable/ResizableHandle.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/resizable/ResizablePanelGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/resizable/index.ts", "content": "export { default as ResizableHandle } from './ResizableHandle.vue'\nexport { default as ResizablePanelGroup } from './ResizablePanelGroup.vue'\nexport { SplitterPanel as ResizablePanel } from 'reka-ui'\n", "type": "registry:ui", "target": "" } ] }, { "name": "scroll-area", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/scroll-area/ScrollArea.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/scroll-area/ScrollBar.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/scroll-area/index.ts", "content": "export { default as ScrollArea } from './ScrollArea.vue'\nexport { default as ScrollBar } from './ScrollBar.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "select", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/select/Select.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectItemText.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectLabel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectScrollDownButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectScrollUpButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/SelectValue.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/select/index.ts", "content": "export { default as Select } from './Select.vue'\nexport { default as SelectContent } from './SelectContent.vue'\nexport { default as SelectGroup } from './SelectGroup.vue'\nexport { default as SelectItem } from './SelectItem.vue'\nexport { default as SelectItemText } from './SelectItemText.vue'\nexport { default as SelectLabel } from './SelectLabel.vue'\nexport { default as SelectScrollDownButton } from './SelectScrollDownButton.vue'\nexport { default as SelectScrollUpButton } from './SelectScrollUpButton.vue'\nexport { default as SelectSeparator } from './SelectSeparator.vue'\nexport { default as SelectTrigger } from './SelectTrigger.vue'\nexport { default as SelectValue } from './SelectValue.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "separator", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/separator/Separator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/separator/index.ts", "content": "export { default as Separator } from './Separator.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "sheet", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/sheet/Sheet.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sheet/SheetClose.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sheet/SheetContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sheet/SheetDescription.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sheet/SheetFooter.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sheet/SheetHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sheet/SheetTitle.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sheet/SheetTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sheet/index.ts", "content": "import { cva, type VariantProps } from 'class-variance-authority'\n\nexport { default as Sheet } from './Sheet.vue'\nexport { default as SheetClose } from './SheetClose.vue'\nexport { default as SheetContent } from './SheetContent.vue'\nexport { default as SheetDescription } from './SheetDescription.vue'\nexport { default as SheetFooter } from './SheetFooter.vue'\nexport { default as SheetHeader } from './SheetHeader.vue'\nexport { default as SheetTitle } from './SheetTitle.vue'\nexport { default as SheetTrigger } from './SheetTrigger.vue'\n\nexport const sheetVariants = cva(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom:\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n right:\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n },\n },\n defaultVariants: {\n side: 'right',\n },\n },\n)\n\nexport type SheetVariants = VariantProps\n", "type": "registry:ui", "target": "" } ] }, { "name": "sidebar", "type": "registry:ui", "dependencies": [ "reka-ui", "@vueuse/core" ], "registryDependencies": [ "utils", "sheet", "input", "tooltip", "skeleton", "separator", "button" ], "files": [ { "path": "ui/sidebar/Sidebar.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarFooter.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarGroupAction.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarGroupContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarGroupLabel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarInset.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenu.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuAction.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuBadge.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuButtonChild.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuSkeleton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuSub.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuSubButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuSubItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarProvider.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarRail.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/index.ts", "content": "import type { HTMLAttributes } from 'vue'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nexport interface SidebarProps {\n side?: 'left' | 'right'\n variant?: 'sidebar' | 'floating' | 'inset'\n collapsible?: 'offcanvas' | 'icon' | 'none'\n class?: HTMLAttributes['class']\n}\n\nexport { default as Sidebar } from './Sidebar.vue'\nexport { default as SidebarContent } from './SidebarContent.vue'\nexport { default as SidebarFooter } from './SidebarFooter.vue'\nexport { default as SidebarGroup } from './SidebarGroup.vue'\nexport { default as SidebarGroupAction } from './SidebarGroupAction.vue'\nexport { default as SidebarGroupContent } from './SidebarGroupContent.vue'\nexport { default as SidebarGroupLabel } from './SidebarGroupLabel.vue'\nexport { default as SidebarHeader } from './SidebarHeader.vue'\nexport { default as SidebarInput } from './SidebarInput.vue'\nexport { default as SidebarInset } from './SidebarInset.vue'\nexport { default as SidebarMenu } from './SidebarMenu.vue'\nexport { default as SidebarMenuAction } from './SidebarMenuAction.vue'\nexport { default as SidebarMenuBadge } from './SidebarMenuBadge.vue'\nexport { default as SidebarMenuButton } from './SidebarMenuButton.vue'\nexport { default as SidebarMenuItem } from './SidebarMenuItem.vue'\nexport { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue'\nexport { default as SidebarMenuSub } from './SidebarMenuSub.vue'\nexport { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue'\nexport { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue'\nexport { default as SidebarProvider } from './SidebarProvider.vue'\nexport { default as SidebarRail } from './SidebarRail.vue'\nexport { default as SidebarSeparator } from './SidebarSeparator.vue'\nexport { default as SidebarTrigger } from './SidebarTrigger.vue'\n\nexport { useSidebar } from './utils'\n\nexport const sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nexport type SidebarMenuButtonVariants = VariantProps\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/utils.ts", "content": "import type { ComputedRef, Ref } from 'vue'\nimport { createContext } from 'reka-ui'\n\nexport const SIDEBAR_COOKIE_NAME = 'sidebar:state'\nexport const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nexport const SIDEBAR_WIDTH = '16rem'\nexport const SIDEBAR_WIDTH_MOBILE = '18rem'\nexport const SIDEBAR_WIDTH_ICON = '3rem'\nexport const SIDEBAR_KEYBOARD_SHORTCUT = 'b'\n\nexport const [useSidebar, provideSidebarContext] = createContext<{\n state: ComputedRef<'expanded' | 'collapsed'>\n open: Ref\n setOpen: (value: boolean) => void\n isMobile: Ref\n openMobile: Ref\n setOpenMobile: (value: boolean) => void\n toggleSidebar: () => void\n}>('Sidebar')\n", "type": "registry:ui", "target": "" } ] }, { "name": "skeleton", "type": "registry:ui", "dependencies": [], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/skeleton/Skeleton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/skeleton/index.ts", "content": "export { default as Skeleton } from './Skeleton.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "slider", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/slider/Slider.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/slider/index.ts", "content": "export { default as Slider } from './Slider.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "sonner", "type": "registry:ui", "dependencies": [ "vue-sonner" ], "registryDependencies": [], "files": [ { "path": "ui/sonner/Sonner.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sonner/index.ts", "content": "export { default as Toaster } from './Sonner.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "stepper", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/stepper/Stepper.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/stepper/StepperDescription.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/stepper/StepperIndicator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/stepper/StepperItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/stepper/StepperSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/stepper/StepperTitle.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/stepper/StepperTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/stepper/index.ts", "content": "export { default as Stepper } from './Stepper.vue'\nexport { default as StepperDescription } from './StepperDescription.vue'\nexport { default as StepperIndicator } from './StepperIndicator.vue'\nexport { default as StepperItem } from './StepperItem.vue'\nexport { default as StepperSeparator } from './StepperSeparator.vue'\nexport { default as StepperTitle } from './StepperTitle.vue'\nexport { default as StepperTrigger } from './StepperTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "switch", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/switch/Switch.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/switch/index.ts", "content": "export { default as Switch } from './Switch.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "table", "type": "registry:ui", "dependencies": [], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/table/Table.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/TableBody.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/TableCaption.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/TableCell.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/TableEmpty.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/TableFooter.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/TableHead.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/TableHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/TableRow.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/table/index.ts", "content": "export { default as Table } from './Table.vue'\nexport { default as TableBody } from './TableBody.vue'\nexport { default as TableCaption } from './TableCaption.vue'\nexport { default as TableCell } from './TableCell.vue'\nexport { default as TableEmpty } from './TableEmpty.vue'\nexport { default as TableFooter } from './TableFooter.vue'\nexport { default as TableHead } from './TableHead.vue'\nexport { default as TableHeader } from './TableHeader.vue'\nexport { default as TableRow } from './TableRow.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "tabs", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/tabs/Tabs.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tabs/TabsContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tabs/TabsList.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tabs/TabsTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tabs/index.ts", "content": "export { default as Tabs } from './Tabs.vue'\nexport { default as TabsContent } from './TabsContent.vue'\nexport { default as TabsList } from './TabsList.vue'\nexport { default as TabsTrigger } from './TabsTrigger.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "tags-input", "type": "registry:ui", "dependencies": [ "reka-ui" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/tags-input/TagsInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tags-input/TagsInputInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tags-input/TagsInputItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tags-input/TagsInputItemDelete.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tags-input/TagsInputItemText.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/tags-input/index.ts", "content": "export { default as TagsInput } from './TagsInput.vue'\nexport { default as TagsInputInput } from './TagsInputInput.vue'\nexport { default as TagsInputItem } from './TagsInputItem.vue'\nexport { default as TagsInputItemDelete } from './TagsInputItemDelete.vue'\nexport { default as TagsInputItemText } from './TagsInputItemText.vue'\n", "type": "registry:ui", "target": "" } ] }, { "name": "textarea", "type": "registry:ui", "dependencies": [ "@vueuse/core" ], "registryDependencies": [ "utils" ], "files": [ { "path": "ui/textarea/Textarea.vue", "content": "\n\n