Skip to content

Commit 5bcd6c9

Browse files
Replace ESLint with Biome for web/ (#6)
* Replace ESLint with Biome for web/ linting and formatting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add liquid glass effect to popout window Make the popout window translucent with a frosted glass background to match the liquid glass styling of the rest of the app. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f08a73c commit 5bcd6c9

11 files changed

Lines changed: 546 additions & 55 deletions

File tree

Sources/devtail/PopOutProcessView.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ struct PopOutProcessView: View {
1515
.frame(maxWidth: .infinity, maxHeight: .infinity)
1616
}
1717
}
18-
.background(Color(nsColor: .textBackgroundColor))
18+
.frame(maxWidth: .infinity, maxHeight: .infinity)
19+
.background {
20+
Rectangle()
21+
.fill(.ultraThinMaterial)
22+
.opacity(0.6)
23+
.ignoresSafeArea()
24+
}
1925
}
2026
}

Sources/devtail/PopOutWindowManager.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ final class PopOutWindowManager {
2222

2323
let window = NSWindow(
2424
contentRect: NSRect(x: 0, y: 0, width: 480, height: 400),
25-
styleMask: [.titled, .closable, .resizable, .miniaturizable],
25+
styleMask: [.titled, .closable, .resizable, .miniaturizable, .fullSizeContentView],
2626
backing: .buffered,
2727
defer: false
2828
)
2929

30+
window.titlebarAppearsTransparent = true
31+
window.isOpaque = false
32+
window.backgroundColor = .clear
33+
3034
let hostingView = NSHostingView(rootView: PopOutProcessView(buffer: buffer))
3135
window.contentView = hostingView
3236
window.title = title

web/biome.json

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
{
2+
"$schema": "https://biomejs.dev/schemas/2.4.11/schema.json",
3+
"vcs": {
4+
"enabled": true,
5+
"clientKind": "git",
6+
"useIgnoreFile": true
7+
},
8+
"files": {
9+
"ignoreUnknown": false,
10+
"includes": ["**"]
11+
},
12+
"formatter": {
13+
"enabled": true,
14+
"indentStyle": "space",
15+
"indentWidth": 2
16+
},
17+
"linter": {
18+
"enabled": true,
19+
"rules": {
20+
"recommended": true,
21+
"suspicious": {
22+
"noExplicitAny": "error"
23+
},
24+
"correctness": {
25+
"noUnusedVariables": "error",
26+
"noUnusedImports": "error",
27+
"noUnusedFunctionParameters": "error"
28+
},
29+
"style": {
30+
"useBlockStatements": "error"
31+
},
32+
"complexity": {
33+
"noImportantStyles": "off"
34+
}
35+
}
36+
},
37+
"javascript": {
38+
"formatter": {
39+
"quoteStyle": "double",
40+
"semicolons": "always"
41+
}
42+
},
43+
"css": {
44+
"parser": {
45+
"tailwindDirectives": true
46+
}
47+
},
48+
"assist": {
49+
"enabled": true,
50+
"actions": {
51+
"source": {
52+
"organizeImports": "on"
53+
}
54+
}
55+
}
56+
}

web/bun.lock

Lines changed: 430 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

web/eslint.config.js

Lines changed: 0 additions & 23 deletions
This file was deleted.

web/package.json

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,22 @@
66
"scripts": {
77
"dev": "vite",
88
"build": "tsc -b && vite build",
9-
"lint": "eslint .",
9+
"check": "biome check --write .",
10+
"lint": "biome lint .",
11+
"format": "biome check --write .",
1012
"preview": "vite preview"
1113
},
1214
"dependencies": {
1315
"react": "^19.2.4",
1416
"react-dom": "^19.2.4"
1517
},
1618
"devDependencies": {
17-
"@eslint/js": "^9.39.4",
19+
"@biomejs/biome": "^2.3.5",
1820
"@tailwindcss/vite": "^4.2.2",
1921
"@types/node": "^24.12.2",
2022
"@types/react": "^19.2.14",
2123
"@types/react-dom": "^19.2.3",
2224
"@vitejs/plugin-react": "^6.0.1",
23-
"eslint": "^9.39.4",
24-
"eslint-plugin-react-hooks": "^7.0.1",
25-
"eslint-plugin-react-refresh": "^0.5.2",
26-
"globals": "^17.4.0",
2725
"tailwindcss": "^4.2.2",
2826
"typescript": "~6.0.2",
2927
"typescript-eslint": "^8.58.0",

web/src/App.css

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,24 @@
2626
opacity: 0;
2727
animation: fadeInUp 0.7s cubic-bezier(0.25, 0, 0, 1) forwards;
2828
}
29-
.hero-stagger:nth-child(1) { animation-delay: 0.05s; }
30-
.hero-stagger:nth-child(2) { animation-delay: 0.15s; }
31-
.hero-stagger:nth-child(3) { animation-delay: 0.25s; }
32-
.hero-stagger:nth-child(4) { animation-delay: 0.35s; }
33-
.hero-stagger:nth-child(5) { animation-delay: 0.45s; }
34-
.hero-stagger:nth-child(6) { animation-delay: 0.55s; }
29+
.hero-stagger:nth-child(1) {
30+
animation-delay: 0.05s;
31+
}
32+
.hero-stagger:nth-child(2) {
33+
animation-delay: 0.15s;
34+
}
35+
.hero-stagger:nth-child(3) {
36+
animation-delay: 0.25s;
37+
}
38+
.hero-stagger:nth-child(4) {
39+
animation-delay: 0.35s;
40+
}
41+
.hero-stagger:nth-child(5) {
42+
animation-delay: 0.45s;
43+
}
44+
.hero-stagger:nth-child(6) {
45+
animation-delay: 0.55s;
46+
}
3547

3648
/* ── Scroll reveal ── */
3749
.scroll-reveal {

web/src/App.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,11 @@ function App() {
5454
}
5555
});
5656
},
57-
{ threshold: 0.1, rootMargin: "-40px 0px" }
57+
{ threshold: 0.1, rootMargin: "-40px 0px" },
5858
);
59-
els.forEach((el) => observer.observe(el));
59+
for (const el of els) {
60+
observer.observe(el);
61+
}
6062
return () => observer.disconnect();
6163
}, []);
6264

