Files
coder/site/package.json
T
Jaayden Halko e294af2bd1 chore(site): add advisory design-system color linting (#29830)
Add opt-in `pnpm lint:design-system` in `site/` using
`@shadcn/lint@0.2.0`, with only `no-raw-colors` enabled at warning
severity. Existing `pnpm lint` and CI enforcement remain unchanged while
the 187 existing findings are evaluated.

Upgrade `cn` from 0.2.4 to 0.3.2 so the application and linter use the
same supported grammar, and correct UI component discovery.

<details>
<summary>Rollout decisions and verification</summary>

- Start advisory rather than changing UI colors or adding broad
exceptions: the scan finds 177 undeclared-token uses, 8 raw palette
uses, and 2 literal SVG colors across 102 files.
- Keep all other shadcn rules disabled. The advisory configuration
preserves existing lint errors and generated/vendor exclusions; it does
not suppress failures with `|| true`.
- Pin `cn` to 0.3.2, the minimum version supported by the plugin's
grammar, rather than taking unrelated later releases. [Upstream
changelog](https://github.com/shadcn-ui/cn/blob/main/packages/cn/CHANGELOG.md).
- Removed the lint fixture test and Knip comment per review. Rechecked
formatting, Biome, full lint/type checks, and the advisory scan after
those removals. The advisory scan exits successfully with 187 warnings
and no grammar/discovery warnings.
- The frontend build and full unit suite passed before the review-only
removals. GitHub Actions also passed for that revision; updated checks
run on the latest push.
- Promote the rule to blocking enforcement separately after reviewing
and resolving the backlog. This is design-system linting, not WCAG
certification.

</details>

Generated by Coder Agents on behalf of @jaaydenh.
2026-09-29 13:43:17 +07:00

212 lines
7.1 KiB
JSON

{
"name": "@coder/coder",
"description": "Coder",
"repository": "https://github.com/coder/coder",
"private": true,
"license": "AGPL-3.0",
"packageManager": "pnpm@10.33.2+sha512.a90faf6feeab71ad6c6e57f94e0fe1a12f5dcc22cd754db40ae9593eb6a3e0b6b12e3540218bb37ae083404b1f2ce6db2a4121e979829b4aff94b99f49da1cf8",
"scripts": {
"build": "NODE_ENV=production pnpm vite build",
"check": "biome check --error-on-warnings .",
"check:fix": "biome check --error-on-warnings --fix .",
"check:all": "pnpm check && pnpm test",
"dev": "vite",
"format": "biome format --write .",
"format:check": "biome format .",
"lint": "pnpm run lint:check && pnpm run lint:oxlint && pnpm run lint:types && pnpm run lint:circular-deps && pnpm run lint:compiler && knip",
"lint:compiler": "node scripts/check-compiler.mjs",
"lint:check": "biome lint --error-on-warnings .",
"lint:oxlint": "oxlint --deny-warnings",
"lint:design-system": "oxlint --config .oxlintrc.design-system.jsonc",
"lint:circular-deps": "dpdm --no-tree --no-warning -T ./src/App.tsx",
"lint:knip": "knip",
"lint:fix": "biome lint --error-on-warnings --write . && knip --fix",
"lint:types": "tsc -p .",
"playwright:install": "playwright install --with-deps chromium",
"playwright:test": "make -C .. site/e2e/bin/coder && playwright test --config=e2e/playwright.config.ts",
"playwright:test-ui": "make -C .. site/e2e/bin/coder && playwright test --config=e2e/playwright.config.ts --ui $([[ \"$CODER\" == \"true\" ]] && echo --ui-port=7500 --ui-host=0.0.0.0)",
"gen:provisioner": "protoc --plugin=./node_modules/.bin/protoc-gen-ts_proto --ts_proto_out=./e2e/ --ts_proto_opt=outputJsonMethods=false,outputEncodeMethods=encode-no-creation,outputClientImpl=false,nestJs=false,outputPartialMethods=false,fileSuffix=Generated,suffix=hey -I ../provisionersdk/proto ../provisionersdk/proto/provisioner.proto",
"storybook": "STORYBOOK=true storybook dev -p 6006",
"storybook:build": "storybook build",
"pixel-storybook:ci": "node scripts/pixelStorybookCi.mjs",
"test": "vitest run --project=unit",
"test:storybook": "vitest --project=storybook",
"test:ci": "vitest run --project=unit",
"test:watch": "vitest --project=unit",
"stats": "STATS=true pnpm build && npx http-server ./stats -p 8081 -c-1",
"update-emojis": "cp -rf ./node_modules/emoji-datasource-apple/img/apple/64/* ./static/emojis && cp -f ./node_modules/emoji-datasource-apple/img/apple/sheets-256/64.png ./static/emojis/spritesheet.png"
},
"imports": {
"#/*": "./src/*"
},
"dependencies": {
"@dnd-kit/core": "6.3.1",
"@dnd-kit/sortable": "10.0.0",
"@dnd-kit/utilities": "3.2.2",
"@emoji-mart/data": "1.2.1",
"@emoji-mart/react": "1.1.1",
"@fontsource-variable/geist": "5.3.0",
"@fontsource-variable/geist-mono": "5.3.0",
"@fontsource/fira-code": "5.3.0",
"@fontsource/ibm-plex-mono": "5.3.0",
"@fontsource/jetbrains-mono": "5.2.8",
"@fontsource/source-code-pro": "5.3.0",
"@lexical/react": "0.44.0",
"@lexical/utils": "0.49.0",
"@monaco-editor/react": "4.7.0",
"@novnc/novnc": "^1.5.0",
"@pierre/diffs": "1.5.1",
"@pierre/trees": "1.0.0-beta.6",
"@tanstack/react-query-devtools": "5.82.0",
"@xterm/addon-canvas": "0.7.0",
"@xterm/addon-fit": "0.11.0",
"@xterm/addon-unicode11": "0.9.0",
"@xterm/addon-web-links": "0.12.0",
"@xterm/addon-webgl": "0.19.0",
"@xterm/xterm": "5.5.0",
"axios": "1.19.0",
"class-variance-authority": "0.7.1",
"cmdk": "1.1.1",
"cn": "0.3.2",
"color-convert": "2.0.1",
"cron-parser": "4.9.0",
"cronstrue": "2.59.0",
"dayjs": "1.11.23",
"diff": "8.0.4",
"dompurify": "3.4.14",
"emoji-mart": "5.6.0",
"fancy-ansi": "0.1.3",
"file-saver": "2.0.5",
"formik": "2.4.9",
"front-matter": "4.0.2",
"humanize-duration": "3.34.0",
"jszip": "3.10.1",
"lexical": "0.44.0",
"lodash": "4.18.1",
"lucide-react": "0.577.0",
"mermaid": "11.17.2",
"monaco-editor": "0.55.1",
"motion": "12.43.0",
"pretty-bytes": "6.1.1",
"radix-ui": "1.6.7",
"react": "19.2.8",
"react-color": "2.19.3",
"react-confetti": "6.4.0",
"react-day-picker": "9.14.0",
"react-dom": "19.2.8",
"react-markdown": "9.1.0",
"react-query": "npm:@tanstack/react-query@5.82.0",
"react-router": "7.18.2",
"react-syntax-highlighter": "15.6.6",
"react-textarea-autosize": "8.5.9",
"react-virtualized-auto-sizer": "1.0.26",
"react-window": "1.8.11",
"recharts": "2.15.4",
"remark-gfm": "4.0.1",
"semver": "7.8.5",
"sonner": "2.0.7",
"streamdown": "2.6.0",
"tzdata": "1.0.50",
"ua-parser-js": "1.0.41",
"ufuzzy": "npm:@leeoniya/ufuzzy@1.0.10",
"unique-names-generator": "4.7.1",
"websocket-ts": "2.3.0",
"yup": "1.7.1"
},
"devDependencies": {
"@babel/core": "7.29.7",
"@babel/plugin-syntax-typescript": "7.29.7",
"@biomejs/biome": "2.5.10",
"@coder/pixel-storybook": "0.3.0",
"@octokit/types": "12.6.0",
"@playwright/test": "1.55.1",
"@rolldown/plugin-babel": "0.2.3",
"@shadcn/lint": "0.2.0",
"@storybook/addon-a11y": "10.3.3",
"@storybook/addon-docs": "10.3.3",
"@storybook/addon-links": "10.3.3",
"@storybook/addon-mcp": "^0.7.0",
"@storybook/addon-themes": "10.3.3",
"@storybook/addon-vitest": "10.3.3",
"@storybook/react-vite": "10.3.3",
"@tailwindcss/typography": "0.5.20",
"@tailwindcss/vite": "4.3.3",
"@testing-library/jest-dom": "6.9.1",
"@testing-library/react": "14.3.1",
"@testing-library/user-event": "14.6.6",
"@types/color-convert": "2.0.4",
"@types/express": "4.17.17",
"@types/file-saver": "2.0.7",
"@types/humanize-duration": "3.27.4",
"@types/lodash": "4.17.25",
"@types/node": "20.19.41",
"@types/novnc__novnc": "1.5.0",
"@types/react": "19.2.18",
"@types/react-color": "3.0.13",
"@types/react-dom": "19.2.5",
"@types/react-syntax-highlighter": "15.5.13",
"@types/react-virtualized-auto-sizer": "1.0.8",
"@types/react-window": "1.8.8",
"@types/semver": "7.8.0",
"@types/ssh2": "1.15.5",
"@types/ua-parser-js": "0.7.36",
"@vitejs/plugin-react": "6.1.0",
"@vitest/browser-playwright": "4.1.10",
"babel-plugin-react-compiler": "1.0.0",
"dpdm": "3.15.1",
"express": "4.22.2",
"jest-canvas-mock": "2.5.2",
"jest-websocket-mock": "2.5.0",
"jsdom": "27.2.0",
"knip": "5.71.0",
"msw": "2.4.8",
"oxlint": "1.80.0",
"protobufjs": "7.6.5",
"resize-observer-polyfill": "1.5.1",
"rollup-plugin-visualizer": "7.1.1",
"rxjs": "7.8.2",
"ssh2": "1.17.0",
"storybook": "10.5.10",
"storybook-addon-remix-react-router": "6.0.0",
"tailwindcss": "4.3.3",
"ts-proto": "1.181.2",
"tw-animate-css": "1.4.0",
"typescript": "6.0.2",
"vite": "8.2.1",
"vite-plugin-checker": "0.14.5",
"vitest": "4.1.11"
},
"browserslist": [
"chrome 111",
"firefox 128",
"safari 16.4"
],
"resolutions": {
"optionator": "0.9.3",
"semver": "7.8.5"
},
"engines": {
"pnpm": ">=10.0.0 <11.0.0",
"node": ">=22.0.0 <25.0.0"
},
"pnpm": {
"overrides": {
"esbuild": "0.28.2",
"prismjs": "1.30.0",
"dompurify": "3.4.14",
"qs": "6.16.0"
},
"ignoredBuiltDependencies": [
"cpu-features",
"msw",
"protobufjs",
"storybook-addon-remix-react-router"
],
"onlyBuiltDependencies": [
"esbuild",
"odiff-bin",
"ssh2"
]
}
}