* feat: Add Web UI IP:Port tracking and access functionality - Add web_ui_ip and web_ui_port columns to installed_scripts table with migration - Update database CRUD methods to handle new Web UI fields - Add terminal output parsing to auto-detect Web UI URLs during installation - Create autoDetectWebUI mutation that runs hostname -I in containers via SSH - Add Web UI column to desktop table with editable IP and port fields - Add Open UI button that opens http://ip:port in new tab - Add Re-detect button for manual IP detection using script metadata - Update mobile card view with Web UI fields and buttons - Fix nested button hydration error in ContextualHelpIcon - Prioritize script metadata interface_port over existing database values - Use pct exec instead of pct enter for container command execution - Add comprehensive error handling and user feedback - Style auto-detect button with muted colors and Re-detect text Features: - Automatic Web UI detection during script installation - Manual IP detection with port lookup from script metadata - Editable IP and port fields in both desktop and mobile views - Clickable Web UI links that open in new tabs - Support for both local and SSH script executions - Proper port detection from script JSON metadata (e.g., actualbudget:5006) - Clean UI with subtle button styling and clear text labels * feat: Disable Open UI button when container is stopped - Add disabled state to Open UI button in desktop table when container is stopped - Update mobile card Open UI button to be disabled when container is stopped - Apply consistent styling with Shell and Update buttons - Prevent users from accessing Web UI when container is not running - Add cursor-not-allowed styling for disabled clickable IP links * feat: Align Re-detect buttons consistently in Web UI column - Change flex layout from space-x-2 to justify-between for consistent button alignment - Add flex-shrink-0 to prevent IP:port text and buttons from shrinking - Add ml-2 margin to Re-detect button for proper spacing - Apply changes to both desktop table and mobile card views - Buttons now align vertically regardless of IP:port text length * feat: Add actions dropdown menu with conditional Start/Stop colors and update help - Create dropdown-menu.tsx component using Radix UI primitives - Move all action buttons except Edit into dropdown menu - Keep Edit and Save/Cancel buttons always visible - Add conditional styling: Start (green), Stop (red) - Apply changes to both desktop table and mobile card views - Add smart visibility - dropdown only shows when actions available - Auto-close dropdown after clicking any action - Style dropdown to match existing button theme - Fix syntax error in dropdown-menu.tsx component - Update help section with Web UI Access and Actions Dropdown documentation - Add detailed explanations of auto-detection, IP/port tracking, and color coding * Fix TypeScript build error in server.js - Updated parseWebUIUrl JSDoc return type from Object|null to {ip: string, port: number}|null - This fixes the TypeScript error where 'ip' property was not recognized on type 'Object' - Build now completes successfully without errors
90 lines
2.6 KiB
JSON
90 lines
2.6 KiB
JSON
{
|
|
"name": "pve-scripts-local",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"build": "next build",
|
|
"check": "next lint && tsc --noEmit",
|
|
"dev": "next dev",
|
|
"dev:server": "node server.js",
|
|
"dev:next": "next dev --turbo",
|
|
"format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,mdx}\" --cache",
|
|
"format:write": "prettier --write \"**/*.{ts,tsx,js,jsx,mdx}\" --cache",
|
|
"lint": "next lint",
|
|
"lint:fix": "next lint --fix",
|
|
"preview": "next build && next start",
|
|
"start": "node server.js",
|
|
"test": "vitest",
|
|
"test:ui": "vitest --ui",
|
|
"test:run": "vitest run",
|
|
"test:coverage": "vitest run --coverage",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
"@radix-ui/react-slot": "^1.2.3",
|
|
"@t3-oss/env-nextjs": "^0.13.8",
|
|
"@tanstack/react-query": "^5.90.3",
|
|
"@trpc/client": "^11.6.0",
|
|
"@trpc/react-query": "^11.6.0",
|
|
"@trpc/server": "^11.6.0",
|
|
"@types/react-syntax-highlighter": "^15.5.13",
|
|
"@types/ws": "^8.18.1",
|
|
"@xterm/addon-fit": "^0.10.0",
|
|
"@xterm/addon-web-links": "^0.11.0",
|
|
"@xterm/xterm": "^5.5.0",
|
|
"bcryptjs": "^3.0.2",
|
|
"better-sqlite3": "^12.4.1",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"lucide-react": "^0.545.0",
|
|
"next": "^15.5.5",
|
|
"node-pty": "^1.0.0",
|
|
"react": "^19.0.0",
|
|
"react-dom": "^19.0.0",
|
|
"react-syntax-highlighter": "^15.6.6",
|
|
"refractor": "^5.0.0",
|
|
"server-only": "^0.0.1",
|
|
"strip-ansi": "^7.1.2",
|
|
"superjson": "^2.2.1",
|
|
"tailwind-merge": "^3.3.1",
|
|
"ws": "^8.18.3",
|
|
"zod": "^4.1.12"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/eslintrc": "^3.3.1",
|
|
"@tailwindcss/postcss": "^4.0.15",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.0",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/bcryptjs": "^3.0.0",
|
|
"@types/better-sqlite3": "^7.6.8",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/node": "^24.7.2",
|
|
"@types/react": "^19.0.0",
|
|
"@types/react-dom": "^19.2.2",
|
|
"@vitejs/plugin-react": "^5.0.2",
|
|
"@vitest/coverage-v8": "^3.2.4",
|
|
"@vitest/ui": "^3.2.4",
|
|
"eslint": "^9.23.0",
|
|
"eslint-config-next": "^15.5.4",
|
|
"jsdom": "^27.0.0",
|
|
"postcss": "^8.5.3",
|
|
"prettier": "^3.5.3",
|
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
|
"tailwindcss": "^4.1.14",
|
|
"typescript": "^5.8.2",
|
|
"typescript-eslint": "^8.46.1",
|
|
"vitest": "^3.2.4"
|
|
},
|
|
"ct3aMetadata": {
|
|
"initVersion": "7.39.3"
|
|
},
|
|
"packageManager": "npm@10.9.3",
|
|
"overrides": {
|
|
"prismjs": "^1.30.0"
|
|
}
|
|
}
|