@zeniai/web-components 4.3.8 → 4.3.9

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 (64) hide show
  1. package/dist/{SessionTimeoutPopup-BfSjI6xY.cjs → SessionTimeoutPopup-B9l5xt8w.cjs} +16523 -16372
  2. package/dist/{SessionTimeoutPopup-DTocbMko.js → SessionTimeoutPopup-BieF8U6a.js} +94089 -92526
  3. package/dist/appLocale.d.ts +50 -16
  4. package/dist/cockpit.cjs.js +91 -91
  5. package/dist/cockpit.esm.js +1244 -1234
  6. package/dist/common/util.d.ts +1 -0
  7. package/dist/components/aiCfo/components/FieldRowWithAutoFillBadge.d.ts +14 -1
  8. package/dist/components/aiCfo/components/common/downloadAndCopyHandlers.d.ts +5 -0
  9. package/dist/components/appDrawerContent/MenuButton.d.ts +6 -6
  10. package/dist/components/appDrawerContent/MenuList.d.ts +1 -0
  11. package/dist/components/cards/summaryCard/tasksCard/TasksCard.d.ts +2 -4
  12. package/dist/components/common/downloadReport/types/downloadReportOptions.d.ts +2 -1
  13. package/dist/components/common/downloadReport/types/downloadReportOptionsPayload.d.ts +2 -1
  14. package/dist/components/commonSetUp/utils/hasFormFieldValue.d.ts +11 -0
  15. package/dist/components/customerOnboarding/detail/CustomerOnboardingDetailPage.d.ts +11 -0
  16. package/dist/components/customerOnboarding/detail/components/BankVerification.d.ts +5 -2
  17. package/dist/components/customerOnboarding/detail/components/OnboardingStepFrame.d.ts +5 -1
  18. package/dist/components/customerOnboarding/detail/pages/AIAgentsActivatingPage.d.ts +8 -1
  19. package/dist/components/customerOnboarding/detail/pages/VerifyUnlockFinancialStackPage.d.ts +4 -1
  20. package/dist/components/customerOnboarding/drawer/OnboardingSidebar.d.ts +9 -1
  21. package/dist/components/dashboard/Dashboard.d.ts +1 -2
  22. package/dist/components/detail/common/dashboardReportDownload.d.ts +4 -2
  23. package/dist/components/detail/dashboardReportPage/DashboardReportPage.d.ts +5 -1
  24. package/dist/components/detail/dashboardReportPage/DetailPageReportFilters.d.ts +4 -1
  25. package/dist/components/detail/dashboardReportPage/DetailPageReportTable.d.ts +2 -1
  26. package/dist/components/detail/dashboardReportPage/common/getRootNodesWithUpdatedConfig.d.ts +2 -2
  27. package/dist/components/detail/dashboardReportPage/detailPageReportTypes.d.ts +2 -1
  28. package/dist/components/detail/netBurnOrIncome/mapNetBurnOrIncomeProjectReportToReportTreeNodes.d.ts +4 -0
  29. package/dist/components/detail/opEx/mapOpExProjectReportToReportTreeNodes.d.ts +4 -0
  30. package/dist/components/detail/revenue/mapRevenueProjectReportToReportTreeNodes.d.ts +4 -0
  31. package/dist/components/expenseAutomation/sections/accountRecon/statementParseFormHelpers.d.ts +11 -20
  32. package/dist/components/formElements/labeledColorPicker/LabeledColorPickerField.d.ts +12 -0
  33. package/dist/components/formElements/labeledGroupedCheckBoxField/LabeledGroupedCheckBoxField.d.ts +1 -0
  34. package/dist/components/invoicing/catalogForm/InvoicingCatalogItemFormPage.d.ts +4 -2
  35. package/dist/components/invoicing/catalogForm/catalogItemForm.shared.d.ts +10 -3
  36. package/dist/components/invoicing/common/InvoicingFormRows.d.ts +4 -1
  37. package/dist/components/invoicing/common/InvoicingOpenEntityValue.d.ts +14 -0
  38. package/dist/components/invoicing/couponForm/couponForm.shared.d.ts +3 -1
  39. package/dist/components/invoicing/customerForm/customerForm.shared.d.ts +2 -2
  40. package/dist/components/invoicing/recordPayment/recordPayment.shared.d.ts +3 -1
  41. package/dist/components/invoicing/settings/InvoicingIntegrationsSection.d.ts +2 -1
  42. package/dist/components/invoicing/settings/InvoicingIntegrationsSettingsPage.d.ts +9 -0
  43. package/dist/components/invoicing/settings/InvoicingPaymentDestinationSettingsPage.d.ts +5 -2
  44. package/dist/components/invoicing/settings/InvoicingQBOSettingsPage.d.ts +24 -0
  45. package/dist/components/invoicing/settings/StripeWebhookUrlField.d.ts +4 -0
  46. package/dist/components/invoicing/settings/invoicingIntegrationCards.d.ts +2 -1
  47. package/dist/components/invoicing/settings/invoicingSettingsShared.d.ts +21 -35
  48. package/dist/components/invoicing/subscriptionForm/subscriptionForm.shared.d.ts +6 -3
  49. package/dist/components/notifications/components/CommentsNotificationTileMedium.d.ts +4 -7
  50. package/dist/components/notifications/components/NotificationRowText.d.ts +13 -0
  51. package/dist/components/notifications/components/NotificationTagPill.d.ts +12 -0
  52. package/dist/components/notifications/components/NotificationTileMedium.d.ts +1 -7
  53. package/dist/components/notifications/components/notificationRowStyles.d.ts +34 -0
  54. package/dist/components/notifications/table/notificationsListHeader/NotificationsListConfig.d.ts +2 -0
  55. package/dist/components/notifications/utils/commentsNotificationHelpers.d.ts +13 -2
  56. package/dist/components/notifications/utils/commonHelpers.d.ts +2 -1
  57. package/dist/components/reportTree/treeNode/treeNodeMappers/mapTotalBalancesToTreeNode.d.ts +2 -2
  58. package/dist/components/settingsPage/Integrations/components/integrationCardTypes.d.ts +1 -0
  59. package/dist/index.cjs.js +1 -1
  60. package/dist/index.d.ts +6 -0
  61. package/dist/index.esm.js +388 -382
  62. package/dist/strings/strings.d.ts +50 -16
  63. package/dist/types/liveblocks.config.d.ts +8 -0
  64. package/package.json +4 -4
@@ -85,4 +85,5 @@ export declare const roundAmountIfNeeded: (amount: number) => number;
85
85
  export declare const flowFromUrl: () => string;
86
86
  export declare const isEqualProps: <T extends Record<string, unknown>>(prevProps: T, newProps: T, listOfProps: ReadonlyArray<keyof T>) => boolean;
87
87
  export declare const normalizeString: (str: string | undefined) => string;
88
+ export declare const base64ToBytes: (base64: string) => Uint8Array;
88
89
  export {};
