diff --git a/assets/css/tailwind.css b/assets/css/tailwind.css new file mode 100644 index 0000000..3398e67 --- /dev/null +++ b/assets/css/tailwind.css @@ -0,0 +1,123 @@ +@import "tailwindcss"; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --radius: 0.625rem; + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.145 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.145 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.985 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.396 0.141 25.723); + --destructive-foreground: oklch(0.637 0.237 25.331); + --border: oklch(0.269 0 0); + --input: oklch(0.269 0 0); + --ring: oklch(0.439 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(0.269 0 0); + --sidebar-ring: oklch(0.439 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/assets/img/kodik.png b/assets/img/kodik.png new file mode 100644 index 0000000..0068c32 Binary files /dev/null and b/assets/img/kodik.png differ diff --git a/assets/img/shikimori.png b/assets/img/shikimori.png new file mode 100644 index 0000000..2eb1e6a Binary files /dev/null and b/assets/img/shikimori.png differ diff --git a/components.json b/components.json new file mode 100644 index 0000000..5afea5b --- /dev/null +++ b/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://shadcn-vue.com/schema.json", + "style": "new-york", + "typescript": true, + "tailwind": { + "config": "", + "css": "assets/css/tailwind.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "composables": "@/composables", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/components/ui/button/Button.vue b/components/ui/button/Button.vue new file mode 100644 index 0000000..ecf3fe3 --- /dev/null +++ b/components/ui/button/Button.vue @@ -0,0 +1,27 @@ + + + diff --git a/components/ui/button/index.ts b/components/ui/button/index.ts new file mode 100644 index 0000000..616d1d3 --- /dev/null +++ b/components/ui/button/index.ts @@ -0,0 +1,36 @@ +import { cva, type VariantProps } from 'class-variance-authority' + +export { default as Button } from './Button.vue' + +export const buttonVariants = cva( + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*=\'size-\'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive', + { + variants: { + variant: { + default: + 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90', + destructive: + 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', + outline: + 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + secondary: + 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80', + ghost: + 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2 has-[>svg]:px-3', + sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', + lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + icon: 'size-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type ButtonVariants = VariantProps diff --git a/components/ui/input/Input.vue b/components/ui/input/Input.vue new file mode 100644 index 0000000..b82c9d0 --- /dev/null +++ b/components/ui/input/Input.vue @@ -0,0 +1,33 @@ + + + diff --git a/components/ui/input/index.ts b/components/ui/input/index.ts new file mode 100644 index 0000000..a691dd6 --- /dev/null +++ b/components/ui/input/index.ts @@ -0,0 +1 @@ +export { default as Input } from './Input.vue' diff --git a/components/ui/select/Select.vue b/components/ui/select/Select.vue new file mode 100644 index 0000000..dc1f83d --- /dev/null +++ b/components/ui/select/Select.vue @@ -0,0 +1,18 @@ + + + diff --git a/components/ui/select/SelectContent.vue b/components/ui/select/SelectContent.vue new file mode 100644 index 0000000..71a6061 --- /dev/null +++ b/components/ui/select/SelectContent.vue @@ -0,0 +1,52 @@ + + + diff --git a/components/ui/select/SelectGroup.vue b/components/ui/select/SelectGroup.vue new file mode 100644 index 0000000..4f36d92 --- /dev/null +++ b/components/ui/select/SelectGroup.vue @@ -0,0 +1,14 @@ + + + diff --git a/components/ui/select/SelectItem.vue b/components/ui/select/SelectItem.vue new file mode 100644 index 0000000..1cdfa63 --- /dev/null +++ b/components/ui/select/SelectItem.vue @@ -0,0 +1,42 @@ + + + diff --git a/components/ui/select/SelectItemText.vue b/components/ui/select/SelectItemText.vue new file mode 100644 index 0000000..cff32ac --- /dev/null +++ b/components/ui/select/SelectItemText.vue @@ -0,0 +1,14 @@ + + + diff --git a/components/ui/select/SelectLabel.vue b/components/ui/select/SelectLabel.vue new file mode 100644 index 0000000..37a84dd --- /dev/null +++ b/components/ui/select/SelectLabel.vue @@ -0,0 +1,16 @@ + + + diff --git a/components/ui/select/SelectScrollDownButton.vue b/components/ui/select/SelectScrollDownButton.vue new file mode 100644 index 0000000..f03ff40 --- /dev/null +++ b/components/ui/select/SelectScrollDownButton.vue @@ -0,0 +1,25 @@ + + + diff --git a/components/ui/select/SelectScrollUpButton.vue b/components/ui/select/SelectScrollUpButton.vue new file mode 100644 index 0000000..078331b --- /dev/null +++ b/components/ui/select/SelectScrollUpButton.vue @@ -0,0 +1,25 @@ + + + diff --git a/components/ui/select/SelectSeparator.vue b/components/ui/select/SelectSeparator.vue new file mode 100644 index 0000000..5ec7155 --- /dev/null +++ b/components/ui/select/SelectSeparator.vue @@ -0,0 +1,18 @@ + + + diff --git a/components/ui/select/SelectTrigger.vue b/components/ui/select/SelectTrigger.vue new file mode 100644 index 0000000..5ffd488 --- /dev/null +++ b/components/ui/select/SelectTrigger.vue @@ -0,0 +1,32 @@ + + + diff --git a/components/ui/select/SelectValue.vue b/components/ui/select/SelectValue.vue new file mode 100644 index 0000000..f198b96 --- /dev/null +++ b/components/ui/select/SelectValue.vue @@ -0,0 +1,14 @@ + + + diff --git a/components/ui/select/index.ts b/components/ui/select/index.ts new file mode 100644 index 0000000..31b9294 --- /dev/null +++ b/components/ui/select/index.ts @@ -0,0 +1,11 @@ +export { default as Select } from './Select.vue' +export { default as SelectContent } from './SelectContent.vue' +export { default as SelectGroup } from './SelectGroup.vue' +export { default as SelectItem } from './SelectItem.vue' +export { default as SelectItemText } from './SelectItemText.vue' +export { default as SelectLabel } from './SelectLabel.vue' +export { default as SelectScrollDownButton } from './SelectScrollDownButton.vue' +export { default as SelectScrollUpButton } from './SelectScrollUpButton.vue' +export { default as SelectSeparator } from './SelectSeparator.vue' +export { default as SelectTrigger } from './SelectTrigger.vue' +export { default as SelectValue } from './SelectValue.vue' diff --git a/components/ui/sonner/Sonner.vue b/components/ui/sonner/Sonner.vue new file mode 100644 index 0000000..e6fff28 --- /dev/null +++ b/components/ui/sonner/Sonner.vue @@ -0,0 +1,18 @@ + + + diff --git a/components/ui/sonner/index.ts b/components/ui/sonner/index.ts new file mode 100644 index 0000000..0d4a642 --- /dev/null +++ b/components/ui/sonner/index.ts @@ -0,0 +1 @@ +export { default as Toaster } from './Sonner.vue' diff --git a/lib/utils.ts b/lib/utils.ts new file mode 100644 index 0000000..d32b0fe --- /dev/null +++ b/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from 'clsx' +import { twMerge } from 'tailwind-merge' + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/pages/index.vue b/pages/index.vue index 53cd6f2..eaf964a 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -14,6 +14,7 @@ import { import {toast} from "vue-sonner"; import {Toaster} from "~/components/ui/sonner"; import {Navbar} from "~/components/ui/navbar"; +import 'vue-sonner/style.css' const searchProvider = ref('kodik') const displaySearchProvider = computed(() => {