From e3dd6cbef5a79b58a9fb7bcfd2a6d7f006a2a62b Mon Sep 17 00:00:00 2001 From: MacRimi Date: Sat, 22 Nov 2025 20:27:41 +0100 Subject: [PATCH] Update AppImage --- AppImage/app/globals.css | 250 ++++++++++--------------- AppImage/components/terminal-panel.tsx | 38 +++- 2 files changed, 132 insertions(+), 156 deletions(-) diff --git a/AppImage/app/globals.css b/AppImage/app/globals.css index 813d7bc..7e0954e 100644 --- a/AppImage/app/globals.css +++ b/AppImage/app/globals.css @@ -1,156 +1,133 @@ -@import "tailwindcss"; -@import "tw-animate-css"; - -@custom-variant dark (&:is(.dark *)); +@tailwind base; +@tailwind components; +@tailwind utilities; +/* ===================== */ +/* Light Mode (default) */ +/* ===================== */ :root { - --background: oklch(1 0 0); - --foreground: oklch(0.145 0 0); + --background: oklch(1 0 0); /* blanco */ + --foreground: oklch(0.145 0 0); /* casi negro */ + --card: oklch(1 0 0); - --card-foreground: oklch(0.145 0 0); - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.145 0 0); - --primary: oklch(0.205 0 0); - --primary-foreground: oklch(0.985 0 0); + --card-foreground: var(--foreground); + + --popover: var(--card); + --popover-foreground: var(--foreground); + + --primary: oklch(0.205 0 0); /* gris oscuro */ + --primary-foreground: oklch(0.985 0 0); /* blanco */ + --secondary: oklch(0.97 0 0); - --secondary-foreground: oklch(0.205 0 0); + --secondary-foreground: var(--primary); + --muted: oklch(0.97 0 0); - --muted-foreground: oklch(0.556 0 0); + --muted-foreground: oklch(0.556 0 0); /* gris medio */ + --accent: oklch(0.97 0 0); - --accent-foreground: oklch(0.205 0 0); + --accent-foreground: var(--primary); + --destructive: oklch(0.577 0.245 27.325); - --destructive-foreground: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.145 0 0); + --border: oklch(0.922 0 0); - --input: oklch(0.922 0 0); + --input: var(--border); --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); --chart-2: oklch(0.6 0.118 184.704); --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); + --radius: 0.625rem; + --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.145 0 0); - --sidebar-primary: oklch(0.205 0 0); + --sidebar-foreground: var(--foreground); + --sidebar-primary: var(--primary); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.97 0 0); - --sidebar-accent-foreground: oklch(0.205 0 0); - --sidebar-border: oklch(0.922 0 0); - --sidebar-ring: oklch(0.708 0 0); + --sidebar-accent-foreground: var(--primary); + --sidebar-border: var(--border); + --sidebar-ring: var(--ring); } +/* ===================== */ +/* Dark Mode (gris) */ +/* ===================== */ .dark { - --background: oklch(0.145 0 0); - --foreground: oklch(0.985 0 0); - --card: oklch(0.145 0 0); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.145 0 0); - --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.985 0 0); - --primary-foreground: oklch(0.205 0 0); - --secondary: oklch(0.269 0 0); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.269 0 0); - --muted-foreground: oklch(0.708 0 0); - --accent: oklch(0.269 0 0); - --accent-foreground: oklch(0.985 0 0); - --destructive: oklch(0.396 0.141 25.723); - --destructive-foreground: oklch(0.637 0.237 25.331); - --border: oklch(0.269 0 0); - --input: oklch(0.269 0 0); - --ring: oklch(0.439 0 0); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.205 0 0); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.269 0 0); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(0.269 0 0); - --sidebar-ring: oklch(0.439 0 0); -} - -@theme inline { - /* optional: --font-sans, --font-serif, --font-mono if they are applied in the layout.tsx */ - --color-background: var(--background); - --color-foreground: var(--foreground); - --color-card: var(--card); - --color-card-foreground: var(--card-foreground); - --color-popover: var(--popover); - --color-popover-foreground: var(--popover-foreground); - --color-primary: var(--primary); - --color-primary-foreground: var(--primary-foreground); - --color-secondary: var(--secondary); - --color-secondary-foreground: var(--secondary-foreground); - --color-muted: var(--muted); - --color-muted-foreground: var(--muted-foreground); - --color-accent: var(--accent); - --color-accent-foreground: var(--accent-foreground); - --color-destructive: var(--destructive); - --color-destructive-foreground: var(--destructive-foreground); - --color-border: var(--border); - --color-input: var(--input); - --color-ring: var(--ring); - --color-chart-1: var(--chart-1); - --color-chart-2: var(--chart-2); - --color-chart-3: var(--chart-3); - --color-chart-4: var(--chart-4); - --color-chart-5: var(--chart-5); - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); - --color-sidebar: var(--sidebar); - --color-sidebar-foreground: var(--sidebar-foreground); - --color-sidebar-primary: var(--sidebar-primary); - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); - --color-sidebar-accent: var(--sidebar-accent); - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); - --color-sidebar-border: var(--sidebar-border); - --color-sidebar-ring: var(--sidebar-ring); + --background: oklch(0.22 0 0); /* gris oscuro */ + --foreground: oklch(0.97 0 0); /* blanco/gris claro */ + + --card: oklch(0.24 0 0); + --card-foreground: var(--foreground); + + --popover: var(--card); + --popover-foreground: var(--foreground); + + --primary: oklch(0.83 0 0); /* casi blanco */ + --primary-foreground: var(--background); + + --secondary: oklch(0.28 0 0); + --secondary-foreground: oklch(0.92 0 0); + + --muted: oklch(0.26 0 0); + --muted-foreground: oklch(0.72 0 0); + + --accent: oklch(0.28 0 0); + --accent-foreground: var(--primary); + + --destructive: oklch(0.53 0.25 27); + --destructive-foreground: oklch(0.9 0 0); + + --border: oklch(0.34 0 0); + --input: var(--border); + --ring: oklch(0.55 0 0); + + --chart-1: oklch(0.60 0.20 255); + --chart-2: oklch(0.70 0.16 165); + --chart-3: oklch(0.76 0.19 70); + --chart-4: oklch(0.63 0.25 305); + --chart-5: oklch(0.66 0.24 20); + + --sidebar: oklch(0.24 0 0); + --sidebar-foreground: var(--foreground); + --sidebar-primary: var(--chart-1); + --sidebar-primary-foreground: var(--foreground); + --sidebar-accent: oklch(0.28 0 0); + --sidebar-accent-foreground: var(--foreground); + --sidebar-border: var(--border); + --sidebar-ring: var(--ring); } +/* ===================== */ +/* Base layer */ +/* ===================== */ @layer base { * { - @apply border-border outline-ring/50; + @apply border-border; } + body { @apply bg-background text-foreground; } + + /* Foco accesible */ + :is(button,[role="button"],a,input,select,textarea,[tabindex]:not([tabindex="-1"])):focus { + @apply outline-none; + } + :is(button,[role="button"],a,input,select,textarea,[tabindex]:not([tabindex="-1"])):focus-visible { + @apply ring-2; + --tw-ring-color: var(--ring); + --tw-ring-opacity: 0.5; /* equivalente al /50 */ + } } /* ===================== */ -/* Base Styles */ +/* Ajustes para Charts */ /* ===================== */ -/* Removed @layer and converted to native CSS for Tailwind v4 compatibility */ -* { - border-color: var(--border); - outline-color: color-mix(in oklch, var(--ring), transparent 50%); -} - -body { - background-color: var(--background); - color: var(--foreground); -} - -/* Foco accesible */ -:is(button, [role="button"], a, input, select, textarea, [tabindex]:not([tabindex="-1"])):focus { - outline: none; -} - -:is(button, [role="button"], a, input, select, textarea, [tabindex]:not([tabindex="-1"])):focus-visible { - outline: 2px solid color-mix(in oklch, var(--ring), transparent 50%); - outline-offset: 2px; -} - @layer components { - /* ===================== */ - /* Recharts axis styles */ - /* ===================== */ + /* Recharts axis */ .recharts-cartesian-axis-tick tspan { fill: var(--muted-foreground); } @@ -159,44 +136,11 @@ body { stroke: var(--border); } - /* ===================== */ - /* Chart.js axis styles */ - /* ===================== */ + /* Chart.js axis */ .chartjs-render-monitor text { fill: var(--muted-foreground); } .chartjs-render-monitor line { stroke: var(--border); } - - /* ===================== */ - /* Terminal Fixes */ - /* ===================== */ - /* Fixed xterm.js padding to center dialog menus correctly */ - .xterm { - padding: 0 !important; - margin: 0 !important; - width: 100% !important; - height: 100% !important; - } - - .xterm .xterm-viewport { - width: 100% !important; - overflow-y: scroll !important; - overflow-x: hidden !important; - } - - .xterm .xterm-screen { - width: 100% !important; - } - - .xterm .xterm-rows { - padding: 0 !important; - } - - .xterm .xterm-helpers { - position: absolute; - top: 0; - left: 0; - } } diff --git a/AppImage/components/terminal-panel.tsx b/AppImage/components/terminal-panel.tsx index 38acb3a..f6377e0 100644 --- a/AppImage/components/terminal-panel.tsx +++ b/AppImage/components/terminal-panel.tsx @@ -319,9 +319,26 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl term.open(container) + const xtermElement = container.querySelector(".xterm") as HTMLElement + const xtermViewport = container.querySelector(".xterm-viewport") as HTMLElement + const xtermScreen = container.querySelector(".xterm-screen") as HTMLElement + + if (xtermElement) { + xtermElement.style.padding = "0" + xtermElement.style.margin = "0" + } + if (xtermViewport) { + xtermViewport.style.padding = "0" + xtermViewport.style.margin = "0" + } + if (xtermScreen) { + xtermScreen.style.padding = "0" + xtermScreen.style.margin = "0" + } + setTimeout(() => { fitAddon.fit() - }, 100) + }, 50) const wsUrl = websocketUrl || getWebSocketUrl() const ws = new WebSocket(wsUrl) @@ -563,7 +580,15 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl {terminals.map((terminal) => ( -
+
))} @@ -586,7 +611,14 @@ export const TerminalPanel: React.FC = ({ websocketUrl, onCl )}
-
+
))}