diff --git a/apps/super-admin/.env.example b/apps/super-admin/.env.example
index e7b3a01..5f276d4 100644
--- a/apps/super-admin/.env.example
+++ b/apps/super-admin/.env.example
@@ -1,4 +1,6 @@
VITE_API_BASE_URL=http://localhost:3000/api/v1
# Hostname for this dashboard (meshkee.app in production).
VITE_ADMIN_DOMAIN=meshkee.app
+# Public domain used in platform invoice links (https://{domain}/invoices/{id}).
+VITE_INVOICE_PUBLIC_DOMAIN=meshkee.com
# Local HTTPS certs (gitignored): mkcert -cert-file .certs/meshkee.app.pem -key-file .certs/meshkee.app-key.pem meshkee.app
diff --git a/apps/super-admin/src/App.tsx b/apps/super-admin/src/App.tsx
index b7217d4..0fa4152 100644
--- a/apps/super-admin/src/App.tsx
+++ b/apps/super-admin/src/App.tsx
@@ -7,8 +7,10 @@ import { GuestRoute } from './components/GuestRoute'
import { PageLayout } from './components/PageLayout'
import { HomePage } from './pages/HomePage'
import { BusinessesPage } from './pages/BusinessesPage'
+import { BusinessInvoicesPage } from './pages/BusinessInvoicesPage'
import { UsersPage } from './pages/UsersPage'
import { WebsitesPage } from './pages/WebsitesPage'
+import { SettingsPage } from './pages/SettingsPage'
import { ProfilePage } from './pages/ProfilePage'
import { LoginPage } from './pages/LoginPage'
@@ -27,8 +29,10 @@ function App() {
}>
} />
} />
+ } />
} />
} />
+ } />
} />
diff --git a/apps/super-admin/src/components/Modal.module.css b/apps/super-admin/src/components/Modal.module.css
index 01d91be..b2ef730 100644
--- a/apps/super-admin/src/components/Modal.module.css
+++ b/apps/super-admin/src/components/Modal.module.css
@@ -27,6 +27,10 @@
max-width: 640px;
}
+.modalXl {
+ max-width: min(1180px, calc(100vw - 40px));
+}
+
.header {
position: relative;
padding: 18px 18px 10px;
diff --git a/apps/super-admin/src/components/Modal.tsx b/apps/super-admin/src/components/Modal.tsx
index ebc6b96..b1ccbcb 100644
--- a/apps/super-admin/src/components/Modal.tsx
+++ b/apps/super-admin/src/components/Modal.tsx
@@ -8,9 +8,11 @@ interface ModalProps {
children: React.ReactNode
onClose: () => void
wide?: boolean
+ /** Extra-wide dialog for dense forms (e.g. invoice editor). */
+ xl?: boolean
}
-export function Modal({ open, title, children, onClose, wide }: ModalProps) {
+export function Modal({ open, title, children, onClose, wide, xl }: ModalProps) {
useEffect(() => {
if (!open) return
const onKey = (e: KeyboardEvent) => {
@@ -22,9 +24,11 @@ export function Modal({ open, title, children, onClose, wide }: ModalProps) {
if (!open) return null
+ const sizeClass = xl ? styles.modalXl : wide ? styles.modalWide : ''
+
return (
-
e.stopPropagation()}>
+
e.stopPropagation()}>
{title}