diff --git a/apps/www/.vitepress/theme/config/site.ts b/apps/www/.vitepress/theme/config/site.ts index 7ff16cd4..060adca5 100644 --- a/apps/www/.vitepress/theme/config/site.ts +++ b/apps/www/.vitepress/theme/config/site.ts @@ -15,6 +15,6 @@ export const siteConfig = { export const announcementConfig = { icon: '✨', - title: 'New Toast component', - link: '/docs/components/toast', + title: 'VSCode extension', + link: '/docs/installation.html#vscode-extension', } diff --git a/apps/www/.vitepress/theme/utils/codeeditor.ts b/apps/www/.vitepress/theme/utils/codeeditor.ts index 7d75b4a2..00dae457 100644 --- a/apps/www/.vitepress/theme/utils/codeeditor.ts +++ b/apps/www/.vitepress/theme/utils/codeeditor.ts @@ -9,6 +9,9 @@ import { type Style } from '@/lib/registry/styles' export function makeCodeSandboxParams(componentName: string, style: Style, sources: Record) { let files = {} files = constructFiles(componentName, style, sources) + files['.codesandbox/Dockerfile'] = { + content: 'FROM node:18', + } return getParameters({ files, template: 'node' }) } @@ -121,7 +124,7 @@ function constructFiles(componentName: string, style: Style, sources: Record import('../src/lib/registry/default/example/AlertDialogDemo.vue').then(m => m.default), files: ['../src/lib/registry/default/example/AlertDialogDemo.vue'], }, + AreaChartDemo: { + name: 'AreaChartDemo', + type: 'components:example', + registryDependencies: ['chart-area'], + component: () => import('../src/lib/registry/default/example/AreaChartDemo.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/AreaChartDemo.vue'], + }, AspectRatioDemo: { name: 'AspectRatioDemo', type: 'components:example', @@ -72,6 +79,13 @@ export const Index = { component: () => import('../src/lib/registry/default/example/BadgeSecondaryDemo.vue').then(m => m.default), files: ['../src/lib/registry/default/example/BadgeSecondaryDemo.vue'], }, + BarChartDemo: { + name: 'BarChartDemo', + type: 'components:example', + registryDependencies: ['chart-bar'], + component: () => import('../src/lib/registry/default/example/BarChartDemo.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/BarChartDemo.vue'], + }, ButtonAsChildDemo: { name: 'ButtonAsChildDemo', type: 'components:example', @@ -331,6 +345,13 @@ export const Index = { component: () => import('../src/lib/registry/default/example/DialogDemo.vue').then(m => m.default), files: ['../src/lib/registry/default/example/DialogDemo.vue'], }, + DonutChartDemo: { + name: 'DonutChartDemo', + type: 'components:example', + registryDependencies: ['chart-donut'], + component: () => import('../src/lib/registry/default/example/DonutChartDemo.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/DonutChartDemo.vue'], + }, DropdownMenuDemo: { name: 'DropdownMenuDemo', type: 'components:example', @@ -401,6 +422,13 @@ export const Index = { component: () => import('../src/lib/registry/default/example/LabelDemo.vue').then(m => m.default), files: ['../src/lib/registry/default/example/LabelDemo.vue'], }, + LineChartDemo: { + name: 'LineChartDemo', + type: 'components:example', + registryDependencies: ['chart-line'], + component: () => import('../src/lib/registry/default/example/LineChartDemo.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/LineChartDemo.vue'], + }, MenubarDemo: { name: 'MenubarDemo', type: 'components:example', @@ -823,6 +851,13 @@ export const Index = { component: () => import('../src/lib/registry/new-york/example/AlertDialogDemo.vue').then(m => m.default), files: ['../src/lib/registry/new-york/example/AlertDialogDemo.vue'], }, + AreaChartDemo: { + name: 'AreaChartDemo', + type: 'components:example', + registryDependencies: ['chart-area'], + component: () => import('../src/lib/registry/new-york/example/AreaChartDemo.vue').then(m => m.default), + files: ['../src/lib/registry/new-york/example/AreaChartDemo.vue'], + }, AspectRatioDemo: { name: 'AspectRatioDemo', type: 'components:example', @@ -865,6 +900,13 @@ export const Index = { component: () => import('../src/lib/registry/new-york/example/BadgeSecondaryDemo.vue').then(m => m.default), files: ['../src/lib/registry/new-york/example/BadgeSecondaryDemo.vue'], }, + BarChartDemo: { + name: 'BarChartDemo', + type: 'components:example', + registryDependencies: ['chart-bar'], + component: () => import('../src/lib/registry/new-york/example/BarChartDemo.vue').then(m => m.default), + files: ['../src/lib/registry/new-york/example/BarChartDemo.vue'], + }, ButtonAsChildDemo: { name: 'ButtonAsChildDemo', type: 'components:example', @@ -1124,6 +1166,13 @@ export const Index = { component: () => import('../src/lib/registry/new-york/example/DialogDemo.vue').then(m => m.default), files: ['../src/lib/registry/new-york/example/DialogDemo.vue'], }, + DonutChartDemo: { + name: 'DonutChartDemo', + type: 'components:example', + registryDependencies: ['chart-donut'], + component: () => import('../src/lib/registry/new-york/example/DonutChartDemo.vue').then(m => m.default), + files: ['../src/lib/registry/new-york/example/DonutChartDemo.vue'], + }, DropdownMenuDemo: { name: 'DropdownMenuDemo', type: 'components:example', @@ -1194,6 +1243,13 @@ export const Index = { component: () => import('../src/lib/registry/new-york/example/LabelDemo.vue').then(m => m.default), files: ['../src/lib/registry/new-york/example/LabelDemo.vue'], }, + LineChartDemo: { + name: 'LineChartDemo', + type: 'components:example', + registryDependencies: ['chart-line'], + component: () => import('../src/lib/registry/new-york/example/LineChartDemo.vue').then(m => m.default), + files: ['../src/lib/registry/new-york/example/LineChartDemo.vue'], + }, MenubarDemo: { name: 'MenubarDemo', type: 'components:example', diff --git a/apps/www/src/content/docs/installation.md b/apps/www/src/content/docs/installation.md index 6f6145b1..04a30608 100644 --- a/apps/www/src/content/docs/installation.md +++ b/apps/www/src/content/docs/installation.md @@ -92,4 +92,16 @@ To configure import aliases, you can use the following `jsconfig.json`: "@/*": ["./*"] } } -} \ No newline at end of file +} +``` + +## VSCode extension + +Install the [shadcn-vue](https://marketplace.visualstudio.com/items?itemName=Selemondev.shadcn-vue) extension by [@selemondev](https://github.com/selemondev) in Visual Studio Code to easily add Shadcn Vue components to your project. + +This extension offers a range of features: +- Ability to initialize the Shadcn Vue CLI +- Install components +- Open documentation +- Navigate to a specific component's documentation page directly from your IDE. +- Handy snippets for quick and straightforward component imports and markup. diff --git a/apps/www/src/examples/cards/components/DatePicker.vue b/apps/www/src/examples/cards/components/DatePicker.vue index b600e78c..8e82644b 100644 --- a/apps/www/src/examples/cards/components/DatePicker.vue +++ b/apps/www/src/examples/cards/components/DatePicker.vue @@ -16,4 +16,3 @@ import { Label } from '@/lib/registry/new-york/ui/label' -@/lib/registry/default/example/DatePickerWithRange.vue diff --git a/apps/www/src/public/registry/index.json b/apps/www/src/public/registry/index.json index 3564863b..ceddc4e2 100644 --- a/apps/www/src/public/registry/index.json +++ b/apps/www/src/public/registry/index.json @@ -53,19 +53,6 @@ ], "type": "components:ui" }, - { - "name": "area-chart", - "dependencies": [ - "@unovis/vue", - "@unovis/ts" - ], - "registryDependencies": [], - "files": [ - "ui/area-chart/AreaChart.vue", - "ui/area-chart/index.ts" - ], - "type": "components:ui" - }, { "name": "aspect-ratio", "dependencies": [ @@ -151,6 +138,94 @@ ], "type": "components:ui" }, + { + "name": "chart", + "dependencies": [ + "@unovis/vue", + "@unovis/ts" + ], + "registryDependencies": [ + "chart", + "button", + "card" + ], + "files": [ + "ui/chart/ChartCrosshair.vue", + "ui/chart/ChartLegend.vue", + "ui/chart/ChartSingleTooltip.vue", + "ui/chart/ChartTooltip.vue", + "ui/chart/index.ts" + ], + "type": "components:ui" + }, + { + "name": "chart-area", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + "ui/chart-area/AreaChart.vue", + "ui/chart-area/index.ts" + ], + "type": "components:ui" + }, + { + "name": "chart-bar", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + "ui/chart-bar/BarChart.vue", + "ui/chart-bar/index.ts" + ], + "type": "components:ui" + }, + { + "name": "chart-donut", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + "ui/chart-donut/DonutChart.vue", + "ui/chart-donut/index.ts" + ], + "type": "components:ui" + }, + { + "name": "chart-line", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + "ui/chart-line/LineChart.vue", + "ui/chart-line/index.ts" + ], + "type": "components:ui" + }, { "name": "checkbox", "dependencies": [ diff --git a/apps/www/src/public/registry/styles/default/button.json b/apps/www/src/public/registry/styles/default/button.json index de7618f5..cdfec4b1 100644 --- a/apps/www/src/public/registry/styles/default/button.json +++ b/apps/www/src/public/registry/styles/default/button.json @@ -11,7 +11,7 @@ }, { "name": "index.ts", - "content": "import { cva } from 'class-variance-authority'\n\nexport { default as Button } from './Button.vue'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground 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-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n" + "content": "import { cva } from 'class-variance-authority'\n\nexport { default as Button } from './Button.vue'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground 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-10 px-4 py-2',\n xs: 'h-7 rounded px-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n" } ], "type": "components:ui" diff --git a/apps/www/src/public/registry/styles/default/chart-area.json b/apps/www/src/public/registry/styles/default/chart-area.json new file mode 100644 index 00000000..2c45eee5 --- /dev/null +++ b/apps/www/src/public/registry/styles/default/chart-area.json @@ -0,0 +1,23 @@ +{ + "name": "chart-area", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + { + "name": "AreaChart.vue", + "content": "\n\n\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as AreaChart } from './AreaChart.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/default/chart-bar.json b/apps/www/src/public/registry/styles/default/chart-bar.json new file mode 100644 index 00000000..fa0c39c0 --- /dev/null +++ b/apps/www/src/public/registry/styles/default/chart-bar.json @@ -0,0 +1,23 @@ +{ + "name": "chart-bar", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + { + "name": "BarChart.vue", + "content": "\n\n\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as BarChart } from './BarChart.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/default/chart-donut.json b/apps/www/src/public/registry/styles/default/chart-donut.json new file mode 100644 index 00000000..fb6c895f --- /dev/null +++ b/apps/www/src/public/registry/styles/default/chart-donut.json @@ -0,0 +1,23 @@ +{ + "name": "chart-donut", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + { + "name": "DonutChart.vue", + "content": "\n\n\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as DonutChart } from './DonutChart.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/default/chart-line.json b/apps/www/src/public/registry/styles/default/chart-line.json new file mode 100644 index 00000000..90e64845 --- /dev/null +++ b/apps/www/src/public/registry/styles/default/chart-line.json @@ -0,0 +1,23 @@ +{ + "name": "chart-line", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + { + "name": "LineChart.vue", + "content": "\n\n\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as LineChart } from './LineChart.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/default/chart.json b/apps/www/src/public/registry/styles/default/chart.json new file mode 100644 index 00000000..525ebba9 --- /dev/null +++ b/apps/www/src/public/registry/styles/default/chart.json @@ -0,0 +1,35 @@ +{ + "name": "chart", + "dependencies": [ + "@unovis/vue", + "@unovis/ts" + ], + "registryDependencies": [ + "chart", + "button", + "card" + ], + "files": [ + { + "name": "ChartCrosshair.vue", + "content": "\n\n\n" + }, + { + "name": "ChartLegend.vue", + "content": "\n\n\n" + }, + { + "name": "ChartSingleTooltip.vue", + "content": "\n\n\n" + }, + { + "name": "ChartTooltip.vue", + "content": "\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as ChartTooltip } from './ChartTooltip.vue'\nexport { default as ChartSingleTooltip } from './ChartSingleTooltip.vue'\nexport { default as ChartLegend } from './ChartLegend.vue'\nexport { default as ChartCrosshair } from './ChartCrosshair.vue'\n\nconst COLOR_COUNT = 3\nexport const defaultColors = [\n ...Array.from(Array(COLOR_COUNT).keys()).map(i => `hsl(var(--primary) / ${1 - (1 / COLOR_COUNT) * i})`),\n ...Array.from(Array(COLOR_COUNT).keys()).map(i => `hsl(var(--secondary) / ${1 - (1 / COLOR_COUNT) * i})`),\n]\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/new-york/button.json b/apps/www/src/public/registry/styles/new-york/button.json index 0702fa01..df3083e3 100644 --- a/apps/www/src/public/registry/styles/new-york/button.json +++ b/apps/www/src/public/registry/styles/new-york/button.json @@ -11,7 +11,7 @@ }, { "name": "index.ts", - "content": "import { cva } from 'class-variance-authority'\n\nexport { default as Button } from './Button.vue'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center 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',\n {\n variants: {\n variant: {\n default:\n '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-transparent 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 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" + "content": "import { cva } from 'class-variance-authority'\n\nexport { default as Button } from './Button.vue'\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center 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',\n {\n variants: {\n variant: {\n default:\n '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-transparent 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" } ], "type": "components:ui" diff --git a/apps/www/src/public/registry/styles/new-york/chart-area.json b/apps/www/src/public/registry/styles/new-york/chart-area.json new file mode 100644 index 00000000..d55410e4 --- /dev/null +++ b/apps/www/src/public/registry/styles/new-york/chart-area.json @@ -0,0 +1,23 @@ +{ + "name": "chart-area", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + { + "name": "AreaChart.vue", + "content": "\n\n\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as AreaChart } from './AreaChart.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/new-york/chart-bar.json b/apps/www/src/public/registry/styles/new-york/chart-bar.json new file mode 100644 index 00000000..0dc3fc18 --- /dev/null +++ b/apps/www/src/public/registry/styles/new-york/chart-bar.json @@ -0,0 +1,23 @@ +{ + "name": "chart-bar", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + { + "name": "BarChart.vue", + "content": "\n\n\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as BarChart } from './BarChart.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/new-york/chart-donut.json b/apps/www/src/public/registry/styles/new-york/chart-donut.json new file mode 100644 index 00000000..d61cea53 --- /dev/null +++ b/apps/www/src/public/registry/styles/new-york/chart-donut.json @@ -0,0 +1,23 @@ +{ + "name": "chart-donut", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + { + "name": "DonutChart.vue", + "content": "\n\n\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as DonutChart } from './DonutChart.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/new-york/chart-line.json b/apps/www/src/public/registry/styles/new-york/chart-line.json new file mode 100644 index 00000000..ae73b8c6 --- /dev/null +++ b/apps/www/src/public/registry/styles/new-york/chart-line.json @@ -0,0 +1,23 @@ +{ + "name": "chart-line", + "dependencies": [ + "@unovis/vue", + "@unovis/ts", + "@vueuse/core" + ], + "registryDependencies": [ + "chart", + "utils" + ], + "files": [ + { + "name": "LineChart.vue", + "content": "\n\n\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as LineChart } from './LineChart.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/new-york/chart.json b/apps/www/src/public/registry/styles/new-york/chart.json new file mode 100644 index 00000000..43cb6afd --- /dev/null +++ b/apps/www/src/public/registry/styles/new-york/chart.json @@ -0,0 +1,35 @@ +{ + "name": "chart", + "dependencies": [ + "@unovis/vue", + "@unovis/ts" + ], + "registryDependencies": [ + "chart", + "button", + "card" + ], + "files": [ + { + "name": "ChartCrosshair.vue", + "content": "\n\n\n" + }, + { + "name": "ChartLegend.vue", + "content": "\n\n\n" + }, + { + "name": "ChartSingleTooltip.vue", + "content": "\n\n\n" + }, + { + "name": "ChartTooltip.vue", + "content": "\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as ChartTooltip } from './ChartTooltip.vue'\nexport { default as ChartSingleTooltip } from './ChartSingleTooltip.vue'\nexport { default as ChartLegend } from './ChartLegend.vue'\nexport { default as ChartCrosshair } from './ChartCrosshair.vue'\n\nconst COLOR_COUNT = 3\nexport const defaultColors = [\n ...Array.from(Array(COLOR_COUNT).keys()).map(i => `hsl(var(--primary) / ${1 - (1 / COLOR_COUNT) * i})`),\n ...Array.from(Array(COLOR_COUNT).keys()).map(i => `hsl(var(--secondary) / ${1 - (1 / COLOR_COUNT) * i})`),\n]\n" + } + ], + "type": "components:ui" +} \ No newline at end of file