Add super-admin invoices: settings templates and per-business issue flow.

Platform invoice templates live under Settings; each business can list and issue invoices with optional name and a meshkee.com public link.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-07-24 20:59:34 +03:30
co-authored by Cursor
parent db52a83f98
commit 8f4af7a16c
20 changed files with 1839 additions and 7 deletions
+6 -2
View File
@@ -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 (
<div className={styles.overlay} role="dialog" aria-modal="true" onClick={onClose}>
<div className={`${styles.modal} ${wide ? styles.modalWide : ''}`} onClick={(e) => e.stopPropagation()}>
<div className={`${styles.modal} ${sizeClass}`} onClick={(e) => e.stopPropagation()}>
<div className={styles.header}>
<h3 className={styles.title}>{title}</h3>
<button type="button" className={styles.closeBtn} onClick={onClose} aria-label="Close">