@zeniai/web-components 4.2.27 → 4.2.28

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 (47) hide show
  1. package/dist/{SessionTimeoutPopup-DJQB9J45.cjs → SessionTimeoutPopup-FQidz3x6.cjs} +18240 -16509
  2. package/dist/{SessionTimeoutPopup-DtfB17Fl.js → SessionTimeoutPopup-nM8Th-1x.js} +85317 -80109
  3. package/dist/appLocale.d.ts +95 -3
  4. package/dist/cockpit.cjs.js +69 -69
  5. package/dist/cockpit.esm.js +2158 -2164
  6. package/dist/components/aiCfo/AiCfoPage.d.ts +8 -1
  7. package/dist/components/aiCfo/components/AiCfoInput.d.ts +7 -0
  8. package/dist/components/aiCfo/components/AiCfoSkillMenu.d.ts +19 -0
  9. package/dist/components/aiCfo/components/helpers/aiCfoSlashHelpers.d.ts +30 -0
  10. package/dist/components/aiCfo/stories/components/AiCfoStoryWrapper.d.ts +6 -1
  11. package/dist/components/aiCfo/stories/hooks/useAiCfoStoryState.d.ts +2 -2
  12. package/dist/components/common/uploadInvoice/RenderPdf.d.ts +14 -0
  13. package/dist/components/expenseAutomation/ExpenseAutomationPage.d.ts +1 -0
  14. package/dist/components/expenseAutomation/components/TableSection.d.ts +1 -0
  15. package/dist/components/expenseAutomation/sections/accountRecon/AccountReconDetailsDrawerPageV2.d.ts +44 -0
  16. package/dist/components/expenseAutomation/sections/accountRecon/AccountReconListSkeleton.d.ts +3 -1
  17. package/dist/components/expenseAutomation/sections/accountRecon/AccountReconciliationListPage.d.ts +2 -1
  18. package/dist/components/expenseAutomation/sections/accountRecon/AccountReconciliationPage.d.ts +2 -1
  19. package/dist/components/expenseAutomation/sections/accountRecon/ExcludedAccountReconDetailsDrawerPage.d.ts +3 -1
  20. package/dist/components/expenseAutomation/sections/accountRecon/ReconciliationProgressBar.d.ts +10 -0
  21. package/dist/components/expenseAutomation/sections/accountRecon/ReconciliationStatsCards.d.ts +5 -0
  22. package/dist/components/expenseAutomation/sections/accountRecon/StatementDateConflictPopup.d.ts +8 -0
  23. package/dist/components/expenseAutomation/sections/accountRecon/StatementPageLayout.d.ts +18 -0
  24. package/dist/components/expenseAutomation/sections/accountRecon/StatementParseInfo.d.ts +14 -0
  25. package/dist/components/expenseAutomation/sections/accountRecon/StatementProcessingPage.d.ts +10 -0
  26. package/dist/components/expenseAutomation/sections/accountRecon/mapAccountReconToReportTreeNodesV2.d.ts +16 -0
  27. package/dist/components/expenseAutomation/sections/accountRecon/mapExcludedAccountReconToReportTreeNodes.d.ts +2 -0
  28. package/dist/components/reportTree/reportTreeTypes.d.ts +1 -0
  29. package/dist/components/reportTree/treeNode/accountReconReport/row/AccountRow.d.ts +12 -0
  30. package/dist/components/reportTree/treeNode/accountReconReport/row/v2/AccountRow.d.ts +59 -0
  31. package/dist/components/reportTree/treeNode/accountReconReport/row/v2/LoadingInProgressRow.d.ts +3 -0
  32. package/dist/components/reportTree/treeNode/accountReconReport/row/v2/SectionRow.d.ts +10 -0
  33. package/dist/components/reportTree/treeNode/accountReconReport/row/v2/TimeframeRow.d.ts +7 -0
  34. package/dist/components/reportTree/treeNode/accountReconReport/row/v2/TotalRow.d.ts +15 -0
  35. package/dist/components/reportTree/treeNode/accountReconReport/row/v2/common.d.ts +38 -0
  36. package/dist/components/reportTree/treeNode/accountReconReport/row/v2/rowConstructors.d.ts +6 -0
  37. package/dist/components/reportTree/treeNode/accountReconReport/row/v2/statusHelper.d.ts +12 -0
  38. package/dist/components/reportTree/treeNode/accountReconReport/treeNodeMappers/v2/mapSectionToTreeNode.d.ts +11 -0
  39. package/dist/components/reportTree/treeNode/getTreeNodeData.d.ts +1 -1
  40. package/dist/context/SidePanelContext.d.ts +1 -1
  41. package/dist/context/featureProvider/FeatureGateNameConstants.d.ts +3 -1
  42. package/dist/designSystem/zeniColors.d.ts +8 -0
  43. package/dist/index.cjs.js +1 -1
  44. package/dist/index.d.ts +3 -0
  45. package/dist/index.esm.js +334 -331
  46. package/dist/strings/strings.d.ts +95 -3
  47. package/package.json +7 -7
