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:
@@ -119,7 +119,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: true,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -160,7 +160,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -229,7 +229,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: true,
|
||||
api_access: true,
|
||||
custom_domain: true,
|
||||
white_label: true,
|
||||
remove_branding: true,
|
||||
custom_oauth: true,
|
||||
automations: true,
|
||||
can_create_automations: true,
|
||||
@@ -258,7 +258,7 @@ describe('usePlanFeatures', () => {
|
||||
expect(result.current.canUse('webhooks')).toBe(true);
|
||||
expect(result.current.canUse('api_access')).toBe(true);
|
||||
expect(result.current.canUse('custom_domain')).toBe(true);
|
||||
expect(result.current.canUse('white_label')).toBe(true);
|
||||
expect(result.current.canUse('remove_branding')).toBe(true);
|
||||
expect(result.current.canUse('custom_oauth')).toBe(true);
|
||||
expect(result.current.canUse('automations')).toBe(true);
|
||||
expect(result.current.canUse('tasks')).toBe(true);
|
||||
@@ -286,7 +286,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -326,7 +326,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -365,7 +365,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: true,
|
||||
api_access: true,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -404,7 +404,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: true,
|
||||
api_access: true,
|
||||
custom_domain: true,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -446,7 +446,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: true,
|
||||
api_access: true,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -486,7 +486,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: true,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -526,7 +526,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -565,7 +565,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -606,7 +606,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -649,7 +649,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -749,7 +749,7 @@ describe('usePlanFeatures', () => {
|
||||
webhooks: false,
|
||||
api_access: false,
|
||||
custom_domain: false,
|
||||
white_label: false,
|
||||
remove_branding: false,
|
||||
custom_oauth: false,
|
||||
plugins: false,
|
||||
tasks: false,
|
||||
@@ -779,7 +779,7 @@ describe('FEATURE_NAMES', () => {
|
||||
'webhooks',
|
||||
'api_access',
|
||||
'custom_domain',
|
||||
'white_label',
|
||||
'remove_branding',
|
||||
'custom_oauth',
|
||||
'automations',
|
||||
'can_create_automations',
|
||||
@@ -805,7 +805,7 @@ describe('FEATURE_NAMES', () => {
|
||||
expect(FEATURE_NAMES.webhooks).toBe('Webhooks');
|
||||
expect(FEATURE_NAMES.api_access).toBe('API Access');
|
||||
expect(FEATURE_NAMES.custom_domain).toBe('Custom Domain');
|
||||
expect(FEATURE_NAMES.white_label).toBe('White Label');
|
||||
expect(FEATURE_NAMES.remove_branding).toBe('Remove Branding');
|
||||
expect(FEATURE_NAMES.custom_oauth).toBe('Custom OAuth');
|
||||
expect(FEATURE_NAMES.automations).toBe('Automations');
|
||||
expect(FEATURE_NAMES.can_create_automations).toBe('Custom Automation Creation');
|
||||
@@ -827,7 +827,7 @@ describe('FEATURE_DESCRIPTIONS', () => {
|
||||
'webhooks',
|
||||
'api_access',
|
||||
'custom_domain',
|
||||
'white_label',
|
||||
'remove_branding',
|
||||
'custom_oauth',
|
||||
'automations',
|
||||
'can_create_automations',
|
||||
@@ -853,7 +853,7 @@ describe('FEATURE_DESCRIPTIONS', () => {
|
||||
expect(FEATURE_DESCRIPTIONS.webhooks).toContain('webhooks');
|
||||
expect(FEATURE_DESCRIPTIONS.api_access).toContain('API');
|
||||
expect(FEATURE_DESCRIPTIONS.custom_domain).toContain('custom domain');
|
||||
expect(FEATURE_DESCRIPTIONS.white_label).toContain('branding');
|
||||
expect(FEATURE_DESCRIPTIONS.remove_branding).toContain('branding');
|
||||
expect(FEATURE_DESCRIPTIONS.custom_oauth).toContain('OAuth');
|
||||
expect(FEATURE_DESCRIPTIONS.automations).toContain('Automate');
|
||||
expect(FEATURE_DESCRIPTIONS.can_create_automations).toContain('automations');
|
||||
|
||||
Reference in New Issue
Block a user