From 5264cdfc0a839e05916fc56d20a4fa76f7fb61ed Mon Sep 17 00:00:00 2001 From: ZTL-UwU Date: Thu, 2 May 2024 22:10:09 +0800 Subject: [PATCH] feat: add playground Signed-off-by: ZTL-UwU --- .github/workflows/ci.yml | 34 +-- bun.lockb | Bin 106920 -> 164448 bytes package.json | 4 +- playground/.gitignore | 30 +++ playground/.vscode/extensions.json | 3 + playground/README.md | 33 +++ playground/bun.lockb | Bin 0 -> 90343 bytes playground/components.json | 16 ++ playground/env.d.ts | 1 + playground/index.html | 13 ++ playground/package.json | 40 ++++ playground/public/favicon.ico | Bin 0 -> 9271 bytes playground/src/App.vue | 209 ++++++++++++++++++ playground/src/assets/index.css | 78 +++++++ playground/src/components/DarkModeTrigger.vue | 23 ++ playground/src/components/ui/badge/Badge.vue | 16 ++ playground/src/components/ui/badge/index.ts | 25 +++ .../src/components/ui/button/Button.vue | 26 +++ playground/src/components/ui/button/index.ts | 35 +++ playground/src/components/ui/card/Card.vue | 21 ++ .../src/components/ui/card/CardContent.vue | 14 ++ .../components/ui/card/CardDescription.vue | 14 ++ .../src/components/ui/card/CardFooter.vue | 14 ++ .../src/components/ui/card/CardHeader.vue | 14 ++ .../src/components/ui/card/CardTitle.vue | 18 ++ playground/src/components/ui/card/index.ts | 6 + .../ui/dropdown-menu/DropdownMenu.vue | 19 ++ .../DropdownMenuCheckboxItem.vue | 42 ++++ .../ui/dropdown-menu/DropdownMenuContent.vue | 38 ++++ .../ui/dropdown-menu/DropdownMenuGroup.vue | 11 + .../ui/dropdown-menu/DropdownMenuItem.vue | 34 +++ .../ui/dropdown-menu/DropdownMenuLabel.vue | 30 +++ .../dropdown-menu/DropdownMenuRadioGroup.vue | 19 ++ .../dropdown-menu/DropdownMenuRadioItem.vue | 43 ++++ .../dropdown-menu/DropdownMenuSeparator.vue | 24 ++ .../ui/dropdown-menu/DropdownMenuShortcut.vue | 14 ++ .../ui/dropdown-menu/DropdownMenuSub.vue | 19 ++ .../dropdown-menu/DropdownMenuSubContent.vue | 32 +++ .../dropdown-menu/DropdownMenuSubTrigger.vue | 35 +++ .../ui/dropdown-menu/DropdownMenuTrigger.vue | 17 ++ .../src/components/ui/dropdown-menu/index.ts | 16 ++ playground/src/components/ui/input/Input.vue | 23 ++ playground/src/components/ui/input/index.ts | 1 + playground/src/components/ui/label/Label.vue | 27 +++ playground/src/components/ui/label/index.ts | 1 + .../src/components/ui/select/Select.vue | 15 ++ .../components/ui/select/SelectContent.vue | 53 +++++ .../src/components/ui/select/SelectGroup.vue | 21 ++ .../src/components/ui/select/SelectItem.vue | 46 ++++ .../components/ui/select/SelectItemText.vue | 11 + .../src/components/ui/select/SelectLabel.vue | 15 ++ .../ui/select/SelectScrollDownButton.vue | 30 +++ .../ui/select/SelectScrollUpButton.vue | 30 +++ .../components/ui/select/SelectSeparator.vue | 19 ++ .../components/ui/select/SelectTrigger.vue | 38 ++++ .../src/components/ui/select/SelectValue.vue | 11 + playground/src/components/ui/select/index.ts | 11 + .../src/components/ui/sonner/Sonner.vue | 22 ++ playground/src/components/ui/sonner/index.ts | 1 + playground/src/components/ui/tabs/Tabs.vue | 15 ++ .../src/components/ui/tabs/TabsContent.vue | 24 ++ .../src/components/ui/tabs/TabsList.vue | 27 +++ .../src/components/ui/tabs/TabsTrigger.vue | 29 +++ playground/src/components/ui/tabs/index.ts | 4 + playground/src/lib/utils.ts | 6 + playground/src/main.ts | 6 + playground/tailwind.config.js | 93 ++++++++ playground/tsconfig.app.json | 14 ++ playground/tsconfig.json | 11 + playground/tsconfig.node.json | 23 ++ playground/vite.config.ts | 21 ++ src/index.ts | 6 +- test/index.test.ts | 1 + 73 files changed, 1713 insertions(+), 22 deletions(-) create mode 100644 playground/.gitignore create mode 100644 playground/.vscode/extensions.json create mode 100644 playground/README.md create mode 100755 playground/bun.lockb create mode 100644 playground/components.json create mode 100644 playground/env.d.ts create mode 100644 playground/index.html create mode 100644 playground/package.json create mode 100644 playground/public/favicon.ico create mode 100644 playground/src/App.vue create mode 100644 playground/src/assets/index.css create mode 100644 playground/src/components/DarkModeTrigger.vue create mode 100644 playground/src/components/ui/badge/Badge.vue create mode 100644 playground/src/components/ui/badge/index.ts create mode 100644 playground/src/components/ui/button/Button.vue create mode 100644 playground/src/components/ui/button/index.ts create mode 100644 playground/src/components/ui/card/Card.vue create mode 100644 playground/src/components/ui/card/CardContent.vue create mode 100644 playground/src/components/ui/card/CardDescription.vue create mode 100644 playground/src/components/ui/card/CardFooter.vue create mode 100644 playground/src/components/ui/card/CardHeader.vue create mode 100644 playground/src/components/ui/card/CardTitle.vue create mode 100644 playground/src/components/ui/card/index.ts create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenu.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuContent.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuGroup.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuItem.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuLabel.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuSub.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue create mode 100644 playground/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue create mode 100644 playground/src/components/ui/dropdown-menu/index.ts create mode 100644 playground/src/components/ui/input/Input.vue create mode 100644 playground/src/components/ui/input/index.ts create mode 100644 playground/src/components/ui/label/Label.vue create mode 100644 playground/src/components/ui/label/index.ts create mode 100644 playground/src/components/ui/select/Select.vue create mode 100644 playground/src/components/ui/select/SelectContent.vue create mode 100644 playground/src/components/ui/select/SelectGroup.vue create mode 100644 playground/src/components/ui/select/SelectItem.vue create mode 100644 playground/src/components/ui/select/SelectItemText.vue create mode 100644 playground/src/components/ui/select/SelectLabel.vue create mode 100644 playground/src/components/ui/select/SelectScrollDownButton.vue create mode 100644 playground/src/components/ui/select/SelectScrollUpButton.vue create mode 100644 playground/src/components/ui/select/SelectSeparator.vue create mode 100644 playground/src/components/ui/select/SelectTrigger.vue create mode 100644 playground/src/components/ui/select/SelectValue.vue create mode 100644 playground/src/components/ui/select/index.ts create mode 100644 playground/src/components/ui/sonner/Sonner.vue create mode 100644 playground/src/components/ui/sonner/index.ts create mode 100644 playground/src/components/ui/tabs/Tabs.vue create mode 100644 playground/src/components/ui/tabs/TabsContent.vue create mode 100644 playground/src/components/ui/tabs/TabsList.vue create mode 100644 playground/src/components/ui/tabs/TabsTrigger.vue create mode 100644 playground/src/components/ui/tabs/index.ts create mode 100644 playground/src/lib/utils.ts create mode 100644 playground/src/main.ts create mode 100644 playground/tailwind.config.js create mode 100644 playground/tsconfig.app.json create mode 100644 playground/tsconfig.json create mode 100644 playground/tsconfig.node.json create mode 100644 playground/vite.config.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d5d6100..6dcd032 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,24 +29,24 @@ jobs: - name: Lint run: bunx biome ci . - typecheck: - runs-on: ubuntu-latest - steps: - - id: checkout - name: Checkout - uses: actions/checkout@v3 - - id: setup-bun - name: Setup Bun - uses: oven-sh/setup-bun@v1 - with: - bun-version: latest - - id: install-deps - name: Install dependencies - run: | - bun install + # typecheck: + # runs-on: ubuntu-latest + # steps: + # - id: checkout + # name: Checkout + # uses: actions/checkout@v3 + # - id: setup-bun + # name: Setup Bun + # uses: oven-sh/setup-bun@v1 + # with: + # bun-version: latest + # - id: install-deps + # name: Install dependencies + # run: | + # bun install - - name: Typecheck - run: bun run typecheck + # - name: Typecheck + # run: bun run typecheck test: runs-on: ${{ matrix.os }} diff --git a/bun.lockb b/bun.lockb index e7768a4c36eb0884405b13108b275a5a8b4d7cfc..458450adbb95262006e00016e1b7389a084fdccb 100755 GIT binary patch delta 51250 zcmeFac|4Tg`#(Oz3?{oQ*|TKJ8rd1LhU{dC63R}Niee;fL}`*r5v9nIB}!6B5pA?c zq0%m;Xd}_@I&;tTx<9Y?>-+wGKELm8`R9EeuDQ;2opYY&I@ek6`!@HKw{twtoU>O` zH6;D=PFL@*%g(R-ZWN)O|BNf@#rH+78>brAr96LmUQw=R3mXB26M4&J+4dLbZM0A= zAQA{X1VZ{7ND%^l4Y)k;3gD8!w?n!h@J)HcS~LwZmPrOUKPcBm#jXyDN+7U-%nR~T zP69y*xH@oY;DW#r2tPAForHnaPzZ!Mpf3V009+pgh^7aJ1w}=Iecd4QfgBc;ps^+@ zXl)b7!UO^>y%HkaknjRNP=z{RI;he=a}Wq}z)wI02rwccG$9y(7DFa+kUs%OhV%m$ z11`hl<4}tT$X}rxs_-FjS>PN1g7UwIR!RXs3wk+1Fd;nwe1R-Y4vLBjPe>%J1sS<- zE%;6pI8+-H6%-Qc2Qt)=ZVMbNPd5gR@-2n@GQbUhgDO1@fRO=uOgG!m*RhES&1H6q z3X{tc>4(|Ojs9NwoOzhlaj^-B!3hb3RnSyaX-rT|YIh9(ofIAwLa5{ zvkN#fqyaceFJ{OJg!CMUAOPqu)J=pr3$YAS8UzA#XZlC_V-l6ZtA+XQ6kU!iMmwsF zNntve=lz&GG$t`TF+4PZ1i4X9{LsXDxB@t;`~hI1(SHdzGUA0U<~<`lj4uR^da|6E zegJIY1$j5f&>`s?fJ0+w>46YIK&HUK{&Yp)$XE{GXf%(iW8HQWIP_?GJ#du&FmRM_ z8*t>6Xr>$-8x%S^jIjm_Fw$Y#O@n0!U>GCHf%_Wg2Tn{NEg1 z|EGhCmi~V>x^RPwxsDQum|q+1u#PQf^7r5hSm0g+7uPSgbo0cxf%rFgrC<81n z*tm*;fgBo5_`4xs6l0tgcw+{xPhvEauyi?Qcm;6eH$x`3^}$vJ9*~jYD!|crmhnaT zXoU16h%gq)goMQ8xKM%^v*7xmq$mwQkA{kn-&jk(xIdPk4>$r$Oo$3!4Mq__Mjn77 z8X=+4;l@x7O@!qEScO)=k!MH!unA`z2o0uz;sGecfPVx9DsT;CWMSM&%<{8L`4`Bj zWtjksdR`VdG9V!-I6f#Ll+YA}RS*{*ACw5&N^}acia^K*>llWHg~o)hNhYK+<(