@@ -91,7 +93,9 @@ function App() {
9193
<h1 className="hero-stagger text-[2.75rem] sm:text-5xl md:text-6xl lg:text-7xl xl:text-8xl font-black leading-[1] tracking-[-0.04em]">
9294
<span className="block">YOUR TERMINAL</span>
9395
<span className="block">IS TAKEN.</span>
94-
<span className="block text-accent">YOUR MENU BAR ISN&rsquo;T.</span>
96+
<span className="block text-accent">
97+
YOUR MENU BAR ISN&rsquo;T.
98+
</span>
9599
</h1>
96100

97101
<p className="hero-stagger mt-6 md:mt-8 text-base md:text-lg text-muted-foreground max-w-xl leading-relaxed">

web/src/index.css

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
@import "tailwindcss";
22

33
@theme {
4-
--color-background: #0A0A0A;
5-
--color-foreground: #FAFAFA;
6-
--color-muted: #1A1A1A;
4+
--color-background: #0a0a0a;
5+
--color-foreground: #fafafa;
6+
--color-muted: #1a1a1a;
77
--color-muted-foreground: #737373;
8-
--color-accent: #FF3D00;
9-
--color-accent-foreground: #0A0A0A;
8+
--color-accent: #ff3d00;
9+
--color-accent-foreground: #0a0a0a;
1010
--color-border: #262626;
1111

1212
--font-sans: "Inter Tight", "Inter", system-ui, sans-serif;

web/src/main.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import { StrictMode } from 'react'
2-
import { createRoot } from 'react-dom/client'
3-
import './index.css'
4-
import App from './App.tsx'
1+
import { StrictMode } from "react";
2+
import { createRoot } from "react-dom/client";
3+
import "./index.css";
4+
import App from "./App.tsx";
55

6-
createRoot(document.getElementById('root')!).render(
6+
const root = document.getElementById("root");
7+
if (!root) {
8+
throw new Error("Root element not found");
9+
}
10+
createRoot(root).render(
711
<StrictMode>
812
<App />
913
</StrictMode>,
10-
)
14+
);

0 commit comments

Comments
 (0)