Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion Sources/devtail/PopOutProcessView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ struct PopOutProcessView: View {
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
.background(Color(nsColor: .textBackgroundColor))
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background {
Rectangle()
.fill(.ultraThinMaterial)
.opacity(0.6)
.ignoresSafeArea()
}
}
}
6 changes: 5 additions & 1 deletion Sources/devtail/PopOutWindowManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,15 @@ final class PopOutWindowManager {

let window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 480, height: 400),
styleMask: [.titled, .closable, .resizable, .miniaturizable],
styleMask: [.titled, .closable, .resizable, .miniaturizable, .fullSizeContentView],
backing: .buffered,
defer: false
)

window.titlebarAppearsTransparent = true
window.isOpaque = false
window.backgroundColor = .clear

let hostingView = NSHostingView(rootView: PopOutProcessView(buffer: buffer))
window.contentView = hostingView
window.title = title
Expand Down
56 changes: 56 additions & 0 deletions web/biome.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{
"$schema": "https://biomejs.dev/schemas/2.4.11/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": false,
"includes": ["**"]
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "error"
},
"correctness": {
"noUnusedVariables": "error",
"noUnusedImports": "error",
"noUnusedFunctionParameters": "error"
},
"style": {
"useBlockStatements": "error"
},
"complexity": {
"noImportantStyles": "off"
}
}
},
"javascript": {
"formatter": {
"quoteStyle": "double",
"semicolons": "always"
}
},
"css": {
"parser": {
"tailwindDirectives": true
}
},
"assist": {
"enabled": true,
"actions": {
"source": {
"organizeImports": "on"
}
}
}
}
430 changes: 430 additions & 0 deletions web/bun.lock

Large diffs are not rendered by default.

23 changes: 0 additions & 23 deletions web/eslint.config.js

This file was deleted.

10 changes: 4 additions & 6 deletions web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,22 @@
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"check": "biome check --write .",
"lint": "biome lint .",
"format": "biome check --write .",
"preview": "vite preview"
},
"dependencies": {
"react": "^19.2.4",
"react-dom": "^19.2.4"
},
"devDependencies": {
"@eslint/js": "^9.39.4",
"@biomejs/biome": "^2.3.5",
"@tailwindcss/vite": "^4.2.2",
"@types/node": "^24.12.2",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.1",
"eslint": "^9.39.4",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^17.4.0",
"tailwindcss": "^4.2.2",
"typescript": "~6.0.2",
"typescript-eslint": "^8.58.0",
Expand Down
24 changes: 18 additions & 6 deletions web/src/App.css
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,24 @@
opacity: 0;
animation: fadeInUp 0.7s cubic-bezier(0.25, 0, 0, 1) forwards;
}
.hero-stagger:nth-child(1) { animation-delay: 0.05s; }
.hero-stagger:nth-child(2) { animation-delay: 0.15s; }
.hero-stagger:nth-child(3) { animation-delay: 0.25s; }
.hero-stagger:nth-child(4) { animation-delay: 0.35s; }
.hero-stagger:nth-child(5) { animation-delay: 0.45s; }
.hero-stagger:nth-child(6) { animation-delay: 0.55s; }
.hero-stagger:nth-child(1) {
animation-delay: 0.05s;
}
.hero-stagger:nth-child(2) {
animation-delay: 0.15s;
}
.hero-stagger:nth-child(3) {
animation-delay: 0.25s;
}
.hero-stagger:nth-child(4) {
animation-delay: 0.35s;
}
.hero-stagger:nth-child(5) {
animation-delay: 0.45s;
}
.hero-stagger:nth-child(6) {
animation-delay: 0.55s;
}

/* ── Scroll reveal ── */
.scroll-reveal {
Expand Down
10 changes: 7 additions & 3 deletions web/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,11 @@ function App() {
}
});
},
{ threshold: 0.1, rootMargin: "-40px 0px" }
{ threshold: 0.1, rootMargin: "-40px 0px" },
);
els.forEach((el) => observer.observe(el));
for (const el of els) {
observer.observe(el);
}
return () => observer.disconnect();
}, []);

Expand Down Expand Up @@ -91,7 +93,9 @@ function App() {
<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]">
<span className="block">YOUR TERMINAL</span>
<span className="block">IS TAKEN.</span>
<span className="block text-accent">YOUR MENU BAR ISN&rsquo;T.</span>
<span className="block text-accent">
YOUR MENU BAR ISN&rsquo;T.
</span>
</h1>

<p className="hero-stagger mt-6 md:mt-8 text-base md:text-lg text-muted-foreground max-w-xl leading-relaxed">
Expand Down
10 changes: 5 additions & 5 deletions web/src/index.css
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
@import "tailwindcss";

@theme {
--color-background: #0A0A0A;
--color-foreground: #FAFAFA;
--color-muted: #1A1A1A;
--color-background: #0a0a0a;
--color-foreground: #fafafa;
--color-muted: #1a1a1a;
--color-muted-foreground: #737373;
--color-accent: #FF3D00;
--color-accent-foreground: #0A0A0A;
--color-accent: #ff3d00;
--color-accent-foreground: #0a0a0a;
--color-border: #262626;

--font-sans: "Inter Tight", "Inter", system-ui, sans-serif;
Expand Down
16 changes: 10 additions & 6 deletions web/src/main.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.tsx'
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import "./index.css";
import App from "./App.tsx";

createRoot(document.getElementById('root')!).render(
const root = document.getElementById("root");
if (!root) {
throw new Error("Root element not found");
}
createRoot(root).render(
<StrictMode>
<App />
</StrictMode>,
)
);
8 changes: 4 additions & 4 deletions web/vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
import tailwindcss from "@tailwindcss/vite";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";

// https://vite.dev/config/
export default defineConfig({
plugins: [react(), tailwindcss()],
})
});
Loading