chore: update templates (#10786)

* chore: update templates

* fix(cli): parse pnpm workspace packages

* chore(changeset): add shadcn patch

* chore(changeset): update description

* ci(templates): validate bun and npx init

* ci(templates): expand package manager validation

* ci(templates): parallelize validation

* ci(templates): allow yarn template lockfiles

* fix(cli): allow yarn template installs in ci
This commit is contained in:
shadcn
2026-05-27 21:08:26 +04:00
committed by GitHub
parent f584f05489
commit 55ea86f252
93 changed files with 21594 additions and 9559 deletions

View File

@@ -0,0 +1,5 @@
---
"shadcn": patch
---
Update template handling.

275
.github/workflows/templates.yml vendored Normal file
View File

@@ -0,0 +1,275 @@
name: Templates
on:
pull_request:
branches: ["*"]
paths:
- ".github/workflows/templates.yml"
- "apps/v4/registry/**"
- "package.json"
- "packages/shadcn/src/commands/add.ts"
- "packages/shadcn/src/commands/init.ts"
- "packages/shadcn/src/templates/**"
- "packages/shadcn/src/utils/create-project.ts"
- "packages/shadcn/src/utils/get-monorepo-info.ts"
- "packages/shadcn/src/utils/get-package-manager.ts"
- "pnpm-lock.yaml"
- "templates/**"
jobs:
validate:
runs-on: ubuntu-latest
name: ${{ matrix.package-manager }} ${{ matrix.template }}
permissions:
contents: read
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
template: [next, vite, astro, start, react-router]
package-manager: [pnpm, bun, npm, yarn]
env:
NEXT_PUBLIC_APP_URL: http://localhost:4000
NEXT_PUBLIC_V0_URL: https://v0.dev
REGISTRY_URL: http://localhost:4000/r
TEMPLATE_PNPM_VERSION: 10.33.4
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22
- uses: pnpm/action-setup@v4
name: Install pnpm
id: pnpm-install
with:
version: 10.33.4
run_install: false
- name: Install Bun
uses: oven-sh/setup-bun@v2
- name: Install Yarn
if: matrix.package-manager == 'yarn'
run: |
corepack enable
COREPACK_ENABLE_PROJECT_SPEC=0 corepack prepare yarn@4.12.0 --activate
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "pnpm_cache_dir=$(pnpm store path)" >> "$GITHUB_OUTPUT"
- uses: actions/cache@v4
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Build packages
run: |
pnpm --filter=shadcn build
pnpm --filter=v4 registry:build
- name: Validate templates
env:
TEMPLATE: ${{ matrix.template }}
TEMPLATE_PACKAGE_MANAGER: ${{ matrix.package-manager }}
SHADCN_TEMPLATE_DIR: ${{ github.workspace }}/templates
run: |
set -euo pipefail
root_pnpm="$(command -v pnpm)"
validation_script="$RUNNER_TEMP/validate-templates.sh"
cat > "$validation_script" <<'BASH'
set -euo pipefail
bin_dir="$RUNNER_TEMP/template-pnpm-bin"
mkdir -p "$bin_dir"
cat > "$bin_dir/pnpm" <<'PNPM'
#!/usr/bin/env bash
exec npx -y "pnpm@${TEMPLATE_PNPM_VERSION}" "$@"
PNPM
chmod +x "$bin_dir/pnpm"
export PATH="$bin_dir:$PATH"
echo "Using template pnpm $(pnpm --version)"
cli="$GITHUB_WORKSPACE/packages/shadcn/dist/index.js"
template_root="$RUNNER_TEMP/generated-template-${TEMPLATE_PACKAGE_MANAGER}-${TEMPLATE}"
rm -rf "$template_root"
mkdir -p "$template_root"
modes=(app monorepo)
has_script() {
node -e "const pkg = require('./package.json'); process.exit(pkg.scripts && pkg.scripts[process.argv[1]] ? 0 : 1)" "$1"
}
run_script_if_present() {
local script="$1"
if has_script "$script"; then
pnpm run "$script"
else
echo "No $script script found; skipping."
fi
}
validate_non_pnpm_project() {
local package_manager="$1"
local project_path="$2"
local check_workspace_protocol="$3"
cd "$project_path"
test ! -f pnpm-workspace.yaml
test ! -f pnpm-lock.yaml
EXPECTED_PACKAGE_MANAGER="$package_manager" \
CHECK_WORKSPACE_PROTOCOL="$check_workspace_protocol" \
node <<'NODE'
const fs = require("node:fs")
const path = require("node:path")
const expectedPackageManager = process.env.EXPECTED_PACKAGE_MANAGER
const checkWorkspaceProtocol =
process.env.CHECK_WORKSPACE_PROTOCOL === "true"
const pkg = JSON.parse(fs.readFileSync("package.json", "utf8"))
const workspaces = pkg.workspaces ?? []
if (!Array.isArray(workspaces)) {
throw new Error("Expected package.json workspaces to be an array.")
}
if (workspaces.length === 0) {
throw new Error("Expected package.json workspaces to have entries.")
}
for (const workspace of ["sharp", "unrs-resolver", "esbuild"]) {
if (workspaces.includes(workspace)) {
throw new Error(`Unexpected workspace entry: ${workspace}`)
}
}
if (!pkg.packageManager?.startsWith(`${expectedPackageManager}@`)) {
throw new Error(
`Expected packageManager to use ${expectedPackageManager}, got ${pkg.packageManager}`
)
}
if (checkWorkspaceProtocol) {
const packageJsonFiles = []
function collectPackageJsonFiles(dir) {
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
if (entry.name === "node_modules") {
continue
}
const fullPath = path.join(dir, entry.name)
if (entry.isDirectory()) {
collectPackageJsonFiles(fullPath)
} else if (entry.name === "package.json") {
packageJsonFiles.push(fullPath)
}
}
}
collectPackageJsonFiles(process.cwd())
for (const file of packageJsonFiles) {
const json = fs.readFileSync(file, "utf8")
if (json.includes("workspace:")) {
throw new Error(`Unexpected workspace: protocol in ${file}`)
}
}
}
NODE
}
for mode in "${modes[@]}"; do
project="test-${TEMPLATE}-${mode}-${TEMPLATE_PACKAGE_MANAGER}"
project_path="$template_root/$project"
echo "::group::${TEMPLATE} ${mode} ${TEMPLATE_PACKAGE_MANAGER}"
args=(
init
--defaults
--name "$project"
--template "$TEMPLATE"
--cwd "$template_root"
--silent
)
if [ "$mode" = "monorepo" ]; then
args+=(--monorepo)
else
args+=(--no-monorepo)
fi
case "$TEMPLATE_PACKAGE_MANAGER" in
pnpm)
SHADCN_TEMPLATE_DIR="$SHADCN_TEMPLATE_DIR" \
REGISTRY_URL="$REGISTRY_URL" \
npm_config_user_agent="pnpm/${TEMPLATE_PNPM_VERSION}" \
node "$cli" "${args[@]}"
cd "$project_path"
pnpm install --frozen-lockfile
run_script_if_present typecheck
run_script_if_present build
;;
bun)
(
cd "$template_root"
SHADCN_TEMPLATE_DIR="$SHADCN_TEMPLATE_DIR" \
REGISTRY_URL="$REGISTRY_URL" \
npm_config_user_agent="bun/$(bun --version)" \
bunx --bun --package "$GITHUB_WORKSPACE/packages/shadcn" \
shadcn "${args[@]}"
)
validate_non_pnpm_project "bun" "$project_path" "false"
;;
npm)
(
cd "$template_root"
SHADCN_TEMPLATE_DIR="$SHADCN_TEMPLATE_DIR" \
REGISTRY_URL="$REGISTRY_URL" \
npm_config_user_agent="npm/$(npm --version)" \
npx --yes --package "$GITHUB_WORKSPACE/packages/shadcn" \
shadcn "${args[@]}"
)
validate_non_pnpm_project "npm" "$project_path" "true"
;;
yarn)
(
cd "$template_root"
SHADCN_TEMPLATE_DIR="$SHADCN_TEMPLATE_DIR" \
REGISTRY_URL="$REGISTRY_URL" \
COREPACK_ENABLE_PROJECT_SPEC=0 \
npm_config_user_agent="yarn/$(COREPACK_ENABLE_PROJECT_SPEC=0 yarn --version)" \
yarn dlx --package "$GITHUB_WORKSPACE/packages/shadcn" \
shadcn "${args[@]}"
)
validate_non_pnpm_project "yarn" "$project_path" "false"
;;
esac
echo "::endgroup::"
done
BASH
"$root_pnpm" exec start-server-and-test \
"$root_pnpm v4:dev" \
http://localhost:4000 \
"bash $validation_script"

