import type { LucideIcon } from 'lucide-react'; import { Globe, Cable, Radio, FileX2, Users, ShieldCheck, Plug } from 'lucide-react'; /** * The sections, mirroring Nginx Proxy Manager's own tabs. * * Deliberately NPM's vocabulary rather than ours. Somebody who has used NPM should find the same words in * the same order, and somebody who has not is going to end up in NPM's UI eventually anyway — inventing * better names would only mean they have to learn both. * * `404 Hosts` is the one that reads oddly, and it is NPM's own name: a domain served deliberately as * nothing. The description says so, because the label cannot. */ export type SectionKey = | 'proxy-hosts' | 'redirections' | 'streams' | 'dead-hosts' | 'access-lists' | 'certificates' | 'connection'; export type Section = { key: SectionKey; label: string; icon: LucideIcon; /** One line under the label in the nav. What this is, for somebody who does not already know. */ hint: string; /** The plugin route its count comes from, or null for the settings pane. */ path: string | null; }; export const SECTIONS: Section[] = [ { key: 'proxy-hosts', label: 'Proxy Hosts', icon: Globe, hint: 'A domain, forwarded to something running here', path: '/proxy-manager/hosts', }, { key: 'redirections', label: 'Redirection Hosts', icon: Cable, hint: 'A domain that sends visitors somewhere else', path: '/proxy-manager/redirections', }, { key: 'streams', label: 'Streams', icon: Radio, hint: 'A raw TCP or UDP port, forwarded', path: '/proxy-manager/streams', }, { key: 'dead-hosts', label: '404 Hosts', icon: FileX2, hint: 'A domain served deliberately as nothing', path: '/proxy-manager/dead-hosts', }, { key: 'access-lists', label: 'Access Lists', icon: Users, hint: 'Who is allowed to reach a host', path: '/proxy-manager/access-lists', }, { key: 'certificates', label: 'Certificates', icon: ShieldCheck, hint: 'TLS, and how long each one has left', path: '/proxy-manager/certificates', }, { key: 'connection', label: 'Connection', icon: Plug, hint: "Where NPM is, and the credential — owner only", path: null, }, ]; export const DEFAULT_SECTION: SectionKey = 'proxy-hosts'; export const isSectionKey = (value: string | null): value is SectionKey => !!value && SECTIONS.some((s) => s.key === value);