feat: adopt shared TeamHUB cursor theme
Some checks failed
CI / Backend (lint + tests + compose) (push) Has been cancelled
CI / Frontend (lint + type-check + build) (push) Has been cancelled

This commit is contained in:
Vadim Malanov
2026-06-20 19:14:04 +03:00
parent d27dd0ffbb
commit 9b84e38f5a
9 changed files with 45 additions and 1 deletions

1
frontend/.gitignore vendored
View File

@@ -5,3 +5,4 @@ dist
.vite
.DS_Store
*.log
*.tsbuildinfo

View File

@@ -86,6 +86,9 @@ frontend/src/
- **Motion** — Framer Motion `layoutId` for the active sidebar pill,
`fade-in-up` for KPI cards, animated tabs and result expansion.
- **States** — skeleton shimmer instead of spinners wherever possible.
- **Cursor** — `@teamhub/cursor-theme` supplies the shared TeamHUB cursor
contract; Tailwind `cursor-pointer` and `cursor-not-allowed` utilities are
overridden in `src/styles/globals.css` to use `--teamhub-cursor-*`.
### Key flows

View File

@@ -7,6 +7,26 @@ import reactRefresh from "eslint-plugin-react-refresh";
export default [
{ ignores: ["dist", "node_modules", "public", "*.config.js", "*.config.ts"] },
js.configs.recommended,
{
files: ["src/**/*.js"],
languageOptions: {
ecmaVersion: "latest",
sourceType: "module",
globals: {
window: "readonly",
document: "readonly",
console: "readonly",
navigator: "readonly",
localStorage: "readonly",
setTimeout: "readonly",
clearTimeout: "readonly",
crypto: "readonly",
},
},
rules: {
"no-unused-vars": ["warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }],
},
},
{
files: ["src/**/*.{ts,tsx}"],
languageOptions: {

View File

@@ -21,6 +21,7 @@
"@radix-ui/react-tooltip": "^1.1.3",
"@tanstack/react-query": "^5.51.0",
"@tanstack/react-virtual": "^3.10.6",
"@teamhub/cursor-theme": "file:../../../Engines/engines/teamhub-cursor-theme",
"axios": "^1.7.7",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
@@ -56,6 +57,10 @@
"vite": "^5.4.8"
}
},
"../../../Engines/engines/teamhub-cursor-theme": {
"name": "@teamhub/cursor-theme",
"version": "0.1.0"
},
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
@@ -2588,6 +2593,10 @@
"url": "https://github.com/sponsors/tannerlinsley"
}
},
"node_modules/@teamhub/cursor-theme": {
"resolved": "../../../Engines/engines/teamhub-cursor-theme",
"link": true
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",

View File

@@ -11,6 +11,7 @@
"format": "prettier --write \"src/**/*.{ts,tsx,css}\""
},
"dependencies": {
"@teamhub/cursor-theme": "file:../../../Engines/engines/teamhub-cursor-theme",
"@radix-ui/react-dialog": "^1.1.2",
"@radix-ui/react-dropdown-menu": "^2.1.2",
"@radix-ui/react-popover": "^1.1.2",

View File

@@ -1,6 +1,7 @@
import React from "react";
import ReactDOM from "react-dom/client";
import { App } from "@/app/App";
import "@teamhub/cursor-theme/cursor.css";
import "@/styles/globals.css";
ReactDOM.createRoot(document.getElementById("root")!).render(

View File

@@ -100,6 +100,7 @@
body {
@apply bg-background text-foreground antialiased;
font-feature-settings: "ss01", "cv11", "tnum";
cursor: var(--teamhub-cursor-default);
}
::selection {
@apply bg-primary/20 text-primary-foreground;
@@ -169,4 +170,10 @@
-webkit-mask-image: linear-gradient(to bottom, black 60%, transparent 100%);
mask-image: linear-gradient(to bottom, black 60%, transparent 100%);
}
.cursor-pointer {
cursor: var(--teamhub-cursor-active);
}
.cursor-not-allowed {
cursor: var(--teamhub-cursor-disabled);
}
}

View File

@@ -16,6 +16,7 @@
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"outDir": "dist/tsc",
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]

View File

@@ -5,7 +5,8 @@
"module": "ESNext",
"moduleResolution": "Bundler",
"allowSyntheticDefaultImports": true,
"strict": true
"strict": true,
"outDir": "dist/tsc-node"
},
"include": ["vite.config.ts"]
}