@@ -4,6 +4,7 @@ import { AiCfoQuestionWithAnswer, AiCfoViewSelector, ID, SyntheticAiCfoAnswer, U
4
4
  import { AiCfoChatHeaderProps } from './components/AiCfoChatHeader';
5
5
  import { FileAttachment } from './components/AiCfoInput';
6
6
  import { AiCfoQuestionAnswerProps } from './components/AiCfoQuestionAnswer';
7
+ import { SkillMenuItem } from './components/AiCfoSkillMenu';
7
8
  import { ResolvedSyntheticAiCfoCard, ResolvedSyntheticAiCfoPolicy } from './components/SyntheticAiCfoAnswerView';
8
9
  export declare const uniqueFormName: (formId: ID) => `${string}_form`;
9
10
  /**
@@ -150,6 +151,8 @@ export interface AiCfoPageProps {
150
151
  routedInitialQuestionSource?: AICFOChatSubmissionSource;
151
152
  /** Suggestion chip index when the routed question came from a sample chip (e.g. `question_card` or `dashboard_card`). */
152
153
  routedInitialQuestionSuggestionIndex?: number;
154
+ /** Chat-visible skills for the `/` menu (from getSkills). */
155
+ skills?: SkillMenuItem[];
153
156
  style?: React.CSSProperties;
154
157
  /**
155
158
  * Client-synthesized "Creating…" / "Created" bubbles for the active
@@ -161,7 +164,9 @@ export interface AiCfoPageProps {
161
164
  onCopy: (content: string) => void;
162
165
  onNewChatClick: () => void;
163
166
  onStopSubmit: () => void;
164
- onSubmit: (input: string, source: AICFOChatSubmissionSource, files?: File[], index?: number) => void;
167
+ onSubmit: (input: string, source: AICFOChatSubmissionSource, files?: File[], index?: number,
168
+ /** Skill reference when the turn came from the `/` menu; chat expands it to instructions. */
169
+ macroId?: string) => void;
165
170
  onThumbsDown: (questionAnswerId: ID) => void;
166
171
  onThumbsUp: (questionAnswerId: ID) => void;
167
172
  onToggleCotCollapsed: (questionAnswerId: ID, isCollapsed: boolean) => void;
@@ -170,6 +175,8 @@ export interface AiCfoPageProps {
170
175
  togglePageView: () => void;
171
176
  updateCurrentInput: (input: string) => void;
172
177
  onEmailLinkQuestionProcessed?: () => void;
178
+ /** Called when the user first types `/` so the container can fetch skills. */
179
+ onFetchSkills?: () => void;
173
180
  onMenuClick?: () => void;
174
181
  onUploadPromoClose?: () => void;
175
182
  /**
@@ -1,5 +1,6 @@
1
1
  import { default as React } from 'react';
2
2
  import { ID } from '@zeniai/client-epic-state';
3
+ import { SkillMenuItem } from './AiCfoSkillMenu';
3
4
  export interface FileAttachment {
4
5
  file: File;
5
6
  id: string;
@@ -17,12 +18,18 @@ export interface AiCfoInputProps {
17
18
  isUploadPromoVisible?: boolean;
18
19
  selectedFiles?: FileAttachment[];
19
20
  shouldFocus?: boolean;
21
+ /** Chat-visible skills for the `/` menu (from getSkills). */
22
+ skills?: SkillMenuItem[];
20
23
  onInputChange: (value: string) => void;
21
24
  onStopSubmit: () => void;
22
25
  onSubmit: () => void;
23
26
  openOnboardingPage: () => void;
27
+ /** Called when the user first types `/` so the container can fetch skills. */
28
+ onFetchSkills?: () => void;
24
29
  onFilesChange?: (files: FileAttachment[]) => void;
25
30
  onFocusComplete?: () => void;
31
+ /** Called when a skill is picked from the `/` menu. */
32
+ onSelectSkill?: (skill: SkillMenuItem) => void;
26
33
  onUploadPromoClose?: () => void;
27
34
  }
28
35
  declare const AiCfoInput: React.FC<AiCfoInputProps>;
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ import { SkillMenuItem } from './helpers/aiCfoSlashHelpers';
3
+ export type { SkillMenuItem } from './helpers/aiCfoSlashHelpers';
4
+ export { AI_CFO_SLASH_COMMAND_REGEX, matchSlashQuery, filterSkills, } from './helpers/aiCfoSlashHelpers';
5
+ /** Listbox element id — the composer's textarea references it via aria-controls. */
6
+ export declare const SKILL_MENU_LISTBOX_ID = "ai-cfo-skill-listbox";
7
+ /** Stable per-option id for aria-activedescendant wiring. */
8
+ export declare const skillOptionId: (macroId: string) => string;
9
+ interface AiCfoSkillMenuProps {
10
+ activeIndex: number;
11
+ id: string;
12
+ items: SkillMenuItem[];
13
+ open: boolean;
14
+ onActiveIndexChange: (index: number) => void;
15
+ onSelect: (item: SkillMenuItem) => void;
16
+ }
17
+ /** Slash-command dropdown shown above the AI CFO composer (presentational only). */
18
+ declare const AiCfoSkillMenu: React.FC<AiCfoSkillMenuProps>;
19
+ export default AiCfoSkillMenu;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared logic for the AI CFO `/`-skill menu: the slash-command matcher and the
3
+ * skill filter. Kept here (next to {@link aiCfoAnswerHelpers}) rather than inline
4
+ * in the component so the regex is defined exactly once and can be reused by other
5
+ * consumers (empty-state hint, feature-flag gate, analytics, etc.) without drift.
6
+ */
7
+ /**
8
+ * Minimal shape the `/` menu needs from a Skill. Declared locally (not imported
9
+ * from @zeniai/client-epic-state) so web-components doesn't depend on a newer
10
+ * published version; the container passes structurally-compatible Skill objects.
11
+ */
12
+ export interface SkillMenuItem {
13
+ macroId: string;
14
+ /** Slug used as the inserted command token, e.g. "flux" -> "/flux". */
15
+ name: string;
16
+ description?: string | null;
17
+ displayName?: string | null;
18
+ }
19
+ /**
20
+ * Matches a message that is a single "/token" (no spaces). The whole message must
21
+ * be the slash command — this is for "/skill" as the message, not slash-anywhere.
22
+ */
23
+ export declare const AI_CFO_SLASH_COMMAND_REGEX: RegExp;
24
+ /**
25
+ * The `/`-menu query: non-null only when the input is a single "/token". Returns
26
+ * "" for a bare "/", the slug for "/flux", null otherwise.
27
+ */
28
+ export declare function matchSlashQuery(input: string): string | null;
29
+ /** Filter skills by the slash query against name + displayName (case-insensitive). */
30
+ export declare function filterSkills(skills: SkillMenuItem[], slashQuery: string | null): SkillMenuItem[];
@@ -1,7 +1,9 @@
1
1
  import { default as React } from 'react';
