acls: refactor editor into React components

Extract the ACL editor surface (was 759 lines of mixed Astro/Alpine/HTML
in src/pages/acls.astro) into a focused React component tree under
src/components/acls/:

- ACLEditor.tsx           — top-level state + layout
- RuleEditor.tsx          — per-rule fields and reordering
- SourceSelector.tsx      — source-side identity picker
- DestinationSelector.tsx — destination + port picker
- types.ts                — shared TS shapes
- validation.ts           — pre-submit validation helpers

acls.astro becomes a thin SSR wrapper that mounts <ACLEditor />.

- astro.config.mjs: add @astrojs/react integration
- package.json: pull in @astrojs/react, react@18, react-dom@18, types,
  ip-address + is-cidr (CIDR/IP validation in source/dest editors),
  lucide-react (icons)
- description string: replace escaped 🤠 sequence with the literal char
This commit is contained in:
Ryan Malloy 2026-06-06 15:08:51 -06:00
parent 21175c5b7a
commit 36c1b18724
11 changed files with 1306 additions and 646 deletions

View file

@ -1,7 +1,7 @@
{
"name": "heady",
"version": "1.0.0",
"description": "\ud83e\udd20 Heady - Strategic VPN management that's actually awesome to use!",
"description": "🤠 Heady - Strategic VPN management that's actually awesome to use!",
"type": "module",
"private": true,
"scripts": {
@ -23,6 +23,7 @@
},
"dependencies": {
"@astrojs/node": "^8.3.4",
"@astrojs/react": "^3.6.3",
"@astrojs/tailwind": "^5.1.2",
"@kubernetes/client-node": "^1.3.0",
"@libsql/client": "0.15.12",
@ -36,10 +37,15 @@
"dotenv": "17.2.1",
"drizzle-orm": "0.44.4",
"guacamole-lite": "^1.2.0",
"ip-address": "^9.0.5",
"is-cidr": "^5.0.3",
"jose": "6.1.0",
"lucide": "^0.456.0",
"lucide-react": "^0.456.0",
"mime": "^4.0.7",
"openid-client": "6.7.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tailwind-merge": "3.3.1",
"tailwindcss": "^3.4.14",
"ulidx": "2.4.1",
@ -52,6 +58,8 @@
"@biomejs/biome": "^2.2.0",
"@tailwindcss/vite": "^4.1.12",
"@types/node": "^24.3.0",
"@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0",
"@types/ws": "^8.18.1",
"@vitest/coverage-v8": "^2.1.8",
"drizzle-kit": "^0.31.4",