@mx-cartographer/experiences 9.7.100 → 9.7.102

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 (24) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/core/types/Insights.d.ts +9 -0
  3. package/dist/core/types/Insights.es.js.map +1 -1
  4. package/dist/core/types/InsightsInstanceSlotData.d.ts +8 -3
  5. package/dist/core/types/InsightsInstanceSlotData.es.js.map +1 -1
  6. package/dist/core/types/localization/InsightsFeedCopy.d.ts +5 -0
  7. package/dist/insights-v2/blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.d.ts +8 -1
  8. package/dist/insights-v2/blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.es.js +20 -13
  9. package/dist/insights-v2/blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.es.js.map +1 -1
  10. package/dist/insights-v2/blocks/ChartBlocks/DonutChartBlock/utils.d.ts +1 -1
  11. package/dist/insights-v2/blocks/ChartBlocks/DonutChartBlock/utils.es.js +3 -3
  12. package/dist/insights-v2/blocks/ChartBlocks/DonutChartBlock/utils.es.js.map +1 -1
  13. package/dist/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/GasGraphic.d.ts +5 -0
  14. package/dist/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/GasGraphic.es.js +94 -0
  15. package/dist/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/GasGraphic.es.js.map +1 -0
  16. package/dist/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/GasPurchaseBlock.d.ts +3 -0
  17. package/dist/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/GasPurchaseBlock.es.js +67 -0
  18. package/dist/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/GasPurchaseBlock.es.js.map +1 -0
  19. package/dist/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/index.d.ts +1 -0
  20. package/dist/insights-v2/blocks/ComponentBlocks/index.d.ts +1 -0
  21. package/dist/insights-v2/index.es.js +100 -98
  22. package/dist/insights-v2/mappings/blocks.es.js +82 -80
  23. package/dist/insights-v2/mappings/blocks.es.js.map +1 -1
  24. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## [9.7.102] - 11-04-2026
2
+
3
+ - **ADDED** - `gas_purchase_block` for the Green Gas Purchases Summary beat on Insights 2.0 (MEW2-3411): a gas pump graphic, a fill-ups pill and the amount spent on gas
4
+
5
+ ## [9.7.101] - 11-04-2026
6
+
7
+ - **CHANGED** - Monthly Non-Essential Category Summary's donut card renders through `BaseLayout` on Insights 2.0 (WEC-2213)
8
+ - **CHANGED** - The Cost of Living to Income card now renders on Insights 2.0 (WEC-2212)
9
+
1
10
  ## [9.7.100] - 11-04-2026
2
11
 
3
12
  - **ADDED** - Weekend Spending Summary's drawers on Insights 2.0: the Transaction List drawer's `help_header` variant and a `help_block` for "Learn More" (WEC-2211)
