diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d9498a63e4..3ac7261103 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -361,6 +361,14 @@ jobs: - name: UI/MCP version audit if: ${{ github.event_name == 'push' || needs.changes.outputs.ui == 'true' || needs.changes.outputs.mcp == 'true' }} run: npm run ui:version-audit + # gittensory-ui and gittensory-miner-ui both import compiled output from this shared package + # (packages/gittensory-ui-kit/dist), which is gitignored like every other workspace package's + # dist -- so it does not exist on a fresh checkout until something builds it. Same class of gap + # as "Build engine package" above; runs before UI lint/typecheck/tests/build all in this same + # job, so building it here once covers all four. + - name: Build UI-kit package + if: ${{ github.event_name == 'push' || needs.changes.outputs.ui == 'true' }} + run: npm run ui:kit:build - name: UI lint if: ${{ github.event_name == 'push' || needs.changes.outputs.ui == 'true' }} run: npm run ui:lint diff --git a/apps/gittensory-miner-ui/eslint.config.js b/apps/gittensory-miner-ui/eslint.config.js index 7a2dc4ca7d..131f9e562a 100644 --- a/apps/gittensory-miner-ui/eslint.config.js +++ b/apps/gittensory-miner-ui/eslint.config.js @@ -25,4 +25,24 @@ export default tseslint.config( }, }, eslintPluginPrettier, + { + files: ["src/routes/**/*.{ts,tsx}"], + rules: { + "no-restricted-syntax": [ + "error", + { + selector: + "Literal[value=/(^|\\s)(text-(2xs|xs|sm|base|md|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)|text-\\[\\d|leading-(none|tight|snug|normal|relaxed|loose|3|4|5|6|7|8|9|10)|leading-\\[|rounded-(sm|md|lg|xl|2xl|3xl)|divide-y(\\s|$)|border-(t|b|l|r)(\\s|$))(\\s|$)/]", + message: + "Use design tokens instead: text-token-*, leading-token-*, rounded-token, border-hairline / divide-hairline. See @jsonbored/gittensory-ui-kit/theme.css.", + }, + { + selector: + "TemplateElement[value.raw=/(^|\\s)(text-(2xs|xs|sm|base|md|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)|leading-(none|tight|snug|normal|relaxed|loose)|rounded-(sm|md|lg|xl|2xl|3xl))(\\s|$)/]", + message: + "Use design tokens (text-token-*, leading-token-*, rounded-token, border-hairline) in template strings too.", + }, + ], + }, + }, ); diff --git a/apps/gittensory-miner-ui/index.html b/apps/gittensory-miner-ui/index.html index c7003e7dbd..dea6e659a0 100644 --- a/apps/gittensory-miner-ui/index.html +++ b/apps/gittensory-miner-ui/index.html @@ -1,5 +1,5 @@ - + diff --git a/apps/gittensory-miner-ui/package.json b/apps/gittensory-miner-ui/package.json index 1bb2984569..c13777a746 100644 --- a/apps/gittensory-miner-ui/package.json +++ b/apps/gittensory-miner-ui/package.json @@ -15,11 +15,13 @@ "format": "prettier --write ." }, "dependencies": { + "@jsonbored/gittensory-ui-kit": "^0.1.0", "@tailwindcss/vite": "^4.3.2", "@tanstack/react-router": "^1.170.17", "react": "^19.2.7", "react-dom": "^19.2.7", "tailwindcss": "^4.3.2", + "tw-animate-css": "^1.4.0", "vite-tsconfig-paths": "^6.1.1" }, "devDependencies": { @@ -39,7 +41,7 @@ "prettier": "^3.8.1", "typescript": "^5.9.3", "typescript-eslint": "^8.56.1", - "vite": "^7.3.1", + "vite": "^8.1.3", "vitest": "^4.1.9" } } diff --git a/apps/gittensory-miner-ui/src/routes/__root.tsx b/apps/gittensory-miner-ui/src/routes/__root.tsx index b7bfcfc925..07dc49f3c1 100644 --- a/apps/gittensory-miner-ui/src/routes/__root.tsx +++ b/apps/gittensory-miner-ui/src/routes/__root.tsx @@ -6,21 +6,21 @@ export const Route = createRootRoute({ function RootLayout() { return ( -
-
+
+
-

Gittensory Miner

-

Local dashboard shell

+

Gittensory Miner

+

Local dashboard

-