From c962fe524b6c2286a2733b3739baa6d494495c96 Mon Sep 17 00:00:00 2001 From: Alireza Hassani Date: Mon, 31 Aug 2026 18:46:48 +0330 Subject: [PATCH] Add Arvan/Cloudflare DNS choice on domain edit and restyle empty add boxes. Domain save can upsert tenant records on either provider, overflow menus stay opaque, and empty-state add controls use a dashed outline. Co-authored-by: Cursor --- .../BusinessActionsOverflowMenu.module.css | 23 ++++-- .../src/components/DnsProviderSwitch.tsx | 33 +++++++++ .../src/components/ParkedDomainsModal.tsx | 26 ++----- .../src/pages/BusinessesPage.module.css | 8 ++ apps/super-admin/src/pages/BusinessesPage.tsx | 40 +++++++--- apps/super-admin/src/pages/WebsitesPage.tsx | 40 ++++++---- .../src/services/businessService.ts | 8 +- .../super-admin/src/services/domainService.ts | 4 +- docs/PROJECT_CONTEXT.md | 4 +- .../src/components/EmptyState.module.css | 74 ++++++++++++------- .../src/components/EmptyState.tsx | 6 +- 11 files changed, 177 insertions(+), 89 deletions(-) create mode 100644 apps/super-admin/src/components/DnsProviderSwitch.tsx diff --git a/apps/super-admin/src/components/BusinessActionsOverflowMenu.module.css b/apps/super-admin/src/components/BusinessActionsOverflowMenu.module.css index 3ebaf81..8e76309 100644 --- a/apps/super-admin/src/components/BusinessActionsOverflowMenu.module.css +++ b/apps/super-admin/src/components/BusinessActionsOverflowMenu.module.css @@ -27,18 +27,14 @@ .menu { position: fixed; z-index: 1200; + isolation: isolate; min-width: 220px; padding: 6px; border-radius: 14px; border: 1px solid var(--glass-border); - background: - linear-gradient( - 180deg, - rgba(255, 255, 255, 0.72) 0%, - var(--glass-bg-strong) 100% - ); - backdrop-filter: blur(var(--blur-glass)) saturate(1.85); - -webkit-backdrop-filter: blur(var(--blur-glass)) saturate(1.85); + /* Card glass (0.62) is too thin over row icons; page orbs already use + backdrop-filter, so a second blur on this panel often does nothing. */ + background: var(--toast-bg, rgba(255, 255, 255, 0.94)); box-shadow: 0 18px 48px rgba(15, 23, 42, 0.2), 0 0 0 1px rgba(255, 255, 255, 0.45), @@ -46,6 +42,17 @@ animation: menuIn 0.16s ease; } +.menu::before { + content: ''; + position: absolute; + inset: 0; + z-index: -1; + border-radius: inherit; + pointer-events: none; + backdrop-filter: blur(var(--blur-glass)) saturate(1.85); + -webkit-backdrop-filter: blur(var(--blur-glass)) saturate(1.85); +} + .item { display: flex; align-items: center; diff --git a/apps/super-admin/src/components/DnsProviderSwitch.tsx b/apps/super-admin/src/components/DnsProviderSwitch.tsx new file mode 100644 index 0000000..64f9194 --- /dev/null +++ b/apps/super-admin/src/components/DnsProviderSwitch.tsx @@ -0,0 +1,33 @@ +import type { ParkedDnsProvider } from '../types/domain' +import styles from './ParkedDomainsModal.module.css' + +interface DnsProviderSwitchProps { + value: ParkedDnsProvider + onChange: (dns: ParkedDnsProvider) => void + disabled?: boolean +} + +export function DnsProviderSwitch({ value, onChange, disabled }: DnsProviderSwitchProps) { + return ( +
+ + +
+ ) +} diff --git a/apps/super-admin/src/components/ParkedDomainsModal.tsx b/apps/super-admin/src/components/ParkedDomainsModal.tsx index 1151f74..abaafe6 100644 --- a/apps/super-admin/src/components/ParkedDomainsModal.tsx +++ b/apps/super-admin/src/components/ParkedDomainsModal.tsx @@ -1,6 +1,7 @@ import { useEffect, useState } from 'react' import { Plus, X } from 'lucide-react' import { Modal } from './Modal' +import { DnsProviderSwitch } from './DnsProviderSwitch' import { ApiError } from '../lib/api' import { updateParkedHosts } from '../services/domainService' import type { DomainListItem, ParkedAlias, ParkedDnsProvider } from '../types/domain' @@ -135,26 +136,11 @@ export function ParkedDomainsModal({ domain, onClose, onSaved }: ParkedDomainsMo dir="ltr" aria-label={`Parked domain ${index + 1}`} /> -
- - -
+ updateDns(index, dns)} + disabled={submitting} + /> )}