From 0c1ab3db486e301aaf3db243b1b29a43759f9f85 Mon Sep 17 00:00:00 2001
From: shuaiplus <2327005759@qq.com>
Date: Thu, 7 May 2026 22:23:39 +0800
Subject: [PATCH] feat: update development and deployment scripts to include
build step; refactor navigation links in AppAuthenticatedShell component
---
package.json | 8 +-
.../src/components/AppAuthenticatedShell.tsx | 143 +++++-------------
webapp/src/styles/shell.css | 65 +-------
wrangler.kv.toml | 15 --
wrangler.toml | 15 --
5 files changed, 41 insertions(+), 205 deletions(-)
diff --git a/package.json b/package.json
index f2d9602..105378f 100644
--- a/package.json
+++ b/package.json
@@ -7,16 +7,16 @@
"main": "src/index.ts",
"type": "module",
"scripts": {
- "dev": "wrangler dev -c wrangler.toml",
- "dev:kv": "wrangler dev -c wrangler.kv.toml",
+ "dev": "npm run build && wrangler dev -c wrangler.toml",
+ "dev:kv": "npm run build && wrangler dev -c wrangler.kv.toml",
"dev:demo": "vite --config webapp/vite.config.ts --mode demo --host 127.0.0.1 --port 5174",
"build": "vite build --config webapp/vite.config.ts",
"build:demo": "vite build --config webapp/vite.config.ts --mode demo && node scripts/pages-spa-redirects.cjs",
"domains:sync": "node scripts/sync-global-domains.mjs",
"i18n": "node scripts/i18n-validate.cjs",
"i18n:validate": "node scripts/i18n-validate.cjs",
- "deploy": "wrangler deploy",
- "deploy:kv": "wrangler deploy -c wrangler.kv.toml",
+ "deploy": "npm run build && wrangler deploy",
+ "deploy:kv": "npm run build && wrangler deploy -c wrangler.kv.toml",
"deploy:demo": "npm run build:demo && wrangler pages deploy dist --project-name nw-demo"
},
"keywords": [
diff --git a/webapp/src/components/AppAuthenticatedShell.tsx b/webapp/src/components/AppAuthenticatedShell.tsx
index 58eea71..ffa63da 100644
--- a/webapp/src/components/AppAuthenticatedShell.tsx
+++ b/webapp/src/components/AppAuthenticatedShell.tsx
@@ -1,6 +1,4 @@
-import { ChevronDown, Clock3, Cloud, Folder as FolderIcon, KeyRound, Lock, LogOut, Send as SendIcon, Settings as SettingsIcon, ShieldUser } from 'lucide-preact';
-import type { ComponentChildren } from 'preact';
-import { useState } from 'preact/hooks';
+import { ArrowUpDown, Clock3, Cloud, Folder as FolderIcon, Globe2, KeyRound, Lock, LogOut, MonitorSmartphone, Send as SendIcon, Settings as SettingsIcon, ShieldUser, Users } from 'lucide-preact';
import { Link } from 'wouter';
import AppMainRoutes from '@/components/AppMainRoutes';
import ThemeSwitch from '@/components/ThemeSwitch';
@@ -34,53 +32,6 @@ function isAdminProfile(profile: Profile | null): boolean {
export default function AppAuthenticatedShell(props: AppAuthenticatedShellProps) {
const routeAnimationKey = props.isImportRoute ? props.importRoute : props.location;
const isAdmin = isAdminProfile(props.profile);
- const vaultActive = props.location === '/vault' || props.location === '/vault/totp';
- const settingsActive = props.location === props.settingsAccountRoute || props.location === '/settings/domain-rules';
- const dataActive = props.location === '/backup' || props.isImportRoute;
- const managementActive = props.location === '/admin' || props.location === '/security/devices';
- const [expandedGroups, setExpandedGroups] = useState({
- vault: true,
- settings: false,
- data: false,
- management: false,
- });
-
- function toggleGroup(group: keyof typeof expandedGroups): void {
- setExpandedGroups((current) => ({ ...current, [group]: !current[group] }));
- }
-
- function groupOpen(group: keyof typeof expandedGroups, active: boolean): boolean {
- return expandedGroups[group] || active;
- }
-
- function renderNavGroup(
- group: keyof typeof expandedGroups,
- title: string,
- icon: ComponentChildren,
- active: boolean,
- children: ComponentChildren
- ) {
- const open = groupOpen(group, active);
- return (
-
-
-
-
- );
- }
return (
@@ -125,70 +76,46 @@ export default function AppAuthenticatedShell(props: AppAuthenticatedShellProps)
diff --git a/webapp/src/styles/shell.css b/webapp/src/styles/shell.css
index 3be1c35..a0f99c7 100644
--- a/webapp/src/styles/shell.css
+++ b/webapp/src/styles/shell.css
@@ -167,73 +167,12 @@
@apply flex items-center gap-2.5 rounded-xl border border-transparent px-3 py-2.5 text-sm font-semibold text-muted-strong no-underline transition;
}
-.side-nav-group {
- @apply grid gap-1;
-}
-
-.side-group-trigger {
- @apply flex w-full cursor-pointer items-center gap-2.5 rounded-xl border border-transparent px-3 py-2.5 text-left text-sm font-semibold text-muted-strong transition;
- background: transparent;
-}
-
-.side-group-trigger:hover {
- background: #fff;
- border-color: rgba(128, 152, 192, 0.18);
- color: var(--text);
- box-shadow: 0 10px 18px rgba(15, 23, 42, 0.04);
-}
-
-.side-group-trigger.active {
- color: var(--primary-strong);
-}
-
-.side-group-trigger span {
+.side-link span {
@apply min-w-0 flex-1 truncate;
}
-.side-group-chevron {
+.side-link svg {
@apply shrink-0;
- transition: transform 190ms var(--ease-out-soft);
-}
-
-.side-nav-group.open .side-group-chevron {
- transform: rotate(180deg);
-}
-
-.side-subnav {
- display: grid;
- grid-template-rows: 0fr;
- opacity: 0;
- transform: translateY(-4px);
- transition:
- grid-template-rows 220ms var(--ease-smooth),
- opacity 170ms var(--ease-smooth),
- transform 220ms var(--ease-out-soft);
-}
-
-.side-subnav.open {
- grid-template-rows: 1fr;
- opacity: 1;
- transform: translateY(0);
-}
-
-.side-subnav-inner {
- @apply grid gap-1 overflow-hidden pl-[38px] pr-1;
-}
-
-.side-sub-link {
- @apply block rounded-lg border border-transparent px-3 py-2 text-sm font-semibold text-muted no-underline transition;
-}
-
-.side-sub-link:hover {
- background: rgba(255, 255, 255, 0.78);
- color: var(--text);
-}
-
-.side-sub-link.active {
- background: rgba(37, 99, 235, 0.10);
- border-color: rgba(37, 99, 235, 0.18);
- color: var(--primary-strong);
}
.side-link:hover {
diff --git a/wrangler.kv.toml b/wrangler.kv.toml
index 1e17497..f2ce7f6 100644
--- a/wrangler.kv.toml
+++ b/wrangler.kv.toml
@@ -2,27 +2,12 @@ name = "nodewarden"
main = "src/index.ts"
compatibility_date = "2024-01-01"
-[observability]
-enabled = false
-
-[observability.logs]
-enabled = true
-head_sampling_rate = 1
-persist = true
-invocation_logs = true
-
-[observability.traces]
-enabled = false
-
[assets]
binding = "ASSETS"
directory = "./dist"
not_found_handling = "single-page-application"
run_worker_first = false
-[build]
-command = "npm run build"
-
[triggers]
crons = [ "*/5 * * * *" ]
diff --git a/wrangler.toml b/wrangler.toml
index 56b9099..2d0dc72 100644
--- a/wrangler.toml
+++ b/wrangler.toml
@@ -2,27 +2,12 @@ name = "nodewarden"
main = "src/index.ts"
compatibility_date = "2024-01-01"
-[observability]
-enabled = false
-
-[observability.logs]
-enabled = true
-head_sampling_rate = 1
-persist = true
-invocation_logs = true
-
-[observability.traces]
-enabled = false
-
[assets]
binding = "ASSETS"
directory = "./dist"
not_found_handling = "single-page-application"
run_worker_first = false
-[build]
-command = "npm run build"
-
[triggers]
crons = [ "*/5 * * * *" ]