@@ -15,5 +15,18 @@ import { ReactNode } from 'react';
15
15
  export interface FieldRowWithAutoFillBadgeProps {
16
16
  children: ReactNode;
17
17
  isAutoFilled: boolean;
18
+ /**
19
+ * True when the field already holds a value — manually entered or filled by an
20
+ * earlier document. A filled field keeps its value during a new parse instead
21
+ * of being replaced (and unmounted) by a skeleton, so user input is never lost.
22
+ */
23
+ isFilled?: boolean;
24
+ /**
25
+ * While the uploaded document is being parsed for autofill, render a skeleton
26
+ * row in place of the (still-empty) field — it's one of the "expected" values
27
+ * the document may populate. Empty / 0-confidence results are fine; the
28
+ * skeleton just signals the field is loading.
29
+ */
30
+ isParsing?: boolean;
18
31
  }
19
- export declare function FieldRowWithAutoFillBadge({ isAutoFilled, children, }: FieldRowWithAutoFillBadgeProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function FieldRowWithAutoFillBadge({ isAutoFilled, isFilled, isParsing, children, }: FieldRowWithAutoFillBadgeProps): import("react/jsx-runtime").JSX.Element;
@@ -4,6 +4,11 @@ import { ToolkitType } from '../../../../context/toolkitProvider/ToolkitProvider
4
4
  * Generates filename with summarized title and date
5
5
  */
6
6
  export declare function generateFileName(summarizedTitle: string, fileType: "xlsx" | "png", prefix?: string): string;
7
+ /** Thrown with a machine-readable reason so callers can show specific copy. */
8
+ export declare class TableDownloadError extends Error {
9
+ readonly reason: "missing-context" | "network" | "too-large" | "server";
10
+ constructor(reason: TableDownloadError["reason"], message: string, cause?: unknown);
11
+ }
7
12
  export declare function downloadTableAsExcel(url: string, queryPayload: {
8
13
  columns: string[];
9
14
  file_name: string;
@@ -11,9 +11,9 @@ export declare const ALL_AI_CFO_MENU_OPTIONS: readonly ["new_chat", "explore", "
11
11
  export declare const toAiCfoMenuOptionType: (v: string) => "new_chat" | "explore" | "search_chats";
12
12
  export declare const toAiCfoMenuOptionTypeStrict: (v: string) => "new_chat" | "explore" | "search_chats" | undefined;
13
13
  export type AiCfoMenu = (typeof ALL_AI_CFO_MENU_OPTIONS)[number];
14
- export declare const ALL_INVOICING_MENU_OPTIONS: readonly ["invoicing_overview", "invoicing_analytics", "invoicing_customers", "invoicing_subscriptions", "invoicing_invoices", "invoicing_payments", "invoicing_credits", "invoicing_discounts", "invoicing_dunning", "invoicing_reports", "invoicing_catalog", "invoicing_settings", "invoicing_integrations", "invoicing_data_import", "invoicing_audit_log"];
15
- export declare const toInvoicingMenuOptionType: (v: string) => "invoicing_overview" | "invoicing_analytics" | "invoicing_customers" | "invoicing_subscriptions" | "invoicing_invoices" | "invoicing_payments" | "invoicing_credits" | "invoicing_discounts" | "invoicing_dunning" | "invoicing_reports" | "invoicing_catalog" | "invoicing_settings" | "invoicing_integrations" | "invoicing_data_import" | "invoicing_audit_log";
16
- export declare const toInvoicingMenuOptionTypeStrict: (v: string) => "invoicing_overview" | "invoicing_analytics" | "invoicing_customers" | "invoicing_subscriptions" | "invoicing_invoices" | "invoicing_payments" | "invoicing_credits" | "invoicing_discounts" | "invoicing_dunning" | "invoicing_reports" | "invoicing_catalog" | "invoicing_settings" | "invoicing_integrations" | "invoicing_data_import" | "invoicing_audit_log" | undefined;
14
+ export declare const ALL_INVOICING_MENU_OPTIONS: readonly ["invoicing_overview", "invoicing_analytics", "invoicing_customers", "invoicing_subscriptions", "invoicing_invoices", "invoicing_payments", "invoicing_credits", "invoicing_discounts", "invoicing_dunning", "invoicing_reports", "invoicing_catalog", "invoicing_settings", "invoicing_settings_payment_destination", "invoicing_settings_branding", "invoicing_settings_integrations", "invoicing_settings_dunning", "invoicing_integrations", "invoicing_data_import", "invoicing_audit_log"];
15
+ export declare const toInvoicingMenuOptionType: (v: string) => "invoicing_overview" | "invoicing_analytics" | "invoicing_customers" | "invoicing_subscriptions" | "invoicing_invoices" | "invoicing_payments" | "invoicing_credits" | "invoicing_discounts" | "invoicing_dunning" | "invoicing_reports" | "invoicing_catalog" | "invoicing_settings" | "invoicing_settings_payment_destination" | "invoicing_settings_branding" | "invoicing_settings_integrations" | "invoicing_settings_dunning" | "invoicing_integrations" | "invoicing_data_import" | "invoicing_audit_log";
16
+ export declare const toInvoicingMenuOptionTypeStrict: (v: string) => "invoicing_overview" | "invoicing_analytics" | "invoicing_customers" | "invoicing_subscriptions" | "invoicing_invoices" | "invoicing_payments" | "invoicing_credits" | "invoicing_discounts" | "invoicing_dunning" | "invoicing_reports" | "invoicing_catalog" | "invoicing_settings" | "invoicing_settings_payment_destination" | "invoicing_settings_branding" | "invoicing_settings_integrations" | "invoicing_settings_dunning" | "invoicing_integrations" | "invoicing_data_import" | "invoicing_audit_log" | undefined;
17
17
  export type InvoicingMenu = (typeof ALL_INVOICING_MENU_OPTIONS)[number];
18
18
  export declare const ALL_MENU_GROUPS: readonly ["close_management", "ai_intelligence", "finance", "accounts_receivable", "accounts_payable", "banking", "administration"];
19
19
  export declare const toMenuGroupType: (v: string) => "accounts_receivable" | "accounts_payable" | "close_management" | "ai_intelligence" | "finance" | "banking" | "administration";
@@ -27,9 +27,9 @@ export declare const ALL_AI_CFO_MENU_GROUPS: readonly ["ai_cfo"];
27
27
  export declare const toAiCfoMenuGroupType: (v: string) => "ai_cfo";
28
28
  export declare const toAiCfoMenuGroupTypeStrict: (v: string) => "ai_cfo" | undefined;
29
29
  export type AiCfoMenuGroup = ReturnType<typeof toAiCfoMenuGroupType>;
30
- export declare const ALL_INVOICING_MENU_GROUPS: readonly ["invoicing_general", "invoicing_billing", "invoicing_setup", "invoicing_analytics_group"];
31
- export declare const toInvoicingMenuGroupType: (v: string) => "invoicing_general" | "invoicing_billing" | "invoicing_setup" | "invoicing_analytics_group";
32
- export declare const toInvoicingMenuGroupTypeStrict: (v: string) => "invoicing_general" | "invoicing_billing" | "invoicing_setup" | "invoicing_analytics_group" | undefined;
30
+ export declare const ALL_INVOICING_MENU_GROUPS: readonly ["invoicing_general", "invoicing_billing", "invoicing_payments_group", "invoicing_setup", "invoicing_analytics_group"];
31
+ export declare const toInvoicingMenuGroupType: (v: string) => "invoicing_general" | "invoicing_billing" | "invoicing_payments_group" | "invoicing_setup" | "invoicing_analytics_group";
32
+ export declare const toInvoicingMenuGroupTypeStrict: (v: string) => "invoicing_general" | "invoicing_billing" | "invoicing_payments_group" | "invoicing_setup" | "invoicing_analytics_group" | undefined;
33
33
  export type InvoicingMenuGroup = (typeof ALL_INVOICING_MENU_GROUPS)[number];
34
34
  export type MenuListItem = {
35
35
  group: MenuGroup | SettingsMenuGroup | AiCfoMenuGroup | InvoicingMenuGroup;
@@ -1,6 +1,7 @@
1
1
  import { AiCfoViewSelector, CurrentTenant, LoggedInUser, MonthEndCloseChecksView, MonthYearPeriod, RewardsPlanData } from '@zeniai/client-epic-state';
2
2
  import { AiCfoMenu, InvoicingMenu, Menu, MenuListItem, SettingsMenu } from './MenuButton';
3
3
  export declare const COMMAND_CENTER_SUBMENU_TYPES: readonly ["transaction_categorization", "je_schedules", "missing_receipts", "flux_analysis", "reconciliation"];
4
+ export declare const INVOICING_SETTINGS_SUBMENU_TYPES: readonly ["invoicing_settings_payment_destination", "invoicing_settings_branding", "invoicing_settings_integrations", "invoicing_settings_dunning"];
4
5
  /** Returns true if the menu key is command_center or one of its submenu step types. */
5
6
  export declare const isCloseManagementMenu: (key: string) => boolean;
6
7
  export declare const menuList: MenuListItem[];
@@ -3,20 +3,18 @@ import { ClientAnalytics } from '@zeniai/client-analytics';
3
3
  import { TasksCardReport } from '@zeniai/client-epic-state';
4
4
  import { CardActions, CardData } from '../../cardTypes';
5
5
  import { DragAndDropProps } from '../../common/Card';
6
- declare const TasksCard: ({ card, data, actions, isExpenseAutomationEnabledForUser, analytics, dndProps, }: {
6
+ declare const TasksCard: ({ card, data, actions, analytics, dndProps, }: {
7
7
  actions: CardActions;
8
8
  card: CardData;
9
9
  data: TasksCardReport;
10
- isExpenseAutomationEnabledForUser: boolean;
11
10
  analytics?: ClientAnalytics;
12
11
  dndProps?: DragAndDropProps;
13
12
  }) => import("react/jsx-runtime").JSX.Element;
14
13
  export default TasksCard;
15
- export declare const MemoTasksCard: React.MemoExoticComponent<({ card, data, actions, isExpenseAutomationEnabledForUser, analytics, dndProps, }: {
14
+ export declare const MemoTasksCard: React.MemoExoticComponent<({ card, data, actions, analytics, dndProps, }: {
16
15
  actions: CardActions;
17
16
  card: CardData;
18
17
  data: TasksCardReport;
19
- isExpenseAutomationEnabledForUser: boolean;
20
18
  analytics?: ClientAnalytics;
21
19
  dndProps?: DragAndDropProps;
22
20
  }) => import("react/jsx-runtime").JSX.Element>;
@@ -1,4 +1,4 @@
1
- import { AccountViewMode, COABalanceTimeFrame, COABalanceType, COABalancesRangeWithThisPeriod, ClassViewLayout, FileType, Month, NestedClassHierarchyForReport, NestedClassID, ReportFormat, TimeframeTick, ZeniDate } from '@zeniai/client-epic-state';
1
+ import { AccountViewMode, COABalanceTimeFrame, COABalanceType, COABalancesRangeWithThisPeriod, ClassViewLayout, FileType, ID, Month, NestedClassHierarchyForReport, NestedClassID, ReportFormat, TimeframeTick, ZeniDate } from '@zeniai/client-epic-state';
2
2
  import { SupportedLocale } from '../../../../strings/localizedStrings';
3
3
  import { BalanceTimeframe } from '../../../cards/cardTypes';
4
4
  import { AccountGroupNilBalancesFilter, AccountNilBalancesFilter } from '../../../dataSelector/dataSelector';
@@ -28,5 +28,6 @@ export interface DownloadReportOptions {
28
28
  dataAvailable?: TimeframeTick;
29
29
  disabledAdditionalColumns?: COABalanceType[];
30
30
  nestedClassHierarchy?: NestedClassHierarchyForReport[];
31
+ projectsToFilterOut?: ID[];
31
32
  showClassAccountNumber?: boolean;
32
33
  }
@@ -1,4 +1,4 @@
1
- import { COABalanceType, ClassViewLayout, NestedClassID } from '@zeniai/client-epic-state';
1
+ import { COABalanceType, ClassViewLayout, ID, NestedClassID } from '@zeniai/client-epic-state';
2
2
  import { AccountGroupNilBalancesFilter, AccountNilBalancesFilter } from '../../../dataSelector/dataSelector';
3
3
  import { DownloadReportOptions } from './downloadReportOptions';
4
4
  interface COABalancesRangePayload {
@@ -41,6 +41,7 @@ export default interface DownloadReportOptionsPayload {
41
41
  end_date: string;
42
42
  start_date: string;
43
43
  };
44
+ projects_to_filter_out?: ID[];
44
45
  }
45
46
  export declare function toDownloadReportOptions(payload: DownloadReportOptionsPayload): DownloadReportOptions | undefined;
46
47
  export declare function toDownloadReportOptionsPayload(options: DownloadReportOptions): DownloadReportOptionsPayload;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * True when a react-hook-form field value is non-empty: a string with
3
+ * non-whitespace content, a non-empty array, an object with at least one
4
+ * non-empty entry (e.g. an address), or any other truthy scalar.
5
+ *
6
+ * Used by the verification sections to decide whether a field already holds a
7
+ * value (manually entered or document-autofilled) and so should keep its value
8
+ * during a new document parse instead of being replaced by a skeleton. Shared by
9
+ * the company + officer detail sections so the emptiness rule lives in one place.
10
+ */
11
+ export declare function hasFormFieldValue(value: unknown): boolean;
@@ -46,6 +46,17 @@ export interface Props {
46
46
  * is rendered enabled but unwired).
47
47
  */
48
48
  integrationsSectionProps?: IntegrationsSectionProps;
49
+ /**
50
+ * True only for pure Tax/CFO/Payroll (product-suite) tenants. Gates the
51
+ * verification→setup_billing redirect so bookkeeping / mixed tenants are
52
+ * never routed to the interim product-suite page (which latches
53
+ * is_interim_email_sent and traps them on /thankyou).
54
+ *
55
+ * Absent/undefined intentionally means "treat as non-product-suite": the
56
+ * redirect stays suppressed, which is the safe default for callers that
57
+ * don't wire tenant product data.
58
+ */
59
+ isProductSuiteTenant?: boolean;
49
60
  handleAddCardPaymentSource: (paymentType: AddCardPaymentSourceType, paymentMethod: string, paymentId: string) => void;
50
61
  handleConfirmCardSetupIntent: (setupIntentData: SetupIntentResult) => void;
51
62
  handleCreateCardSetupIntent: (paymentsMethod: string[]) => void;
@@ -1,11 +1,14 @@
1
1
  import { ID, PaymentAccount } from '@zeniai/client-epic-state';
2
- declare const BankVerification: ({ bankVerificationFlags, onClick, linkSessionId, }: {
2
+ declare const BankVerification: ({ bankVerificationFlags, isVerificationLoading, linkSessionId, showStartVerification, onClick, }: {
3
3
  bankVerificationFlags: {
4
4
  isBankVerificationBox: boolean;
5
5
  paymentAccount: PaymentAccount | undefined;
6
6
  paymentAccountStatus: string | undefined;
7
+ providerVerificationStatusCode?: string;
7
8
  };
9
+ isVerificationLoading?: boolean;
8
10
  linkSessionId?: ID | null;
9
- onClick: () => void;
11
+ showStartVerification?: boolean;
12
+ onClick?: () => void;
10
13
  }) => import("react/jsx-runtime").JSX.Element;
11
14
  export default BankVerification;
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ export type SkipDisabledReason = "qbo" | "pending-verification" | "login-required";
2
3
  export interface OnboardingStepFrameProps {
3
4
  children: ReactNode;
4
5
  title: string;
@@ -8,6 +9,9 @@ export interface OnboardingStepFrameProps {
8
9
  ctaIcon?: JSX.Element;
9
10
  ctaLabel?: string;
10
11
  ctaLoading?: boolean;
12
+ skipDisabled?: boolean;
13
+ /** Chooses the disabled-skip tooltip copy. Defaults to the QBO reason. */
14
+ skipDisabledReason?: SkipDisabledReason;
11
15
  skipLabel?: string;
12
16
  stepNumber?: number;
13
17
  subtitle?: string;
@@ -16,4 +20,4 @@ export interface OnboardingStepFrameProps {
16
20
  onCtaClick?: () => void;
17
21
  onSkipClick?: () => void;
18
22
  }
19
- export declare const OnboardingStepFrame: ({ title, subtitle, stepNumber, totalSteps, ctaLabel, ctaIcon, ctaLoading, ctaDisabled, onCtaClick, backLabel, onBackClick, backDisabled, skipLabel, onSkipClick, children, }: OnboardingStepFrameProps) => import("react/jsx-runtime").JSX.Element;
23
+ export declare const OnboardingStepFrame: ({ title, subtitle, stepNumber, totalSteps, ctaLabel, ctaIcon, ctaLoading, ctaDisabled, onCtaClick, backLabel, onBackClick, backDisabled, skipLabel, skipDisabled, skipDisabledReason, onSkipClick, children, }: OnboardingStepFrameProps) => import("react/jsx-runtime").JSX.Element;
@@ -4,6 +4,13 @@ export interface AIAgentsActivatingPageProps {
4
4
  stepNumber: number;
5
5
  tenantName: string;
6
6
  totalSteps: number;
7
+ /**
8
+ * When true the activation timeline is skipped and every row renders in its
9
+ * settled "building" state with the CTA enabled. Set on repeat visits once
10
+ * isOnboardingAiActivationViewed is true, so the animation doesn't replay
11
+ * each time the page loads.
12
+ */
13
+ alreadyViewed?: boolean;
7
14
  /** Override the background row statuses (used by stories). */
8
15
  backgroundRowStatuses?: ReadonlyArray<AIAgentRowStatus>;
9
16
  /**
@@ -28,4 +35,4 @@ export interface AIAgentsActivatingPageProps {
28
35
  showLedgerReadyInLabel?: boolean;
29
36
  onContinueClick: () => void;
30
37
  }
31
- export declare const AIAgentsActivatingPage: ({ tenantName, stepNumber, totalSteps, ledgerRowStatuses: overrideLedgerRowStatuses, backgroundRowStatuses: overrideBackgroundRowStatuses, showLedgerReadyInLabel: overrideShowLedgerReadyInLabel, showBackgroundReadyInLabel: overrideShowBackgroundReadyInLabel, counts, forceContinueEnabled, rowStartingDurationMs, onContinueClick, }: AIAgentsActivatingPageProps) => import("react/jsx-runtime").JSX.Element;
38
+ export declare const AIAgentsActivatingPage: ({ tenantName, stepNumber, totalSteps, alreadyViewed, ledgerRowStatuses: overrideLedgerRowStatuses, backgroundRowStatuses: overrideBackgroundRowStatuses, showLedgerReadyInLabel: overrideShowLedgerReadyInLabel, showBackgroundReadyInLabel: overrideShowBackgroundReadyInLabel, counts, forceContinueEnabled, rowStartingDurationMs, onContinueClick, }: AIAgentsActivatingPageProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,8 +1,11 @@
1
+ import { SkipDisabledReason } from '../components/OnboardingStepFrame';
1
2
  import { VerifyUnlockFinancialStackSectionProps } from '../sections/VerifyUnlockFinancialStackSection';
2
3
  export interface VerifyUnlockFinancialStackPageProps extends VerifyUnlockFinancialStackSectionProps {
3
4
  stepNumber: number;
4
5
  totalSteps: number;
6
+ skipDisabled?: boolean;
7
+ skipDisabledReason?: SkipDisabledReason;
5
8
  onStartVerificationClick: () => void;
6
9
  onSkipToDashboardClick?: () => void;
7
10
  }
8
- export declare const VerifyUnlockFinancialStackPage: ({ stepNumber, totalSteps, onStartVerificationClick, onSkipToDashboardClick, ...sectionProps }: VerifyUnlockFinancialStackPageProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const VerifyUnlockFinancialStackPage: ({ stepNumber, totalSteps, skipDisabled, skipDisabledReason, onStartVerificationClick, onSkipToDashboardClick, ...sectionProps }: VerifyUnlockFinancialStackPageProps) => import("react/jsx-runtime").JSX.Element;
@@ -20,10 +20,18 @@ export interface OnboardingSidebarProps {
20
20
  * Exactly one step should be "active".
21
21
  */
22
22
  stepStatuses: Partial<Record<OnboardingStep, OnboardingSidebarStepStatus>>;
23
+ /** Attention/error treatment for a step; takes precedence over `warningStep`. */
24
+ errorStep?: OnboardingStep;
23
25
  footerSlot?: ReactNode;
26
+ /**
27
+ * Step to render in warning colors (badge round + title) regardless of its
28
+ * progress status — signals an action the user must resolve (e.g. a pending
29
+ * bank verification on setup_billing) before onboarding can complete.
30
+ */
31
+ warningStep?: OnboardingStep;
24
32
  onLogoClick?: () => void;
25
33
  onStepClick?: (step: OnboardingStep) => void;
26
34
  }
27
- declare const OnboardingSidebar: ({ steps, stepStatuses, allRequiredStepsCompleted, footerSlot, onLogoClick, onStepClick, }: OnboardingSidebarProps) => import("react/jsx-runtime").JSX.Element;
35
+ declare const OnboardingSidebar: ({ steps, stepStatuses, allRequiredStepsCompleted, footerSlot, warningStep, errorStep, onLogoClick, onStepClick, }: OnboardingSidebarProps) => import("react/jsx-runtime").JSX.Element;
28
36
  export default OnboardingSidebar;
29
37
  export declare const SIDEBAR_WIDTH_PX = 240;
@@ -2,7 +2,7 @@ import { ClientAnalytics } from '@zeniai/client-analytics';
2
2
  import { CardActions, CardType } from '../cards/cardTypes';
3
3
  import { AutoCompleteActions, AutoCompleteData } from '../common/autoComplete/autoCompleteProps';
4
4
  import { DashboardCardData } from './dashboardTypes';
5
- declare function Dashboard({ cardDataArray, cardActions, christmasAnimationEnabled, newYearAnimationEnabled, autoCompleteData, autoCompleteActions, analytics, isReimbursementEnabled, isBillPayEnabled, isVisitingFirstTime, isZeniAccountEnabled, isExpenseAutomationEnabledForUser, onDragAndDropCard, isAiCfoAccessEnabled, onAskAiCfoClick, onAiCfoDashboardPromptSubmit, onAiCfoDashboardOpenPanel, onAiCfoDashboardOpenScopePage, onAiCfoDashboardExpandToFullPage, isAiCfoFileUploadEnabled, initialSearchFocus, maxColumns, aiAuditScorePercentageEnabled, aiCfoDashboardShouldClearPromptOnSubmit, aiCfoDashboardSuggestedPromptQuestions, aiCfoDashboardSuggestedPromptQuestionsLoading, }: Readonly<{
5
+ declare function Dashboard({ cardDataArray, cardActions, christmasAnimationEnabled, newYearAnimationEnabled, autoCompleteData, autoCompleteActions, analytics, isReimbursementEnabled, isBillPayEnabled, isVisitingFirstTime, isZeniAccountEnabled, onDragAndDropCard, isAiCfoAccessEnabled, onAskAiCfoClick, onAiCfoDashboardPromptSubmit, onAiCfoDashboardOpenPanel, onAiCfoDashboardOpenScopePage, onAiCfoDashboardExpandToFullPage, isAiCfoFileUploadEnabled, initialSearchFocus, maxColumns, aiAuditScorePercentageEnabled, aiCfoDashboardShouldClearPromptOnSubmit, aiCfoDashboardSuggestedPromptQuestions, aiCfoDashboardSuggestedPromptQuestionsLoading, }: Readonly<{
6
6
  aiAuditScorePercentageEnabled: boolean;
7
7
  analytics: ClientAnalytics;
8
8
  autoCompleteActions: AutoCompleteActions;
@@ -10,7 +10,6 @@ declare function Dashboard({ cardDataArray, cardActions, christmasAnimationEnabl
10
10
  cardActions: CardActions;
11
11
  cardDataArray: DashboardCardData[];
12
12
  isBillPayEnabled: boolean;
13
- isExpenseAutomationEnabledForUser: boolean;
14
13
  isReimbursementEnabled: boolean;
15
14
  isVisitingFirstTime: boolean;
16
15
  isZeniAccountEnabled: boolean;
@@ -1,14 +1,16 @@
1
- import { AccountViewMode, COABalancesFilter, COABalancesRange, CashInCashOutReport, CashPositionReport, NestedClassID, NetBurnOrIncomeClassesViewReport, NetBurnOrIncomeReport, OpExClassesViewReport, OpExReport, RevenueClassesViewReport, RevenueReport, TopExReport } from '@zeniai/client-epic-state';
1
+ import { AccountViewMode, COABalancesFilter, COABalancesRange, CashInCashOutReport, CashPositionReport, ID, NestedClassID, NetBurnOrIncomeClassesViewReport, NetBurnOrIncomeProjectViewReport, NetBurnOrIncomeReport, OpExClassesViewReport, OpExProjectViewReport, OpExReport, RevenueClassesViewReport, RevenueProjectViewReport, RevenueReport, TopExReport } from '@zeniai/client-epic-state';
2
2
  import { DownloadbleReportProps } from '../../common/downloadReport/downloadableReportProps';
3
3
  export type DashboardReport = NetBurnOrIncomeReport | CashInCashOutReport | OpExReport | RevenueReport | TopExReport | CashPositionReport;
4
4
  export type DashboardClassesViewReport = NetBurnOrIncomeClassesViewReport | RevenueClassesViewReport | OpExClassesViewReport;
5
+ export type DashboardProjectViewReport = NetBurnOrIncomeProjectViewReport | RevenueProjectViewReport | OpExProjectViewReport;
5
6
  export interface Props extends DownloadbleReportProps {
6
7
  classesToFilterOut: NestedClassID[];
7
8
  coaBalancesRange: COABalancesRange;
8
9
  filter: COABalancesFilter;
9
10
  isCompareModeOn: boolean;
10
11
  isZeniCOAUsed: boolean;
11
- report: DashboardReport | DashboardClassesViewReport;
12
+ projectsToFilterOut: ID[];
13
+ report: DashboardReport | DashboardClassesViewReport | DashboardProjectViewReport;
12
14
  reportType: "detailed" | "more_detailed";
13
15
  reportView: AccountViewMode;
14
16
  }
@@ -5,7 +5,7 @@ import { AutoCompleteActions, AutoCompleteData } from '../../common/autoComplete
5
5
  import { ReportTreeScrollPosition } from '../../reportTree/ReportTree';
6
6
  import { AccountBalanceClickMeta } from '../../reportTree/reportTreeTypes';
7
7
  import { InsightsSectionAiCfoProps } from '../common/insights/InsightsSectionAiCfoQuestions';
8
- import { DetailPageClassViewReport, DetailPageReport, DownloadParams, UIState } from './detailPageReportTypes';
8
+ import { DetailPageClassViewReport, DetailPageProjectViewReport, DetailPageReport, DownloadParams, UIState } from './detailPageReportTypes';
9
9
  export interface DashboardReportPageProps<Report extends SelectorReport> {
10
10
  autoCompleteActions: AutoCompleteActions;
11
11
  autoCompleteData: AutoCompleteData;
@@ -18,9 +18,11 @@ export interface DashboardReportPageProps<Report extends SelectorReport> {
18
18
  uiState: UIState;
19
19
  analytics?: ClientAnalytics;
20
20
  highlightedClassesViewRangeReport?: DetailPageClassViewReport;
21
+ highlightedProjectViewRangeReport?: DetailPageProjectViewReport;
21
22
  initialOpenThreadRequest?: RequestToOpenThreadType;
22
23
  insightsSectionAiCfoInfo?: InsightsSectionAiCfoProps;
23
24
  isAccountingClassesEnabled?: boolean;
25
+ isAccountingProjectsEnabled?: boolean;
24
26
  isAiCfoAccessEnabled?: boolean;
25
27
  /** Enables the page-level comments icon + drawer (OpEx only). */
26
28
  isReportsCommentingEnabled?: boolean;
@@ -29,6 +31,7 @@ export interface DashboardReportPageProps<Report extends SelectorReport> {
29
31
  reportsResyncFetchState?: FetchStateAndError;
30
32
  scrollPosition?: ReportTreeScrollPosition;
31
33
  selectedClassesViewRangeReport?: DetailPageClassViewReport;
34
+ selectedProjectViewRangeReport?: DetailPageProjectViewReport;
32
35
  onAdditionalBalanceSelectionChanged: (isCompareModeOn: boolean, additionalBalances: COABalanceType[], maxNumOfPeriodsToHighlight: number) => void;
33
36
  onCOABalancesRangeChanged: (selectedCOABalancesRange: COABalancesRange, highlightedCOABalancesRange?: COABalancesRangeWithThisPeriod) => void;
34
37
  onThisPeriodChanged: (thisPeriod: TimeframeTick) => void;
@@ -48,6 +51,7 @@ export interface DashboardReportPageProps<Report extends SelectorReport> {
48
51
  onTableScroll?: (props: ReportTreeScrollPosition) => void;
49
52
  onUpdateAccountViewMode?: (view: AccountViewMode) => void;
50
53
  onUpdateClassesToFilterOut?: (classesToFilterOut: NestedClassID[]) => void;
54
+ onUpdateProjectsToFilterOut?: (projectsToFilterOut: ID[]) => void;
51
55
  }
52
56
  declare const DashboardReportPage: (props: DashboardReportPageProps<DetailPageReport>) => import("react/jsx-runtime").JSX.Element;
53
57
  export default DashboardReportPage;
@@ -1,6 +1,6 @@
1
1
  import { ClientAnalytics } from '@zeniai/client-analytics';
2
2
  import { AccountViewMode, COABalanceTimeFrame, COABalanceType, COABalancesRange, COABalancesRangeWithThisPeriod, Forecast, ID, Mode, NestedClassID } from '@zeniai/client-epic-state';
3
- import { DetailPageClassViewReport, DetailPageReport, UIState } from './detailPageReportTypes';
3
+ import { DetailPageClassViewReport, DetailPageProjectViewReport, DetailPageReport, UIState } from './detailPageReportTypes';
4
4
  export interface DetailPageReportFiltersProps {
5
5
  highlightedRangeReport: DetailPageReport;
6
6
  reportLabels: {
@@ -10,10 +10,12 @@ export interface DetailPageReportFiltersProps {
10
10
  uiState: UIState;
11
11
  analytics?: ClientAnalytics;
12
12
  isAccountingClassesEnabled?: boolean;
13
+ isAccountingProjectsEnabled?: boolean;
13
14
  isPageFetchInProgress?: boolean;
14
15
  isZeniCOAUsed?: boolean;
15
16
  isZeniUser?: boolean;
16
17
  selectedClassesViewRangeReport?: DetailPageClassViewReport;
18
+ selectedProjectViewRangeReport?: DetailPageProjectViewReport;
17
19
  onAdditionalBalanceSelectionChanged: (isCompareModeOn: boolean, additionalBalances: COABalanceType[], maxNumOfPeriodsToHighlight: number) => void;
18
20
  onCOABalancesRangeChanged: (selectedCOABalancesRange: COABalancesRange, highlightedCOABalancesRange?: COABalancesRangeWithThisPeriod) => void;
19
21
  onTimeframeSelectionChanged: (selectedTimeframe: COABalanceTimeFrame) => void;
@@ -25,6 +27,7 @@ export interface DetailPageReportFiltersProps {
25
27
  onResyncReports?: () => void;
26
28
  onUpdateAccountViewMode?: (view: AccountViewMode) => void;
27
29
  onUpdateClassesToFilterOut?: (classesToFilterOut: NestedClassID[]) => void;
30
+ onUpdateProjectsToFilterOut?: (projectsToFilterOut: ID[]) => void;
28
31
  }
29
32
  export declare const DetailPageReportFilters: (props: DetailPageReportFiltersProps) => import("react/jsx-runtime").JSX.Element;
30
33
  export declare function ForecastListWithToggle({ isOn, isDisabled, selectedForecastIndex, forecasts, isForecastValid, onForecastToggleChanged, onForecastSelectionChanged, }: {
@@ -3,7 +3,7 @@ import { ClientAnalytics } from '@zeniai/client-analytics';
3
3
  import { AccountReport, COABalance, COABalanceType } from '@zeniai/client-epic-state';
4
4
  import { ReportTreeInternalType, ReportTreeScrollPosition } from '../../reportTree/ReportTree';
5
5
  import { AccountBalanceClickMeta, ReportTreeNode } from '../../reportTree/reportTreeTypes';
6
- import { DetailPageClassViewReport, DetailPageReport, UIState } from './detailPageReportTypes';
6
+ import { DetailPageClassViewReport, DetailPageProjectViewReport, DetailPageReport, UIState } from './detailPageReportTypes';
7
7
  export declare const DetailPageReportTable: (props: {
8
8
  selectedRangeReport: DetailPageReport;
9
9
  uiState: UIState;
@@ -14,6 +14,7 @@ export declare const DetailPageReportTable: (props: {
14
14
  isZeniUser?: boolean;
15
15
  scrollPosition?: ReportTreeScrollPosition;
16
16
  selectedClassesViewRangeReport?: DetailPageClassViewReport;
17
+ selectedProjectViewRangeReport?: DetailPageProjectViewReport;
17
18
  treeRef?: RefObject<ReportTreeInternalType>;
18
19
  onAdditionalBalanceSelectionChanged: (isCompareModeOn: boolean, additionalBalances: COABalanceType[], maxNumOfPeriodsToHighlight: number) => void;
19
20
  onAccountBalanceClick?: (account: AccountReport, balance: COABalance, balanceClickMeta?: AccountBalanceClickMeta) => void;
@@ -1,4 +1,4 @@
1
1
  import { RootNodes } from '../../../reportTree/ReportTree';
2
2
  import { ReportElementConfig } from '../../../reportTree/reportTreeTypes';
3
- import { DetailPageClassViewReport, DetailPageReport } from '../detailPageReportTypes';
4
- export declare function getRootNodesWithUpdatedConfig(rootNodes: RootNodes, updatedConfig: ReportElementConfig, report: DetailPageReport | DetailPageClassViewReport, makeTimeframeRowSticky?: boolean): RootNodes;
3
+ import { DetailPageClassViewReport, DetailPageProjectViewReport, DetailPageReport } from '../detailPageReportTypes';
4
+ export declare function getRootNodesWithUpdatedConfig(rootNodes: RootNodes, updatedConfig: ReportElementConfig, report: DetailPageReport | DetailPageClassViewReport | DetailPageProjectViewReport, makeTimeframeRowSticky?: boolean): RootNodes;
@@ -1,7 +1,8 @@
1
1
  import { AuthParams, COABalanceTimeFrame, COABalanceType, COABalancesRange, COABalancesRangeWithThisPeriod, FetchState, ID, Mode, TopExReport } from '@zeniai/client-epic-state';
2
- import { DashboardClassesViewReport, DashboardReport } from '../common/dashboardReportDownload';
2
+ import { DashboardClassesViewReport, DashboardProjectViewReport, DashboardReport } from '../common/dashboardReportDownload';
3
3
  export type DetailPageReport = Exclude<DashboardReport, TopExReport>;
4
4
  export type DetailPageClassViewReport = DashboardClassesViewReport;
5
+ export type DetailPageProjectViewReport = DashboardProjectViewReport;
5
6
  export type UIState = {
6
7
  downloadState: FetchState;
7
8
  mode: Mode;
@@ -0,0 +1,4 @@
1
+ import { NetBurnOrIncomeProjectViewReport } from '@zeniai/client-epic-state';
2
+ import { RootNodes } from '../../reportTree/ReportTree';
3
+ import { ReportElementConfig } from '../../reportTree/reportTreeTypes';
4
+ export declare function mapNetBurnOrIncomeProjectReportToReportTreeNodes(report: NetBurnOrIncomeProjectViewReport, config: ReportElementConfig, makeTimeframeRowSticky?: boolean, isPageFetchInProgress?: boolean): RootNodes;
@@ -0,0 +1,4 @@
1
+ import { OpExProjectViewReport } from '@zeniai/client-epic-state';
2
+ import { RootNodes } from '../../reportTree/ReportTree';
3
+ import { ReportElementConfig } from '../../reportTree/reportTreeTypes';
4
+ export declare function mapOpExProjectReportToReportTreeNodes(report: OpExProjectViewReport, config: ReportElementConfig, makeTimeframeRowSticky?: boolean, isPageFetchInProgress?: boolean): RootNodes;
@@ -0,0 +1,4 @@
1
+ import { RevenueProjectViewReport } from '@zeniai/client-epic-state';
2
+ import { RootNodes } from '../../reportTree/ReportTree';
3
+ import { ReportElementConfig } from '../../reportTree/reportTreeTypes';
4
+ export declare function mapRevenueProjectReportToReportTreeNodes(report: RevenueProjectViewReport, config: ReportElementConfig, makeTimeframeRowSticky?: boolean, isPageFetchInProgress?: boolean): RootNodes;
@@ -17,15 +17,6 @@ export interface StatementParseFormView {
17
17
  totalPayments: number;
18
18
  transactions: StatementParseFormTransaction[];
19
19
  }
20
- /** Totals derived from in-period transactions (UI + local store; not used in PUT). */
21
- export interface StatementBalancesFromTransactions {
22
- closingBalance: number;
23
- totalDeposits: number;
24
- totalPayments: number;
25
- }
26
- export type StatementUpdateLocalDataWithTxnBalances = StatementUpdateLocalData & {
27
- balancesFromTransactions: StatementBalancesFromTransactions;
28
- };
29
20
  export interface GetStatementParseFormViewInput {
30
21
  originalTransactions: StatementTransaction[];
31
22
  parsedStatementMeta: StatementMeta | undefined;
@@ -47,20 +38,20 @@ export interface ApplyStatementParseFormChangeInput {
47
38
  changedField?: string;
48
39
  }
49
40
  export interface ApplyStatementParseFormChangeResult {
50
- balancesFromTransactions: StatementBalancesFromTransactions;
41
+ didRecalculateBalances: boolean;
51
42
  formView: StatementParseFormView;
52
- localData: StatementUpdateLocalDataWithTxnBalances;
43
+ localData: StatementUpdateLocalData;
53
44
  }
54
45
  export declare const isStatementParseTransactionFieldChange: (changedField: string | undefined) => boolean;
55
46
  export declare const isStatementParseManualBalanceField: (field: string | undefined) => field is StatementParseManualBalanceField;
56
- export declare const computeStatementBalancesFromTransactions: (formView: Pick<StatementParseFormView, "openingBalance" | "statementEndDate" | "statementStartDate" | "transactions">, accountType?: AccountType) => StatementBalancesFromTransactions;
57
- export declare const doStatementBalanceAmountsMatch: (statementAmount: number, transactionsAmount: number) => boolean;
58
- /**
59
- * Main form fields use parse-API statement meta. Transaction-derived totals are
60
- * computed separately for additionalInfo / mismatch checks / local store.
61
- */
62
- export declare const getStatementParseFormView: ({ accountType, parsedStatementMeta, originalTransactions, statementUpdateLocalData, }: GetStatementParseFormViewInput) => StatementParseFormView & {
63
- balancesFromTransactions: StatementBalancesFromTransactions;
47
+ export declare const shouldRecalculateStatementParseBalances: (changedField: string | undefined) => boolean;
48
+ export declare const resolveStatementParseBalanceFields: (formView: StatementParseFormView, changedField: string | undefined, accountType?: AccountType) => {
49
+ closingBalance: number;
50
+ openingBalance: number;
51
+ totalDeposits: number;
52
+ totalPayments: number;
64
53
  };
65
- export declare const toStatementUpdateLocalDataFromFormView: ({ accountType, formView, parsedStatementMeta, originalTransactions, }: ToStatementUpdateLocalDataFromFormViewInput) => StatementUpdateLocalDataWithTxnBalances;
54
+ export declare const areStatementParseBalancesConsistent: (formView: StatementParseFormView, accountType?: AccountType) => boolean;
55
+ export declare const getStatementParseFormView: ({ accountType, parsedStatementMeta, originalTransactions, statementUpdateLocalData, }: GetStatementParseFormViewInput) => StatementParseFormView;
56
+ export declare const toStatementUpdateLocalDataFromFormView: ({ accountType, formView, parsedStatementMeta, originalTransactions, changedField, }: ToStatementUpdateLocalDataFromFormViewInput) => StatementUpdateLocalData;
66
57
  export declare const applyStatementParseFormChange: ({ accountType, formView, changedField, parsedStatementMeta, originalTransactions, }: ApplyStatementParseFormChangeInput) => ApplyStatementParseFormChangeResult;
@@ -0,0 +1,12 @@
1
+ import { DisableMode, LabelProps } from '../common/common';
2
+ export interface LabeledColorPickerFieldProps {
3
+ label: LabelProps;
4
+ /** Field name registered with react-hook-form; holds a `#rrggbb` string. */
5
+ name: string;
6
+ controlWidth?: number | string;
7
+ defaultValue?: string;
8
+ isDisabled?: DisableMode;
9
+ placeholder?: string;
10
+ style?: React.CSSProperties;
11
+ }
12
+ export declare function LabeledColorPickerField({ controlWidth, defaultValue, isDisabled, label, name, placeholder, style, }: Readonly<LabeledColorPickerFieldProps>): import("react/jsx-runtime").JSX.Element;
@@ -9,6 +9,7 @@ export interface CheckBoxCoreDetails {
9
9
  groupLabel: boolean;
10
10
  label: string | React.ReactNode;
11
11
  value: string;
12
+ containerStyle?: React.CSSProperties;
12
13
  exceptionInfo?: string;
13
14
  exceptionMode?: CheckBoxMode;
14
15
  exceptionTooltipStyle?: React.CSSProperties;
@@ -1,4 +1,4 @@
1
- import { InvoicingCatalogItemFormLocalData } from '@zeniai/client-epic-state';
1
+ import { InvoicingCatalogItemFormLocalData, InvoicingQboAccountOption } from '@zeniai/client-epic-state';
2
2
  /**
3
3
  * Catalog item types as shown to the user. All three are parent catalog items;
4
4
  * the type controls the parent and nested sub-family payload fields.
@@ -29,6 +29,8 @@ export interface InvoicingCatalogItemFormPageProps {
29
29
  */
30
30
  defaultType?: CatalogFormType;
31
31
  errorMessage?: string;
32
+ qboClasses?: InvoicingQboAccountOption[];
33
+ qboIncomeAccounts?: InvoicingQboAccountOption[];
32
34
  onCancel: () => void;
33
35
  onChange: (localData: InvoicingCatalogItemFormLocalData) => void;
34
36
  onSubmit: () => void;
@@ -41,5 +43,5 @@ export interface InvoicingCatalogItemFormPageProps {
41
43
  * invoicing forms. The whole form syncs back to the CES draft (`localData`) on
42
44
  * every change; the save payload is derived from the draft in CES.
43
45
  */
44
- export declare function InvoicingCatalogItemFormPage({ applicabilityValues, applicableItemOptions, defaultType, errorMessage, isSubmitting, localData, mode, onBack, onCancel, onChange, onSubmit, periodUnitValues, pricingModelValues, prorationValues, tierTypeValues, trialEndActionValues, trialUnitValues, typeValues, }: Readonly<InvoicingCatalogItemFormPageProps>): import("react/jsx-runtime").JSX.Element;
46
+ export declare function InvoicingCatalogItemFormPage({ applicabilityValues, applicableItemOptions, defaultType, errorMessage, isSubmitting, localData, mode, onBack, onCancel, onChange, onSubmit, periodUnitValues, pricingModelValues, prorationValues, qboClasses, qboIncomeAccounts, tierTypeValues, trialEndActionValues, trialUnitValues, typeValues, }: Readonly<InvoicingCatalogItemFormPageProps>): import("react/jsx-runtime").JSX.Element;
45
47
  export default InvoicingCatalogItemFormPage;
@@ -37,14 +37,19 @@ export interface PickerValue {
37
37
  allOptions: CatalogSelectOption[];
38
38
  selectedOption?: string;
39
39
  }
40
+ /** Unwrap accountingCode/accountingCategory — PickerValue when QBO-connected, string otherwise. */
41
+ export declare const pickerOrText: (value: PickerValue | string) => string;
40
42
  export interface CatalogTierFormValues {
41
43
  endingUnit: string;
42
44
  packageSize: string;
43
- price: string;
45
+ /** Held as a float by `returnValueType: "floatValue"`; `null` when cleared. */
46
+ price: number | null;
44
47
  pricingType: PickerValue;
45
48
  startingUnit: string;
46
49
  }
47
50
  export interface CatalogSubFamilyFormValues {
51
+ accountingCategory: PickerValue | string;
52
+ accountingCode: PickerValue | string;
48
53
  billingCycles: string;
49
54
  description: string;
50
55
  flags: MultiSelectFieldValue;
@@ -55,9 +60,11 @@ export interface CatalogSubFamilyFormValues {
55
60
  period: string;
56
61
  periodUnit: PickerValue;
57
62
  priceCode: string;
58
- priceDollars: string;
63
+ /** Held as a float by `returnValueType: "floatValue"`; `null` when cleared. */
64
+ priceDollars: number | null;
59
65
  pricingModel: PickerValue;
60
66
  prorationType: PickerValue;
67
+ sku: string;
61
68
  tiers: CatalogTierFormValues[];
62
69
  trialEndAction: PickerValue;
63
70
  trialPeriod: string;
@@ -66,7 +73,7 @@ export interface CatalogSubFamilyFormValues {
66
73
  /**
67
74
  * Form-values shape reuses the CES localData field names verbatim — only the
68
75
  * fields whose *shape* differs on the form (pickers, multiselect, sub-families)
69
- * are overridden. Every plain field (name, productCode, sku, externalId, …) flows
76
+ * are overridden. Every plain field (name, productCode, externalId, …) flows
70
77
  * through by identity, so adding a field to the CES type needs no mapper change.
71
78
  */
72
79
  export type CatalogFormValues = Omit<InvoicingCatalogItemFormLocalData, "applicableItems" | "catalogType" | "itemApplicability" | "subFamilies"> & {
@@ -65,6 +65,9 @@ export interface FormToggleRowProps {
65
65
  checked: boolean;
66
66
  description: string;
67
67
  label: string;
68
+ containerStyle?: React.CSSProperties;
69
+ descriptionStyle?: React.CSSProperties;
70
+ labelStyle?: React.CSSProperties;
68
71
  onChange: (checked: boolean) => void;
69
72
  }
70
- export declare function FormToggleRow({ checked, description, label, onChange, }: Readonly<FormToggleRowProps>): import("react/jsx-runtime").JSX.Element;
73
+ export declare function FormToggleRow({ checked, containerStyle, description, descriptionStyle, label, labelStyle, onChange, }: Readonly<FormToggleRowProps>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { ReactElement } from 'react';
2
+ export interface InvoicingOpenEntityValueProps {
3
+ dataTestId: string;
4
+ label: string;
5
+ ariaLabel?: string;
6
+ onOpen: () => void;
7
+ }
8
+ /**
9
+ * Linked-entity value for the invoicing detail pages: the name stays plain text
10
+ * and only a trailing open-in-new-tab icon is a click target, so long names
11
+ * don't read as one large hyperlink. Shared so the invoice and subscription
12
+ * detail pages can't drift apart.
13
+ */
14
+ export declare function InvoicingOpenEntityValue({ ariaLabel, dataTestId, label, onOpen, }: Readonly<InvoicingOpenEntityValueProps>): ReactElement;
@@ -17,8 +17,10 @@ export interface PickerValue {
17
17
  * Every plain field (name, couponCode, couponId, …) flows through by identity,
18
18
  * so adding a field to the CES type needs no mapper change.
19
19
  */
20
- export type CouponFormValues = Omit<InvoicingCouponFormLocalData, "applyOn" | "discountType" | "durationType" | "periodUnit" | "validFrom" | "validTill"> & {
20
+ export type CouponFormValues = Omit<InvoicingCouponFormLocalData, "applyOn" | "discountAmount" | "discountType" | "durationType" | "periodUnit" | "validFrom" | "validTill"> & {
21
21
  applyOn: PickerValue;
22
+ /** Held as a float by `returnValueType: "floatValue"`; `null` when cleared. */
23
+ discountAmount: number | null;
22
24
  discountType: PickerValue;
23
25
  durationType: PickerValue;
24
26
  periodUnit: PickerValue;