@bcrumbs.net/inbox 0.0.59 → 0.0.62

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.
Files changed (88) hide show
  1. package/assets/ar/inbox.json +16 -3
  2. package/assets/en/inbox.json +16 -3
  3. package/index.cjs.js +49121 -49385
  4. package/index.esm.js +49125 -49389
  5. package/package.json +4 -4
  6. package/playwright.config.d.ts +9 -0
  7. package/src/app/ai/components/Crumby/ChatView.d.ts +12 -0
  8. package/src/app/ai/components/Crumby/CrumbyComposer.d.ts +3 -0
  9. package/src/app/ai/components/Crumby/CrumbySendAction.d.ts +4 -0
  10. package/src/app/ai/components/Crumby/CrumbyWidget.d.ts +2 -0
  11. package/src/app/ai/components/Crumby/index.d.ts +1 -2
  12. package/src/app/ai/components/playground/Button.d.ts +1 -1
  13. package/src/app/ai/components/playground/ThreadMessages.d.ts +5 -1
  14. package/src/app/ai/components/playground/TooltipIconButton.d.ts +2 -2
  15. package/src/app/auth/components/UserAvatar/AccountSettingsDropdown.d.ts +3 -5
  16. package/src/app/auth/components/password-page/AuthPasswordPageLayout.d.ts +7 -0
  17. package/src/app/auth/components/password-page/ForgetPasswordFormView.d.ts +20 -0
  18. package/src/app/auth/components/password-page/PasswordFormView.d.ts +22 -0
  19. package/src/app/auth/components/password-page/PasswordSuccessView.d.ts +8 -0
  20. package/src/app/auth/hooks/useRoles.d.ts +1 -0
  21. package/src/app/auth/pages/Auth.style.d.ts +68 -0
  22. package/src/app/auth/pages/Forget.d.ts +0 -3
  23. package/src/app/auth/pages/Login.style.d.ts +1 -0
  24. package/src/app/auth/pages/Register.style.d.ts +5 -0
  25. package/src/app/auth/utils/avatar.d.ts +1 -0
  26. package/src/app/auth/utils/resetWorkspaceRoleState.d.ts +4 -0
  27. package/src/app/broadcast/components/BroadcastAnalysisContent.d.ts +3 -1
  28. package/src/app/broadcast/components/BroadcastAnalysisReciepients.d.ts +6 -1
  29. package/src/app/broadcast/components/BroadcastAnalysisReciepientsHeader.d.ts +7 -1
  30. package/src/app/contact/components/ContactFilterOptions.d.ts +4 -1
  31. package/src/app/contact/components/ContactFormFields.d.ts +4 -1
  32. package/src/app/dashboard/components/AgentPerformanceCard.d.ts +2 -1
  33. package/src/app/dashboard/components/BroadcastCampaignProgressCard.d.ts +3 -1
  34. package/src/app/dashboard/components/DashboardExportButton.d.ts +8 -0
  35. package/src/app/dashboard/components/DashboardSections.d.ts +2 -1
  36. package/src/app/dashboard/components/OpenedChatsCard.d.ts +5 -1
  37. package/src/app/dashboard/components/TagPerformanceCard.d.ts +2 -1
  38. package/src/app/dashboard/utils/dashboardReportExports.d.ts +100 -0
  39. package/src/app/generic/components/PhoneDigitsInput.d.ts +7 -0
  40. package/src/app/generic/hooks/useResourceColumns.d.ts +3 -1
  41. package/src/app/inbox/components/Chat/ChatHeader.d.ts +2 -0
  42. package/src/app/inbox/components/Chat/NoConvSelected.d.ts +5 -0
  43. package/src/app/inbox/components/Chat/index.d.ts +4 -1
  44. package/src/app/inbox/components/NewDetails/ClientSection.d.ts +2 -1
  45. package/src/app/inbox/components/NewDetails/UserHeader.d.ts +2 -1
  46. package/src/app/inbox/components/NewDetails/index.d.ts +2 -1
  47. package/src/app/inbox/components/Shared/Inbox.d.ts +4 -1
  48. package/src/app/inbox/components/Shared/MobileChatDetailsSlider.d.ts +14 -0
  49. package/src/app/inbox/components/Shared/MobileDetailsSwipeHint.d.ts +9 -0
  50. package/src/app/inbox/components/Shared/MobileMenu.d.ts +2 -1
  51. package/src/app/inbox/hooks/useConvActions.d.ts +1 -0
  52. package/src/app/inbox/hooks/useConversationsPerodicFetch.d.ts +3 -0
  53. package/src/app/inbox/hooks/useStartedTimeAgo.d.ts +5 -0
  54. package/src/app/inbox/utils/convs.d.ts +8 -1
  55. package/src/app/inbox/utils/inboxAssignableAis.d.ts +11 -1
  56. package/src/app/layout/constants/index.d.ts +11 -10
  57. package/src/app/layout/hooks/useCrumbyEnabled.d.ts +18 -0
  58. package/src/app/layout/hooks/useCrumbyUpgradeAction.d.ts +10 -0
  59. package/src/app/managemnet/config/types.d.ts +2 -0
  60. package/src/app/onboarding/components/OnboardingStepDetail.d.ts +10 -0
  61. package/src/app/onboarding/components/OnboardingView.d.ts +19 -0
  62. package/src/app/onboarding/components/onboardingStepGuide.d.ts +11 -0
  63. package/src/app/onboarding/components/useOnboardingChecklist.d.ts +30 -0
  64. package/src/app/onboarding/utils/onboardingChecklistPersistence.d.ts +18 -0
  65. package/src/app/onboarding/utils/onboardingChecklistStorage.d.ts +24 -2
  66. package/src/app/resources/components/Integrations/Facebook/PagePickerPopup.d.ts +3 -1
  67. package/src/app/resources/components/ListResources/Utils.d.ts +1 -0
  68. package/src/app/subscriptions/components/NewSubscription/OnboardingStepper.d.ts +8 -0
  69. package/src/app/subscriptions/components/NewSubscription/SubscriptionFailed.d.ts +6 -0
  70. package/src/app/subscriptions/components/NewSubscription/SubscriptionName.d.ts +1 -1
  71. package/src/app/subscriptions/components/NewSubscription/SubscriptionSuccess.d.ts +5 -2
  72. package/src/app/subscriptions/components/NewSubscription/WorkspaceStepLayout.d.ts +11 -0
  73. package/src/app/subscriptions/components/Plans/ShowcasePlans.d.ts +3 -1
  74. package/src/app/subscriptions/components/SubscriptionSwitcher/Switcher.d.ts +1 -1
  75. package/src/app/subscriptions/pages/NewSubscription.d.ts +1 -1
  76. package/src/app/subscriptions/utils/newWorkspaceCheckout.d.ts +16 -0
  77. package/src/assets/locales/translations.d.ts +122 -1
  78. package/src/graphql.autogenerated.d.ts +557 -4
  79. package/src/graphql.billing.autogenerated.d.ts +2 -0
  80. package/src/lib/EmbeddedMobileMenu.d.ts +2 -1
  81. package/src/routes/PrivateRoutes.d.ts +1 -5
  82. package/src/utils/exportCsv.d.ts +8 -0
  83. package/src/utils/localStorage.d.ts +1 -0
  84. package/src/utils/textUtils.d.ts +2 -0
  85. package/src/app/broadcast/components/BroadcastTargetingComplianceNotice.d.ts +0 -2
  86. package/src/app/generic/hooks/WithMenuConfig.d.ts +0 -1
  87. package/src/app/layout/components/language/LanguageDropdown.d.ts +0 -9
  88. package/src/app/onboarding/components/OnboardingChecklistWidget.d.ts +0 -3
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bcrumbs.net/inbox",
3
3
  "description": "Inbox widget for Bread Crumbs portals",
