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 ( -
- -
-
- {children} -
-
-
- ); - } 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 * * * *" ]