From 4471396bbb520591dbb3a64cbef7df40b17f3ba0 Mon Sep 17 00:00:00 2001 From: bivashy Date: Tue, 27 May 2025 14:09:51 +0500 Subject: [PATCH] Add missing assets and components --- assets/css/tailwind.css | 123 ++++++++++++++++++ assets/img/kodik.png | Bin 0 -> 6848 bytes assets/img/shikimori.png | Bin 0 -> 1157 bytes components.json | 20 +++ components/ui/button/Button.vue | 27 ++++ components/ui/button/index.ts | 36 +++++ components/ui/input/Input.vue | 33 +++++ components/ui/input/index.ts | 1 + components/ui/select/Select.vue | 18 +++ components/ui/select/SelectContent.vue | 52 ++++++++ components/ui/select/SelectGroup.vue | 14 ++ components/ui/select/SelectItem.vue | 42 ++++++ components/ui/select/SelectItemText.vue | 14 ++ components/ui/select/SelectLabel.vue | 16 +++ .../ui/select/SelectScrollDownButton.vue | 25 ++++ components/ui/select/SelectScrollUpButton.vue | 25 ++++ components/ui/select/SelectSeparator.vue | 18 +++ components/ui/select/SelectTrigger.vue | 32 +++++ components/ui/select/SelectValue.vue | 14 ++ components/ui/select/index.ts | 11 ++ components/ui/sonner/Sonner.vue | 18 +++ components/ui/sonner/index.ts | 1 + lib/utils.ts | 6 + pages/index.vue | 1 + 24 files changed, 547 insertions(+) create mode 100644 assets/css/tailwind.css create mode 100644 assets/img/kodik.png create mode 100644 assets/img/shikimori.png create mode 100644 components.json create mode 100644 components/ui/button/Button.vue create mode 100644 components/ui/button/index.ts create mode 100644 components/ui/input/Input.vue create mode 100644 components/ui/input/index.ts create mode 100644 components/ui/select/Select.vue create mode 100644 components/ui/select/SelectContent.vue create mode 100644 components/ui/select/SelectGroup.vue create mode 100644 components/ui/select/SelectItem.vue create mode 100644 components/ui/select/SelectItemText.vue create mode 100644 components/ui/select/SelectLabel.vue create mode 100644 components/ui/select/SelectScrollDownButton.vue create mode 100644 components/ui/select/SelectScrollUpButton.vue create mode 100644 components/ui/select/SelectSeparator.vue create mode 100644 components/ui/select/SelectTrigger.vue create mode 100644 components/ui/select/SelectValue.vue create mode 100644 components/ui/select/index.ts create mode 100644 components/ui/sonner/Sonner.vue create mode 100644 components/ui/sonner/index.ts create mode 100644 lib/utils.ts 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 0000000000000000000000000000000000000000..0068c3239bee5992696b3888c0db9d496257cbd4 GIT binary patch literal 6848 zcmW+*c_0(+|KHYRo7BvaPsFxnSbU~+?SoBh&P8fD^LbNiwPFpsf#pF5re3a|dA6}=sJ#4tt{zV?d zesM0fqT*7yb>aJZ=YvIi_U^xIV=$G5lZR{QU4nxU5GabC`lYG$_<*aT+cP!Yq2u(e)0BhpK1oVtR=&U}6~s5PBIF(f%qq1% zBlQF~a;m3B<610&P^EIYMg=S#Mc091Udv!D?C`mi3l<=l1r?;EMuZ%_VJ3F;FLMt& zn3SIWAA;uZbH~#*Q*V*Mz5R3^P~_f5P5k%NPTf|bF;^C=~t|>%aOET zj3vVc^hS&n0Au0s+H?q1tKIdyT$9*wbqE;EYV!kF zxM0(FMpZkfUgwKwsz;3M?y9*k>|O^WsiX<9rgO(H)W_wUlZ#4R4-2vi*+>U0)*@Ad zsvo)0mhp&EtTn6&rCQJ(u_^uTcqFD^)Z;wfjDW|!EKTpe)j}oS zXoQl?6k=l^k?vWkNDj}HyeKVS*FVS zJWREOj_DsD(&5~@Zki^X45b^e*bJS`TSy|9EZ9J}D5>*~k$jtgVubjk&#=1?e3>>-m$rr_qaWXx0Hc6;K7q{TllccDy;Et5aklQS^*|KL0Y z1i{SCG=)o7Bc+i?+(1D{D8`m4PY(TebofvS83epXM5wqPLWN#9^Ms28vrNk!DG4_I zYI!FxELV5?caEdPN2l^|NO3+&g2O6AD%z`6)suV}HHdV~D;+A6DZvaNg85>}W+bG6 zfq|ziA`=ETJz&G=Nd(aL z>_o3$Mj#+4F95c5weR<<81lS+$@-Bu@vX~RTO((USbxX$O@ceF`I-F97;9YseO=jZERt!VV-$F~N{ z#>UbYHQ(oQjQTQ~-_H-S10(TQyw68-ZKGVHNvSI4QDhQbOZ{P1mY`Yq6;CA-!U`mr zW&@Hn`(m`;%6ltqQTNS=nQYR&au2sSBq?@%zfnt@Jvg@LNqb~qax1n`a6`8-vnj=- z`KO=pubjx(?WOFA-sN3M4V2s8zP-HNyu5LHI{%|%#qEKVn{%>fe|?Ujb5_5t({$GhFsPJxa@z4nOtp-+%w#QF*ZVM1!3%&V_IFcl+F`=Yu`EqmwanmrPO>jWBfO6M^4AmjvJ_k4UZTT zp5l!={M5t>4kxJRw9Gqf{rbIKG9_Qz;&uQ19Sqrpm90YUkNY|;6#k

fCxJkgVk9^1zND6dYfEWTY3&EEO(=bBcgi@)=N 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 literal 0 HcmV?d00001 diff --git a/assets/img/shikimori.png b/assets/img/shikimori.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb1e6a39885857cd93651afcf5847a03eaf615f GIT binary patch literal 1157 zcmV;01bX|4P)lq->gqy5LN+!w*4Ea8gM+TFu77`jnVFf$$jA%~ z3}LB%Z^7mQo}|04$hk;LQz-kGPd9&*%Z2}O5xqh(#V zaN)uQ6@c?E*|GoapAZF}2g4ACj(d*V_oumV!P`|325Dyt-0P^rC#L8$L2cJ_*90N3 zT!c{3w8=Q!?E~uU>m0uVCiuplo*wa$@&$!4dzcIg&K-d}4q-E$t|`Y;=)&mGuy z_wyaVfrz|qoF_((^vRz}ase0hW-E%;+ox1FvE9tJ^|KVSsov%!4Yb~H!`j?dDlgSS z`~@ofFW2XOC1DJ_)sAWKuV>Gz4dxL)ru$fNZkgqx?(Xg!d~_5JH5Bg~wlF$;4q8Jd*B?MM?v1qo1SS*78Qb-)HEp z1??V93SJIn$#BbshLubD!lcw>krRous+C%Xr7@+UoEm6k@Io31VVqUN@&UMPW+*YM)xHLcQYad->r_8s=Ldb*rZ z7j$%TQUj(r6CKbEhfxbk;q^n6uWH~;U_QPVaalnzCKm`^TW_CR)=1AXdTh|&zJcgE zzn(J1=vhLK&39WHLgIB&!4!c+SG1Sn@(k8Yk&INdVsu4YNuo1wg$5L&iKHvaf@(NT z?z|>mvytaJxj}3G2A}4PIL$@YO0POCItveBq=Gz?=W({H=Kj(0ck*3c7s*V$$Ra@N6Fr<*ATfO)#C1eOtfwu#=%=a6dP1 z6ve}9Bo}g<#mm`qzhc~N@g}-riu(Jvg@~&li)Hvxgs)d8TK@Pz)b8Z5k?fE)CXz2X z<-5Q@`ue4;{1U+M&P}e-+A~NV9PX{cVz8$hKSlvb(eh>fZgxU-CirmZpkVlZ1#O+R zc1dC-C(_y;yR})U2Xrx?ngM`}22KLyF+DY!GmbP~D*c@zLS~=1-Lv1LFI>2A;s3%P XN=z+`uN;|*00000NkvXXu0mjfosc^Z literal 0 HcmV?d00001 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(() => {