>YRqu_aD=w9FmXV)4`zXCWKJF07$ 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 diff --git a/package.json b/package.json index 28c5bc6..700b749 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cn-lorem-ipsum", - "version": "0.1.0", + "version": "0.1.1", "exports": { ".": { "types": "./dist/index.d.ts", @@ -25,7 +25,7 @@ }, "files": ["dist"], "keywords": ["bun", "lorem", "chinese"], - "workspaces": ["benchmark/"], + "workspaces": ["benchmark/", "playground/"], "license": "MIT", "homepage": "https://github.com/ZTL-UwU/cn-lorem-ipsum#readme", "repository": { diff --git a/playground/.gitignore b/playground/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/playground/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/playground/.vscode/extensions.json b/playground/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/playground/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/playground/README.md b/playground/README.md new file mode 100644 index 0000000..8eb16ca --- /dev/null +++ b/playground/README.md @@ -0,0 +1,33 @@ +# cn-lorem-ipsum playground + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +bun install +``` + +### Compile and Hot-Reload for Development + +```sh +bun dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +bun build +``` diff --git a/playground/bun.lockb b/playground/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..32dc8fc297fb4d930c2f2ef07d18aebb41789d1d GIT binary patch literal 90343 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 diff --git a/playground/index.html b/playground/index.html new file mode 100644 index 0000000..572e465 --- /dev/null +++ b/playground/index.html @@ -0,0 +1,13 @@ + + + + + + + 中文假文&人名生成器 + + +
+ + + diff --git a/playground/package.json b/playground/package.json new file mode 100644 index 0000000..c6bd632 --- /dev/null +++ b/playground/package.json @@ -0,0 +1,40 @@ +{ + "name": "-cn-lorem-ipsum-playground", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build --force" + }, + "dependencies": { + "@radix-icons/vue": "^1.0.0", + "@vueuse/core": "^10.9.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cn-lorem-ipsum": "^0.1.0", + "lucide-vue-next": "^0.377.0", + "radix-vue": "^1.7.3", + "tailwind-merge": "^2.3.0", + "tailwindcss-animate": "^1.0.7", + "vaul-vue": "^0.1.0", + "vue": "^3.4.21", + "vue-sonner": "^1.1.2" + }, + "devDependencies": { + "@tsconfig/node20": "^20.1.4", + "@types/node": "^20.12.5", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/tsconfig": "^0.5.1", + "autoprefixer": "^10.4.19", + "npm-run-all2": "^6.1.2", + "shiki": "^1.4.0", + "tailwindcss": "^3.4.3", + "typescript": "~5.4.0", + "vite": "^5.2.8", + "vue-tsc": "^2.0.11" + } +} diff --git a/playground/public/favicon.ico b/playground/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ea20fcaf71b97063423ffe1f5d3a6c84b5d547b5 GIT binary patch literal 9271 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 literal 0 HcmV?d00001 diff --git a/playground/src/App.vue b/playground/src/App.vue new file mode 100644 index 0000000..5fdedb7 --- /dev/null +++ b/playground/src/App.vue @@ -0,0 +1,209 @@ + + + + + \ No newline at end of file diff --git a/playground/src/assets/index.css b/playground/src/assets/index.css new file mode 100644 index 0000000..10b7e9c --- /dev/null +++ b/playground/src/assets/index.css @@ -0,0 +1,78 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --ring: 222.2 84% 4.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --ring: 212.7 26.8% 83.9%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/playground/src/components/DarkModeTrigger.vue b/playground/src/components/DarkModeTrigger.vue new file mode 100644 index 0000000..b292890 --- /dev/null +++ b/playground/src/components/DarkModeTrigger.vue @@ -0,0 +1,23 @@ + + + diff --git a/playground/src/components/ui/badge/Badge.vue b/playground/src/components/ui/badge/Badge.vue new file mode 100644 index 0000000..88e68b3 --- /dev/null +++ b/playground/src/components/ui/badge/Badge.vue @@ -0,0 +1,16 @@ + + + diff --git a/playground/src/components/ui/badge/index.ts b/playground/src/components/ui/badge/index.ts new file mode 100644 index 0000000..9448167 --- /dev/null +++ b/playground/src/components/ui/badge/index.ts @@ -0,0 +1,25 @@ +import { type VariantProps, cva } from 'class-variance-authority'; + +export { default as Badge } from './Badge.vue'; + +export const badgeVariants = cva( + 'inline-flex items-center rounded-full 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', + { + variants: { + variant: { + default: + 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80', + secondary: + 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80', + destructive: + 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80', + outline: 'text-foreground', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +); + +export type BadgeVariants = VariantProps; diff --git a/playground/src/components/ui/button/Button.vue b/playground/src/components/ui/button/Button.vue new file mode 100644 index 0000000..019a9a8 --- /dev/null +++ b/playground/src/components/ui/button/Button.vue @@ -0,0 +1,26 @@ + + + diff --git a/playground/src/components/ui/button/index.ts b/playground/src/components/ui/button/index.ts new file mode 100644 index 0000000..799db28 --- /dev/null +++ b/playground/src/components/ui/button/index.ts @@ -0,0 +1,35 @@ +import { type VariantProps, cva } from 'class-variance-authority'; + +export { default as Button } from './Button.vue'; + +export const buttonVariants = cva( + 'inline-flex items-center justify-center whitespace-nowrap 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', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground hover:bg-primary/90', + destructive: + 'bg-destructive text-destructive-foreground hover:bg-destructive/90', + outline: + 'border border-input bg-background hover:bg-accent hover:text-accent-foreground', + secondary: + 'bg-secondary text-secondary-foreground hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-10 px-4 py-2', + xs: 'h-7 rounded px-2', + sm: 'h-9 rounded-md px-3', + lg: 'h-11 rounded-md px-8', + icon: 'h-10 w-10', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +); + +export type ButtonVariants = VariantProps; diff --git a/playground/src/components/ui/card/Card.vue b/playground/src/components/ui/card/Card.vue new file mode 100644 index 0000000..c296658 --- /dev/null +++ b/playground/src/components/ui/card/Card.vue @@ -0,0 +1,21 @@ + + + diff --git a/playground/src/components/ui/card/CardContent.vue b/playground/src/components/ui/card/CardContent.vue new file mode 100644 index 0000000..a92ebf8 --- /dev/null +++ b/playground/src/components/ui/card/CardContent.vue @@ -0,0 +1,14 @@ + + + diff --git a/playground/src/components/ui/card/CardDescription.vue b/playground/src/components/ui/card/CardDescription.vue new file mode 100644 index 0000000..4f02f8b --- /dev/null +++ b/playground/src/components/ui/card/CardDescription.vue @@ -0,0 +1,14 @@ + + + diff --git a/playground/src/components/ui/card/CardFooter.vue b/playground/src/components/ui/card/CardFooter.vue new file mode 100644 index 0000000..542fbe8 --- /dev/null +++ b/playground/src/components/ui/card/CardFooter.vue @@ -0,0 +1,14 @@ + + + diff --git a/playground/src/components/ui/card/CardHeader.vue b/playground/src/components/ui/card/CardHeader.vue new file mode 100644 index 0000000..3a67f4d --- /dev/null +++ b/playground/src/components/ui/card/CardHeader.vue @@ -0,0 +1,14 @@ + + + diff --git a/playground/src/components/ui/card/CardTitle.vue b/playground/src/components/ui/card/CardTitle.vue new file mode 100644 index 0000000..ad50fb8 --- /dev/null +++ b/playground/src/components/ui/card/CardTitle.vue @@ -0,0 +1,18 @@ + + + diff --git a/playground/src/components/ui/card/index.ts b/playground/src/components/ui/card/index.ts new file mode 100644 index 0000000..872bc81 --- /dev/null +++ b/playground/src/components/ui/card/index.ts @@ -0,0 +1,6 @@ +export { default as Card } from './Card.vue'; +export { default as CardHeader } from './CardHeader.vue'; +export { default as CardTitle } from './CardTitle.vue'; +export { default as CardDescription } from './CardDescription.vue'; +export { default as CardContent } from './CardContent.vue'; +export { default as CardFooter } from './CardFooter.vue'; diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenu.vue b/playground/src/components/ui/dropdown-menu/DropdownMenu.vue new file mode 100644 index 0000000..56a5575 --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenu.vue @@ -0,0 +1,19 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue new file mode 100644 index 0000000..d992a74 --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -0,0 +1,42 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuContent.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuContent.vue new file mode 100644 index 0000000..dd909dd --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuContent.vue @@ -0,0 +1,38 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuGroup.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuGroup.vue new file mode 100644 index 0000000..968d01d --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuGroup.vue @@ -0,0 +1,11 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuItem.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuItem.vue new file mode 100644 index 0000000..afa28b0 --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuItem.vue @@ -0,0 +1,34 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuLabel.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuLabel.vue new file mode 100644 index 0000000..b8fd694 --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuLabel.vue @@ -0,0 +1,30 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue new file mode 100644 index 0000000..7124d33 --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue @@ -0,0 +1,19 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue new file mode 100644 index 0000000..e3cd31b --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue @@ -0,0 +1,43 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue new file mode 100644 index 0000000..53dcccb --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue @@ -0,0 +1,24 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue new file mode 100644 index 0000000..fc5620e --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue @@ -0,0 +1,14 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuSub.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuSub.vue new file mode 100644 index 0000000..bfda22f --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuSub.vue @@ -0,0 +1,19 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue new file mode 100644 index 0000000..7bf9004 --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue @@ -0,0 +1,32 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue new file mode 100644 index 0000000..4c173d9 --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue @@ -0,0 +1,35 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/playground/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue new file mode 100644 index 0000000..0717842 --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue @@ -0,0 +1,17 @@ + + + diff --git a/playground/src/components/ui/dropdown-menu/index.ts b/playground/src/components/ui/dropdown-menu/index.ts new file mode 100644 index 0000000..522a4df --- /dev/null +++ b/playground/src/components/ui/dropdown-menu/index.ts @@ -0,0 +1,16 @@ +export { DropdownMenuPortal } from 'radix-vue'; + +export { default as DropdownMenu } from './DropdownMenu.vue'; +export { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue'; +export { default as DropdownMenuContent } from './DropdownMenuContent.vue'; +export { default as DropdownMenuGroup } from './DropdownMenuGroup.vue'; +export { default as DropdownMenuRadioGroup } from './DropdownMenuRadioGroup.vue'; +export { default as DropdownMenuItem } from './DropdownMenuItem.vue'; +export { default as DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem.vue'; +export { default as DropdownMenuRadioItem } from './DropdownMenuRadioItem.vue'; +export { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue'; +export { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue'; +export { default as DropdownMenuLabel } from './DropdownMenuLabel.vue'; +export { default as DropdownMenuSub } from './DropdownMenuSub.vue'; +export { default as DropdownMenuSubTrigger } from './DropdownMenuSubTrigger.vue'; +export { default as DropdownMenuSubContent } from './DropdownMenuSubContent.vue'; diff --git a/playground/src/components/ui/input/Input.vue b/playground/src/components/ui/input/Input.vue new file mode 100644 index 0000000..a2c624c --- /dev/null +++ b/playground/src/components/ui/input/Input.vue @@ -0,0 +1,23 @@ + + + diff --git a/playground/src/components/ui/input/index.ts b/playground/src/components/ui/input/index.ts new file mode 100644 index 0000000..c5248c5 --- /dev/null +++ b/playground/src/components/ui/input/index.ts @@ -0,0 +1 @@ +export { default as Input } from './Input.vue'; diff --git a/playground/src/components/ui/label/Label.vue b/playground/src/components/ui/label/Label.vue new file mode 100644 index 0000000..75706bb --- /dev/null +++ b/playground/src/components/ui/label/Label.vue @@ -0,0 +1,27 @@ + + + diff --git a/playground/src/components/ui/label/index.ts b/playground/src/components/ui/label/index.ts new file mode 100644 index 0000000..c98e59f --- /dev/null +++ b/playground/src/components/ui/label/index.ts @@ -0,0 +1 @@ +export { default as Label } from './Label.vue'; diff --git a/playground/src/components/ui/select/Select.vue b/playground/src/components/ui/select/Select.vue new file mode 100644 index 0000000..160402f --- /dev/null +++ b/playground/src/components/ui/select/Select.vue @@ -0,0 +1,15 @@ + + + diff --git a/playground/src/components/ui/select/SelectContent.vue b/playground/src/components/ui/select/SelectContent.vue new file mode 100644 index 0000000..9d9d95f --- /dev/null +++ b/playground/src/components/ui/select/SelectContent.vue @@ -0,0 +1,53 @@ + + + diff --git a/playground/src/components/ui/select/SelectGroup.vue b/playground/src/components/ui/select/SelectGroup.vue new file mode 100644 index 0000000..e4d0de8 --- /dev/null +++ b/playground/src/components/ui/select/SelectGroup.vue @@ -0,0 +1,21 @@ + + + diff --git a/playground/src/components/ui/select/SelectItem.vue b/playground/src/components/ui/select/SelectItem.vue new file mode 100644 index 0000000..44004c6 --- /dev/null +++ b/playground/src/components/ui/select/SelectItem.vue @@ -0,0 +1,46 @@ + + + diff --git a/playground/src/components/ui/select/SelectItemText.vue b/playground/src/components/ui/select/SelectItemText.vue new file mode 100644 index 0000000..6a1e649 --- /dev/null +++ b/playground/src/components/ui/select/SelectItemText.vue @@ -0,0 +1,11 @@ + + + diff --git a/playground/src/components/ui/select/SelectLabel.vue b/playground/src/components/ui/select/SelectLabel.vue new file mode 100644 index 0000000..48b20ba --- /dev/null +++ b/playground/src/components/ui/select/SelectLabel.vue @@ -0,0 +1,15 @@ + + + diff --git a/playground/src/components/ui/select/SelectScrollDownButton.vue b/playground/src/components/ui/select/SelectScrollDownButton.vue new file mode 100644 index 0000000..55bc32b --- /dev/null +++ b/playground/src/components/ui/select/SelectScrollDownButton.vue @@ -0,0 +1,30 @@ + + + diff --git a/playground/src/components/ui/select/SelectScrollUpButton.vue b/playground/src/components/ui/select/SelectScrollUpButton.vue new file mode 100644 index 0000000..dcb54b4 --- /dev/null +++ b/playground/src/components/ui/select/SelectScrollUpButton.vue @@ -0,0 +1,30 @@ + + + diff --git a/playground/src/components/ui/select/SelectSeparator.vue b/playground/src/components/ui/select/SelectSeparator.vue new file mode 100644 index 0000000..3d34488 --- /dev/null +++ b/playground/src/components/ui/select/SelectSeparator.vue @@ -0,0 +1,19 @@ + + + diff --git a/playground/src/components/ui/select/SelectTrigger.vue b/playground/src/components/ui/select/SelectTrigger.vue new file mode 100644 index 0000000..ea1d805 --- /dev/null +++ b/playground/src/components/ui/select/SelectTrigger.vue @@ -0,0 +1,38 @@ + + + diff --git a/playground/src/components/ui/select/SelectValue.vue b/playground/src/components/ui/select/SelectValue.vue new file mode 100644 index 0000000..47fe941 --- /dev/null +++ b/playground/src/components/ui/select/SelectValue.vue @@ -0,0 +1,11 @@ + + + diff --git a/playground/src/components/ui/select/index.ts b/playground/src/components/ui/select/index.ts new file mode 100644 index 0000000..e22341a --- /dev/null +++ b/playground/src/components/ui/select/index.ts @@ -0,0 +1,11 @@ +export { default as Select } from './Select.vue'; +export { default as SelectValue } from './SelectValue.vue'; +export { default as SelectTrigger } from './SelectTrigger.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 SelectSeparator } from './SelectSeparator.vue'; +export { default as SelectScrollUpButton } from './SelectScrollUpButton.vue'; +export { default as SelectScrollDownButton } from './SelectScrollDownButton.vue'; diff --git a/playground/src/components/ui/sonner/Sonner.vue b/playground/src/components/ui/sonner/Sonner.vue new file mode 100644 index 0000000..546c3f8 --- /dev/null +++ b/playground/src/components/ui/sonner/Sonner.vue @@ -0,0 +1,22 @@ + + + diff --git a/playground/src/components/ui/sonner/index.ts b/playground/src/components/ui/sonner/index.ts new file mode 100644 index 0000000..93765a1 --- /dev/null +++ b/playground/src/components/ui/sonner/index.ts @@ -0,0 +1 @@ +export { default as Toaster } from './Sonner.vue'; diff --git a/playground/src/components/ui/tabs/Tabs.vue b/playground/src/components/ui/tabs/Tabs.vue new file mode 100644 index 0000000..230a380 --- /dev/null +++ b/playground/src/components/ui/tabs/Tabs.vue @@ -0,0 +1,15 @@ + + + diff --git a/playground/src/components/ui/tabs/TabsContent.vue b/playground/src/components/ui/tabs/TabsContent.vue new file mode 100644 index 0000000..81aa272 --- /dev/null +++ b/playground/src/components/ui/tabs/TabsContent.vue @@ -0,0 +1,24 @@ + + + diff --git a/playground/src/components/ui/tabs/TabsList.vue b/playground/src/components/ui/tabs/TabsList.vue new file mode 100644 index 0000000..ea1937b --- /dev/null +++ b/playground/src/components/ui/tabs/TabsList.vue @@ -0,0 +1,27 @@ + + + diff --git a/playground/src/components/ui/tabs/TabsTrigger.vue b/playground/src/components/ui/tabs/TabsTrigger.vue new file mode 100644 index 0000000..5e0491c --- /dev/null +++ b/playground/src/components/ui/tabs/TabsTrigger.vue @@ -0,0 +1,29 @@ + + + diff --git a/playground/src/components/ui/tabs/index.ts b/playground/src/components/ui/tabs/index.ts new file mode 100644 index 0000000..f90d5fe --- /dev/null +++ b/playground/src/components/ui/tabs/index.ts @@ -0,0 +1,4 @@ +export { default as Tabs } from './Tabs.vue'; +export { default as TabsTrigger } from './TabsTrigger.vue'; +export { default as TabsList } from './TabsList.vue'; +export { default as TabsContent } from './TabsContent.vue'; diff --git a/playground/src/lib/utils.ts b/playground/src/lib/utils.ts new file mode 100644 index 0000000..9ad0df4 --- /dev/null +++ b/playground/src/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/playground/src/main.ts b/playground/src/main.ts new file mode 100644 index 0000000..6b108b2 --- /dev/null +++ b/playground/src/main.ts @@ -0,0 +1,6 @@ +import { createApp } from 'vue'; +import App from './App.vue'; + +import './assets/index.css'; + +createApp(App).mount('#app'); diff --git a/playground/tailwind.config.js b/playground/tailwind.config.js new file mode 100644 index 0000000..df2777b --- /dev/null +++ b/playground/tailwind.config.js @@ -0,0 +1,93 @@ +const animate = require('tailwindcss-animate'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ['class'], + safelist: ['dark'], + prefix: '', + + content: [ + './pages/**/*.{ts,tsx,vue}', + './components/**/*.{ts,tsx,vue}', + './app/**/*.{ts,tsx,vue}', + './src/**/*.{ts,tsx,vue}', + ], + + theme: { + container: { + center: true, + padding: '2rem', + screens: { + '2xl': '1400px', + }, + }, + extend: { + colors: { + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))', + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))', + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))', + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))', + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))', + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))', + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))', + }, + }, + borderRadius: { + xl: 'calc(var(--radius) + 4px)', + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)', + }, + keyframes: { + 'accordion-down': { + from: { height: 0 }, + to: { height: 'var(--radix-accordion-content-height)' }, + }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, + to: { height: 0 }, + }, + 'collapsible-down': { + from: { height: 0 }, + to: { height: 'var(--radix-collapsible-content-height)' }, + }, + 'collapsible-up': { + from: { height: 'var(--radix-collapsible-content-height)' }, + to: { height: 0 }, + }, + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + 'collapsible-down': 'collapsible-down 0.2s ease-in-out', + 'collapsible-up': 'collapsible-up 0.2s ease-in-out', + }, + }, + }, + plugins: [animate], +}; diff --git a/playground/tsconfig.app.json b/playground/tsconfig.app.json new file mode 100644 index 0000000..e14c754 --- /dev/null +++ b/playground/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/playground/tsconfig.json b/playground/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/playground/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/playground/tsconfig.node.json b/playground/tsconfig.node.json new file mode 100644 index 0000000..cb71b4b --- /dev/null +++ b/playground/tsconfig.node.json @@ -0,0 +1,23 @@ +{ + "extends": "@tsconfig/node20/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"], + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/playground/vite.config.ts b/playground/vite.config.ts new file mode 100644 index 0000000..3d51459 --- /dev/null +++ b/playground/vite.config.ts @@ -0,0 +1,21 @@ +import vue from '@vitejs/plugin-vue'; +import { defineConfig } from 'vite'; + +import path from 'node:path'; +import autoprefixer from 'autoprefixer'; +import tailwind from 'tailwindcss'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + css: { + postcss: { + plugins: [tailwind(), autoprefixer()], + }, + }, +}); diff --git a/src/index.ts b/src/index.ts index be63cfa..59c2300 100644 --- a/src/index.ts +++ b/src/index.ts @@ -73,7 +73,7 @@ function article(opt: IOption = emptyOpt) { function name(opt: { len?: number } = { len: undefined }) { const len = opt.len ?? (Math.random() < 0.97 ? 3 : 2); - return `${lastName[randInt(lastName.length - 1)]}${getCharacter()}${ - len === 3 ? getCharacter() : '' - }`; + let firstName = ''; + for (let i = 0; i < len - 1; i += 1) firstName += getCharacter(); + return `${lastName[randInt(lastName.length - 1)]}${firstName}`; } diff --git a/test/index.test.ts b/test/index.test.ts index 824cef4..b9874c2 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -33,5 +33,6 @@ describe('name', () => { it('length', () => { expect(cnLorem.name({ len: 3 }).length).toBe(3); expect(cnLorem.name({ len: 2 }).length).toBe(2); + expect(cnLorem.name({ len: 100 }).length).toBe(100); }); });