Consolidate white_label to remove_branding and add embed widget

- Rename white_label feature to remove_branding across frontend/backend
- Update billing catalog, plan features, and permission checks
- Add dark mode support to Recharts tooltips with useDarkMode hook
- Create embeddable booking widget with EmbedBooking page
- Add EmbedWidgetSettings for generating embed code
- Fix Appearance settings page permission check
- Update test files for new feature naming
- Add notes field to User model

🤖 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-16 21:20:17 -05:00
parent 73d2bee01a
commit 6a6ad63e7b
31 changed files with 2115 additions and 181 deletions

View File

@@ -134,6 +134,10 @@ const BillingSettings = React.lazy(() => import('./pages/settings/BillingSetting
const QuotaSettings = React.lazy(() => import('./pages/settings/QuotaSettings'));
const BusinessHoursSettings = React.lazy(() => import('./pages/settings/BusinessHoursSettings'));
const StaffRolesSettings = React.lazy(() => import('./pages/settings/StaffRolesSettings'));
const EmbedWidgetSettings = React.lazy(() => import('./pages/settings/EmbedWidgetSettings'));
// Embed pages
const EmbedBooking = React.lazy(() => import('./pages/EmbedBooking'));
import { Toaster } from 'react-hot-toast'; // Import Toaster for notifications
@@ -358,6 +362,7 @@ const AppContent: React.FC = () => {
<Routes>
<Route path="/" element={<PublicPage />} />
<Route path="/book" element={<BookingFlow />} />
<Route path="/embed" element={<EmbedBooking />} />
<Route path="/login" element={<LoginPage />} />
<Route path="/mfa-verify" element={<MFAVerifyPage />} />
<Route path="/oauth/callback/:provider" element={<OAuthCallback />} />
@@ -688,6 +693,7 @@ const AppContent: React.FC = () => {
{/* Public routes outside BusinessLayout */}
<Route path="/" element={<PublicPage />} />
<Route path="/book" element={<BookingFlow />} />
<Route path="/embed" element={<EmbedBooking />} />
<Route path="/login" element={<LoginPage />} />
<Route path="/sign/:token" element={<ContractSigning />} />
@@ -953,6 +959,7 @@ const AppContent: React.FC = () => {
<Route path="business-hours" element={<BusinessHoursSettings />} />
<Route path="email-templates" element={<SystemEmailTemplates />} />
<Route path="custom-domains" element={<CustomDomainsSettings />} />
<Route path="embed-widget" element={<EmbedWidgetSettings />} />
<Route path="api" element={<ApiSettings />} />
<Route path="staff-roles" element={<StaffRolesSettings />} />
<Route path="authentication" element={<AuthenticationSettings />} />