2
2
  import { AiCfoViewSelector } from '@zeniai/client-epic-state';
3
+ import { default as AiCfoPage } from '../../AiCfoPage';
3
4
  import { AiCfoChatHeaderProps } from '../../components/AiCfoChatHeader';
4
5
  import { FileAttachment } from '../../components/AiCfoInput';
6
+ import { SkillMenuItem } from '../../components/AiCfoSkillMenu';
5
7
  interface AiCfoStoryWrapperProps {
6
8
  aiCfoView: AiCfoViewSelector;
7
9
  tableDownloadEndPoint: string;
@@ -19,10 +21,13 @@ interface AiCfoStoryWrapperProps {
19
21
  * {@link FeatureContext} so Explore / sample questions render like production.
20
22
  */
21
23
  mockAiCfoDefaultMessageList?: string[];
24
+ onSubmit?: React.ComponentProps<typeof AiCfoPage>["onSubmit"];
22
25
  showSampleQuestions?: boolean;
26
+ /** Chat-visible skills for the `/` menu. */
27
+ skills?: SkillMenuItem[];
28
+ onFetchSkills?: () => void;
23
29
  onMenuClick?: () => void;
24
30
  onStopSubmit?: () => void;
25
- onSubmit?: (input: string) => void;
26
31
  onUpdateScrollYOffset?: (scrollYOffset: number) => void;
27
32
  updateCurrentInput?: (input: string) => void;
28
33
  }
@@ -7,9 +7,9 @@ export declare const useAiCfoStoryState: ({ initialAiCfoView, currentChatSession
7
7
  currentInput: string;
8
8
  aiCfoView: AiCfoViewSelector;
9
9
  updateCurrentInput: (input: string) => void;
10
- onSubmit: (input: string, delay?: number) => void;
10
+ onSubmit: (input: string) => void;
11
11
  onStopSubmit: () => void;
12
- createNewSession: (input: string, delay?: number) => void;
12
+ createNewSession: (input: string) => void;
13
13
  setScrollPosition: import('react').Dispatch<import('react').SetStateAction<number>>;
14
14
  setResponseStateByChatSessionId: import('react').Dispatch<import('react').SetStateAction<{
15
15
  analysis: import('@zeniai/client-epic-state').FetchStateAndError;
@@ -1,5 +1,18 @@
1
1
  import { Dispatch, SetStateAction } from 'react';
2
2
  type Dispatcher<T> = Dispatch<SetStateAction<T>>;
3
+ export interface PolygonPoint {
4
+ x: number;
5
+ y: number;
6
+ }
7
+ export type CitationHighlightVariant = "default" | "deleted" | "hovered";
8
+ export interface Citation {
9
+ page: number;
10
+ pageHeight: number;
11
+ pageWidth: number;
12
+ polygon: PolygonPoint[];
13
+ referenceText: string;
14
+ variant?: CitationHighlightVariant;
15
+ }
3
16
  interface Props {
4
17
  fileUrl: string;
5
18
  isFullScreen: boolean;
@@ -7,6 +20,7 @@ interface Props {
7
20
  allowMultiFiles?: boolean;
8
21
  /** Overrides default `delete-attachment` test id when provided */
9
22
  deleteAttachmentDataTestId?: string;
23
+ highlightedCitations?: Citation[];
10
24
  maxHeight?: boolean;
11
25
  pdfTitle?: string;
12
26
  /** When false with showTitlebarIcon, hides replace upload; delete still shows if onDeleteClick is used. Default true. */
@@ -20,6 +20,7 @@ export interface ExpenseAutomationPageProps extends MonthEndReportPageProps {
20
20
  isJEScheduleCOTEnabled: boolean;
21
21
  isProjectsTransactionsEnabled: boolean;
22
22
  isRealtimeInsightsFeatureEnabled: boolean;
23
+ isReconV3Enabled: boolean;
23
24
  isTransactionActivityEnabled: boolean;
24
25
  receiptUploadEndpoint: string;
25
26
  vendorSearchAutoCompleteActions: AutoCompleteActions;
@@ -36,6 +36,7 @@ interface TableSectionProps extends MissingReceiptsListTableActionProps, Transac
36
36
  isAccountingClassesEnabled: boolean;
37
37
  isCOTEnabled: boolean;
38
38
  isProjectsTransactionsEnabled: boolean;
39
+ isReconV3Enabled: boolean;
39
40
  isTransactionActivityEnabled: boolean;
40
41
  receiptUploadEndpoint: string;
41
42
  vendorSearchAutoCompleteActions: AutoCompleteActions;
@@ -0,0 +1,44 @@
1
+ import { AccountReconciliationByAccount, AuthParams, FetchStateAndError, File as FileEntity, ID, MonthYearPeriod, PlaidConnectionDetails, PlaidLinkTokenType, ReconciliationAccountSourceType, StatementUpdateLocalData, UploadStatementDocumentAIPayload } from '@zeniai/client-epic-state';
2
+ export interface AccountReconDrawerDetailsSectionFormData {
3
+ file?: FileEntity;
4
+ selectedType?: ReconciliationAccountSourceType;
5
+ }
6
+ type FormDataKeys = keyof AccountReconDrawerDetailsSectionFormData;
7
+ export declare const uniqueName: (sectionId: string, key: FormDataKeys) => `${string}.file` | `${string}.selectedType`;
8
+ export type FormDataKeyUniqueNames = ReturnType<typeof uniqueName>;
9
+ declare const accountReconDrawerDetailsSectionId = "accountReconDrawerDetailsSection";
10
+ export interface FormData {
11
+ [accountReconDrawerDetailsSectionId]: AccountReconDrawerDetailsSectionFormData;
12
+ }
13
+ export interface Props {
14
+ accountReconciliation: AccountReconciliationByAccount;
15
+ authParams: AuthParams;
16
+ excludeAccountFetch: FetchStateAndError;
17
+ filesEndPoint: string;
18
+ monthYearPeriod: MonthYearPeriod;
19
+ openFilePicker: boolean;
20
+ plaidConnectionDetails: PlaidConnectionDetails;
21
+ isReconV3Enabled?: boolean;
22
+ reconciledByName?: string;
23
+ statementProcessingFailed?: boolean;
24
+ onDeleteFile: (fileId: ID) => void;
25
+ onDismissClick: () => void;
26
+ onEditFileName: (fileId: ID, fileName: string) => void;
27
+ onEstablishConnectionClick: (publicToken: ID, accountId: ID, linkTokenType?: PlaidLinkTokenType) => void;
28
+ onExcludeFromReconciliation: () => void;
29
+ onFetchLinkTokenClick: (plaidLinkTokenType: PlaidLinkTokenType, paymentAccountId?: ID) => void;
30
+ onSelectSourceType: (sourceType: ReconciliationAccountSourceType) => void;
31
+ onStatementUploadSuccess: (statementUploadPayload: UploadStatementDocumentAIPayload) => void;
32
+ onUploadWindowOpenedOnce: () => void;
33
+ onDismissDateConflict?: () => void;
34
+ onDismissStatementProcessingFailed?: () => void;
35
+ onFileUploadStarted?: () => void;
36
+ onRetryParsing?: (accountId: ID, selectedPeriod: MonthYearPeriod, statementUploadId: ID) => void;
37
+ onReuploadAfterDateConflict?: () => void;
38
+ onReuploadStatement?: () => void;
39
+ onReviewClicked?: (accountId: ID) => void;
40
+ onStatementConfirmSave?: () => void;
41
+ onStatementFormDataChange?: (updateData: StatementUpdateLocalData) => void;
42
+ }
43
+ export default function AccountReconDetailsDrawerPage({ accountReconciliation, plaidConnectionDetails, monthYearPeriod, openFilePicker, filesEndPoint, authParams, excludeAccountFetch, onDismissClick, onFetchLinkTokenClick, onEstablishConnectionClick, onExcludeFromReconciliation, onSelectSourceType, onDeleteFile, onEditFileName, onStatementUploadSuccess, onUploadWindowOpenedOnce, onFileUploadStarted, onRetryParsing, onReviewClicked, onDismissStatementProcessingFailed, onReuploadStatement, onStatementConfirmSave, onStatementFormDataChange, onDismissDateConflict, onReuploadAfterDateConflict, reconciledByName, statementProcessingFailed, isReconV3Enabled, }: Readonly<Props>): import("react/jsx-runtime").JSX.Element;
44
+ export {};
@@ -1,2 +1,4 @@
1
- declare const AccountReconListSkeleton: () => import("react/jsx-runtime").JSX.Element;
1
+ declare const AccountReconListSkeleton: ({ showStatsCards, }: {
2
+ showStatsCards?: boolean;
3
+ }) => import("react/jsx-runtime").JSX.Element;
2
4
  export default AccountReconListSkeleton;
@@ -1,6 +1,7 @@
1
1
  import { ExpenseAutomationReconciliationViewSelector, ID, PlaidLinkTokenType } from '@zeniai/client-epic-state';
2
2
  export interface AccountReconciliationListPageProps {
3
3
  companyId: ID;
4
+ isReconV3Enabled: boolean;
4
5
  reconciliation: ExpenseAutomationReconciliationViewSelector;
5
6
  onAddStatementClick: (accountId: ID) => void;
6
7
  onEstablishConnectionClick: (publicToken: ID, accountId: ID, linkTokenType?: PlaidLinkTokenType) => void;
@@ -12,4 +13,4 @@ export interface AccountReconciliationListPageProps {
12
13
  onAccountExclude?: (accountId: ID) => void;
13
14
  onAccountInclude?: (accountId: ID) => void;
14
15
  }
15
- export default function AccountReconciliationListPage({ reconciliation, companyId, onReload, onReviewClicked, setOpenDrawerClicked, onFetchLinkTokenClick, onEstablishConnectionClick, onAddStatementClick, onNodeCollapseToggled, onAccountExclude, onAccountInclude, }: Readonly<AccountReconciliationListPageProps>): import("react/jsx-runtime").JSX.Element;
16
+ export default function AccountReconciliationListPage({ reconciliation, companyId, onReload, onReviewClicked, setOpenDrawerClicked, onFetchLinkTokenClick, onEstablishConnectionClick, onAddStatementClick, onNodeCollapseToggled, onAccountExclude, onAccountInclude, isReconV3Enabled, }: Readonly<AccountReconciliationListPageProps>): import("react/jsx-runtime").JSX.Element;
@@ -25,7 +25,8 @@ export interface AccountReconciliationParentPageActionProps {
25
25
  }
26
26
  export interface AccountReconciliationPageProps extends AccountReconciliationParentPageActionProps {
27
27
  isAccountingClassesEnabled: boolean;
28
+ isReconV3Enabled: boolean;
28
29
  reconciliation: ExpenseAutomationReconciliationViewSelector;
29
30
  vendorSearchAutoCompleteData: AutoCompleteData;
30
31
  }
31
- export default function AccountReconciliationPage({ currentFooterFormId, isAccountingClassesEnabled, vendorSearchAutoCompleteData, vendorSearchAutoCompleteActions, reconciliation, companyId, onReconTabColumnSortConfigChanged, updateReconReviewTabLocalData, onUpdateReconcileTabLocalData, setCurrentFooterFormId, onReloadReconciliationListPage, onReviewClicked, onFetchLinkTokenClick, onEstablishConnectionClick, onAddStatementClick, onReconReviewTabColumnSortConfigChanged, onSaveReconciliation, onSaveReconciliationReview, setOpenDrawerClicked, onReconMatchedTransactionClick, onReconNodeCollapseToggled, onExcludeAccountFromReconciliation, onIncludeAccountIntoReconciliation, }: Readonly<AccountReconciliationPageProps>): import("react/jsx-runtime").JSX.Element;
32
+ export default function AccountReconciliationPage({ currentFooterFormId, isAccountingClassesEnabled, vendorSearchAutoCompleteData, vendorSearchAutoCompleteActions, reconciliation, companyId, onReconTabColumnSortConfigChanged, updateReconReviewTabLocalData, onUpdateReconcileTabLocalData, setCurrentFooterFormId, onReloadReconciliationListPage, onReviewClicked, onFetchLinkTokenClick, onEstablishConnectionClick, onAddStatementClick, onReconReviewTabColumnSortConfigChanged, onSaveReconciliation, onSaveReconciliationReview, setOpenDrawerClicked, onReconMatchedTransactionClick, onReconNodeCollapseToggled, onExcludeAccountFromReconciliation, onIncludeAccountIntoReconciliation, isReconV3Enabled, }: Readonly<AccountReconciliationPageProps>): import("react/jsx-runtime").JSX.Element;
@@ -2,6 +2,8 @@ import { AccountReconciliationByAccount, FetchStateAndError } from '@zeniai/clie
2
2
  export interface ExcludedAccountReconDetailsDrawerPageProps {
3
3
  excludedAccountReconciliation: AccountReconciliationByAccount;
4
4
  includeAccountFetch: FetchStateAndError;
5
+ isReconV3Enabled?: boolean;
5
6
  onIncludeIntoReconciliation: () => void;
7
+ onDismissClick?: () => void;
6
8
  }
7
- export default function ExcludedAccountReconDetailsDrawerPage({ excludedAccountReconciliation, includeAccountFetch, onIncludeIntoReconciliation, }: Readonly<ExcludedAccountReconDetailsDrawerPageProps>): import("react/jsx-runtime").JSX.Element;
9
+ export default function ExcludedAccountReconDetailsDrawerPage({ excludedAccountReconciliation, includeAccountFetch, onDismissClick, onIncludeIntoReconciliation, }: Readonly<ExcludedAccountReconDetailsDrawerPageProps>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ export interface ReconciliationProgress {
2
+ aiPercentageShare: number;
3
+ completePercentage: number;
4
+ humanPercentageShare: number;
5
+ remainingPercentage: number;
6
+ }
7
+ export interface ReconciliationProgressBarProps {
8
+ progress: ReconciliationProgress;
9
+ }
10
+ export declare function ReconciliationProgressBar({ progress, }: Readonly<ReconciliationProgressBarProps>): JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { ExpenseAutomationReconciliationViewSelector } from '@zeniai/client-epic-state';
2
+ export interface ReconciliationStatsCardsProps {
3
+ reconciliation: ExpenseAutomationReconciliationViewSelector;
4
+ }
5
+ export declare function ReconciliationStatsCards({ reconciliation, }: ReconciliationStatsCardsProps): JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { StatementDateConflict } from '@zeniai/client-epic-state';
2
+ export interface StatementDateConflictPopupProps {
3
+ conflict: StatementDateConflict;
4
+ reconciledByName?: string;
5
+ onCancel: () => void;
6
+ onReupload: () => void;
7
+ }
8
+ export default function StatementDateConflictPopup({ conflict, reconciledByName, onCancel, onReupload, }: Readonly<StatementDateConflictPopupProps>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { ReactNode } from 'react';
2
+ import { File as FileEntity } from '@zeniai/client-epic-state';
3
+ import { Citation } from '../../../common/uploadInvoice/RenderPdf';
4
+ /** Minimal file shape for the left PDF pane (entity File or parse response FileInfo). */
5
+ export type StatementPageFile = {
6
+ signedUrl: FileEntity["signedUrl"] | string;
7
+ fileName?: string;
8
+ };
9
+ interface StatementPageLayoutProps {
10
+ accountName: string;
11
+ children: ReactNode;
12
+ file: StatementPageFile | undefined;
13
+ navSource: string;
14
+ highlightedCitations?: Citation[];
15
+ onBack: () => void;
16
+ }
17
+ export default function StatementPageLayout({ accountName, children, file, navSource, highlightedCitations, onBack, }: Readonly<StatementPageLayoutProps>): import("react/jsx-runtime").JSX.Element;
18
+ export {};
@@ -0,0 +1,14 @@
1
+ import { FetchState, ParsedStatementData, StatementUpdateLocalData } from '@zeniai/client-epic-state';
2
+ import { Citation } from '../../../common/uploadInvoice/RenderPdf';
3
+ interface StatementParseInfoProps {
4
+ parsedData: ParsedStatementData | undefined;
5
+ statementUpdateFetchState?: FetchState;
6
+ onCancel: () => void;
7
+ onClose: () => void;
8
+ onConfirmSave: () => void;
9
+ onFormDataChange: (updateData: StatementUpdateLocalData) => void;
10
+ onRetry: () => void;
11
+ onHighlightedCitationsChange?: (citations: Citation[] | undefined) => void;
12
+ }
13
+ export default function StatementParseInfo({ parsedData, onCancel, onClose, onRetry, onConfirmSave, onFormDataChange, onHighlightedCitationsChange, statementUpdateFetchState, }: Readonly<StatementParseInfoProps>): import("react/jsx-runtime").JSX.Element;
14
+ export {};
@@ -0,0 +1,10 @@
1
+ interface StatementProcessingPageProps {
2
+ isUploadComplete: boolean;
3
+ _storyCompletedSteps?: number;
4
+ isParsedDataReady?: boolean;
5
+ onCancel: () => void;
6
+ onContinueInBackground: () => void;
7
+ onAllStepsComplete?: () => void;
8
+ }
9
+ export default function StatementProcessingPage({ isUploadComplete, _storyCompletedSteps, isParsedDataReady, onCancel, onContinueInBackground, onAllStepsComplete, }: Readonly<StatementProcessingPageProps>): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,16 @@
1
+ import { ExpenseAutomationReconciliationViewSelector, ID } from '@zeniai/client-epic-state';
2
+ import { RootNodes } from '../../../reportTree/ReportTree';
3
+ import { ReportElementConfig, ReportTreeNode } from '../../../reportTree/reportTreeTypes';
4
+ export type AccountReconSectionId = "assets" | "liabilities";
5
+ /**
6
+ * Calculate the Y position where the Liabilities section starts.
7
+ * This is used to determine when to switch the sticky header title.
8
+ */
9
+ export declare function calculateLiabilitiesSectionStartY(numAssetAccounts: number, hasLiabilitiesSection: boolean): number;
10
+ export declare const mapAccountReconToReportTreeNodes: (report: ExpenseAutomationReconciliationViewSelector, config: ReportElementConfig, accountReconConfig: Record<string, string[]>, // This is expected to be a record of companyId to an array of account IDs that should be hidden
11
+ companyId: ID, makeTimeframeRowSticky?: boolean, visibleSectionId?: AccountReconSectionId) => {
12
+ config: ReportElementConfig;
13
+ headerNodes: ReportTreeNode[];
14
+ contentNodes: ReportTreeNode[];
15
+ };
16
+ export declare function getRootNodesWithUpdatedConfig(rootNodes: RootNodes, report: ExpenseAutomationReconciliationViewSelector, updatedConfig: ReportElementConfig, makeTimeframeRowSticky?: boolean, visibleSectionId?: AccountReconSectionId): RootNodes;
@@ -2,4 +2,6 @@ import { ExpenseAutomationReconciliationViewSelector } from '@zeniai/client-epic
2
2
  import { RootNodes } from '../../../reportTree/ReportTree';
3
3
  import { ReportElementConfig } from '../../../reportTree/reportTreeTypes';
4
4
  export declare const mapExcludedAccountReconToReportTreeNodes: (report: ExpenseAutomationReconciliationViewSelector, config: ReportElementConfig, makeTimeframeRowSticky?: boolean) => RootNodes | undefined;
5
+ export declare const mapExcludedAccountReconToReportTreeNodesV2: (report: ExpenseAutomationReconciliationViewSelector, config: ReportElementConfig, makeTimeframeRowSticky?: boolean) => RootNodes | undefined;
5
6
  export declare function calculateTreeHeight(rootNodes: RootNodes, nodeOpenStatus?: Record<string, boolean>): number;
7
+ export declare function calculateTreeHeightV2(rootNodes: RootNodes, nodeOpenStatus?: Record<string, boolean>): number;
@@ -73,6 +73,7 @@ export interface ReportElementConfig {
73
73
  isIncludeInProgress: boolean;
74
74
  liabilitiesCount: number;
75
75
  tableType: "excluded" | "normal";
76
+ isV2?: boolean;
76
77
  selectedDrawerAccountId?: ID;
77
78
  onConnectClicked: (accountId: ID) => void;
78
79
  onOpenDrawerClicked: (accountId: ID) => void;
@@ -32,6 +32,18 @@ export declare const getVarianceColors: (theme: Theme, variance?: Amount, reconc
32
32
  variancePercentageColor: Color<Colors.tagSuccessColorLight>;
33
33
  variancePercentageContainerColor: Color<Colors.tagSuccessBgLight>;
34
34
  };
35
+ export declare const ShowStatusForBankConnection: ({ accountRecon, isLoading, onReviewClicked, showReviewButton, }: {
36
+ accountRecon: AccountReconciliationByAccount;
37
+ isLoading: boolean;
38
+ showReviewButton?: boolean;
39
+ onReviewClicked?: () => void;
40
+ }) => import("react/jsx-runtime").JSX.Element | null;
41
+ export declare const ShowStatusForStatementConnection: ({ accountRecon, isLoading, onReviewClicked, showReviewButton, }: {
42
+ accountRecon: AccountReconciliationByAccount;
43
+ isLoading: boolean;
44
+ showReviewButton?: boolean;
45
+ onReviewClicked?: () => void;
46
+ }) => import("react/jsx-runtime").JSX.Element | null;
35
47
  interface ShowBankBalanceProps {
36
48
  accountId: ID;
37
49
  bankBalance: Amount | undefined;
@@ -0,0 +1,59 @@
1
+ import { Theme } from '@mui/material/styles';
2
+ import { default as Color } from 'color';
3
+ import { AccountReconciliationByAccount, AccountType, Amount, BankStatusCodeType, ID, ReconciliationStatusCodeType, StatementStatusCodeType, ZeniDate } from '@zeniai/client-epic-state';
4
+ import { Colors } from '../../../../../../designSystem/zeniConstants';
5
+ interface Props {
6
+ accountRecon: AccountReconciliationByAccount;
7
+ height: number;
8
+ isExcludeInProgress: boolean;
9
+ isIncludeInProgress: boolean;
10
+ isLastRow: boolean;
11
+ isSelectedRow: boolean;
12
+ shouldShowBottomRadius: boolean;
13
+ tableType: "excluded" | "normal";
14
+ index?: number;
15
+ onConnectClicked?: (accountId: ID) => void;
16
+ onExcludeClicked?: (accountId: ID) => void;
17
+ onIgnoreDetectionClicked?: (accountId: ID) => void;
18
+ onOpenDrawerClicked?: (accountId: ID) => void;
19
+ onReconnectClicked?: (accountId: ID) => void;
20
+ onReviewClicked?: (accountId: ID) => void;
21
+ onStatementAddClicked?: (accountId: ID) => void;
22
+ }
23
+ export default function AccountRow({ height, accountRecon, isLastRow, shouldShowBottomRadius, isSelectedRow, index, tableType, isExcludeInProgress, isIncludeInProgress, onReviewClicked: _onReviewClicked, onOpenDrawerClicked, onConnectClicked, onReconnectClicked, onStatementAddClicked, onExcludeClicked, onIgnoreDetectionClicked, }: Readonly<Props>): import("react/jsx-runtime").JSX.Element;
24
+ export declare const ShowVariance: ({ variance, variancePercentage, reconciliationStatusCode, isLoading, }: {
25
+ isLoading: boolean;
26
+ reconciliationStatusCode?: ReconciliationStatusCodeType;
27
+ variance?: Amount;
28
+ variancePercentage?: number;
29
+ }) => import("react/jsx-runtime").JSX.Element;
30
+ export declare const getVarianceColors: (theme: Theme, variance?: Amount, _reconciliationStatusCode?: ReconciliationStatusCodeType) => {
31
+ varianceColor: Color<string>;
32
+ variancePercentageColor: Color<Colors.tagSuccessColorLight>;
33
+ variancePercentageContainerColor: Color<Colors.tagSuccessBgLight>;
34
+ };
35
+ interface ShowBankBalanceProps {
36
+ accountId: ID;
37
+ bankBalance: Amount | undefined;
38
+ bankConnection: BankStatusCodeType;
39
+ isLoading: boolean;
40
+ sourceType: "bank" | "statement" | "none";
41
+ statementStatus: StatementStatusCodeType;
42
+ accountType?: AccountType;
43
+ /** Split layout: icon-only column vs closing-balance amount column vs legacy combined cell */
44
+ columnMode?: "full" | "icon" | "amount";
45
+ fromDrawer?: boolean;
46
+ lastUpdatedAt?: ZeniDate;
47
+ /** When `sourceType === "none"`, same MoreMenu as + icon; `connectLink` swaps the trigger for underlined Connect text. */
48
+ noneSourceTrigger?: "addIcon" | "connectLink";
49
+ setIsStatusHovered: (isStatusHovered: boolean) => void;
50
+ onConnectClicked?: () => void;
51
+ onReconnectClicked?: () => void;
52
+ onStatementAddClicked?: () => void;
53
+ }
54
+ export declare const ShowBankBalance: ({ bankBalance, accountType, bankConnection, sourceType, statementStatus, fromDrawer, onConnectClicked, onReconnectClicked, isLoading, accountId, onStatementAddClicked, setIsStatusHovered, columnMode, noneSourceTrigger, }: ShowBankBalanceProps) => import("react/jsx-runtime").JSX.Element;
55
+ export declare const ShowClearedBalance: ({ clearedBalance, isLoading, }: {
56
+ clearedBalance: Amount | undefined;
57
+ isLoading: boolean;
58
+ }) => import("react/jsx-runtime").JSX.Element;
59
+ export {};
@@ -0,0 +1,3 @@
1
+ export default function LoadingInProgressRow({ height }: {
2
+ height: number;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ interface Props {
2
+ height: number;
3
+ isOpen: boolean;
4
+ title: string;
5
+ treeNodeId: string;
6
+ tableType?: "excluded" | "normal";
7
+ onClick?: (treeNodeId: string) => void;
8
+ }
9
+ export default function SectionRow({ height, title, treeNodeId, isOpen, onClick, tableType, }: Readonly<Props>): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,7 @@
1
+ export interface Props {
2
+ height: number;
3
+ isSticky: boolean;
4
+ sectionTitle: string;
5
+ tableType: "excluded" | "normal";
6
+ }
7
+ export default function TimeframeRow({ sectionTitle, height, tableType, }: Readonly<Props>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { AccountReconciliationBySection, Amount } from '@zeniai/client-epic-state';
2
+ export interface Props {
3
+ height: number;
4
+ isOpen: boolean;
5
+ isSticky: boolean;
6
+ sectionData: AccountReconciliationBySection;
7
+ tableType: "excluded" | "normal";
8
+ treeNodeId?: string;
9
+ onClick?: (treeNodeId: string) => void;
10
+ }
11
+ export default function TotalRow({ height, isOpen, sectionData, tableType, treeNodeId, onClick, }: Readonly<Props>): import("react/jsx-runtime").JSX.Element;
12
+ export declare const VarianceElement: ({ variance, variancePercentage, }: {
13
+ variance?: Amount;
14
+ variancePercentage?: number;
15
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import { ReportElementKind } from '../../../../reportTreeTypes';
2
+ export declare const commonDimensions: {
3
+ timeframeHeight: number;
4
+ leftHeadingWidth: number;
5
+ leftHeadingPadding: number;
6
+ leftTimeframeWidth: number;
7
+ leftLabelWidth: number;
8
+ /** Narrow column for bank / statement source icons */
9
+ sourceIconColumnWidth: number;
10
+ bankBalanceWidth: number;
11
+ bankBalanceTimeframeWidth: number;
12
+ bankBalanceRightWidth: number;
13
+ bankBalanceRightTimeframeWidth: number;
14
+ clearedBalanceWidth: number;
15
+ clearedBalanceTimeframeWidth: number;
16
+ openingBalanceWidth: number;
17
+ closingBalanceWidth: number;
18
+ varianceWidth: number;
19
+ varianceTimeframeWidth: number;
20
+ varianceNumberWidth: number;
21
+ varianceNumberLoadingWidth: number;
22
+ variancePercentageWidth: number;
23
+ matchProgressWidth: number;
24
+ lastReconciledWidth: number;
25
+ statusWidth: number;
26
+ statusTimeframeWidth: number;
27
+ tickLeftMargin: number;
28
+ circleRadius: number;
29
+ spacerLineWidth: number;
30
+ /** Minimum width for the scrollable numeric/icon region */
31
+ dataColumnsWidth: number;
32
+ /** Icon, Match (AI Progress), Opening, Closing, Cleared, Variance, Last reconciled */
33
+ dataColumnsTemplate: string;
34
+ tableWidth: number;
35
+ wrapperPadding: number;
36
+ };
37
+ export declare function getDefaultNodeHeight(reportElementKind: ReportElementKind): number;
38
+ export declare function isNodeOpenByDefault(): boolean;
@@ -0,0 +1,6 @@
1
+ import { ReportElementData } from '../../../../reportTreeTypes';
2
+ export declare function getSectionRow(reportElementData: ReportElementData, treeNodeId: string, isOpen: boolean, onClick?: (treeNodeId: string) => void): import("react/jsx-runtime").JSX.Element;
3
+ export declare function getLoadingInProgressRow(): import("react/jsx-runtime").JSX.Element;
4
+ export declare function getHeaderRow(reportElementData: ReportElementData, isSticky: boolean): import("react/jsx-runtime").JSX.Element | null;
5
+ export declare const getTotalRow: (reportElementData: ReportElementData, treeNodeId: string, height: number, isSticky: boolean, isOpen: boolean, nodeClickHandler?: (treeNodeId: string) => void) => import("react/jsx-runtime").JSX.Element;
6
+ export declare const getAccountRow: (reportElementData: ReportElementData, height: number, isLastNode: boolean) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { AccountReconciliationByAccount, ReconciliationStatusCodeType } from '@zeniai/client-epic-state';
2
+ type StatusProps = {
3
+ accountRecon: AccountReconciliationByAccount;
4
+ isLoading: boolean;
5
+ };
6
+ /** V2 list row — Review lives in AccountReconDetailsDrawerPageV2, not the AI Progress column. */
7
+ export declare function ShowStatusForBankConnectionV2({ accountRecon, isLoading, }: Readonly<StatusProps>): import("react/jsx-runtime").JSX.Element;
8
+ export declare function ShowStatusForStatementConnectionV2({ accountRecon, isLoading, }: Readonly<StatusProps>): import("react/jsx-runtime").JSX.Element;
9
+ /** When true, AI Progress shows the Reconciled tag instead of the match progress bar. */
10
+ export declare function shouldShowReconciledTagInMatchProgress(reconciliationStatusCode?: ReconciliationStatusCodeType): boolean;
11
+ export declare function shouldShowMatchProgressBar(matchTotal: number, reconciliationStatusCode?: ReconciliationStatusCodeType): boolean;
12
+ export {};
@@ -0,0 +1,11 @@
1
+ import { AccountReconciliationByAccount, AccountReconciliationBySection, ID } from '@zeniai/client-epic-state';
2
+ import { ReportElementConfig, ReportTreeNode } from '../../../../reportTreeTypes';
3
+ export declare function mapSectionToTreeNode({ section, allAccountReconciliations, title, subTitle, isLastNode, isTitleRowRequired, config, }: {
4
+ allAccountReconciliations: Record<ID, AccountReconciliationByAccount>;
5
+ config: ReportElementConfig;
6
+ isLastNode: boolean;
7
+ isTitleRowRequired: boolean;
8
+ section: AccountReconciliationBySection;
9
+ subTitle: string;
10
+ title: string;
11
+ }): ReportTreeNode;
@@ -2,5 +2,5 @@ import { TreeWalkerValue } from 'react-vtree';
2
2
  import { ReportFormat, ReportIDPlusForecastID } from '@zeniai/client-epic-state';
3
3
  import { ReportElementKind, ReportTreeKind, ReportTreeNode, ReportTreeNodeData, ReportTreeNodeMetadata } from '../reportTreeTypes';
4
4
  export declare function getNodeData(node: ReportTreeNode, treeKind: ReportTreeKind, nestingLevel: number, isOpen: boolean | undefined): TreeWalkerValue<ReportTreeNodeData, ReportTreeNodeMetadata>;
5
- export declare function getDefaultNodeHeight(reportId: ReportIDPlusForecastID, reportElementKind: ReportElementKind, isFirstNode?: boolean): number;
5
+ export declare function getDefaultNodeHeight(reportId: ReportIDPlusForecastID, reportElementKind: ReportElementKind, isFirstNode?: boolean, isAccountReconV2?: boolean): number;
6
6
  export declare function isNodeOpenByDefault(reportId: ReportIDPlusForecastID, reportElementKind: ReportElementKind, nestingLevel: number, reportFormat: ReportFormat): boolean;
@@ -17,7 +17,7 @@ export declare const QuickViewModeContext: import('react').Context<boolean>;
17
17
  export declare const DropdownPortalContext: import('react').Context<HTMLElement | null>;
18
18
  export interface PanelInternalState {
19
19
  selectedItemId?: ID;
20
- closePanel: () => void;
20
+ closePanel?: () => void;
21
21
  maximize?: () => void;
22
22
  }
23
23
  export declare const PanelInternalContext: import('react').Context<PanelInternalState | null>;