View File

@@ -2,6 +2,7 @@ import os from "os"
import path from "path"
import type { RegistryItem } from "@/src/registry/schema"
import type { Config } from "@/src/utils/get-config"
import { parsePnpmWorkspacePackages } from "@/src/utils/get-monorepo-info"
import { handleError } from "@/src/utils/handle-error"
import { spinner } from "@/src/utils/spinner"
import { execa } from "execa"
@@ -99,6 +100,10 @@ function getInstallArgs(packageManager: string): string[] {
// pnpm enables frozen lockfile in CI by default.
// The template lockfile may drift, so force-disable it explicitly.
return ["--no-frozen-lockfile"]
case "yarn":
// Yarn enables immutable installs in CI by default.
// New template projects need to create their lockfile on first install.
return ["--no-immutable"]
default:
return []
}
@@ -142,13 +147,7 @@ async function adaptWorkspaceConfig(
if (isMonorepo) {
// Read workspace patterns from pnpm-workspace.yaml.
const workspaceContent = await fs.readFile(pnpmWorkspacePath, "utf8")
const patterns: string[] = []
for (const line of workspaceContent.split("\n")) {
const match = line.match(/^\s*-\s*["']?(.+?)["']?\s*$/)
if (match) {
patterns.push(match[1])
}
}
const patterns = parsePnpmWorkspacePackages(workspaceContent)
packageJson.workspaces = patterns
await fs.remove(pnpmWorkspacePath)

View File

@@ -6,6 +6,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"
import {
formatMonorepoMessage,
getMonorepoTargets,
getWorkspacePatterns,
isMonorepoRoot,
} from "./get-monorepo-info"
@@ -68,6 +69,29 @@ describe("isMonorepoRoot", () => {
})
})
describe("getWorkspacePatterns", () => {
it("should read only the packages section from pnpm-workspace.yaml", async () => {
await fs.writeFile(
path.join(tmpDir, "pnpm-workspace.yaml"),
[
"packages:",
" - apps/*",
" - packages/*",
"",
"ignoredBuiltDependencies:",
" - sharp",
" - unrs-resolver",
"",
].join("\n")
)
await expect(getWorkspacePatterns(tmpDir)).resolves.toEqual([
"apps/*",
"packages/*",
])
})
})
describe("getMonorepoTargets", () => {
it("should find targets from pnpm-workspace.yaml", async () => {
// Set up monorepo structure.

View File

@@ -134,13 +134,7 @@ export async function getWorkspacePatterns(cwd: string) {
const pnpmWorkspacePath = path.resolve(cwd, "pnpm-workspace.yaml")
if (fs.existsSync(pnpmWorkspacePath)) {
const content = await fs.readFile(pnpmWorkspacePath, "utf8")
// Simple regex parse to extract patterns from packages list.
const matches = Array.from(
content.matchAll(/^\s*-\s*["']?([^"'\n#]+)["']?\s*$/gm)
)
for (const match of matches) {
patterns.push(match[1].trim())
}
patterns.push(...parsePnpmWorkspacePackages(content))
}
// Read package.json workspaces.
@@ -162,3 +156,37 @@ export async function getWorkspacePatterns(cwd: string) {
return Array.from(new Set(patterns))
}
export function parsePnpmWorkspacePackages(content: string) {
const patterns: string[] = []
let inPackages = false
let packagesIndent = 0
for (const line of content.split("\n")) {
const trimmed = line.trim()
if (!trimmed || trimmed.startsWith("#")) {
continue
}
const keyMatch = line.match(/^(\s*)([A-Za-z0-9_-]+)\s*:/)
if (keyMatch) {
packagesIndent = keyMatch[1].length
inPackages = keyMatch[2] === "packages"
continue
}
if (!inPackages) {
continue
}
const itemMatch = line.match(/^(\s*)-\s*(.+?)\s*(?:#.*)?$/)
if (!itemMatch || itemMatch[1].length <= packagesIndent) {
continue
}
patterns.push(itemMatch[2].trim().replace(/^["']|["']$/g, ""))
}
return patterns
}

View File

@@ -234,6 +234,22 @@ describe("defaultScaffold", () => {
)
})
it("should pass --no-immutable for yarn", async () => {
const template = createTestTemplate()
await template.scaffold({
projectPath: "/test/my-app",
packageManager: "yarn",
cwd: "/test",
})
expect(vi.mocked(execa)).toHaveBeenCalledWith(
"yarn",
["install", "--no-immutable"],
{ cwd: "/test/my-app" }
)
})
it("should strip packageManager field from package.json for non-pnpm non-monorepo", async () => {
vi.mocked(fs.existsSync).mockImplementation((p: any) =>
p.toString().includes("package.json")
@@ -272,7 +288,18 @@ describe("defaultScaffold", () => {
// Return different content based on which file is being read.
vi.mocked(fs.readFile).mockImplementation(((filePath: string) => {
if (filePath.includes("pnpm-workspace.yaml")) {
return Promise.resolve("packages:\n - 'apps/*'\n - 'packages/*'\n")
return Promise.resolve(
[
"packages:",
" - 'apps/*'",
" - 'packages/*'",
"",
"ignoredBuiltDependencies:",
" - sharp",
" - unrs-resolver",
"",
].join("\n")
)
}
return Promise.resolve(
JSON.stringify({ name: "my-mono", packageManager: "pnpm@9.0.0" })

View File

@@ -13,8 +13,7 @@ yarn-error.log*
pnpm-debug.log*
# environment variables
.env
.env.production
.env*
# macOS-specific files
.DS_Store

View File

@@ -16,7 +16,6 @@ export default defineConfig([
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},

View File

@@ -3,6 +3,9 @@
"type": "module",
"version": "0.0.1",
"private": true,
"engines": {
"node": ">=22.12.0"
},
"scripts": {
"dev": "astro dev",
"build": "astro build",
@@ -13,25 +16,26 @@
"typecheck": "astro check"
},
"dependencies": {
"@astrojs/react": "^4.4.2",
"@tailwindcss/vite": "^4.2.1",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"astro": "^5.18.1",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"tailwindcss": "^4.2.1"
"@astrojs/react": "^5",
"@tailwindcss/vite": "^4",
"@types/react": "^19",
"@types/react-dom": "^19",
"astro": "^6",
"react": "^19.2.6",
"react-dom": "^19.2.6",
"tailwindcss": "^4"
},
"devDependencies": {
"@eslint/js": "^9.39.4",
"eslint": "^9.39.4",
"eslint-plugin-react-hooks": "^7.0.1",
"@astrojs/check": "^0.9",
"@eslint/js": "^10",
"eslint": "^10",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^16.5.0",
"prettier": "^3.8.1",
"globals": "^17",
"prettier": "^3.8.3",
"prettier-plugin-astro": "^0.14.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"typescript": "~5.9.3",
"typescript-eslint": "^8.57.1"
"prettier-plugin-tailwindcss": "^0.8.0",
"typescript": "~6",
"typescript-eslint": "^8"
}
}

5308
templates/astro-app/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
packages:
- "."
ignoredBuiltDependencies:
- esbuild

View File

@@ -5,7 +5,6 @@
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "react",
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}

View File

@@ -1,33 +1,29 @@
# Dependencies
node_modules
.pnp
.pnp.js
# build output
dist/
# Local env files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# generated types
.astro/
# Testing
coverage
# dependencies
node_modules/
# Turbo
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# environment variables
.env*
# turbo
.turbo
# Vercel
.vercel
# Build Outputs
dist
# Astro
.astro
# Debug
npm-debug.log*
# Misc
# macOS-specific files
.DS_Store
*.pem
# jetbrains setting folder
.idea/
# typescript
*.tsbuildinfo

View File

@@ -16,7 +16,6 @@ export default defineConfig([
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},

View File

@@ -13,23 +13,24 @@
"typecheck": "astro check"
},
"dependencies": {
"@astrojs/react": "^4.4.2",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@astrojs/react": "^5",
"@types/react": "^19",
"@types/react-dom": "^19",
"@workspace/ui": "workspace:*",
"astro": "^5.17.1",
"react": "^19.2.4",
"react-dom": "^19.2.4"
"astro": "^6",
"react": "^19.2.6",
"react-dom": "^19.2.6"
},
"devDependencies": {
"@eslint/js": "^9.39.2",
"@tailwindcss/vite": "^4.1.18",
"@types/node": "^25.1.0",
"eslint": "^9.39.2",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"globals": "^17.2.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.54.0"
"@astrojs/check": "^0.9",
"@eslint/js": "^10",
"@tailwindcss/vite": "^4",
"@types/node": "^24",
"eslint": "^10",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^17",
"typescript": "~6",
"typescript-eslint": "^8"
}
}

View File

@@ -5,7 +5,6 @@
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "react",
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@workspace/ui/*": ["../../packages/ui/src/*"]

View File

@@ -10,14 +10,14 @@
"typecheck": "turbo typecheck"
},
"devDependencies": {
"prettier": "^3.8.1",
"prettier": "^3.8.3",
"prettier-plugin-astro": "^0.14.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"turbo": "^2.8.17",
"typescript": "5.9.3"
"prettier-plugin-tailwindcss": "^0.8.0",
"turbo": "^2.9.15",
"typescript": "~6"
},
"packageManager": "pnpm@10.33.4",
"engines": {
"node": ">=20"
"node": ">=22.12.0"
}
}

View File

@@ -16,7 +16,6 @@ export default defineConfig([
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},

View File

@@ -9,24 +9,24 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"react": "^19.2.4",
"react-dom": "^19.2.4",
"zod": "^3.25.76"
"react": "^19.2.6",
"react-dom": "^19.2.6",
"zod": "^4.4.3"
},
"devDependencies": {
"@tailwindcss/vite": "^4.1.18",
"@turbo/gen": "^2.8.1",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"@eslint/js": "^9.39.2",
"eslint": "^9.39.2",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"globals": "^17.2.0",
"typescript-eslint": "^8.54.0",
"tailwindcss": "^4.1.18",
"typescript": "^5.9.3"
"@eslint/js": "^10",
"@tailwindcss/vite": "^4",
"@turbo/gen": "^2.9.15",
"@types/node": "^24",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^10",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^17",
"tailwindcss": "^4",
"typescript": "~6",
"typescript-eslint": "^8"
},
"exports": {
"./globals.css": "./src/styles/globals.css",

View File

@@ -8,7 +8,6 @@
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"baseUrl": ".",
"paths": {
"@workspace/ui/*": ["./src/*"]
}

6036
templates/astro-monorepo/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,7 @@
packages:
- "apps/*"
- "packages/*"
ignoredBuiltDependencies:
- esbuild

View File

@@ -28,8 +28,8 @@ yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# env files
.env*.local
# env files (can opt-in for committing if needed)
.env*
# typescript
*.tsbuildinfo

View File

@@ -0,0 +1,5 @@
<!-- BEGIN:nextjs-agent-rules -->
# This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
<!-- END:nextjs-agent-rules -->

View File

@@ -1,4 +0,0 @@
/** @type {import('next').NextConfig} */
const nextConfig = {}
export default nextConfig

View File

@@ -0,0 +1,5 @@
import type { NextConfig } from "next"
const nextConfig: NextConfig = {}
export default nextConfig

View File

@@ -4,7 +4,7 @@
"type": "module",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint",
@@ -12,23 +12,21 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"next": "16.1.7",
"next": "16.2.6",
"next-themes": "^0.4.6",
"react": "^19.2.4",
"react-dom": "^19.2.4"
"react": "19.2.4",
"react-dom": "19.2.4"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
"@tailwindcss/postcss": "^4.2.1",
"@types/node": "^25.5.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"eslint": "^9.39.4",
"eslint-config-next": "16.1.7",
"prettier": "^3.8.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"postcss": "^8",
"tailwindcss": "^4.2.1",
"typescript": "^5.9.3"
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^9",
"eslint-config-next": "16.2.6",
"prettier": "^3.8.3",
"prettier-plugin-tailwindcss": "^0.8.0",
"tailwindcss": "^4",
"typescript": "^5"
}
}

View File

@@ -0,0 +1,6 @@
packages:
- "."
ignoredBuiltDependencies:
- sharp
- unrs-resolver

View File

@@ -1,4 +1,3 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
"@tailwindcss/postcss": {},

View File

@@ -18,15 +18,16 @@
"name": "next"
}
],
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
}
},
"include": [
"next-env.d.ts",
"next.config.ts",
"**/*.ts",
"**/*.tsx",
"**/*.mts",
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],

View File

@@ -1,36 +1,45 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# Dependencies
# dependencies
node_modules
.pnp
.pnp.js
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions
# Local env files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# Testing
# testing
coverage
# Turbo
.turbo
# Vercel
.vercel
# Build Outputs
# next.js
.next/
out/
# production
build
dist
# turbo
.turbo
# Debug
npm-debug.log*
# Misc
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# env files (can opt-in for committing if needed)
.env*
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

View File

@@ -0,0 +1,5 @@
<!-- BEGIN:nextjs-agent-rules -->
# This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
<!-- END:nextjs-agent-rules -->

View File

@@ -1,6 +0,0 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
transpilePackages: ["@workspace/ui"],
}
export default nextConfig

View File

@@ -0,0 +1,7 @@
import type { NextConfig } from "next"
const nextConfig: NextConfig = {
transpilePackages: ["@workspace/ui"],
}
export default nextConfig

View File

@@ -4,7 +4,7 @@
"type": "module",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint",
@@ -13,19 +13,19 @@
},
"dependencies": {
"@workspace/ui": "workspace:*",
"next": "16.1.6",
"next": "16.2.6",
"next-themes": "^0.4.6",
"react": "^19.2.4",
"react-dom": "^19.2.4"
"react": "19.2.4",
"react-dom": "19.2.4"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.18",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@workspace/eslint-config": "workspace:^",
"@workspace/typescript-config": "workspace:*",
"eslint": "^9.39.2",
"typescript": "^5.9.3"
"eslint": "^9",
"typescript": "^5"
}
}

View File

@@ -1,7 +1,6 @@
{
"extends": "@workspace/typescript-config/nextjs.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./*"],
"@workspace/ui/*": ["../../packages/ui/src/*"]
@@ -17,7 +16,9 @@
"next.config.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts"
"**/*.mts",
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],
"exclude": ["node_modules"]
}

View File

@@ -12,10 +12,10 @@
"devDependencies": {
"@workspace/eslint-config": "workspace:*",
"@workspace/typescript-config": "workspace:*",
"prettier": "^3.8.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"turbo": "^2.8.17",
"typescript": "5.9.3"
"prettier": "^3.8.3",
"prettier-plugin-tailwindcss": "^0.8.0",
"turbo": "^2.9.15",
"typescript": "^5"
},
"packageManager": "pnpm@10.33.4",
"engines": {

View File

@@ -9,18 +9,18 @@
"./react-internal": "./react-internal.js"
},
"devDependencies": {
"@eslint/js": "^9.39.2",
"@next/eslint-plugin-next": "^16.1.6",
"@typescript-eslint/eslint-plugin": "^8.54.0",
"@typescript-eslint/parser": "^8.54.0",
"eslint": "^9.39.2",
"@eslint/js": "^9",
"@next/eslint-plugin-next": "^16.2.6",
"@typescript-eslint/eslint-plugin": "^8.60.0",
"@typescript-eslint/parser": "^8.60.0",
"eslint": "^9",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-only-warn": "^1.1.0",
"eslint-plugin-only-warn": "^1.2.1",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-turbo": "^2.8.1",
"globals": "^17.2.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.54.0"
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-turbo": "^2.9.15",
"globals": "^17.6.0",
"typescript": "^5",
"typescript-eslint": "^8.60.0"
}
}

View File

@@ -3,6 +3,6 @@
"display": "React Library",
"extends": "./base.json",
"compilerOptions": {
"jsx": "react-jsx",
"jsx": "react-jsx"
}
}

View File

@@ -10,21 +10,21 @@
},
"dependencies": {
"next-themes": "^0.4.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"zod": "^3.25.76"
"react": "19.2.4",
"react-dom": "19.2.4",
"zod": "^4.4.3"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.18",
"@turbo/gen": "^2.8.1",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"@tailwindcss/postcss": "^4",
"@turbo/gen": "^2.9.15",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@workspace/eslint-config": "workspace:*",
"@workspace/typescript-config": "workspace:*",
"eslint": "^9.39.2",
"tailwindcss": "^4.1.18",
"typescript": "^5.9.3"
"eslint": "^9",
"tailwindcss": "^4",
"typescript": "^5"
},
"exports": {
"./globals.css": "./src/styles/globals.css",

View File

@@ -1,7 +1,6 @@
{
"extends": "@workspace/typescript-config/react-library.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@workspace/ui/*": ["./src/*"]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,8 @@
packages:
- "apps/*"
- "packages/*"
ignoredBuiltDependencies:
- sharp
- unrs-resolver

View File

@@ -1,7 +1,10 @@
.DS_Store
.env
/node_modules/
.env*
node_modules
# React Router
/.react-router/
/build/
.react-router
build
# typescript
*.tsbuildinfo

View File

@@ -10,24 +10,23 @@
"format": "prettier --write \"**/*.{ts,tsx}\""
},
"dependencies": {
"@react-router/node": "7.13.1",
"@react-router/serve": "7.13.1",
"isbot": "^5.1.36",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-router": "7.13.1"
"@react-router/node": "7.15.1",
"@react-router/serve": "7.15.1",
"isbot": "^5",
"react": "^19.2.6",
"react-dom": "^19.2.6",
"react-router": "7.15.1"
},
"devDependencies": {
"@react-router/dev": "7.13.1",
"@tailwindcss/vite": "^4.2.1",
"@react-router/dev": "7.15.1",
"@tailwindcss/vite": "^4",
"@types/node": "^22",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"prettier": "^3.8.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"tailwindcss": "^4.2.1",
"typescript": "^5.9.3",
"vite": "^7.3.1",
"vite-tsconfig-paths": "^5.1.4"
"@types/react": "^19",
"@types/react-dom": "^19",
"prettier": "^3.8.3",
"prettier-plugin-tailwindcss": "^0.8.0",
"tailwindcss": "^4",
"typescript": "^6",
"vite": "^8"
}
}

2902
templates/react-router-app/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
packages:
- "."
ignoredBuiltDependencies:
- esbuild

View File

@@ -13,7 +13,6 @@
"moduleResolution": "bundler",
"jsx": "react-jsx",
"rootDirs": [".", "./.react-router/types"],
"baseUrl": ".",
"paths": {
"~/*": ["./app/*"]
},

View File

@@ -1,8 +1,8 @@
import { reactRouter } from "@react-router/dev/vite"
import tailwindcss from "@tailwindcss/vite"
import { defineConfig } from "vite"
import tsconfigPaths from "vite-tsconfig-paths"
export default defineConfig({
plugins: [tailwindcss(), reactRouter(), tsconfigPaths()],
resolve: { tsconfigPaths: true },
plugins: [tailwindcss(), reactRouter()],
})

View File

@@ -1,34 +1,21 @@
# Dependencies
.DS_Store
.env*
node_modules
.pnp
.pnp.js
# Local env files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# Testing
coverage
# Turbo
# turbo
.turbo
# Vercel
.vercel
# Build Outputs
# React Router
.react-router
build
dist
# React Router
.react-router/
# typescript
*.tsbuildinfo
# Debug
npm-debug.log*
# Misc
.DS_Store
# misc
*.pem
# debug
npm-debug.log*
pnpm-debug.log*

View File

@@ -11,24 +11,22 @@
"typecheck": "react-router typegen && tsc"
},
"dependencies": {
"@react-router/node": "7.12.0",
"@react-router/serve": "7.12.0",
"@remixicon/react": "^4.9.0",
"@react-router/node": "7.15.1",
"@react-router/serve": "7.15.1",
"@workspace/ui": "workspace:*",
"isbot": "^5.1.31",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-router": "7.12.0"
"isbot": "^5",
"react": "^19.2.6",
"react-dom": "^19.2.6",
"react-router": "7.15.1"
},
"devDependencies": {
"@react-router/dev": "7.12.0",
"@tailwindcss/vite": "^4.1.18",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"tailwindcss": "^4.1.18",
"typescript": "^5.9.3",
"vite": "^7.3.2",
"vite-tsconfig-paths": "^5.1.4"
"@react-router/dev": "7.15.1",
"@tailwindcss/vite": "^4",
"@types/node": "^22",
"@types/react": "^19",
"@types/react-dom": "^19",
"tailwindcss": "^4",
"typescript": "^6",
"vite": "^8"
}
}

View File

@@ -13,7 +13,6 @@
"moduleResolution": "bundler",
"jsx": "react-jsx",
"rootDirs": [".", "./.react-router/types"],
"baseUrl": ".",
"paths": {
"@/*": ["./app/*"],
"@workspace/ui/*": ["../../packages/ui/src/*"]

View File

@@ -1,8 +1,8 @@
import { reactRouter } from "@react-router/dev/vite"
import tailwindcss from "@tailwindcss/vite"
import { defineConfig } from "vite"
import tsconfigPaths from "vite-tsconfig-paths"
export default defineConfig({
plugins: [tailwindcss(), reactRouter(), tsconfigPaths()],
resolve: { tsconfigPaths: true },
plugins: [tailwindcss(), reactRouter()],
})

View File

@@ -9,10 +9,10 @@
"typecheck": "turbo typecheck"
},
"devDependencies": {
"prettier": "^3.8.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"turbo": "^2.8.17",
"typescript": "5.9.3"
"prettier": "^3.8.3",
"prettier-plugin-tailwindcss": "^0.8.0",
"turbo": "^2.9.15",
"typescript": "^6"
},
"packageManager": "pnpm@10.33.4",
"engines": {

View File

@@ -13,21 +13,21 @@
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"radix-ui": "^1.4.3",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"shadcn": "^3.8.5",
"tailwind-merge": "^3.5.0",
"react": "^19.2.6",
"react-dom": "^19.2.6",
"shadcn": "^4.8.1",
"tailwind-merge": "^3.6.0",
"tw-animate-css": "^1.4.0",
"zod": "^3.25.76"
"zod": "^4.4.3"
},
"devDependencies": {
"@tailwindcss/vite": "^4.1.18",
"@turbo/gen": "^2.8.1",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"tailwindcss": "^4.1.18",
"typescript": "^5.9.3"
"@tailwindcss/vite": "^4",
"@turbo/gen": "^2.9.15",
"@types/node": "^22",
"@types/react": "^19",
"@types/react-dom": "^19",
"tailwindcss": "^4",
"typescript": "^6"
},
"exports": {
"./globals.css": "./src/styles/globals.css",

View File

@@ -8,7 +8,6 @@
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"baseUrl": ".",
"paths": {
"@workspace/ui/*": ["./src/*"]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,7 @@
packages:
- "apps/*"
- "packages/*"
ignoredBuiltDependencies:
- esbuild

View File

@@ -2,15 +2,15 @@
"projectName": "start-app",
"mode": "file-router",
"typescript": true,
"tailwind": true,
"packageManager": "pnpm",
"includeExamples": false,
"tailwind": true,
"addOnOptions": {},
"envVarValues": {},
"git": true,
"install": true,
"routerOnly": false,
"version": 1,
"framework": "react-cra",
"chosenAddOns": [
"eslint",
"nitro",
"start"
]
"framework": "react",
"chosenAddOns": ["eslint"]
}

View File

@@ -3,12 +3,13 @@ node_modules
dist
dist-ssr
*.local
count.txt
.env
.nitro
.env*
.tanstack
.wrangler
.output
.vinxi
__unconfig*
todos.json
# typescript
*.tsbuildinfo

View File

@@ -2,4 +2,19 @@
import { tanstackConfig } from "@tanstack/eslint-config"
export default [...tanstackConfig]
export default [
...tanstackConfig,
{
rules: {
"import/no-cycle": "off",
"import/order": "off",
"sort-imports": "off",
"@typescript-eslint/array-type": "off",
"@typescript-eslint/require-await": "off",
"pnpm/json-enforce-catalog": "off",
},
},
{
ignores: ["eslint.config.js", ".prettierrc"],
},
]

View File

@@ -9,37 +9,36 @@
"test": "vitest run",
"lint": "eslint",
"format": "prettier --write \"**/*.{ts,tsx,js,jsx}\"",
"check": "prettier --check \"**/*.{ts,tsx,js,jsx}\"",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@tailwindcss/vite": "^4.2.1",
"@tanstack/react-devtools": "^0.10.0",
"@tanstack/react-router": "^1.167.4",
"@tanstack/react-router-devtools": "^1.166.9",
"@tanstack/react-router-ssr-query": "^1.166.9",
"@tanstack/react-start": "^1.166.15",
"@tanstack/router-plugin": "^1.166.13",
"nitro": "latest",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"tailwindcss": "^4.2.1",
"vite-tsconfig-paths": "^5.1.4"
"@tailwindcss/vite": "^4",
"@tanstack/react-devtools": "latest",
"@tanstack/react-router": "latest",
"@tanstack/react-router-devtools": "latest",
"@tanstack/react-router-ssr-query": "latest",
"@tanstack/react-start": "latest",
"@tanstack/router-plugin": "latest",
"react": "^19.2.6",
"react-dom": "^19.2.6",
"tailwindcss": "^4"
},
"devDependencies": {
"@tanstack/devtools-vite": "^0.6.0",
"@tanstack/eslint-config": "^0.4.0",
"@tanstack/devtools-vite": "latest",
"@tanstack/eslint-config": "latest",
"@testing-library/dom": "^10.4.1",
"@testing-library/react": "^16.3.2",
"@types/node": "^22.19.15",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.2.0",
"jsdom": "^27.4.0",
"prettier": "^3.8.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"typescript": "^5.9.3",
"vite": "^7.3.1",
"vitest": "^3.2.4",
"web-vitals": "^5.1.0"
"@types/node": "^22",
"@types/react": "^19",
"@types/react-dom": "^19",
"@vitejs/plugin-react": "^6",
"eslint": "^9",
"jsdom": "^28",
"prettier": "^3.8.3",
"prettier-plugin-tailwindcss": "^0.8.0",
"typescript": "^6",
"vite": "^8",
"vitest": "^4"
}
}

View File

@@ -0,0 +1,6 @@
packages:
- "."
onlyBuiltDependencies:
- esbuild
- lightningcss

View File

@@ -1,12 +1,20 @@
{
"include": ["**/*.ts", "**/*.tsx", "eslint.config.js", "prettier.config.js", "vite.config.js"],
"include": [
"**/*.ts",
"**/*.tsx",
"eslint.config.js",
"prettier.config.js",
"vite.config.ts"
],
"compilerOptions": {
"target": "ES2022",
"jsx": "react-jsx",
"module": "ESNext",
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"types": ["vite/client"],
"paths": {
"@/*": ["./src/*"]
},
/* Bundler mode */
"moduleResolution": "bundler",
@@ -20,11 +28,6 @@
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true,
"allowJs": true,
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
"noUncheckedSideEffectImports": true
}
}

View File

@@ -2,22 +2,11 @@ import { defineConfig } from "vite"
import { devtools } from "@tanstack/devtools-vite"
import { tanstackStart } from "@tanstack/react-start/plugin/vite"
import viteReact from "@vitejs/plugin-react"
import viteTsConfigPaths from "vite-tsconfig-paths"
import tailwindcss from "@tailwindcss/vite"
import { nitro } from "nitro/vite"
const config = defineConfig({
plugins: [
devtools(),
nitro(),
// this is the plugin that enables path aliases
viteTsConfigPaths({
projects: ["./tsconfig.json"],
}),
tailwindcss(),
tanstackStart(),
viteReact(),
],
resolve: { tsconfigPaths: true },
plugins: [devtools(), tailwindcss(), tanstackStart(), viteReact()],
})
export default config

View File

@@ -1,34 +1,18 @@
# Dependencies
node_modules
.pnp
.pnp.js
.DS_Store
dist
dist-ssr
*.local
.env*
.tanstack
.wrangler
.output
.vinxi
__unconfig*
todos.json
# Local env files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# Testing
coverage
# Turbo
# turbo
.turbo
# Vercel
.vercel
# Build Outputs
dist
.output
.nitro
.tanstack
.vinxi
# Debug
npm-debug.log*
# Misc
.DS_Store
*.pem
# typescript
*.tsbuildinfo

View File

@@ -2,4 +2,19 @@
import { tanstackConfig } from "@tanstack/eslint-config"
export default [...tanstackConfig]
export default [
...tanstackConfig,
{
rules: {
"import/no-cycle": "off",
"import/order": "off",
"sort-imports": "off",
"@typescript-eslint/array-type": "off",
"@typescript-eslint/require-await": "off",
"pnpm/json-enforce-catalog": "off",
},
},
{
ignores: ["eslint.config.js", ".prettierrc"],
},
]

View File

@@ -12,25 +12,26 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@tailwindcss/vite": "^4.1.18",
"@tanstack/react-router": "^1.132.0",
"@tanstack/react-start": "^1.132.0",
"@tanstack/router-plugin": "^1.132.0",
"@tailwindcss/vite": "^4",
"@tanstack/react-devtools": "latest",
"@tanstack/react-router": "latest",
"@tanstack/react-router-devtools": "latest",
"@tanstack/react-start": "latest",
"@tanstack/router-plugin": "latest",
"@workspace/ui": "workspace:*",
"nitro": "latest",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"tailwindcss": "^4.1.18",
"vite-tsconfig-paths": "^5.1.4"
"react": "^19.2.6",
"react-dom": "^19.2.6",
"tailwindcss": "^4"
},
"devDependencies": {
"@tanstack/eslint-config": "^0.3.0",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.1",
"eslint": "^9.39.2",
"typescript": "^5.9.3",
"vite": "^7.3.2"
"@tanstack/devtools-vite": "latest",
"@tanstack/eslint-config": "latest",
"@types/node": "^22",
"@types/react": "^19",
"@types/react-dom": "^19",
"@vitejs/plugin-react": "^6",
"eslint": "^9",
"typescript": "^6",
"vite": "^8"
}
}