4
- "version": "0.0.59",
4
+ "version": "0.0.62",
5
5
  "keyword": [
6
6
  "bcrumbs",
7
7
  "bc-ui",
@@ -24,9 +24,9 @@
24
24
  "graphql": "15.4.0"
25
25
  },
26
26
  "dependencies": {
27
- "@bcrumbs.net/bc-shared": "^0.0.10",
28
- "@bcrumbs.net/bc-ui": "^0.0.15",
29
- "@bcrumbs.net/bc-api": "^0.0.47",
27
+ "@bcrumbs.net/bc-shared": "^0.0.11",
28
+ "@bcrumbs.net/bc-ui": "^0.0.16",
29
+ "@bcrumbs.net/bc-api": "^0.0.49",
30
30
  "@azure/storage-blob": "^12.25.0"
31
31
  },
32
32
  "module": "./index.esm.js",
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Read environment variables from file.
3
+ * https://github.com/motdotla/dotenv
4
+ */
5
+ /**
6
+ * See https://playwright.dev/docs/test-configuration.
7
+ */
8
+ declare const _default: import("@playwright/test").PlaywrightTestConfig<{}, {}>;
9
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import { type FC } from 'react';
2
+ export type ChatViewProps = {
3
+ rtl: boolean;
4
+ onClose: () => void;
5
+ /** When set, shows a back arrow that returns to the onboarding checklist (still in progress). */
6
+ onBack?: () => void;
7
+ /** Text carried over from the onboarding input; sent once on mount, then consumed. */
8
+ pendingMessage?: string | null;
9
+ onPendingConsumed?: () => void;
10
+ };
11
+ /** Chat mode of the unified widget: Crumby header, thread, action chips, composer. */
12
+ export declare const ChatView: FC<ChatViewProps>;
@@ -0,0 +1,3 @@
1
+ /** Auto-growing composer for the Crumby floating chat (distinct from the playground Composer). */
2
+ declare const CrumbyComposer: () => import("@emotion/react/jsx-runtime").JSX.Element;
3
+ export default CrumbyComposer;
@@ -0,0 +1,4 @@
1
+ declare const CrumbySendAction: ({ isRTL }: {
2
+ isRTL?: boolean;
3
+ }) => import("@emotion/react/jsx-runtime").JSX.Element;
4
+ export default CrumbySendAction;
@@ -0,0 +1,2 @@
1
+ declare const CrumbyWidget: () => import("@emotion/react/jsx-runtime").JSX.Element | null;
2
+ export default CrumbyWidget;
@@ -1,2 +1 @@
1
- declare const CrumbyChat: () => import("@emotion/react/jsx-runtime").JSX.Element;
2
- export default CrumbyChat;
1
+ export { default } from './CrumbyWidget';
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "default" | "outline" | "ghost" | null | undefined;
4
+ variant?: "outline" | "default" | "ghost" | null | undefined;
5
5
  size?: "default" | "icon" | null | undefined;
