@coze-arch/cli 0.0.1-alpha.6a5120 → 0.0.1-alpha.6f4390

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.
@@ -3,5 +3,10 @@ entrypoint = "server.js"
3
3
  requires = ["nodejs-24"]
4
4
 
5
5
  [dev]
6
- build = ["bash", ".cozeproj/scripts/deploy_build.sh"]
7
- run = ["bash", ".cozeproj/scripts/deploy_run.sh"]
6
+ build = ["bash", ".cozeproj/scripts/dev_build.sh"]
7
+ run = ["bash", ".cozeproj/scripts/dev_run.sh"]
8
+
9
+ [deploy]
10
+ build = ["bash", ".cozeproj/scripts/prod_build.sh"]
11
+ run = ["bash", ".cozeproj/scripts/prod_run.sh"]
12
+ build_app_dir = "."
@@ -49,13 +49,6 @@ fs.writeSync(fd, record+"\n", null, "utf8");
49
49
  fs.fsyncSync(fd);
50
50
  fs.closeSync(fd);
51
51
  ' "$LOG_FILE" "$level" "$msg"
52
-
53
- case "$level" in
54
- INFO) info "$msg" ;;
55
- WARN) warn "$msg" ;;
56
- ERROR) echo -e "\033[31m[ERROR] $msg\033[0m" ;;
57
- *) info "$msg" ;;
58
- esac
59
52
  }
60
53
 
61
54
  # ==================== 前置检查 ====================
@@ -1,4 +1,5 @@
1
1
  ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
2
+ PREVIEW_DIR="${COZE_PREVIEW_DIR:-$ROOT_DIR}"
2
3
  LOG_DIR="${COZE_LOG_DIR:-$ROOT_DIR/logs}"
3
4
  LOG_FILE="$LOG_DIR/app.log"
4
5
  mkdir -p "$LOG_DIR"
@@ -10,7 +11,7 @@ SERVER_PORT="9091"
10
11
  # Expo 项目配置
11
12
  EXPO_HOST="0.0.0.0"
12
13
  EXPO_DIR="expo"
13
- EXPO_PORT="9090"
14
+ EXPO_PORT="5000"
14
15
  WEB_URL="${COZE_PROJECT_DOMAIN_DEFAULT:-http://127.0.0.1:${SERVER_PORT}}"
15
16
  ASSUME_YES="1"
16
17
  EXPO_PUBLIC_BACKEND_BASE_URL="${EXPO_PUBLIC_BACKEND_BASE_URL:-$WEB_URL}"
@@ -116,18 +117,12 @@ fs.writeSync(fd, record+"\n", null, "utf8");
116
117
  fs.fsyncSync(fd);
117
118
  fs.closeSync(fd);
118
119
  ' "$LOG_FILE" "$level" "$msg"
119
- case "$level" in
120
- INFO) echo -e "\033[32m[INFO] $msg\033[0m" ;;
121
- WARN) echo -e "\033[33m[WARN] $msg\033[0m" ;;
122
- ERROR) echo -e "\033[31m[ERROR] $msg\033[0m" ;;
123
- *) echo -e "\033[32m[INFO] $msg\033[0m" ;;
124
- esac
125
120
  }
126
121
 
