create-lve 0.6.8 → 0.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -4,7 +4,6 @@ import * as p from '@clack/prompts'
4
4
  import pc from 'picocolors'
5
5
  import fs from 'fs-extra'
6
6
  import path from 'node:path'
7
- import { execSync } from 'node:child_process'
8
7
  import { __dirname, applyProjectTransform, cleanupTemplate, installDependencies } from './config.js'
9
8
 
10
9
  const version = JSON.parse(
@@ -84,20 +83,17 @@ async function main() {
84
83
  options: [
85
84
  { value: 'react', label: 'React 19', hint: '' },
86
85
  { value: 'vue', label: 'Vue 3', hint: '' },
87
- { value: 'next', label: 'Next.js 16', hint: '' },
88
86
  ],
89
87
  }),
90
88
 
91
- cssEngine: ({ results }) =>
92
- results.framework === 'next'
93
- ? (p.note('Next.js 已内置 Tailwind,无需选择'), 'tailwind')
94
- : p.select({
95
- message: '选择 CSS',
96
- options: [
97
- { value: 'tailwind', label: 'Tailwind v4' },
98
- { value: 'unocss', label: 'UnoCSS' },
99
- ],
100
- }),
89
+ cssEngine: () =>
90
+ p.select({
91
+ message: '选择 CSS',
92
+ options: [
93
+ { value: 'tailwind', label: 'Tailwind v4' },
94
+ { value: 'unocss', label: 'UnoCSS' },
95
+ ],
96
+ }),
101
97
  },
102
98
  { onCancel },
103
99
  )
@@ -109,26 +105,23 @@ async function main() {
109
105
  css: project.cssEngine,
110
106
  targetDir: path.resolve(process.cwd(), project.path),
111
107
  templateDir: path.resolve(__dirname, `template-${project.framework}`),
112
- isNext: project.framework === 'next',
113
108
  isUno: project.cssEngine === 'unocss',
114
- pkgManager: project.framework === 'next' ? 'pnpm' : 'vp',
115
- devCmd: project.framework === 'next' ? 'pnpm dev' : 'vp dev',
116
- fmtCmd: project.framework === 'next' ? 'pnpm fmt' : 'vp fmt',
109
+ pkgManager: 'pnpm',
110
+ devCmd: 'pnpm dev',
111
+ fmtCmd: 'vp fmt',
117
112
  }
118
113
 
119
114
  const s = p.spinner()
120
115
 
