Move tenant dashboard routes under /dashboard/ prefix

- Update App.tsx routes to use /dashboard/ prefix for all business user routes
- Add redirect from / to /dashboard for authenticated business users
- Update Sidebar.tsx navigation links with /dashboard/ prefix
- Update SettingsLayout.tsx settings navigation paths
- Update all help pages with /dashboard/help/ routes
- Update navigate() calls in components:
  - TrialBanner, PaymentSettingsSection, NotificationDropdown
  - BusinessLayout, UpgradePrompt, QuotaWarningBanner
  - QuotaOverageModal, OpenTicketsWidget, CreatePlugin
  - MyPlugins, PluginMarketplace, HelpTicketing
  - HelpGuide, Upgrade, TrialExpired
  - CustomDomainsSettings, QuotaSettings
- Fix hardcoded lvh.me URL in BusinessEditModal to use buildSubdomainUrl

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-13 01:48:45 -05:00
parent 29bcb27e76
commit e7733449dd
44 changed files with 284 additions and 281 deletions

View File

@@ -634,7 +634,7 @@ const AppContent: React.FC = () => {
const isTrialExpired = business.isTrialExpired || (business.status === 'Trial' && business.trialEnd && new Date(business.trialEnd) < new Date()); const isTrialExpired = business.isTrialExpired || (business.status === 'Trial' && business.trialEnd && new Date(business.trialEnd) < new Date());
// Allowed routes when trial is expired // Allowed routes when trial is expired
const allowedWhenExpired = ['/trial-expired', '/upgrade', '/settings', '/profile']; const allowedWhenExpired = ['/dashboard/trial-expired', '/dashboard/upgrade', '/dashboard/settings', '/dashboard/profile'];
const currentPath = window.location.pathname; const currentPath = window.location.pathname;
const isOnAllowedRoute = allowedWhenExpired.some(route => currentPath.startsWith(route)); const isOnAllowedRoute = allowedWhenExpired.some(route => currentPath.startsWith(route));
@@ -643,15 +643,15 @@ const AppContent: React.FC = () => {
return ( return (
<Suspense fallback={<LoadingScreen />}> <Suspense fallback={<LoadingScreen />}>
<Routes> <Routes>
<Route path="/trial-expired" element={<TrialExpired />} /> <Route path="/dashboard/trial-expired" element={<TrialExpired />} />
<Route path="/upgrade" element={<Upgrade />} /> <Route path="/dashboard/upgrade" element={<Upgrade />} />
<Route path="/profile" element={<ProfileSettings />} /> <Route path="/dashboard/profile" element={<ProfileSettings />} />
{/* Trial-expired users can access billing settings to upgrade */} {/* Trial-expired users can access billing settings to upgrade */}
<Route <Route
path="/settings/*" path="/dashboard/settings/*"
element={hasAccess(['owner']) ? <Navigate to="/upgrade" /> : <Navigate to="/trial-expired" />} element={hasAccess(['owner']) ? <Navigate to="/dashboard/upgrade" /> : <Navigate to="/dashboard/trial-expired" />}
/> />
<Route path="*" element={<Navigate to="/trial-expired" replace />} /> <Route path="*" element={<Navigate to="/dashboard/trial-expired" replace />} />
</Routes> </Routes>
</Suspense> </Suspense>
); );
@@ -672,30 +672,33 @@ const AppContent: React.FC = () => {
/> />
} }
> >
{/* Redirect root to dashboard */}
<Route path="/" element={<Navigate to="/dashboard" replace />} />
{/* Trial and Upgrade Routes */} {/* Trial and Upgrade Routes */}
<Route path="/trial-expired" element={<TrialExpired />} /> <Route path="/dashboard/trial-expired" element={<TrialExpired />} />
<Route path="/upgrade" element={<Upgrade />} /> <Route path="/dashboard/upgrade" element={<Upgrade />} />
{/* Regular Routes */} {/* Regular Routes */}
<Route <Route
path="/" path="/dashboard"
element={user.role === 'resource' ? <ResourceDashboard /> : user.role === 'staff' ? <StaffDashboard user={user} /> : <Dashboard />} element={user.role === 'resource' ? <ResourceDashboard /> : user.role === 'staff' ? <StaffDashboard user={user} /> : <Dashboard />}
/> />
{/* Staff Schedule - vertical timeline view */} {/* Staff Schedule - vertical timeline view */}
<Route <Route
path="/my-schedule" path="/dashboard/my-schedule"
element={ element={
hasAccess(['staff']) ? ( hasAccess(['staff']) ? (
<StaffSchedule user={user} /> <StaffSchedule user={user} />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route path="/scheduler" element={<Scheduler />} /> <Route path="/dashboard/scheduler" element={<Scheduler />} />
<Route path="/tickets" element={<Tickets />} /> <Route path="/dashboard/tickets" element={<Tickets />} />
<Route <Route
path="/help" path="/dashboard/help"
element={ element={
user.role === 'staff' ? ( user.role === 'staff' ? (
<StaffHelp user={user} /> <StaffHelp user={user} />
@@ -704,205 +707,205 @@ const AppContent: React.FC = () => {
) )
} }
/> />
<Route path="/help/guide" element={<HelpGuide />} /> <Route path="/dashboard/help/guide" element={<HelpGuide />} />
<Route path="/help/ticketing" element={<HelpTicketing />} /> <Route path="/dashboard/help/ticketing" element={<HelpTicketing />} />
<Route path="/help/api" element={<HelpApiDocs />} /> <Route path="/dashboard/help/api" element={<HelpApiDocs />} />
<Route path="/help/plugins/docs" element={<HelpPluginDocs />} /> <Route path="/dashboard/help/plugins/docs" element={<HelpPluginDocs />} />
<Route path="/help/email" element={<HelpEmailSettings />} /> <Route path="/dashboard/help/email" element={<HelpEmailSettings />} />
{/* New help pages */} {/* New help pages */}
<Route path="/help/dashboard" element={<HelpDashboard />} /> <Route path="/dashboard/help/dashboard" element={<HelpDashboard />} />
<Route path="/help/scheduler" element={<HelpScheduler />} /> <Route path="/dashboard/help/scheduler" element={<HelpScheduler />} />
<Route path="/help/tasks" element={<HelpTasks />} /> <Route path="/dashboard/help/tasks" element={<HelpTasks />} />
<Route path="/help/customers" element={<HelpCustomers />} /> <Route path="/dashboard/help/customers" element={<HelpCustomers />} />
<Route path="/help/services" element={<HelpServices />} /> <Route path="/dashboard/help/services" element={<HelpServices />} />
<Route path="/help/resources" element={<HelpResources />} /> <Route path="/dashboard/help/resources" element={<HelpResources />} />
<Route path="/help/staff" element={<HelpStaff />} /> <Route path="/dashboard/help/staff" element={<HelpStaff />} />
<Route path="/help/time-blocks" element={<HelpTimeBlocks />} /> <Route path="/dashboard/help/time-blocks" element={<HelpTimeBlocks />} />
<Route path="/help/messages" element={<HelpMessages />} /> <Route path="/dashboard/help/messages" element={<HelpMessages />} />
<Route path="/help/payments" element={<HelpPayments />} /> <Route path="/dashboard/help/payments" element={<HelpPayments />} />
<Route path="/help/contracts" element={<HelpContracts />} /> <Route path="/dashboard/help/contracts" element={<HelpContracts />} />
<Route path="/help/plugins" element={<HelpPlugins />} /> <Route path="/dashboard/help/plugins" element={<HelpPlugins />} />
<Route path="/help/settings/general" element={<HelpSettingsGeneral />} /> <Route path="/dashboard/help/settings/general" element={<HelpSettingsGeneral />} />
<Route path="/help/settings/resource-types" element={<HelpSettingsResourceTypes />} /> <Route path="/dashboard/help/settings/resource-types" element={<HelpSettingsResourceTypes />} />
<Route path="/help/settings/booking" element={<HelpSettingsBooking />} /> <Route path="/dashboard/help/settings/booking" element={<HelpSettingsBooking />} />
<Route path="/help/settings/appearance" element={<HelpSettingsAppearance />} /> <Route path="/dashboard/help/settings/appearance" element={<HelpSettingsAppearance />} />
<Route path="/help/settings/email" element={<HelpSettingsEmail />} /> <Route path="/dashboard/help/settings/email" element={<HelpSettingsEmail />} />
<Route path="/help/settings/domains" element={<HelpSettingsDomains />} /> <Route path="/dashboard/help/settings/domains" element={<HelpSettingsDomains />} />
<Route path="/help/settings/api" element={<HelpSettingsApi />} /> <Route path="/dashboard/help/settings/api" element={<HelpSettingsApi />} />
<Route path="/help/settings/auth" element={<HelpSettingsAuth />} /> <Route path="/dashboard/help/settings/auth" element={<HelpSettingsAuth />} />
<Route path="/help/settings/billing" element={<HelpSettingsBilling />} /> <Route path="/dashboard/help/settings/billing" element={<HelpSettingsBilling />} />
<Route path="/help/settings/quota" element={<HelpSettingsQuota />} /> <Route path="/dashboard/help/settings/quota" element={<HelpSettingsQuota />} />
<Route <Route
path="/plugins/marketplace" path="/dashboard/plugins/marketplace"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<PluginMarketplace /> <PluginMarketplace />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/plugins/my-plugins" path="/dashboard/plugins/my-plugins"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<MyPlugins /> <MyPlugins />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/plugins/create" path="/dashboard/plugins/create"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<CreatePlugin /> <CreatePlugin />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/tasks" path="/dashboard/tasks"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<Tasks /> <Tasks />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/email-templates" path="/dashboard/email-templates"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<EmailTemplates /> <EmailTemplates />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route path="/support" element={<PlatformSupport />} /> <Route path="/dashboard/support" element={<PlatformSupport />} />
<Route <Route
path="/customers" path="/dashboard/customers"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<Customers onMasquerade={handleMasquerade} effectiveUser={user} /> <Customers onMasquerade={handleMasquerade} effectiveUser={user} />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/services" path="/dashboard/services"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<Services /> <Services />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/resources" path="/dashboard/resources"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<Resources onMasquerade={handleMasquerade} effectiveUser={user} /> <Resources onMasquerade={handleMasquerade} effectiveUser={user} />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/staff" path="/dashboard/staff"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<Staff onMasquerade={handleMasquerade} effectiveUser={user} /> <Staff onMasquerade={handleMasquerade} effectiveUser={user} />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/time-blocks" path="/dashboard/time-blocks"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<TimeBlocks /> <TimeBlocks />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/locations" path="/dashboard/locations"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<Locations /> <Locations />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/my-availability" path="/dashboard/my-availability"
element={ element={
hasAccess(['staff', 'resource']) ? ( hasAccess(['staff', 'resource']) ? (
<MyAvailability user={user} /> <MyAvailability user={user} />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/contracts" path="/dashboard/contracts"
element={ element={
hasAccess(['owner', 'manager']) && canUse('contracts') ? ( hasAccess(['owner', 'manager']) && canUse('contracts') ? (
<Contracts /> <Contracts />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/contracts/templates" path="/dashboard/contracts/templates"
element={ element={
hasAccess(['owner', 'manager']) && canUse('contracts') ? ( hasAccess(['owner', 'manager']) && canUse('contracts') ? (
<ContractTemplates /> <ContractTemplates />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/payments" path="/dashboard/payments"
element={ element={
hasAccess(['owner', 'manager']) ? <Payments /> : <Navigate to="/" /> hasAccess(['owner', 'manager']) ? <Payments /> : <Navigate to="/dashboard" />
} }
/> />
<Route <Route
path="/messages" path="/dashboard/messages"
element={ element={
hasAccess(['owner', 'manager']) && user?.can_send_messages ? ( hasAccess(['owner', 'manager']) && user?.can_send_messages ? (
<Messages /> <Messages />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
<Route <Route
path="/site-editor" path="/dashboard/site-editor"
element={ element={
hasAccess(['owner', 'manager']) ? ( hasAccess(['owner', 'manager']) ? (
<PageEditor /> <PageEditor />
) : ( ) : (
<Navigate to="/" /> <Navigate to="/dashboard" />
) )
} }
/> />
{/* Settings Routes with Nested Layout */} {/* Settings Routes with Nested Layout */}
{hasAccess(['owner']) ? ( {hasAccess(['owner']) ? (
<Route path="/settings" element={<SettingsLayout />}> <Route path="/dashboard/settings" element={<SettingsLayout />}>
<Route index element={<Navigate to="/settings/general" replace />} /> <Route index element={<Navigate to="/dashboard/settings/general" replace />} />
<Route path="general" element={<GeneralSettings />} /> <Route path="general" element={<GeneralSettings />} />
<Route path="branding" element={<BrandingSettings />} /> <Route path="branding" element={<BrandingSettings />} />
<Route path="resource-types" element={<ResourceTypesSettings />} /> <Route path="resource-types" element={<ResourceTypesSettings />} />
@@ -918,11 +921,11 @@ const AppContent: React.FC = () => {
<Route path="quota" element={<QuotaSettings />} /> <Route path="quota" element={<QuotaSettings />} />
</Route> </Route>
) : ( ) : (
<Route path="/settings/*" element={<Navigate to="/" />} /> <Route path="/dashboard/settings/*" element={<Navigate to="/dashboard" />} />
)} )}
<Route path="/profile" element={<ProfileSettings />} /> <Route path="/dashboard/profile" element={<ProfileSettings />} />
<Route path="/verify-email" element={<VerifyEmail />} /> <Route path="/dashboard/verify-email" element={<VerifyEmail />} />
<Route path="*" element={<Navigate to="/" />} /> <Route path="*" element={<Navigate to="/dashboard" />} />
</Route> </Route>
</Routes> </Routes>
</Suspense> </Suspense>

View File

@@ -59,7 +59,7 @@ const NotificationDropdown: React.FC<NotificationDropdownProps> = ({ variant = '
// Handle time-off request notifications - navigate to time blocks page // Handle time-off request notifications - navigate to time blocks page
// Includes both new requests and modified requests that need re-approval // Includes both new requests and modified requests that need re-approval
if (notification.data?.type === 'time_off_request' || notification.data?.type === 'time_off_request_modified') { if (notification.data?.type === 'time_off_request' || notification.data?.type === 'time_off_request_modified') {
navigate('/time-blocks'); navigate('/dashboard/time-blocks');
setIsOpen(false); setIsOpen(false);
return; return;
} }
@@ -224,7 +224,7 @@ const NotificationDropdown: React.FC<NotificationDropdownProps> = ({ variant = '
</button> </button>
<button <button
onClick={() => { onClick={() => {
navigate('/notifications'); navigate('/dashboard/notifications');
setIsOpen(false); setIsOpen(false);
}} }}
className="text-xs text-brand-600 hover:text-brand-700 dark:text-brand-400 font-medium" className="text-xs text-brand-600 hover:text-brand-700 dark:text-brand-400 font-medium"

View File

@@ -235,7 +235,7 @@ const PaymentSettingsSection: React.FC<PaymentSettingsSectionProps> = ({ busines
</ul> </ul>
<div className="flex flex-wrap gap-3"> <div className="flex flex-wrap gap-3">
<button <button
onClick={() => navigate('/settings/billing')} onClick={() => navigate('/dashboard/settings/billing')}
className="flex items-center gap-2 px-5 py-2.5 text-sm font-medium text-white bg-purple-600 rounded-lg hover:bg-purple-700 transition-colors" className="flex items-center gap-2 px-5 py-2.5 text-sm font-medium text-white bg-purple-600 rounded-lg hover:bg-purple-700 transition-colors"
> >
<ArrowUpRight size={16} /> <ArrowUpRight size={16} />

View File

@@ -244,7 +244,7 @@ const QuotaOverageModal: React.FC<QuotaOverageModalProps> = ({ overages, onDismi
{t('quota.modal.dismissButton', 'Remind Me Later')} {t('quota.modal.dismissButton', 'Remind Me Later')}
</button> </button>
<Link <Link
to="/settings/quota" to="/dashboard/settings/quota"
onClick={handleDismiss} onClick={handleDismiss}
className="inline-flex items-center gap-2 px-5 py-2.5 bg-blue-600 text-white font-medium rounded-lg hover:bg-blue-700 transition-colors" className="inline-flex items-center gap-2 px-5 py-2.5 bg-blue-600 text-white font-medium rounded-lg hover:bg-blue-700 transition-colors"
> >

View File

@@ -78,7 +78,7 @@ const QuotaWarningBanner: React.FC<QuotaWarningBannerProps> = ({ overages, onDis
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<Link <Link
to="/settings/quota" to="/dashboard/settings/quota"
className={`inline-flex items-center gap-1 px-3 py-1.5 text-sm font-medium rounded-md transition-colors ${ className={`inline-flex items-center gap-1 px-3 py-1.5 text-sm font-medium rounded-md transition-colors ${
isCritical || isUrgent isCritical || isUrgent
? 'bg-white/20 hover:bg-white/30 text-white' ? 'bg-white/20 hover:bg-white/30 text-white'

View File

@@ -109,7 +109,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
{/* Core Features - Always visible */} {/* Core Features - Always visible */}
<SidebarSection isCollapsed={isCollapsed}> <SidebarSection isCollapsed={isCollapsed}>
<SidebarItem <SidebarItem
to="/" to="/dashboard"
icon={LayoutDashboard} icon={LayoutDashboard}
label={t('nav.dashboard')} label={t('nav.dashboard')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -117,16 +117,15 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
/> />
{!isStaff && ( {!isStaff && (
<SidebarItem <SidebarItem
to="/scheduler" to="/dashboard/scheduler"
icon={CalendarDays} icon={CalendarDays}
label={t('nav.scheduler')} label={t('nav.scheduler')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
badgeElement={<UnfinishedBadge />}
/> />
)} )}
{!isStaff && ( {!isStaff && (
<SidebarItem <SidebarItem
to="/tasks" to="/dashboard/tasks"
icon={Clock} icon={Clock}
label={t('nav.tasks', 'Tasks')} label={t('nav.tasks', 'Tasks')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -136,7 +135,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
)} )}
{isStaff && ( {isStaff && (
<SidebarItem <SidebarItem
to="/my-schedule" to="/dashboard/my-schedule"
icon={CalendarDays} icon={CalendarDays}
label={t('nav.mySchedule', 'My Schedule')} label={t('nav.mySchedule', 'My Schedule')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -144,7 +143,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
)} )}
{(role === 'staff' || role === 'resource') && ( {(role === 'staff' || role === 'resource') && (
<SidebarItem <SidebarItem
to="/my-availability" to="/dashboard/my-availability"
icon={CalendarOff} icon={CalendarOff}
label={t('nav.myAvailability', 'My Availability')} label={t('nav.myAvailability', 'My Availability')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -156,27 +155,27 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
{canViewManagementPages && ( {canViewManagementPages && (
<SidebarSection title={t('nav.sections.manage', 'Manage')} isCollapsed={isCollapsed}> <SidebarSection title={t('nav.sections.manage', 'Manage')} isCollapsed={isCollapsed}>
<SidebarItem <SidebarItem
to="/site-editor" to="/dashboard/site-editor"
icon={LayoutTemplate} icon={LayoutTemplate}
label={t('nav.siteBuilder', 'Site Builder')} label={t('nav.siteBuilder', 'Site Builder')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
badgeElement={<UnfinishedBadge />} badgeElement={<UnfinishedBadge />}
/> />
<SidebarItem <SidebarItem
to="/customers" to="/dashboard/customers"
icon={Users} icon={Users}
label={t('nav.customers')} label={t('nav.customers')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
badgeElement={<UnfinishedBadge />} badgeElement={<UnfinishedBadge />}
/> />
<SidebarItem <SidebarItem
to="/services" to="/dashboard/services"
icon={Briefcase} icon={Briefcase}
label={t('nav.services', 'Services')} label={t('nav.services', 'Services')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
/> />
<SidebarItem <SidebarItem
to="/resources" to="/dashboard/resources"
icon={ClipboardList} icon={ClipboardList}
label={t('nav.resources')} label={t('nav.resources')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -184,7 +183,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
{canViewAdminPages && ( {canViewAdminPages && (
<> <>
<SidebarItem <SidebarItem
to="/staff" to="/dashboard/staff"
icon={Users} icon={Users}
label={t('nav.staff')} label={t('nav.staff')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -192,7 +191,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
/> />
{canUse('contracts') && ( {canUse('contracts') && (
<SidebarItem <SidebarItem
to="/contracts" to="/dashboard/contracts"
icon={FileSignature} icon={FileSignature}
label={t('nav.contracts', 'Contracts')} label={t('nav.contracts', 'Contracts')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -200,13 +199,13 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
/> />
)} )}
<SidebarItem <SidebarItem
to="/time-blocks" to="/dashboard/time-blocks"
icon={CalendarOff} icon={CalendarOff}
label={t('nav.timeBlocks', 'Time Blocks')} label={t('nav.timeBlocks', 'Time Blocks')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
/> />
<SidebarItem <SidebarItem
to="/locations" to="/dashboard/locations"
icon={MapPin} icon={MapPin}
label={t('nav.locations', 'Locations')} label={t('nav.locations', 'Locations')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -222,7 +221,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
<SidebarSection title={t('nav.sections.communicate', 'Communicate')} isCollapsed={isCollapsed}> <SidebarSection title={t('nav.sections.communicate', 'Communicate')} isCollapsed={isCollapsed}>
{canSendMessages && ( {canSendMessages && (
<SidebarItem <SidebarItem
to="/messages" to="/dashboard/messages"
icon={MessageSquare} icon={MessageSquare}
label={t('nav.messages')} label={t('nav.messages')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -230,7 +229,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
)} )}
{canViewTickets && ( {canViewTickets && (
<SidebarItem <SidebarItem
to="/tickets" to="/dashboard/tickets"
icon={Ticket} icon={Ticket}
label={t('nav.tickets')} label={t('nav.tickets')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -243,7 +242,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
{canViewAdminPages && ( {canViewAdminPages && (
<SidebarSection title={t('nav.sections.money', 'Money')} isCollapsed={isCollapsed}> <SidebarSection title={t('nav.sections.money', 'Money')} isCollapsed={isCollapsed}>
<SidebarItem <SidebarItem
to="/payments" to="/dashboard/payments"
icon={CreditCard} icon={CreditCard}
label={t('nav.payments')} label={t('nav.payments')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -256,7 +255,7 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
{canViewAdminPages && ( {canViewAdminPages && (
<SidebarSection title={t('nav.sections.extend', 'Extend')} isCollapsed={isCollapsed}> <SidebarSection title={t('nav.sections.extend', 'Extend')} isCollapsed={isCollapsed}>
<SidebarItem <SidebarItem
to="/plugins/my-plugins" to="/dashboard/plugins/my-plugins"
icon={Plug} icon={Plug}
label={t('nav.plugins', 'Plugins')} label={t('nav.plugins', 'Plugins')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
@@ -272,14 +271,14 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
<SidebarSection isCollapsed={isCollapsed}> <SidebarSection isCollapsed={isCollapsed}>
{canViewSettings && ( {canViewSettings && (
<SidebarItem <SidebarItem
to="/settings" to="/dashboard/settings"
icon={Settings} icon={Settings}
label={t('nav.businessSettings')} label={t('nav.businessSettings')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
/> />
)} )}
<SidebarItem <SidebarItem
to="/help" to="/dashboard/help"
icon={HelpCircle} icon={HelpCircle}
label={t('nav.helpDocs', 'Help & Docs')} label={t('nav.helpDocs', 'Help & Docs')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}

View File

@@ -28,7 +28,7 @@ const TrialBanner: React.FC<TrialBannerProps> = ({ business }) => {
const trialEndDate = business.trialEnd ? new Date(business.trialEnd).toLocaleDateString() : ''; const trialEndDate = business.trialEnd ? new Date(business.trialEnd).toLocaleDateString() : '';
const handleUpgrade = () => { const handleUpgrade = () => {
navigate('/upgrade'); navigate('/dashboard/upgrade');
}; };
const handleDismiss = () => { const handleDismiss = () => {

View File

@@ -51,7 +51,7 @@ const BannerPrompt: React.FC<{ feature: FeatureKey; showDescription: boolean }>
</p> </p>
)} )}
<Link <Link
to="/settings/billing" to="/dashboard/settings/billing"
className="inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-gradient-to-r from-amber-500 to-orange-500 text-white font-medium hover:from-amber-600 hover:to-orange-600 transition-all shadow-md hover:shadow-lg" className="inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-gradient-to-r from-amber-500 to-orange-500 text-white font-medium hover:from-amber-600 hover:to-orange-600 transition-all shadow-md hover:shadow-lg"
> >
<Crown className="w-4 h-4" /> <Crown className="w-4 h-4" />
@@ -97,7 +97,7 @@ const OverlayPrompt: React.FC<{
{FEATURE_DESCRIPTIONS[feature]} {FEATURE_DESCRIPTIONS[feature]}
</p> </p>
<Link <Link
to="/settings/billing" to="/dashboard/settings/billing"
className="inline-flex items-center gap-2 px-6 py-3 rounded-lg bg-gradient-to-r from-amber-500 to-orange-500 text-white font-medium hover:from-amber-600 hover:to-orange-600 transition-all shadow-md hover:shadow-lg" className="inline-flex items-center gap-2 px-6 py-3 rounded-lg bg-gradient-to-r from-amber-500 to-orange-500 text-white font-medium hover:from-amber-600 hover:to-orange-600 transition-all shadow-md hover:shadow-lg"
> >
<Crown className="w-5 h-5" /> <Crown className="w-5 h-5" />

View File

@@ -83,7 +83,7 @@ const OpenTicketsWidget: React.FC<OpenTicketsWidgetProps> = ({
openTickets.slice(0, 5).map((ticket) => ( openTickets.slice(0, 5).map((ticket) => (
<Link <Link
key={ticket.id} key={ticket.id}
to="/tickets" to="/dashboard/tickets"
className={`block p-3 rounded-lg ${getPriorityBg(ticket.priority, ticket.isOverdue)} hover:opacity-80 transition-opacity`} className={`block p-3 rounded-lg ${getPriorityBg(ticket.priority, ticket.isOverdue)} hover:opacity-80 transition-opacity`}
> >
<div className="flex items-start justify-between gap-2"> <div className="flex items-start justify-between gap-2">
@@ -110,7 +110,7 @@ const OpenTicketsWidget: React.FC<OpenTicketsWidgetProps> = ({
{openTickets.length > 5 && ( {openTickets.length > 5 && (
<Link <Link
to="/tickets" to="/dashboard/tickets"
className="mt-3 text-sm text-brand-600 dark:text-brand-400 hover:underline text-center" className="mt-3 text-sm text-brand-600 dark:text-brand-400 hover:underline text-center"
> >
View all {openTickets.length} tickets View all {openTickets.length} tickets

View File

@@ -83,13 +83,13 @@ const BusinessLayoutContent: React.FC<BusinessLayoutProps> = ({ business, user,
// Check for trial expiration and redirect // Check for trial expiration and redirect
useEffect(() => { useEffect(() => {
// Don't check if already on trial-expired page // Don't check if already on trial-expired page
if (location.pathname === '/trial-expired') { if (location.pathname === '/dashboard/trial-expired') {
return; return;
} }
// Redirect to trial-expired page if trial has expired // Redirect to trial-expired page if trial has expired
if (business.isTrialExpired && business.status === 'Trial') { if (business.isTrialExpired && business.status === 'Trial') {
navigate('/trial-expired', { replace: true }); navigate('/dashboard/trial-expired', { replace: true });
} }
}, [business.isTrialExpired, business.status, location.pathname, navigate]); }, [business.isTrialExpired, business.status, location.pathname, navigate]);

View File

@@ -39,11 +39,11 @@ interface ParentContext {
// Map settings pages to their required plan features // Map settings pages to their required plan features
const SETTINGS_PAGE_FEATURES: Record<string, FeatureKey> = { const SETTINGS_PAGE_FEATURES: Record<string, FeatureKey> = {
'/settings/branding': 'white_label', '/dashboard/settings/branding': 'white_label',
'/settings/custom-domains': 'custom_domain', '/dashboard/settings/custom-domains': 'custom_domain',
'/settings/api': 'api_access', '/dashboard/settings/api': 'api_access',
'/settings/authentication': 'custom_oauth', '/dashboard/settings/authentication': 'custom_oauth',
'/settings/sms-calling': 'sms_reminders', '/dashboard/settings/sms-calling': 'sms_reminders',
}; };
const SettingsLayout: React.FC = () => { const SettingsLayout: React.FC = () => {
@@ -72,7 +72,7 @@ const SettingsLayout: React.FC = () => {
{/* Back Button */} {/* Back Button */}
<div className="p-4 border-b border-gray-200 dark:border-gray-700"> <div className="p-4 border-b border-gray-200 dark:border-gray-700">
<button <button
onClick={() => navigate('/')} onClick={() => navigate('/dashboard')}
className="flex items-center gap-2 text-sm text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white transition-colors" className="flex items-center gap-2 text-sm text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white transition-colors"
> >
<ArrowLeft size={16} /> <ArrowLeft size={16} />
@@ -92,26 +92,26 @@ const SettingsLayout: React.FC = () => {
{/* Business Section */} {/* Business Section */}
<SettingsSidebarSection title={t('settings.sections.business', 'Business')}> <SettingsSidebarSection title={t('settings.sections.business', 'Business')}>
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/general" to="/dashboard/settings/general"
icon={Building2} icon={Building2}
label={t('settings.general.title', 'General')} label={t('settings.general.title', 'General')}
description={t('settings.general.description', 'Name, timezone, contact')} description={t('settings.general.description', 'Name, timezone, contact')}
/> />
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/resource-types" to="/dashboard/settings/resource-types"
icon={Layers} icon={Layers}
label={t('settings.resourceTypes.title', 'Resource Types')} label={t('settings.resourceTypes.title', 'Resource Types')}
description={t('settings.resourceTypes.description', 'Staff, rooms, equipment')} description={t('settings.resourceTypes.description', 'Staff, rooms, equipment')}
badgeElement={<UnfinishedBadge />} badgeElement={<UnfinishedBadge />}
/> />
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/booking" to="/dashboard/settings/booking"
icon={Calendar} icon={Calendar}
label={t('settings.booking.title', 'Booking')} label={t('settings.booking.title', 'Booking')}
description={t('settings.booking.description', 'Booking URL, redirects')} description={t('settings.booking.description', 'Booking URL, redirects')}
/> />
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/business-hours" to="/dashboard/settings/business-hours"
icon={Clock} icon={Clock}
label={t('settings.businessHours.title', 'Business Hours')} label={t('settings.businessHours.title', 'Business Hours')}
description={t('settings.businessHours.description', 'Operating hours')} description={t('settings.businessHours.description', 'Operating hours')}
@@ -121,20 +121,20 @@ const SettingsLayout: React.FC = () => {
{/* Branding Section */} {/* Branding Section */}
<SettingsSidebarSection title={t('settings.sections.branding', 'Branding')}> <SettingsSidebarSection title={t('settings.sections.branding', 'Branding')}>
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/branding" to="/dashboard/settings/branding"
icon={Palette} icon={Palette}
label={t('settings.appearance.title', 'Appearance')} label={t('settings.appearance.title', 'Appearance')}
description={t('settings.appearance.description', 'Logo, colors, theme')} description={t('settings.appearance.description', 'Logo, colors, theme')}
locked={isLocked('white_label')} locked={isLocked('white_label')}
/> />
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/email-templates" to="/dashboard/settings/email-templates"
icon={Mail} icon={Mail}
label={t('settings.emailTemplates.title', 'Email Templates')} label={t('settings.emailTemplates.title', 'Email Templates')}
description={t('settings.emailTemplates.description', 'Customize email designs')} description={t('settings.emailTemplates.description', 'Customize email designs')}
/> />
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/custom-domains" to="/dashboard/settings/custom-domains"
icon={Globe} icon={Globe}
label={t('settings.customDomains.title', 'Custom Domains')} label={t('settings.customDomains.title', 'Custom Domains')}
description={t('settings.customDomains.description', 'Use your own domain')} description={t('settings.customDomains.description', 'Use your own domain')}
@@ -145,7 +145,7 @@ const SettingsLayout: React.FC = () => {
{/* Integrations Section */} {/* Integrations Section */}
<SettingsSidebarSection title={t('settings.sections.integrations', 'Integrations')}> <SettingsSidebarSection title={t('settings.sections.integrations', 'Integrations')}>
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/api" to="/dashboard/settings/api"
icon={Key} icon={Key}
label={t('settings.api.title', 'API & Webhooks')} label={t('settings.api.title', 'API & Webhooks')}
description={t('settings.api.description', 'API tokens, webhooks')} description={t('settings.api.description', 'API tokens, webhooks')}
@@ -156,7 +156,7 @@ const SettingsLayout: React.FC = () => {
{/* Access Section */} {/* Access Section */}
<SettingsSidebarSection title={t('settings.sections.access', 'Access')}> <SettingsSidebarSection title={t('settings.sections.access', 'Access')}>
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/authentication" to="/dashboard/settings/authentication"
icon={Lock} icon={Lock}
label={t('settings.authentication.title', 'Authentication')} label={t('settings.authentication.title', 'Authentication')}
description={t('settings.authentication.description', 'OAuth, social login')} description={t('settings.authentication.description', 'OAuth, social login')}
@@ -167,13 +167,13 @@ const SettingsLayout: React.FC = () => {
{/* Communication Section */} {/* Communication Section */}
<SettingsSidebarSection title={t('settings.sections.communication', 'Communication')}> <SettingsSidebarSection title={t('settings.sections.communication', 'Communication')}>
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/email" to="/dashboard/settings/email"
icon={Mail} icon={Mail}
label={t('settings.email.title', 'Email Setup')} label={t('settings.email.title', 'Email Setup')}
description={t('settings.email.description', 'Email addresses for tickets')} description={t('settings.email.description', 'Email addresses for tickets')}
/> />
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/sms-calling" to="/dashboard/settings/sms-calling"
icon={Phone} icon={Phone}
label={t('settings.smsCalling.title', 'SMS & Calling')} label={t('settings.smsCalling.title', 'SMS & Calling')}
description={t('settings.smsCalling.description', 'Credits, phone numbers')} description={t('settings.smsCalling.description', 'Credits, phone numbers')}
@@ -184,13 +184,13 @@ const SettingsLayout: React.FC = () => {
{/* Billing Section */} {/* Billing Section */}
<SettingsSidebarSection title={t('settings.sections.billing', 'Billing')}> <SettingsSidebarSection title={t('settings.sections.billing', 'Billing')}>
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/billing" to="/dashboard/settings/billing"
icon={CreditCard} icon={CreditCard}
label={t('settings.billing.title', 'Plan & Billing')} label={t('settings.billing.title', 'Plan & Billing')}
description={t('settings.billing.description', 'Subscription, invoices')} description={t('settings.billing.description', 'Subscription, invoices')}
/> />
<SettingsSidebarItem <SettingsSidebarItem
to="/settings/quota" to="/dashboard/settings/quota"
icon={AlertTriangle} icon={AlertTriangle}
label={t('settings.quota.title', 'Quota Management')} label={t('settings.quota.title', 'Quota Management')}
description={t('settings.quota.description', 'Usage limits, archiving')} description={t('settings.quota.description', 'Usage limits, archiving')}

View File

@@ -182,7 +182,7 @@ const CreatePlugin: React.FC = () => {
}, },
onSuccess: (data) => { onSuccess: (data) => {
queryClient.invalidateQueries({ queryKey: ['plugin-templates'] }); queryClient.invalidateQueries({ queryKey: ['plugin-templates'] });
navigate('/plugins/my-plugins'); navigate('/dashboard/plugins/my-plugins');
}, },
}); });
@@ -206,7 +206,7 @@ const CreatePlugin: React.FC = () => {
{t('plugins.upgradeToCreate', 'Plugin creation is available on higher-tier plans. Upgrade your subscription to create custom plugins.')} {t('plugins.upgradeToCreate', 'Plugin creation is available on higher-tier plans. Upgrade your subscription to create custom plugins.')}
</p> </p>
<button <button
onClick={() => navigate('/settings/billing')} onClick={() => navigate('/dashboard/settings/billing')}
className="px-6 py-3 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors font-medium" className="px-6 py-3 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors font-medium"
> >
{t('plugins.viewPlans', 'View Plans')} {t('plugins.viewPlans', 'View Plans')}
@@ -221,7 +221,7 @@ const CreatePlugin: React.FC = () => {
{/* Header */} {/* Header */}
<div className="mb-8"> <div className="mb-8">
<button <button
onClick={() => navigate('/plugins/my-plugins')} onClick={() => navigate('/dashboard/plugins/my-plugins')}
className="flex items-center gap-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white mb-4 transition-colors" className="flex items-center gap-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white mb-4 transition-colors"
> >
<ArrowLeft size={20} /> <ArrowLeft size={20} />
@@ -535,7 +535,7 @@ const CreatePlugin: React.FC = () => {
<div className="flex items-center justify-end gap-4 pt-4 border-t border-gray-200 dark:border-gray-700"> <div className="flex items-center justify-end gap-4 pt-4 border-t border-gray-200 dark:border-gray-700">
<button <button
type="button" type="button"
onClick={() => navigate('/plugins/my-plugins')} onClick={() => navigate('/dashboard/plugins/my-plugins')}
className="px-4 py-2 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors" className="px-4 py-2 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors"
> >
{t('common.cancel', 'Cancel')} {t('common.cancel', 'Cancel')}

View File

@@ -44,58 +44,58 @@ const HelpGuide: React.FC = () => {
title: 'Core Features', title: 'Core Features',
description: 'Essential tools for managing your scheduling business', description: 'Essential tools for managing your scheduling business',
links: [ links: [
{ label: 'Dashboard', path: '/help/dashboard', icon: <LayoutDashboard size={18} /> }, { label: 'Dashboard', path: '/dashboard/help/dashboard', icon: <LayoutDashboard size={18} /> },
{ label: 'Scheduler', path: '/help/scheduler', icon: <Calendar size={18} /> }, { label: 'Scheduler', path: '/dashboard/help/scheduler', icon: <Calendar size={18} /> },
{ label: 'Tasks', path: '/help/tasks', icon: <CheckSquare size={18} /> }, { label: 'Tasks', path: '/dashboard/help/tasks', icon: <CheckSquare size={18} /> },
], ],
}, },
{ {
title: 'Manage', title: 'Manage',
description: 'Organize your customers, services, and resources', description: 'Organize your customers, services, and resources',
links: [ links: [
{ label: 'Customers', path: '/help/customers', icon: <Users size={18} /> }, { label: 'Customers', path: '/dashboard/help/customers', icon: <Users size={18} /> },
{ label: 'Services', path: '/help/services', icon: <Briefcase size={18} /> }, { label: 'Services', path: '/dashboard/help/services', icon: <Briefcase size={18} /> },
{ label: 'Resources', path: '/help/resources', icon: <ClipboardList size={18} /> }, { label: 'Resources', path: '/dashboard/help/resources', icon: <ClipboardList size={18} /> },
{ label: 'Staff', path: '/help/staff', icon: <UserCog size={18} /> }, { label: 'Staff', path: '/dashboard/help/staff', icon: <UserCog size={18} /> },
{ label: 'Time Blocks', path: '/help/time-blocks', icon: <CalendarOff size={18} /> }, { label: 'Time Blocks', path: '/dashboard/help/time-blocks', icon: <CalendarOff size={18} /> },
], ],
}, },
{ {
title: 'Communicate', title: 'Communicate',
description: 'Stay connected with your customers', description: 'Stay connected with your customers',
links: [ links: [
{ label: 'Messages', path: '/help/messages', icon: <MessageSquare size={18} /> }, { label: 'Messages', path: '/dashboard/help/messages', icon: <MessageSquare size={18} /> },
{ label: 'Ticketing', path: '/help/ticketing', icon: <Mail size={18} /> }, { label: 'Ticketing', path: '/dashboard/help/ticketing', icon: <Mail size={18} /> },
], ],
}, },
{ {
title: 'Money', title: 'Money',
description: 'Handle payments and track revenue', description: 'Handle payments and track revenue',
links: [ links: [
{ label: 'Payments', path: '/help/payments', icon: <CreditCard size={18} /> }, { label: 'Payments', path: '/dashboard/help/payments', icon: <CreditCard size={18} /> },
], ],
}, },
{ {
title: 'Extend', title: 'Extend',
description: 'Add functionality with plugins', description: 'Add functionality with plugins',
links: [ links: [
{ label: 'Plugins', path: '/help/plugins', icon: <Puzzle size={18} /> }, { label: 'Plugins', path: '/dashboard/help/plugins', icon: <Puzzle size={18} /> },
], ],
}, },
{ {
title: 'Settings', title: 'Settings',
description: 'Configure your business settings', description: 'Configure your business settings',
links: [ links: [
{ label: 'General Settings', path: '/help/settings/general', icon: <Settings size={18} /> }, { label: 'General Settings', path: '/dashboard/help/settings/general', icon: <Settings size={18} /> },
{ label: 'Resource Types', path: '/help/settings/resource-types', icon: <Settings size={18} /> }, { label: 'Resource Types', path: '/dashboard/help/settings/resource-types', icon: <Settings size={18} /> },
{ label: 'Booking Settings', path: '/help/settings/booking', icon: <Settings size={18} /> }, { label: 'Booking Settings', path: '/dashboard/help/settings/booking', icon: <Settings size={18} /> },
{ label: 'Appearance', path: '/help/settings/appearance', icon: <Settings size={18} /> }, { label: 'Appearance', path: '/dashboard/help/settings/appearance', icon: <Settings size={18} /> },
{ label: 'Email Templates', path: '/help/settings/email', icon: <Settings size={18} /> }, { label: 'Email Templates', path: '/dashboard/help/settings/email', icon: <Settings size={18} /> },
{ label: 'Custom Domains', path: '/help/settings/domains', icon: <Settings size={18} /> }, { label: 'Custom Domains', path: '/dashboard/help/settings/domains', icon: <Settings size={18} /> },
{ label: 'API Settings', path: '/help/settings/api', icon: <Settings size={18} /> }, { label: 'API Settings', path: '/dashboard/help/settings/api', icon: <Settings size={18} /> },
{ label: 'Authentication', path: '/help/settings/auth', icon: <Settings size={18} /> }, { label: 'Authentication', path: '/dashboard/help/settings/auth', icon: <Settings size={18} /> },
{ label: 'Billing', path: '/help/settings/billing', icon: <Settings size={18} /> }, { label: 'Billing', path: '/dashboard/help/settings/billing', icon: <Settings size={18} /> },
{ label: 'Usage & Quota', path: '/help/settings/quota', icon: <Settings size={18} /> }, { label: 'Usage & Quota', path: '/dashboard/help/settings/quota', icon: <Settings size={18} /> },
], ],
}, },
]; ];
@@ -126,19 +126,19 @@ const HelpGuide: React.FC = () => {
<ol className="space-y-3"> <ol className="space-y-3">
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">1</span> <span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">1</span>
<span className="text-gray-700 dark:text-gray-300">Set up your <Link to="/help/services" className="text-brand-600 hover:underline">services</Link> - what you offer to customers</span> <span className="text-gray-700 dark:text-gray-300">Set up your <Link to="/dashboard/help/services" className="text-brand-600 hover:underline">services</Link> - what you offer to customers</span>
</li> </li>
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">2</span> <span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">2</span>
<span className="text-gray-700 dark:text-gray-300">Add your <Link to="/help/resources" className="text-brand-600 hover:underline">resources</Link> - staff, rooms, or equipment</span> <span className="text-gray-700 dark:text-gray-300">Add your <Link to="/dashboard/help/resources" className="text-brand-600 hover:underline">resources</Link> - staff, rooms, or equipment</span>
</li> </li>
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">3</span> <span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">3</span>
<span className="text-gray-700 dark:text-gray-300">Use the <Link to="/help/scheduler" className="text-brand-600 hover:underline">scheduler</Link> to manage appointments</span> <span className="text-gray-700 dark:text-gray-300">Use the <Link to="/dashboard/help/scheduler" className="text-brand-600 hover:underline">scheduler</Link> to manage appointments</span>
</li> </li>
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">4</span> <span className="flex-shrink-0 w-6 h-6 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center">4</span>
<span className="text-gray-700 dark:text-gray-300">Track your business with the <Link to="/help/dashboard" className="text-brand-600 hover:underline">dashboard</Link></span> <span className="text-gray-700 dark:text-gray-300">Track your business with the <Link to="/dashboard/help/dashboard" className="text-brand-600 hover:underline">dashboard</Link></span>
</li> </li>
</ol> </ol>
</div> </div>
@@ -185,7 +185,7 @@ const HelpGuide: React.FC = () => {
Can't find what you're looking for? Our support team is ready to help. Can't find what you're looking for? Our support team is ready to help.
</p> </p>
<Link <Link
to="/tickets" to="/dashboard/tickets"
className="inline-flex items-center gap-2 px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="inline-flex items-center gap-2 px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -409,7 +409,7 @@ const HelpTicketing: React.FC = () => {
)} )}
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
{t('helpTicketing.moreHelp.goToTickets', 'Go to Tickets')} {t('helpTicketing.moreHelp.goToTickets', 'Go to Tickets')}

View File

@@ -284,7 +284,7 @@ const MyPlugins: React.FC = () => {
</p> </p>
</div> </div>
<button <button
onClick={() => navigate('/plugins/marketplace')} onClick={() => navigate('/dashboard/plugins/marketplace')}
className="flex items-center gap-2 px-4 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors font-medium" className="flex items-center gap-2 px-4 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors font-medium"
> >
<Plus className="h-5 w-5" /> <Plus className="h-5 w-5" />
@@ -300,7 +300,7 @@ const MyPlugins: React.FC = () => {
{t('plugins.noPluginsInstalled', 'No plugins installed yet')} {t('plugins.noPluginsInstalled', 'No plugins installed yet')}
</p> </p>
<button <button
onClick={() => navigate('/plugins/marketplace')} onClick={() => navigate('/dashboard/plugins/marketplace')}
className="inline-flex items-center gap-2 px-4 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors font-medium" className="inline-flex items-center gap-2 px-4 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors font-medium"
> >
<Plus className="h-4 w-4" /> <Plus className="h-4 w-4" />
@@ -412,7 +412,7 @@ const MyPlugins: React.FC = () => {
{/* Schedule button - only if not already scheduled */} {/* Schedule button - only if not already scheduled */}
{!plugin.scheduledTaskId && ( {!plugin.scheduledTaskId && (
<button <button
onClick={() => navigate('/tasks')} onClick={() => navigate('/dashboard/tasks')}
className="flex items-center gap-2 px-3 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors text-sm font-medium" className="flex items-center gap-2 px-3 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors text-sm font-medium"
title={t('plugins.schedule', 'Schedule')} title={t('plugins.schedule', 'Schedule')}
> >
@@ -511,7 +511,7 @@ const MyPlugins: React.FC = () => {
</p> </p>
{canCreatePlugins ? ( {canCreatePlugins ? (
<button <button
onClick={() => navigate('/plugins/create')} onClick={() => navigate('/dashboard/plugins/create')}
className="inline-flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors font-medium" className="inline-flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors font-medium"
> >
<Plus className="h-4 w-4" /> <Plus className="h-4 w-4" />
@@ -519,7 +519,7 @@ const MyPlugins: React.FC = () => {
</button> </button>
) : ( ) : (
<Link <Link
to="/settings/billing" to="/dashboard/settings/billing"
className="inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-gradient-to-r from-amber-500 to-orange-500 text-white font-medium hover:from-amber-600 hover:to-orange-600 transition-all shadow-md hover:shadow-lg" className="inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-gradient-to-r from-amber-500 to-orange-500 text-white font-medium hover:from-amber-600 hover:to-orange-600 transition-all shadow-md hover:shadow-lg"
> >
<Crown className="h-4 w-4" /> <Crown className="h-4 w-4" />

View File

@@ -605,7 +605,7 @@ const PluginMarketplace: React.FC = () => {
setShowDetailsModal(false); setShowDetailsModal(false);
setSelectedPlugin(null); setSelectedPlugin(null);
setShowCode(false); setShowCode(false);
navigate('/plugins/my-plugins'); navigate('/dashboard/plugins/my-plugins');
}} }}
className="flex items-center gap-2 px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors font-medium" className="flex items-center gap-2 px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors font-medium"
> >
@@ -664,7 +664,7 @@ const PluginMarketplace: React.FC = () => {
onClick={() => { onClick={() => {
setShowWhatsNextModal(false); setShowWhatsNextModal(false);
setSelectedPlugin(null); setSelectedPlugin(null);
navigate('/tasks'); navigate('/dashboard/tasks');
}} }}
className="w-full flex items-center gap-4 p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-blue-500 dark:hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20 transition-colors text-left group" className="w-full flex items-center gap-4 p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-blue-500 dark:hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20 transition-colors text-left group"
> >
@@ -687,7 +687,7 @@ const PluginMarketplace: React.FC = () => {
onClick={() => { onClick={() => {
setShowWhatsNextModal(false); setShowWhatsNextModal(false);
setSelectedPlugin(null); setSelectedPlugin(null);
navigate('/plugins/my-plugins'); navigate('/dashboard/plugins/my-plugins');
}} }}
className="w-full flex items-center gap-4 p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-purple-500 dark:hover:border-purple-500 hover:bg-purple-50 dark:hover:bg-purple-900/20 transition-colors text-left group" className="w-full flex items-center gap-4 p-4 border border-gray-200 dark:border-gray-700 rounded-lg hover:border-purple-500 dark:hover:border-purple-500 hover:bg-purple-50 dark:hover:bg-purple-900/20 transition-colors text-left group"
> >

View File

@@ -67,7 +67,7 @@ const TrialExpired: React.FC = () => {
const paidTierFeatures = getTierFeatures(business.plan); const paidTierFeatures = getTierFeatures(business.plan);
const handleUpgrade = () => { const handleUpgrade = () => {
navigate('/payments'); navigate('/dashboard/payments');
}; };
const handleDowngrade = () => { const handleDowngrade = () => {

View File

@@ -114,7 +114,7 @@ const Upgrade: React.FC = () => {
alert(`Upgrading to ${selectedPlan} (${billingPeriod})\nThis would redirect to Stripe Checkout.`); alert(`Upgrading to ${selectedPlan} (${billingPeriod})\nThis would redirect to Stripe Checkout.`);
// After successful payment, redirect to dashboard // After successful payment, redirect to dashboard
navigate('/'); navigate('/dashboard');
} catch (err) { } catch (err) {
setError(t('upgrade.errors.processingFailed')); setError(t('upgrade.errors.processingFailed'));
console.error('Upgrade error:', err); console.error('Upgrade error:', err);

View File

@@ -104,7 +104,7 @@ const HelpComprehensive: React.FC = () => {
<h1 className="text-xl font-bold text-gray-900 dark:text-white">{t('helpComprehensive.header.title')}</h1> <h1 className="text-xl font-bold text-gray-900 dark:text-white">{t('helpComprehensive.header.title')}</h1>
</div> </div>
</div> </div>
<Link to="/tickets" className="text-sm text-brand-600 hover:text-brand-700 dark:text-brand-400"> <Link to="/dashboard/tickets" className="text-sm text-brand-600 hover:text-brand-700 dark:text-brand-400">
{t('helpComprehensive.header.contactSupport')} {t('helpComprehensive.header.contactSupport')}
</Link> </Link>
</div> </div>
@@ -194,7 +194,7 @@ const HelpComprehensive: React.FC = () => {
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">1</span> <span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">1</span>
<div> <div>
<Link to="/help/services" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1"> <Link to="/dashboard/help/services" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1">
{t('helpComprehensive.gettingStarted.step1Title')} {t('helpComprehensive.gettingStarted.step1Title')}
<ChevronRight size={14} className="text-brand-500" /> <ChevronRight size={14} className="text-brand-500" />
</Link> </Link>
@@ -204,7 +204,7 @@ const HelpComprehensive: React.FC = () => {
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">2</span> <span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">2</span>
<div> <div>
<Link to="/help/resources" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1"> <Link to="/dashboard/help/resources" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1">
{t('helpComprehensive.gettingStarted.step2Title')} {t('helpComprehensive.gettingStarted.step2Title')}
<ChevronRight size={14} className="text-brand-500" /> <ChevronRight size={14} className="text-brand-500" />
</Link> </Link>
@@ -214,7 +214,7 @@ const HelpComprehensive: React.FC = () => {
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">3</span> <span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">3</span>
<div> <div>
<Link to="/help/settings/appearance" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1"> <Link to="/dashboard/help/settings/appearance" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1">
{t('helpComprehensive.gettingStarted.step3Title')} {t('helpComprehensive.gettingStarted.step3Title')}
<ChevronRight size={14} className="text-brand-500" /> <ChevronRight size={14} className="text-brand-500" />
</Link> </Link>
@@ -224,7 +224,7 @@ const HelpComprehensive: React.FC = () => {
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">4</span> <span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">4</span>
<div> <div>
<Link to="/help/settings/booking" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1"> <Link to="/dashboard/help/settings/booking" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1">
{t('helpComprehensive.gettingStarted.step4Title')} {t('helpComprehensive.gettingStarted.step4Title')}
<ChevronRight size={14} className="text-brand-500" /> <ChevronRight size={14} className="text-brand-500" />
</Link> </Link>
@@ -234,7 +234,7 @@ const HelpComprehensive: React.FC = () => {
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
<span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">5</span> <span className="flex-shrink-0 w-7 h-7 rounded-full bg-brand-600 text-white text-sm flex items-center justify-center font-medium">5</span>
<div> <div>
<Link to="/help/scheduler" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1"> <Link to="/dashboard/help/scheduler" onClick={scrollToTop} className="font-medium text-gray-900 dark:text-white hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1">
{t('helpComprehensive.gettingStarted.step5Title')} {t('helpComprehensive.gettingStarted.step5Title')}
<ChevronRight size={14} className="text-brand-500" /> <ChevronRight size={14} className="text-brand-500" />
</Link> </Link>
@@ -705,7 +705,7 @@ const HelpComprehensive: React.FC = () => {
</div> </div>
</div> </div>
<Link to="/help/time-blocks" onClick={scrollToTop} className="flex items-center gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/time-blocks" onClick={scrollToTop} className="flex items-center gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<CalendarOff size={24} className="text-rose-500" /> <CalendarOff size={24} className="text-rose-500" />
<div> <div>
<h4 className="font-medium text-gray-900 dark:text-white">{t('helpComprehensive.timeBlocks.timeBlocksDocumentation')}</h4> <h4 className="font-medium text-gray-900 dark:text-white">{t('helpComprehensive.timeBlocks.timeBlocksDocumentation')}</h4>
@@ -783,7 +783,7 @@ const HelpComprehensive: React.FC = () => {
</div> </div>
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-3">{t('helpComprehensive.plugins.learnMore')}</h3> <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-3">{t('helpComprehensive.plugins.learnMore')}</h3>
<Link to="/help/plugins/docs" onClick={scrollToTop} className="flex items-center gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/plugins/docs" onClick={scrollToTop} className="flex items-center gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<Puzzle size={24} className="text-indigo-500" /> <Puzzle size={24} className="text-indigo-500" />
<div> <div>
<h4 className="font-medium text-gray-900 dark:text-white">{t('helpComprehensive.plugins.pluginDocumentation')}</h4> <h4 className="font-medium text-gray-900 dark:text-white">{t('helpComprehensive.plugins.pluginDocumentation')}</h4>
@@ -921,7 +921,7 @@ const HelpComprehensive: React.FC = () => {
</ul> </ul>
</div> </div>
<Link to="/help/contracts" onClick={scrollToTop} className="flex items-center gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/contracts" onClick={scrollToTop} className="flex items-center gap-3 p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<FileSignature size={24} className="text-emerald-500" /> <FileSignature size={24} className="text-emerald-500" />
<div> <div>
<h4 className="font-medium text-gray-900 dark:text-white">{t('helpComprehensive.contracts.contractsDocumentation')}</h4> <h4 className="font-medium text-gray-900 dark:text-white">{t('helpComprehensive.contracts.contractsDocumentation')}</h4>
@@ -1003,27 +1003,27 @@ const HelpComprehensive: React.FC = () => {
<div> <div>
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">{t('helpComprehensive.settings.otherSettings')}</h3> <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">{t('helpComprehensive.settings.otherSettings')}</h3>
<div className="grid grid-cols-1 md:grid-cols-2 gap-3"> <div className="grid grid-cols-1 md:grid-cols-2 gap-3">
<Link to="/help/settings/resource-types" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/settings/resource-types" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.resourceTypesLink')}</h4> <h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.resourceTypesLink')}</h4>
<p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.resourceTypesLinkDesc')}</p> <p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.resourceTypesLinkDesc')}</p>
</Link> </Link>
<Link to="/help/settings/email" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/settings/email" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.emailTemplatesLink')}</h4> <h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.emailTemplatesLink')}</h4>
<p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.emailTemplatesLinkDesc')}</p> <p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.emailTemplatesLinkDesc')}</p>
</Link> </Link>
<Link to="/help/settings/domains" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/settings/domains" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.customDomainsLink')}</h4> <h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.customDomainsLink')}</h4>
<p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.customDomainsLinkDesc')}</p> <p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.customDomainsLinkDesc')}</p>
</Link> </Link>
<Link to="/help/settings/billing" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/settings/billing" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.billingLink')}</h4> <h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.billingLink')}</h4>
<p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.billingLinkDesc')}</p> <p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.billingLinkDesc')}</p>
</Link> </Link>
<Link to="/help/settings/api" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/settings/api" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.apiSettingsLink')}</h4> <h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.apiSettingsLink')}</h4>
<p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.apiSettingsLinkDesc')}</p> <p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.apiSettingsLinkDesc')}</p>
</Link> </Link>
<Link to="/help/settings/quota" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors"> <Link to="/dashboard/help/settings/quota" onClick={scrollToTop} className="p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
<h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.usageQuotaLink')}</h4> <h4 className="font-medium text-gray-900 dark:text-white text-sm">{t('helpComprehensive.settings.usageQuotaLink')}</h4>
<p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.usageQuotaLinkDesc')}</p> <p className="text-xs text-gray-500 dark:text-gray-400">{t('helpComprehensive.settings.usageQuotaLinkDesc')}</p>
</Link> </Link>
@@ -1041,7 +1041,7 @@ const HelpComprehensive: React.FC = () => {
{t('helpComprehensive.footer.description')} {t('helpComprehensive.footer.description')}
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
{t('helpComprehensive.footer.contactSupport')} {t('helpComprehensive.footer.contactSupport')}

View File

@@ -454,12 +454,12 @@ const HelpContracts: React.FC = () => {
<section className="mb-10"> <section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">{t('help.contracts.relatedFeatures.title', 'Related Features')}</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">{t('help.contracts.relatedFeatures.title', 'Related Features')}</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link to="/help/services" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/services" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<FileText size={20} className="text-brand-500" /> <FileText size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">{t('help.contracts.relatedFeatures.servicesGuide', 'See the Services Guide for linking contracts to services')}</span> <span className="text-gray-900 dark:text-white">{t('help.contracts.relatedFeatures.servicesGuide', 'See the Services Guide for linking contracts to services')}</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/customers" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/customers" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">{t('help.contracts.relatedFeatures.customersGuide', 'See the Customers Guide for managing customer contacts')}</span> <span className="text-gray-900 dark:text-white">{t('help.contracts.relatedFeatures.customersGuide', 'See the Customers Guide for managing customer contacts')}</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
@@ -471,7 +471,7 @@ const HelpContracts: React.FC = () => {
<HelpCircle size={32} className="mx-auto text-brand-500 mb-3" /> <HelpCircle size={32} className="mx-auto text-brand-500 mb-3" />
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">{t('help.contracts.needHelp.title', 'Need Help?')}</h3> <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">{t('help.contracts.needHelp.title', 'Need Help?')}</h3>
<p className="text-gray-600 dark:text-gray-300 mb-4">{t('help.contracts.needHelp.description', 'If you have questions about using contracts, our support team is here to help.')}</p> <p className="text-gray-600 dark:text-gray-300 mb-4">{t('help.contracts.needHelp.description', 'If you have questions about using contracts, our support team is here to help.')}</p>
<button onClick={() => navigate('/tickets')} className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors">{t('help.contracts.needHelp.contactSupport', 'Contact Support')}</button> <button onClick={() => navigate('/dashboard/tickets')} className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors">{t('help.contracts.needHelp.contactSupport', 'Contact Support')}</button>
</section> </section>
</div> </div>
); );

View File

@@ -425,7 +425,7 @@ const HelpCustomers: React.FC = () => {
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/scheduler" to="/dashboard/help/scheduler"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Calendar size={20} className="text-brand-500" /> <Calendar size={20} className="text-brand-500" />
@@ -433,7 +433,7 @@ const HelpCustomers: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/messages" to="/dashboard/help/messages"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Mail size={20} className="text-brand-500" /> <Mail size={20} className="text-brand-500" />
@@ -441,7 +441,7 @@ const HelpCustomers: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/services" to="/dashboard/help/services"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Tag size={20} className="text-brand-500" /> <Tag size={20} className="text-brand-500" />
@@ -449,7 +449,7 @@ const HelpCustomers: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/payments" to="/dashboard/help/payments"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<DollarSign size={20} className="text-brand-500" /> <DollarSign size={20} className="text-brand-500" />
@@ -467,7 +467,7 @@ const HelpCustomers: React.FC = () => {
Our support team is ready to help with any questions about managing customers. Our support team is ready to help with any questions about managing customers.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -313,7 +313,7 @@ const HelpDashboard: React.FC = () => {
</h2> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/scheduler" to="/dashboard/help/scheduler"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Calendar size={20} className="text-brand-500" /> <Calendar size={20} className="text-brand-500" />
@@ -321,7 +321,7 @@ const HelpDashboard: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/customers" to="/dashboard/help/customers"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
@@ -341,7 +341,7 @@ const HelpDashboard: React.FC = () => {
If you have questions that aren't covered here, our support team is ready to help. If you have questions that aren't covered here, our support team is ready to help.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -136,12 +136,12 @@ const HelpMessages: React.FC = () => {
<section className="mb-10"> <section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link to="/help/customers" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/customers" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Customers Guide</span> <span className="text-gray-900 dark:text-white">Customers Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/ticketing" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/ticketing" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<MessageSquare size={20} className="text-brand-500" /> <MessageSquare size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Ticketing Guide</span> <span className="text-gray-900 dark:text-white">Ticketing Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
@@ -153,7 +153,7 @@ const HelpMessages: React.FC = () => {
<HelpCircle size={32} className="mx-auto text-brand-500 mb-3" /> <HelpCircle size={32} className="mx-auto text-brand-500 mb-3" />
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">Need More Help?</h3> <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">Need More Help?</h3>
<p className="text-gray-600 dark:text-gray-300 mb-4">Our support team is ready to help with any questions.</p> <p className="text-gray-600 dark:text-gray-300 mb-4">Our support team is ready to help with any questions.</p>
<button onClick={() => navigate('/tickets')} className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors">Contact Support</button> <button onClick={() => navigate('/dashboard/tickets')} className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors">Contact Support</button>
</section> </section>
</div> </div>
); );

View File

@@ -141,12 +141,12 @@ const HelpPayments: React.FC = () => {
<section className="mb-10"> <section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link to="/help/scheduler" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/scheduler" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Calendar size={20} className="text-brand-500" /> <Calendar size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Scheduler Guide</span> <span className="text-gray-900 dark:text-white">Scheduler Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/billing" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/billing" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<CreditCard size={20} className="text-brand-500" /> <CreditCard size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Billing Settings</span> <span className="text-gray-900 dark:text-white">Billing Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
@@ -158,7 +158,7 @@ const HelpPayments: React.FC = () => {
<HelpCircle size={32} className="mx-auto text-brand-500 mb-3" /> <HelpCircle size={32} className="mx-auto text-brand-500 mb-3" />
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">Need More Help?</h3> <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">Need More Help?</h3>
<p className="text-gray-600 dark:text-gray-300 mb-4">Our support team is ready to help with any questions.</p> <p className="text-gray-600 dark:text-gray-300 mb-4">Our support team is ready to help with any questions.</p>
<button onClick={() => navigate('/tickets')} className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors">Contact Support</button> <button onClick={() => navigate('/dashboard/tickets')} className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors">Contact Support</button>
</section> </section>
</div> </div>
); );

View File

@@ -238,7 +238,7 @@ const HelpPlugins: React.FC = () => {
the scripting language, available API methods, and example code. the scripting language, available API methods, and example code.
</p> </p>
<Link <Link
to="/help/plugins/docs" to="/dashboard/help/plugins/docs"
className="inline-flex items-center gap-2 px-4 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="inline-flex items-center gap-2 px-4 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
View Developer Docs View Developer Docs
@@ -259,7 +259,7 @@ const HelpPlugins: React.FC = () => {
Our support team is ready to help with any questions about plugins. Our support team is ready to help with any questions about plugins.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -490,7 +490,7 @@ const HelpResources: React.FC = () => {
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/scheduler" to="/dashboard/help/scheduler"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Calendar size={20} className="text-brand-500" /> <Calendar size={20} className="text-brand-500" />
@@ -498,7 +498,7 @@ const HelpResources: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/staff" to="/dashboard/help/staff"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
@@ -506,7 +506,7 @@ const HelpResources: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/settings/resource-types" to="/dashboard/help/settings/resource-types"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Settings size={20} className="text-brand-500" /> <Settings size={20} className="text-brand-500" />
@@ -514,7 +514,7 @@ const HelpResources: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/services" to="/dashboard/help/services"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<ClipboardList size={20} className="text-brand-500" /> <ClipboardList size={20} className="text-brand-500" />
@@ -532,7 +532,7 @@ const HelpResources: React.FC = () => {
Our support team is ready to help with any questions about managing resources. Our support team is ready to help with any questions about managing resources.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -595,7 +595,7 @@ const HelpScheduler: React.FC = () => {
</h2> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/resources" to="/dashboard/help/resources"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
@@ -603,7 +603,7 @@ const HelpScheduler: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/services" to="/dashboard/help/services"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Clock size={20} className="text-brand-500" /> <Clock size={20} className="text-brand-500" />
@@ -611,7 +611,7 @@ const HelpScheduler: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/customers" to="/dashboard/help/customers"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
@@ -631,7 +631,7 @@ const HelpScheduler: React.FC = () => {
If you have questions that aren't covered here, our support team is ready to help. If you have questions that aren't covered here, our support team is ready to help.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -473,7 +473,7 @@ const HelpServices: React.FC = () => {
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/scheduler" to="/dashboard/help/scheduler"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Clock size={20} className="text-brand-500" /> <Clock size={20} className="text-brand-500" />
@@ -481,7 +481,7 @@ const HelpServices: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/resources" to="/dashboard/help/resources"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
@@ -489,7 +489,7 @@ const HelpServices: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/customers" to="/dashboard/help/customers"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
@@ -497,7 +497,7 @@ const HelpServices: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/settings/booking" to="/dashboard/help/settings/booking"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Settings size={20} className="text-brand-500" /> <Settings size={20} className="text-brand-500" />
@@ -515,7 +515,7 @@ const HelpServices: React.FC = () => {
Our support team is ready to help with any questions about managing services. Our support team is ready to help with any questions about managing services.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -354,7 +354,7 @@ const HelpSettingsApi: React.FC = () => {
</h2> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/settings/auth" to="/dashboard/help/settings/auth"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Shield size={20} className="text-brand-500" /> <Shield size={20} className="text-brand-500" />
@@ -362,7 +362,7 @@ const HelpSettingsApi: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/plugins" to="/dashboard/help/plugins"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Settings size={20} className="text-brand-500" /> <Settings size={20} className="text-brand-500" />
@@ -382,7 +382,7 @@ const HelpSettingsApi: React.FC = () => {
Our support team is ready to help with API integration questions. Our support team is ready to help with API integration questions.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -344,22 +344,22 @@ const HelpSettingsAppearance: React.FC = () => {
<section className="mb-10"> <section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link to="/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Eye size={20} className="text-brand-500" /> <Eye size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">General Settings</span> <span className="text-gray-900 dark:text-white">General Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/booking" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/booking" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Upload size={20} className="text-brand-500" /> <Upload size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Booking Settings</span> <span className="text-gray-900 dark:text-white">Booking Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/email" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/email" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Image size={20} className="text-brand-500" /> <Image size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Email Settings</span> <span className="text-gray-900 dark:text-white">Email Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/domains" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/domains" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Palette size={20} className="text-brand-500" /> <Palette size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Custom Domains</span> <span className="text-gray-900 dark:text-white">Custom Domains</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
@@ -375,7 +375,7 @@ const HelpSettingsAppearance: React.FC = () => {
Our support team is ready to help with any branding questions. Our support team is ready to help with any branding questions.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -337,7 +337,7 @@ const HelpSettingsAuth: React.FC = () => {
</h2> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/customers" to="/dashboard/help/customers"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
@@ -345,7 +345,7 @@ const HelpSettingsAuth: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/settings/api" to="/dashboard/help/settings/api"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Key size={20} className="text-brand-500" /> <Key size={20} className="text-brand-500" />
@@ -365,7 +365,7 @@ const HelpSettingsAuth: React.FC = () => {
Our support team is ready to help with authentication configuration. Our support team is ready to help with authentication configuration.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -331,22 +331,22 @@ const HelpSettingsBilling: React.FC = () => {
<section className="mb-10"> <section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link to="/help/settings/quota" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/quota" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Calendar size={20} className="text-brand-500" /> <Calendar size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Usage & Quota</span> <span className="text-gray-900 dark:text-white">Usage & Quota</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/payments" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/payments" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<CreditCard size={20} className="text-brand-500" /> <CreditCard size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Payments Guide</span> <span className="text-gray-900 dark:text-white">Payments Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<CheckCircle size={20} className="text-brand-500" /> <CheckCircle size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">General Settings</span> <span className="text-gray-900 dark:text-white">General Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/appearance" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/appearance" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Crown size={20} className="text-brand-500" /> <Crown size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Branding Settings</span> <span className="text-gray-900 dark:text-white">Branding Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
@@ -362,7 +362,7 @@ const HelpSettingsBilling: React.FC = () => {
Our support team is ready to help with billing questions. Our support team is ready to help with billing questions.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -226,7 +226,7 @@ const HelpSettingsBooking: React.FC = () => {
yourbusiness.smoothschedule.com), you can set up a custom domain. yourbusiness.smoothschedule.com), you can set up a custom domain.
</p> </p>
<Link <Link
to="/settings/custom-domains" to="/dashboard/settings/custom-domains"
className="inline-flex items-center gap-2 text-brand-600 hover:text-brand-700 dark:text-brand-400 font-medium" className="inline-flex items-center gap-2 text-brand-600 hover:text-brand-700 dark:text-brand-400 font-medium"
> >
Set up a custom domain <ChevronRight size={16} /> Set up a custom domain <ChevronRight size={16} />
@@ -273,22 +273,22 @@ const HelpSettingsBooking: React.FC = () => {
<section className="mb-10"> <section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link to="/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Calendar size={20} className="text-brand-500" /> <Calendar size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">General Settings</span> <span className="text-gray-900 dark:text-white">General Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/appearance" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/appearance" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Share2 size={20} className="text-brand-500" /> <Share2 size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Appearance Settings</span> <span className="text-gray-900 dark:text-white">Appearance Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/services" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/services" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Calendar size={20} className="text-brand-500" /> <Calendar size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Services Guide</span> <span className="text-gray-900 dark:text-white">Services Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/domains" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/domains" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Globe size={20} className="text-brand-500" /> <Globe size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Custom Domains</span> <span className="text-gray-900 dark:text-white">Custom Domains</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
@@ -304,7 +304,7 @@ const HelpSettingsBooking: React.FC = () => {
Our support team is ready to help with any questions about your booking setup. Our support team is ready to help with any questions about your booking setup.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -367,7 +367,7 @@ const HelpSettingsDomains: React.FC = () => {
</h2> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/settings/appearance" to="/dashboard/help/settings/appearance"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Settings size={20} className="text-brand-500" /> <Settings size={20} className="text-brand-500" />
@@ -375,7 +375,7 @@ const HelpSettingsDomains: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/settings/booking" to="/dashboard/help/settings/booking"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Globe size={20} className="text-brand-500" /> <Globe size={20} className="text-brand-500" />
@@ -395,7 +395,7 @@ const HelpSettingsDomains: React.FC = () => {
Our support team is ready to help with domain configuration. Our support team is ready to help with domain configuration.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -299,22 +299,22 @@ const HelpSettingsEmail: React.FC = () => {
<section className="mb-10"> <section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link to="/help/ticketing" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/ticketing" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Mail size={20} className="text-brand-500" /> <Mail size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Ticketing Guide</span> <span className="text-gray-900 dark:text-white">Ticketing Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<CheckCircle size={20} className="text-brand-500" /> <CheckCircle size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">General Settings</span> <span className="text-gray-900 dark:text-white">General Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/appearance" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/appearance" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Star size={20} className="text-brand-500" /> <Star size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Branding Settings</span> <span className="text-gray-900 dark:text-white">Branding Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/staff" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/staff" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Mail size={20} className="text-brand-500" /> <Mail size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Staff Guide</span> <span className="text-gray-900 dark:text-white">Staff Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
@@ -330,7 +330,7 @@ const HelpSettingsEmail: React.FC = () => {
Our support team is ready to help with email setup questions. Our support team is ready to help with email setup questions.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -273,7 +273,7 @@ const HelpSettingsGeneral: React.FC = () => {
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Settings</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Settings</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/settings/appearance" to="/dashboard/help/settings/appearance"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Settings size={20} className="text-brand-500" /> <Settings size={20} className="text-brand-500" />
@@ -281,7 +281,7 @@ const HelpSettingsGeneral: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/settings/booking" to="/dashboard/help/settings/booking"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Globe size={20} className="text-brand-500" /> <Globe size={20} className="text-brand-500" />
@@ -289,7 +289,7 @@ const HelpSettingsGeneral: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/settings/domains" to="/dashboard/help/settings/domains"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Globe size={20} className="text-brand-500" /> <Globe size={20} className="text-brand-500" />
@@ -297,7 +297,7 @@ const HelpSettingsGeneral: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/settings/email" to="/dashboard/help/settings/email"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Mail size={20} className="text-brand-500" /> <Mail size={20} className="text-brand-500" />
@@ -315,7 +315,7 @@ const HelpSettingsGeneral: React.FC = () => {
Our support team is ready to help with any questions about general settings. Our support team is ready to help with any questions about general settings.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -222,7 +222,7 @@ const HelpSettingsQuota: React.FC = () => {
resolves the overage without archiving anything. resolves the overage without archiving anything.
</p> </p>
<Link <Link
to="/settings/billing" to="/dashboard/settings/billing"
className="inline-flex items-center gap-2 text-sm text-brand-600 dark:text-brand-400 hover:underline" className="inline-flex items-center gap-2 text-sm text-brand-600 dark:text-brand-400 hover:underline"
> >
<CreditCard size={14} /> <CreditCard size={14} />
@@ -376,7 +376,7 @@ const HelpSettingsQuota: React.FC = () => {
</h2> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/settings/billing" to="/dashboard/help/settings/billing"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<CreditCard size={20} className="text-brand-500" /> <CreditCard size={20} className="text-brand-500" />
@@ -384,7 +384,7 @@ const HelpSettingsQuota: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/resources" to="/dashboard/help/resources"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Briefcase size={20} className="text-brand-500" /> <Briefcase size={20} className="text-brand-500" />
@@ -404,7 +404,7 @@ const HelpSettingsQuota: React.FC = () => {
Our support team is ready to help with quota management questions. Our support team is ready to help with quota management questions.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -289,22 +289,22 @@ const HelpSettingsResourceTypes: React.FC = () => {
<section className="mb-10"> <section className="mb-10">
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link to="/help/resources" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/resources" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Layers size={20} className="text-brand-500" /> <Layers size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Resources Guide</span> <span className="text-gray-900 dark:text-white">Resources Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/staff" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/staff" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Staff Guide</span> <span className="text-gray-900 dark:text-white">Staff Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/scheduler" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/scheduler" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<Layers size={20} className="text-brand-500" /> <Layers size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">Scheduler Guide</span> <span className="text-gray-900 dark:text-white">Scheduler Guide</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link to="/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"> <Link to="/dashboard/help/settings/general" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors">
<CheckCircle size={20} className="text-brand-500" /> <CheckCircle size={20} className="text-brand-500" />
<span className="text-gray-900 dark:text-white">General Settings</span> <span className="text-gray-900 dark:text-white">General Settings</span>
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
@@ -320,7 +320,7 @@ const HelpSettingsResourceTypes: React.FC = () => {
Our support team is ready to help with resource type questions. Our support team is ready to help with resource type questions.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -485,7 +485,7 @@ const HelpStaff: React.FC = () => {
<h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2> <h2 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Related Features</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/resources" to="/dashboard/help/resources"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Calendar size={20} className="text-brand-500" /> <Calendar size={20} className="text-brand-500" />
@@ -493,7 +493,7 @@ const HelpStaff: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/scheduler" to="/dashboard/help/scheduler"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Clock size={20} className="text-brand-500" /> <Clock size={20} className="text-brand-500" />
@@ -501,7 +501,7 @@ const HelpStaff: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/settings/auth" to="/dashboard/help/settings/auth"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Shield size={20} className="text-brand-500" /> <Shield size={20} className="text-brand-500" />
@@ -509,7 +509,7 @@ const HelpStaff: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/customers" to="/dashboard/help/customers"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Users size={20} className="text-brand-500" /> <Users size={20} className="text-brand-500" />
@@ -527,7 +527,7 @@ const HelpStaff: React.FC = () => {
Our support team is ready to help with any questions about managing staff. Our support team is ready to help with any questions about managing staff.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -311,7 +311,7 @@ const HelpTasks: React.FC = () => {
</h2> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Link <Link
to="/help/plugins-overview" to="/dashboard/help/plugins-overview"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<Zap size={20} className="text-brand-500" /> <Zap size={20} className="text-brand-500" />
@@ -319,7 +319,7 @@ const HelpTasks: React.FC = () => {
<ChevronRight size={16} className="text-gray-400 ml-auto" /> <ChevronRight size={16} className="text-gray-400 ml-auto" />
</Link> </Link>
<Link <Link
to="/help/plugins" to="/dashboard/help/plugins"
className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors" className="flex items-center gap-3 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 hover:border-brand-500 transition-colors"
> >
<FileText size={20} className="text-brand-500" /> <FileText size={20} className="text-brand-500" />
@@ -339,7 +339,7 @@ const HelpTasks: React.FC = () => {
If you have questions that aren't covered here, our support team is ready to help. If you have questions that aren't covered here, our support team is ready to help.
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
Contact Support Contact Support

View File

@@ -956,7 +956,7 @@ const StaffHelp: React.FC<StaffHelpProps> = ({ user }) => {
)} )}
</p> </p>
<button <button
onClick={() => navigate('/tickets')} onClick={() => navigate('/dashboard/tickets')}
className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors" className="px-6 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700 transition-colors"
> >
{t('staffHelp.footer.openTicket', 'Open a Ticket')} {t('staffHelp.footer.openTicket', 'Open a Ticket')}

View File

@@ -11,6 +11,7 @@ import {
import { PlatformBusiness, getCustomTier, updateCustomTier, deleteCustomTier } from '../../../api/platform'; import { PlatformBusiness, getCustomTier, updateCustomTier, deleteCustomTier } from '../../../api/platform';
import DynamicFeaturesEditor from '../../../components/platform/DynamicFeaturesEditor'; import DynamicFeaturesEditor from '../../../components/platform/DynamicFeaturesEditor';
import { TenantCustomTier } from '../../../types'; import { TenantCustomTier } from '../../../types';
import { buildSubdomainUrl } from '../../../utils/domain';
interface BusinessEditModalProps { interface BusinessEditModalProps {
business: PlatformBusiness | null; business: PlatformBusiness | null;
@@ -445,7 +446,7 @@ const BusinessEditModal: React.FC<BusinessEditModalProps> = ({ business, isOpen,
Access the public-facing website builder for this business. Current limit: {(featureValues.max_public_pages === null || featureValues.max_public_pages === -1) ? 'unlimited' : (featureValues.max_public_pages ?? 0)} page{(featureValues.max_public_pages ?? 0) !== 1 ? 's' : ''}. Access the public-facing website builder for this business. Current limit: {(featureValues.max_public_pages === null || featureValues.max_public_pages === -1) ? 'unlimited' : (featureValues.max_public_pages ?? 0)} page{(featureValues.max_public_pages ?? 0) !== 1 ? 's' : ''}.
</p> </p>
<a <a
href={`http://${business.subdomain}.lvh.me:5173/site-editor`} href={buildSubdomainUrl(business.subdomain, '/dashboard/site-editor')}
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="inline-flex items-center gap-2 px-4 py-2 bg-indigo-50 dark:bg-indigo-900/20 text-indigo-600 dark:text-indigo-400 rounded-lg hover:bg-indigo-100 dark:hover:bg-indigo-900/30 font-medium text-sm transition-colors" className="inline-flex items-center gap-2 px-4 py-2 bg-indigo-50 dark:bg-indigo-900/20 text-indigo-600 dark:text-indigo-400 rounded-lg hover:bg-indigo-100 dark:hover:bg-indigo-900/30 font-medium text-sm transition-colors"

View File

@@ -134,7 +134,7 @@ const CustomDomainsSettings: React.FC = () => {
{isCustomDomainLocked && ( {isCustomDomainLocked && (
<div className="absolute inset-0 z-10 bg-white/70 dark:bg-gray-900/70 backdrop-blur-[2px] rounded-xl flex items-center justify-center"> <div className="absolute inset-0 z-10 bg-white/70 dark:bg-gray-900/70 backdrop-blur-[2px] rounded-xl flex items-center justify-center">
<Link <Link
to="/settings/billing" to="/dashboard/settings/billing"
className="inline-flex items-center gap-2 px-6 py-3 bg-gradient-to-r from-amber-500 to-orange-500 text-white font-semibold rounded-lg shadow-lg hover:from-amber-600 hover:to-orange-600 transition-all" className="inline-flex items-center gap-2 px-6 py-3 bg-gradient-to-r from-amber-500 to-orange-500 text-white font-semibold rounded-lg shadow-lg hover:from-amber-600 hover:to-orange-600 transition-all"
> >
<Lock size={18} /> <Lock size={18} />

View File

@@ -436,7 +436,7 @@ const QuotaSettings: React.FC = () => {
)} )}
</button> </button>
<Link <Link
to="/settings/billing" to="/dashboard/settings/billing"
className="flex items-center gap-2 px-4 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700" className="flex items-center gap-2 px-4 py-2 bg-brand-600 text-white rounded-lg hover:bg-brand-700"
> >
{t('quota.page.upgradeInstead', 'Upgrade Plan Instead')} {t('quota.page.upgradeInstead', 'Upgrade Plan Instead')}