127
122
  wait_port_connectable() {
128
123
  local host=$1 port=$2 retries=${3:-10}
129
124
  for _ in $(seq 1 "$retries"); do
130
- nc -z "$host" "$port" && return 0
125
+ nc -z -w 1 "$host" "$port" >/dev/null 2>&1 && return 0
131
126
  sleep 1
132
127
  done
133
128
  return 1
@@ -159,6 +154,15 @@ detect_expo_fetch_failed() {
159
154
  }
160
155
 
161
156
  # ==================== 前置检查 ====================
157
+ # 关掉nginx进程
158
+ ps -ef | grep nginx | grep -v grep | awk '{print $2}' | xargs -r kill -9
159
+
160
+ write_log "INFO" "检查根目录 pre_install.py"
161
+ if [ -f "$PREVIEW_DIR/pre_install.py" ]; then
162
+ write_log "INFO" "执行:python $PREVIEW_DIR/pre_install.py"
163
+ python "$PREVIEW_DIR/pre_install.py" || write_log "ERROR" "pre_install.py 执行失败"
164
+ fi
165
+
162
166
  write_log "INFO" "==================== 开始启动 ===================="
163
167
  write_log "INFO" "开始执行服务启动脚本(start_dev.sh)..."
164
168
  write_log "INFO" "正在检查依赖命令和目录是否存在..."
@@ -176,14 +180,6 @@ ensure_port SERVER_PORT "$SERVER_PORT"
176
180
  ensure_port EXPO_PORT "$EXPO_PORT"
177
181
 
178
182
  # ==================== 启动 Server 服务 ====================
179
- write_log "INFO" "检查 Nginx 端口 (5000)..."
180
- if is_port_free 5000; then
181
- write_log "INFO" "端口 5000 未被占用,正在启动 Nginx..."
182
- service nginx start
183
- else
184
- write_log "INFO" "端口 5000 已被占用,跳过 Nginx 启动"
185
- fi
186
-
187
183
  write_log "INFO" "==================== 启动 server 服务 ===================="
188
184
  write_log "INFO" "正在执行:npm run server"
189
185
  PORT="$SERVER_PORT" nohup npm run server > logs/app.log 2>&1 &
@@ -0,0 +1,47 @@
1
+ #!/bin/bash
2
+ if [ -z "${BASH_VERSION:-}" ]; then exec /usr/bin/env bash "$0" "$@"; fi
3
+ set -euo pipefail
4
+ ROOT_DIR="$(pwd)"
5
+
6
+ # ==================== 工具函数 ====================
7
+ info() {
8
+ echo "[INFO] $1"
9
+ }
10
+ warn() {
11
+ echo "[WARN] $1"
12
+ }
13
+ error() {
14
+ echo "[ERROR] $1"
15
+ exit 1
16
+ }
17
+ check_command() {
18
+ if ! command -v "$1" &> /dev/null; then
19
+ error "命令 $1 未找到,请先安装"
20
+ fi
21
+ }
22
+
23
+ info "==================== 开始构建 ===================="
24
+ info "开始执行构建脚本(build_prod.sh)..."
25
+ info "正在检查依赖命令是否存在..."
26
+ # 检查核心命令
27
+ check_command "pnpm"
28
+ check_command "npm"
29
+
30
+ # ==================== 安装 Node 依赖 ====================
31
+ info "==================== 安装 Node 依赖 ===================="
32
+ info "开始安装 Node 依赖"
33
+ if [ -f "$ROOT_DIR/package.json" ]; then
34
+ info "进入目录:$ROOT_DIR"
35
+ info "正在执行:pnpm install"
36
+ (cd "$ROOT_DIR" && pnpm install --registry=https://registry.npmmirror.com) || error "Node 依赖安装失败"
37
+ else
38
+ warn "未找到 $ROOT_DIR/package.json 文件,请检查路径是否正确"
39
+ fi
40
+ info "==================== 依赖安装完成!====================\n"
41
+
42
+ info "==================== dist打包 ===================="
43
+ info "开始执行:pnpm run server:build"
44
+ (cd "$ROOT_DIR" && pnpm run server:build) || error "dist打包失败"
45
+ info "==================== dist打包完成!====================\n"
46
+
47
+ info "下一步:执行 ./prod_run.sh 启动服务"
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ # 产物部署使用
3
+ set -euo pipefail
4
+
5
+ ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
6
+
7
+
8
+ HOST="${HOST:-0.0.0.0}"
9
+ PORT="${PORT:-5000}"
10
+
11
+ # ==================== 工具函数 ====================
12
+ info() {
13
+ echo "[INFO] $1"
14
+ }
15
+ warn() {
16
+ echo "[WARN] $1"
17
+ }
18
+ error() {
19
+ echo "[ERROR] $1"
20
+ exit 1
21
+ }
22
+ check_command() {
23
+ if ! command -v "$1" &> /dev/null; then
24
+ error "命令 $1 未找到,请先安装"
25
+ fi
26
+ }
27
+
28
+ # ============== 启动服务 ======================
29
+ # 检查核心命令
30
+ check_command "pnpm"
31
+ check_command "npm"
32
+
33
+ info "开始执行:pnpm run server:prod"
34
+ (cd "$ROOT_DIR" && PORT="$PORT" pnpm run server:prod) || error "服务启动失败"
35
+ info "服务启动完成!\n"
@@ -3,6 +3,16 @@ module.exports = function (api) {
3
3
  return {
4
4
  presets: ["babel-preset-expo"],
5
5
  plugins: [
6
+ [
7
+ "module-resolver",
8
+ {
9
+ root: ["./"],
10
+ alias: {
11
+ "@": "./client",
12
+ },
13
+ extensions: [".ios.js", ".android.js", ".js", ".ts", ".tsx", ".json"],
14
+ },
15
+ ],
6
16
  "react-native-reanimated/plugin",
7
17
  ],
8
18
  };
@@ -6,25 +6,35 @@ const tintColorDark = "#0A84FF";
6
6
  export const Colors = {
7
7
  light: {
8
8
  text: "#11181C",
9
+ textPrimary: "#11181C",
10
+ textSecondary: "#687076",
11
+ textMuted: "#9BA1A6",
9
12
  buttonText: "#FFFFFF",
10
13
  tabIconDefault: "#687076",
11
14
  tabIconSelected: tintColorLight,
15
+ primary: tintColorLight,
12
16
  link: "#007AFF",
13
17
  backgroundRoot: "#FFFFFF", // Elevation 0
14
18
  backgroundDefault: "#F2F2F2", // Elevation 1
15
19
  backgroundSecondary: "#E6E6E6", // Elevation 2
16
20
  backgroundTertiary: "#D9D9D9", // Elevation 3
21
+ border: "#E6E6E6",
17
22
  },
18
23
  dark: {
19
24
  text: "#ECEDEE",
25
+ textPrimary: "#ECEDEE",
26
+ textSecondary: "#9BA1A6",
27
+ textMuted: "#6F767E",
20
28
  buttonText: "#FFFFFF",
21
29
  tabIconDefault: "#9BA1A6",
22
30
  tabIconSelected: tintColorDark,
31
+ primary: tintColorDark,
23
32
  link: "#0A84FF",
24
33
  backgroundRoot: "#1F2123", // Elevation 0
25
34
  backgroundDefault: "#2A2C2E", // Elevation 1
26
35
  backgroundSecondary: "#353739", // Elevation 2
27
36
  backgroundTertiary: "#404244", // Elevation 3
37
+ border: "#353739",
28
38
  },
29
39
  };
30
40
 
@@ -4,7 +4,7 @@ import { useColorScheme } from "@/hooks/useColorScheme";
4
4
  export function useTheme() {
5
5
  const colorScheme = useColorScheme();
6
6
  const isDark = colorScheme === "dark";
7
- const theme = Colors[colorScheme ?? "light"];
7
+ const theme = Colors[(colorScheme as "light" | "dark") ?? "light"];
8
8
 
9
9
  return {
10
10
  theme,
@@ -1,5 +1,5 @@
1
1
  const { getDefaultConfig } = require('expo/metro-config');
2
- // const { createProxyMiddleware } = require('http-proxy-middleware');
2
+ const { createProxyMiddleware } = require('http-proxy-middleware');
3
3
  const connect = require('connect');
4
4
 
5
5
  const config = getDefaultConfig(__dirname);
@@ -28,9 +28,8 @@ config.resolver.blockList = [
28
28
  /.*\.git\/.*/, // 排除 Git 目录
29
29
  ];
30
30
 
31
- /*
32
31
  const apiProxy = createProxyMiddleware({
33
- target: 'http://localhost:5000',
32
+ target: 'http://localhost:9091',
34
33
  logLevel: 'debug',
35
34
  });
36
35
 
@@ -39,7 +38,7 @@ config.server = {
39
38
  enhanceMiddleware: (metroMiddleware, metroServer) => {
40
39
  return connect()
41
40
  .use((req, res, next) => {
42
- if (req.url && req.url.startsWith('/api')) {
41
+ if (req.url && req.url.startsWith('/api/v')) {
43
42
  console.log(`[Metro Proxy] Forwarding ${req.method} ${req.url}`);
44
43
  return apiProxy(req, res, next);
45
44
  }
@@ -48,6 +47,5 @@ config.server = {
48
47
  .use(metroMiddleware);
49
48
  },
50
49
  }
51
- */
52
50
 
53
51
  module.exports = config;
@@ -12,6 +12,8 @@
12
12
  "install-missing": "node ./client/scripts/install-missing-deps.js",
13
13
  "lint": "expo lint",
14
14
  "server": "NODE_ENV=development tsx ./src/index.ts",
15
+ "server:build": "pnpm exec esbuild src/index.ts --platform=node --packages=external --bundle --format=esm --outdir=src_dist",
16
+ "server:prod": "NODE_ENV=production PORT=${PORT:-5000} node src_dist/index.js",
15
17
  "start": "expo start --web",
16
18
  "test": "jest --watchAll"
17
19
  },
@@ -32,8 +34,10 @@
32
34
  "@react-navigation/native": "^7.0.14",
33
35
  "ajv": "^8.17.1",
34
36
  "ajv-formats": "^3.0.1",
37
+ "babel-plugin-module-resolver": "^5.0.2",
38
+ "babel-preset-expo": "^54.0.9",
35
39
  "connect": "^3.7.0",
36
- "coze-coding-dev-sdk": "^0.5.2",
40
+ "coze-coding-dev-sdk": "^0.5.5",
37
41
  "dayjs": "^1.11.19",
38
42
  "drizzle-kit": "^0.31.8",
39
43
  "drizzle-orm": "^0.45.1",
@@ -58,6 +62,7 @@
58
62
  "expo-system-ui": "~6.0.9",
59
63
  "expo-web-browser": "~15.0.10",
60
64
  "express": "^4.22.1",
65
+ "http-proxy-middleware": "^3.0.5",
61
66
  "multer": "^2.0.2",
62
67
  "pg": "^8.16.3",
63
68
  "react": "19.1.0",
@@ -86,11 +91,10 @@
86
91
  "@types/pg": "^8.16.0",
87
92
  "@types/react": "~19.1.0",
88
93
  "@types/react-test-renderer": "19.1.0",
89
- "babel-plugin-module-resolver": "^5.0.2",
90
- "babel-preset-expo": "^54.0.9",
91
94
  "chalk": "^4.1.2",
92
95
  "depcheck": "^1.4.7",
93
- "eslint": "^9.27.0",
96
+ "esbuild": "0.27.2",
97
+ "eslint": "^9.39.2",
94
98
  "eslint-formatter-compact": "^9.0.1",
95
99
  "eslint-import-resolver-typescript": "^4.4.4",
96
100
  "eslint-plugin-import": "^2.32.0",
@@ -108,5 +112,10 @@
108
112
  "packageManager": "pnpm@9.0.0",
109
113
  "engines": {
110
114
  "pnpm": ">=9.0.0"
115
+ },
116
+ "pnpm": {
117
+ "overrides": {
118
+ "esbuild": "0.27.2"
119
+ }
111
120
  }
112
121
  }
@@ -42,7 +42,7 @@
42
42
  "class-variance-authority": "^0.7.1",
43
43
  "clsx": "^2.1.1",
44
44
  "cmdk": "^1.1.1",
45
- "coze-coding-dev-sdk": "0.5.0",
45
+ "coze-coding-dev-sdk": "^0.5.2",
46
46
  "date-fns": "^4.1.0",
47
47
  "drizzle-kit": "^0.31.8",
48
48
  "drizzle-orm": "^0.45.1",
@@ -105,8 +105,8 @@ importers:
105
105
  specifier: ^1.1.1
106
106
  version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
107
107
  coze-coding-dev-sdk:
108
- specifier: 0.5.0
109
- version: 0.5.0(@types/pg@8.16.0)(openai@6.15.0(zod@4.3.5))
108
+ specifier: ^0.5.2
109
+ version: 0.5.4(@types/pg@8.16.0)(openai@6.15.0(zod@4.3.5))
110
110
  date-fns:
111
111
  specifier: ^4.1.0
112
112
  version: 4.1.0
@@ -2747,8 +2747,8 @@ packages:
2747
2747
  typescript:
2748
2748
  optional: true
2749
2749
 
2750
- coze-coding-dev-sdk@0.5.0:
2751
- resolution: {integrity: sha512-fmJypE4jgExKOOFSz26ZNRUyKmAh3FENKORXMfvP7JIbXmk092ntrnll9DCJ+HpNOcpdvlE5lTmGSvyGh9nwrw==}
2750
+ coze-coding-dev-sdk@0.5.4:
2751
+ resolution: {integrity: sha512-nIH2hMFlO2PSnqdslFzOITK+2FhR64caoYFuzy2ma+ceu0o2Spe7tLYLIsyUc42Prr5gXqk4MZESQqpXD34ZwQ==}
2752
2752
  engines: {node: '>=18.0.0'}
2753
2753
  hasBin: true
2754
2754
 
@@ -7931,7 +7931,7 @@ snapshots:
7931
7931
  optionalDependencies:
7932
7932
  typescript: 5.9.3
7933
7933
 
7934
- coze-coding-dev-sdk@0.5.0(@types/pg@8.16.0)(openai@6.15.0(zod@4.3.5)):
7934
+ coze-coding-dev-sdk@0.5.4(@types/pg@8.16.0)(openai@6.15.0(zod@4.3.5)):
7935
7935
  dependencies:
7936
7936
  '@aws-sdk/client-s3': 3.962.0
7937
7937
  '@aws-sdk/lib-storage': 3.962.0(@aws-sdk/client-s3@3.962.0)
@@ -4,44 +4,25 @@ set -Eeuo pipefail
4
4
  PORT=<%= port %>
5
5
  COZE_WORKSPACE_PATH="${COZE_WORKSPACE_PATH:-$(pwd)}"
6
6
  NODE_ENV=development
7
+ DEPLOY_RUN_PORT=<%= port %>
7
8
 
8
9
  cd "${COZE_WORKSPACE_PATH}"
9
10
 
10
11
  kill_port_if_listening() {
11
12
  local pids
12
-
13
- # Check if lsof is available (macOS/BSD) or ss (Linux)
14
- if command -v lsof >/dev/null 2>&1; then
15
- # macOS/BSD using lsof
16
- pids=$(lsof -ti:${PORT} 2>/dev/null || true)
17
- elif command -v ss >/dev/null 2>&1; then
18
- # Linux using ss
19
- pids=$(ss -H -lntp 2>/dev/null | awk -v port="${PORT}" '$4 ~ ":"port"$"' | grep -o 'pid=[0-9]*' | cut -d= -f2 | paste -sd' ' - || true)
20
- else
21
- echo "Warning: neither lsof nor ss found, cannot check port ${PORT}"
22
- return
23
- fi
24
-
13
+ pids=$(ss -H -lntp 2>/dev/null | awk -v port="${DEPLOY_RUN_PORT}" '$4 ~ ":"port"$"' | grep -o 'pid=[0-9]*' | cut -d= -f2 | paste -sd' ' - || true)
25
14
  if [[ -z "${pids}" ]]; then
26
- echo "Port ${PORT} is free."
15
+ echo "Port ${DEPLOY_RUN_PORT} is free."
27
16
  return
28
17
  fi
29
-
30
- echo "Port ${PORT} in use by PIDs: ${pids} (SIGKILL)"
18
+ echo "Port ${DEPLOY_RUN_PORT} in use by PIDs: ${pids} (SIGKILL)"
31
19
  echo "${pids}" | xargs -I {} kill -9 {}
32
20
  sleep 1
33
-
34
- # Verify port is cleared
35
- if command -v lsof >/dev/null 2>&1; then
36
- pids=$(lsof -ti:${PORT} 2>/dev/null || true)
37
- elif command -v ss >/dev/null 2>&1; then
38
- pids=$(ss -H -lntp 2>/dev/null | awk -v port="${PORT}" '$4 ~ ":"port"$"' | grep -o 'pid=[0-9]*' | cut -d= -f2 | paste -sd' ' - || true)
39
- fi
40
-
21
+ pids=$(ss -H -lntp 2>/dev/null | awk -v port="${DEPLOY_RUN_PORT}" '$4 ~ ":"port"$"' | grep -o 'pid=[0-9]*' | cut -d= -f2 | paste -sd' ' - || true)
41
22
  if [[ -n "${pids}" ]]; then
42
- echo "Warning: port ${PORT} still busy after SIGKILL, PIDs: ${pids}"
23
+ echo "Warning: port ${DEPLOY_RUN_PORT} still busy after SIGKILL, PIDs: ${pids}"
43
24
  else
44
- echo "Port ${PORT} cleared."
25
+ echo "Port ${DEPLOY_RUN_PORT} cleared."
45
26
  fi
46
27
  }
47
28
 
@@ -1,59 +1,11 @@
1
1
  @import 'tailwindcss';
2
- @import "tw-animate-css";
2
+ @import 'tw-animate-css';
3
3
 
4
4
  @custom-variant dark (&:is(.dark *));
5
5
 
6
- :root {
7
- --background: 0 0% 100%;
8
- --foreground: 0 0% 9%;
9
- --card: 0 0% 100%;
10
- --card-foreground: 0 0% 9%;
11
- --popover: 0 0% 100%;
12
- --popover-foreground: 0 0% 9%;
13
- --primary: 0 0% 9%;
14
- --primary-foreground: 0 0% 98%;
15
- --secondary: 0 0% 96%;
16
- --secondary-foreground: 0 0% 9%;
17
- --muted: 0 0% 96%;
18
- --muted-foreground: 0 0% 45%;
19
- --accent: 0 0% 96%;
20
- --accent-foreground: 0 0% 9%;
21
- --destructive: 0 84% 60%;
22
- --destructive-foreground: 0 0% 98%;
23
- --border: 0 0% 90%;
24
- --input: 0 0% 90%;
25
- --ring: 0 0% 9%;
26
- --radius: 0.5rem;
27
- --sidebar: hsl(0 0% 98%);
28
- --sidebar-foreground: hsl(240 5.3% 26.1%);
29
- --sidebar-primary: hsl(240 5.9% 10%);
30
- --sidebar-primary-foreground: hsl(0 0% 98%);
31
- --sidebar-accent: hsl(240 4.8% 95.9%);
32
- --sidebar-accent-foreground: hsl(240 5.9% 10%);
33
- --sidebar-border: hsl(220 13% 91%);
34
- --sidebar-ring: hsl(217.2 91.2% 59.8%);
35
- }
36
-
37
6
  @theme inline {
38
- --color-background: hsl(var(--background));
39
- --color-foreground: hsl(var(--foreground));
40
- --color-card: hsl(var(--card));
41
- --color-card-foreground: hsl(var(--card-foreground));
42
- --color-popover: hsl(var(--popover));
43
- --color-popover-foreground: hsl(var(--popover-foreground));
44
- --color-primary: hsl(var(--primary));
45
- --color-primary-foreground: hsl(var(--primary-foreground));
46
- --color-secondary: hsl(var(--secondary));
47
- --color-secondary-foreground: hsl(var(--secondary-foreground));
48
- --color-muted: hsl(var(--muted));
49
- --color-muted-foreground: hsl(var(--muted-foreground));
50
- --color-accent: hsl(var(--accent));
51
- --color-accent-foreground: hsl(var(--accent-foreground));
52
- --color-destructive: hsl(var(--destructive));
53
- --color-destructive-foreground: hsl(var(--destructive-foreground));
54
- --color-border: hsl(var(--border));
55
- --color-input: hsl(var(--input));
56
- --color-ring: hsl(var(--ring));
7
+ --color-background: var(--background);
8
+ --color-foreground: var(--foreground);
57
9
  --font-sans: var(--font-geist-sans);
58
10
  --font-mono: var(--font-geist-mono);
59
11
  --color-sidebar-ring: var(--sidebar-ring);
@@ -64,47 +16,103 @@
64
16
  --color-sidebar-primary: var(--sidebar-primary);
65
17
  --color-sidebar-foreground: var(--sidebar-foreground);
66
18
  --color-sidebar: var(--sidebar);
19
+ --color-chart-5: var(--chart-5);
20
+ --color-chart-4: var(--chart-4);
21
+ --color-chart-3: var(--chart-3);
22
+ --color-chart-2: var(--chart-2);
23
+ --color-chart-1: var(--chart-1);
24
+ --color-ring: var(--ring);
25
+ --color-input: var(--input);
26
+ --color-border: var(--border);
27
+ --color-destructive: var(--destructive);
28
+ --color-accent-foreground: var(--accent-foreground);
29
+ --color-accent: var(--accent);
30
+ --color-muted-foreground: var(--muted-foreground);
31
+ --color-muted: var(--muted);
32
+ --color-secondary-foreground: var(--secondary-foreground);
33
+ --color-secondary: var(--secondary);
34
+ --color-primary-foreground: var(--primary-foreground);
35
+ --color-primary: var(--primary);
36
+ --color-popover-foreground: var(--popover-foreground);
37
+ --color-popover: var(--popover);
38
+ --color-card-foreground: var(--card-foreground);
39
+ --color-card: var(--card);
40
+ --radius-sm: calc(var(--radius) - 4px);
41
+ --radius-md: calc(var(--radius) - 2px);
42
+ --radius-lg: var(--radius);
43
+ --radius-xl: calc(var(--radius) + 4px);
44
+ --radius-2xl: calc(var(--radius) + 8px);
45
+ --radius-3xl: calc(var(--radius) + 12px);
46
+ --radius-4xl: calc(var(--radius) + 16px);
67
47
  }
68
48
 
69
- @media (prefers-color-scheme: dark) {
70
- :root {
71
- --background: 0 0% 4%;
72
- --foreground: 0 0% 93%;
73
- --card: 0 0% 4%;
74
- --card-foreground: 0 0% 93%;
75
- --popover: 0 0% 4%;
76
- --popover-foreground: 0 0% 93%;
77
- --primary: 0 0% 98%;
78
- --primary-foreground: 0 0% 9%;
79
- --secondary: 0 0% 15%;
80
- --secondary-foreground: 0 0% 98%;
81
- --muted: 0 0% 15%;
82
- --muted-foreground: 0 0% 64%;
83
- --accent: 0 0% 15%;
84
- --accent-foreground: 0 0% 98%;
85
- --destructive: 0 63% 31%;
86
- --destructive-foreground: 0 0% 98%;
87
- --border: 0 0% 15%;
88
- --input: 0 0% 15%;
89
- --ring: 0 0% 83%;
90
- }
91
- }
92
-
93
- body {
94
- background: hsl(var(--background));
95
- color: hsl(var(--foreground));
96
- font-family: Arial, Helvetica, sans-serif;
49
+ :root {
50
+ --radius: 0.625rem;
51
+ --background: oklch(1 0 0);
52
+ --foreground: oklch(0.145 0 0);
53
+ --card: oklch(1 0 0);
54
+ --card-foreground: oklch(0.145 0 0);
55
+ --popover: oklch(1 0 0);
56
+ --popover-foreground: oklch(0.145 0 0);
57
+ --primary: oklch(0.205 0 0);
58
+ --primary-foreground: oklch(0.985 0 0);
59
+ --secondary: oklch(0.97 0 0);
60
+ --secondary-foreground: oklch(0.205 0 0);
61
+ --muted: oklch(0.97 0 0);
62
+ --muted-foreground: oklch(0.556 0 0);
63
+ --accent: oklch(0.97 0 0);
64
+ --accent-foreground: oklch(0.205 0 0);
65
+ --destructive: oklch(0.577 0.245 27.325);
66
+ --border: oklch(0.922 0 0);
67
+ --input: oklch(0.922 0 0);
68
+ --ring: oklch(0.708 0 0);
69
+ --chart-1: oklch(0.646 0.222 41.116);
70
+ --chart-2: oklch(0.6 0.118 184.704);
71
+ --chart-3: oklch(0.398 0.07 227.392);
72
+ --chart-4: oklch(0.828 0.189 84.429);
73
+ --chart-5: oklch(0.769 0.188 70.08);
74
+ --sidebar: oklch(0.985 0 0);
75
+ --sidebar-foreground: oklch(0.145 0 0);
76
+ --sidebar-primary: oklch(0.205 0 0);
77
+ --sidebar-primary-foreground: oklch(0.985 0 0);
78
+ --sidebar-accent: oklch(0.97 0 0);
79
+ --sidebar-accent-foreground: oklch(0.205 0 0);
80
+ --sidebar-border: oklch(0.922 0 0);
81
+ --sidebar-ring: oklch(0.708 0 0);
97
82
  }
98
83
 
99
84
  .dark {
100
- --sidebar: hsl(240 5.9% 10%);
101
- --sidebar-foreground: hsl(240 4.8% 95.9%);
102
- --sidebar-primary: hsl(224.3 76.3% 48%);
103
- --sidebar-primary-foreground: hsl(0 0% 100%);
104
- --sidebar-accent: hsl(240 3.7% 15.9%);
105
- --sidebar-accent-foreground: hsl(240 4.8% 95.9%);
106
- --sidebar-border: hsl(240 3.7% 15.9%);
107
- --sidebar-ring: hsl(217.2 91.2% 59.8%);
85
+ --background: oklch(0.145 0 0);
86
+ --foreground: oklch(0.985 0 0);
87
+ --card: oklch(0.205 0 0);
88
+ --card-foreground: oklch(0.985 0 0);
89
+ --popover: oklch(0.205 0 0);
90
+ --popover-foreground: oklch(0.985 0 0);
91
+ --primary: oklch(0.922 0 0);
92
+ --primary-foreground: oklch(0.205 0 0);
93
+ --secondary: oklch(0.269 0 0);
94
+ --secondary-foreground: oklch(0.985 0 0);
95
+ --muted: oklch(0.269 0 0);
96
+ --muted-foreground: oklch(0.708 0 0);
97
+ --accent: oklch(0.269 0 0);
98
+ --accent-foreground: oklch(0.985 0 0);
99
+ --destructive: oklch(0.704 0.191 22.216);
100
+ --border: oklch(1 0 0 / 10%);
101
+ --input: oklch(1 0 0 / 15%);
102
+ --ring: oklch(0.556 0 0);
103
+ --chart-1: oklch(0.488 0.243 264.376);
104
+ --chart-2: oklch(0.696 0.17 162.48);
105
+ --chart-3: oklch(0.769 0.188 70.08);
106
+ --chart-4: oklch(0.627 0.265 303.9);
107
+ --chart-5: oklch(0.645 0.246 16.439);
108
+ --sidebar: oklch(0.205 0 0);
109
+ --sidebar-foreground: oklch(0.985 0 0);
110
+ --sidebar-primary: oklch(0.488 0.243 264.376);
111
+ --sidebar-primary-foreground: oklch(0.985 0 0);
112
+ --sidebar-accent: oklch(0.269 0 0);
113
+ --sidebar-accent-foreground: oklch(0.985 0 0);
114
+ --sidebar-border: oklch(1 0 0 / 10%);
115
+ --sidebar-ring: oklch(0.556 0 0);
108
116
  }
109
117
 
110
118
  @layer base {
@@ -115,3 +123,7 @@ body {
115
123
  @apply bg-background text-foreground;
116
124
  }
117
125
  }
126
+
127
+ body {
128
+ @apply font-sans;
129
+ }