121
- if (!ctx.isNext) {
122
- try {
123
- execSync('vp --version', { stdio: 'ignore' })
124
- } catch {
125
- p.log.error(pc.red('未检测到 VitePlus (vp) 环境'))
126
- p.note(
127
- pc.white(`React/Vue 模板依赖 vp 工具链:\n${pc.cyan('https://viteplus.dev/guide')}`),
128
- '环境缺失',
129
- )
130
- process.exit(1)
131
- }
116
+ try {
117
+ execSync('vp --version', { stdio: 'ignore' })
118
+ } catch {
119
+ p.log.error(pc.red('未检测到 VitePlus (vp) 环境'))
120
+ p.note(
121
+ pc.white(`React/Vue 模板依赖 vp 工具链:\n${pc.cyan('https://viteplus.dev/guide')}`),
122
+ '环境缺失',
123
+ )
124
+ process.exit(1)
132
125
  }
133
126
 
134
127
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-lve",
3
- "version": "0.6.8",
3
+ "version": "0.6.10",
4
4
  "bin": {
5
5
  "create-lve": "index.js"
6
6
  },
@@ -1,6 +0,0 @@
1
- {
2
- "$schema": "./node_modules/oxfmt/configuration_schema.json",
3
- "ignorePatterns": [],
4
- "semi": false,
5
- "singleQuote": true
6
- }
@@ -1,11 +0,0 @@
1
- {
2
- "$schema": "./node_modules/oxlint/configuration_schema.json",
3
- "plugins": ["typescript", "unicorn", "oxc"],
4
- "categories": {
5
- "correctness": "error"
6
- },
7
- "rules": {},
8
- "env": {
9
- "builtin": true
10
- }
11
- }
@@ -1,75 +0,0 @@
1
- {
2
- // ==================== Formatter (OXC) ====================
3
- "editor.defaultFormatter": "oxc.oxc-vscode",
4
- "editor.formatOnSave": true,
5
- "editor.formatOnSaveMode": "file",
6
- "oxc.enable.oxfmt": true,
7
-
8
- "[javascript]": {
9
- "editor.defaultFormatter": "oxc.oxc-vscode"
10
- },
11
- "[typescript]": {
12
- "editor.defaultFormatter": "oxc.oxc-vscode"
13
- },
14
- "[typescriptreact]": {
15
- "editor.defaultFormatter": "oxc.oxc-vscode"
16
- },
17
- "[javascriptreact]": {
18
- "editor.defaultFormatter": "oxc.oxc-vscode"
19
- },
20
- "[css]": {
21
- "editor.defaultFormatter": "oxc.oxc-vscode"
22
- },
23
- "[tailwindcss]": {
24
- "editor.defaultFormatter": "oxc.oxc-vscode"
25
- },
26
- "[json]": {
27
- "editor.defaultFormatter": "oxc.oxc-vscode"
28
- },
29
- "[jsonc]": {
30
- "editor.defaultFormatter": "oxc.oxc-vscode"
31
- },
32
- "[html]": {
33
- "editor.defaultFormatter": "oxc.oxc-vscode"
34
- },
35
- "[vue]": {
36
- "editor.defaultFormatter": "oxc.oxc-vscode"
37
- },
38
-
39
- // ==================== Next.js ====================
40
- "workbench.editor.customLabels.patterns": {
41
- "**/app/**/layout.{js,jsx,ts,tsx}": "${dirname}/layout",
42
- "**/app/**/page.{js,jsx,ts,tsx}": "${dirname}/page",
43
- "**/app/**/route.{js,jsx,ts,tsx}": "${dirname}/route",
44
- "**/app/**/loading.{js,jsx,ts,tsx}": "${dirname}/loading",
45
- "**/app/**/template.{js,jsx,ts,tsx}": "${dirname}/template",
46
- "**/app/**/default.{js,jsx,ts,tsx}": "${dirname}/default",
47
- "**/app/**/error.{js,jsx,ts,tsx}": "${dirname}/error",
48
- "**/app/**/not-found.{js,jsx,ts,tsx}": "${dirname}/not-found"
49
- },
50
-
51
- // ==================== TypeScript(解决 Next.js TS 问题)===================
52
- "js/ts.tsdk.path": "node_modules/typescript/lib",
53
- "js/ts.tsdk.promptToUseWorkspaceVersion": true,
54
-
55
- // ==================== Tailwind + shadcn/ui(强烈推荐)===================
56
- "tailwindCSS.experimental.classRegex": [["cn\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"]],
57
- "tailwindCSS.includeLanguages": {
58
- "typescript": "html",
59
- "typescriptreact": "html"
60
- },
61
- "editor.quickSuggestions": {
62
- "strings": "on"
63
- },
64
-
65
- // ==================== 其他项目通用 ====================
66
- "git.openRepositoryInParentFolders": "always",
67
- "js/ts.updateImportsOnFileMove.enabled": "always",
68
- "diffEditor.ignoreTrimWhitespace": true,
69
- "diffEditor.hideUnchangedRegions.enabled": true,
70
-
71
- "editor.codeActionsOnSave": {
72
- "source.format.oxc": "always"
73
- },
74
- "editor.inlayHints.enabled": "on"
75
- }
@@ -1,48 +0,0 @@
1
- # ⚡️ ox-next-blank
2
-
3
- 这是一个为 **2026 前端标准**打造的极致极简 Next.js 模板。拒绝冗余,拒绝手动优化,追求工具链的瞬时反馈。
4
-
5
- ## 🚀 核心技术栈
6
-
7
- - **Framework:** [Next.js 16.2](https://nextjs.org/) (App Router)
8
- - **Runtime:** [React 19.2](https://react.dev/) + **React Compiler** (自动 Memoization)
9
- - **Toolchain:** [Oxc](https://oxc.rs/) (Oxlint & Oxfmt) - **比 Prettier/ESLint 快 50~100 倍**
10
- - **Styling:** [Tailwind CSS 4](https://tailwindcss.com/) + **OKLCH** 颜色系统
11
- - **UI Components:** [Base UI](https://base-ui.com/) + [Shadcn UI](https://ui.shadcn.com/)
12
- - **Icons:** [Hugeicons](https://hugeicons.com/) (Free Version) & Lucide
13
-
14
- ## ✨ 特性
15
-
16
- - **Zero-Manual-Memo:** 依靠 React Compiler,彻底告别 `useMemo` 和 `useCallback`,代码回归纯粹逻辑。
17
- - **Instant DX:** 依托 Rust 驱动的 Oxc,保存即格式化,检查即瞬间,再无等待感。
18
- - **Hybrid Dashboard:** 预设 RSC 示例,内置开发环境专用的 `DevBoundary` 高亮(生产环境自动剔除)。
19
- - **Modern Aesthetic:** 极致的“陶瓷白”视觉风格,基于 CSS 变量的动态主题切换。
20
-
21
- ## 🛠 常用命令
22
-
23
- | 命令 | 说明 | 性能表现 (参考) |
24
- | :----------- | :---------------------------- | :-------------- |
25
- | `pnpm dev` | 启动 Next.js 开发服务器 | - |
26
- | `pnpm fmt` | 使用 **oxfmt** 格式化全量代码 | **~80ms** |
27
- | `pnpm lint` | 使用 **oxlint** 执行静态检查 | **~4ms** |
28
- | `pnpm build` | 生产环境构建 | - |
29
-
30
- ## 📁 目录结构
31
-
32
- ```text
33
- .
34
- ├── app/ # Next.js App Router 核心
35
- ├── components/ # UI 组件 (Shadcn + Base UI)
36
- ├── lib/
37
- │ └── utils.ts # 核心工具函数 (cn, twMerge)
38
- ├── next.config.ts # 开启 React Compiler 配置
39
- └── package.json # 基于 Oxc 的极致脚本定义
40
- ```
41
-
42
- ## 📝 开发备忘录
43
-
44
- RSC 可视化: 开发模式下会自动显示 rsc-boundary 高亮,通过 components/DevBoundary 逻辑在 build 时自动安全剥离。
45
-
46
- ## License: MIT
47
-
48
- ## Created by: ieuforu (2026)
@@ -1,41 +0,0 @@
1
- # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
-
3
- # dependencies
4
- /node_modules
5
- /.pnp
6
- .pnp.*
7
- .yarn/*
8
- !.yarn/patches
9
- !.yarn/plugins
10
- !.yarn/releases
11
- !.yarn/versions
12
-
13
- # testing
14
- /coverage
15
-
16
- # next.js
17
- /.next/
18
- /out/
19
-
20
- # production
21
- /build
22
-
23
- # misc
24
- .DS_Store
25
- *.pem
26
-
27
- # debug
28
- npm-debug.log*
29
- yarn-debug.log*
30
- yarn-error.log*
31
- .pnpm-debug.log*
32
-
33
- # env files (can opt-in for committing if needed)
34
- .env*
35
-
36
- # vercel
37
- .vercel
38
-
39
- # typescript
40
- *.tsbuildinfo
41
- next-env.d.ts
Binary file
@@ -1,130 +0,0 @@
1
- @import 'tailwindcss';
2
- @import 'tw-animate-css';
3
- @import 'shadcn/tailwind.css';
4
-
5
- @custom-variant dark (&:is(.dark *));
6
-
7
- @theme inline {
8
- --color-background: var(--background);
9
- --color-foreground: var(--foreground);
10
- --font-sans: var(--font-sans);
11
- --font-mono: var(--font-geist-mono);
12
- --font-heading: var(--font-sans);
13
- --color-sidebar-ring: var(--sidebar-ring);
14
- --color-sidebar-border: var(--sidebar-border);
15
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
16
- --color-sidebar-accent: var(--sidebar-accent);
17
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
18
- --color-sidebar-primary: var(--sidebar-primary);
19
- --color-sidebar-foreground: var(--sidebar-foreground);
20
- --color-sidebar: var(--sidebar);
21
- --color-chart-5: var(--chart-5);
22
- --color-chart-4: var(--chart-4);
23
- --color-chart-3: var(--chart-3);
24
- --color-chart-2: var(--chart-2);
25
- --color-chart-1: var(--chart-1);
26
- --color-ring: var(--ring);
27
- --color-input: var(--input);
28
- --color-border: var(--border);
29
- --color-destructive: var(--destructive);
30
- --color-accent-foreground: var(--accent-foreground);
31
- --color-accent: var(--accent);
32
- --color-muted-foreground: var(--muted-foreground);
33
- --color-muted: var(--muted);
34
- --color-secondary-foreground: var(--secondary-foreground);
35
- --color-secondary: var(--secondary);
36
- --color-primary-foreground: var(--primary-foreground);
37
- --color-primary: var(--primary);
38
- --color-popover-foreground: var(--popover-foreground);
39
- --color-popover: var(--popover);
40
- --color-card-foreground: var(--card-foreground);
41
- --color-card: var(--card);
42
- --radius-sm: calc(var(--radius) * 0.6);
43
- --radius-md: calc(var(--radius) * 0.8);
44
- --radius-lg: var(--radius);
45
- --radius-xl: calc(var(--radius) * 1.4);
46
- --radius-2xl: calc(var(--radius) * 1.8);
47
- --radius-3xl: calc(var(--radius) * 2.2);
48
- --radius-4xl: calc(var(--radius) * 2.6);
49
- }
50
-
51
- :root {
52
- --background: oklch(1 0 0);
53
- --foreground: oklch(0.153 0.006 107.1);
54
- --card: oklch(1 0 0);
55
- --card-foreground: oklch(0.153 0.006 107.1);
56
- --popover: oklch(1 0 0);
57
- --popover-foreground: oklch(0.153 0.006 107.1);
58
- --primary: oklch(0.228 0.013 107.4);
59
- --primary-foreground: oklch(0.988 0.003 106.5);
60
- --secondary: oklch(0.966 0.005 106.5);
61
- --secondary-foreground: oklch(0.228 0.013 107.4);
62
- --muted: oklch(0.966 0.005 106.5);
63
- --muted-foreground: oklch(0.58 0.031 107.3);
64
- --accent: oklch(0.966 0.005 106.5);
65
- --accent-foreground: oklch(0.228 0.013 107.4);
66
- --destructive: oklch(0.577 0.245 27.325);
67
- --border: oklch(0.93 0.007 106.5);
68
- --input: oklch(0.93 0.007 106.5);
69
- --ring: oklch(0.737 0.021 106.9);
70
- --chart-1: oklch(0.809 0.105 251.813);
71
- --chart-2: oklch(0.623 0.214 259.815);
72
- --chart-3: oklch(0.546 0.245 262.881);
73
- --chart-4: oklch(0.488 0.243 264.376);
74
- --chart-5: oklch(0.424 0.199 265.638);
75
- --radius: 0.625rem;
76
- --sidebar: oklch(0.988 0.003 106.5);
77
- --sidebar-foreground: oklch(0.153 0.006 107.1);
78
- --sidebar-primary: oklch(0.228 0.013 107.4);
79
- --sidebar-primary-foreground: oklch(0.988 0.003 106.5);
80
- --sidebar-accent: oklch(0.966 0.005 106.5);
81
- --sidebar-accent-foreground: oklch(0.228 0.013 107.4);
82
- --sidebar-border: oklch(0.93 0.007 106.5);
83
- --sidebar-ring: oklch(0.737 0.021 106.9);
84
- }
85
-
86
- .dark {
87
- --background: oklch(0.153 0.006 107.1);
88
- --foreground: oklch(0.988 0.003 106.5);
89
- --card: oklch(0.228 0.013 107.4);
90
- --card-foreground: oklch(0.988 0.003 106.5);
91
- --popover: oklch(0.228 0.013 107.4);
92
- --popover-foreground: oklch(0.988 0.003 106.5);
93
- --primary: oklch(0.93 0.007 106.5);
94
- --primary-foreground: oklch(0.228 0.013 107.4);
95
- --secondary: oklch(0.286 0.016 107.4);
96
- --secondary-foreground: oklch(0.988 0.003 106.5);
97
- --muted: oklch(0.286 0.016 107.4);
98
- --muted-foreground: oklch(0.737 0.021 106.9);
99
- --accent: oklch(0.286 0.016 107.4);
100
- --accent-foreground: oklch(0.988 0.003 106.5);
101
- --destructive: oklch(0.704 0.191 22.216);
102
- --border: oklch(1 0 0 / 10%);
103
- --input: oklch(1 0 0 / 15%);
104
- --ring: oklch(0.58 0.031 107.3);
105
- --chart-1: oklch(0.809 0.105 251.813);
106
- --chart-2: oklch(0.623 0.214 259.815);
107
- --chart-3: oklch(0.546 0.245 262.881);
108
- --chart-4: oklch(0.488 0.243 264.376);
109
- --chart-5: oklch(0.424 0.199 265.638);
110
- --sidebar: oklch(0.228 0.013 107.4);
111
- --sidebar-foreground: oklch(0.988 0.003 106.5);
112
- --sidebar-primary: oklch(0.488 0.243 264.376);
113
- --sidebar-primary-foreground: oklch(0.988 0.003 106.5);
114
- --sidebar-accent: oklch(0.286 0.016 107.4);
115
- --sidebar-accent-foreground: oklch(0.988 0.003 106.5);
116
- --sidebar-border: oklch(1 0 0 / 10%);
117
- --sidebar-ring: oklch(0.58 0.031 107.3);
118
- }
119
-
120
- @layer base {
121
- * {
122
- @apply border-border outline-ring/50;
123
- }
124
- body {
125
- @apply bg-background text-foreground;
126
- }
127
- html {
128
- @apply font-sans;
129
- }
130
- }
@@ -1,35 +0,0 @@
1
- import type { Metadata } from 'next'
2
- import { Roboto } from 'next/font/google'
3
- import './globals.css'
4
- import { cn } from '@/lib/utils'
5
- import { RscBoundaryProvider } from 'rsc-boundary'
6
-
7
- const roboto = Roboto({ subsets: ['latin'], variable: '--font-sans' })
8
-
9
- export const metadata: Metadata = {
10
- title: 'Next.js App',
11
- description: 'Generated by create next app',
12
- }
13
-
14
- export default function RootLayout({
15
- children,
16
- }: Readonly<{
17
- children: React.ReactNode
18
- }>) {
19
- const isDev = process.env.NODE_ENV === 'development'
20
-
21
- if (!isDev) {
22
- return (
23
- <html lang="en" className={cn('h-full', 'antialiased', 'font-sans', roboto.variable)}>
24
- <body className="min-h-full flex flex-col">{children}</body>
25
- </html>
26
- )
27
- }
28
- return (
29
- <html lang="en" className={cn('h-full', 'antialiased', 'font-sans', roboto.variable)}>
30
- <body className="min-h-full flex flex-col">
31
- <RscBoundaryProvider>{children}</RscBoundaryProvider>
32
- </body>
33
- </html>
34
- )
35
- }
@@ -1,32 +0,0 @@
1
- import { DevBoundary } from '@/components/DevBoundary'
2
- import Counter from '../components/Counter'
3
-
4
- export default function Home() {
5
- const isDev = process.env.NODE_ENV === 'development'
6
-
7
- const content = (
8
- <div className="relative group max-w-lg w-full p-10 rounded-[2.5rem] bg-white border border-slate-100 shadow-[0_12px_40px_rgb(0,0,0,0.03)]">
9
- <div className="relative z-10">
10
- <header className="mb-8">
11
- <span className="inline-flex items-center gap-1.5 px-3 py-1 text-[11px] font-medium bg-slate-100 text-slate-500 rounded-full border border-slate-200">
12
- <span className="w-1.5 h-1.5 rounded-full bg-emerald-500"></span>
13
- Server Side Rendered
14
- </span>
15
- <p className="mt-4 text-slate-600 leading-relaxed max-w-md">
16
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequuntur in inventore
17
- veniam voluptatem repellat quisquam nisi quasi sequi hic officia, soluta quibusdam aut,
18
- molestias unde recusandae, consectetur impedit doloremque aspernatur?
19
- </p>
20
- </header>
21
-
22
- <Counter />
23
- </div>
24
- </div>
25
- )
26
-
27
- return (
28
- <main className="min-h-screen bg-slate-50/50 flex items-center justify-center p-6 antialiased">
29
- {isDev ? <DevBoundary label="Server Boundary Demo">{content}</DevBoundary> : content}
30
- </main>
31
- )
32
- }
@@ -1,37 +0,0 @@
1
- 'use client'
2
-
3
- import { useState } from 'react'
4
- import { Button } from '@/components/ui/button'
5
-
6
- export default function Counter() {
7
- const [count, setCount] = useState(0)
8
-
9
- const onIncrement = () => setCount((prev) => prev + 1)
10
- const onDecrement = () => setCount((prev) => prev - 1)
11
- const onReset = () => setCount(0)
12
-
13
- return (
14
- <div className="p-6 bg-white border border-slate-100 rounded-3xl">
15
- <div className="flex flex-col items-center gap-6">
16
- <h3 className="text-6xl font-black tracking-tighter text-slate-900">{count}</h3>
17
-
18
- <div className="flex gap-3">
19
- <Button disabled={count === 0} onClick={onDecrement} variant="outline" size="lg">
20
- Decrement
21
- </Button>
22
-
23
- <Button onClick={onIncrement} size="lg">
24
- Increment
25
- </Button>
26
- </div>
27
-
28
- <button
29
- onClick={onReset}
30
- className="text-xs font-bold text-slate-400 hover:text-slate-900 transition-colors uppercase tracking-widest"
31
- >
32
- Reset
33
- </button>
34
- </div>
35
- </div>
36
- )
37
- }
@@ -1,14 +0,0 @@
1
- import { RscServerBoundaryMarker } from 'rsc-boundary'
2
-
3
- interface DevBoundaryProps {
4
- children: React.ReactNode
5
- label: string
6
- }
7
-
8
- export function DevBoundary({ children, label }: DevBoundaryProps) {
9
- if (process.env.NODE_ENV !== 'development') {
10
- return <>{children}</>
11
- }
12
-
13
- return <RscServerBoundaryMarker label={label}>{children}</RscServerBoundaryMarker>
14
- }
@@ -1,58 +0,0 @@
1
- import { Button as ButtonPrimitive } from '@base-ui/react/button'
2
- import { cva, type VariantProps } from 'class-variance-authority'
3
-
4
- import { cn } from '@/lib/utils'
5
-
6
- const buttonVariants = cva(
7
- "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
8
- {
9
- variants: {
10
- variant: {
11
- default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',
12
- outline:
13
- 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',
14
- secondary:
15
- 'bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',
16
- ghost:
17
- 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',
18
- destructive:
19
- 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',
20
- link: 'text-primary underline-offset-4 hover:underline',
21
- },
22
- size: {
23
- default:
24
- 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
25
- xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
26
- sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
27
- lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
28
- icon: 'size-8',
29
- 'icon-xs':
30
- "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
31
- 'icon-sm':
32
- 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',
33
- 'icon-lg': 'size-9',
34
- },
35
- },
36
- defaultVariants: {
37
- variant: 'default',
38
- size: 'default',
39
- },
40
- },
41
- )
42
-
43
- function Button({
44
- className,
45
- variant = 'default',
46
- size = 'default',
47
- ...props
48
- }: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {
49
- return (
50
- <ButtonPrimitive
51
- data-slot="button"
52
- className={cn(buttonVariants({ variant, size, className }))}
53
- {...props}
54
- />
55
- )
56
- }
57
-
58
- export { Button, buttonVariants }
@@ -1,25 +0,0 @@
1
- {
2
- "$schema": "https://ui.shadcn.com/schema.json",
3
- "style": "base-nova",
4
- "rsc": true,
5
- "tsx": true,
6
- "tailwind": {
7
- "config": "",
8
- "css": "app/globals.css",
9
- "baseColor": "olive",
10
- "cssVariables": true,
11
- "prefix": ""
12
- },
13
- "iconLibrary": "hugeicons",
14
- "rtl": false,
15
- "aliases": {
16
- "components": "@/components",
17
- "utils": "@/lib/utils",
18
- "ui": "@/components/ui",
19
- "lib": "@/lib",
20
- "hooks": "@/hooks"
21
- },
22
- "menuColor": "default-translucent",
23
- "menuAccent": "subtle",
24
- "registries": {}
25
- }
@@ -1,18 +0,0 @@
1
- import { defineConfig, globalIgnores } from 'eslint/config'
2
- import nextVitals from 'eslint-config-next/core-web-vitals'
3
- import nextTs from 'eslint-config-next/typescript'
4
-
5
- const eslintConfig = defineConfig([
6
- ...nextVitals,
7
- ...nextTs,
8
- // Override default ignores of eslint-config-next.
9
- globalIgnores([
10
- // Default ignores of eslint-config-next:
11
- '.next/**',
12
- 'out/**',
13
- 'build/**',
14
- 'next-env.d.ts',
15
- ]),
16
- ])
17
-
18
- export default eslintConfig
@@ -1,6 +0,0 @@
1
- import { clsx, type ClassValue } from 'clsx'
2
- import { twMerge } from 'tailwind-merge'
3
-
4
- export function cn(...inputs: ClassValue[]) {
5
- return twMerge(clsx(inputs))
6
- }
@@ -1,6 +0,0 @@
1
- /// <reference types="next" />
2
- /// <reference types="next/image-types/global" />
3
- import './.next/types/routes.d.ts'
4
-
5
- // NOTE: This file should not be edited
6
- // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
@@ -1,12 +0,0 @@
1
- import type { NextConfig } from 'next'
2
-
3
- const isDev = process.env.NODE_ENV === 'development'
4
-
5
- const nextConfig: NextConfig = {
6
- reactCompiler: true,
7
- env: {
8
- ENABLE_RSC_VISUALIZER: isDev ? 'true' : 'false',
9
- },
10
- }
11
-
12
- export default nextConfig