@@ -265,6 +265,7 @@ export declare const BlockType: {
265
265
  readonly DoubleBarChartBlock: "double_bar_chart_block";
266
266
  readonly DoubleProgressBarBlock: "double_progress_bar_block";
267
267
  readonly DebtsBlock: "debts_block";
268
+ readonly GasPurchaseBlock: "gas_purchase_block";
268
269
  readonly GoalsBlock: "goals_block";
269
270
  readonly NoSpendDaysBlock: "no_spend_days_block";
270
271
  readonly RepeatingTransactionBlock: "repeating_transaction_block";
@@ -364,4 +365,12 @@ export interface InstanceSlot {
364
365
  interest_rate?: number;
365
366
  start_date?: string;
366
367
  no_spend_days?: string[];
368
+ /** First day of the month a monthly summary covers, in ISO form (e.g. `2026-09-01`). */
369
+ date?: string;
370
+ /** Number of gas station visits in the month. */
371
+ total_fill_up_visits?: number;
372
+ /** Amount spent at gas stations in the month, unformatted. */
373
+ total_spend?: number;
374
+ /** V1 name for `total_spend`, read when `total_spend` is absent. */
375
+ total_debt_for_fill_up_visits_in_prev_month?: number;
367
376
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Insights.es.js","names":[],"sources":["../../../src/core/types/Insights.ts"],"sourcesContent":["// ============ Core InsightsV2 Types ============\n\nimport { InsightsInstanceSlotData } from './InsightsInstanceSlotData'\n\nexport interface ThemedSVGImageProps {\n divProps?: React.HTMLAttributes<HTMLDivElement>\n image: React.ComponentType<React.SVGProps<SVGSVGElement>>\n isMini?: boolean\n}\n\n/**\n * Emitted by a block when the user drills into a specific datum (e.g. clicks a\n * chart bar). Named fields rather than positional args so blocks with differing\n * shapes can extend this without the call sites transposing values.\n */\nexport interface DrilldownPayload {\n chartBarIndex: number\n tabIndex?: number\n transaction_guid?: string\n block?: string\n}\n\n/**\n * Which envelope a beat was fetched with. `embedded` (the transaction-row pill + details-drawer\n * card) and `notification` are V2 additions; a surface asks for one with `widget_type=` on the fetch.\n */\nexport type WidgetType = 'full' | 'mini' | 'micro' | 'embedded' | 'notification'\n\n/**\n * V2: the transaction-row tag, its own small section of the `embedded` envelope (the same grammar\n * as `description` / `footer`, with room for a tone or an icon later). Omitted for an insight that\n * tags no transaction row. It deliberately is *not* `short_title`, which stays a per-variant\n * attribute with a second consumer (the bank-holiday sub-header).\n */\nexport interface Pill {\n text: string\n}\n\n/**\n * V2: facts a drilldown shows that the card does not. On the payload: what every CTA of the card\n * shares (e.g. the account number for the Transaction Details drawer, or the guid list a list drawer\n * shows, `transaction_guids`). On a CTA: the figures that CTA's own drilldown renders (the Transaction\n * List summary header's `amount`, `start_date` / `end_date` and `count`, see `readSummary`). Scalars\n * or string lists, omitted when the insight has none. Never carries copy or user actions (memo,\n * tags, hide, flag come from the transaction store). Values come from the server, so a reader still\n * checks each value's runtime shape.\n */\nexport type DrilldownData = Record<string, string | number | boolean | null | string[]>\n\nexport interface InsightsPayload {\n widget_type: WidgetType\n instance_slot: InstanceSlot\n /**\n * V1 only. The v2 contract carries everything a block needs on `instance_slot.data`,\n * and omits this key entirely (see the LargeTransactionV2 payload). Blocks that still require it\n * get it as a required field through `BlockProps`, which re-declares it.\n */\n instance_slot_data?: InsightsInstanceSlotData\n description: Description\n primary_cta?: PrimaryCTA\n secondary_cta?: SecondaryCTA\n title?: string\n sub_title?: Subtitle\n /**\n * V2 rename of `sub_title`: a flat string, with the logo promoted to the payload-level `logo`\n * field below. `sub_title` wins when both are present.\n */\n subtitle?: string\n /** V2: header logo paired with the flat `subtitle`: an entity guid or a status icon (`LogoRef`). */\n logo?: LogoRef\n /** V2: which design branch the backend picked (e.g. `no_merchant`). */\n variant?: string\n /** V2, `embedded` envelope only: the transaction-row pill. */\n pill?: Pill\n /**\n * V2: drilldown-only facts, e.g. `{ account_number: 'XXXXXXXX043' }`, or the guid list a list\n * drawer shows (`{ transaction_guids: [...] }`).\n */\n drilldown_data?: DrilldownData\n footer?: Footer\n /**\n * V2: the link inside the description: on the full card a drawer of its own (Low Account\n * Balance's \"Transactions ›\"); on mini and micro the card's action, sent instead of `primary_cta`.\n * Absent when the beat has no link.\n */\n in_description_cta?: InDescriptionCTA\n guid: string\n user_guid: string\n client_guid?: string\n /** Template name, e.g. `LargeTransactionV2`. */\n template?: string\n revision?: number\n /** Unix seconds. */\n created_at?: number\n /** Unix seconds. */\n updated_at?: number\n /** Unix seconds. */\n active_at?: number\n displayed_at?: number | null\n dismissed_at: number | null\n cta_clicked_at?: number | null\n has_been_displayed?: boolean\n is_dismissed: boolean\n is_deleted?: boolean\n is_hidden_by_system?: boolean\n is_obsolete?: boolean\n is_refreshable?: boolean\n is_sampled?: boolean\n is_zero_state?: boolean\n status?: string | null\n /**\n * V2 (LargeTransactionV2 onward): the entities the beat is about, carried on the payload so\n * action blocks do not have to reach back out to the beat envelope.\n */\n primary_account_guid?: string | null\n primary_transaction_guid?: string | null\n primary_category_guid?: string | null\n primary_merchant_guid?: string | null\n /**\n * V2: the repeating transaction a subscription beat is about (Upcoming Subscription, Subscription\n * Price Increase). Read by `recurring_transaction_block`, see\n * `actionBlocks/RecurringTransactionBlock/subscriptionBeats.ts`.\n */\n primary_repeating_transaction_guid?: string | null\n}\n\nexport interface Legends {\n label: string\n value: number\n additional_value?: number\n additional_value_type?: string\n value_type?: string\n}\n\nexport interface Logo {\n category_guid?: string\n category_name?: string\n institution_guid?: string\n institution_name?: string\n logo_color?: string\n /** Draw the `logo_name` icon filled (V2 `ICO-` logos). */\n logo_fill?: boolean\n logo_name?: string\n merchant_guid?: string\n merchant_name?: string\n}\n\nexport interface Subtitle {\n logo?: Logo\n text: string\n}\n\n/**\n * A V2 logo, shared by the header (`InsightsPayload.logo`) and every instance-slot row. It takes\n * one of two shapes:\n *\n * - **Entity**: `guid`, whose prefix (`INS-` / `MCH-` / `CAT-`) picks the logo component, plus an\n * optional `fallback_guid` for when that component's asset cannot load. Today that is the\n * category behind an `MCH-` guid, which `MerchantLogo` shows as a tile when the merchant image\n * is missing.\n * - **Status icon**: `icon` (an mx-icons name, e.g. `warning`) and `color` (a theme palette path,\n * e.g. `error.main`), for subheaders that show a state rather than an entity (V1's\n * `logo_name` / `logo_color`).\n *\n * `alt` is the accessible name for either shape. A logo sends one shape; if it sends both, `icon`\n * wins, as `logo_name` does in V1's `SubHeader`.\n */\nexport interface LogoRef {\n alt?: string\n color?: string\n fallback_guid?: string\n guid?: string\n icon?: string\n}\n\nexport interface CategoryLogo {\n category_guid: string\n category_name: string\n}\n\nexport interface MerchantLogo {\n merchant_guid: string\n merchant_name: string\n}\n\nexport interface InstitutionLogo {\n institution_guid: string\n institution_name: string\n}\n\nexport interface Description {\n text: string\n html_text: string\n}\n\n/**\n * Post message a CTA press sends to the host, resolved by the backend for the beat's current\n * state. Absent/null = the backend has not described one: the frontend uses the template's\n * interim `ctaPostMessages` entry if there is one, else sends no message. `payload` carries only\n * beat-specific extras; the frontend always adds `beat_guid`, `beat_template`, `user_guid` and\n * `action_string`.\n */\nexport interface CtaPostMessageMetadata {\n /** Post message event; defaults to `beat/cta`. */\n event?: string | null\n /** Operation the host should perform, e.g. `op_1`, `op_2`, `op_3`. Defaults to `op_1`. */\n action?: string | null\n /** Beat-specific fields merged into the message metadata (account ids, amounts, ...). */\n payload?: Record<string, unknown> | null\n}\n\nexport interface PrimaryCTA {\n label: string\n block: string\n variant?: string | null\n /**\n * What pressing the CTA does beyond opening its block, named by the backend (ditto\n * `primary_cta_action`, passed through by tupac). Looked up in `insights-v2/ctaActions`;\n * null / absent / unknown means the CTA only opens its block or posts its message.\n */\n action_key?: string | null\n metadata?: CtaPostMessageMetadata | null\n /** Figures this CTA's drilldown renders (e.g. a summary header's amount/dates/count). */\n drilldown_data?: DrilldownData\n}\n\nexport interface SecondaryCTA {\n label: string\n /**\n * Drawer block to open. `null` when the CTA opens nothing (ditto `secondary_cta_block: null`,\n * e.g. Fee Detected's \"Contact Support\"): the press posts its message to the host instead.\n */\n block: string | null\n variant?: string | null\n /** See `PrimaryCTA.action_key` (ditto `secondary_cta_action`). */\n action_key?: string | null\n metadata?: CtaPostMessageMetadata | null\n /** Figures this CTA's drilldown renders (e.g. a summary header's amount/dates/count). */\n drilldown_data?: DrilldownData\n}\n\n/**\n * The description link: its label, the action block it opens and, like a CTA's, the variant that\n * tells that block what to show (ditto's `in_description_cta_variant`, e.g. `low_balance`). On mini\n * and micro it words the card's action; `block` is empty when that action opens no drawer.\n */\nexport interface InDescriptionCTA {\n label: string\n block?: string\n variant?: string | null\n action_key?: string | null\n /** tupac's flat host message for the link (`action` plus fields), e.g. Switch's op_1. */\n post_message_metadata?: ({ action?: string | null } & Record<string, unknown>) | null\n /** Figures this CTA's drilldown renders (e.g. a summary header's amount/dates/count). */\n drilldown_data?: DrilldownData\n}\n\nexport interface Footer {\n /** V1: a pre-formatted date string. */\n date?: string\n /**\n * The account label, on both V1 and V2. The backend resolves the plurality: one account sends\n * its name (e.g. `Epic Bank`), several send a localized count (e.g. `2 Accounts`), none sends\n * `null` (tupac's `footer_account_label` returns nil for a beat with no accounts, as Payday Cash\n * Left Over Status does). There is deliberately no separate `accounts` key.\n */\n account?: string | null\n /**\n * V2 (LargeTransactionV2 onward): unix seconds, formatted by `Footer` for display.\n * Replaces `date`; `date` wins when a beat somehow sends both.\n */\n timestamp?: number\n}\n\n// ============ Instance Slot Types ============\n// Values are the snake_case block names the backend sends on a beat's instance slot; the PascalCase\n// keys stay as friendly references (e.g. BlockType.BarChartBlock === 'bar_chart_block').\nexport const BlockType = {\n AccountBlock: 'account_block',\n AccountSwitchBlock: 'account_switch_block',\n BarChartBlock: 'bar_chart_block',\n BudgetBlock: 'budget_block',\n DirectDepositBlock: 'direct_deposit_block',\n ImageBlock: 'image_block',\n MerchantBlock: 'merchant_block',\n TransactionBlock: 'transaction_block',\n DonutChartBlock: 'donut_chart_block',\n DoubleBarChartBlock: 'double_bar_chart_block',\n DoubleProgressBarBlock: 'double_progress_bar_block',\n DebtsBlock: 'debts_block',\n GoalsBlock: 'goals_block',\n NoSpendDaysBlock: 'no_spend_days_block',\n RepeatingTransactionBlock: 'repeating_transaction_block',\n SaveExtraBlock: 'save_extra_block',\n SavingsAmountBlock: 'savings_amount_block',\n StepChartBlock: 'step_chart_block',\n SVGImageBlock: 'svg_image_block',\n UpcomingBillBlock: 'upcoming_bill_block',\n UpcomingSubscriptionBlock: 'upcoming_subscription_block',\n WithdrawalBlock: 'withdrawal_block',\n} as const\n\nexport type BlockType = (typeof BlockType)[keyof typeof BlockType]\n\n/**\n * A pre-localized row on a V2 instance slot. The backend resolves the copy and formatting; the\n * logo is a `LogoRef` (an entity guid or a status icon, see `logoFromRef`).\n */\nexport interface InstanceSlotRow {\n amount?: number\n logo?: LogoRef\n primary_text?: string\n secondary_text?: string\n}\n\n/**\n * V2: the slots a block's variant filled, keyed by slot name; ditto owns the names and omits any\n * slot it has no value for (`lib/ditto/blocks/<block>.yml`). Read with `slot()`, which names the\n * kind the caller expects.\n */\nexport interface InstanceSlotData {\n [slot: string]: unknown\n}\n\n/**\n * Reads one slot off a block's `data`; undefined when ditto did not fill it.\n *\n * The caller names the kind, because the slot's kind lives in the block's ditto schema and not\n * here — a block fills slots with whatever its card needs, so no fixed list of kinds would hold\n * (`account_switch_block` alone carries a boolean and `budget_block` a nested object).\n */\nexport const slot = <T = unknown>(\n data: InstanceSlotData | undefined,\n name: string,\n): T | undefined => data?.[name] as T | undefined\n\n/**\n * V2: which block renders this beat's content, and what it renders.\n *\n * `block` is optional: a beat whose template has no ditto config arrives as an empty `{}` and the\n * card renders its copy and CTAs alone, so a reader cannot assume a block is named. One interface\n * with `block` optional rather than a union with `Record<string, never>`, which TypeScript absorbs\n * — that union left `block` reading as required and typed a promise it did not keep.\n *\n * `variant` is optional for the same reason — the empty `{}` carries neither. Every ditto beat\n * file that names a block also names a variant, so a *filled* slot always has one; ditto drops a\n * nil variant rather than sending null, which is why the type is `string | null | undefined`.\n */\nexport interface InstanceSlot {\n block?: BlockType\n variant?: string | null\n /** The slots this block's variant declares in ditto. */\n data?: InstanceSlotData\n // Direct Deposit block (Set Up Direct Deposit, Switch Direct Deposit, Missing\n // Interest Rate): account facts carried flat on the slot, beside `data`.\n /** Primary line on the hero card, e.g. \"Epic Bank Checking, *1234\". */\n account_name?: string\n /** Secondary line beneath the name, e.g. \"Checking Account\" / \"Credit Card\". */\n account_type?: string\n /** Status pill label, e.g. \"Direct Deposit Not Set Up\" / \"Interest Rate: 19.99% APR\". */\n status_text?: string\n institution_guid?: string\n institution_name?: string\n // Shared across multiple V2 component blocks:\n // `amount` — UpcomingBillBlock (projected bill), UpcomingSubscriptionBlock (price per cadence).\n // (SavingsOpportunityBlock now reads `amount` off `instance_slot.data`, not this flat field.)\n // `merchant_guid` / `merchant_name` — UpcomingBillBlock (bill row logo + name),\n // UpcomingSubscriptionBlock (hero logo + name).\n /** Dollar amount (unformatted); the block formats it as currency. */\n amount?: number\n // Withdrawal block (Emergency Fund Withdrawal): one row flat on the slot - `amount` above is the\n // withdrawal, shown with its date line \"{amount_label} {withdrawal_date}\" over the balance row.\n /** Pre-localized lead-in for the date line, e.g. \"Withdrawn on\". */\n amount_label?: string\n /** The withdrawal's calendar day, `YYYY-MM-DD` (e.g. `2026-10-20`); the card formats it. */\n withdrawal_date?: string\n /** Account balance after the withdrawal (unformatted); the card formats it as currency. */\n balance?: number\n /** Pre-localized label for the balance row, e.g. \"Balance\". */\n balance_label?: string\n /** Merchant guid used to render the inline / hero logo via `LogoFromGuid` (`MCH-...`). */\n merchant_guid?: string\n /** Merchant display name — shown as logo alt text and as the merchant/hero label. */\n merchant_name?: string\n // Upcoming Bill block (Projected Bill Payment): the block derives the Sun→Sat week strip\n // around `due_date` at render time.\n /** Due date of the projected bill in ISO form (e.g. `2025-10-30`). */\n due_date?: string\n // Account block (confetti tile): V1 flat fallback for the label line when `instance_slot.data` is\n // absent — `AccountBlock` reads `data.sub_text` first, then this. (The Savings Opportunity coupon\n // now reads `primary_text`/`amount` off `data`, so it no longer reads this flat field.)\n /** Caption/label line for the confetti tile (V1 fallback). */\n label?: string\n // Upcoming Subscription block: billing cadence for the price pill (`${amount} / ${cadence}`).\n /** Billing cadence word that trails the price, e.g. `month` or `year`. */\n cadence?: string\n // Account block (status on/off-track, deposit, payoff variants): card content carried flat on\n // the slot (the V2 contract drops `instance_slot_data`). `amount`, `label`, `merchant_guid`,\n // `merchant_name`, `institution_guid`, `institution_name` are shared fields declared above.\n /** Secondary line beneath the amount on the standard card, e.g. \"Remaining after expenses\". */\n sub_text?: string\n /** Header bar text (standard card) or the colored category strip label (deposit cards). */\n header_text?: string\n /** Generic-tile icon name used when no merchant/institution logo is available. */\n icon_name?: string\n /** Category guid used to render the deposit-card logo fallback. */\n category_guid?: string\n // Debts block: `amount` is the current balance; the shared account/institution fields above.\n /** Projected payoff date in ISO form (e.g. `2027-03-01`); the block formats it as month + year. */\n payoff_date?: string\n /** Monthly payment toward the debt (unformatted); the block formats it as currency. */\n monthly_payment?: number\n /** Annual interest rate as a percentage (e.g. `19.99`); the block formats it as a percent. */\n interest_rate?: number\n start_date?: string\n no_spend_days?: string[]\n}\n"],"mappings":"AA2UA,IAAa,IAAA,CACX,GACA,MACkB,IAAO,CAAA"}
1
+ {"version":3,"file":"Insights.es.js","names":[],"sources":["../../../src/core/types/Insights.ts"],"sourcesContent":["// ============ Core InsightsV2 Types ============\n\nimport { InsightsInstanceSlotData } from './InsightsInstanceSlotData'\n\nexport interface ThemedSVGImageProps {\n divProps?: React.HTMLAttributes<HTMLDivElement>\n image: React.ComponentType<React.SVGProps<SVGSVGElement>>\n isMini?: boolean\n}\n\n/**\n * Emitted by a block when the user drills into a specific datum (e.g. clicks a\n * chart bar). Named fields rather than positional args so blocks with differing\n * shapes can extend this without the call sites transposing values.\n */\nexport interface DrilldownPayload {\n chartBarIndex: number\n tabIndex?: number\n transaction_guid?: string\n block?: string\n}\n\n/**\n * Which envelope a beat was fetched with. `embedded` (the transaction-row pill + details-drawer\n * card) and `notification` are V2 additions; a surface asks for one with `widget_type=` on the fetch.\n */\nexport type WidgetType = 'full' | 'mini' | 'micro' | 'embedded' | 'notification'\n\n/**\n * V2: the transaction-row tag, its own small section of the `embedded` envelope (the same grammar\n * as `description` / `footer`, with room for a tone or an icon later). Omitted for an insight that\n * tags no transaction row. It deliberately is *not* `short_title`, which stays a per-variant\n * attribute with a second consumer (the bank-holiday sub-header).\n */\nexport interface Pill {\n text: string\n}\n\n/**\n * V2: facts a drilldown shows that the card does not. On the payload: what every CTA of the card\n * shares (e.g. the account number for the Transaction Details drawer, or the guid list a list drawer\n * shows, `transaction_guids`). On a CTA: the figures that CTA's own drilldown renders (the Transaction\n * List summary header's `amount`, `start_date` / `end_date` and `count`, see `readSummary`). Scalars\n * or string lists, omitted when the insight has none. Never carries copy or user actions (memo,\n * tags, hide, flag come from the transaction store). Values come from the server, so a reader still\n * checks each value's runtime shape.\n */\nexport type DrilldownData = Record<string, string | number | boolean | null | string[]>\n\nexport interface InsightsPayload {\n widget_type: WidgetType\n instance_slot: InstanceSlot\n /**\n * V1 only. The v2 contract carries everything a block needs on `instance_slot.data`,\n * and omits this key entirely (see the LargeTransactionV2 payload). Blocks that still require it\n * get it as a required field through `BlockProps`, which re-declares it.\n */\n instance_slot_data?: InsightsInstanceSlotData\n description: Description\n primary_cta?: PrimaryCTA\n secondary_cta?: SecondaryCTA\n title?: string\n sub_title?: Subtitle\n /**\n * V2 rename of `sub_title`: a flat string, with the logo promoted to the payload-level `logo`\n * field below. `sub_title` wins when both are present.\n */\n subtitle?: string\n /** V2: header logo paired with the flat `subtitle`: an entity guid or a status icon (`LogoRef`). */\n logo?: LogoRef\n /** V2: which design branch the backend picked (e.g. `no_merchant`). */\n variant?: string\n /** V2, `embedded` envelope only: the transaction-row pill. */\n pill?: Pill\n /**\n * V2: drilldown-only facts, e.g. `{ account_number: 'XXXXXXXX043' }`, or the guid list a list\n * drawer shows (`{ transaction_guids: [...] }`).\n */\n drilldown_data?: DrilldownData\n footer?: Footer\n /**\n * V2: the link inside the description: on the full card a drawer of its own (Low Account\n * Balance's \"Transactions ›\"); on mini and micro the card's action, sent instead of `primary_cta`.\n * Absent when the beat has no link.\n */\n in_description_cta?: InDescriptionCTA\n guid: string\n user_guid: string\n client_guid?: string\n /** Template name, e.g. `LargeTransactionV2`. */\n template?: string\n revision?: number\n /** Unix seconds. */\n created_at?: number\n /** Unix seconds. */\n updated_at?: number\n /** Unix seconds. */\n active_at?: number\n displayed_at?: number | null\n dismissed_at: number | null\n cta_clicked_at?: number | null\n has_been_displayed?: boolean\n is_dismissed: boolean\n is_deleted?: boolean\n is_hidden_by_system?: boolean\n is_obsolete?: boolean\n is_refreshable?: boolean\n is_sampled?: boolean\n is_zero_state?: boolean\n status?: string | null\n /**\n * V2 (LargeTransactionV2 onward): the entities the beat is about, carried on the payload so\n * action blocks do not have to reach back out to the beat envelope.\n */\n primary_account_guid?: string | null\n primary_transaction_guid?: string | null\n primary_category_guid?: string | null\n primary_merchant_guid?: string | null\n /**\n * V2: the repeating transaction a subscription beat is about (Upcoming Subscription, Subscription\n * Price Increase). Read by `recurring_transaction_block`, see\n * `actionBlocks/RecurringTransactionBlock/subscriptionBeats.ts`.\n */\n primary_repeating_transaction_guid?: string | null\n}\n\nexport interface Legends {\n label: string\n value: number\n additional_value?: number\n additional_value_type?: string\n value_type?: string\n}\n\nexport interface Logo {\n category_guid?: string\n category_name?: string\n institution_guid?: string\n institution_name?: string\n logo_color?: string\n /** Draw the `logo_name` icon filled (V2 `ICO-` logos). */\n logo_fill?: boolean\n logo_name?: string\n merchant_guid?: string\n merchant_name?: string\n}\n\nexport interface Subtitle {\n logo?: Logo\n text: string\n}\n\n/**\n * A V2 logo, shared by the header (`InsightsPayload.logo`) and every instance-slot row. It takes\n * one of two shapes:\n *\n * - **Entity**: `guid`, whose prefix (`INS-` / `MCH-` / `CAT-`) picks the logo component, plus an\n * optional `fallback_guid` for when that component's asset cannot load. Today that is the\n * category behind an `MCH-` guid, which `MerchantLogo` shows as a tile when the merchant image\n * is missing.\n * - **Status icon**: `icon` (an mx-icons name, e.g. `warning`) and `color` (a theme palette path,\n * e.g. `error.main`), for subheaders that show a state rather than an entity (V1's\n * `logo_name` / `logo_color`).\n *\n * `alt` is the accessible name for either shape. A logo sends one shape; if it sends both, `icon`\n * wins, as `logo_name` does in V1's `SubHeader`.\n */\nexport interface LogoRef {\n alt?: string\n color?: string\n fallback_guid?: string\n guid?: string\n icon?: string\n}\n\nexport interface CategoryLogo {\n category_guid: string\n category_name: string\n}\n\nexport interface MerchantLogo {\n merchant_guid: string\n merchant_name: string\n}\n\nexport interface InstitutionLogo {\n institution_guid: string\n institution_name: string\n}\n\nexport interface Description {\n text: string\n html_text: string\n}\n\n/**\n * Post message a CTA press sends to the host, resolved by the backend for the beat's current\n * state. Absent/null = the backend has not described one: the frontend uses the template's\n * interim `ctaPostMessages` entry if there is one, else sends no message. `payload` carries only\n * beat-specific extras; the frontend always adds `beat_guid`, `beat_template`, `user_guid` and\n * `action_string`.\n */\nexport interface CtaPostMessageMetadata {\n /** Post message event; defaults to `beat/cta`. */\n event?: string | null\n /** Operation the host should perform, e.g. `op_1`, `op_2`, `op_3`. Defaults to `op_1`. */\n action?: string | null\n /** Beat-specific fields merged into the message metadata (account ids, amounts, ...). */\n payload?: Record<string, unknown> | null\n}\n\nexport interface PrimaryCTA {\n label: string\n block: string\n variant?: string | null\n /**\n * What pressing the CTA does beyond opening its block, named by the backend (ditto\n * `primary_cta_action`, passed through by tupac). Looked up in `insights-v2/ctaActions`;\n * null / absent / unknown means the CTA only opens its block or posts its message.\n */\n action_key?: string | null\n metadata?: CtaPostMessageMetadata | null\n /** Figures this CTA's drilldown renders (e.g. a summary header's amount/dates/count). */\n drilldown_data?: DrilldownData\n}\n\nexport interface SecondaryCTA {\n label: string\n /**\n * Drawer block to open. `null` when the CTA opens nothing (ditto `secondary_cta_block: null`,\n * e.g. Fee Detected's \"Contact Support\"): the press posts its message to the host instead.\n */\n block: string | null\n variant?: string | null\n /** See `PrimaryCTA.action_key` (ditto `secondary_cta_action`). */\n action_key?: string | null\n metadata?: CtaPostMessageMetadata | null\n /** Figures this CTA's drilldown renders (e.g. a summary header's amount/dates/count). */\n drilldown_data?: DrilldownData\n}\n\n/**\n * The description link: its label, the action block it opens and, like a CTA's, the variant that\n * tells that block what to show (ditto's `in_description_cta_variant`, e.g. `low_balance`). On mini\n * and micro it words the card's action; `block` is empty when that action opens no drawer.\n */\nexport interface InDescriptionCTA {\n label: string\n block?: string\n variant?: string | null\n action_key?: string | null\n /** tupac's flat host message for the link (`action` plus fields), e.g. Switch's op_1. */\n post_message_metadata?: ({ action?: string | null } & Record<string, unknown>) | null\n /** Figures this CTA's drilldown renders (e.g. a summary header's amount/dates/count). */\n drilldown_data?: DrilldownData\n}\n\nexport interface Footer {\n /** V1: a pre-formatted date string. */\n date?: string\n /**\n * The account label, on both V1 and V2. The backend resolves the plurality: one account sends\n * its name (e.g. `Epic Bank`), several send a localized count (e.g. `2 Accounts`), none sends\n * `null` (tupac's `footer_account_label` returns nil for a beat with no accounts, as Payday Cash\n * Left Over Status does). There is deliberately no separate `accounts` key.\n */\n account?: string | null\n /**\n * V2 (LargeTransactionV2 onward): unix seconds, formatted by `Footer` for display.\n * Replaces `date`; `date` wins when a beat somehow sends both.\n */\n timestamp?: number\n}\n\n// ============ Instance Slot Types ============\n// Values are the snake_case block names the backend sends on a beat's instance slot; the PascalCase\n// keys stay as friendly references (e.g. BlockType.BarChartBlock === 'bar_chart_block').\nexport const BlockType = {\n AccountBlock: 'account_block',\n AccountSwitchBlock: 'account_switch_block',\n BarChartBlock: 'bar_chart_block',\n BudgetBlock: 'budget_block',\n DirectDepositBlock: 'direct_deposit_block',\n ImageBlock: 'image_block',\n MerchantBlock: 'merchant_block',\n TransactionBlock: 'transaction_block',\n DonutChartBlock: 'donut_chart_block',\n DoubleBarChartBlock: 'double_bar_chart_block',\n DoubleProgressBarBlock: 'double_progress_bar_block',\n DebtsBlock: 'debts_block',\n GasPurchaseBlock: 'gas_purchase_block',\n GoalsBlock: 'goals_block',\n NoSpendDaysBlock: 'no_spend_days_block',\n RepeatingTransactionBlock: 'repeating_transaction_block',\n SaveExtraBlock: 'save_extra_block',\n SavingsAmountBlock: 'savings_amount_block',\n StepChartBlock: 'step_chart_block',\n SVGImageBlock: 'svg_image_block',\n UpcomingBillBlock: 'upcoming_bill_block',\n UpcomingSubscriptionBlock: 'upcoming_subscription_block',\n WithdrawalBlock: 'withdrawal_block',\n} as const\n\nexport type BlockType = (typeof BlockType)[keyof typeof BlockType]\n\n/**\n * A pre-localized row on a V2 instance slot. The backend resolves the copy and formatting; the\n * logo is a `LogoRef` (an entity guid or a status icon, see `logoFromRef`).\n */\nexport interface InstanceSlotRow {\n amount?: number\n logo?: LogoRef\n primary_text?: string\n secondary_text?: string\n}\n\n/**\n * V2: the slots a block's variant filled, keyed by slot name; ditto owns the names and omits any\n * slot it has no value for (`lib/ditto/blocks/<block>.yml`). Read with `slot()`, which names the\n * kind the caller expects.\n */\nexport interface InstanceSlotData {\n [slot: string]: unknown\n}\n\n/**\n * Reads one slot off a block's `data`; undefined when ditto did not fill it.\n *\n * The caller names the kind, because the slot's kind lives in the block's ditto schema and not\n * here — a block fills slots with whatever its card needs, so no fixed list of kinds would hold\n * (`account_switch_block` alone carries a boolean and `budget_block` a nested object).\n */\nexport const slot = <T = unknown>(\n data: InstanceSlotData | undefined,\n name: string,\n): T | undefined => data?.[name] as T | undefined\n\n/**\n * V2: which block renders this beat's content, and what it renders.\n *\n * `block` is optional: a beat whose template has no ditto config arrives as an empty `{}` and the\n * card renders its copy and CTAs alone, so a reader cannot assume a block is named. One interface\n * with `block` optional rather than a union with `Record<string, never>`, which TypeScript absorbs\n * — that union left `block` reading as required and typed a promise it did not keep.\n *\n * `variant` is optional for the same reason — the empty `{}` carries neither. Every ditto beat\n * file that names a block also names a variant, so a *filled* slot always has one; ditto drops a\n * nil variant rather than sending null, which is why the type is `string | null | undefined`.\n */\nexport interface InstanceSlot {\n block?: BlockType\n variant?: string | null\n /** The slots this block's variant declares in ditto. */\n data?: InstanceSlotData\n // Direct Deposit block (Set Up Direct Deposit, Switch Direct Deposit, Missing\n // Interest Rate): account facts carried flat on the slot, beside `data`.\n /** Primary line on the hero card, e.g. \"Epic Bank Checking, *1234\". */\n account_name?: string\n /** Secondary line beneath the name, e.g. \"Checking Account\" / \"Credit Card\". */\n account_type?: string\n /** Status pill label, e.g. \"Direct Deposit Not Set Up\" / \"Interest Rate: 19.99% APR\". */\n status_text?: string\n institution_guid?: string\n institution_name?: string\n // Shared across multiple V2 component blocks:\n // `amount` — UpcomingBillBlock (projected bill), UpcomingSubscriptionBlock (price per cadence).\n // (SavingsOpportunityBlock now reads `amount` off `instance_slot.data`, not this flat field.)\n // `merchant_guid` / `merchant_name` — UpcomingBillBlock (bill row logo + name),\n // UpcomingSubscriptionBlock (hero logo + name).\n /** Dollar amount (unformatted); the block formats it as currency. */\n amount?: number\n // Withdrawal block (Emergency Fund Withdrawal): one row flat on the slot - `amount` above is the\n // withdrawal, shown with its date line \"{amount_label} {withdrawal_date}\" over the balance row.\n /** Pre-localized lead-in for the date line, e.g. \"Withdrawn on\". */\n amount_label?: string\n /** The withdrawal's calendar day, `YYYY-MM-DD` (e.g. `2026-10-20`); the card formats it. */\n withdrawal_date?: string\n /** Account balance after the withdrawal (unformatted); the card formats it as currency. */\n balance?: number\n /** Pre-localized label for the balance row, e.g. \"Balance\". */\n balance_label?: string\n /** Merchant guid used to render the inline / hero logo via `LogoFromGuid` (`MCH-...`). */\n merchant_guid?: string\n /** Merchant display name — shown as logo alt text and as the merchant/hero label. */\n merchant_name?: string\n // Upcoming Bill block (Projected Bill Payment): the block derives the Sun→Sat week strip\n // around `due_date` at render time.\n /** Due date of the projected bill in ISO form (e.g. `2025-10-30`). */\n due_date?: string\n // Account block (confetti tile): V1 flat fallback for the label line when `instance_slot.data` is\n // absent — `AccountBlock` reads `data.sub_text` first, then this. (The Savings Opportunity coupon\n // now reads `primary_text`/`amount` off `data`, so it no longer reads this flat field.)\n /** Caption/label line for the confetti tile (V1 fallback). */\n label?: string\n // Upcoming Subscription block: billing cadence for the price pill (`${amount} / ${cadence}`).\n /** Billing cadence word that trails the price, e.g. `month` or `year`. */\n cadence?: string\n // Account block (status on/off-track, deposit, payoff variants): card content carried flat on\n // the slot (the V2 contract drops `instance_slot_data`). `amount`, `label`, `merchant_guid`,\n // `merchant_name`, `institution_guid`, `institution_name` are shared fields declared above.\n /** Secondary line beneath the amount on the standard card, e.g. \"Remaining after expenses\". */\n sub_text?: string\n /** Header bar text (standard card) or the colored category strip label (deposit cards). */\n header_text?: string\n /** Generic-tile icon name used when no merchant/institution logo is available. */\n icon_name?: string\n /** Category guid used to render the deposit-card logo fallback. */\n category_guid?: string\n // Debts block: `amount` is the current balance; the shared account/institution fields above.\n /** Projected payoff date in ISO form (e.g. `2027-03-01`); the block formats it as month + year. */\n payoff_date?: string\n /** Monthly payment toward the debt (unformatted); the block formats it as currency. */\n monthly_payment?: number\n /** Annual interest rate as a percentage (e.g. `19.99`); the block formats it as a percent. */\n interest_rate?: number\n start_date?: string\n no_spend_days?: string[]\n /** First day of the month a monthly summary covers, in ISO form (e.g. `2026-09-01`). */\n date?: string\n /** Number of gas station visits in the month. */\n total_fill_up_visits?: number\n /** Amount spent at gas stations in the month, unformatted. */\n total_spend?: number\n /** V1 name for `total_spend`, read when `total_spend` is absent. */\n total_debt_for_fill_up_visits_in_prev_month?: number\n}\n"],"mappings":"AA4UA,IAAa,IAAA,CACX,GACA,MACkB,IAAO,CAAA"}
@@ -19,13 +19,18 @@ export interface BarChartBlockData {
19
19
  /** [0] monthly amount, [1] trend. */
20
20
  additional_data?: Legends[];
21
21
  }
22
- interface Main {
23
- value: string;
22
+ /** The donut's centre: the total and its caption ("$6,306" / "Total"). */
23
+ export interface DonutChartMain {
24
+ value: string | number;
24
25
  value_type: string;
25
26
  label: string;
26
27
  }
27
28
  export interface DonutChartBlockData {
28
- main: Main;
29
+ main: DonutChartMain;
30
+ /** The category whose colour fills the primary slice (Cost of Living to Income: Housing). */
31
+ category_guid?: string;
32
+ /** Legend rows beside the donut: a label, its amount and an optional share ("$5,550.00 (88%)"). */
33
+ legends?: Legends[];
29
34
  }
30
35
  export interface LegendProps extends Legends {
31
36
  amount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"InsightsInstanceSlotData.es.js","names":[],"sources":["../../../src/core/types/InsightsInstanceSlotData.ts"],"sourcesContent":["import type { DataSeries, Legends, LogoRef } from '../../core'\n\nexport interface InsightsInstanceSlotData\n extends\n Partial<BudgetBlockData>,\n Partial<DonutChartBlockData>,\n Partial<ImageBlockData>,\n Partial<AccountBlockData>,\n Partial<SaveExtraBlockData>,\n Partial<StepChartBlockData>,\n Partial<SVGImageBlockData>,\n Partial<AccountSwitchBlockData>,\n Partial<TransactionDetailsBlockData>,\n Partial<CreditUtilizationBlockData>,\n Partial<MerchantBlockData>,\n Partial<CommonProps> {}\n\n//when any of the type is used more than one times, we can use the common props\ninterface CommonProps {\n amount?: number\n ariaLabel?: string\n date?: string\n legends?: Legends[]\n category_guid?: string\n data_series?: DataSeries | DataSet[]\n transaction_guids?: string[]\n account_guids?: string[]\n primary_transaction_guid?: string\n}\n\n//BarChart Block: `instance_slot.data` (Insights 2.0)\nexport interface BarChartBlockData {\n series?: DataSeries\n category_guid?: string\n average_amount?: number\n /** [0] monthly amount, [1] trend. */\n additional_data?: Legends[]\n}\n\n//DonutChart Block\ninterface Main {\n value: string\n value_type: string\n label: string\n}\nexport interface DonutChartBlockData {\n main: Main\n}\n\n//DoubleBarChart Block\n// TODO : This has to be revisited again to update the below types based on API response once we have the final shape of the data_series for double bar chart from BE\nexport interface LegendProps extends Legends {\n amount: number\n formattedAmount: string\n label: string\n color?: string\n}\n\nexport interface DataSet extends DataSeries {\n ariaLabelComparison: string\n ariaLabelMain: string\n comparison: number\n // The comparison bar's transaction guids (data_series aggregated_guids), for the drawer filter.\n comparisonGuids?: string[]\n // The month's 'yyyy-MM-dd' date (the main row's).\n date?: string\n formattedComparison: string\n formattedMain: string\n label: string\n main: number\n // The main bar's transaction guids (data_series aggregated_guids), for the drawer filter.\n mainGuids?: string[]\n}\n\n//DoubleProgressBar Block\n\n//Image Block\nexport interface ImageBlockData {\n image: string\n}\n\n//Account Block\nexport interface AccountBlockData {\n sub_text: string\n institution_guid?: string\n institution_name?: string\n icon_name?: string\n /** Header bar text (standard card), or the colored category strip label (deposit cards). */\n header_text?: string\n // Deposit variants (Unified Deposit, Unified Deposit Emergency Fund, Savings Account Deposit)\n /** Merchant guid — renders a real merchant logo in the deposit card when present. */\n merchant_guid?: string\n /** Merchant display name — logo alt text and the payer line under the amount. */\n merchant_name?: string\n /** Secondary label beside the amount, e.g. `On {date}, you saved` or `Balance as of MM/DD/YY`. */\n label?: string\n}\n\nexport interface SaveExtraBlockData {\n /** Styled segments `[lead-in, amount digits, trailing copy]`, e.g. `['Save an extra', '100', 'to help your funds grow']`. */\n primary_text?: string[]\n /** Styled segments `[projected balance, caption]`, e.g. `['$8,313.87', 'After payday & projected expenses']`. */\n secondary_text?: string[]\n /** MakeTransfer drilldown: available balance (both variants). */\n available_balance?: number\n /** SAVE_ENOUGH_TO_LIVE_ON: average monthly spend. */\n avg_monthly_spend?: number\n /** SAVE_ENOUGH_TO_LIVE_ON: how long the balance lasts, overlaid on the timeline SVG (e.g. \"2 months, 11 days\"). */\n time_period?: string\n /** SAVE_AN_EXTRA_100: upcoming expenses (the \"Expenses\" figure). */\n upcoming_expenses?: number\n /** SAVE_AN_EXTRA_100: total remaining after expenses. */\n total_remaining?: number\n /** SAVE_ENOUGH_TO_LIVE_ON: date for the \"Your available balances as of {date}\" line. */\n date?: string\n}\n\n// AccountSwitch Block. State comes from `instance_slot.variant`, not a data flag.\nexport interface AccountSwitchBlockData {\n discovered_institution_guid: string\n discovered_institution_name: string\n held_institution_guid: string\n held_institution_name: string\n}\n\n// AccountSwitch Block: `instance_slot.data` (Insights 2.0, Discovered Accounts V2). Each slot is\n// optional: tupac omits `to_logo` when the user holds no FI-managed account. `logo` is the compact\n// card's (micro, notification) discovered institution.\nexport interface AccountSwitchBlockV2Data {\n from_logo?: LogoRef\n to_logo?: LogoRef\n logo?: LogoRef\n}\n\n// StepChart Block\nexport interface StepChartBlockData {\n completed_steps: number\n label_1: string\n label_2?: string\n}\n\n//Budgets Blocks\nexport enum BudgetTierType {\n LOW_BUDGET_TIER = 'LOW',\n MEDIUM_BUDGET_TIER = 'MEDIUM',\n OFF_TRACK_BUDGET_TIER = 'OFF_TRACK',\n}\n\nexport type BudgetTierValue = `${BudgetTierType}`\n\nexport interface BudgetLocalizedPayload {\n primary_text?: string\n amount_left_label?: string\n spent_label?: string\n budgeted_label?: string\n}\n\nexport interface BudgetBlockData {\n budget_percent: number\n budget_tier: BudgetTierValue\n category_guid?: string\n merchant_guid?: string\n spent_amount: number\n budgeted_amount: number\n localized_payload: BudgetLocalizedPayload\n}\n\nexport interface SVGImageBlockData {\n isCIBC?: boolean\n}\n\n// TransactionDetails Action Block\n// The drawer's subject is `InsightsPayload.primary_transaction_guid`; only action configuration\n// lives here.\nexport interface TransactionDetailsBlockData {\n /** `TopActions` member names, e.g. `['Category', 'Date', 'Memo']`. Omit for the defaults. */\n top_actions?: string[]\n /** `BottomActions` member names, e.g. `['MerchantBudget', 'HideTransaction']`. Omit for defaults. */\n bottom_actions?: string[]\n}\n\n// Credit Utilization action block. The per-card rows are the beat's `data_series` table\n// (`guid`, `label`, `amount`, `total_amount`, `percentage`), carried on `CommonProps.data_series`.\nexport interface CreditUtilizationBlockData {\n accounts_balance_sum?: number\n accounts_credit_limit_sum?: number\n credit_utilization_percentage?: number\n}\n\n// Merchant block `instance_slot.data`; `primary_text` is ditto's name.\nexport interface MerchantBlockData {\n merchant_name?: string\n logo?: LogoRef\n amount?: number\n /** Pre-localized eyebrow; ditto sends `header_text`. */\n date?: string\n header_text?: string\n status_text?: string\n logos?: LogoRef[]\n}\n"],"mappings":"AA8IA,IAAY,IAAL,0BAAA,GAAA;AACL,SAAA,EAAA,kBAAA,OACA,EAAA,qBAAA,UACA,EAAA,wBAAA;AACF,GAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"InsightsInstanceSlotData.es.js","names":[],"sources":["../../../src/core/types/InsightsInstanceSlotData.ts"],"sourcesContent":["import type { DataSeries, Legends, LogoRef } from '../../core'\n\nexport interface InsightsInstanceSlotData\n extends\n Partial<BudgetBlockData>,\n Partial<DonutChartBlockData>,\n Partial<ImageBlockData>,\n Partial<AccountBlockData>,\n Partial<SaveExtraBlockData>,\n Partial<StepChartBlockData>,\n Partial<SVGImageBlockData>,\n Partial<AccountSwitchBlockData>,\n Partial<TransactionDetailsBlockData>,\n Partial<CreditUtilizationBlockData>,\n Partial<MerchantBlockData>,\n Partial<CommonProps> {}\n\n//when any of the type is used more than one times, we can use the common props\ninterface CommonProps {\n amount?: number\n ariaLabel?: string\n date?: string\n legends?: Legends[]\n category_guid?: string\n data_series?: DataSeries | DataSet[]\n transaction_guids?: string[]\n account_guids?: string[]\n primary_transaction_guid?: string\n}\n\n//BarChart Block: `instance_slot.data` (Insights 2.0)\nexport interface BarChartBlockData {\n series?: DataSeries\n category_guid?: string\n average_amount?: number\n /** [0] monthly amount, [1] trend. */\n additional_data?: Legends[]\n}\n\n//DonutChart Block: `instance_slot.data` (Insights 2.0) — the same shape V1 sent as `instance_slot_data`.\n/** The donut's centre: the total and its caption (\"$6,306\" / \"Total\"). */\nexport interface DonutChartMain {\n value: string | number\n value_type: string\n label: string\n}\nexport interface DonutChartBlockData {\n main: DonutChartMain\n /** The category whose colour fills the primary slice (Cost of Living to Income: Housing). */\n category_guid?: string\n /** Legend rows beside the donut: a label, its amount and an optional share (\"$5,550.00 (88%)\"). */\n legends?: Legends[]\n}\n\n//DoubleBarChart Block\n// TODO : This has to be revisited again to update the below types based on API response once we have the final shape of the data_series for double bar chart from BE\nexport interface LegendProps extends Legends {\n amount: number\n formattedAmount: string\n label: string\n color?: string\n}\n\nexport interface DataSet extends DataSeries {\n ariaLabelComparison: string\n ariaLabelMain: string\n comparison: number\n // The comparison bar's transaction guids (data_series aggregated_guids), for the drawer filter.\n comparisonGuids?: string[]\n // The month's 'yyyy-MM-dd' date (the main row's).\n date?: string\n formattedComparison: string\n formattedMain: string\n label: string\n main: number\n // The main bar's transaction guids (data_series aggregated_guids), for the drawer filter.\n mainGuids?: string[]\n}\n\n//DoubleProgressBar Block\n\n//Image Block\nexport interface ImageBlockData {\n image: string\n}\n\n//Account Block\nexport interface AccountBlockData {\n sub_text: string\n institution_guid?: string\n institution_name?: string\n icon_name?: string\n /** Header bar text (standard card), or the colored category strip label (deposit cards). */\n header_text?: string\n // Deposit variants (Unified Deposit, Unified Deposit Emergency Fund, Savings Account Deposit)\n /** Merchant guid — renders a real merchant logo in the deposit card when present. */\n merchant_guid?: string\n /** Merchant display name — logo alt text and the payer line under the amount. */\n merchant_name?: string\n /** Secondary label beside the amount, e.g. `On {date}, you saved` or `Balance as of MM/DD/YY`. */\n label?: string\n}\n\nexport interface SaveExtraBlockData {\n /** Styled segments `[lead-in, amount digits, trailing copy]`, e.g. `['Save an extra', '100', 'to help your funds grow']`. */\n primary_text?: string[]\n /** Styled segments `[projected balance, caption]`, e.g. `['$8,313.87', 'After payday & projected expenses']`. */\n secondary_text?: string[]\n /** MakeTransfer drilldown: available balance (both variants). */\n available_balance?: number\n /** SAVE_ENOUGH_TO_LIVE_ON: average monthly spend. */\n avg_monthly_spend?: number\n /** SAVE_ENOUGH_TO_LIVE_ON: how long the balance lasts, overlaid on the timeline SVG (e.g. \"2 months, 11 days\"). */\n time_period?: string\n /** SAVE_AN_EXTRA_100: upcoming expenses (the \"Expenses\" figure). */\n upcoming_expenses?: number\n /** SAVE_AN_EXTRA_100: total remaining after expenses. */\n total_remaining?: number\n /** SAVE_ENOUGH_TO_LIVE_ON: date for the \"Your available balances as of {date}\" line. */\n date?: string\n}\n\n// AccountSwitch Block. State comes from `instance_slot.variant`, not a data flag.\nexport interface AccountSwitchBlockData {\n discovered_institution_guid: string\n discovered_institution_name: string\n held_institution_guid: string\n held_institution_name: string\n}\n\n// AccountSwitch Block: `instance_slot.data` (Insights 2.0, Discovered Accounts V2). Each slot is\n// optional: tupac omits `to_logo` when the user holds no FI-managed account. `logo` is the compact\n// card's (micro, notification) discovered institution.\nexport interface AccountSwitchBlockV2Data {\n from_logo?: LogoRef\n to_logo?: LogoRef\n logo?: LogoRef\n}\n\n// StepChart Block\nexport interface StepChartBlockData {\n completed_steps: number\n label_1: string\n label_2?: string\n}\n\n//Budgets Blocks\nexport enum BudgetTierType {\n LOW_BUDGET_TIER = 'LOW',\n MEDIUM_BUDGET_TIER = 'MEDIUM',\n OFF_TRACK_BUDGET_TIER = 'OFF_TRACK',\n}\n\nexport type BudgetTierValue = `${BudgetTierType}`\n\nexport interface BudgetLocalizedPayload {\n primary_text?: string\n amount_left_label?: string\n spent_label?: string\n budgeted_label?: string\n}\n\nexport interface BudgetBlockData {\n budget_percent: number\n budget_tier: BudgetTierValue\n category_guid?: string\n merchant_guid?: string\n spent_amount: number\n budgeted_amount: number\n localized_payload: BudgetLocalizedPayload\n}\n\nexport interface SVGImageBlockData {\n isCIBC?: boolean\n}\n\n// TransactionDetails Action Block\n// The drawer's subject is `InsightsPayload.primary_transaction_guid`; only action configuration\n// lives here.\nexport interface TransactionDetailsBlockData {\n /** `TopActions` member names, e.g. `['Category', 'Date', 'Memo']`. Omit for the defaults. */\n top_actions?: string[]\n /** `BottomActions` member names, e.g. `['MerchantBudget', 'HideTransaction']`. Omit for defaults. */\n bottom_actions?: string[]\n}\n\n// Credit Utilization action block. The per-card rows are the beat's `data_series` table\n// (`guid`, `label`, `amount`, `total_amount`, `percentage`), carried on `CommonProps.data_series`.\nexport interface CreditUtilizationBlockData {\n accounts_balance_sum?: number\n accounts_credit_limit_sum?: number\n credit_utilization_percentage?: number\n}\n\n// Merchant block `instance_slot.data`; `primary_text` is ditto's name.\nexport interface MerchantBlockData {\n merchant_name?: string\n logo?: LogoRef\n amount?: number\n /** Pre-localized eyebrow; ditto sends `header_text`. */\n date?: string\n header_text?: string\n status_text?: string\n logos?: LogoRef[]\n}\n"],"mappings":"AAmJA,IAAY,IAAL,0BAAA,GAAA;AACL,SAAA,EAAA,kBAAA,OACA,EAAA,qBAAA,UACA,EAAA,wBAAA;AACF,GAAA,CAAA,CAAA"}
@@ -32,6 +32,11 @@ interface GeneralInsightsFeedCopy {
32
32
  update: string;
33
33
  updating: string;
34
34
  dollar_bill?: string;
35
+ /** `_1{count}` — number of gas fill-ups, e.g. "5 Fill-ups". */
36
+ gas_fill_ups_count?: string;
37
+ gas_fill_ups_count_one?: string;
38
+ gas_pump?: string;
39
+ gas_spent_on_gas?: string;
35
40
  /** `_1{institution}` — the alt text of an institution's logo, e.g. "Chase Institution Logo". */
36
41
  institution_Logo?: string;
37
42
  weekly_no_spending_component_alt_text?: DynamicKeyValue;
@@ -1,4 +1,11 @@
1
1
  import { DonutChartBlockData } from '../../../../core/types/InsightsInstanceSlotData';
2
2
  import { BlockProps } from '../../types';
3
- declare const DonutChartBlock: ({ payload }: BlockProps<DonutChartBlockData>) => import("react/jsx-runtime").JSX.Element;
3
+ /**
4
+ * `donut_chart_block`: a donut with a centre total and a two-row legend.
5
+ *
6
+ * Reads `main` and `legends` from `instance_slot.data` (the Insights 2.0 envelope; ditto variant
7
+ * `deposit_summary` for Monthly Deposit Summary), falling back to the V1 `instance_slot_data` for
8
+ * payloads that still carry the facts there. The palette comes from `./layout.ts` by variant.
9
+ */
10
+ declare const DonutChartBlock: ({ payload }: BlockProps<Partial<DonutChartBlockData>>) => import("react/jsx-runtime").JSX.Element | null;
4
11
  export default DonutChartBlock;
@@ -1,23 +1,30 @@
1
- import { formatValueByType as o } from "../../../CommonUtils.es.js";
1
+ import { formatValueByType as e } from "../../../CommonUtils.es.js";
2
2
  import v from "./DonutChart.es.js";
3
- import { getDonutChartColors as _ } from "./utils.es.js";
4
- import { Fragment as b, jsx as e, jsxs as d } from "react/jsx-runtime";
5
- import { useTheme as f } from "@mui/material/styles";
6
- var D = ({ payload: r }) => {
7
- const u = f(), { instance_slot: n, instance_slot_data: l } = r, { variant: i } = n, { legends: m = [], main: t } = l, s = _(i, l, u), c = m.map((a, p) => ({
3
+ import { getDonutChartColors as y } from "./utils.es.js";
4
+ import { Fragment as f, jsx as i, jsxs as b } from "react/jsx-runtime";
5
+ import { useTheme as h } from "@mui/material/styles";
6
+ var j = ({ payload: s }) => {
7
+ const c = h(), { instance_slot: l, instance_slot_data: r } = s, { variant: m } = l, n = l.data, t = n?.main ? n : r ?? {}, _ = Array.isArray(t.legends) ? t.legends : [], { main: o } = t;
8
+ if (!o) return null;
9
+ const u = y(m, {
10
+ ...t,
11
+ category_guid: t.category_guid ?? r?.category_guid
12
+ }, c);
13
+ if (!u) return null;
14
+ const d = _.map((a, p) => ({
8
15
  value: a.value,
9
- color: s[p],
16
+ color: u[p],
10
17
  label: a.label,
11
- labelValue: /* @__PURE__ */ d(b, { children: [/* @__PURE__ */ e("b", { children: o(a.value, a.value_type ?? "amount", "0,0.00") }), a.additional_value && a.additional_value_type ? ` (${o(a.additional_value, a.additional_value_type, "0,0.00")})` : null] })
18
+ labelValue: /* @__PURE__ */ b(f, { children: [/* @__PURE__ */ i("b", { children: e(a.value, a.value_type ?? "amount", "0,0.00") }), a.additional_value && a.additional_value_type ? ` (${e(a.additional_value, a.additional_value_type, "0,0.00")})` : null] })
12
19
  }));
13
- return /* @__PURE__ */ e(v, {
14
- centerLabel: t.label,
15
- centerValue: o(Number(t.value), t.value_type, "0,0"),
16
- data: c
20
+ return /* @__PURE__ */ i(v, {
21
+ centerLabel: o.label,
22
+ centerValue: e(Number(o.value), o.value_type, "0,0"),
23
+ data: d
17
24
  });
18
25
  };
19
26
  export {
20
- D as default
27
+ j as default
21
28
  };
22
29
 
23
30
  //# sourceMappingURL=DonutChartBlock.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DonutChartBlock.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.tsx"],"sourcesContent":["import { useTheme } from '@mui/material/styles'\n\nimport type { DonutChartBlockData } from '../../../../core/types/InsightsInstanceSlotData'\n\nimport { formatValueByType } from '../../../CommonUtils'\n\nimport type { BlockProps } from '../../types'\n\nimport DonutChartV2 from './DonutChart'\nimport { getDonutChartColors } from './utils'\n\nconst DonutChartBlock = ({ payload }: BlockProps<DonutChartBlockData>) => {\n const theme = useTheme()\n const { instance_slot, instance_slot_data } = payload\n const { variant } = instance_slot\n const { legends = [], main } = instance_slot_data\n const colors = getDonutChartColors(variant, instance_slot_data, theme)\n\n const data = legends.map((legend: (typeof legends)[number], index: number) => ({\n value: legend.value,\n color: colors[index],\n label: legend.label,\n labelValue: (\n <>\n <b>{formatValueByType(legend.value, legend.value_type ?? 'amount', '0,0.00')}</b>\n {legend.additional_value && legend.additional_value_type\n ? ` (${formatValueByType(legend.additional_value, legend.additional_value_type, '0,0.00')})`\n : null}\n </>\n ),\n }))\n\n return (\n <DonutChartV2\n centerLabel={main.label}\n centerValue={formatValueByType(Number(main.value), main.value_type, '0,0')}\n data={data}\n />\n )\n}\n\nexport default DonutChartBlock\n"],"mappings":";;;;;AAWA,IAAM,IAAA,CAAmB,EAAE,SAAA,EAAA,MAA+C;AACxE,QAAM,IAAQ,EAAS,GACjB,EAAE,eAAA,GAAe,oBAAA,EAAA,IAAuB,GACxC,EAAE,SAAA,EAAA,IAAY,GACd,EAAE,SAAA,IAAU,CAAC,GAAG,MAAA,EAAA,IAAS,GACzB,IAAS,EAAoB,GAAS,GAAoB,CAAK,GAE/D,IAAO,EAAQ,IAAA,CAAK,GAAkC,OAAmB;AAAA,IAC7E,OAAO,EAAO;AAAA,IACd,OAAO,EAAO,CAAA;AAAA,IACd,OAAO,EAAO;AAAA,IACd,YACE,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,KAAD,EAAA,UAAI,EAAkB,EAAO,OAAO,EAAO,cAAc,UAAU,QAAQ,EAAK,CAAA,GAC/E,EAAO,oBAAoB,EAAO,wBAC/B,KAAK,EAAkB,EAAO,kBAAkB,EAAO,uBAAuB,QAAQ,CAAA,MACtF,IACJ,EAAA,CAAA;AAAA,EAEN,EAAE;AAEF,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,aAAa,EAAK;AAAA,IAClB,aAAa,EAAkB,OAAO,EAAK,KAAK,GAAG,EAAK,YAAY,KAAK;AAAA,IACnE,MAAA;AAAA,EACP,CAAA;AAEL"}
1
+ {"version":3,"file":"DonutChartBlock.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.tsx"],"sourcesContent":["import { useTheme } from '@mui/material/styles'\n\nimport type { DonutChartBlockData } from '../../../../core/types/InsightsInstanceSlotData'\n\nimport { formatValueByType } from '../../../CommonUtils'\n\nimport type { BlockProps } from '../../types'\n\nimport DonutChartV2 from './DonutChart'\nimport { getDonutChartColors } from './utils'\n\n/**\n * `donut_chart_block`: a donut with a centre total and a two-row legend.\n *\n * Reads `main` and `legends` from `instance_slot.data` (the Insights 2.0 envelope; ditto variant\n * `deposit_summary` for Monthly Deposit Summary), falling back to the V1 `instance_slot_data` for\n * payloads that still carry the facts there. The palette comes from `./layout.ts` by variant.\n */\nconst DonutChartBlock = ({ payload }: BlockProps<Partial<DonutChartBlockData>>) => {\n const theme = useTheme()\n const { instance_slot, instance_slot_data } = payload\n const { variant } = instance_slot\n // V2 contract first (`instance_slot.data`), V1 `instance_slot_data` as the legacy alias.\n const slotData = instance_slot.data as Partial<DonutChartBlockData> | undefined\n const blockData: Partial<DonutChartBlockData> = slotData?.main\n ? slotData\n : (instance_slot_data ?? {})\n const legends = Array.isArray(blockData.legends) ? blockData.legends : []\n const { main } = blockData\n\n if (!main) return null\n\n const colors = getDonutChartColors(\n variant,\n { ...blockData, category_guid: blockData.category_guid ?? instance_slot_data?.category_guid },\n theme,\n )\n\n if (!colors) return null\n\n const data = legends.map((legend, index) => ({\n value: legend.value,\n color: colors[index],\n label: legend.label,\n labelValue: (\n <>\n <b>{formatValueByType(legend.value, legend.value_type ?? 'amount', '0,0.00')}</b>\n {legend.additional_value && legend.additional_value_type\n ? ` (${formatValueByType(legend.additional_value, legend.additional_value_type, '0,0.00')})`\n : null}\n </>\n ),\n }))\n\n return (\n <DonutChartV2\n centerLabel={main.label}\n centerValue={formatValueByType(Number(main.value), main.value_type, '0,0')}\n data={data}\n />\n )\n}\n\nexport default DonutChartBlock\n"],"mappings":";;;;;AAkBA,IAAM,IAAA,CAAmB,EAAE,SAAA,EAAA,MAAwD;AACjF,QAAM,IAAQ,EAAS,GACjB,EAAE,eAAA,GAAe,oBAAA,EAAA,IAAuB,GACxC,EAAE,SAAA,EAAA,IAAY,GAEd,IAAW,EAAc,MACzB,IAA0C,GAAU,OACtD,IACC,KAAsB,CAAC,GACtB,IAAU,MAAM,QAAQ,EAAU,OAAO,IAAI,EAAU,UAAU,CAAC,GAClE,EAAE,MAAA,EAAA,IAAS;AAEjB,MAAI,CAAC,EAAM,QAAO;AAElB,QAAM,IAAS,EACb,GACA;AAAA,IAAE,GAAG;AAAA,IAAW,eAAe,EAAU,iBAAiB,GAAoB;AAAA,EAAc,GAC5F,CACF;AAEA,MAAI,CAAC,EAAQ,QAAO;AAEpB,QAAM,IAAO,EAAQ,IAAA,CAAK,GAAQ,OAAW;AAAA,IAC3C,OAAO,EAAO;AAAA,IACd,OAAO,EAAO,CAAA;AAAA,IACd,OAAO,EAAO;AAAA,IACd,YACE,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,KAAD,EAAA,UAAI,EAAkB,EAAO,OAAO,EAAO,cAAc,UAAU,QAAQ,EAAK,CAAA,GAC/E,EAAO,oBAAoB,EAAO,wBAC/B,KAAK,EAAkB,EAAO,kBAAkB,EAAO,uBAAuB,QAAQ,CAAA,MACtF,IACJ,EAAA,CAAA;AAAA,EAEN,EAAE;AAEF,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,aAAa,EAAK;AAAA,IAClB,aAAa,EAAkB,OAAO,EAAK,KAAK,GAAG,EAAK,YAAY,KAAK;AAAA,IACnE,MAAA;AAAA,EACP,CAAA;AAEL"}
@@ -1,3 +1,3 @@
1
1
  import { Theme } from '@mui/material/styles';
2
2
  import { InsightsInstanceSlotData } from '../../../../core/types/InsightsInstanceSlotData';
3
- export declare const getDonutChartColors: (variant: string | null | undefined, blockData: InsightsInstanceSlotData, theme: Theme) => [string, string];
3
+ export declare const getDonutChartColors: (variant: string | null | undefined, blockData: InsightsInstanceSlotData, theme: Theme) => [string, string] | null;
@@ -1,11 +1,11 @@
1
1
  import { getCategoryColor as a } from "../../../../core/utils/CategoryUtil.es.js";
2
2
  import { getLayoutConfig as t } from "./layout.es.js";
3
- var g = (n, i, o) => {
3
+ var u = (n, i, o) => {
4
4
  const r = t(o)[n];
5
- return "dynamicPrimary" in r && r.dynamicPrimary === "creditUtilization" ? [Number(i.main?.value ?? 0) > 30 ? o.palette.error.main : o.palette.warning.main, r.secondaryColor] : "secondaryColor" in r ? [a(i.category_guid ?? "", o), r.secondaryColor] : r.colors;
5
+ return r ? "dynamicPrimary" in r && r.dynamicPrimary === "creditUtilization" ? [Number(i.main?.value ?? 0) > 30 ? o.palette.error.main : o.palette.warning.main, r.secondaryColor] : "secondaryColor" in r ? [a(i.category_guid ?? "", o), r.secondaryColor] : r.colors : null;
6
6
  };
7
7
  export {
8
- g as getDonutChartColors
8
+ u as getDonutChartColors
9
9
  };
10
10
 
11
11
  //# sourceMappingURL=utils.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ChartBlocks/DonutChartBlock/utils.ts"],"sourcesContent":["import { type Theme } from '@mui/material/styles'\nimport { getCategoryColor } from '../../../../core/utils/CategoryUtil'\nimport { getLayoutConfig } from './layout'\nimport type { InsightsInstanceSlotData } from '../../../../core/types/InsightsInstanceSlotData'\n\nexport const getDonutChartColors = (\n variant: string | null | undefined,\n blockData: InsightsInstanceSlotData,\n theme: Theme,\n): [string, string] => {\n const layouts = getLayoutConfig(theme)\n const variantConfig = layouts[variant as keyof ReturnType<typeof getLayoutConfig>] as\n | { dynamicPrimary: string; secondaryColor: string }\n | { secondaryColor: string }\n | { colors: [string, string] }\n\n if ('dynamicPrimary' in variantConfig && variantConfig.dynamicPrimary === 'creditUtilization') {\n const utilization = Number(blockData.main?.value ?? 0)\n const primaryColor = utilization > 30 ? theme.palette.error.main : theme.palette.warning.main\n return [primaryColor, variantConfig.secondaryColor]\n }\n\n if ('secondaryColor' in variantConfig) {\n const categoryColor = getCategoryColor(blockData.category_guid ?? '', theme)\n return [categoryColor, variantConfig.secondaryColor]\n }\n\n return variantConfig.colors\n}\n"],"mappings":";;AAKA,IAAa,IAAA,CACX,GACA,GACA,MACqB;AAErB,QAAM,IADU,EAAgB,CACV,EAAQ,CAAA;AAK9B,SAAI,oBAAoB,KAAiB,EAAc,mBAAmB,sBAGjE,CAFa,OAAO,EAAU,MAAM,SAAS,CAC/B,IAAc,KAAK,EAAM,QAAQ,MAAM,OAAO,EAAM,QAAQ,QAAQ,MACnE,EAAc,cAAc,IAGhD,oBAAoB,IAEf,CADe,EAAiB,EAAU,iBAAiB,IAAI,CAC9D,GAAe,EAAc,cAAc,IAG9C,EAAc;AACvB"}
1
+ {"version":3,"file":"utils.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ChartBlocks/DonutChartBlock/utils.ts"],"sourcesContent":["import { type Theme } from '@mui/material/styles'\nimport { getCategoryColor } from '../../../../core/utils/CategoryUtil'\nimport { getLayoutConfig } from './layout'\nimport type { InsightsInstanceSlotData } from '../../../../core/types/InsightsInstanceSlotData'\n\nexport const getDonutChartColors = (\n variant: string | null | undefined,\n blockData: InsightsInstanceSlotData,\n theme: Theme,\n): [string, string] | null => {\n const layouts = getLayoutConfig(theme)\n const variantConfig = layouts[variant as keyof ReturnType<typeof getLayoutConfig>] as\n | { dynamicPrimary: string; secondaryColor: string }\n | { secondaryColor: string }\n | { colors: [string, string] }\n | undefined\n\n if (!variantConfig) return null\n\n if ('dynamicPrimary' in variantConfig && variantConfig.dynamicPrimary === 'creditUtilization') {\n const utilization = Number(blockData.main?.value ?? 0)\n const primaryColor = utilization > 30 ? theme.palette.error.main : theme.palette.warning.main\n return [primaryColor, variantConfig.secondaryColor]\n }\n\n if ('secondaryColor' in variantConfig) {\n const categoryColor = getCategoryColor(blockData.category_guid ?? '', theme)\n return [categoryColor, variantConfig.secondaryColor]\n }\n\n return variantConfig.colors\n}\n"],"mappings":";;AAKA,IAAa,IAAA,CACX,GACA,GACA,MAC4B;AAE5B,QAAM,IADU,EAAgB,CACV,EAAQ,CAAA;AAM9B,SAAK,IAED,oBAAoB,KAAiB,EAAc,mBAAmB,sBAGjE,CAFa,OAAO,EAAU,MAAM,SAAS,CAC/B,IAAc,KAAK,EAAM,QAAQ,MAAM,OAAO,EAAM,QAAQ,QAAQ,MACnE,EAAc,cAAc,IAGhD,oBAAoB,IAEf,CADe,EAAiB,EAAU,iBAAiB,IAAI,CAC9D,GAAe,EAAc,cAAc,IAG9C,EAAc,SAbM;AAc7B"}
@@ -0,0 +1,5 @@
1
+ declare const GasGraphic: ({ height, label }: {
2
+ height?: number;
3
+ label?: string;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default GasGraphic;
@@ -0,0 +1,94 @@
1
+ import { jsx as C, jsxs as t } from "react/jsx-runtime";
2
+ import { useTheme as f } from "@mui/material/styles";
3
+ var s = ({ height: e = 130, label: r }) => {
4
+ const { palette: h } = f(), { dark: l, light: a, lighter: d, main: i } = h.primary;
5
+ return /* @__PURE__ */ t("svg", {
6
+ "aria-label": r,
7
+ height: e,
8
+ overflow: "visible",
9
+ role: "img",
10
+ style: { flexShrink: 0 },
11
+ viewBox: "0 0 115 130",
12
+ width: e * 115 / 130,
13
+ children: [
14
+ /* @__PURE__ */ C("path", {
15
+ d: "M147.484 118C146.969 118 85.62 118 81.496 118.067H77.371V126.549C77.371 126.549 15.925 125.252 10.941 124.898C5.958 124.545 -0.575 125.688 0.041 130.199C1.375 139.974 113.54 134.874 129.44 132.911C142.329 131.321 138.72 127.61 118.614 124.429C117.086 124.187 117.068 122.248 127.378 122.248H142.329C166.559 122.248 166.044 118 147.484 118Z",
16
+ fill: d
17
+ }),
18
+ /* @__PURE__ */ C("path", {
19
+ d: "M79.089 11.607H75.479C74.927 11.607 74.479 12.055 74.479 12.607V39.432C74.479 39.984 74.927 40.432 75.479 40.432H85.86C86.412 40.432 86.86 39.984 86.86 39.432V33.882C86.86 33.616 86.755 33.362 86.567 33.175L80.382 26.99C80.195 26.802 80.089 26.548 80.089 26.282V12.607C80.089 12.055 79.641 11.607 79.089 11.607Z",
20
+ fill: l
21
+ }),
22
+ /* @__PURE__ */ C("path", {
23
+ d: "M11.607 6.19A6.19 6.19 0 0 1 17.797 0H68.483A6.19 6.19 0 0 1 74.673 6.19V112.202H11.607Z",
24
+ fill: i
25
+ }),
26
+ /* @__PURE__ */ t("g", {
27
+ fill: a,
28
+ opacity: 0.7,
29
+ children: [
30
+ /* @__PURE__ */ C("rect", {
31
+ height: 29,
32
+ rx: 3,
33
+ width: 44,
34
+ x: 21,
35
+ y: 9.18
36
+ }),
37
+ /* @__PURE__ */ C("rect", {
38
+ height: 16,
39
+ rx: 3,
40
+ width: 12.667,
41
+ x: 21,
42
+ y: 41.18
43
+ }),
44
+ /* @__PURE__ */ C("rect", {
45
+ height: 16,
46
+ rx: 3,
47
+ width: 12.667,
48
+ x: 36.667,
49
+ y: 41.18
50
+ }),
51
+ /* @__PURE__ */ C("rect", {
52
+ height: 16,
53
+ rx: 3,
54
+ width: 12.667,
55
+ x: 52.333,
56
+ y: 41.18
57
+ })
58
+ ]
59
+ }),
60
+ /* @__PURE__ */ C("path", {
61
+ d: "M6 118.393C6 114.974 8.772 112.202 12.19 112.202H74.089C77.508 112.202 80.28 114.974 80.28 118.393V129C80.28 129.552 79.832 130 79.28 130H7C6.448 130 6 129.552 6 129Z",
62
+ fill: i
63
+ }),
64
+ /* @__PURE__ */ t("g", {
65
+ transform: "translate(75.5 16)",
66
+ children: [
67
+ /* @__PURE__ */ C("path", {
68
+ d: "M26.957 51.087C26.632 51.63 25.889 51.741 25.392 51.349C24.637 50.753 23.842 50.209 23.07 49.667C22.647 49.371 22.528 48.8 22.788 48.355C26.138 42.612 29.023 36.87 29.827 31.64L34.327 30.64C33.378 40.134 30.825 44.61 26.957 51.087Z",
69
+ fill: l
70
+ }),
71
+ /* @__PURE__ */ C("path", {
72
+ d: "M0 41.681V44.645C0 45.137 0.353 45.554 0.838 45.642C18.545 48.853 41.208 66.314 32.91 87.116C29.292 96.188 23.016 94.77 20.037 91.349C12.383 82.56 17.058 67.644 22.27 58.387C22.52 57.943 22.407 57.383 22 57.078L19.742 55.385C19.264 55.026 18.592 55.153 18.31 55.679C15.715 60.525 5.008 82.422 16.201 94.77C22.714 101.955 33.24 99.787 37.094 89.741C46.722 64.644 22.593 44.833 1.158 40.708C0.551 40.591 0 41.063 0 41.681Z",
73
+ fill: l
74
+ }),
75
+ /* @__PURE__ */ C("path", {
76
+ d: "M22.962 7.383L20.294 9.155C20.13 9.264 19.91 9.233 19.784 9.082L17.736 6.639C17.702 6.598 17.66 6.565 17.613 6.541L12.107 3.788C11.573 3.522 11.39 2.851 11.714 2.351L12.755 0.743C13.029 0.319 13.577 0.166 14.031 0.387L19.82 3.199C19.943 3.258 20.052 3.342 20.141 3.445L23.041 6.808C23.193 6.984 23.156 7.254 22.962 7.383Z",
77
+ fill: l
78
+ }),
79
+ /* @__PURE__ */ C("path", {
80
+ clipRule: "evenodd",
81
+ d: "M23.627 8.032C23.893 7.855 24.239 7.857 24.493 8.051C26.384 9.495 29.859 12.748 31.226 14.896C33.099 17.839 33.739 22.262 34.296 26.118C34.499 27.526 34.692 28.858 34.93 30.015C35.015 30.429 34.766 30.844 34.357 30.949L29.642 32.166C29.336 32.245 29.021 32.074 28.921 31.775C28.809 31.438 28.431 31.271 28.102 31.404C25.788 32.341 22.568 33.128 20.973 31.532C19.394 29.952 20.043 19.145 20.466 12.097C20.501 11.519 20.533 10.966 20.564 10.445C20.578 10.203 20.705 9.98 20.907 9.845L23.627 8.032ZM27.938 19.345C27.336 18.503 26.229 18.464 25.342 18.609C25.04 18.658 24.95 19.034 25.167 19.25C25.682 19.762 26.277 20.443 26.39 20.893C26.536 21.479 27.041 26.041 27.314 28.605C27.337 28.828 27.546 28.984 27.768 28.943L29.159 28.691C29.347 28.656 29.482 28.492 29.475 28.302C29.364 25.552 28.681 20.385 27.938 19.345ZM24.003 20.329C23.792 19.983 23.288 20.039 23.138 20.415C23.114 20.475 23.101 20.54 23.101 20.605V28.051C23.101 28.478 23.448 28.824 23.875 28.824H24.567C25.025 28.824 25.383 28.429 25.338 27.974C25.135 25.899 24.842 22.786 24.842 22.247C24.842 21.822 24.416 21.007 24.003 20.329Z",
82
+ fill: i,
83
+ fillRule: "evenodd"
84
+ })
85
+ ]
86
+ })
87
+ ]
88
+ });
89
+ };
90
+ export {
91
+ s as default
92
+ };
93
+
94
+ //# sourceMappingURL=GasGraphic.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GasGraphic.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/GasGraphic.tsx"],"sourcesContent":["import { useTheme } from '@mui/material/styles'\n\n// Traced from the Figma \"Graphic\" frame; the floor shadow overflows the 115x130 box on purpose.\nconst GasGraphic = ({ height = 130, label }: { height?: number; label?: string }) => {\n const { palette } = useTheme()\n const { dark, light, lighter, main } = palette.primary\n\n return (\n <svg\n aria-label={label}\n height={height}\n overflow=\"visible\"\n role=\"img\"\n style={{ flexShrink: 0 }}\n viewBox=\"0 0 115 130\"\n width={(height * 115) / 130}\n >\n <path\n d=\"M147.484 118C146.969 118 85.62 118 81.496 118.067H77.371V126.549C77.371 126.549 15.925 125.252 10.941 124.898C5.958 124.545 -0.575 125.688 0.041 130.199C1.375 139.974 113.54 134.874 129.44 132.911C142.329 131.321 138.72 127.61 118.614 124.429C117.086 124.187 117.068 122.248 127.378 122.248H142.329C166.559 122.248 166.044 118 147.484 118Z\"\n fill={lighter}\n />\n <path\n d=\"M79.089 11.607H75.479C74.927 11.607 74.479 12.055 74.479 12.607V39.432C74.479 39.984 74.927 40.432 75.479 40.432H85.86C86.412 40.432 86.86 39.984 86.86 39.432V33.882C86.86 33.616 86.755 33.362 86.567 33.175L80.382 26.99C80.195 26.802 80.089 26.548 80.089 26.282V12.607C80.089 12.055 79.641 11.607 79.089 11.607Z\"\n fill={dark}\n />\n <path\n d=\"M11.607 6.19A6.19 6.19 0 0 1 17.797 0H68.483A6.19 6.19 0 0 1 74.673 6.19V112.202H11.607Z\"\n fill={main}\n />\n <g fill={light} opacity={0.7}>\n <rect height={29} rx={3} width={44} x={21} y={9.18} />\n <rect height={16} rx={3} width={12.667} x={21} y={41.18} />\n <rect height={16} rx={3} width={12.667} x={36.667} y={41.18} />\n <rect height={16} rx={3} width={12.667} x={52.333} y={41.18} />\n </g>\n <path\n d=\"M6 118.393C6 114.974 8.772 112.202 12.19 112.202H74.089C77.508 112.202 80.28 114.974 80.28 118.393V129C80.28 129.552 79.832 130 79.28 130H7C6.448 130 6 129.552 6 129Z\"\n fill={main}\n />\n <g transform=\"translate(75.5 16)\">\n <path\n d=\"M26.957 51.087C26.632 51.63 25.889 51.741 25.392 51.349C24.637 50.753 23.842 50.209 23.07 49.667C22.647 49.371 22.528 48.8 22.788 48.355C26.138 42.612 29.023 36.87 29.827 31.64L34.327 30.64C33.378 40.134 30.825 44.61 26.957 51.087Z\"\n fill={dark}\n />\n <path\n d=\"M0 41.681V44.645C0 45.137 0.353 45.554 0.838 45.642C18.545 48.853 41.208 66.314 32.91 87.116C29.292 96.188 23.016 94.77 20.037 91.349C12.383 82.56 17.058 67.644 22.27 58.387C22.52 57.943 22.407 57.383 22 57.078L19.742 55.385C19.264 55.026 18.592 55.153 18.31 55.679C15.715 60.525 5.008 82.422 16.201 94.77C22.714 101.955 33.24 99.787 37.094 89.741C46.722 64.644 22.593 44.833 1.158 40.708C0.551 40.591 0 41.063 0 41.681Z\"\n fill={dark}\n />\n <path\n d=\"M22.962 7.383L20.294 9.155C20.13 9.264 19.91 9.233 19.784 9.082L17.736 6.639C17.702 6.598 17.66 6.565 17.613 6.541L12.107 3.788C11.573 3.522 11.39 2.851 11.714 2.351L12.755 0.743C13.029 0.319 13.577 0.166 14.031 0.387L19.82 3.199C19.943 3.258 20.052 3.342 20.141 3.445L23.041 6.808C23.193 6.984 23.156 7.254 22.962 7.383Z\"\n fill={dark}\n />\n <path\n clipRule=\"evenodd\"\n d=\"M23.627 8.032C23.893 7.855 24.239 7.857 24.493 8.051C26.384 9.495 29.859 12.748 31.226 14.896C33.099 17.839 33.739 22.262 34.296 26.118C34.499 27.526 34.692 28.858 34.93 30.015C35.015 30.429 34.766 30.844 34.357 30.949L29.642 32.166C29.336 32.245 29.021 32.074 28.921 31.775C28.809 31.438 28.431 31.271 28.102 31.404C25.788 32.341 22.568 33.128 20.973 31.532C19.394 29.952 20.043 19.145 20.466 12.097C20.501 11.519 20.533 10.966 20.564 10.445C20.578 10.203 20.705 9.98 20.907 9.845L23.627 8.032ZM27.938 19.345C27.336 18.503 26.229 18.464 25.342 18.609C25.04 18.658 24.95 19.034 25.167 19.25C25.682 19.762 26.277 20.443 26.39 20.893C26.536 21.479 27.041 26.041 27.314 28.605C27.337 28.828 27.546 28.984 27.768 28.943L29.159 28.691C29.347 28.656 29.482 28.492 29.475 28.302C29.364 25.552 28.681 20.385 27.938 19.345ZM24.003 20.329C23.792 19.983 23.288 20.039 23.138 20.415C23.114 20.475 23.101 20.54 23.101 20.605V28.051C23.101 28.478 23.448 28.824 23.875 28.824H24.567C25.025 28.824 25.383 28.429 25.338 27.974C25.135 25.899 24.842 22.786 24.842 22.247C24.842 21.822 24.416 21.007 24.003 20.329Z\"\n fill={main}\n fillRule=\"evenodd\"\n />\n </g>\n </svg>\n )\n}\n\nexport default GasGraphic\n"],"mappings":";;AAGA,IAAM,IAAA,CAAc,EAAE,QAAA,IAAS,KAAK,OAAA,EAAA,MAAiD;AACnF,QAAM,EAAE,SAAA,EAAA,IAAY,EAAS,GACvB,EAAE,MAAA,GAAM,OAAA,GAAO,SAAA,GAAS,MAAA,EAAA,IAAS,EAAQ;AAE/C,SACE,gBAAA,EAAC,OAAD;AAAA,IACE,cAAY;AAAA,IACJ,QAAA;AAAA,IACR,UAAS;AAAA,IACT,MAAK;AAAA,IACL,OAAO,EAAE,YAAY,EAAE;AAAA,IACvB,SAAQ;AAAA,IACR,OAAQ,IAAS,MAAO;AAAA,IAP1B,UAAA;AAAA,MASE,gBAAA,EAAC,QAAD;AAAA,QACE,GAAE;AAAA,QACF,MAAM;AAAA,MACP,CAAA;AAAA,MACD,gBAAA,EAAC,QAAD;AAAA,QACE,GAAE;AAAA,QACF,MAAM;AAAA,MACP,CAAA;AAAA,MACD,gBAAA,EAAC,QAAD;AAAA,QACE,GAAE;AAAA,QACF,MAAM;AAAA,MACP,CAAA;AAAA,MACD,gBAAA,EAAC,KAAD;AAAA,QAAG,MAAM;AAAA,QAAO,SAAS;AAAA,QAAzB,UAAA;AAAA,UACE,gBAAA,EAAC,QAAD;AAAA,YAAM,QAAQ;AAAA,YAAI,IAAI;AAAA,YAAG,OAAO;AAAA,YAAI,GAAG;AAAA,YAAI,GAAG;AAAA,UAAO,CAAA;AAAA,UACrD,gBAAA,EAAC,QAAD;AAAA,YAAM,QAAQ;AAAA,YAAI,IAAI;AAAA,YAAG,OAAO;AAAA,YAAQ,GAAG;AAAA,YAAI,GAAG;AAAA,UAAQ,CAAA;AAAA,UAC1D,gBAAA,EAAC,QAAD;AAAA,YAAM,QAAQ;AAAA,YAAI,IAAI;AAAA,YAAG,OAAO;AAAA,YAAQ,GAAG;AAAA,YAAQ,GAAG;AAAA,UAAQ,CAAA;AAAA,UAC9D,gBAAA,EAAC,QAAD;AAAA,YAAM,QAAQ;AAAA,YAAI,IAAI;AAAA,YAAG,OAAO;AAAA,YAAQ,GAAG;AAAA,YAAQ,GAAG;AAAA,UAAQ,CAAA;AAAA,QAC7D;AAAA;MACH,gBAAA,EAAC,QAAD;AAAA,QACE,GAAE;AAAA,QACF,MAAM;AAAA,MACP,CAAA;AAAA,MACD,gBAAA,EAAC,KAAD;AAAA,QAAG,WAAU;AAAA,QAAb,UAAA;AAAA,UACE,gBAAA,EAAC,QAAD;AAAA,YACE,GAAE;AAAA,YACF,MAAM;AAAA,UACP,CAAA;AAAA,UACD,gBAAA,EAAC,QAAD;AAAA,YACE,GAAE;AAAA,YACF,MAAM;AAAA,UACP,CAAA;AAAA,UACD,gBAAA,EAAC,QAAD;AAAA,YACE,GAAE;AAAA,YACF,MAAM;AAAA,UACP,CAAA;AAAA,UACD,gBAAA,EAAC,QAAD;AAAA,YACE,UAAS;AAAA,YACT,GAAE;AAAA,YACF,MAAM;AAAA,YACN,UAAS;AAAA,UACV,CAAA;AAAA,QACA;AAAA;IACA;AAAA;AAET"}
@@ -0,0 +1,3 @@
1
+ import { BlockProps } from '../../types';
2
+ declare const GasPurchaseBlock: ({ payload }: BlockProps) => import("react/jsx-runtime").JSX.Element | null;
3
+ export default GasPurchaseBlock;
@@ -0,0 +1,67 @@
1
+ import { buildPluralCopy as u } from "../../../../core/utils/Localization.es.js";
2
+ import { useGlobalCopyStore as f } from "../../../../common/context/hooks.es.js";
3
+ import { slot as g } from "../../../../core/types/Insights.es.js";
4
+ import { formatCurrency as h } from "../../../../core/utils/NumberFormatting.es.js";
5
+ import x from "./GasGraphic.es.js";
6
+ import o from "@mui/material/Stack";
7
+ import { Text as a } from "@mxenabled/mxui";
8
+ import { jsx as t, jsxs as p } from "react/jsx-runtime";
9
+ var b = "_1{count} Fill-ups", v = "_1{count} Fill-up", y = "spent on gas", m = (r) => typeof r == "number" && Number.isFinite(r), T = ({ payload: r }) => {
10
+ const i = f().insights_feed?.general, { instance_slot: l = {}, widget_type: d } = r, n = d === "mini", e = (c) => g(l.data, c) ?? l[c], s = e("total_fill_up_visits"), _ = e("total_spend") ?? e("total_debt_for_fill_up_visits_in_prev_month");
11
+ return !m(s) || !m(_) ? null : /* @__PURE__ */ p(o, {
12
+ direction: "row",
13
+ sx: {
14
+ alignItems: "center",
15
+ gap: n ? 12 : 16,
16
+ px: 16,
17
+ py: n ? 12 : 16,
18
+ width: "100%"
19
+ },
20
+ children: [/* @__PURE__ */ t(x, {
21
+ height: n ? 94 : 130,
22
+ label: i?.gas_pump
23
+ }), /* @__PURE__ */ p(o, {
24
+ sx: {
25
+ flex: 1,
26
+ justifyContent: "center",
27
+ minWidth: 0,
28
+ pb: 12
29
+ },
30
+ children: [/* @__PURE__ */ t(o, {
31
+ sx: {
32
+ bgcolor: "primary.lighter",
33
+ borderRadius: "4px 4px 0 0",
34
+ px: 10,
35
+ py: 4
36
+ },
37
+ children: /* @__PURE__ */ t(a, {
38
+ color: "primary.dark",
39
+ sx: { fontWeight: 700 },
40
+ variant: "caption",
41
+ children: u(i?.gas_fill_ups_count_one ?? v, i?.gas_fill_ups_count ?? b, s, String(s))
42
+ })
43
+ }), /* @__PURE__ */ p(o, {
44
+ sx: {
45
+ bgcolor: "background.default",
46
+ borderRadius: "0 0 4px 4px",
47
+ gap: 2,
48
+ p: 8
49
+ },
50
+ children: [/* @__PURE__ */ t(a, {
51
+ component: "span",
52
+ variant: "h3",
53
+ children: h(_, "0,0")
54
+ }), /* @__PURE__ */ t(a, {
55
+ color: "text.secondary",
56
+ variant: "caption",
57
+ children: i?.gas_spent_on_gas ?? y
58
+ })]
59
+ })]
60
+ })]
61
+ });
62
+ };
63
+ export {
64
+ T as default
65
+ };
66
+
67
+ //# sourceMappingURL=GasPurchaseBlock.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GasPurchaseBlock.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ComponentBlocks/GasPurchaseBlock/GasPurchaseBlock.tsx"],"sourcesContent":["import Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { buildPluralCopy, useGlobalCopyStore } from '../../../../common'\nimport { slot, type InstanceSlot } from '../../../../core'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\nimport type { BlockProps } from '../../types'\n\nimport GasGraphic from './GasGraphic'\n\nconst DEFAULT_FILL_UPS = '_1{count} Fill-ups'\nconst DEFAULT_FILL_UPS_ONE = '_1{count} Fill-up'\nconst DEFAULT_SPENT_ON_GAS = 'spent on gas'\n\ntype GasPurchaseSlot = Pick<\n InstanceSlot,\n 'total_fill_up_visits' | 'total_spend' | 'total_debt_for_fill_up_visits_in_prev_month'\n>\n\nconst isFiniteNumber = (value: unknown): value is number =>\n typeof value === 'number' && Number.isFinite(value)\n\nconst GasPurchaseBlock = ({ payload }: BlockProps) => {\n const generalCopy = useGlobalCopyStore().insights_feed?.general\n\n const { instance_slot = {}, widget_type } = payload\n const isMini = widget_type === 'mini'\n const field = <K extends keyof GasPurchaseSlot>(key: K) =>\n slot<InstanceSlot[K]>(instance_slot.data, key) ?? instance_slot[key]\n\n const visits = field('total_fill_up_visits')\n const spend = field('total_spend') ?? field('total_debt_for_fill_up_visits_in_prev_month')\n\n if (!isFiniteNumber(visits) || !isFiniteNumber(spend)) return null\n\n return (\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: isMini ? 12 : 16,\n px: 16,\n py: isMini ? 12 : 16,\n width: '100%',\n }}\n >\n <GasGraphic height={isMini ? 94 : 130} label={generalCopy?.gas_pump} />\n <Stack sx={{ flex: 1, justifyContent: 'center', minWidth: 0, pb: 12 }}>\n <Stack sx={{ bgcolor: 'primary.lighter', borderRadius: '4px 4px 0 0', px: 10, py: 4 }}>\n <Text color=\"primary.dark\" sx={{ fontWeight: 700 }} variant=\"caption\">\n {\n buildPluralCopy(\n generalCopy?.gas_fill_ups_count_one ?? DEFAULT_FILL_UPS_ONE,\n generalCopy?.gas_fill_ups_count ?? DEFAULT_FILL_UPS,\n visits,\n String(visits),\n ) as string\n }\n </Text>\n </Stack>\n <Stack sx={{ bgcolor: 'background.default', borderRadius: '0 0 4px 4px', gap: 2, p: 8 }}>\n <Text component=\"span\" variant=\"h3\">\n {formatCurrency(spend, '0,0')}\n </Text>\n <Text color=\"text.secondary\" variant=\"caption\">\n {generalCopy?.gas_spent_on_gas ?? DEFAULT_SPENT_ON_GAS}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n )\n}\n\nexport default GasPurchaseBlock\n"],"mappings":";;;;;;;;AAWA,IAAM,IAAmB,sBACnB,IAAuB,qBACvB,IAAuB,gBAOvB,IAAA,CAAkB,MACtB,OAAO,KAAU,YAAY,OAAO,SAAS,CAAK,GAE9C,IAAA,CAAoB,EAAE,SAAA,EAAA,MAA0B;AACpD,QAAM,IAAc,EAAmB,EAAE,eAAe,SAElD,EAAE,eAAA,IAAgB,CAAC,GAAG,aAAA,EAAA,IAAgB,GACtC,IAAS,MAAgB,QACzB,IAAA,CAA0C,MAC9C,EAAsB,EAAc,MAAM,CAAG,KAAK,EAAc,CAAA,GAE5D,IAAS,EAAM,sBAAsB,GACrC,IAAQ,EAAM,aAAa,KAAK,EAAM,6CAA6C;AAEzF,SAAI,CAAC,EAAe,CAAM,KAAK,CAAC,EAAe,CAAK,IAAU,OAG5D,gBAAA,EAAC,GAAD;AAAA,IACE,WAAU;AAAA,IACV,IAAI;AAAA,MACF,YAAY;AAAA,MACZ,KAAK,IAAS,KAAK;AAAA,MACnB,IAAI;AAAA,MACJ,IAAI,IAAS,KAAK;AAAA,MAClB,OAAO;AAAA,IACT;AAAA,IARF,UAAA,CAUE,gBAAA,EAAC,GAAD;AAAA,MAAY,QAAQ,IAAS,KAAK;AAAA,MAAK,OAAO,GAAa;AAAA,IAAW,CAAA,GACtE,gBAAA,EAAC,GAAD;AAAA,MAAO,IAAI;AAAA,QAAE,MAAM;AAAA,QAAG,gBAAgB;AAAA,QAAU,UAAU;AAAA,QAAG,IAAI;AAAA,MAAG;AAAA,MAApE,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,QAAO,IAAI;AAAA,UAAE,SAAS;AAAA,UAAmB,cAAc;AAAA,UAAe,IAAI;AAAA,UAAI,IAAI;AAAA,QAAE;AAAA,QAClF,UAAA,gBAAA,EAAC,GAAD;AAAA,UAAM,OAAM;AAAA,UAAe,IAAI,EAAE,YAAY,IAAI;AAAA,UAAG,SAAQ;AAAA,UAExD,UAAA,EACE,GAAa,0BAA0B,GACvC,GAAa,sBAAsB,GACnC,GACA,OAAO,CAAM,CACf;AAAA,QAEE,CAAA;AAAA,MACD,CAAA,GACP,gBAAA,EAAC,GAAD;AAAA,QAAO,IAAI;AAAA,UAAE,SAAS;AAAA,UAAsB,cAAc;AAAA,UAAe,KAAK;AAAA,UAAG,GAAG;AAAA,QAAE;AAAA,QAAtF,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,UAAM,WAAU;AAAA,UAAO,SAAQ;AAAA,UAC5B,UAAA,EAAe,GAAO,KAAK;AAAA,QACxB,CAAA,GACN,gBAAA,EAAC,GAAD;AAAA,UAAM,OAAM;AAAA,UAAiB,SAAQ;AAAA,UAClC,UAAA,GAAa,oBAAoB;AAAA,QAC9B,CAAA,CACD;AAAA,MACF,CAAA,CAAA;AAAA,IACF,CAAA,CAAA;AAAA;AAEX"}
@@ -0,0 +1 @@
1
+ export { default as GasPurchaseBlock } from './GasPurchaseBlock';
@@ -3,6 +3,7 @@ export * from './AccountSwitchBlock';
3
3
  export * from './BudgetBlock';
4
4
  export * from './DebtsBlock';
5
5
  export * from './DetailedAccountBlock';
6
+ export * from './GasPurchaseBlock';
6
7
  export * from './GoalsBlock';
7
8
  export * from './MerchantBlock';
8
9
  export * from './NoSpendDaysBlock';
@@ -4,14 +4,14 @@ import { useBeatActions as a } from "./beatActions.es.js";
4
4
  import { BAR_ARIA_LABEL as e, BAR_CHART_VARIANTS as f, barChartVariant as n, buildChartData as c, buildDataSeries as l } from "./blocks/ChartBlocks/BarchartBlock/utils.es.js";
5
5
  import { HOST_ACTIONS as d } from "./ctaActions/hostActions.es.js";
6
6
  import { runInDescriptionCta as C } from "./ctaActions/runCtaAction.es.js";
7
- import { useBeatCtaActions as u, useCtaHandler as k } from "./ctaActions/useCtaAction.es.js";
7
+ import { useBeatCtaActions as g, useCtaHandler as k } from "./ctaActions/useCtaAction.es.js";
8
8
  import { BarchartBlock as S } from "./blocks/ChartBlocks/BarchartBlock/BarchartBlock.es.js";
9
- import { DoubleBarChartBlock as h } from "./blocks/ChartBlocks/DoubleBarChartBlock/DoubleBarChartBlock.es.js";
9
+ import { DoubleBarChartBlock as A } from "./blocks/ChartBlocks/DoubleBarChartBlock/DoubleBarChartBlock.es.js";
10
10
  import I from "./blocks/ChartBlocks/StepChartBlock/StepChartBlock.es.js";
11
11
  import T from "./blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.es.js";
12
- import R from "./blocks/ChartBlocks/DoubleProgressBarBlock/DoubleProgressBarBlock.es.js";
13
- import y, { isLogoGuid as H } from "./components/LogoFromGuid.es.js";
14
- import O from "./components/AccountHeroCard.es.js";
12
+ import P from "./blocks/ChartBlocks/DoubleProgressBarBlock/DoubleProgressBarBlock.es.js";
13
+ import w, { isLogoGuid as y } from "./components/LogoFromGuid.es.js";
14
+ import M from "./components/AccountHeroCard.es.js";
15
15
  import V from "./components/DirectDepositCard.es.js";
16
16
  import { detailedAccountVariant as G, directDepositVariant as _, isDetailedAccountVariant as F } from "./blocks/ComponentBlocks/DetailedAccountBlock/layout.es.js";
17
17
  import N from "./blocks/ComponentBlocks/DetailedAccountBlock/DetailedAccountBlock.es.js";
@@ -23,126 +23,128 @@ import Y from "./components/DebtPayoffCard.es.js";
23
23
  import $ from "./components/InsightTransactionRow.es.js";
24
24
  import ro from "./components/TransactionListCard.es.js";
25
25
  import mo from "./blocks/ComponentBlocks/DebtsBlock/DebtsBlock.es.js";
26
- import ao from "./components/GoalProgressCard.es.js";
27
- import eo from "./blocks/ComponentBlocks/GoalsBlock/GoalsBlock.es.js";
28
- import no from "./components/LogoTile.es.js";
29
- import lo from "./components/LogoClusterCard.es.js";
30
- import Bo from "./components/AmountPill.es.js";
31
- import go from "./components/MerchantHighlightCard.es.js";
32
- import ko from "./components/P2PLogoStack.es.js";
33
- import So from "./blocks/ComponentBlocks/MerchantBlock/MerchantBlock.es.js";
34
- import ho from "./blocks/ComponentBlocks/NoSpendDaysBlock/NoSpendDaysBlock.es.js";
35
- import Io from "./components/UpcomingBillCard.es.js";
36
- import To from "./blocks/ComponentBlocks/RepeatingTransactionBlock/RepeatingTransactionBlock.es.js";
37
- import Ro from "./components/SaveAnExtraCard.es.js";
38
- import yo from "./blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
39
- import Mo from "./components/SavingsOpportunityCard.es.js";
40
- import Po from "./blocks/ComponentBlocks/SavingsOpportunityBlock/SavingsOpportunityBlock.es.js";
41
- import Eo from "./components/StatusMessageCard.es.js";
42
- import { transactionBlockVariant as _o } from "./blocks/ComponentBlocks/TransactionBlock/layout.es.js";
43
- import { TransactionBlock as xo } from "./blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
44
- import Uo from "./components/SubscriptionHeroCard.es.js";
45
- import jo from "./blocks/ComponentBlocks/UpcomingSubscriptionBlock/UpcomingSubscriptionBlock.es.js";
46
- import zo from "./components/WithdrawalCard.es.js";
47
- import Ko from "./blocks/ComponentBlocks/WithdrawalBlock/WithdrawalBlock.es.js";
48
- import Xo from "./components/DesignateEmergencySavingsCard.es.js";
49
- import { SVGImageBlock as Zo } from "./blocks/ImageBlocks/SVGImageBlock/SVGImageBlock.es.js";
50
- import or from "./components/shared/StatusSnackbar.es.js";
51
- import tr from "./components/FeedbackDialog.es.js";
52
- import ir from "./components/FeedbackModal.es.js";
53
- import pr from "./components/ConnectionDetailDrillDown.es.js";
54
- import fr from "./components/SurveyModal.es.js";
55
- import cr from "./components/InsightErrorCard.es.js";
56
- import { ErrorCard as sr } from "./components/ErrorCard.es.js";
57
- import Br from "./components/BadgedTile.es.js";
58
- import { OverflowMenu as gr } from "./components/OverflowMenu.es.js";
59
- import { InsightOptionsMenu as kr } from "./components/InsightOptionsMenu.es.js";
60
- import Sr from "./components/StatusBadge.es.js";
61
- import hr from "./components/CompactInsightCard.es.js";
62
- import Ir from "./components/AmountBreakdownCard.es.js";
63
- import { FeedbackBar as Tr } from "./components/FeedbackBar.es.js";
64
- import { DismissInsightDialog as Rr } from "./components/DismissInsightDialog.es.js";
65
- import { HiddenConfirmationCard as yr } from "./components/HiddenConfirmationCard.es.js";
66
- import { LoadingCard as Mr } from "./components/LoadingCard.es.js";
67
- import { ObsolesceBanner as Pr } from "./components/ObsolesceBanner.es.js";
68
- import Er from "./components/BaseLayout.es.js";
26
+ import ao from "./blocks/ComponentBlocks/GasPurchaseBlock/GasPurchaseBlock.es.js";
27
+ import eo from "./components/GoalProgressCard.es.js";
28
+ import no from "./blocks/ComponentBlocks/GoalsBlock/GoalsBlock.es.js";
29
+ import lo from "./components/LogoTile.es.js";
30
+ import Bo from "./components/LogoClusterCard.es.js";
31
+ import uo from "./components/AmountPill.es.js";
32
+ import ko from "./components/MerchantHighlightCard.es.js";
33
+ import So from "./components/P2PLogoStack.es.js";
34
+ import Ao from "./blocks/ComponentBlocks/MerchantBlock/MerchantBlock.es.js";
35
+ import Io from "./blocks/ComponentBlocks/NoSpendDaysBlock/NoSpendDaysBlock.es.js";
36
+ import To from "./components/UpcomingBillCard.es.js";
37
+ import Po from "./blocks/ComponentBlocks/RepeatingTransactionBlock/RepeatingTransactionBlock.es.js";
38
+ import wo from "./components/SaveAnExtraCard.es.js";
39
+ import Ho from "./blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
40
+ import Oo from "./components/SavingsOpportunityCard.es.js";
41
+ import Eo from "./blocks/ComponentBlocks/SavingsOpportunityBlock/SavingsOpportunityBlock.es.js";
42
+ import _o from "./components/StatusMessageCard.es.js";
43
+ import { transactionBlockVariant as xo } from "./blocks/ComponentBlocks/TransactionBlock/layout.es.js";
44
+ import { TransactionBlock as Uo } from "./blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
45
+ import jo from "./components/SubscriptionHeroCard.es.js";
46
+ import zo from "./blocks/ComponentBlocks/UpcomingSubscriptionBlock/UpcomingSubscriptionBlock.es.js";
47
+ import Ko from "./components/WithdrawalCard.es.js";
48
+ import Xo from "./blocks/ComponentBlocks/WithdrawalBlock/WithdrawalBlock.es.js";
49
+ import Zo from "./components/DesignateEmergencySavingsCard.es.js";
50
+ import { SVGImageBlock as or } from "./blocks/ImageBlocks/SVGImageBlock/SVGImageBlock.es.js";
51
+ import tr from "./components/shared/StatusSnackbar.es.js";
52
+ import ir from "./components/FeedbackDialog.es.js";
53
+ import pr from "./components/FeedbackModal.es.js";
54
+ import fr from "./components/ConnectionDetailDrillDown.es.js";
55
+ import cr from "./components/SurveyModal.es.js";
56
+ import sr from "./components/InsightErrorCard.es.js";
57
+ import { ErrorCard as Br } from "./components/ErrorCard.es.js";
58
+ import ur from "./components/BadgedTile.es.js";
59
+ import { OverflowMenu as kr } from "./components/OverflowMenu.es.js";
60
+ import { InsightOptionsMenu as Sr } from "./components/InsightOptionsMenu.es.js";
61
+ import Ar from "./components/StatusBadge.es.js";
62
+ import Ir from "./components/CompactInsightCard.es.js";
63
+ import Tr from "./components/AmountBreakdownCard.es.js";
64
+ import { FeedbackBar as Pr } from "./components/FeedbackBar.es.js";
65
+ import { DismissInsightDialog as wr } from "./components/DismissInsightDialog.es.js";
66
+ import { HiddenConfirmationCard as Hr } from "./components/HiddenConfirmationCard.es.js";
67
+ import { LoadingCard as Or } from "./components/LoadingCard.es.js";
68
+ import { ObsolesceBanner as Er } from "./components/ObsolesceBanner.es.js";
69
+ import _r from "./components/BaseLayout.es.js";
69
70
  export {
70
71
  W as AccountBlock,
71
- O as AccountHeroCard,
72
+ M as AccountHeroCard,
72
73
  J as AccountSwitchBlock,
73
- Ir as AmountBreakdownCard,
74
- Bo as AmountPill,
74
+ Tr as AmountBreakdownCard,
75
+ uo as AmountPill,
75
76
  e as BAR_ARIA_LABEL,
76
77
  f as BAR_CHART_VARIANTS,
77
- Br as BadgedTile,
78
+ ur as BadgedTile,
78
79
  S as BarchartBlock,
79
- Er as BaseLayout,
80
+ _r as BaseLayout,
80
81
  Q as BudgetBlock,
81
- hr as CompactInsightCard,
82
- pr as ConnectionDetailDrillDown,
82
+ Ir as CompactInsightCard,
83
+ fr as ConnectionDetailDrillDown,
83
84
  Y as DebtPayoffCard,
84
85
  mo as DebtsBlock,
85
- Xo as DesignateEmergencySavingsCard,
86
+ Zo as DesignateEmergencySavingsCard,
86
87
  N as DetailedAccountBlock,
87
88
  N as DirectDepositBlock,
88
89
  V as DirectDepositCard,
89
- Rr as DismissInsightDialog,
90
+ wr as DismissInsightDialog,
90
91
  T as DonutChartBlock,
91
- h as DoubleBarChartBlock,
92
- R as DoubleProgressBarBlock,
93
- sr as ErrorCard,
94
- Tr as FeedbackBar,
95
- tr as FeedbackDialog,
96
- ir as FeedbackModal,
97
- ao as GoalProgressCard,
98
- eo as GoalsBlock,
92
+ A as DoubleBarChartBlock,
93
+ P as DoubleProgressBarBlock,
94
+ Br as ErrorCard,
95
+ Pr as FeedbackBar,
96
+ ir as FeedbackDialog,
97
+ pr as FeedbackModal,
98
+ ao as GasPurchaseBlock,
99
+ eo as GoalProgressCard,
100
+ no as GoalsBlock,
99
101
  d as HOST_ACTIONS,
100
- yr as HiddenConfirmationCard,
101
- cr as InsightErrorCard,
102
- kr as InsightOptionsMenu,
102
+ Hr as HiddenConfirmationCard,
103
+ sr as InsightErrorCard,
104
+ Sr as InsightOptionsMenu,
103
105
  $ as InsightTransactionRow,
104
- Mr as LoadingCard,
105
- lo as LogoClusterCard,
106
- y as LogoFromGuid,
107
- no as LogoTile,
108
- So as MerchantBlock,
109
- go as MerchantHighlightCard,
110
- ho as NoSpendDaysBlock,
111
- Pr as ObsolesceBanner,
112
- gr as OverflowMenu,
113
- ko as P2PLogoStack,
114
- To as RepeatingTransactionBlock,
115
- Zo as SVGImageBlock,
116
- Ro as SaveAnExtraCard,
117
- yo as SaveExtraBlock,
118
- Po as SavingsOpportunityBlock,
119
- Mo as SavingsOpportunityCard,
120
- Sr as StatusBadge,
121
- Eo as StatusMessageCard,
106
+ Or as LoadingCard,
107
+ Bo as LogoClusterCard,
108
+ w as LogoFromGuid,
109
+ lo as LogoTile,
110
+ Ao as MerchantBlock,
111
+ ko as MerchantHighlightCard,
112
+ Io as NoSpendDaysBlock,
113
+ Er as ObsolesceBanner,
114
+ kr as OverflowMenu,
115
+ So as P2PLogoStack,
116
+ Po as RepeatingTransactionBlock,
117
+ or as SVGImageBlock,
118
+ wo as SaveAnExtraCard,
119
+ Ho as SaveExtraBlock,
120
+ Eo as SavingsOpportunityBlock,
121
+ Oo as SavingsOpportunityCard,
122
+ Ar as StatusBadge,
123
+ _o as StatusMessageCard,
122
124
  r as StatusPill,
123
- or as StatusSnackbar,
125
+ tr as StatusSnackbar,
124
126
  I as StepChartBlock,
125
- Uo as SubscriptionHeroCard,
126
- fr as SurveyModal,
127
- xo as TransactionBlock,
127
+ jo as SubscriptionHeroCard,
128
+ cr as SurveyModal,
129
+ Uo as TransactionBlock,
128
130
  ro as TransactionListCard,
129
131
  q as TransferLogoCard,
130
- To as UpcomingBillBlock,
131
- Io as UpcomingBillCard,
132
- jo as UpcomingSubscriptionBlock,
133
- Ko as WithdrawalBlock,
134
- zo as WithdrawalCard,
132
+ Po as UpcomingBillBlock,
133
+ To as UpcomingBillCard,
134
+ zo as UpcomingSubscriptionBlock,
135
+ Xo as WithdrawalBlock,
136
+ Ko as WithdrawalCard,
135
137
  n as barChartVariant,
136
138
  c as buildChartData,
137
139
  l as buildDataSeries,
138
140
  G as detailedAccountVariant,
139
141
  _ as directDepositVariant,
140
142
  F as isDetailedAccountVariant,
141
- H as isLogoGuid,
143
+ y as isLogoGuid,
142
144
  m as resolveInsightRender,
143
145
  C as runInDescriptionCta,
144
- _o as transactionBlockVariant,
146
+ xo as transactionBlockVariant,
145
147
  a as useBeatActions,
146
- u as useBeatCtaActions,
148
+ g as useBeatCtaActions,
147
149
  k as useCtaHandler
148
150
  };
@@ -1,5 +1,5 @@
1
1
  import { ContactSupportActionBlock as l } from "../actionBlocks/ContactSupportActionBlock.es.js";
2
- import { hasDrawerBlock as mo } from "./hasDrawerBlock.es.js";
2
+ import { hasDrawerBlock as po } from "./hasDrawerBlock.es.js";
3
3
  import { actionBlocksKey as o } from "./actionBlocksKey.es.js";
4
4
  import { BarchartBlock as _ } from "../blocks/ChartBlocks/BarchartBlock/BarchartBlock.es.js";
5
5
  import { DoubleBarChartBlock as s } from "../blocks/ChartBlocks/DoubleBarChartBlock/DoubleBarChartBlock.es.js";
@@ -11,47 +11,48 @@ import k from "../blocks/ComponentBlocks/AccountBlock/AccountBlock.es.js";
11
11
  import A from "../blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js";
12
12
  import { BudgetBlock as O } from "../blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js";
13
13
  import f from "../blocks/ComponentBlocks/DebtsBlock/DebtsBlock.es.js";
14
- import N from "../blocks/ComponentBlocks/GoalsBlock/GoalsBlock.es.js";
15
- import I from "../blocks/ComponentBlocks/MerchantBlock/MerchantBlock.es.js";
16
- import d from "../blocks/ComponentBlocks/NoSpendDaysBlock/NoSpendDaysBlock.es.js";
14
+ import N from "../blocks/ComponentBlocks/GasPurchaseBlock/GasPurchaseBlock.es.js";
15
+ import I from "../blocks/ComponentBlocks/GoalsBlock/GoalsBlock.es.js";
16
+ import d from "../blocks/ComponentBlocks/MerchantBlock/MerchantBlock.es.js";
17
+ import L from "../blocks/ComponentBlocks/NoSpendDaysBlock/NoSpendDaysBlock.es.js";
17
18
  import n from "../blocks/ComponentBlocks/RepeatingTransactionBlock/RepeatingTransactionBlock.es.js";
18
- import L from "../blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
19
- import P from "../blocks/ComponentBlocks/SavingsOpportunityBlock/SavingsOpportunityBlock.es.js";
20
- import { TransactionBlock as g } from "../blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
21
- import b from "../blocks/ComponentBlocks/UpcomingSubscriptionBlock/UpcomingSubscriptionBlock.es.js";
22
- import S from "../blocks/ComponentBlocks/WithdrawalBlock/WithdrawalBlock.es.js";
23
- import D from "../blocks/ImageBlocks/ImageBlock.es.js";
19
+ import P from "../blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
20
+ import g from "../blocks/ComponentBlocks/SavingsOpportunityBlock/SavingsOpportunityBlock.es.js";
21
+ import { TransactionBlock as b } from "../blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
22
+ import S from "../blocks/ComponentBlocks/UpcomingSubscriptionBlock/UpcomingSubscriptionBlock.es.js";
23
+ import D from "../blocks/ComponentBlocks/WithdrawalBlock/WithdrawalBlock.es.js";
24
+ import h from "../blocks/ImageBlocks/ImageBlock.es.js";
24
25
  import { SVGImageBlock as E } from "../blocks/ImageBlocks/SVGImageBlock/SVGImageBlock.es.js";
25
- import { FeedbackModalActionBlock as h } from "../actionBlocks/FeedbackModalActionBlock.es.js";
26
- import { ConnectionDetailActionBlock as K } from "../actionBlocks/ConnectionDetailActionBlock.es.js";
27
- import { ConnectWidgetActionBlock as R } from "../actionBlocks/ConnectWidgetActionBlock.es.js";
28
- import { SurveyModalActionBlock as v } from "../actionBlocks/SurveyModalActionBlock.es.js";
29
- import { SubscriptionStatusModalBlock as y } from "../actionBlocks/SubscriptionStatusModalBlock.es.js";
30
- import { PlaceholderActionBlock as M } from "../actionBlocks/PlaceholderActionBlock.es.js";
31
- import { getMakeTransferDrawerTitle as U } from "../actionBlocks/MakeTransferActionBlock/layout.es.js";
32
- import { MakeTransferActionBlockLayer as w } from "../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer.es.js";
33
- import { getDrawerHeaderTitle as G } from "../actionBlocks/TransactionHistoryBlock/utils.es.js";
34
- import { TransactionDetailsBlock as H } from "../actionBlocks/TransactionDetailsBlock/TransactionDetailsBlock.es.js";
26
+ import { FeedbackModalActionBlock as K } from "../actionBlocks/FeedbackModalActionBlock.es.js";
27
+ import { ConnectionDetailActionBlock as R } from "../actionBlocks/ConnectionDetailActionBlock.es.js";
28
+ import { ConnectWidgetActionBlock as v } from "../actionBlocks/ConnectWidgetActionBlock.es.js";
29
+ import { SurveyModalActionBlock as y } from "../actionBlocks/SurveyModalActionBlock.es.js";
30
+ import { SubscriptionStatusModalBlock as M } from "../actionBlocks/SubscriptionStatusModalBlock.es.js";
31
+ import { PlaceholderActionBlock as U } from "../actionBlocks/PlaceholderActionBlock.es.js";
32
+ import { getMakeTransferDrawerTitle as w } from "../actionBlocks/MakeTransferActionBlock/layout.es.js";
33
+ import { MakeTransferActionBlockLayer as G } from "../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer.es.js";
34
+ import { getDrawerHeaderTitle as H } from "../actionBlocks/TransactionHistoryBlock/utils.es.js";
35
+ import { TransactionDetailsBlock as F } from "../actionBlocks/TransactionDetailsBlock/TransactionDetailsBlock.es.js";
35
36
  import { useTransactionDetailsPrepare as c } from "../actionBlocks/TransactionDetailsBlock/useTransactionDetailsPrepare.es.js";
36
- import { TransactionHistoryBlock as F } from "../actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock.es.js";
37
- import { useTransactionHistoryPrepare as Y } from "../actionBlocks/TransactionHistoryBlock/useTransactionHistoryPrepare.es.js";
37
+ import { TransactionHistoryBlock as Y } from "../actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock.es.js";
38
+ import { useTransactionHistoryPrepare as x } from "../actionBlocks/TransactionHistoryBlock/useTransactionHistoryPrepare.es.js";
38
39
  import { useRecurringTransactionPrepare as m } from "../actionBlocks/RecurringTransactionBlock/useRecurringTransactionPrepare.es.js";
39
- import { RecurringTransactionBlock as x } from "../actionBlocks/RecurringTransactionBlock/RecurringTransactionBlock.es.js";
40
- import { HelpBlock as V } from "../actionBlocks/HelpBlock/HelpBlock.es.js";
41
- import { getTransactionListDrawerTitle as z } from "../actionBlocks/TransactionListBlock/layout.es.js";
42
- import { TransactionListBlock as W } from "../actionBlocks/TransactionListBlock/TransactionListBlock.es.js";
43
- import { RemainingCashBlock as q } from "../actionBlocks/RemainingCashBlock/RemainingCashBlock.es.js";
40
+ import { RecurringTransactionBlock as V } from "../actionBlocks/RecurringTransactionBlock/RecurringTransactionBlock.es.js";
41
+ import { HelpBlock as z } from "../actionBlocks/HelpBlock/HelpBlock.es.js";
42
+ import { getTransactionListDrawerTitle as W } from "../actionBlocks/TransactionListBlock/layout.es.js";
43
+ import { TransactionListBlock as q } from "../actionBlocks/TransactionListBlock/TransactionListBlock.es.js";
44
+ import { RemainingCashBlock as Z } from "../actionBlocks/RemainingCashBlock/RemainingCashBlock.es.js";
44
45
  import { AmountInputModalBlock as p } from "../actionBlocks/AmountInputModalBlock/AmountInputModalBlock.es.js";
45
- import { OverdraftBlock as Z, useOverdraftPrepare as j } from "../actionBlocks/OverdraftBlock/OverdraftBlock.es.js";
46
- import { AccountListBlock as J } from "../actionBlocks/AccountListBlock/AccountListBlock.es.js";
47
- import { useAccountListPrepare as Q } from "../actionBlocks/AccountListBlock/useAccountListPrepare.es.js";
48
- import { EmergencySavingsBlock as X } from "../actionBlocks/EmergencySavingsBlock/EmergencySavingsBlock.es.js";
49
- import { CreditUtilizationBlock as $ } from "../actionBlocks/CreditUtilizationBlock/CreditUtilizationBlock.es.js";
50
- import { useCreditUtilizationPrepare as oo } from "../actionBlocks/CreditUtilizationBlock/useCreditUtilizationPrepare.es.js";
51
- import { PayoffCalculatorBlock as to, usePayoffCalculatorPrepare as ro } from "../actionBlocks/PayoffCalculatorBlock/PayoffCalculatorBlock.es.js";
52
- import { BudgetDetailsBlock as eo } from "../actionBlocks/BudgetDetailsBlock/BudgetDetailsBlock.es.js";
53
- import { AccountDetailsBlock as io } from "../actionBlocks/AccountDetailsBlock/AccountDetailsBlock.es.js";
54
- import { useAccountDetailsPrepare as ao } from "../actionBlocks/AccountDetailsBlock/useAccountDetailsPrepare.es.js";
46
+ import { OverdraftBlock as j, useOverdraftPrepare as J } from "../actionBlocks/OverdraftBlock/OverdraftBlock.es.js";
47
+ import { AccountListBlock as Q } from "../actionBlocks/AccountListBlock/AccountListBlock.es.js";
48
+ import { useAccountListPrepare as X } from "../actionBlocks/AccountListBlock/useAccountListPrepare.es.js";
49
+ import { EmergencySavingsBlock as $ } from "../actionBlocks/EmergencySavingsBlock/EmergencySavingsBlock.es.js";
50
+ import { CreditUtilizationBlock as oo } from "../actionBlocks/CreditUtilizationBlock/CreditUtilizationBlock.es.js";
51
+ import { useCreditUtilizationPrepare as to } from "../actionBlocks/CreditUtilizationBlock/useCreditUtilizationPrepare.es.js";
52
+ import { PayoffCalculatorBlock as ro, usePayoffCalculatorPrepare as eo } from "../actionBlocks/PayoffCalculatorBlock/PayoffCalculatorBlock.es.js";
53
+ import { BudgetDetailsBlock as io } from "../actionBlocks/BudgetDetailsBlock/BudgetDetailsBlock.es.js";
54
+ import { AccountDetailsBlock as ao } from "../actionBlocks/AccountDetailsBlock/AccountDetailsBlock.es.js";
55
+ import { useAccountDetailsPrepare as no } from "../actionBlocks/AccountDetailsBlock/useAccountDetailsPrepare.es.js";
55
56
  var i = (e) => {
56
57
  }, t = (e) => ({
57
58
  get Component() {
@@ -66,34 +67,34 @@ var i = (e) => {
66
67
  get presentation() {
67
68
  return e().presentation;
68
69
  }
69
- }), mt = {
70
+ }), lt = {
70
71
  [o.PLACEHOLDER_ACTION_BLOCK]: t(() => ({
71
- Component: M,
72
+ Component: U,
72
73
  usePrepare: i,
73
74
  title: () => "Action Block Layer Drilldown"
74
75
  })),
75
76
  [o.MAKE_TRANSFER_ACTION_BLOCK]: t(() => ({
76
- Component: w,
77
+ Component: G,
77
78
  usePrepare: i,
78
- title: U
79
+ title: w
79
80
  })),
80
81
  [o.TRANSCATION_HISTORY_ACTION_BLOCK]: t(() => ({
81
- Component: F,
82
- usePrepare: Y,
83
- title: G
82
+ Component: Y,
83
+ usePrepare: x,
84
+ title: H
84
85
  })),
85
86
  [o.TRANSACTION_DETAILS_ACTION_BLOCK]: t(() => ({
86
- Component: H,
87
+ Component: F,
87
88
  usePrepare: c,
88
89
  title: () => "Transaction Details"
89
90
  })),
90
91
  [o.RECURRING_TRANSACTION_ACTION_BLOCK]: t(() => ({
91
- Component: x,
92
+ Component: V,
92
93
  usePrepare: m,
93
94
  title: (e, r) => r.recurring?.expense_details ?? ""
94
95
  })),
95
96
  [o.REMAINING_CASH_ACTION_BLOCK]: t(() => ({
96
- Component: q,
97
+ Component: Z,
97
98
  usePrepare: m,
98
99
  title: (e, r) => r.insights_feed?.remaining_cash?.title ?? ""
99
100
  })),
@@ -103,33 +104,33 @@ var i = (e) => {
103
104
  title: (e, r) => r.help?.request_support ?? ""
104
105
  })),
105
106
  [o.FEEDBACK_MODAL_ACTION_BLOCK]: t(() => ({
106
- Component: h,
107
+ Component: K,
107
108
  usePrepare: i,
108
109
  presentation: "modal"
109
110
  })),
110
111
  [o.CONNECTION_DETAIL_ACTION_BLOCK]: t(() => ({
111
- Component: K,
112
+ Component: R,
112
113
  usePrepare: i,
113
114
  title: (e, r) => r.insights_feed?.connection_details?.connection_details_drawer_title ?? ""
114
115
  })),
115
116
  [o.CONNECT_WIDGET_ACTION_BLOCK]: t(() => ({
116
- Component: R,
117
+ Component: v,
117
118
  usePrepare: i
118
119
  })),
119
120
  [o.SURVEY_MODAL_ACTION_BLOCK]: t(() => ({
120
- Component: v,
121
+ Component: y,
121
122
  usePrepare: i,
122
123
  presentation: "modal"
123
124
  })),
124
125
  [o.SUBSCRIPTION_STATUS_MODAL_ACTION_BLOCK]: t(() => ({
125
- Component: y,
126
+ Component: M,
126
127
  usePrepare: i,
127
128
  presentation: "modal"
128
129
  })),
129
130
  [o.TRANSACTION_LIST_ACTION_BLOCK]: t(() => ({
130
- Component: W,
131
+ Component: q,
131
132
  usePrepare: c,
132
- title: z
133
+ title: W
133
134
  })),
134
135
  [o.AMOUNT_INPUT_MODAL_ACTION_BLOCK]: t(() => ({
135
136
  Component: p,
@@ -142,45 +143,45 @@ var i = (e) => {
142
143
  usePrepare: i
143
144
  })),
144
145
  [o.OVERDRAFT_ACTION_BLOCK]: t(() => ({
145
- Component: Z,
146
- usePrepare: j,
146
+ Component: j,
147
+ usePrepare: J,
147
148
  title: (e, r, a) => a?.insights_payload?.title ?? ""
148
149
  })),
149
150
  [o.CREDIT_UTILIZATION_ACTION_BLOCK]: t(() => ({
150
- Component: $,
151
- usePrepare: oo,
151
+ Component: oo,
152
+ usePrepare: to,
152
153
  title: (e, r) => r.insights_feed?.credit_utilization?.title ?? ""
153
154
  })),
154
155
  [o.EMERGENCY_SAVINGS_ACTION_BLOCK]: t(() => ({
155
- Component: X,
156
+ Component: $,
156
157
  usePrepare: i,
157
158
  title: (e, r, a) => a?.insights_payload?.title ?? ""
158
159
  })),
159
160
  [o.PAYOFF_CALCULATOR_ACTION_BLOCK]: t(() => ({
160
- Component: to,
161
- usePrepare: ro,
161
+ Component: ro,
162
+ usePrepare: eo,
162
163
  title: (e, r) => r.insights_feed?.payoff_calculator?.title ?? ""
163
164
  })),
164
165
  [o.BUDGET_DETAILS_ACTION_BLOCK]: t(() => ({
165
- Component: eo,
166
+ Component: io,
166
167
  usePrepare: i,
167
168
  title: (e, r, a) => a?.insights_payload?.title || r.budgets?.details_title || ""
168
169
  })),
169
170
  [o.ACCOUNT_DETAILS_ACTION_BLOCK]: t(() => ({
170
- Component: io,
171
- usePrepare: ao,
171
+ Component: ao,
172
+ usePrepare: no,
172
173
  title: (e, r) => r.accounts?.account_details ?? ""
173
174
  })),
174
175
  [o.ACCOUNT_LIST_ACTION_BLOCK]: t(() => ({
175
- Component: J,
176
- usePrepare: Q,
176
+ Component: Q,
177
+ usePrepare: X,
177
178
  title: (e, r) => r.insights_feed?.account_list?.title ?? ""
178
179
  })),
179
180
  [o.HELP_ACTION_BLOCK]: t(() => ({
180
- Component: V,
181
+ Component: z,
181
182
  usePrepare: i
182
183
  }))
183
- }, pt = {
184
+ }, _t = {
184
185
  account_block: k,
185
186
  account_switch_block: A,
186
187
  direct_deposit_block: T,
@@ -190,24 +191,25 @@ var i = (e) => {
190
191
  donut_chart_block: u,
191
192
  double_bar_chart_block: s,
192
193
  double_progress_bar_block: B,
193
- goals_block: N,
194
- image_block: D,
195
- merchant_block: I,
196
- no_spend_days_block: d,
194
+ gas_purchase_block: N,
195
+ goals_block: I,
196
+ image_block: h,
197
+ merchant_block: d,
198
+ no_spend_days_block: L,
197
199
  repeating_transaction_block: n,
198
- save_extra_block: L,
199
- savings_amount_block: P,
200
+ save_extra_block: P,
201
+ savings_amount_block: g,
200
202
  step_chart_block: C,
201
203
  svg_image_block: E,
202
204
  upcoming_bill_block: n,
203
- upcoming_subscription_block: b,
204
- withdrawal_block: S,
205
- transaction_block: g
205
+ upcoming_subscription_block: S,
206
+ withdrawal_block: D,
207
+ transaction_block: b
206
208
  };
207
209
  export {
208
- mt as actionBlocks,
209
- pt as blocks,
210
- mo as hasDrawerBlock
210
+ lt as actionBlocks,
211
+ _t as blocks,
212
+ po as hasDrawerBlock
211
213
  };
212
214
 
213
215
  //# sourceMappingURL=blocks.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.es.js","names":[],"sources":["../../../src/insights-v2/mappings/blocks.ts"],"sourcesContent":["import {\n AccountBlock,\n AccountSwitchBlock,\n BarchartBlock,\n BudgetBlock,\n DebtsBlock,\n DetailedAccountBlock,\n DonutChartBlock,\n GoalsBlock,\n MerchantBlock,\n DoubleBarChartBlock,\n DoubleProgressBarBlock,\n NoSpendDaysBlock,\n RepeatingTransactionBlock,\n SaveExtraBlock,\n SavingsOpportunityBlock,\n SVGImageBlock,\n UpcomingSubscriptionBlock,\n WithdrawalBlock,\n TransactionBlock,\n} from '../blocks'\nimport StepChartBlock from '../blocks/ChartBlocks/StepChartBlock'\nimport ImageBlock from '../blocks/ImageBlocks/ImageBlock'\n\nimport type { Beat, GlobalCopy, InsightsPayload } from '../../core'\nimport { ContactSupportActionBlock } from '../actionBlocks/ContactSupportActionBlock'\nimport { FeedbackModalActionBlock } from '../actionBlocks/FeedbackModalActionBlock'\nimport { ConnectionDetailActionBlock } from '../actionBlocks/ConnectionDetailActionBlock'\nimport { ConnectWidgetActionBlock } from '../actionBlocks/ConnectWidgetActionBlock'\nimport { SurveyModalActionBlock } from '../actionBlocks/SurveyModalActionBlock'\nimport { SubscriptionStatusModalBlock } from '../actionBlocks/SubscriptionStatusModalBlock'\nimport { PlaceholderActionBlock } from '../actionBlocks/PlaceholderActionBlock'\nimport { MakeTransferActionBlockLayer } from '../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer'\nimport { getMakeTransferDrawerTitle } from '../actionBlocks/MakeTransferActionBlock/layout'\nimport { TransactionHistoryBlock } from '../actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock'\nimport { getDrawerHeaderTitle } from '../actionBlocks/TransactionHistoryBlock/utils'\nimport { useTransactionHistoryPrepare } from '../actionBlocks/TransactionHistoryBlock/useTransactionHistoryPrepare'\nimport {\n TransactionDetailsBlock,\n useTransactionDetailsPrepare,\n} from '../actionBlocks/TransactionDetailsBlock'\nimport {\n RecurringTransactionBlock,\n useRecurringTransactionPrepare,\n} from '../actionBlocks/RecurringTransactionBlock'\nimport { TransactionListBlock } from '../actionBlocks/TransactionListBlock'\nimport { getTransactionListDrawerTitle } from '../actionBlocks/TransactionListBlock/layout'\nimport { RemainingCashBlock } from '../actionBlocks/RemainingCashBlock'\nimport { AmountInputModalBlock } from '../actionBlocks/AmountInputModalBlock'\nimport { OverdraftBlock, useOverdraftPrepare } from '../actionBlocks/OverdraftBlock'\nimport { AccountListBlock, useAccountListPrepare } from '../actionBlocks/AccountListBlock'\nimport { EmergencySavingsBlock } from '../actionBlocks/EmergencySavingsBlock'\nimport {\n CreditUtilizationBlock,\n useCreditUtilizationPrepare,\n} from '../actionBlocks/CreditUtilizationBlock'\nimport {\n PayoffCalculatorBlock,\n usePayoffCalculatorPrepare,\n} from '../actionBlocks/PayoffCalculatorBlock'\nimport { BudgetDetailsBlock } from '../actionBlocks/BudgetDetailsBlock'\nimport { AccountDetailsBlock, useAccountDetailsPrepare } from '../actionBlocks/AccountDetailsBlock'\nimport { HelpBlock } from '../actionBlocks/HelpBlock'\n// Keys live in ./actionBlocksKey (imported directly by chart blocks/tests too) to avoid a\n// circular import between this module and the chart blocks — see that file for details.\nimport { actionBlocksKey } from './actionBlocksKey'\n\n// Drilldown indexes are not passed down: action blocks read them from\n// InsightsV2Store (useInsightsV2Store().actionDrawer).\nexport interface ActionBlockProps {\n beat: Beat\n}\n\nconst noop = (_: ActionBlockProps) => {}\n\n// Re-exported so existing `hasDrawerBlock` imports from this module keep working.\nexport { hasDrawerBlock } from './hasDrawerBlock'\n\nexport interface ActionBlockEntry {\n Component: React.ComponentType<ActionBlockProps>\n usePrepare: (props: ActionBlockProps) => void // required; default to noop in each entry\n // Resolves the drawer title from the clicked CTA's variant + copy, with the beat available\n // for blocks that title from beat fields (e.g. transaction-list reads insights_payload.title).\n // Falls back to the CTA label when the resolver returns an empty string / is absent.\n title?: (variant: string | null | undefined, copy: GlobalCopy, beat?: Beat) => string\n // 'drawer' (default) or 'modal' (component renders its own dialog, no Drawer wrapper).\n presentation?: 'drawer' | 'modal'\n}\n\n// Registry of drawer drilldowns, keyed by the `block` name the backend sends Add\n// `usePrepare` when the block needs to load data before rendering.\n\n/**\n * A registry entry whose fields read their imports when used, not when this module loads. Some\n * registered blocks render `TransactionDetails`, whose embedded card mounts `ActionBlockLayer`,\n * which imports this registry: when one of those blocks loads first, its own import is not\n * initialised yet while this module evaluates, so a value copied at load would be `undefined`\n * (or throw under native ES modules). Reading on access sees the finished import.\n */\nconst liveEntry = (resolve: () => ActionBlockEntry): ActionBlockEntry => ({\n get Component() {\n return resolve().Component\n },\n get usePrepare() {\n return resolve().usePrepare\n },\n get title() {\n return resolve().title\n },\n get presentation() {\n return resolve().presentation\n },\n})\n\nexport const actionBlocks = {\n [actionBlocksKey.PLACEHOLDER_ACTION_BLOCK]: liveEntry(() => ({\n Component: PlaceholderActionBlock,\n usePrepare: noop,\n title: () => 'Action Block Layer Drilldown',\n })),\n [actionBlocksKey.MAKE_TRANSFER_ACTION_BLOCK]: liveEntry(() => ({\n Component: MakeTransferActionBlockLayer,\n usePrepare: noop,\n title: getMakeTransferDrawerTitle,\n })),\n [actionBlocksKey.TRANSCATION_HISTORY_ACTION_BLOCK]: liveEntry(() => ({\n Component: TransactionHistoryBlock,\n usePrepare: useTransactionHistoryPrepare,\n title: getDrawerHeaderTitle,\n })),\n [actionBlocksKey.TRANSACTION_DETAILS_ACTION_BLOCK]: liveEntry(() => ({\n Component: TransactionDetailsBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: () => 'Transaction Details',\n })),\n // Expense Details for one recurring subscription. Which subscription a beat names is resolved in\n // `RecurringTransactionBlock/subscriptionBeats.ts`, not through this registry.\n [actionBlocksKey.RECURRING_TRANSACTION_ACTION_BLOCK]: liveEntry(() => ({\n Component: RecurringTransactionBlock,\n usePrepare: useRecurringTransactionPrepare,\n title: (_variant, copy) => copy.recurring?.expense_details ?? '',\n })),\n // Remaining Cash for the Payday Cash Left Over Status beat. Store-driven: reuses the recurring\n // loader, which also loads accounts and categories, so CashflowStore's computeds are ready.\n [actionBlocksKey.REMAINING_CASH_ACTION_BLOCK]: liveEntry(() => ({\n Component: RemainingCashBlock,\n usePrepare: useRecurringTransactionPrepare,\n title: (_variant, copy) => copy.insights_feed?.remaining_cash?.title ?? '',\n })),\n // The block renders its own drawer (the help module's RequestSupport) on top of the action\n // drawer, so the action drawer's title is the CTA label.\n [actionBlocksKey.CONTACT_SUPPORT_ACTION_BLOCK]: liveEntry(() => ({\n Component: ContactSupportActionBlock,\n usePrepare: noop,\n title: (_variant, copy) => copy.help?.request_support ?? '',\n })),\n [actionBlocksKey.FEEDBACK_MODAL_ACTION_BLOCK]: liveEntry(() => ({\n Component: FeedbackModalActionBlock,\n usePrepare: noop,\n presentation: 'modal',\n })),\n [actionBlocksKey.CONNECTION_DETAIL_ACTION_BLOCK]: liveEntry(() => ({\n Component: ConnectionDetailActionBlock,\n usePrepare: noop,\n title: (_variant, copy) =>\n copy.insights_feed?.connection_details?.connection_details_drawer_title ?? '',\n })),\n // Boots MX's Connect widget (web-widget-sdk iframe) inside the action\n // drawer; the drawer title falls back to the CTA label.\n [actionBlocksKey.CONNECT_WIDGET_ACTION_BLOCK]: liveEntry(() => ({\n Component: ConnectWidgetActionBlock,\n usePrepare: noop,\n })),\n [actionBlocksKey.SURVEY_MODAL_ACTION_BLOCK]: liveEntry(() => ({\n Component: SurveyModalActionBlock,\n usePrepare: noop,\n presentation: 'modal',\n })),\n // Unexpected Subscription Payment's Subscription Status modal.\n [actionBlocksKey.SUBSCRIPTION_STATUS_MODAL_ACTION_BLOCK]: liveEntry(() => ({\n Component: SubscriptionStatusModalBlock,\n usePrepare: noop,\n presentation: 'modal',\n })),\n [actionBlocksKey.TRANSACTION_LIST_ACTION_BLOCK]: liveEntry(() => ({\n Component: TransactionListBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: getTransactionListDrawerTitle,\n })),\n // One whole-dollar setting in a dialog; the CTA variant picks which (low-balance threshold or\n // safety net). A modal: no drawer, so no drawer title.\n [actionBlocksKey.AMOUNT_INPUT_MODAL_ACTION_BLOCK]: liveEntry(() => ({\n Component: AmountInputModalBlock,\n presentation: 'modal',\n // Loads inside the block: it mounts only while open, so mounting is the open-time load.\n usePrepare: noop,\n })),\n // Savings Opportunity's safety-net reminder (secondary CTA). ditto names a dedicated\n // `safety_net_block` with no CTA variant, so it opens the same amount-input modal, which reads the\n // safety_net variant from the block name (see resolveAmountInputVariant).\n [actionBlocksKey.SAFETY_NET_ACTION_BLOCK]: liveEntry(() => ({\n Component: AmountInputModalBlock,\n presentation: 'modal',\n usePrepare: noop,\n })),\n // Transparent Overdraft's \"Learn more\": the projected overdraft, its account and the confidence\n // meter. Titled from the beat, as the pulse drawer was.\n [actionBlocksKey.OVERDRAFT_ACTION_BLOCK]: liveEntry(() => ({\n Component: OverdraftBlock,\n usePrepare: useOverdraftPrepare,\n title: (_variant, _copy, beat) => beat?.insights_payload?.title ?? '',\n })),\n // Credit Utilization's \"Learn more\": donut summary, legend and the per-card list. Loads accounts\n // for the institution logos; the rows themselves ride on the beat.\n [actionBlocksKey.CREDIT_UTILIZATION_ACTION_BLOCK]: liveEntry(() => ({\n Component: CreditUtilizationBlock,\n usePrepare: useCreditUtilizationPrepare,\n title: (_variant, copy) => copy.insights_feed?.credit_utilization?.title ?? '',\n })),\n [actionBlocksKey.EMERGENCY_SAVINGS_ACTION_BLOCK]: liveEntry(() => ({\n Component: EmergencySavingsBlock,\n usePrepare: noop,\n title: (_variant, _copy, beat) => beat?.insights_payload?.title ?? '',\n })),\n // Monthly Credit Card Interest Summary's \"Learn how to save\": the credit card payoff calculator.\n [actionBlocksKey.PAYOFF_CALCULATOR_ACTION_BLOCK]: liveEntry(() => ({\n Component: PayoffCalculatorBlock,\n usePrepare: usePayoffCalculatorPrepare,\n title: (_variant, copy) => copy.insights_feed?.payoff_calculator?.title ?? '',\n })),\n [actionBlocksKey.BUDGET_DETAILS_ACTION_BLOCK]: liveEntry(() => ({\n Component: BudgetDetailsBlock,\n usePrepare: noop,\n title: (_variant, copy, beat) =>\n beat?.insights_payload?.title || copy.budgets?.details_title || '',\n })),\n // The accounts widget's account details (header, trend chart, tabs, connection, actions) for the\n // beat's primary account. Shared by every beat that opens an account.\n [actionBlocksKey.ACCOUNT_DETAILS_ACTION_BLOCK]: liveEntry(() => ({\n Component: AccountDetailsBlock,\n usePrepare: useAccountDetailsPrepare,\n title: (_variant, copy) => copy.accounts?.account_details ?? '',\n })),\n // Monthly Obligations Status's account list: the beat's calculation and the accounts behind it.\n [actionBlocksKey.ACCOUNT_LIST_ACTION_BLOCK]: liveEntry(() => ({\n Component: AccountListBlock,\n usePrepare: useAccountListPrepare,\n title: (_variant, copy) => copy.insights_feed?.account_list?.title ?? '',\n })),\n // A beat's \"Learn More\": its pre-localized help title and body from the payload's\n // `drilldown_data`. The drawer title is the CTA label.\n [actionBlocksKey.HELP_ACTION_BLOCK]: liveEntry(() => ({\n Component: HelpBlock,\n usePrepare: noop,\n })),\n} as Record<string, ActionBlockEntry>\n\nexport const blocks = {\n account_block: AccountBlock,\n account_switch_block: AccountSwitchBlock,\n direct_deposit_block: DetailedAccountBlock,\n bar_chart_block: BarchartBlock,\n budget_block: BudgetBlock,\n debts_block: DebtsBlock,\n donut_chart_block: DonutChartBlock,\n double_bar_chart_block: DoubleBarChartBlock,\n double_progress_bar_block: DoubleProgressBarBlock,\n goals_block: GoalsBlock,\n image_block: ImageBlock,\n merchant_block: MerchantBlock,\n no_spend_days_block: NoSpendDaysBlock,\n repeating_transaction_block: RepeatingTransactionBlock,\n save_extra_block: SaveExtraBlock,\n savings_amount_block: SavingsOpportunityBlock,\n step_chart_block: StepChartBlock,\n svg_image_block: SVGImageBlock,\n upcoming_bill_block: RepeatingTransactionBlock,\n upcoming_subscription_block: UpcomingSubscriptionBlock,\n withdrawal_block: WithdrawalBlock,\n transaction_block: TransactionBlock,\n} as Record<string, React.ComponentType<{ payload: InsightsPayload; beatGuid?: string }>>\n"],"mappings":"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"}
1
+ {"version":3,"file":"blocks.es.js","names":[],"sources":["../../../src/insights-v2/mappings/blocks.ts"],"sourcesContent":["import {\n AccountBlock,\n AccountSwitchBlock,\n BarchartBlock,\n BudgetBlock,\n DebtsBlock,\n DetailedAccountBlock,\n DonutChartBlock,\n GasPurchaseBlock,\n GoalsBlock,\n MerchantBlock,\n DoubleBarChartBlock,\n DoubleProgressBarBlock,\n NoSpendDaysBlock,\n RepeatingTransactionBlock,\n SaveExtraBlock,\n SavingsOpportunityBlock,\n SVGImageBlock,\n UpcomingSubscriptionBlock,\n WithdrawalBlock,\n TransactionBlock,\n} from '../blocks'\nimport StepChartBlock from '../blocks/ChartBlocks/StepChartBlock'\nimport ImageBlock from '../blocks/ImageBlocks/ImageBlock'\n\nimport type { Beat, GlobalCopy, InsightsPayload } from '../../core'\nimport { ContactSupportActionBlock } from '../actionBlocks/ContactSupportActionBlock'\nimport { FeedbackModalActionBlock } from '../actionBlocks/FeedbackModalActionBlock'\nimport { ConnectionDetailActionBlock } from '../actionBlocks/ConnectionDetailActionBlock'\nimport { ConnectWidgetActionBlock } from '../actionBlocks/ConnectWidgetActionBlock'\nimport { SurveyModalActionBlock } from '../actionBlocks/SurveyModalActionBlock'\nimport { SubscriptionStatusModalBlock } from '../actionBlocks/SubscriptionStatusModalBlock'\nimport { PlaceholderActionBlock } from '../actionBlocks/PlaceholderActionBlock'\nimport { MakeTransferActionBlockLayer } from '../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer'\nimport { getMakeTransferDrawerTitle } from '../actionBlocks/MakeTransferActionBlock/layout'\nimport { TransactionHistoryBlock } from '../actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock'\nimport { getDrawerHeaderTitle } from '../actionBlocks/TransactionHistoryBlock/utils'\nimport { useTransactionHistoryPrepare } from '../actionBlocks/TransactionHistoryBlock/useTransactionHistoryPrepare'\nimport {\n TransactionDetailsBlock,\n useTransactionDetailsPrepare,\n} from '../actionBlocks/TransactionDetailsBlock'\nimport {\n RecurringTransactionBlock,\n useRecurringTransactionPrepare,\n} from '../actionBlocks/RecurringTransactionBlock'\nimport { TransactionListBlock } from '../actionBlocks/TransactionListBlock'\nimport { getTransactionListDrawerTitle } from '../actionBlocks/TransactionListBlock/layout'\nimport { RemainingCashBlock } from '../actionBlocks/RemainingCashBlock'\nimport { AmountInputModalBlock } from '../actionBlocks/AmountInputModalBlock'\nimport { OverdraftBlock, useOverdraftPrepare } from '../actionBlocks/OverdraftBlock'\nimport { AccountListBlock, useAccountListPrepare } from '../actionBlocks/AccountListBlock'\nimport { EmergencySavingsBlock } from '../actionBlocks/EmergencySavingsBlock'\nimport {\n CreditUtilizationBlock,\n useCreditUtilizationPrepare,\n} from '../actionBlocks/CreditUtilizationBlock'\nimport {\n PayoffCalculatorBlock,\n usePayoffCalculatorPrepare,\n} from '../actionBlocks/PayoffCalculatorBlock'\nimport { BudgetDetailsBlock } from '../actionBlocks/BudgetDetailsBlock'\nimport { AccountDetailsBlock, useAccountDetailsPrepare } from '../actionBlocks/AccountDetailsBlock'\nimport { HelpBlock } from '../actionBlocks/HelpBlock'\n// Keys live in ./actionBlocksKey (imported directly by chart blocks/tests too) to avoid a\n// circular import between this module and the chart blocks — see that file for details.\nimport { actionBlocksKey } from './actionBlocksKey'\n\n// Drilldown indexes are not passed down: action blocks read them from\n// InsightsV2Store (useInsightsV2Store().actionDrawer).\nexport interface ActionBlockProps {\n beat: Beat\n}\n\nconst noop = (_: ActionBlockProps) => {}\n\n// Re-exported so existing `hasDrawerBlock` imports from this module keep working.\nexport { hasDrawerBlock } from './hasDrawerBlock'\n\nexport interface ActionBlockEntry {\n Component: React.ComponentType<ActionBlockProps>\n usePrepare: (props: ActionBlockProps) => void // required; default to noop in each entry\n // Resolves the drawer title from the clicked CTA's variant + copy, with the beat available\n // for blocks that title from beat fields (e.g. transaction-list reads insights_payload.title).\n // Falls back to the CTA label when the resolver returns an empty string / is absent.\n title?: (variant: string | null | undefined, copy: GlobalCopy, beat?: Beat) => string\n // 'drawer' (default) or 'modal' (component renders its own dialog, no Drawer wrapper).\n presentation?: 'drawer' | 'modal'\n}\n\n// Registry of drawer drilldowns, keyed by the `block` name the backend sends Add\n// `usePrepare` when the block needs to load data before rendering.\n\n/**\n * A registry entry whose fields read their imports when used, not when this module loads. Some\n * registered blocks render `TransactionDetails`, whose embedded card mounts `ActionBlockLayer`,\n * which imports this registry: when one of those blocks loads first, its own import is not\n * initialised yet while this module evaluates, so a value copied at load would be `undefined`\n * (or throw under native ES modules). Reading on access sees the finished import.\n */\nconst liveEntry = (resolve: () => ActionBlockEntry): ActionBlockEntry => ({\n get Component() {\n return resolve().Component\n },\n get usePrepare() {\n return resolve().usePrepare\n },\n get title() {\n return resolve().title\n },\n get presentation() {\n return resolve().presentation\n },\n})\n\nexport const actionBlocks = {\n [actionBlocksKey.PLACEHOLDER_ACTION_BLOCK]: liveEntry(() => ({\n Component: PlaceholderActionBlock,\n usePrepare: noop,\n title: () => 'Action Block Layer Drilldown',\n })),\n [actionBlocksKey.MAKE_TRANSFER_ACTION_BLOCK]: liveEntry(() => ({\n Component: MakeTransferActionBlockLayer,\n usePrepare: noop,\n title: getMakeTransferDrawerTitle,\n })),\n [actionBlocksKey.TRANSCATION_HISTORY_ACTION_BLOCK]: liveEntry(() => ({\n Component: TransactionHistoryBlock,\n usePrepare: useTransactionHistoryPrepare,\n title: getDrawerHeaderTitle,\n })),\n [actionBlocksKey.TRANSACTION_DETAILS_ACTION_BLOCK]: liveEntry(() => ({\n Component: TransactionDetailsBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: () => 'Transaction Details',\n })),\n // Expense Details for one recurring subscription. Which subscription a beat names is resolved in\n // `RecurringTransactionBlock/subscriptionBeats.ts`, not through this registry.\n [actionBlocksKey.RECURRING_TRANSACTION_ACTION_BLOCK]: liveEntry(() => ({\n Component: RecurringTransactionBlock,\n usePrepare: useRecurringTransactionPrepare,\n title: (_variant, copy) => copy.recurring?.expense_details ?? '',\n })),\n // Remaining Cash for the Payday Cash Left Over Status beat. Store-driven: reuses the recurring\n // loader, which also loads accounts and categories, so CashflowStore's computeds are ready.\n [actionBlocksKey.REMAINING_CASH_ACTION_BLOCK]: liveEntry(() => ({\n Component: RemainingCashBlock,\n usePrepare: useRecurringTransactionPrepare,\n title: (_variant, copy) => copy.insights_feed?.remaining_cash?.title ?? '',\n })),\n // The block renders its own drawer (the help module's RequestSupport) on top of the action\n // drawer, so the action drawer's title is the CTA label.\n [actionBlocksKey.CONTACT_SUPPORT_ACTION_BLOCK]: liveEntry(() => ({\n Component: ContactSupportActionBlock,\n usePrepare: noop,\n title: (_variant, copy) => copy.help?.request_support ?? '',\n })),\n [actionBlocksKey.FEEDBACK_MODAL_ACTION_BLOCK]: liveEntry(() => ({\n Component: FeedbackModalActionBlock,\n usePrepare: noop,\n presentation: 'modal',\n })),\n [actionBlocksKey.CONNECTION_DETAIL_ACTION_BLOCK]: liveEntry(() => ({\n Component: ConnectionDetailActionBlock,\n usePrepare: noop,\n title: (_variant, copy) =>\n copy.insights_feed?.connection_details?.connection_details_drawer_title ?? '',\n })),\n // Boots MX's Connect widget (web-widget-sdk iframe) inside the action\n // drawer; the drawer title falls back to the CTA label.\n [actionBlocksKey.CONNECT_WIDGET_ACTION_BLOCK]: liveEntry(() => ({\n Component: ConnectWidgetActionBlock,\n usePrepare: noop,\n })),\n [actionBlocksKey.SURVEY_MODAL_ACTION_BLOCK]: liveEntry(() => ({\n Component: SurveyModalActionBlock,\n usePrepare: noop,\n presentation: 'modal',\n })),\n // Unexpected Subscription Payment's Subscription Status modal.\n [actionBlocksKey.SUBSCRIPTION_STATUS_MODAL_ACTION_BLOCK]: liveEntry(() => ({\n Component: SubscriptionStatusModalBlock,\n usePrepare: noop,\n presentation: 'modal',\n })),\n [actionBlocksKey.TRANSACTION_LIST_ACTION_BLOCK]: liveEntry(() => ({\n Component: TransactionListBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: getTransactionListDrawerTitle,\n })),\n // One whole-dollar setting in a dialog; the CTA variant picks which (low-balance threshold or\n // safety net). A modal: no drawer, so no drawer title.\n [actionBlocksKey.AMOUNT_INPUT_MODAL_ACTION_BLOCK]: liveEntry(() => ({\n Component: AmountInputModalBlock,\n presentation: 'modal',\n // Loads inside the block: it mounts only while open, so mounting is the open-time load.\n usePrepare: noop,\n })),\n // Savings Opportunity's safety-net reminder (secondary CTA). ditto names a dedicated\n // `safety_net_block` with no CTA variant, so it opens the same amount-input modal, which reads the\n // safety_net variant from the block name (see resolveAmountInputVariant).\n [actionBlocksKey.SAFETY_NET_ACTION_BLOCK]: liveEntry(() => ({\n Component: AmountInputModalBlock,\n presentation: 'modal',\n usePrepare: noop,\n })),\n // Transparent Overdraft's \"Learn more\": the projected overdraft, its account and the confidence\n // meter. Titled from the beat, as the pulse drawer was.\n [actionBlocksKey.OVERDRAFT_ACTION_BLOCK]: liveEntry(() => ({\n Component: OverdraftBlock,\n usePrepare: useOverdraftPrepare,\n title: (_variant, _copy, beat) => beat?.insights_payload?.title ?? '',\n })),\n // Credit Utilization's \"Learn more\": donut summary, legend and the per-card list. Loads accounts\n // for the institution logos; the rows themselves ride on the beat.\n [actionBlocksKey.CREDIT_UTILIZATION_ACTION_BLOCK]: liveEntry(() => ({\n Component: CreditUtilizationBlock,\n usePrepare: useCreditUtilizationPrepare,\n title: (_variant, copy) => copy.insights_feed?.credit_utilization?.title ?? '',\n })),\n [actionBlocksKey.EMERGENCY_SAVINGS_ACTION_BLOCK]: liveEntry(() => ({\n Component: EmergencySavingsBlock,\n usePrepare: noop,\n title: (_variant, _copy, beat) => beat?.insights_payload?.title ?? '',\n })),\n // Monthly Credit Card Interest Summary's \"Learn how to save\": the credit card payoff calculator.\n [actionBlocksKey.PAYOFF_CALCULATOR_ACTION_BLOCK]: liveEntry(() => ({\n Component: PayoffCalculatorBlock,\n usePrepare: usePayoffCalculatorPrepare,\n title: (_variant, copy) => copy.insights_feed?.payoff_calculator?.title ?? '',\n })),\n [actionBlocksKey.BUDGET_DETAILS_ACTION_BLOCK]: liveEntry(() => ({\n Component: BudgetDetailsBlock,\n usePrepare: noop,\n title: (_variant, copy, beat) =>\n beat?.insights_payload?.title || copy.budgets?.details_title || '',\n })),\n // The accounts widget's account details (header, trend chart, tabs, connection, actions) for the\n // beat's primary account. Shared by every beat that opens an account.\n [actionBlocksKey.ACCOUNT_DETAILS_ACTION_BLOCK]: liveEntry(() => ({\n Component: AccountDetailsBlock,\n usePrepare: useAccountDetailsPrepare,\n title: (_variant, copy) => copy.accounts?.account_details ?? '',\n })),\n // Monthly Obligations Status's account list: the beat's calculation and the accounts behind it.\n [actionBlocksKey.ACCOUNT_LIST_ACTION_BLOCK]: liveEntry(() => ({\n Component: AccountListBlock,\n usePrepare: useAccountListPrepare,\n title: (_variant, copy) => copy.insights_feed?.account_list?.title ?? '',\n })),\n // A beat's \"Learn More\": its pre-localized help title and body from the payload's\n // `drilldown_data`. The drawer title is the CTA label.\n [actionBlocksKey.HELP_ACTION_BLOCK]: liveEntry(() => ({\n Component: HelpBlock,\n usePrepare: noop,\n })),\n} as Record<string, ActionBlockEntry>\n\nexport const blocks = {\n account_block: AccountBlock,\n account_switch_block: AccountSwitchBlock,\n direct_deposit_block: DetailedAccountBlock,\n bar_chart_block: BarchartBlock,\n budget_block: BudgetBlock,\n debts_block: DebtsBlock,\n donut_chart_block: DonutChartBlock,\n double_bar_chart_block: DoubleBarChartBlock,\n double_progress_bar_block: DoubleProgressBarBlock,\n gas_purchase_block: GasPurchaseBlock,\n goals_block: GoalsBlock,\n image_block: ImageBlock,\n merchant_block: MerchantBlock,\n no_spend_days_block: NoSpendDaysBlock,\n repeating_transaction_block: RepeatingTransactionBlock,\n save_extra_block: SaveExtraBlock,\n savings_amount_block: SavingsOpportunityBlock,\n step_chart_block: StepChartBlock,\n svg_image_block: SVGImageBlock,\n upcoming_bill_block: RepeatingTransactionBlock,\n upcoming_subscription_block: UpcomingSubscriptionBlock,\n withdrawal_block: WithdrawalBlock,\n transaction_block: TransactionBlock,\n} as Record<string, React.ComponentType<{ payload: InsightsPayload; beatGuid?: string }>>\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mx-cartographer/experiences",
3
- "version": "9.7.100",
3
+ "version": "9.7.102",
4
4
  "description": "Library containing experience widgets",
5
5
  "author": "MX",
6
6
  "license": "MIT",