@bcrumbs.net/inbox 0.0.60 → 0.0.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/ar/inbox.json +16 -3
- package/assets/en/inbox.json +15 -2
- package/index.cjs.js +49115 -49417
- package/index.esm.js +49119 -49421
- package/package.json +4 -4
- package/playwright.config.d.ts +9 -0
- package/src/app/ai/components/Crumby/CrumbyComposer.d.ts +1 -1
- package/src/app/ai/components/playground/Button.d.ts +1 -1
- package/src/app/ai/components/playground/ThreadMessages.d.ts +5 -1
- package/src/app/ai/components/playground/TooltipIconButton.d.ts +2 -2
- package/src/app/auth/components/ClerkForgetPanel.d.ts +6 -0
- package/src/app/auth/components/ClerkResetPasswordPanel.d.ts +6 -0
- package/src/app/auth/components/ClerkSessionBridge.d.ts +12 -0
- package/src/app/auth/components/ClerkSignInPanel.d.ts +2 -0
- package/src/app/auth/components/ClerkSignUpPanel.d.ts +2 -0
- package/src/app/auth/components/UserAvatar/AccountSettingsDropdown.d.ts +3 -5
- package/src/app/auth/components/password-page/PasswordFormView.d.ts +10 -1
- package/src/app/auth/config/authProvider.d.ts +12 -0
- package/src/app/auth/config/clerkAppearance.d.ts +430 -0
- package/src/app/auth/hooks/useRoles.d.ts +1 -0
- package/src/app/auth/pages/Auth.style.d.ts +82 -0
- package/src/app/auth/pages/CheckAuth.d.ts +7 -4
- package/src/app/auth/pages/Forget.d.ts +2 -2
- package/src/app/auth/pages/Login.d.ts +2 -3
- package/src/app/auth/pages/Login.style.d.ts +1 -0
- package/src/app/auth/pages/Password.d.ts +2 -2
- package/src/app/auth/pages/Register.d.ts +2 -3
- package/src/app/auth/pages/Register.style.d.ts +5 -0
- package/src/app/auth/utils/avatar.d.ts +1 -0
- package/src/app/auth/utils/clerkTracking.d.ts +9 -0
- package/src/app/auth/utils/resetWorkspaceRoleState.d.ts +4 -0
- package/src/app/billing/utils/pendingPlanPurchaseStorage.d.ts +6 -6
- package/src/app/broadcast/components/BroadcastAnalysisContent.d.ts +3 -1
- package/src/app/broadcast/components/BroadcastAnalysisReciepients.d.ts +6 -1
- package/src/app/broadcast/components/BroadcastAnalysisReciepientsHeader.d.ts +7 -1
- package/src/app/contact/components/ContactFilterOptions.d.ts +4 -1
- package/src/app/contact/components/ContactFormFields.d.ts +4 -1
- package/src/app/dashboard/components/AgentPerformanceCard.d.ts +2 -1
- package/src/app/dashboard/components/BroadcastCampaignProgressCard.d.ts +3 -1
- package/src/app/dashboard/components/DashboardExportButton.d.ts +8 -0
- package/src/app/dashboard/components/DashboardSections.d.ts +2 -1
- package/src/app/dashboard/components/OpenedChatsCard.d.ts +5 -1
- package/src/app/dashboard/components/TagPerformanceCard.d.ts +2 -1
- package/src/app/dashboard/utils/dashboardReportExports.d.ts +100 -0
- package/src/app/generic/components/PhoneDigitsInput.d.ts +7 -0
- package/src/app/generic/hooks/useOnlineStatus.d.ts +1 -1
- package/src/app/generic/hooks/useResourceColumns.d.ts +3 -1
- package/src/app/inbox/components/Chat/ChatHeader.d.ts +2 -0
- package/src/app/inbox/components/Chat/NoConvSelected.d.ts +5 -0
- package/src/app/inbox/components/Chat/index.d.ts +4 -1
- package/src/app/inbox/components/NewDetails/ClientSection.d.ts +2 -1
- package/src/app/inbox/components/NewDetails/UserHeader.d.ts +2 -1
- package/src/app/inbox/components/NewDetails/index.d.ts +2 -1
- package/src/app/inbox/components/Shared/Inbox.d.ts +4 -1
- package/src/app/inbox/components/Shared/MobileChatDetailsSlider.d.ts +15 -0
- package/src/app/inbox/components/Shared/MobileDetailsSwipeHint.d.ts +9 -0
- package/src/app/inbox/components/Shared/MobileMenu.d.ts +2 -1
- package/src/app/inbox/hooks/useConvActions.d.ts +1 -0
- package/src/app/inbox/hooks/useConversationsPerodicFetch.d.ts +3 -0
- package/src/app/inbox/hooks/useStartedTimeAgo.d.ts +5 -0
- package/src/app/inbox/utils/convs.d.ts +8 -1
- package/src/app/inbox/utils/inboxAssignableAis.d.ts +11 -1
- package/src/app/layout/constants/index.d.ts +10 -10
- package/src/app/layout/hooks/useCrumbyEnabled.d.ts +18 -0
- package/src/app/layout/hooks/useCrumbyUpgradeAction.d.ts +10 -0
- package/src/app/managemnet/config/types.d.ts +2 -0
- package/src/app/onboarding/utils/onboardingChecklistPersistence.d.ts +18 -0
- package/src/app/onboarding/utils/onboardingChecklistStorage.d.ts +10 -1
- package/src/app/resources/components/Integrations/Facebook/PagePickerPopup.d.ts +3 -1
- package/src/app/subscriptions/components/NewSubscription/OnboardingStepper.d.ts +8 -0
- package/src/app/subscriptions/components/NewSubscription/SubscriptionFailed.d.ts +6 -0
- package/src/app/subscriptions/components/NewSubscription/SubscriptionName.d.ts +1 -1
- package/src/app/subscriptions/components/NewSubscription/SubscriptionSuccess.d.ts +5 -2
- package/src/app/subscriptions/components/NewSubscription/WorkspaceStepLayout.d.ts +11 -0
- package/src/app/subscriptions/components/Plans/ShowcasePlans.d.ts +3 -1
- package/src/app/subscriptions/components/SubscriptionSwitcher/Switcher.d.ts +1 -1
- package/src/app/subscriptions/pages/NewSubscription.d.ts +1 -1
- package/src/app/subscriptions/utils/estimateUpgradeProration.d.ts +19 -0
- package/src/app/subscriptions/utils/newWorkspaceCheckout.d.ts +16 -0
- package/src/assets/locales/translations.d.ts +84 -0
- package/src/environments/types.d.ts +5 -0
- package/src/graphql.autogenerated.d.ts +582 -1
- package/src/routes/PrivateRoutes.d.ts +1 -5
- package/src/utils/exportCsv.d.ts +8 -0
- package/src/utils/textUtils.d.ts +2 -0
- package/src/app/broadcast/components/BroadcastTargetingComplianceNotice.d.ts +0 -2
- package/src/app/generic/hooks/WithMenuConfig.d.ts +0 -1
- package/src/app/layout/components/language/LanguageDropdown.d.ts +0 -9
|
@@ -26,6 +26,9 @@ interface BuildAgentsMenuOptions {
|
|
|
26
26
|
assignableAis?: Ai[];
|
|
27
27
|
onAssignableAiSelect?: (aiId: string) => void;
|
|
28
28
|
onUnassigneeSelect?: () => void;
|
|
29
|
+
/** When false, Crumby is shown locked with an Upgrade CTA */
|
|
30
|
+
isCrumbyEnabled?: boolean;
|
|
31
|
+
onCrumbyUpgrade?: () => void;
|
|
29
32
|
t: any;
|
|
30
33
|
includeAllOption?: boolean;
|
|
31
34
|
onAllSelect?: () => void;
|
|
@@ -45,9 +48,13 @@ export declare function getLastMessage(messages: Maybe<Message[]> | undefined, f
|
|
|
45
48
|
export declare function hashStatuses(messages?: Maybe<Message[]> | null): string;
|
|
46
49
|
export declare function isOutside24HourWindow(message: Message | null | undefined): boolean;
|
|
47
50
|
export declare function formatSeconds(value: number): string;
|
|
51
|
+
type StartedTimeAgoTranslation = (key: string, options?: {
|
|
52
|
+
count?: number;
|
|
53
|
+
}) => string;
|
|
54
|
+
export declare function formatStartedTimeAgo(createdAt: string, t: StartedTimeAgoTranslation): string;
|
|
48
55
|
export declare const getMessageStatusIcon: (message: Message | null | undefined) => import("@emotion/react/jsx-runtime").JSX.Element | null;
|
|
49
56
|
export declare const getDisplayName: (clientData: ClientQuery['client'] | undefined) => string;
|
|
50
|
-
export declare const buildAgentsMenu: ({ agents, myAgent, selectedAgentId, selectedAiId, onAgentSelect, assignableAis, onAssignableAiSelect, onUnassigneeSelect, t, includeAllOption, onAllSelect, addSeparatorAtLast, counts, showAllAgents, }: BuildAgentsMenuOptions) => ActionItem[];
|
|
57
|
+
export declare const buildAgentsMenu: ({ agents, myAgent, selectedAgentId, selectedAiId, onAgentSelect, assignableAis, onAssignableAiSelect, onUnassigneeSelect, isCrumbyEnabled, onCrumbyUpgrade, t, includeAllOption, onAllSelect, addSeparatorAtLast, counts, showAllAgents, }: BuildAgentsMenuOptions) => ActionItem[];
|
|
51
58
|
export declare const buildLifeCycleMenu: ({ convStages, selectedStageId, onStageSelect, t, addSeparatorAtLast, }: BuildLifeCycleMenuOptions) => ActionItem[];
|
|
52
59
|
interface BuildTagsMenuOptions {
|
|
53
60
|
conversationTags: Tag[];
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { Ai } from '../../../graphql.autogenerated';
|
|
2
2
|
/** Stored name for the primary Crumby assistant record */
|
|
3
3
|
export declare const CRUMBY_AI_RECORD_NAME = "Crumby AI";
|
|
4
|
+
/** Placeholder id used when Crumby is shown as a locked upgrade option */
|
|
5
|
+
export declare const CRUMBY_UPGRADE_PLACEHOLDER_ID = "__crumby_upgrade__";
|
|
6
|
+
export declare const isCrumbyAi: (ai: Pick<Ai, 'name' | 'type'> | undefined | null) => boolean;
|
|
7
|
+
export declare const createCrumbyUpgradePlaceholder: () => Ai;
|
|
4
8
|
/** Primary Crumby assistant rows first, then remaining AIs by name */
|
|
5
9
|
export declare function sortInboxAssignableAis(ais: Ai[]): Ai[];
|
|
6
10
|
/**
|
|
7
11
|
* Workspace AIs users may assign or filter by in the inbox.
|
|
8
|
-
* Excludes internal assistants
|
|
12
|
+
* Excludes internal assistants. When Crumby is not plan-enabled, it is omitted
|
|
13
|
+
* from filters; assign menus inject a locked upgrade entry separately.
|
|
9
14
|
*/
|
|
10
15
|
export declare function getInboxAssignableAis(aiAgents: Ai[] | undefined, isCrumbyEnabled: boolean): Ai[];
|
|
16
|
+
/**
|
|
17
|
+
* Assign-menu list: always includes Crumby. When the feature is locked, uses an
|
|
18
|
+
* existing Crumby record if present, otherwise a non-assignable placeholder.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getInboxAssignableAisForMenu(aiAgents: Ai[] | undefined, isCrumbyEnabled: boolean, existingCrumby?: Ai | null): Ai[];
|
|
@@ -8,8 +8,18 @@ export declare const BCMainNavigation: {
|
|
|
8
8
|
action: string;
|
|
9
9
|
description: string;
|
|
10
10
|
tags: string[];
|
|
11
|
+
requiredPermissions: Permission[];
|
|
11
12
|
subMenu?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
label: string;
|
|
15
|
+
title: string;
|
|
16
|
+
icon: import("@emotion/react/jsx-runtime").JSX.Element;
|
|
17
|
+
link: string;
|
|
18
|
+
action: string;
|
|
19
|
+
description: string;
|
|
20
|
+
tags: string[];
|
|
12
21
|
requiredPermissions?: undefined;
|
|
22
|
+
subMenu?: undefined;
|
|
13
23
|
} | {
|
|
14
24
|
label: string;
|
|
15
25
|
title: string;
|
|
@@ -38,16 +48,6 @@ export declare const BCMainNavigation: {
|
|
|
38
48
|
}[];
|
|
39
49
|
tags: string[];
|
|
40
50
|
requiredPermissions: Permission[];
|
|
41
|
-
} | {
|
|
42
|
-
label: string;
|
|
43
|
-
title: string;
|
|
44
|
-
icon: import("@emotion/react/jsx-runtime").JSX.Element;
|
|
45
|
-
link: string;
|
|
46
|
-
action: string;
|
|
47
|
-
description: string;
|
|
48
|
-
tags: string[];
|
|
49
|
-
requiredPermissions: Permission[];
|
|
50
|
-
subMenu?: undefined;
|
|
51
51
|
})[];
|
|
52
52
|
leftBottomLinks: {
|
|
53
53
|
label: string;
|
|
@@ -1 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether the workspace has the paid AI features enabled: the AI tab (Playground,
|
|
3
|
+
* Sources), conversation assignment to Crumby, and the AI-specific onboarding steps.
|
|
4
|
+
* Gated by the plan's `aiEnabled` flag (or a feature-flag override).
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This does NOT gate the Crumby assistant chat widget — that is available on
|
|
7
|
+
* all plans (including free) via `useCrumbyAssistantEnabled`.
|
|
8
|
+
*/
|
|
1
9
|
export declare const useCrumbyEnabled: () => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Whether the Crumby assistant chat widget should be shown. The assistant is available
|
|
12
|
+
* on every plan, including free — unlike the paid AI features gated by `useCrumbyEnabled`.
|
|
13
|
+
*
|
|
14
|
+
* Returns a constant `true` for now (no rule). It is kept as a hook to act as the single
|
|
15
|
+
* seam for future gating — e.g. a kill switch (feature flag / PostHog), a whitelabel with
|
|
16
|
+
* no AI, or a backend "assistant enabled" flag — so only this hook changes, not every call
|
|
17
|
+
* site. It also keeps the call site readable and symmetric with `useCrumbyEnabled`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const useCrumbyAssistantEnabled: () => boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared upgrade CTA for Crumby when the plan/feature flag does not enable AI.
|
|
3
|
+
* Owners/admins go to the workspace upgrade page; others see a contact-admin dialog.
|
|
4
|
+
*/
|
|
5
|
+
export declare const useCrumbyUpgradeAction: () => {
|
|
6
|
+
isCrumbyEnabled: boolean;
|
|
7
|
+
canManageUpgrade: boolean;
|
|
8
|
+
requestCrumbyUpgrade: any;
|
|
9
|
+
CrumbyUpgradeDialog: import("@emotion/react/jsx-runtime").JSX.Element;
|
|
10
|
+
};
|
|
@@ -62,5 +62,7 @@ export interface ResourceDefinition<T> {
|
|
|
62
62
|
unDeleteMutation?: Omit<BackendMutationDefinition<T>, 'fields'>;
|
|
63
63
|
archiveMutation?: Omit<BackendMutationDefinition<T>, 'fields'>;
|
|
64
64
|
unArchiveMutation?: Omit<BackendMutationDefinition<T>, 'fields'>;
|
|
65
|
+
blockMutation?: Omit<BackendMutationDefinition<T>, 'fields'>;
|
|
66
|
+
unBlockMutation?: Omit<BackendMutationDefinition<T>, 'fields'>;
|
|
65
67
|
client?: Apollo.ApolloClient<Apollo.NormalizedCacheObject>;
|
|
66
68
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable persistence for onboarding checklist data (state + dismissed flag).
|
|
3
|
+
*
|
|
4
|
+
* Backed by cookies on purpose: logout runs `auth.clearAllAppStorage()` which wipes
|
|
5
|
+
* localStorage/sessionStorage but NOT cookies, so progress and the "finished" flag
|
|
6
|
+
* survive a logout → login cycle (same browser).
|
|
7
|
+
*
|
|
8
|
+
* This is a temporary stand-in for a backend-owned onboarding record. When the backend
|
|
9
|
+
* returns the flag + progress, swap the implementation of `onboardingChecklistStore`
|
|
10
|
+
* (or its call sites) for the server-backed read/writes — the get/set/remove shape
|
|
11
|
+
* matches the localStorage util so the change stays local.
|
|
12
|
+
*/
|
|
13
|
+
/** Cookie-backed store mirroring the localStorage util's get/set/remove shape. */
|
|
14
|
+
export declare const onboardingChecklistStore: {
|
|
15
|
+
get(key: string): unknown;
|
|
16
|
+
set(key: string, value: unknown): void;
|
|
17
|
+
remove(key: string): void;
|
|
18
|
+
};
|
|
@@ -15,7 +15,8 @@ export declare function getOnboardingChecklistStorageKey(userId: string | number
|
|
|
15
15
|
/** Pre-workspace-scoping key: showcase_onboarding_checklist_{userId} */
|
|
16
16
|
export declare function getLegacyOnboardingChecklistStorageKey(userId: string | number): string;
|
|
17
17
|
/**
|
|
18
|
-
* Load checklist for user + workspace
|
|
18
|
+
* Load checklist for user + workspace from the durable (cookie) store. Migrates the older
|
|
19
|
+
* localStorage keys (scoped, legacy user-only, empty-workspace) into the cookie store once.
|
|
19
20
|
* Returns null when workspace context is not available.
|
|
20
21
|
*/
|
|
21
22
|
export declare function loadOnboardingChecklistState(userId: string | number, workspaceId?: string | number | null): OnboardingChecklistState | null;
|
|
@@ -25,6 +26,14 @@ export declare function loadOnboardingChecklistState(userId: string | number, wo
|
|
|
25
26
|
* first load and creates the checklist scoped to whichever workspace the user landed in.
|
|
26
27
|
*/
|
|
27
28
|
export declare function getOnboardingChecklistPendingKey(userId: string | number): string;
|
|
29
|
+
/**
|
|
30
|
+
* Persisted "user finished / dismissed onboarding for this workspace" marker.
|
|
31
|
+
* Unlike the checklist key (which is removed on finish), this survives so that a later
|
|
32
|
+
* logout → login does not recreate a fresh checklist for a workspace already onboarded.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getOnboardingChecklistDismissedKey(userId: string | number, workspaceId?: string | number | null): string;
|
|
35
|
+
export declare function isOnboardingChecklistDismissed(userId: string | number, workspaceId?: string | number | null): boolean;
|
|
36
|
+
export declare function markOnboardingChecklistDismissed(userId: string | number, workspaceId?: string | number | null): void;
|
|
28
37
|
/** One-shot: open checklist popover after sign-in (session tab only). */
|
|
29
38
|
export declare const ONBOARDING_CHECKLIST_SESSION_AUTOPEN_KEY = "showcase_onboarding_checklist_session_autopen";
|
|
30
39
|
export declare function clearOnboardingChecklistSessionAutopen(): void;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { IntegrationWithSecrets } from '../../../../../graphql.autogenerated';
|
|
2
2
|
import { FBPage } from '../../../hooks/useFBPagesHook';
|
|
3
|
-
export declare function PagePickerPopup({ onClose, setInitialValues, pages, rtl, }: {
|
|
3
|
+
export declare function PagePickerPopup({ onClose, setInitialValues, pages, userAccessToken, rtl, }: {
|
|
4
4
|
onClose: () => void;
|
|
5
5
|
setInitialValues: (initialResource: Partial<IntegrationWithSecrets>) => void;
|
|
6
6
|
pages: FBPage[];
|
|
7
|
+
/** Short-lived Facebook user token; exchanged server-side for a long-lived page token. */
|
|
8
|
+
userAccessToken: string;
|
|
7
9
|
rtl?: boolean;
|
|
8
10
|
}): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type OnboardingStepStatus = 'complete' | 'active' | 'upcoming';
|
|
2
|
+
export type OnboardingStepKey = 'registration' | 'workspace' | 'checkout';
|
|
3
|
+
type OnboardingStepperProps = {
|
|
4
|
+
/** Status per step; defaults to registration complete, workspace active, checkout upcoming. */
|
|
5
|
+
statuses?: Partial<Record<OnboardingStepKey, OnboardingStepStatus>>;
|
|
6
|
+
};
|
|
7
|
+
export declare const OnboardingStepper: ({ statuses }: OnboardingStepperProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default OnboardingStepper;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type SubscriptionNameProps = {
|
|
2
|
-
onSubmit: (companyName:
|
|
2
|
+
onSubmit: (companyName: string) => void;
|
|
3
3
|
};
|
|
4
4
|
export declare const SubscriptionName: (props: SubscriptionNameProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
5
5
|
export default SubscriptionName;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
type SubscriptionSuccessProps = {
|
|
2
|
-
|
|
2
|
+
/** Workspace that was created/paid for; activated before navigating to the inbox. */
|
|
3
|
+
workspaceId?: number;
|
|
4
|
+
/** When false, copy reflects activation without a payment (free plan). */
|
|
5
|
+
paid?: boolean;
|
|
3
6
|
};
|
|
4
|
-
export declare const SubscriptionSuccess: ({
|
|
7
|
+
export declare const SubscriptionSuccess: ({ workspaceId, paid }: SubscriptionSuccessProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
5
8
|
export default SubscriptionSuccess;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { OnboardingStepKey, OnboardingStepStatus } from './OnboardingStepper';
|
|
3
|
+
type WorkspaceStepLayoutProps = {
|
|
4
|
+
statuses?: Partial<Record<OnboardingStepKey, OnboardingStepStatus>>;
|
|
5
|
+
illustration: string;
|
|
6
|
+
title: string;
|
|
7
|
+
subtitle?: string;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export declare const WorkspaceStepLayout: ({ statuses, illustration, title, subtitle, children, }: WorkspaceStepLayoutProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
11
|
+
export default WorkspaceStepLayout;
|
|
@@ -10,6 +10,8 @@ type ShowcasePlansProps = {
|
|
|
10
10
|
selectingPlan?: boolean;
|
|
11
11
|
processing?: boolean;
|
|
12
12
|
loadingPlanType?: PlanType | null;
|
|
13
|
+
/** Force the Crumby AI plan toggle on (e.g. deep-link from upgrade CTA). */
|
|
14
|
+
defaultIncludeAi?: boolean;
|
|
13
15
|
};
|
|
14
|
-
export declare const ShowcasePlans: ({ onPlanPicked, disableFreePlan, currentPlanType, currentTerm, selectingPlan, processing, loadingPlanType, }: ShowcasePlansProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare const ShowcasePlans: ({ onPlanPicked, disableFreePlan, currentPlanType, currentTerm, selectingPlan, processing, loadingPlanType, defaultIncludeAi, }: ShowcasePlansProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
15
17
|
export default ShowcasePlans;
|
|
@@ -17,4 +17,4 @@ export type SwitcherProps = {
|
|
|
17
17
|
compact?: boolean;
|
|
18
18
|
workspaceLogo?: React.ReactNode;
|
|
19
19
|
};
|
|
20
|
-
export declare function Switcher({ items, title,
|
|
20
|
+
export declare function Switcher({ items, title, footerItems, width, name, addPlanWord, isLoading, plan, onDropdownStateChange, compact, workspaceLogo, }: SwitcherProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -3,6 +3,6 @@ export type Props = {
|
|
|
3
3
|
history: any;
|
|
4
4
|
router: any;
|
|
5
5
|
};
|
|
6
|
-
export declare const NewSubscription: ({ router
|
|
6
|
+
export declare const NewSubscription: ({ router }: Props) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
7
7
|
declare const _default: any;
|
|
8
8
|
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PlanType, Term } from '../../../graphql.billing.autogenerated';
|
|
2
|
+
export type UpgradeProrationEstimate = {
|
|
3
|
+
newPlanPrice: number;
|
|
4
|
+
remainingValue: number;
|
|
5
|
+
chargeAmount: number;
|
|
6
|
+
remainingDays: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Estimates Polar-style mid-cycle upgrade charge:
|
|
10
|
+
* (newPeriodPrice − currentPeriodPrice) × remainingFraction, floored at 0.
|
|
11
|
+
*/
|
|
12
|
+
export declare function estimateUpgradeProration(params: {
|
|
13
|
+
currentPlanType: PlanType;
|
|
14
|
+
currentTerm: Term;
|
|
15
|
+
targetPlanType: PlanType;
|
|
16
|
+
targetTerm: Term;
|
|
17
|
+
startDate?: string | null;
|
|
18
|
+
endDate?: string | null;
|
|
19
|
+
}): UpgradeProrationEstimate | null;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PlanType } from '../../../graphql.billing.autogenerated';
|
|
2
|
+
/**
|
|
3
|
+
* Marker written right before redirecting to a hosted checkout (Polar/Stripe) from the
|
|
4
|
+
* new-workspace onboarding flow. Because the backend always returns hosted checkouts to
|
|
5
|
+
* `/billing/done`, the done page reads this per-tab marker to tell a new-workspace checkout
|
|
6
|
+
* apart from a normal upgrade, then routes the user back into the workspace stepper flow.
|
|
7
|
+
* It also remembers the plan so the failed screen can retry the same checkout.
|
|
8
|
+
*/
|
|
9
|
+
export declare const NEW_WORKSPACE_PENDING_CHECKOUT_KEY = "bc_new_workspace_pending_checkout";
|
|
10
|
+
export type PendingCheckout = {
|
|
11
|
+
workspaceId: number;
|
|
12
|
+
planType: PlanType;
|
|
13
|
+
};
|
|
14
|
+
export declare function storePendingCheckout(value: PendingCheckout): void;
|
|
15
|
+
export declare function readPendingCheckout(): PendingCheckout | null;
|
|
16
|
+
export declare function clearPendingCheckout(): void;
|
|
@@ -22,10 +22,19 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
22
22
|
auth: {
|
|
23
23
|
e_mail: string;
|
|
24
24
|
password: string;
|
|
25
|
+
signInTo: string;
|
|
26
|
+
signUpTo: string;
|
|
27
|
+
signUpSubtitle: string;
|
|
28
|
+
signUpGoogle: string;
|
|
29
|
+
signUpFacebook: string;
|
|
30
|
+
registerPanelTitle: string;
|
|
31
|
+
registerPanelDescription: string;
|
|
25
32
|
welcomeToBC: string;
|
|
33
|
+
welcomeBackDescription: string;
|
|
26
34
|
getStarted: string;
|
|
27
35
|
keepMeSignedIn: string;
|
|
28
36
|
forgetPassword: string;
|
|
37
|
+
or: string;
|
|
29
38
|
login: string;
|
|
30
39
|
register: string;
|
|
31
40
|
loginFailed: string;
|
|
@@ -41,6 +50,8 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
41
50
|
forgetToSendEmail: string;
|
|
42
51
|
forgetTitle: string;
|
|
43
52
|
forgetPrompt: string;
|
|
53
|
+
verificationCode: string;
|
|
54
|
+
verificationCodePlaceholder: string;
|
|
44
55
|
getStartedBtn: string;
|
|
45
56
|
continue: string;
|
|
46
57
|
dontHaveAnAccount: string;
|
|
@@ -162,6 +173,24 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
162
173
|
gravatarTooltip: string;
|
|
163
174
|
terms: string;
|
|
164
175
|
};
|
|
176
|
+
newWorkspaceFlow: {
|
|
177
|
+
steps: {
|
|
178
|
+
registration: string;
|
|
179
|
+
workspace: string;
|
|
180
|
+
checkout: string;
|
|
181
|
+
};
|
|
182
|
+
createTitle: string;
|
|
183
|
+
createSubtitle: string;
|
|
184
|
+
namePlaceholder: string;
|
|
185
|
+
createButton: string;
|
|
186
|
+
successTitle: string;
|
|
187
|
+
successSubtitle: string;
|
|
188
|
+
successSubtitleFree: string;
|
|
189
|
+
goToInbox: string;
|
|
190
|
+
failedTitle: string;
|
|
191
|
+
failedSubtitle: string;
|
|
192
|
+
tryAgain: string;
|
|
193
|
+
};
|
|
165
194
|
subscriptions: {
|
|
166
195
|
planName: string;
|
|
167
196
|
subscriptions: string;
|
|
@@ -421,6 +450,9 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
421
450
|
emptyMessagePreviewTitle: string;
|
|
422
451
|
emptyMessagePreviewSubtitle: string;
|
|
423
452
|
templateSelection: string;
|
|
453
|
+
templateLanguageMissing: string;
|
|
454
|
+
messageParametersMissing: string;
|
|
455
|
+
completeRequiredFields: string;
|
|
424
456
|
messageParameters: string;
|
|
425
457
|
analysis: {
|
|
426
458
|
deliveryRate: string;
|
|
@@ -448,6 +480,14 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
448
480
|
openBroadcastReport: string;
|
|
449
481
|
messageSentAt: string;
|
|
450
482
|
template: string;
|
|
483
|
+
retryFailed: string;
|
|
484
|
+
retryFailedDialogTitle: string;
|
|
485
|
+
retryFailedDialogDescription: string;
|
|
486
|
+
retryFailedConfirm: string;
|
|
487
|
+
retryFailedSuccessTitle: string;
|
|
488
|
+
retryFailedSuccessDescription: string;
|
|
489
|
+
retryFailedErrorTitle: string;
|
|
490
|
+
retryFailedErrorDescription: string;
|
|
451
491
|
};
|
|
452
492
|
recipientsReport: {
|
|
453
493
|
pageTitle: string;
|
|
@@ -456,6 +496,7 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
456
496
|
templateNameFilter: string;
|
|
457
497
|
noRowsToExport: string;
|
|
458
498
|
};
|
|
499
|
+
launch: string;
|
|
459
500
|
};
|
|
460
501
|
resources: {
|
|
461
502
|
loginToFB: string;
|
|
@@ -524,8 +565,10 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
524
565
|
modify: string;
|
|
525
566
|
removeItem: string;
|
|
526
567
|
archivingResource: string;
|
|
568
|
+
blockingResource: string;
|
|
527
569
|
removingConfirmation: string;
|
|
528
570
|
archivingConfirmation: string;
|
|
571
|
+
blockingConfirmation: string;
|
|
529
572
|
launchingConfirmation: string;
|
|
530
573
|
name: string;
|
|
531
574
|
surname: string;
|
|
@@ -566,6 +609,7 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
566
609
|
messageUpdated: string;
|
|
567
610
|
endingConv: string;
|
|
568
611
|
newConv: string;
|
|
612
|
+
conversationAssigned: string;
|
|
569
613
|
newClient: string;
|
|
570
614
|
clientUpdated: string;
|
|
571
615
|
broadcast: string;
|
|
@@ -651,6 +695,23 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
651
695
|
selectAll: string;
|
|
652
696
|
clearAll: string;
|
|
653
697
|
reports: string;
|
|
698
|
+
export: {
|
|
699
|
+
csv: string;
|
|
700
|
+
columns: {
|
|
701
|
+
date: string;
|
|
702
|
+
openedConversations: string;
|
|
703
|
+
conversations: string;
|
|
704
|
+
messagesReceived: string;
|
|
705
|
+
avgResponseTime: string;
|
|
706
|
+
successful: string;
|
|
707
|
+
totalRecipients: string;
|
|
708
|
+
successfulCampaigns: string;
|
|
709
|
+
failedCampaigns: string;
|
|
710
|
+
status: string;
|
|
711
|
+
count: string;
|
|
712
|
+
percentage: string;
|
|
713
|
+
};
|
|
714
|
+
};
|
|
654
715
|
broadcast: {
|
|
655
716
|
title: string;
|
|
656
717
|
period: {
|
|
@@ -786,6 +847,8 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
786
847
|
delete: string;
|
|
787
848
|
submit: string;
|
|
788
849
|
archive: string;
|
|
850
|
+
block: string;
|
|
851
|
+
unblock: string;
|
|
789
852
|
close: string;
|
|
790
853
|
date: string;
|
|
791
854
|
time: string;
|
|
@@ -891,13 +954,19 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
891
954
|
contactDeleteTitle: string;
|
|
892
955
|
contactArchiveTitle: string;
|
|
893
956
|
contactUnarchiveTitle: string;
|
|
957
|
+
contactBlockTitle: string;
|
|
958
|
+
contactUnblockTitle: string;
|
|
894
959
|
unarchive: string;
|
|
895
960
|
exportingClients: string;
|
|
896
961
|
exportCompleted: string;
|
|
897
962
|
exportFailed: string;
|
|
898
963
|
noContactsToExport: string;
|
|
899
964
|
selectedLifecycle: string;
|
|
965
|
+
active: string;
|
|
900
966
|
archived: string;
|
|
967
|
+
blacklisted: string;
|
|
968
|
+
contactStatus: string;
|
|
969
|
+
blocked: string;
|
|
901
970
|
};
|
|
902
971
|
management: {
|
|
903
972
|
title: string;
|
|
@@ -1102,6 +1171,10 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
1102
1171
|
customExternalId: string;
|
|
1103
1172
|
customExternalIdPlaceholder: string;
|
|
1104
1173
|
gupshupChannelDescription: string;
|
|
1174
|
+
gupshupPartnerId: string;
|
|
1175
|
+
gupshupPartnerIdNote: string;
|
|
1176
|
+
gupshupPartnerIdCopied: string;
|
|
1177
|
+
gupshupPartnerIdCopyFailed: string;
|
|
1105
1178
|
gupshupDisplayPhoneNumber: string;
|
|
1106
1179
|
gupshupDisplayPhoneNumberPlaceholder: string;
|
|
1107
1180
|
gupshupAccessToken: string;
|
|
@@ -1123,6 +1196,10 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
1123
1196
|
integrationIdCopyFailed: string;
|
|
1124
1197
|
rating: string;
|
|
1125
1198
|
ratingDescription: string;
|
|
1199
|
+
sendOnly: string;
|
|
1200
|
+
sendOnlyDescription: string;
|
|
1201
|
+
sendOnlyMessage: string;
|
|
1202
|
+
sendOnlyMessagePlaceholder: string;
|
|
1126
1203
|
};
|
|
1127
1204
|
crumby: {
|
|
1128
1205
|
title: string;
|
|
@@ -1139,6 +1216,11 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
1139
1216
|
test_numbers: string;
|
|
1140
1217
|
suggested_qs: string;
|
|
1141
1218
|
crumby_settings: string;
|
|
1219
|
+
upgrade: {
|
|
1220
|
+
cta: string;
|
|
1221
|
+
contactAdminTitle: string;
|
|
1222
|
+
contactAdminDescription: string;
|
|
1223
|
+
};
|
|
1142
1224
|
playground: {
|
|
1143
1225
|
welcomeMessage: string;
|
|
1144
1226
|
askTheAIToAnalyzeYourData: string;
|
|
@@ -1335,6 +1417,8 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
|
|
|
1335
1417
|
delete_confirmation: string;
|
|
1336
1418
|
archive_confirmation: string;
|
|
1337
1419
|
unarchive_confirmation: string;
|
|
1420
|
+
block_confirmation: string;
|
|
1421
|
+
unblock_confirmation: string;
|
|
1338
1422
|
};
|
|
1339
1423
|
send: string;
|
|
1340
1424
|
}>, current?: string) => void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type PaymentProvider = 'stripe' | 'polar' | 'none';
|
|
2
|
+
export type AuthProvider = 'clerk' | 'legacy';
|
|
2
3
|
export type Environment = {
|
|
3
4
|
production: boolean;
|
|
4
5
|
enablePaidPlans: boolean;
|
|
@@ -17,4 +18,8 @@ export type Environment = {
|
|
|
17
18
|
partner?: string;
|
|
18
19
|
turnstileSiteKey?: string;
|
|
19
20
|
stripeKey?: string;
|
|
21
|
+
/** When 'clerk', login/register use Clerk UI. Defaults to legacy DConfig forms. */
|
|
22
|
+
authProvider?: AuthProvider;
|
|
23
|
+
/** Required when authProvider is 'clerk'. Publishable key only — never the secret. */
|
|
24
|
+
clerkPublishableKey?: string;
|
|
20
25
|
};
|