diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f134660 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "biome.configurationPath": "./surfsense_web/biome.json" +} \ No newline at end of file diff --git a/surfsense_web/biome.json b/surfsense_web/biome.json new file mode 100644 index 0000000..6e17e7f --- /dev/null +++ b/surfsense_web/biome.json @@ -0,0 +1,115 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.1.2/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": true, + "experimentalScannerIgnores": ["node_modules", ".git", ".next", "dist", "build", "coverage"], + "maxSize": 1048576 + }, + "formatter": { + "enabled": true, + "indentStyle": "tab", + "indentWidth": 2, + "lineWidth": 100, + "lineEnding": "lf", + "formatWithErrors": false + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noExplicitAny": "warn", + "noArrayIndexKey": "warn" + }, + "style": { + "useConst": "error", + "useTemplate": "warn" + }, + "correctness": { + "useExhaustiveDependencies": "warn" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double", + "jsxQuoteStyle": "double", + "quoteProperties": "asNeeded", + "trailingCommas": "es5", + "semicolons": "always", + "arrowParentheses": "always", + "bracketSameLine": false, + "bracketSpacing": true + }, + "linter": { + "enabled": true + }, + "assist": { + "enabled": true + } + }, + "json": { + "formatter": { + "enabled": true, + "indentStyle": "tab", + "indentWidth": 2, + "lineWidth": 100 + }, + "linter": { + "enabled": true + } + }, + "css": { + "formatter": { + "enabled": true, + "indentStyle": "tab", + "indentWidth": 2, + "lineWidth": 100, + "quoteStyle": "double" + }, + "linter": { + "enabled": true + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + }, + "overrides": [ + { + "includes": ["*.json", "*.jsonc"], + "json": { + "parser": { + "allowComments": true, + "allowTrailingCommas": false + } + } + }, + { + "includes": [".vscode/**/*.json"], + "json": { + "parser": { + "allowComments": true, + "allowTrailingCommas": true + } + } + }, + { + "includes": ["**/*.config.*", "**/next.config.*"], + "javascript": { + "formatter": { + "semicolons": "always" + } + } + } + ] +} diff --git a/surfsense_web/package.json b/surfsense_web/package.json index 1231476..193d1dd 100644 --- a/surfsense_web/package.json +++ b/surfsense_web/package.json @@ -1,87 +1,88 @@ { - "name": "surfsense_web", - "version": "0.0.7", - "private": true, - "description": "SurfSense Frontend", - "scripts": { - "dev": "next dev", - "dev:turbopack": "next dev --turbopack", - "build": "next build", - "start": "next start", - "lint": "next lint", - "debug": "cross-env NODE_OPTIONS=--inspect next dev --turbopack", - "debug:browser": "cross-env NODE_OPTIONS=--inspect next dev --turbopack", - "debug:server": "cross-env NODE_OPTIONS=--inspect=0.0.0.0:9229 next dev --turbopack", - "postinstall": "fumadocs-mdx" - }, - "dependencies": { - "@ai-sdk/react": "^1.1.21", - "@hookform/resolvers": "^4.1.3", - "@llamaindex/chat-ui": "^0.5.17", - "@radix-ui/react-accordion": "^1.2.3", - "@radix-ui/react-alert-dialog": "^1.1.6", - "@radix-ui/react-avatar": "^1.1.3", - "@radix-ui/react-checkbox": "^1.1.4", - "@radix-ui/react-collapsible": "^1.1.3", - "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-dropdown-menu": "^2.1.6", - "@radix-ui/react-label": "^2.1.2", - "@radix-ui/react-popover": "^1.1.6", - "@radix-ui/react-scroll-area": "^1.2.9", - "@radix-ui/react-select": "^2.1.6", - "@radix-ui/react-separator": "^1.1.2", - "@radix-ui/react-slider": "^1.3.4", - "@radix-ui/react-slot": "^1.1.2", - "@radix-ui/react-tabs": "^1.1.3", - "@radix-ui/react-toggle": "^1.1.9", - "@radix-ui/react-toggle-group": "^1.1.10", - "@radix-ui/react-tooltip": "^1.1.8", - "@tabler/icons-react": "^3.30.0", - "@tanstack/react-table": "^8.21.2", - "@types/mdx": "^2.0.13", - "@types/react-syntax-highlighter": "^15.5.13", - "ai": "^4.1.54", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "date-fns": "^4.1.0", - "emblor": "^1.4.7", - "framer-motion": "^12.4.7", - "fumadocs-core": "^15.2.9", - "fumadocs-mdx": "^11.6.1", - "fumadocs-ui": "^15.2.9", - "geist": "^1.3.1", - "lucide-react": "^0.477.0", - "next": "15.2.3", - "next-themes": "^0.4.4", - "react": "^19.0.0", - "react-day-picker": "^9.7.0", - "react-dom": "^19.0.0", - "react-dropzone": "^14.3.8", - "react-hook-form": "^7.54.2", - "react-json-view": "^1.21.3", - "react-json-view-lite": "^2.4.0", - "react-markdown": "^10.0.1", - "react-rough-notation": "^1.0.5", - "react-syntax-highlighter": "^15.6.1", - "rehype-raw": "^7.0.0", - "rehype-sanitize": "^6.0.0", - "remark-gfm": "^4.0.1", - "sonner": "^2.0.1", - "tailwind-merge": "^3.0.2", - "tailwindcss-animate": "^1.0.7", - "zod": "^3.24.2" - }, - "devDependencies": { - "@eslint/eslintrc": "^3", - "@tailwindcss/postcss": "^4", - "@tailwindcss/typography": "^0.5.16", - "@types/node": "^20.17.22", - "@types/react": "^19", - "@types/react-dom": "^19", - "cross-env": "^7.0.3", - "eslint": "^9", - "eslint-config-next": "15.2.0", - "tailwindcss": "^4", - "typescript": "^5" - } + "name": "surfsense_web", + "version": "0.0.7", + "private": true, + "description": "SurfSense Frontend", + "scripts": { + "dev": "next dev", + "dev:turbo": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint", + "debug": "cross-env NODE_OPTIONS=--inspect next dev --turbopack", + "debug:browser": "cross-env NODE_OPTIONS=--inspect next dev --turbopack", + "debug:server": "cross-env NODE_OPTIONS=--inspect=0.0.0.0:9229 next dev --turbopack", + "postinstall": "fumadocs-mdx" + }, + "dependencies": { + "@ai-sdk/react": "^1.2.12", + "@hookform/resolvers": "^4.1.3", + "@llamaindex/chat-ui": "^0.5.17", + "@radix-ui/react-accordion": "^1.2.11", + "@radix-ui/react-alert-dialog": "^1.1.14", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.2", + "@radix-ui/react-collapsible": "^1.1.11", + "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-scroll-area": "^1.2.9", + "@radix-ui/react-select": "^2.2.5", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.5", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-tabs": "^1.1.12", + "@radix-ui/react-toggle": "^1.1.9", + "@radix-ui/react-toggle-group": "^1.1.10", + "@radix-ui/react-tooltip": "^1.2.7", + "@tabler/icons-react": "^3.34.1", + "@tanstack/react-table": "^8.21.3", + "@types/mdx": "^2.0.13", + "@types/react-syntax-highlighter": "^15.5.13", + "ai": "^4.3.19", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "date-fns": "^4.1.0", + "emblor": "^1.4.8", + "framer-motion": "^12.23.9", + "fumadocs-core": "^15.6.6", + "fumadocs-mdx": "^11.7.1", + "fumadocs-ui": "^15.6.6", + "geist": "^1.4.2", + "lucide-react": "^0.477.0", + "next": "^15.4.4", + "next-themes": "^0.4.6", + "react": "^19.1.0", + "react-day-picker": "^9.8.1", + "react-dom": "^19.1.0", + "react-dropzone": "^14.3.8", + "react-hook-form": "^7.61.1", + "react-json-view": "^1.21.3", + "react-json-view-lite": "^2.4.1", + "react-markdown": "^10.1.0", + "react-rough-notation": "^1.0.5", + "react-syntax-highlighter": "^15.6.1", + "rehype-raw": "^7.0.0", + "rehype-sanitize": "^6.0.0", + "remark-gfm": "^4.0.1", + "sonner": "^2.0.6", + "tailwind-merge": "^3.3.1", + "tailwindcss-animate": "^1.0.7", + "zod": "^3.25.76" + }, + "devDependencies": { + "@biomejs/biome": "2.1.2", + "@eslint/eslintrc": "^3.3.1", + "@tailwindcss/postcss": "^4.1.11", + "@tailwindcss/typography": "^0.5.16", + "@types/node": "^20.19.9", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "cross-env": "^7.0.3", + "eslint": "^9.32.0", + "eslint-config-next": "15.2.0", + "tailwindcss": "^4.1.11", + "typescript": "^5.8.3" + } }