View File

@@ -1,11 +1,21 @@
{
"include": ["**/*.ts", "**/*.tsx", "eslint.config.js", "prettier.config.js", "vite.config.js"],
"include": [
"**/*.ts",
"**/*.tsx",
"eslint.config.js",
"prettier.config.js",
"vite.config.ts"
],
"compilerOptions": {
"target": "ES2022",
"jsx": "react-jsx",
"module": "ESNext",
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"types": ["vite/client"],
"paths": {
"@/*": ["./src/*"],
"@workspace/ui/*": ["../../packages/ui/src/*"]
},
/* Bundler mode */
"moduleResolution": "bundler",
@@ -19,12 +29,6 @@
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true,
"allowJs": true,
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@workspace/ui/*": ["../../packages/ui/src/*"]
}
"noUncheckedSideEffectImports": true
}
}

View File

@@ -1,20 +1,12 @@
import { defineConfig } from "vite"
import { devtools } from "@tanstack/devtools-vite"
import { tanstackStart } from "@tanstack/react-start/plugin/vite"
import viteReact from "@vitejs/plugin-react"
import viteTsConfigPaths from "vite-tsconfig-paths"
import tailwindcss from "@tailwindcss/vite"
import { nitro } from "nitro/vite"
const config = defineConfig({
plugins: [
nitro(),
viteTsConfigPaths({
projects: ["./tsconfig.json"],
}),
tailwindcss(),
tanstackStart(),
viteReact(),
],
resolve: { tsconfigPaths: true },
plugins: [devtools(), tailwindcss(), tanstackStart(), viteReact()],
})
export default config

View File

@@ -10,13 +10,16 @@
"typecheck": "turbo typecheck"
},
"devDependencies": {
"prettier": "^3.8.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"turbo": "^2.8.17",
"typescript": "5.9.3"
"prettier": "^3.8.3",
"prettier-plugin-tailwindcss": "^0.8.0",
"turbo": "^2.9.15",
"typescript": "^6"
},
"packageManager": "pnpm@10.33.4",
"engines": {
"node": ">=20"
},
"pnpm": {
"onlyBuiltDependencies": ["esbuild", "lightningcss"]
}
}

View File

@@ -0,0 +1,20 @@
// @ts-check
import { tanstackConfig } from "@tanstack/eslint-config"
export default [
...tanstackConfig,
{
rules: {
"import/no-cycle": "off",
"import/order": "off",
"sort-imports": "off",
"@typescript-eslint/array-type": "off",
"@typescript-eslint/require-await": "off",
"pnpm/json-enforce-catalog": "off",
},
},
{
ignores: ["eslint.config.js", ".prettierrc"],
},
]

View File

@@ -9,20 +9,20 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"react": "^19.2.4",
"react-dom": "^19.2.4",
"zod": "^3.25.76"
"react": "^19.2.6",
"react-dom": "^19.2.6",
"zod": "^4.4.3"
},
"devDependencies": {
"@tailwindcss/vite": "^4.1.18",
"@turbo/gen": "^2.8.1",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"@tanstack/eslint-config": "^0.3.0",
"eslint": "^9.39.2",
"tailwindcss": "^4.1.18",
"typescript": "^5.9.3"
"@tailwindcss/vite": "^4",
"@tanstack/eslint-config": "latest",
"@turbo/gen": "^2.9.15",
"@types/node": "^22",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^9",
"tailwindcss": "^4",
"typescript": "^6"
},
"exports": {
"./globals.css": "./src/styles/globals.css",

View File

@@ -8,7 +8,6 @@
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"baseUrl": ".",
"paths": {
"@workspace/ui/*": ["./src/*"]
}

File diff suppressed because it is too large Load Diff

View File

@@ -16,7 +16,6 @@ export default defineConfig([
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},

View File

@@ -12,25 +12,25 @@
"preview": "vite preview"
},
"dependencies": {
"@tailwindcss/vite": "^4.2.1",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"tailwindcss": "^4.2.1"
"@tailwindcss/vite": "^4",
"react": "^19.2.6",
"react-dom": "^19.2.6",
"tailwindcss": "^4"
},
"devDependencies": {
"@eslint/js": "^9.39.4",
"@types/node": "^24.12.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.2.0",
"eslint": "^9.39.4",
"eslint-plugin-react-hooks": "^7.0.1",
"@eslint/js": "^10",
"@types/node": "^24",
"@types/react": "^19",
"@types/react-dom": "^19",
"@vitejs/plugin-react": "^6",
"eslint": "^10",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^16.5.0",
"prettier": "^3.8.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"typescript": "~5.9.3",
"typescript-eslint": "^8.57.1",
"vite": "^7.3.1"
"globals": "^17",
"prettier": "^3.8.3",
"prettier-plugin-tailwindcss": "^0.8.0",
"typescript": "~6",
"typescript-eslint": "^8",
"vite": "^8"
}
}

View File

@@ -0,0 +1,5 @@
packages:
- "."
ignoredBuiltDependencies:
- esbuild

View File

@@ -1,10 +1,9 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2022",
"useDefineForClassFields": true,
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"module": "ESNext",
"target": "es2023",
"lib": ["ES2023", "DOM"],
"module": "esnext",
"types": ["vite/client"],
"skipLibCheck": true,
@@ -22,8 +21,6 @@
"noUnusedParameters": true,
"erasableSyntaxOnly": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true,
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}

View File

@@ -5,7 +5,6 @@
{ "path": "./tsconfig.node.json" }
],
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}

View File

@@ -1,9 +1,9 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"target": "ES2023",
"target": "es2023",
"lib": ["ES2023"],
"module": "ESNext",
"module": "esnext",
"types": ["node"],
"skipLibCheck": true,
@@ -15,12 +15,10 @@
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"erasableSyntaxOnly": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
"noFallthroughCasesInSwitch": true
},
"include": ["vite.config.ts"]
}

View File

@@ -1,30 +1,33 @@
# Dependencies
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
lerna-debug.log*
node_modules
.pnp
.pnp.js
dist
dist-ssr
*.local
# Local env files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# env files (can opt-in for committing if needed)
.env*
# Testing
coverage
# Turbo
# turbo
.turbo
# Vercel
.vercel
# Build Outputs
dist
# Debug
npm-debug.log*
# Misc
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.pem
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# typescript
*.tsbuildinfo

View File

@@ -16,7 +16,6 @@ export default defineConfig([
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},

View File

@@ -13,22 +13,22 @@
},
"dependencies": {
"@workspace/ui": "workspace:*",
"react": "^19.2.4",
"react-dom": "^19.2.4"
"react": "^19.2.6",
"react-dom": "^19.2.6"
},
"devDependencies": {
"@tailwindcss/vite": "^4.1.18",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.1",
"@eslint/js": "^9.39.2",
"eslint": "^9.39.2",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"globals": "^17.2.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.54.0",
"vite": "^7.3.2"
"@eslint/js": "^10",
"@tailwindcss/vite": "^4",
"@types/node": "^24",
"@types/react": "^19",
"@types/react-dom": "^19",
"@vitejs/plugin-react": "^6",
"eslint": "^10",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^17",
"typescript": "~6",
"typescript-eslint": "^8",
"vite": "^8"
}
}

View File

@@ -1,10 +1,9 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2022",
"useDefineForClassFields": true,
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"module": "ESNext",
"target": "es2023",
"lib": ["ES2023", "DOM"],
"module": "esnext",
"types": ["vite/client"],
"skipLibCheck": true,
@@ -22,8 +21,6 @@
"noUnusedParameters": true,
"erasableSyntaxOnly": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true,
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@workspace/ui/*": ["../../packages/ui/src/*"]

View File

@@ -5,7 +5,6 @@
{ "path": "./tsconfig.node.json" }
],
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@workspace/ui/*": ["../../packages/ui/src/*"]

View File

@@ -1,9 +1,9 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"target": "ES2023",
"target": "es2023",
"lib": ["ES2023"],
"module": "ESNext",
"module": "esnext",
"types": ["node"],
"skipLibCheck": true,
@@ -15,12 +15,10 @@
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"erasableSyntaxOnly": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
"noFallthroughCasesInSwitch": true
},
"include": ["vite.config.ts"]
}

View File

@@ -10,10 +10,10 @@
"typecheck": "turbo typecheck"
},
"devDependencies": {
"prettier": "^3.8.1",
"prettier-plugin-tailwindcss": "^0.7.2",
"turbo": "^2.8.17",
"typescript": "5.9.3"
"prettier": "^3.8.3",
"prettier-plugin-tailwindcss": "^0.8.0",
"turbo": "^2.9.15",
"typescript": "~6"
},
"packageManager": "pnpm@10.33.4",
"engines": {

View File

@@ -16,7 +16,6 @@ export default defineConfig([
reactRefresh.configs.vite,
],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},

View File

@@ -9,24 +9,24 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"react": "^19.2.4",
"react-dom": "^19.2.4",
"zod": "^3.25.76"
"react": "^19.2.6",
"react-dom": "^19.2.6",
"zod": "^4.4.3"
},
"devDependencies": {
"@tailwindcss/vite": "^4.1.18",
"@turbo/gen": "^2.8.1",
"@types/node": "^25.1.0",
"@types/react": "^19.2.10",
"@types/react-dom": "^19.2.3",
"@eslint/js": "^9.39.2",
"eslint": "^9.39.2",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.4.24",
"globals": "^17.2.0",
"typescript-eslint": "^8.54.0",
"tailwindcss": "^4.1.18",
"typescript": "^5.9.3"
"@eslint/js": "^10",
"@tailwindcss/vite": "^4",
"@turbo/gen": "^2.9.15",
"@types/node": "^24",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^10",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^17",
"tailwindcss": "^4",
"typescript": "~6",
"typescript-eslint": "^8"
},
"exports": {
"./globals.css": "./src/styles/globals.css",

View File

@@ -8,7 +8,6 @@
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"baseUrl": ".",
"paths": {
"@workspace/ui/*": ["./src/*"]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,7 @@
packages:
- "apps/*"
- "packages/*"
ignoredBuiltDependencies:
- esbuild