Files
coder/site/package.json
T
Jake Howell e81275a91c feat: cleanup <Tabs /> component (#23839)
This refactors `<Tabs />` into two clearer patterns: link tabs for route
navigation and Radix tabs for stateful tab panels. That gives us proper
accessibility semantics where we need them without overloading simple
navigation tabs.

As part of that split, this updates several consumers, adds coverage for
both variants, and cleans up some nearby styling.

- introduce Radix-backed tabs primitives for tabbed content
- move router-based tabs to `LinkTabs`
- update notifications, IdP sync, and workspace build pages to use
semantic tabs
- preserve route navigation tabs for groups and templates
- add stories/tests for both tab implementations
- simplify related layout and styling in touched components
2026-04-02 03:45:20 +11:00

248 lines
8.2 KiB
JSON

{
"name": "coder-v2",
"description": "Coder V2 (Workspaces V2)",
"repository": "https://github.com/coder/coder",
"private": true,
"license": "AGPL-3.0",
"packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748",
"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",
"chromatic": "chromatic",
"dev": "vite",
"format": "biome format --write .",
"format:check": "biome format .",
"lint": "pnpm run lint:check && 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: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": "playwright test --config=e2e/playwright.config.ts",
"playwright:test-ui": "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",
"storybook:ci": "storybook build --test",
"test": "vitest run --project=unit && jest",
"test:storybook": "vitest --project=storybook",
"test:ci": "vitest run --project=unit && jest --silent",
"test:watch": "vitest --project=unit",
"test:watch-jest": "jest --watch",
"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",
"@emotion/cache": "11.14.0",
"@emotion/css": "11.13.5",
"@emotion/react": "11.14.0",
"@emotion/styled": "11.14.1",
"@fontsource-variable/geist": "5.2.8",
"@fontsource-variable/geist-mono": "5.2.7",
"@fontsource/fira-code": "5.2.7",
"@fontsource/ibm-plex-mono": "5.2.7",
"@fontsource/jetbrains-mono": "5.2.8",
"@fontsource/source-code-pro": "5.2.7",
"@lexical/react": "0.41.0",
"@lexical/utils": "0.41.0",
"@monaco-editor/react": "4.7.0",
"@mui/material": "5.18.0",
"@mui/system": "5.18.0",
"@mui/x-tree-view": "7.29.10",
"@novnc/novnc": "^1.5.0",
"@pierre/diffs": "1.1.0-beta.19",
"@radix-ui/react-avatar": "1.1.11",
"@radix-ui/react-checkbox": "1.3.3",
"@radix-ui/react-collapsible": "1.1.12",
"@radix-ui/react-dialog": "1.1.15",
"@radix-ui/react-dropdown-menu": "2.1.16",
"@radix-ui/react-label": "2.1.8",
"@radix-ui/react-popover": "1.1.15",
"@radix-ui/react-radio-group": "1.3.8",
"@radix-ui/react-scroll-area": "1.2.10",
"@radix-ui/react-select": "2.2.6",
"@radix-ui/react-separator": "1.1.8",
"@radix-ui/react-slider": "1.3.6",
"@radix-ui/react-slot": "1.2.4",
"@radix-ui/react-switch": "1.2.6",
"@radix-ui/react-tabs": "1.1.13",
"@radix-ui/react-tooltip": "1.2.8",
"@tanstack/react-query-devtools": "5.77.0",
"@xterm/addon-canvas": "0.7.0",
"@xterm/addon-fit": "0.10.0",
"@xterm/addon-unicode11": "0.8.0",
"@xterm/addon-web-links": "0.11.0",
"@xterm/addon-webgl": "0.18.0",
"@xterm/xterm": "5.5.0",
"ansi-to-html": "0.7.2",
"axios": "1.13.2",
"chroma-js": "2.6.0",
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
"cmdk": "1.1.1",
"color-convert": "2.0.1",
"cron-parser": "4.9.0",
"cronstrue": "2.59.0",
"dayjs": "1.11.19",
"diff": "8.0.3",
"emoji-mart": "5.6.0",
"file-saver": "2.0.5",
"formik": "2.4.9",
"front-matter": "4.0.2",
"humanize-duration": "3.33.1",
"jszip": "3.10.1",
"lexical": "0.41.0",
"lodash": "4.17.21",
"lucide-react": "0.555.0",
"monaco-editor": "0.55.1",
"motion": "12.34.1",
"pretty-bytes": "6.1.1",
"react": "19.2.2",
"react-color": "2.19.3",
"react-confetti": "6.4.0",
"react-day-picker": "9.14.0",
"react-dom": "19.2.2",
"react-markdown": "9.1.0",
"react-query": "npm:@tanstack/react-query@5.77.0",
"react-resizable-panels": "3.0.6",
"react-router": "7.9.6",
"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",
"resize-observer-polyfill": "1.5.1",
"semver": "7.7.3",
"sonner": "2.0.7",
"streamdown": "2.5.0",
"tailwind-merge": "2.6.0",
"tailwindcss-animate": "1.0.7",
"tzdata": "1.0.46",
"ua-parser-js": "1.0.41",
"ufuzzy": "npm:@leeoniya/ufuzzy@1.0.10",
"undici": "6.22.0",
"unique-names-generator": "4.7.1",
"uuid": "9.0.1",
"websocket-ts": "2.2.1",
"yup": "1.7.1"
},
"devDependencies": {
"@babel/core": "7.29.0",
"@babel/plugin-syntax-typescript": "7.28.6",
"@biomejs/biome": "2.2.4",
"@chromatic-com/storybook": "5.0.1",
"@octokit/types": "12.6.0",
"@playwright/test": "1.50.1",
"@rolldown/plugin-babel": "0.2.2",
"@storybook/addon-a11y": "10.3.3",
"@storybook/addon-docs": "10.3.3",
"@storybook/addon-links": "10.3.3",
"@storybook/addon-themes": "10.3.3",
"@storybook/addon-vitest": "10.3.3",
"@storybook/react-vite": "10.3.3",
"@swc/core": "1.3.38",
"@swc/jest": "0.2.37",
"@tailwindcss/typography": "0.5.19",
"@testing-library/jest-dom": "6.9.1",
"@testing-library/react": "14.3.1",
"@testing-library/user-event": "14.6.1",
"@types/chroma-js": "2.4.0",
"@types/color-convert": "2.0.4",
"@types/express": "4.17.17",
"@types/file-saver": "2.0.7",
"@types/humanize-duration": "3.27.4",
"@types/jest": "29.5.14",
"@types/lodash": "4.17.21",
"@types/node": "20.19.25",
"@types/novnc__novnc": "1.5.0",
"@types/react": "19.2.7",
"@types/react-color": "3.0.13",
"@types/react-dom": "19.2.3",
"@types/react-syntax-highlighter": "15.5.13",
"@types/react-virtualized-auto-sizer": "1.0.8",
"@types/react-window": "1.8.8",
"@types/semver": "7.7.1",
"@types/ssh2": "1.15.5",
"@types/ua-parser-js": "0.7.36",
"@types/uuid": "9.0.2",
"@vitejs/plugin-react": "6.0.1",
"@vitest/browser-playwright": "4.1.1",
"autoprefixer": "10.4.22",
"babel-plugin-react-compiler": "1.0.0",
"chromatic": "11.29.0",
"dpdm": "3.14.0",
"express": "4.21.2",
"jest": "29.7.0",
"jest-canvas-mock": "2.5.2",
"jest-environment-jsdom": "29.5.0",
"jest-fixed-jsdom": "0.0.11",
"jest-location-mock": "2.0.0",
"jest-websocket-mock": "2.5.0",
"jest_workaround": "0.1.14",
"jsdom": "27.2.0",
"knip": "5.71.0",
"msw": "2.4.8",
"postcss": "8.5.6",
"protobufjs": "7.5.4",
"rollup-plugin-visualizer": "7.0.1",
"rxjs": "7.8.2",
"ssh2": "1.17.0",
"storybook": "10.3.3",
"storybook-addon-remix-react-router": "6.0.0",
"tailwindcss": "3.4.18",
"ts-proto": "1.181.2",
"typescript": "6.0.2",
"vite": "8.0.2",
"vite-plugin-checker": "0.12.0",
"vitest": "4.1.1"
},
"browserslist": [
"chrome 110",
"firefox 111",
"safari 16.0"
],
"resolutions": {
"optionator": "0.9.3",
"semver": "7.7.3"
},
"engines": {
"pnpm": ">=10.0.0 <11.0.0",
"node": ">=18.0.0 <23.0.0"
},
"pnpm": {
"overrides": {
"@babel/runtime": "7.26.10",
"@babel/helpers": "7.26.10",
"esbuild": "^0.25.0",
"form-data": "4.0.4",
"prismjs": "1.30.0",
"dompurify": "3.2.6",
"brace-expansion": "1.1.12"
},
"ignoredBuiltDependencies": [
"cpu-features",
"msw",
"protobufjs",
"storybook-addon-remix-react-router"
],
"onlyBuiltDependencies": [
"@swc/core",
"esbuild",
"ssh2"
]
}
}