project-nomad/admin/inertia/lib/icons.ts
Chris Sherwood bd65c885be
feat(supply-depot): add MeshCore Web with self-signed HTTPS
Adds the MeshCore web client to the Supply Depot catalog (host port 8500),
alongside the existing Meshtastic apps. Uses aXistem's prebuilt image of Liam
Cottle's MeshCore client (MeshCore is a sibling LoRa mesh project to Meshtastic).

The image is stock nginx serving a static Flutter build over HTTP, but the
client reaches radios via Web Bluetooth / Web Serial, which browsers only allow
from a secure (HTTPS) context. So we serve it over HTTPS: a new preinstall hook
generates a self-signed cert + a small SSL nginx config into storage/meshcore-web,
both bind-mounted into the container (the config over the image's default.conf),
publishing 443. Same one-time browser-warning approach as Vaultwarden, whose
openssl cert generation is refactored into a shared _ensureSelfSignedCert helper.

Also adds a NOMAD-specific docs section + Manage>Docs anchor, and registers the
IconAntenna icon. Meshtastic Web left unchanged.

Validated on NOMAD3 (v1.33.0-rc.1): the image + SSL config + self-signed cert
serves the MeshCore Flutter app over HTTPS 200 with working SPA fallback.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 04:47:06 +00:00

140 lines
2.4 KiB
TypeScript

import {
IconAntenna,
IconArrowUp,
IconBook,
IconBooks,
IconBox,
IconBrain,
IconBrandDocker,
IconBroadcast,
IconChefHat,
IconCheck,
IconChevronDown,
IconChevronLeft,
IconChevronRight,
IconCircleCheck,
IconCloudDownload,
IconCloudUpload,
IconCode,
IconCopy,
IconCpu,
IconDatabase,
IconDownload,
IconExternalLink,
IconFileDescription,
IconFolderOpen,
IconHome,
IconInfoCircle,
IconLogs,
IconMap,
IconMenu2,
IconMoon,
IconMovie,
IconNotes,
IconPencil,
IconPlant,
IconPlayerPlay,
IconPlayerStop,
IconPlus,
IconRefresh,
IconRefreshAlert,
IconRobot,
IconSchool,
IconSearch,
IconServer,
IconSettings,
IconShieldCheck,
IconShieldLock,
IconStethoscope,
IconSun,
IconTool,
IconTrash,
IconUpload,
IconWand,
IconWifi,
IconWorld,
IconX,
IconAlertTriangle,
IconXboxX,
IconBug,
IconCopy,
IconLibrary,
IconServer,
IconMenu2,
IconArrowLeft,
IconArrowRight,
} from '@tabler/icons-react'
/**
* An explicit import of used icons in the DynamicIcon component to ensure we get maximum tree-shaking
* while still providing us a nice DX with the DynamicIcon component and icon name inference.
* Only icons that are actually used by DynamicIcon should be added here. Yes, it does introduce
* some manual maintenance, but the bundle size benefits are worth it since we use a (relatively)
* very limited subset of the full Tabler Icons library.
*/
export const icons = {
IconAntenna,
IconAlertTriangle,
IconArrowLeft,
IconArrowRight,
IconArrowUp,
IconBook,
IconBooks,
IconBox,
IconBrain,
IconBrandDocker,
IconBroadcast,
IconBug,
IconChefHat,
IconCheck,
IconChevronDown,
IconChevronLeft,
IconChevronRight,
IconCircleCheck,
IconCloudDownload,
IconCloudUpload,
IconCode,
IconCopy,
IconCpu,
IconDatabase,
IconDownload,
IconExternalLink,
IconFileDescription,
IconFolderOpen,
IconHome,
IconInfoCircle,
IconLibrary,
IconLogs,
IconMap,
IconMenu2,
IconMoon,
IconMovie,
IconNotes,
IconPencil,
IconPlant,
IconPlayerPlay,
IconPlayerStop,
IconPlus,
IconRefresh,
IconRefreshAlert,
IconRobot,
IconSchool,
IconSearch,
IconServer,
IconSettings,
IconShieldCheck,
IconShieldLock,
IconStethoscope,
IconSun,
IconTool,
IconTrash,
IconUpload,
IconWand,
IconWifi,
IconWorld,
IconX,
IconXboxX
} as const
export type DynamicIconName = keyof typeof icons