6
6
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
7
7
  declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
@@ -1,2 +1,6 @@
1
- declare const ThreadMessages: () => import("@emotion/react/jsx-runtime").JSX.Element;
1
+ type ThreadMessagesProps = {
2
+ /** Overrides the container padding (defaults to 24px) when the parent already provides some (e.g. Crumby ChatView surface). */
3
+ padding?: string;
4
+ };
5
+ declare const ThreadMessages: ({ padding }: ThreadMessagesProps) => import("@emotion/react/jsx-runtime").JSX.Element;
2
6
  export default ThreadMessages;
@@ -5,11 +5,11 @@ export type TooltipIconButtonProps = ComponentPropsWithoutRef<typeof Button> & {
5
5
  side?: "top" | "bottom" | "left" | "right";
6
6
  };
7
7
  export declare const TooltipIconButton: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & import("class-variance-authority").VariantProps<(props?: ({
8
- variant?: "default" | "outline" | "ghost" | null | undefined;
8
+ variant?: "outline" | "default" | "ghost" | null | undefined;
9
9
  size?: "default" | "icon" | null | undefined;
10
10
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string> & {
11
11
  asChild?: boolean | undefined;
12
12
  }, "ref"> & {
13
13
  tooltip: string;
14
- side?: "left" | "right" | "bottom" | "top" | undefined;
14
+ side?: "bottom" | "left" | "right" | "top" | undefined;
15
15
  } & import("react").RefAttributes<HTMLButtonElement>>;
@@ -1,13 +1,11 @@
1
- import { DropdownListItemType, DropdownListItemValue } from '@bcrumbs.net/bc-ui';
1
+ import { ActionItem } from '@bcrumbs.net/bc-ui';
2
2
  import { PropsWithChildren } from 'react';
3
3
  export type AccountSettingsProps = {
4
4
  url?: string;
5
5
  text?: string;
6
- color?: string;
7
- itemClicked: (e: DropdownListItemValue) => void;
8
- itemsList: DropdownListItemType[];
6
+ actions: ActionItem[];
9
7
  dataTestid?: string;
10
8
  userInfo?: any;
11
9
  isMobile?: boolean;
12
10
  };
13
- export declare function AccountSettingsDropdown({ url, itemsList, itemClicked, text, color, dataTestid, userInfo, isMobile, }: PropsWithChildren<AccountSettingsProps>): import("@emotion/react/jsx-runtime").JSX.Element;
11
+ export declare function AccountSettingsDropdown({ url, actions, text, dataTestid, userInfo, isMobile, }: PropsWithChildren<AccountSettingsProps>): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from 'react';
2
+ type AuthPasswordPageLayoutProps = {
3
+ children: ReactNode;
4
+ backgroundImage?: string;
5
+ };
6
+ export declare function AuthPasswordPageLayout({ children, backgroundImage }: AuthPasswordPageLayoutProps): import("@emotion/react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,20 @@
1
+ type ForgetPasswordFormViewProps = {
2
+ title: string;
3
+ subtitle: string;
4
+ emailLabel: string;
5
+ emailPlaceholder: string;
6
+ emailValue: string;
7
+ emailError?: string;
8
+ submitLabel: string;
9
+ footerText: string;
10
+ footerLinkText: string;
11
+ footerLinkTo: string;
12
+ showFooterLink?: boolean;
13
+ submitDisabled?: boolean;
14
+ loading?: boolean;
15
+ onBack?: () => void;
16
+ onEmailChange: (value: string) => void;
17
+ onSubmit: () => void;
18
+ };
19
+ export declare function ForgetPasswordFormView({ title, subtitle, emailLabel, emailPlaceholder, emailValue, emailError, submitLabel, footerText, footerLinkText, footerLinkTo, showFooterLink, submitDisabled, loading, onBack, onEmailChange, onSubmit, }: ForgetPasswordFormViewProps): import("@emotion/react/jsx-runtime").JSX.Element;
20
+ export {};
@@ -0,0 +1,22 @@
1
+ export type PasswordFieldConfig = {
2
+ label: string;
3
+ placeholder: string;
4
+ value: string;
5
+ error?: string;
6
+ visibility: 'password' | 'text';
7
+ onChange: (value: string) => void;
8
+ onToggleVisibility: () => void;
9
+ };
10
+ type PasswordFormViewProps = {
11
+ title: string;
12
+ subtitle: string;
13
+ submitLabel: string;
14
+ passwordField: PasswordFieldConfig;
15
+ confirmPasswordField: PasswordFieldConfig;
16
+ submitDisabled?: boolean;
17
+ loading?: boolean;
18
+ onBack?: () => void;
19
+ onSubmit: () => void;
20
+ };
21
+ export declare function PasswordFormView({ title, subtitle, submitLabel, passwordField, confirmPasswordField, submitDisabled, loading, onBack, onSubmit, }: PasswordFormViewProps): import("@emotion/react/jsx-runtime").JSX.Element;
22
+ export {};
@@ -0,0 +1,8 @@
1
+ type PasswordSuccessViewProps = {
2
+ title: string;
3
+ subtitle: string;
4
+ actionLabel?: string;
5
+ onAction?: () => void;
6
+ };
7
+ export declare function PasswordSuccessView({ title, subtitle, actionLabel, onAction }: PasswordSuccessViewProps): import("@emotion/react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { Role } from '@bcrumbs.net/bc-shared';
2
+ /** Reads the workspace role persisted by withMe (no extra me GraphQL query). */
2
3
  export declare const useRoles: () => {
3
4
  role: Role | undefined;
4
5
  has: (checkRole: Role) => boolean;
@@ -0,0 +1,68 @@
1
+ /// <reference types="react" />
2
+ export declare const TEAL = "#16616C";
3
+ export declare const AuthContainer: import("@emotion/styled").StyledComponent<{
4
+ theme?: import("@emotion/react").Theme | undefined;
5
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
6
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
7
+ export declare const AuthFormColumn: import("@emotion/styled").StyledComponent<{
8
+ theme?: import("@emotion/react").Theme | undefined;
9
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
10
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
11
+ export declare const AuthFormContent: import("@emotion/styled").StyledComponent<{
12
+ theme?: import("@emotion/react").Theme | undefined;
13
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
14
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
15
+ export declare const SigninForm: import("@emotion/styled").StyledComponent<{
16
+ theme?: import("@emotion/react").Theme | undefined;
17
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
18
+ }, import("react").DetailedHTMLProps<import("react").FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>, {}>;
19
+ export declare const PasswordFieldWrapper: import("@emotion/styled").StyledComponent<{
20
+ theme?: import("@emotion/react").Theme | undefined;
21
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
22
+ } & {
23
+ rtl?: boolean | undefined;
24
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
25
+ export declare const ShowPasswordBtn: import("@emotion/styled").StyledComponent<{
26
+ theme?: import("@emotion/react").Theme | undefined;
27
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
28
+ } & {
29
+ rtl?: boolean | undefined;
30
+ }, import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {}>;
31
+ export declare const SocialButtonsRow: import("@emotion/styled").StyledComponent<{
32
+ theme?: import("@emotion/react").Theme | undefined;
33
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
34
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
35
+ export declare const SocialAuthButton: import("@emotion/styled").StyledComponent<{
36
+ theme?: import("@emotion/react").Theme | undefined;
37
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
38
+ }, import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {}>;
39
+ export declare const OrDivider: import("@emotion/styled").StyledComponent<{
40
+ theme?: import("@emotion/react").Theme | undefined;
41
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
42
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
43
+ export declare const OptionsRow: import("@emotion/styled").StyledComponent<{
44
+ theme?: import("@emotion/react").Theme | undefined;
45
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
46
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
47
+ export declare const ForgetPasswordLink: import("@emotion/styled").StyledComponent<import("react-router-dom").LinkProps<unknown> & import("react").RefAttributes<HTMLAnchorElement> & {
48
+ theme?: import("@emotion/react").Theme | undefined;
49
+ }, {}, {}>;
50
+ export declare const SignInActions: import("@emotion/styled").StyledComponent<{
51
+ theme?: import("@emotion/react").Theme | undefined;
52
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
53
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
54
+ export declare const SignInButton: import("@emotion/styled").StyledComponent<{
55
+ theme?: import("@emotion/react").Theme | undefined;
56
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
57
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
58
+ export declare const SignUpFooter: import("@emotion/styled").StyledComponent<{
59
+ theme?: import("@emotion/react").Theme | undefined;
60
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
61
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, {}>;
62
+ export declare const SignUpLink: import("@emotion/styled").StyledComponent<import("react-router-dom").LinkProps<unknown> & import("react").RefAttributes<HTMLAnchorElement> & {
63
+ theme?: import("@emotion/react").Theme | undefined;
64
+ }, {}, {}>;
65
+ export declare const HelloCon: import("@emotion/styled").StyledComponent<{
66
+ theme?: import("@emotion/react").Theme | undefined;
67
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
68
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -6,8 +6,5 @@ export type Props = {
6
6
  error: any;
7
7
  status: any;
8
8
  };
9
- export type State = {
10
- email: any;
11
- };
12
9
  declare const _default: any;
13
10
  export default _default;
@@ -0,0 +1 @@
1
+ export * from './Auth.style';
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare const FormRow: import("@emotion/styled").StyledComponent<{
3
+ theme?: import("@emotion/react").Theme | undefined;
4
+ as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
5
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -1 +1,2 @@
1
1
  export declare const getGravatarUrl: (email: string, size?: number) => string;
2
+ export declare const getClientAvatarUrl: (avatarUrl: string | null | undefined, email: string | null | undefined, size?: number) => string;
@@ -0,0 +1,4 @@
1
+ /** Stored on userInfo with role so readers can reject a stale workspace role. */
2
+ export declare const ROLE_WORKSPACE_ID_KEY = "roleWorkspaceId";
3
+ /** Drop cached workspace role so the next me fetch drives permissions for the active workspace. */
4
+ export declare function resetWorkspaceRoleState(): void;
@@ -1,7 +1,9 @@
1
+ import { BroadcastState } from '../../../graphql.autogenerated';
1
2
  interface BroadcastAnalysisContentProps {
2
3
  integrationId: string;
3
4
  templateNameValue: string;
4
5
  loadingBroadcast: boolean;
6
+ broadcastState?: BroadcastState;
5
7
  }
6
- declare const BroadcastAnalysisContent: ({ integrationId, templateNameValue, loadingBroadcast, }: BroadcastAnalysisContentProps) => import("@emotion/react/jsx-runtime").JSX.Element;
8
+ declare const BroadcastAnalysisContent: ({ integrationId, templateNameValue, loadingBroadcast, broadcastState, }: BroadcastAnalysisContentProps) => import("@emotion/react/jsx-runtime").JSX.Element;
7
9
  export default BroadcastAnalysisContent;
@@ -1,3 +1,8 @@
1
1
  import React from 'react';
2
- declare const _default: React.MemoExoticComponent<() => import("@emotion/react/jsx-runtime").JSX.Element>;
2
+ import { BroadcastState } from '../../../graphql.autogenerated';
3
+ interface BroadcastAnalysisReciepientsProps {
4
+ broadcastState?: BroadcastState;
5
+ retryableFailed: number;
6
+ }
7
+ declare const _default: React.MemoExoticComponent<({ broadcastState, retryableFailed, }: BroadcastAnalysisReciepientsProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
3
8
  export default _default;
@@ -15,6 +15,12 @@ interface BroadcastAnalysisReciepientsHeaderProps {
15
15
  /** Workspace delivery report: filter rows by template name substring (server-side). */
16
16
  templateNameQuery?: string;
17
17
  setTemplateNameQuery?: (query: string) => void;
18
+ canRetryFailed?: boolean;
19
+ retryableFailed?: number;
20
+ retryDialogOpen?: boolean;
21
+ onRetryDialogOpenChange?: (open: boolean) => void;
22
+ onRetryFailed?: () => void;
23
+ retryLoading?: boolean;
18
24
  }
19
- declare const _default: React.MemoExoticComponent<({ setSearchQuery, searchQuery, selectedCountry, setSelectedCountry, selectedStage, setSelectedStage, selectedState, setSelectedState, clientStages, onDownloadCsv, templateNameQuery, setTemplateNameQuery, }: BroadcastAnalysisReciepientsHeaderProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
25
+ declare const _default: React.MemoExoticComponent<({ setSearchQuery, searchQuery, selectedCountry, setSelectedCountry, selectedStage, setSelectedStage, selectedState, setSelectedState, clientStages, onDownloadCsv, templateNameQuery, setTemplateNameQuery, canRetryFailed, retryableFailed, retryDialogOpen, onRetryDialogOpenChange, onRetryFailed, retryLoading, }: BroadcastAnalysisReciepientsHeaderProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
20
26
  export default _default;
@@ -1,3 +1,4 @@
1
+ export type ContactStatus = 'active' | 'archived' | 'blocked';
1
2
  interface FilterOptionsProps {
2
3
  setSelectedTags: (tags: string[]) => void;
3
4
  selectedTags: string[];
@@ -5,10 +6,12 @@ interface FilterOptionsProps {
5
6
  selectedStageId: string | undefined;
6
7
  setSelectedAgentId: (agentId: string | undefined) => void;
7
8
  selectedAgentId: string | undefined;
9
+ selectedStatus: ContactStatus;
10
+ setSelectedStatus: (status: ContactStatus) => void;
8
11
  setFilterIsOpen: (isOpen: boolean) => void;
9
12
  onApplyFilters?: () => void;
10
13
  hasAppliedFilters?: boolean;
11
14
  onClearFilters?: () => void;
12
15
  }
13
- declare const FilterOptions: ({ setSelectedTags, selectedTags, setSelectedStageId, selectedStageId, setSelectedAgentId, selectedAgentId, setFilterIsOpen, onApplyFilters, hasAppliedFilters, onClearFilters, }: FilterOptionsProps) => import("@emotion/react/jsx-runtime").JSX.Element;
16
+ declare const FilterOptions: ({ setSelectedTags, selectedTags, setSelectedStageId, selectedStageId, setSelectedAgentId, selectedAgentId, selectedStatus, setSelectedStatus, setFilterIsOpen, onApplyFilters, hasAppliedFilters, onClearFilters, }: FilterOptionsProps) => import("@emotion/react/jsx-runtime").JSX.Element;
14
17
  export default FilterOptions;
@@ -4,6 +4,9 @@ interface ContactFormFieldsProps {
4
4
  isEditMode?: boolean;
5
5
  renderDroplistField?: any;
6
6
  clientStages?: Tag[];
7
+ phoneValue?: string;
8
+ onPhoneChange?: (value: string) => void;
9
+ phoneFieldError?: string;
7
10
  }
8
- declare const ContactFormFields: ({ renderField, renderDroplistField, isEditMode, clientStages, }: ContactFormFieldsProps) => import("@emotion/react/jsx-runtime").JSX.Element;
11
+ declare const ContactFormFields: ({ renderField, renderDroplistField, isEditMode, clientStages, phoneValue, onPhoneChange, phoneFieldError, }: ContactFormFieldsProps) => import("@emotion/react/jsx-runtime").JSX.Element;
9
12
  export default ContactFormFields;
@@ -4,6 +4,7 @@ interface AgentPerformanceCardProps {
4
4
  data?: AgentReportNode[];
5
5
  agentsData?: Agent[];
6
6
  loading?: boolean;
7
+ startDate: string;
7
8
  }
8
- declare const AgentPerformanceCard: ({ data, agentsData, loading }: AgentPerformanceCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
9
+ declare const AgentPerformanceCard: ({ data, agentsData, loading, startDate }: AgentPerformanceCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
9
10
  export default AgentPerformanceCard;
@@ -5,6 +5,8 @@ interface BroadcastCampaignProgressCardProps {
5
5
  completedChange: number;
6
6
  failedChange: number;
7
7
  barData: NewBarChartDataItem[];
8
+ startDate: string;
9
+ endDate: string;
8
10
  }
9
- declare const BroadcastCampaignProgressCard: ({ completed, failed, completedChange, failedChange, barData, }: BroadcastCampaignProgressCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
11
+ declare const BroadcastCampaignProgressCard: ({ completed, failed, completedChange, failedChange, barData, startDate, endDate, }: BroadcastCampaignProgressCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
10
12
  export default BroadcastCampaignProgressCard;
@@ -0,0 +1,8 @@
1
+ interface DashboardExportButtonProps {
2
+ onClick: () => void;
3
+ disabled?: boolean;
4
+ 'aria-label'?: string;
5
+ }
6
+ /** Compact CSV export control for dashboard report cards. */
7
+ export declare function DashboardExportButton({ onClick, disabled, 'aria-label': ariaLabel }: DashboardExportButtonProps): import("@emotion/react/jsx-runtime").JSX.Element;
8
+ export default DashboardExportButton;
@@ -19,10 +19,11 @@ interface DashboardSectionsProps {
19
19
  assignedConversations?: number;
20
20
  unassignedConversations?: number;
21
21
  liveConvs?: Conversation[] | null;
22
+ periodFilteredLiveConvs?: Conversation[];
22
23
  startDate: string;
23
24
  endDate: string;
24
25
  selectedPeriod: string;
25
26
  reportNodes: ReportNode[];
26
27
  }
27
- declare const _default: React.MemoExoticComponent<({ agentsData, allAgentsData, agentsReportData, agentsLoading, agentsReportLoading, convTagsReportData, convTagsReportLoading, totalMessages, convsLoading, integrationId, agentIds, assignedConversations, unassignedConversations, liveConvs, startDate, endDate, selectedPeriod, reportNodes, }: DashboardSectionsProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
28
+ declare const _default: React.MemoExoticComponent<({ agentsData, allAgentsData, agentsReportData, agentsLoading, agentsReportLoading, convTagsReportData, convTagsReportLoading, totalMessages, convsLoading, integrationId, agentIds, assignedConversations, unassignedConversations, liveConvs, periodFilteredLiveConvs, startDate, endDate, selectedPeriod, reportNodes, }: DashboardSectionsProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
28
29
  export default _default;
@@ -1,9 +1,13 @@
1
+ import { Conversation } from '../../../graphql.autogenerated';
1
2
  export interface AllChatsCardProps {
2
3
  totalMessages?: number;
3
4
  assignedConversations?: number;
4
5
  unassignedConversations?: number;
5
6
  selectedPeriod?: string;
6
7
  loading?: boolean;
8
+ conversations?: Pick<Conversation, 'createdAt' | 'assigneeId'>[];
9
+ startDate?: string;
10
+ endDate?: string;
7
11
  }
8
- declare const OpenedChatsCard: ({ totalMessages, assignedConversations, unassignedConversations, selectedPeriod, loading, }: AllChatsCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
12
+ declare const OpenedChatsCard: ({ totalMessages, assignedConversations, unassignedConversations, selectedPeriod, loading, conversations, startDate, endDate, }: AllChatsCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
9
13
  export default OpenedChatsCard;
@@ -3,6 +3,7 @@ type ConvTagReportNode = NonNullable<ConvTagsReportQuery['convTagsReport']['node
3
3
  interface TagPerformanceCardProps {
4
4
  data?: ConvTagReportNode[];
5
5
  loading?: boolean;
6
+ startDate: string;
6
7
  }
7
- declare const TagPerformanceCard: ({ data, loading }: TagPerformanceCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
8
+ declare const TagPerformanceCard: ({ data, loading, startDate }: TagPerformanceCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
8
9
  export default TagPerformanceCard;
@@ -0,0 +1,100 @@
1
+ import { BroadcastReportFragment, Conversation } from '../../../graphql.autogenerated';
2
+ import { CsvCell } from '../../../utils/exportCsv';
3
+ export type DashboardExportReportKey = 'opened_chats' | 'conversation_analytics' | 'agent_performance' | 'tag_performance' | 'broadcast_recipients' | 'campaign_progress' | 'status_distribution';
4
+ export declare function dashboardExportFilename(reportKey: DashboardExportReportKey, startDate: string): string;
5
+ /** Matches ticket examples: "21 sec", "4m 30s", "2h 05m". */
6
+ export declare function formatExportDuration(seconds: number): string;
7
+ export interface OpenedChatsExportLabels {
8
+ date: string;
9
+ openedConversations: string;
10
+ assigned: string;
11
+ unassigned: string;
12
+ total: string;
13
+ }
14
+ export declare function buildOpenedChatsExportRows(conversations: Pick<Conversation, 'createdAt' | 'assigneeId'>[], startDate: string, endDate: string): CsvCell[][];
15
+ export declare function exportOpenedChatsCsv(conversations: Pick<Conversation, 'createdAt' | 'assigneeId'>[], startDate: string, endDate: string, labels: OpenedChatsExportLabels): void;
16
+ export interface ConversationAnalyticsExportLabels {
17
+ date: string;
18
+ conversations: string;
19
+ }
20
+ export declare function buildConversationAnalyticsExportRows(reportNodes: {
21
+ createdAt: string;
22
+ conversationCount?: number | null;
23
+ }[], startDate: string, endDate: string): CsvCell[][];
24
+ export declare function exportConversationAnalyticsCsv(reportNodes: {
25
+ createdAt: string;
26
+ conversationCount?: number | null;
27
+ }[], startDate: string, endDate: string, labels: ConversationAnalyticsExportLabels): void;
28
+ export interface AgentPerformanceExportRow {
29
+ agentName: string;
30
+ conversationCount: number;
31
+ newClientConvCount: number;
32
+ agentMessagesCount: number;
33
+ clientMessageCount: number;
34
+ avgFirstResponseTime: number;
35
+ avgConversationTime: number;
36
+ }
37
+ export interface AgentPerformanceExportLabels {
38
+ agent: string;
39
+ closed: string;
40
+ uniqueClosed: string;
41
+ messagesSent: string;
42
+ messagesReceived: string;
43
+ avgResponseTime: string;
44
+ handleTime: string;
45
+ }
46
+ export declare function buildAgentPerformanceExportRows(rows: AgentPerformanceExportRow[]): CsvCell[][];
47
+ export declare function exportAgentPerformanceCsv(rows: AgentPerformanceExportRow[], startDate: string, labels: AgentPerformanceExportLabels): void;
48
+ export interface TagPerformanceExportRow {
49
+ tagName: string;
50
+ conversationCount: number;
51
+ newClientConvCount: number;
52
+ agentMessagesCount: number;
53
+ clientMessageCount: number;
54
+ avgFirstResponseTime: number;
55
+ avgConversationTime: number;
56
+ }
57
+ export interface TagPerformanceExportLabels {
58
+ tag: string;
59
+ closed: string;
60
+ uniqueClosed: string;
61
+ messagesSent: string;
62
+ messagesReceived: string;
63
+ avgResponseTime: string;
64
+ handleTime: string;
65
+ }
66
+ export declare function buildTagPerformanceExportRows(rows: TagPerformanceExportRow[]): CsvCell[][];
67
+ export declare function exportTagPerformanceCsv(rows: TagPerformanceExportRow[], startDate: string, labels: TagPerformanceExportLabels): void;
68
+ export interface RecipientsExportLabels {
69
+ date: string;
70
+ successful: string;
71
+ failed: string;
72
+ totalRecipients: string;
73
+ successRate: string;
74
+ }
75
+ export declare function buildRecipientsExportRows(reportNodes: BroadcastReportFragment[], startDate: string, endDate: string): CsvCell[][];
76
+ export declare function exportRecipientsCsv(reportNodes: BroadcastReportFragment[], startDate: string, endDate: string, labels: RecipientsExportLabels): void;
77
+ export interface CampaignProgressExportLabels {
78
+ date: string;
79
+ successfulCampaigns: string;
80
+ failedCampaigns: string;
81
+ }
82
+ export declare function buildCampaignProgressExportRows(dailyBars: {
83
+ successful?: number;
84
+ failed?: number;
85
+ }[], startDate: string, endDate: string): CsvCell[][];
86
+ export declare function exportCampaignProgressCsv(dailyBars: {
87
+ successful?: number;
88
+ failed?: number;
89
+ }[], startDate: string, endDate: string, labels: CampaignProgressExportLabels): void;
90
+ export interface StatusDistributionExportItem {
91
+ status: string;
92
+ count: number;
93
+ }
94
+ export interface StatusDistributionExportLabels {
95
+ status: string;
96
+ count: string;
97
+ percentage: string;
98
+ }
99
+ export declare function buildStatusDistributionExportRows(items: StatusDistributionExportItem[]): CsvCell[][];
100
+ export declare function exportStatusDistributionCsv(items: StatusDistributionExportItem[], startDate: string, labels: StatusDistributionExportLabels): void;
@@ -0,0 +1,7 @@
1
+ import type { InputHTMLAttributes } from 'react';
2
+ export interface PhoneDigitsInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'type'> {
3
+ value: string;
4
+ onChange: (value: string) => void;
5
+ }
6
+ declare const PhoneDigitsInput: ({ value, onChange, onKeyDown, ...props }: PhoneDigitsInputProps) => import("@emotion/react/jsx-runtime").JSX.Element;
7
+ export default PhoneDigitsInput;
@@ -12,12 +12,14 @@ interface GetResourceColumnsParams {
12
12
  handleDeleteResource?: (row: CellContext<any, any>) => void;
13
13
  handleArchiveResource?: (row: CellContext<any, any>) => void;
14
14
  handleUnArchiveResource?: (row: CellContext<any, any>) => void;
15
+ handleBlockResource?: (row: CellContext<any, any>) => void;
16
+ handleUnBlockResource?: (row: CellContext<any, any>) => void;
15
17
  currentSortField?: string;
16
18
  currentSortDirection?: 'asc' | 'desc';
17
19
  /** 🔹 NEW: custom cell renderers by field name */
18
20
  customCells?: Record<string, (info: CellContext<any, any>) => React.ReactNode>;
19
21
  }
20
- export declare const useResourceColumns: ({ resourceDef, onSortChange, customHeaderProps, customRowProps, otherActions, handlePatchResource, handleArchiveResource, handleUnArchiveResource, handleDeleteResource, currentSortField, currentSortDirection, customCells, }: GetResourceColumnsParams) => {
22
+ export declare const useResourceColumns: ({ resourceDef, onSortChange, customHeaderProps, customRowProps, otherActions, handlePatchResource, handleArchiveResource, handleUnArchiveResource, handleBlockResource, handleUnBlockResource, handleDeleteResource, currentSortField, currentSortDirection, customCells, }: GetResourceColumnsParams) => {
21
23
  columns: CustomColumn[];
22
24
  actions: TableAction[];
23
25
  };
@@ -12,6 +12,8 @@ interface Props {
12
12
  showOlderMessagesButton?: boolean;
13
13
  isLoadingOlderMessages?: boolean;
14
14
  onLoadOlderMessages?: () => void;
15
+ /** Mobile: return to conversation list (shown before the search icon). */
16
+ onBack?: () => void;
15
17
  }
16
18
  export declare const HeaderContainer: import("@emotion/styled").StyledComponent<import("@bcrumbs.net/bc-ui").HorizontalLayoutProps & {
17
19
  children?: React.ReactNode;
@@ -3,6 +3,11 @@ interface NoConvSelectedProps {
3
3
  convsLength: number;
4
4
  loadingConvs: boolean;
5
5
  handleStartConversation?: () => void;
6
+ hasInboxAccess?: boolean;
7
+ /** Parent already resolved that there are no channels; skip integrations query. */
8
+ forceNoChannels?: boolean;
9
+ /** Parent is still resolving channel state; show loading and skip integrations query. */
10
+ resolvingChannels?: boolean;
6
11
  }
7
12
  declare const NoConvSelected: React.FC<NoConvSelectedProps>;
8
13
  export default NoConvSelected;
@@ -17,6 +17,9 @@ interface Props {
17
17
  showHeader?: boolean;
18
18
  /** Auth user type (e.g. apiKey). Passed by embedded inbox; omit in portal inbox. */
19
19
  userType?: string;
20
+ hasInboxAccess?: boolean;
21
+ /** Mobile: navigate back to the conversation list from the chat header. */
22
+ onBackToList?: () => void;
20
23
  }
21
- declare const Chat: ({ selectedConv, onConvEnd, agents, logo, rtl, convsLength, loadingConvs, handleStartConversation, showNoResults, onContactMessage, onContactAddContact, showHeader, userType, }: Props) => import("@emotion/react/jsx-runtime").JSX.Element;
24
+ declare const Chat: ({ selectedConv, onConvEnd, agents, logo, rtl, convsLength, loadingConvs, handleStartConversation, showNoResults, onContactMessage, onContactAddContact, showHeader, userType, hasInboxAccess, onBackToList, }: Props) => import("@emotion/react/jsx-runtime").JSX.Element;
22
25
  export default Chat;
@@ -5,6 +5,7 @@ interface ClientSectionProps {
5
5
  conversationTags: Tag[];
6
6
  tagsLoading: boolean;
7
7
  refetchTags: () => void;
8
+ onBackToList?: () => void;
8
9
  }
9
- declare const ClientSection: ({ conv, clientTags, conversationTags, tagsLoading, refetchTags, }: ClientSectionProps) => import("@emotion/react/jsx-runtime").JSX.Element;
10
+ declare const ClientSection: ({ conv, clientTags, conversationTags, tagsLoading, refetchTags, onBackToList, }: ClientSectionProps) => import("@emotion/react/jsx-runtime").JSX.Element;
10
11
  export default ClientSection;
@@ -2,6 +2,7 @@ import { ClientQuery } from '../../../../graphql.autogenerated';
2
2
  interface UserHeaderProps {
3
3
  clientData: ClientQuery['client'] | undefined;
4
4
  setEditMode: (editMode: boolean) => void;
5
+ onBackToList?: () => void;
5
6
  }
6
- declare const UserHeader: ({ clientData, setEditMode }: UserHeaderProps) => import("@emotion/react/jsx-runtime").JSX.Element;
7
+ declare const UserHeader: ({ clientData, setEditMode, onBackToList }: UserHeaderProps) => import("@emotion/react/jsx-runtime").JSX.Element;
7
8
  export default UserHeader;