import { Amount, CashbackDetailSelectorView, ChargeCardBulkActionView, ChargeCardListSelectorView, ChargeCardListUIState, ChargeCardRowActionView, ChargeCardViewSortKey, CreditLimitFrequency, DepositAccountListWithDebitCardIssued, ID, LoggedInUser, Person, SortOrder } from '@zeniai/client-epic-state'; import { ChargeCardPromoType } from './helpers/ChargeCardUtils'; import { ChargeCardTypeOption } from './helpers/IssueChargeCardUtils'; export interface ChargeCardListPageProps { admins: Person[]; bulkActionView: ChargeCardBulkActionView; cashbackRate: number; chargeCardCashbackDetailState: CashbackDetailSelectorView; chargeCardListView: ChargeCardListSelectorView; companyChargeCardInfoCreditAccountLimit: number; companyLegalName: string; controllerEmails: string[]; creditCardPayNowThreshold: number; creditLimit: Amount; depositAccountListWithDebitCardIssued: DepositAccountListWithDebitCardIssued; isCardControlsEnabled: boolean; isCardsCommentingEnabled: boolean; isCashbackFeatureEnabled: boolean; isChargeCardFeatureEnabled: boolean; isChargeCardPaymentHistoryFeatureEnabled: boolean; isChargeCardSetupEnabled: boolean; isCompanyInterestedInChargeCard: boolean; isCreditCardProductVisibleForExpressInterest: boolean; isDebitCardFeatureEnabled: boolean; isDebitCardSetupEnabled: boolean; isEarlyPayEnabled: boolean; rowActionView: ChargeCardRowActionView; searchText: string; showPayNowInfoTooltip: boolean; signedInUser: LoggedInUser; uiState: ChargeCardListUIState; /** * Optional Cards AI CFO hero element rendered above the credit / debit / * cashback row when the user has no cards yet and AI CFO access is enabled. * The hero is owned by the host screen, so this component stays presentational. */ cardsAiCfoHero?: React.ReactNode; /** * Optional shutdown banner rendered at the top of the page (below the NavBar) * for tenants whose cards product is being discontinued. Owned by the host screen. */ cardsShutdownBanner?: React.ReactNode; isAiCfoAccessEnabled?: boolean; /** When true, hides all card-issuance entry points (New button, promo cards). */ isCardsShuttingDown?: boolean; /** Company-level charge card product flag; defaults true for story hosts. */ isChargeCardEnabledOnCompany?: boolean; /** Company-level debit card product flag; defaults true for story hosts. */ isDebitCardEnabledOnCompany?: boolean; /** * When true, renders the fixed "INTRODUCING — Cards Policy" callout * anchored to the policy icon in the navbar. Visibility (feature gate, * role, "seen" persistence) is computed by the host screen; this * component is purely presentational. */ isPolicyIntroTooltipVisible?: boolean; /** * Number of AI-CFO-triggered card creations currently in flight. When > 0, * the page renders that many `ChargeCardListSkeletonRow`s at the top of * the table as placeholders for the cards being issued. The real cards * land in `chargeCardListView.cards` once the bulk POST succeeds (via the * existing `updateChargeCardList({keepExistingListItems: true})` epic * action) and the host clears this back to 0. */ pendingCreationCount?: number; /** Tenant-specific inbox; overrides the config API's receiptBotEmail. */ receiptsEmail?: string; navigateToCreditCardPaymentHistoryPage: () => void; navigateToCreditCardPaymentPage: (source: string, clickItem: string) => void; onBackClick: () => void; onChargeCardResendInviteClick: (id: ID) => void; onChargeCardRevokeInviteClick: (id: ID) => void; onChargeCardRowClick: (id: ID, index: number) => void; onClickSetupIcon: () => void; onClickStatementsIcon: () => void; onCloseChargeCard: (cardId: ID, reason?: string) => void; onCloseChargeCardList: (cardIds: ID[], reason?: string) => void; onColumnSortConfigChanged: (sortKey: ChargeCardViewSortKey, sortOrder: SortOrder) => void; onCreateNowClick: (cardType: ChargeCardTypeOption) => void; onFetchChargeCardsRecurringExpenses: (cardIds: ID[]) => void; onFetchDepositAccountLimit: (connectedAccountId: ID, cardId: ID) => void; onIssueCardClick: () => void; onLockChargeCard: (cardId: ID, reason?: string) => void; onLockChargeCardList: (cardIds: ID[], reason?: string) => void; onPromoCardClick: (cardType: ChargeCardPromoType) => void; onReloadCards: () => void; onRevokeChargeCardList: (cardIds: ID[]) => void; onSearchTextChanged: (searchText: string) => void; onSetBulkActionCardIds: (cardIds: ID[]) => void; onSetRowActionCardId: (cardId: ID | undefined) => void; onTotalCashbackClick: () => void; onUnlockChargeCard: (id: ID) => void; onUnlockChargeCardList: (cardIds: ID[]) => void; onUpdateSpendLimit: (cardId: ID, spendLimit: Amount, frequency: CreditLimitFrequency, formattedAmount: string) => void; shouldShowPayNowInfoTooltip: (show: boolean) => void; updateChargeCardListSpendLimit: (cardIds: ID[], spendLimit: Amount, frequency: CreditLimitFrequency) => void; updateChargeCardName: (cardId: ID, name: string) => void; onAskAiCfoClick?: () => void; onClickMenuIcon?: () => void; /** * Invoked when the admin clicks the toolbar "Card policy" icon between the * search and more icons. Host wires this to navigate to the card policy * page; presentation owns no admin/role checks beyond what the host gates. */ onClickPolicyIcon?: () => void; /** * Invoked when the user dismisses the policy intro callout (via the X * button or by clicking its CTA). Hosts persist a per-tenant "seen" flag * so the callout does not re-appear on subsequent visits. */ onPolicyIntroTooltipClose?: () => void; } declare const ChargeCardListPage: ({ chargeCardListView, searchText, admins, companyLegalName, onFetchChargeCardsRecurringExpenses, onFetchDepositAccountLimit, onCloseChargeCard, onCloseChargeCardList, onLockChargeCard, onLockChargeCardList, onUnlockChargeCardList, updateChargeCardListSpendLimit, onUpdateSpendLimit, isCardControlsEnabled, isCardsCommentingEnabled, isCashbackFeatureEnabled, creditCardPayNowThreshold, isChargeCardFeatureEnabled, isCompanyInterestedInChargeCard, isCreditCardProductVisibleForExpressInterest, isDebitCardFeatureEnabled, isDebitCardSetupEnabled, isChargeCardSetupEnabled, isChargeCardEnabledOnCompany, isDebitCardEnabledOnCompany, companyChargeCardInfoCreditAccountLimit, controllerEmails, onRevokeChargeCardList, depositAccountListWithDebitCardIssued, chargeCardCashbackDetailState, uiState, signedInUser, creditLimit, cashbackRate, onSearchTextChanged, navigateToCreditCardPaymentHistoryPage, onClickSetupIcon, isChargeCardPaymentHistoryFeatureEnabled, isEarlyPayEnabled, onClickStatementsIcon, onChargeCardRowClick, updateChargeCardName, onChargeCardResendInviteClick, onChargeCardRevokeInviteClick, onUnlockChargeCard, onIssueCardClick, onBackClick, onReloadCards, onTotalCashbackClick, onColumnSortConfigChanged, onClickMenuIcon, onPromoCardClick, onCreateNowClick, showPayNowInfoTooltip, navigateToCreditCardPaymentPage, shouldShowPayNowInfoTooltip, rowActionView, bulkActionView, onSetRowActionCardId, onSetBulkActionCardIds, isAiCfoAccessEnabled, onAskAiCfoClick, cardsAiCfoHero, cardsShutdownBanner, isCardsShuttingDown, onClickPolicyIcon, isPolicyIntroTooltipVisible, onPolicyIntroTooltipClose, pendingCreationCount, receiptsEmail, }: ChargeCardListPageProps) => import("react/jsx-runtime").JSX.Element; export default ChargeCardListPage; export declare const getPromoSlidingTextList: (cardType: ChargeCardPromoType, cashbackRate: number, creditLimit?: Amount) => string[];