From 2060ffe1841e82d54ac82bfa5c1f6fc494d93d8e Mon Sep 17 00:00:00 2001 From: ngc2207 Date: Tue, 7 Jan 2025 02:17:20 +0800 Subject: [PATCH] chore: initialize code-editor with Vite, Tailwind CSS, and shadcn-ui configuration --- code-editor/.gitignore | 24 ++++++++++++ code-editor/README.md | 1 + code-editor/bun.lockb | Bin 0 -> 118263 bytes code-editor/components.json | 21 +++++++++++ code-editor/eslint.config.js | 28 ++++++++++++++ code-editor/index.html | 13 +++++++ code-editor/package.json | 38 +++++++++++++++++++ code-editor/postcss.config.js | 6 +++ code-editor/public/logo.svg | 1 + code-editor/src/App.tsx | 5 +++ code-editor/src/index.css | 66 +++++++++++++++++++++++++++++++++ code-editor/src/lib/utils.ts | 6 +++ code-editor/src/main.tsx | 10 +++++ code-editor/src/vite-env.d.ts | 1 + code-editor/tailwind.config.js | 57 ++++++++++++++++++++++++++++ code-editor/tsconfig.app.json | 31 ++++++++++++++++ code-editor/tsconfig.json | 13 +++++++ code-editor/tsconfig.node.json | 24 ++++++++++++ code-editor/vite.config.ts | 12 ++++++ 19 files changed, 357 insertions(+) create mode 100644 code-editor/.gitignore create mode 100644 code-editor/README.md create mode 100755 code-editor/bun.lockb create mode 100644 code-editor/components.json create mode 100644 code-editor/eslint.config.js create mode 100644 code-editor/index.html create mode 100644 code-editor/package.json create mode 100644 code-editor/postcss.config.js create mode 100644 code-editor/public/logo.svg create mode 100644 code-editor/src/App.tsx create mode 100644 code-editor/src/index.css create mode 100644 code-editor/src/lib/utils.ts create mode 100644 code-editor/src/main.tsx create mode 100644 code-editor/src/vite-env.d.ts create mode 100644 code-editor/tailwind.config.js create mode 100644 code-editor/tsconfig.app.json create mode 100644 code-editor/tsconfig.json create mode 100644 code-editor/tsconfig.node.json create mode 100644 code-editor/vite.config.ts diff --git a/code-editor/.gitignore b/code-editor/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/code-editor/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/code-editor/README.md b/code-editor/README.md new file mode 100644 index 0000000..9fd05a5 --- /dev/null +++ b/code-editor/README.md @@ -0,0 +1 @@ +# Code Editor diff --git a/code-editor/bun.lockb b/code-editor/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..a2f63c713ffa2cc63ba9e46a4a8b80ee51654de7 GIT binary patch literal 118263 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 literal 0 HcmV?d00001 diff --git a/code-editor/components.json b/code-editor/components.json new file mode 100644 index 0000000..51d59d2 --- /dev/null +++ b/code-editor/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/code-editor/eslint.config.js b/code-editor/eslint.config.js new file mode 100644 index 0000000..745c76e --- /dev/null +++ b/code-editor/eslint.config.js @@ -0,0 +1,28 @@ +import js from "@eslint/js"; +import globals from "globals"; +import tseslint from "typescript-eslint"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; + +export default tseslint.config( + { ignores: ["dist"] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "react-refresh/only-export-components": [ + "warn", + { allowConstantExport: true }, + ], + }, + } +); diff --git a/code-editor/index.html b/code-editor/index.html new file mode 100644 index 0000000..20b0844 --- /dev/null +++ b/code-editor/index.html @@ -0,0 +1,13 @@ + + + + + + + Code Editor + + +
+ + + diff --git a/code-editor/package.json b/code-editor/package.json new file mode 100644 index 0000000..ace5b1f --- /dev/null +++ b/code-editor/package.json @@ -0,0 +1,38 @@ +{ + "name": "code-editor", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.469.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@eslint/js": "^9.17.0", + "@types/node": "^22.10.5", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "eslint": "^9.17.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.16", + "globals": "^15.14.0", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.17", + "typescript": "~5.6.2", + "typescript-eslint": "^8.18.2", + "vite": "^6.0.5" + } +} \ No newline at end of file diff --git a/code-editor/postcss.config.js b/code-editor/postcss.config.js new file mode 100644 index 0000000..2aa7205 --- /dev/null +++ b/code-editor/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/code-editor/public/logo.svg b/code-editor/public/logo.svg new file mode 100644 index 0000000..d2b857e --- /dev/null +++ b/code-editor/public/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/code-editor/src/App.tsx b/code-editor/src/App.tsx new file mode 100644 index 0000000..b56b979 --- /dev/null +++ b/code-editor/src/App.tsx @@ -0,0 +1,5 @@ +function App() { + return null; +} + +export default App; diff --git a/code-editor/src/index.css b/code-editor/src/index.css new file mode 100644 index 0000000..d906525 --- /dev/null +++ b/code-editor/src/index.css @@ -0,0 +1,66 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 240 10% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + } + .dark { + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 240 5.9% 10%; + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --ring: 240 4.9% 83.9%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/code-editor/src/lib/utils.ts b/code-editor/src/lib/utils.ts new file mode 100644 index 0000000..7fda296 --- /dev/null +++ b/code-editor/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { twMerge } from "tailwind-merge"; +import { clsx, type ClassValue } from "clsx"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/code-editor/src/main.tsx b/code-editor/src/main.tsx new file mode 100644 index 0000000..2c89f99 --- /dev/null +++ b/code-editor/src/main.tsx @@ -0,0 +1,10 @@ +import "./index.css"; +import App from "./App.tsx"; +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; + +createRoot(document.getElementById("root")!).render( + + + +); diff --git a/code-editor/src/vite-env.d.ts b/code-editor/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/code-editor/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/code-editor/tailwind.config.js b/code-editor/tailwind.config.js new file mode 100644 index 0000000..2487604 --- /dev/null +++ b/code-editor/tailwind.config.js @@ -0,0 +1,57 @@ +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: ["class"], + content: ["./index.html", "./src/**/*.{ts,tsx,js,jsx}"], + theme: { + extend: { + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + colors: { + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + chart: { + 1: "hsl(var(--chart-1))", + 2: "hsl(var(--chart-2))", + 3: "hsl(var(--chart-3))", + 4: "hsl(var(--chart-4))", + 5: "hsl(var(--chart-5))", + }, + }, + }, + }, + plugins: [require("tailwindcss-animate")], +}; diff --git a/code-editor/tsconfig.app.json b/code-editor/tsconfig.app.json new file mode 100644 index 0000000..2ed0104 --- /dev/null +++ b/code-editor/tsconfig.app.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"] +} diff --git a/code-editor/tsconfig.json b/code-editor/tsconfig.json new file mode 100644 index 0000000..fec8c8e --- /dev/null +++ b/code-editor/tsconfig.json @@ -0,0 +1,13 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/code-editor/tsconfig.node.json b/code-editor/tsconfig.node.json new file mode 100644 index 0000000..db0becc --- /dev/null +++ b/code-editor/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/code-editor/vite.config.ts b/code-editor/vite.config.ts new file mode 100644 index 0000000..0fc10ec --- /dev/null +++ b/code-editor/vite.config.ts @@ -0,0 +1,12 @@ +import path from "path"; +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +});