@mx-cartographer/experiences 9.4.10-alpha.al1 → 9.4.11
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.
- package/CHANGELOG.md +5 -0
- package/dist/core/types/InsightsInstanceSlotData.d.ts +8 -1
- package/dist/core/types/InsightsInstanceSlotData.es.js.map +1 -1
- package/dist/insights-v2/blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.d.ts +10 -0
- package/dist/insights-v2/blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js +43 -0
- package/dist/insights-v2/blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js.map +1 -0
- package/dist/insights-v2/blocks/ComponentBlocks/AccountSwitchBlock/index.d.ts +1 -0
- package/dist/insights-v2/blocks/ComponentBlocks/index.d.ts +1 -0
- package/dist/insights-v2/components/TransferLogoCard.d.ts +3 -1
- package/dist/insights-v2/components/TransferLogoCard.es.js +51 -45
- package/dist/insights-v2/components/TransferLogoCard.es.js.map +1 -1
- package/dist/insights-v2/components/celebrationGradients.d.ts +6 -0
- package/dist/insights-v2/components/celebrationGradients.es.js +2 -1
- package/dist/insights-v2/components/celebrationGradients.es.js.map +1 -1
- package/dist/insights-v2/index.es.js +48 -46
- package/dist/insights-v2/mappings/blocks.es.js +32 -30
- package/dist/insights-v2/mappings/blocks.es.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
## [9.4.11] - 09-02-2026
|
|
2
|
+
|
|
3
|
+
- **ADDED** - insights-v2 `AccountSwitchBlock` component block for the discovered-accounts connect insight: two institution logos on a `TransferLogoCard` track, gated on the payload `is_connected` flag — a pending state (link badge) and a connected success state (success badge + `ACCOUNT_CONNECTED_GRADIENT` wash + confetti); registered as `account_switch_block` in `mappings/blocks.ts` (WEC-1310)
|
|
4
|
+
- **ADDED** - `TransferLogoCard` `dotColor` prop (theme-aware connector dots) and `ACCOUNT_CONNECTED_GRADIENT` (20% warm→pink success wash) in `celebrationGradients`; `AccountSwitchBlockData` added to the insights-v2 instance-slot-data union (WEC-1310)
|
|
5
|
+
|
|
1
6
|
## [9.4.10] - 09-01-2026
|
|
2
7
|
|
|
3
8
|
- **FIXED** - `background_color`/`paper_color` are treated as light-mode colors under `mode: browser`, preventing white-on-white text in dark mode (MEW-3445)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DataSeries, Legends } from '../../core';
|
|
2
2
|
import { Transaction } from './Transaction';
|
|
3
|
-
export interface InsightsInstanceSlotData extends Partial<BarChartBlockData>, Partial<BudgetBlockData>, Partial<DonutChartBlockData>, Partial<DoubleProgressBarBlockData>, Partial<ImageBlockData>, Partial<AccountBlockData>, Partial<SaveExtraBlockData>, Partial<StepChartBlockData>, Partial<SVGImageBlockData>, Partial<CategoryTransactionsBlockData>, Partial<CommonProps> {
|
|
3
|
+
export interface InsightsInstanceSlotData extends Partial<BarChartBlockData>, Partial<BudgetBlockData>, Partial<DonutChartBlockData>, Partial<DoubleProgressBarBlockData>, Partial<ImageBlockData>, Partial<AccountBlockData>, Partial<SaveExtraBlockData>, Partial<StepChartBlockData>, Partial<SVGImageBlockData>, Partial<CategoryTransactionsBlockData>, Partial<AccountSwitchBlockData>, Partial<CommonProps> {
|
|
4
4
|
}
|
|
5
5
|
interface CommonProps {
|
|
6
6
|
amount?: number;
|
|
@@ -80,6 +80,13 @@ export interface SaveExtraBlockData {
|
|
|
80
80
|
/** SAVE_ENOUGH_TO_LIVE_ON: date for the "Your available balances as of {date}" line. */
|
|
81
81
|
date?: string;
|
|
82
82
|
}
|
|
83
|
+
export interface AccountSwitchBlockData {
|
|
84
|
+
discovered_institution_guid: string;
|
|
85
|
+
discovered_institution_name: string;
|
|
86
|
+
held_institution_guid: string;
|
|
87
|
+
held_institution_name: string;
|
|
88
|
+
is_connected: boolean;
|
|
89
|
+
}
|
|
83
90
|
export interface StepChartBlockData {
|
|
84
91
|
completed_steps: number;
|
|
85
92
|
label_1: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightsInstanceSlotData.es.js","names":[],"sources":["../../../src/core/types/InsightsInstanceSlotData.ts"],"sourcesContent":["import type { DataSeries, Legends } from '../../core'\nimport type { Transaction } from './Transaction'\n\nexport interface InsightsInstanceSlotData\n extends\n Partial<BarChartBlockData>,\n Partial<BudgetBlockData>,\n Partial<DonutChartBlockData>,\n Partial<DoubleProgressBarBlockData>,\n Partial<ImageBlockData>,\n Partial<AccountBlockData>,\n Partial<SaveExtraBlockData>,\n Partial<StepChartBlockData>,\n Partial<SVGImageBlockData>,\n Partial<CategoryTransactionsBlockData>,\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 legends?: (Legends | LegendProps)[]\n category_guid?: string\n data_series?: DataSeries | DataSet[]\n}\n\n//BarChart Block\nexport interface BarChartBlockData {\n average_amount?: number\n ariaLabel?: string\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 formattedComparison: string\n formattedMain: string\n label: string\n main: number\n}\n\n//DoubleProgressBar Block\n\ninterface DoubleProgressBarProps {\n label: string\n value: number\n}\nexport interface DoubleProgressBarBlockData {\n doubleProgressBar: {\n previous: DoubleProgressBarProps\n latest: DoubleProgressBarProps\n }\n}\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// 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\nexport type InsightTransaction = Pick<Transaction, 'amount'> &\n Partial<Pick<Transaction, 'category_guid' | 'date' | 'description' | 'merchant_guid'>> & {\n merchant_name?: string\n }\n\nexport interface CategoryTransactionsBlockData {\n primary_transaction?: InsightTransaction\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"InsightsInstanceSlotData.es.js","names":[],"sources":["../../../src/core/types/InsightsInstanceSlotData.ts"],"sourcesContent":["import type { DataSeries, Legends } from '../../core'\nimport type { Transaction } from './Transaction'\n\nexport interface InsightsInstanceSlotData\n extends\n Partial<BarChartBlockData>,\n Partial<BudgetBlockData>,\n Partial<DonutChartBlockData>,\n Partial<DoubleProgressBarBlockData>,\n Partial<ImageBlockData>,\n Partial<AccountBlockData>,\n Partial<SaveExtraBlockData>,\n Partial<StepChartBlockData>,\n Partial<SVGImageBlockData>,\n Partial<CategoryTransactionsBlockData>,\n Partial<AccountSwitchBlockData>,\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 legends?: (Legends | LegendProps)[]\n category_guid?: string\n data_series?: DataSeries | DataSet[]\n}\n\n//BarChart Block\nexport interface BarChartBlockData {\n average_amount?: number\n ariaLabel?: string\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 formattedComparison: string\n formattedMain: string\n label: string\n main: number\n}\n\n//DoubleProgressBar Block\n\ninterface DoubleProgressBarProps {\n label: string\n value: number\n}\nexport interface DoubleProgressBarBlockData {\n doubleProgressBar: {\n previous: DoubleProgressBarProps\n latest: DoubleProgressBarProps\n }\n}\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\nexport interface AccountSwitchBlockData {\n discovered_institution_guid: string\n discovered_institution_name: string\n held_institution_guid: string\n held_institution_name: string\n is_connected: boolean\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\nexport type InsightTransaction = Pick<Transaction, 'amount'> &\n Partial<Pick<Transaction, 'category_guid' | 'date' | 'description' | 'merchant_guid'>> & {\n merchant_name?: string\n }\n\nexport interface CategoryTransactionsBlockData {\n primary_transaction?: InsightTransaction\n}\n"],"mappings":"AAoIA,IAAY,IAAL,0BAAA,GAAA;AACL,SAAA,EAAA,kBAAA,OACA,EAAA,qBAAA,UACA,EAAA,wBAAA;AACF,GAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AccountSwitchBlockData } from '../../../../core/types/InsightsInstanceSlotData';
|
|
2
|
+
import { BlockProps } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Discovered-accounts connect visual: two institution logos on a transfer track.
|
|
5
|
+
* The pending state (`is_connected: false`) shows a link badge on the default
|
|
6
|
+
* slot; the connected state (`is_connected: true`) switches to a success badge
|
|
7
|
+
* with the discovered-accounts gradient and a confetti wash.
|
|
8
|
+
*/
|
|
9
|
+
declare const AccountSwitchBlock: ({ payload }: BlockProps<AccountSwitchBlockData>) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export default AccountSwitchBlock;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import "../../../components/celebrationGradients.es.js";
|
|
2
|
+
import u from "../../../components/TransferLogoCard.es.js";
|
|
3
|
+
import { InstitutionLogo as i } from "@mxenabled/mxui";
|
|
4
|
+
import { Icon as e } from "@mxenabled/mx-icons";
|
|
5
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
6
|
+
var r = 64, m = /* @__PURE__ */ o(e, {
|
|
7
|
+
"aria-hidden": !0,
|
|
8
|
+
name: "link",
|
|
9
|
+
size: 20,
|
|
10
|
+
sx: { color: "primary.contrastText" }
|
|
11
|
+
}), g = /* @__PURE__ */ o(e, {
|
|
12
|
+
"aria-hidden": !0,
|
|
13
|
+
name: "check_circle",
|
|
14
|
+
size: 20,
|
|
15
|
+
sx: { color: "common.white" }
|
|
16
|
+
}), x = ({ payload: n }) => {
|
|
17
|
+
const { discovered_institution_guid: a, discovered_institution_name: s, held_institution_guid: c, held_institution_name: d, is_connected: t } = n.instance_slot_data;
|
|
18
|
+
return /* @__PURE__ */ o(u, {
|
|
19
|
+
badgeBgColor: t ? "success.main" : "text.secondary",
|
|
20
|
+
dotColor: "text.secondary",
|
|
21
|
+
from: /* @__PURE__ */ o(i, {
|
|
22
|
+
alt: s,
|
|
23
|
+
institutionGuid: a,
|
|
24
|
+
size: r
|
|
25
|
+
}),
|
|
26
|
+
icon: t ? g : m,
|
|
27
|
+
to: /* @__PURE__ */ o(i, {
|
|
28
|
+
alt: d,
|
|
29
|
+
institutionGuid: c,
|
|
30
|
+
size: r
|
|
31
|
+
}),
|
|
32
|
+
...t && {
|
|
33
|
+
backgroundImage: "linear-gradient(257deg, rgba(255, 224, 153, 0.2) 1.86%, rgba(255, 129, 230, 0.2) 101.54%)",
|
|
34
|
+
bgcolor: "background.paper",
|
|
35
|
+
showConfetti: !0
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
x as default
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=AccountSwitchBlock.es.js.map
|
package/dist/insights-v2/blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountSwitchBlock.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.tsx"],"sourcesContent":["import { InstitutionLogo } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport type { AccountSwitchBlockData } from '../../../../core/types/InsightsInstanceSlotData'\n\nimport TransferLogoCard from '../../../components/TransferLogoCard'\nimport { ACCOUNT_CONNECTED_GRADIENT } from '../../../components/celebrationGradients'\n\nimport type { BlockProps } from '../../types'\n\nconst LOGO_SIZE = 64\n\n// Center-badge glyphs, hoisted to stable module-scope references so they aren't\n// re-created each render: `link` for the pending \"connect\" state and\n// `check_circle` for the connected success state (mirrors TransferLogoCard's\n// Discovered Accounts default/success states).\nconst linkBadge = (\n <Icon aria-hidden={true} name=\"link\" size={20} sx={{ color: 'primary.contrastText' }} />\n)\nconst successBadge = (\n <Icon aria-hidden={true} name=\"check_circle\" size={20} sx={{ color: 'common.white' }} />\n)\n\n/**\n * Discovered-accounts connect visual: two institution logos on a transfer track.\n * The pending state (`is_connected: false`) shows a link badge on the default\n * slot; the connected state (`is_connected: true`) switches to a success badge\n * with the discovered-accounts gradient and a confetti wash.\n */\nconst AccountSwitchBlock = ({ payload }: BlockProps<AccountSwitchBlockData>) => {\n const {\n discovered_institution_guid,\n discovered_institution_name,\n held_institution_guid,\n held_institution_name,\n is_connected,\n } = payload.instance_slot_data\n\n const from = (\n <InstitutionLogo\n alt={discovered_institution_name}\n institutionGuid={discovered_institution_guid}\n size={LOGO_SIZE}\n />\n )\n const to = (\n <InstitutionLogo\n alt={held_institution_name}\n institutionGuid={held_institution_guid}\n size={LOGO_SIZE}\n />\n )\n\n return (\n <TransferLogoCard\n badgeBgColor={is_connected ? 'success.main' : 'text.secondary'}\n dotColor=\"text.secondary\"\n from={from}\n icon={is_connected ? successBadge : linkBadge}\n to={to}\n {...(is_connected && {\n backgroundImage: ACCOUNT_CONNECTED_GRADIENT,\n bgcolor: 'background.paper',\n showConfetti: true,\n })}\n />\n )\n}\n\nexport default AccountSwitchBlock\n"],"mappings":";;;;;AAUA,IAAM,IAAY,IAMZ,IACJ,gBAAA,EAAC,GAAD;AAAA,EAAM,eAAa;AAAA,EAAM,MAAK;AAAA,EAAO,MAAM;AAAA,EAAI,IAAI,EAAE,OAAO,uBAAuB;AAAI,CAAA,GAEnF,IACJ,gBAAA,EAAC,GAAD;AAAA,EAAM,eAAa;AAAA,EAAM,MAAK;AAAA,EAAe,MAAM;AAAA,EAAI,IAAI,EAAE,OAAO,eAAe;AAAI,CAAA,GASnF,IAAA,CAAsB,EAAE,SAAA,EAAA,MAAkD;AAC9E,QAAM,EACJ,6BAAA,GACA,6BAAA,GACA,uBAAA,GACA,uBAAA,GACA,cAAA,EAAA,IACE,EAAQ;AAiBZ,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,cAAc,IAAe,iBAAiB;AAAA,IAC9C,UAAS;AAAA,IACH,MAlBR,gBAAA,EAAC,GAAD;AAAA,MACE,KAAK;AAAA,MACL,iBAAiB;AAAA,MACjB,MAAM;AAAA,IACP,CAcO;AAAA,IACN,MAAM,IAAe,IAAe;AAAA,IAChC,IAbN,gBAAA,EAAC,GAAD;AAAA,MACE,KAAK;AAAA,MACL,iBAAiB;AAAA,MACjB,MAAM;AAAA,IACP,CASK;AAAA,IACJ,GAAK,KAAgB;AAAA,MACnB,iBAAA;AAAA,MACA,SAAS;AAAA,MACT,cAAc;AAAA,IAChB;AAAA,EACD,CAAA;AAEL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as AccountSwitchBlock } from './AccountSwitchBlock';
|
|
@@ -14,6 +14,8 @@ interface TransferLogoCardProps {
|
|
|
14
14
|
* Accounts insight for cross-insight consistency. Default true.
|
|
15
15
|
*/
|
|
16
16
|
hasBigDots?: boolean;
|
|
17
|
+
/** Connector-dot color token. Default `neutral.darker` (theme-aware). */
|
|
18
|
+
dotColor?: string;
|
|
17
19
|
/** Center badge background color token. Default `neutral.darker` (dark circle
|
|
18
20
|
* for Switch DD default; set to `success.main` for Discovered Accounts success). */
|
|
19
21
|
badgeBgColor?: string;
|
|
@@ -40,5 +42,5 @@ interface TransferLogoCardProps {
|
|
|
40
42
|
* `insights/components/shared/ConnectionCard` (grid-overlaid track + row).
|
|
41
43
|
* Scope is the Content section only.
|
|
42
44
|
*/
|
|
43
|
-
declare const TransferLogoCard: ({ badgeBgColor, bgcolor, backgroundImage, from, hasBigDots, icon, showConfetti, size, to, sx, }: TransferLogoCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
declare const TransferLogoCard: ({ badgeBgColor, bgcolor, backgroundImage, dotColor, from, hasBigDots, icon, showConfetti, size, to, sx, }: TransferLogoCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
44
46
|
export default TransferLogoCard;
|
|
@@ -1,111 +1,117 @@
|
|
|
1
|
-
import { useContainerDimensions as
|
|
2
|
-
import { Confetti as
|
|
3
|
-
import { useRef as
|
|
1
|
+
import { useContainerDimensions as w } from "../hooks/useContainerDimensions.es.js";
|
|
2
|
+
import { Confetti as v } from "./shared/Confetti.es.js";
|
|
3
|
+
import { useRef as I } from "react";
|
|
4
4
|
import d from "@mui/material/Stack";
|
|
5
|
-
import { Icon as
|
|
6
|
-
import { jsx as r, jsxs as
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
var
|
|
5
|
+
import { Icon as R } from "@mxenabled/mx-icons";
|
|
6
|
+
import { jsx as r, jsxs as a } from "react/jsx-runtime";
|
|
7
|
+
import i from "@mui/material/Box";
|
|
8
|
+
import b from "@mui/material/Card";
|
|
9
|
+
var y = 240, T = 40, C = 204, D = /* @__PURE__ */ r(R, {
|
|
10
10
|
"aria-hidden": !0,
|
|
11
11
|
name: "arrow_forward",
|
|
12
12
|
size: 20,
|
|
13
13
|
sx: { color: "neutral.lighter" }
|
|
14
|
-
}),
|
|
15
|
-
bgcolor:
|
|
14
|
+
}), s = ({ color: t = "neutral.darker", size: e = 4 }) => /* @__PURE__ */ r(i, { sx: {
|
|
15
|
+
bgcolor: t,
|
|
16
16
|
borderRadius: "4px",
|
|
17
17
|
height: e,
|
|
18
18
|
width: e
|
|
19
|
-
} }),
|
|
20
|
-
const
|
|
21
|
-
return /* @__PURE__ */ r(
|
|
19
|
+
} }), j = () => {
|
|
20
|
+
const t = I(null), { height: e, width: o } = w(t);
|
|
21
|
+
return /* @__PURE__ */ r(i, {
|
|
22
22
|
"aria-hidden": !0,
|
|
23
|
-
ref:
|
|
23
|
+
ref: t,
|
|
24
24
|
sx: {
|
|
25
25
|
inset: 0,
|
|
26
26
|
position: "absolute",
|
|
27
27
|
zIndex: 0
|
|
28
28
|
},
|
|
29
|
-
children: /* @__PURE__ */ r(
|
|
30
|
-
height:
|
|
31
|
-
shouldRun:
|
|
29
|
+
children: /* @__PURE__ */ r(v, {
|
|
30
|
+
height: e,
|
|
31
|
+
shouldRun: e > 0,
|
|
32
32
|
width: o
|
|
33
33
|
})
|
|
34
34
|
});
|
|
35
|
-
},
|
|
36
|
-
const
|
|
35
|
+
}, O = ({ badgeBgColor: t = "neutral.darker", bgcolor: e = "primary.lighter", backgroundImage: o, dotColor: n = "neutral.darker", from: f, hasBigDots: x = !0, icon: u = D, showConfetti: m = !1, size: l = 64, to: p, sx: g }) => {
|
|
36
|
+
const h = x ? 6 : 4, c = {
|
|
37
37
|
borderRadius: "4px",
|
|
38
38
|
flexShrink: 0,
|
|
39
|
-
height:
|
|
39
|
+
height: l,
|
|
40
40
|
overflow: "hidden",
|
|
41
|
-
width:
|
|
41
|
+
width: l
|
|
42
42
|
};
|
|
43
|
-
return /* @__PURE__ */
|
|
43
|
+
return /* @__PURE__ */ a(i, {
|
|
44
44
|
sx: {
|
|
45
|
-
bgcolor:
|
|
45
|
+
bgcolor: e,
|
|
46
46
|
...o && { backgroundImage: o },
|
|
47
47
|
p: 16,
|
|
48
48
|
position: "relative",
|
|
49
49
|
width: "100%",
|
|
50
|
-
...
|
|
50
|
+
...g
|
|
51
51
|
},
|
|
52
|
-
children: [m && /* @__PURE__ */ r(
|
|
52
|
+
children: [m && /* @__PURE__ */ r(j, {}), /* @__PURE__ */ r(b, {
|
|
53
53
|
sx: {
|
|
54
54
|
position: "relative",
|
|
55
55
|
py: 16,
|
|
56
56
|
zIndex: 1
|
|
57
57
|
},
|
|
58
|
-
children: /* @__PURE__ */
|
|
58
|
+
children: /* @__PURE__ */ a(i, {
|
|
59
59
|
sx: {
|
|
60
60
|
display: "grid",
|
|
61
61
|
placeItems: "center"
|
|
62
62
|
},
|
|
63
|
-
children: [/* @__PURE__ */ r(
|
|
63
|
+
children: [/* @__PURE__ */ r(i, { sx: {
|
|
64
64
|
bgcolor: "neutral.lighter",
|
|
65
65
|
borderRadius: "24px",
|
|
66
66
|
gridArea: "1 / 1",
|
|
67
|
-
height:
|
|
68
|
-
width:
|
|
69
|
-
} }), /* @__PURE__ */
|
|
67
|
+
height: T,
|
|
68
|
+
width: y
|
|
69
|
+
} }), /* @__PURE__ */ a(d, {
|
|
70
70
|
sx: {
|
|
71
71
|
alignItems: "center",
|
|
72
72
|
flexDirection: "row",
|
|
73
73
|
gridArea: "1 / 1",
|
|
74
|
-
height:
|
|
74
|
+
height: l,
|
|
75
75
|
justifyContent: "space-between",
|
|
76
|
-
width:
|
|
76
|
+
width: C
|
|
77
77
|
},
|
|
78
78
|
children: [
|
|
79
|
-
/* @__PURE__ */ r(
|
|
80
|
-
sx:
|
|
81
|
-
children:
|
|
79
|
+
/* @__PURE__ */ r(i, {
|
|
80
|
+
sx: c,
|
|
81
|
+
children: f
|
|
82
82
|
}),
|
|
83
|
-
/* @__PURE__ */
|
|
83
|
+
/* @__PURE__ */ a(d, {
|
|
84
84
|
sx: {
|
|
85
85
|
alignItems: "center",
|
|
86
86
|
flexDirection: "row",
|
|
87
87
|
gap: 4
|
|
88
88
|
},
|
|
89
89
|
children: [
|
|
90
|
-
/* @__PURE__ */ r(
|
|
91
|
-
/* @__PURE__ */ r(
|
|
90
|
+
/* @__PURE__ */ r(s, { color: n }),
|
|
91
|
+
/* @__PURE__ */ r(s, {
|
|
92
|
+
color: n,
|
|
93
|
+
size: h
|
|
94
|
+
}),
|
|
92
95
|
/* @__PURE__ */ r(d, {
|
|
93
96
|
sx: {
|
|
94
97
|
alignItems: "center",
|
|
95
|
-
bgcolor:
|
|
98
|
+
bgcolor: t,
|
|
96
99
|
borderRadius: "50%",
|
|
97
100
|
height: 28,
|
|
98
101
|
justifyContent: "center",
|
|
99
102
|
width: 28
|
|
100
103
|
},
|
|
101
|
-
children:
|
|
104
|
+
children: u
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ r(s, {
|
|
107
|
+
color: n,
|
|
108
|
+
size: h
|
|
102
109
|
}),
|
|
103
|
-
/* @__PURE__ */ r(
|
|
104
|
-
/* @__PURE__ */ r(a, {})
|
|
110
|
+
/* @__PURE__ */ r(s, { color: n })
|
|
105
111
|
]
|
|
106
112
|
}),
|
|
107
|
-
/* @__PURE__ */ r(
|
|
108
|
-
sx:
|
|
113
|
+
/* @__PURE__ */ r(i, {
|
|
114
|
+
sx: c,
|
|
109
115
|
children: p
|
|
110
116
|
})
|
|
111
117
|
]
|
|
@@ -115,7 +121,7 @@ var C = 240, b = 40, y = 204, T = /* @__PURE__ */ r(I, {
|
|
|
115
121
|
});
|
|
116
122
|
};
|
|
117
123
|
export {
|
|
118
|
-
|
|
124
|
+
O as default
|
|
119
125
|
};
|
|
120
126
|
|
|
121
127
|
//# sourceMappingURL=TransferLogoCard.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferLogoCard.es.js","names":[],"sources":["../../../src/insights-v2/components/TransferLogoCard.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { useRef } from 'react'\n\nimport Box from '@mui/material/Box'\nimport Card from '@mui/material/Card'\nimport Stack from '@mui/material/Stack'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Confetti } from './shared/Confetti'\nimport { useContainerDimensions } from '../hooks/useContainerDimensions'\n\n// Figma track/row footprints (mirrors v1 `shared/ConnectionCard`): a 240×40\n// rounded track centered behind a 204×64 row of logos + center badge.\nconst TRACK_WIDTH = 240\nconst TRACK_HEIGHT = 40\nconst ROW_WIDTH = 204\n\ninterface TransferLogoCardProps {\n /** Source institution logo (left). */\n from: ReactNode\n /** Destination institution logo (right). */\n to: ReactNode\n /** Logo tile size in px (Figma: 64). */\n size?: number\n /** Arrow icon rendered in the center badge. Defaults to a right arrow. */\n icon?: ReactNode\n /**\n * Enlarge the inner connector dots (6px vs 4px), matching the Discovered\n * Accounts insight for cross-insight consistency. Default true.\n */\n hasBigDots?: boolean\n /** Center badge background color token. Default `neutral.darker` (dark circle\n * for Switch DD default; set to `success.main` for Discovered Accounts success). */\n badgeBgColor?: string\n /** Slot surface color token. Default `primary.lighter` (Figma's tinted slot,\n * theme-aware: light-blue in light mode, navy in dark). */\n bgcolor?: string\n /**\n * Optional background image (e.g., celebration gradient) for success states.\n * Layered over the `bgcolor` via `backgroundImage` (not `background` shorthand).\n */\n backgroundImage?: string\n /**\n * Show a confetti animation filling the slot (for success/celebration states).\n * Requires `useContainerDimensions` to measure the slot. Default false.\n */\n showConfetti?: boolean\n sx?: SxProps\n}\n\n// Default center-badge glyph. Hoisted to a stable reference so it isn't\n// re-created each render (`neutral.lighter` is the theme-aware inverse of the\n// badge fill: light glyph on dark badge, and vice-versa in dark).\nconst defaultTransferIcon = (\n <Icon aria-hidden={true} name=\"arrow_forward\" size={20} sx={{ color: 'neutral.lighter' }} />\n)\n\n// Connector dot: a small rounded square that reads as a dot at this size\n// (matches v1 `ConnectionCard`'s `Dot`). `neutral.darker` is theme-aware. The\n// inner pair is larger (`bigDots`, as Discovered Accounts uses) than the outer.\nconst Dot = ({ size = 4 }: { size?: number }) => (\n <Box sx={{ bgcolor:
|
|
1
|
+
{"version":3,"file":"TransferLogoCard.es.js","names":[],"sources":["../../../src/insights-v2/components/TransferLogoCard.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { useRef } from 'react'\n\nimport Box from '@mui/material/Box'\nimport Card from '@mui/material/Card'\nimport Stack from '@mui/material/Stack'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Confetti } from './shared/Confetti'\nimport { useContainerDimensions } from '../hooks/useContainerDimensions'\n\n// Figma track/row footprints (mirrors v1 `shared/ConnectionCard`): a 240×40\n// rounded track centered behind a 204×64 row of logos + center badge.\nconst TRACK_WIDTH = 240\nconst TRACK_HEIGHT = 40\nconst ROW_WIDTH = 204\n\ninterface TransferLogoCardProps {\n /** Source institution logo (left). */\n from: ReactNode\n /** Destination institution logo (right). */\n to: ReactNode\n /** Logo tile size in px (Figma: 64). */\n size?: number\n /** Arrow icon rendered in the center badge. Defaults to a right arrow. */\n icon?: ReactNode\n /**\n * Enlarge the inner connector dots (6px vs 4px), matching the Discovered\n * Accounts insight for cross-insight consistency. Default true.\n */\n hasBigDots?: boolean\n /** Connector-dot color token. Default `neutral.darker` (theme-aware). */\n dotColor?: string\n /** Center badge background color token. Default `neutral.darker` (dark circle\n * for Switch DD default; set to `success.main` for Discovered Accounts success). */\n badgeBgColor?: string\n /** Slot surface color token. Default `primary.lighter` (Figma's tinted slot,\n * theme-aware: light-blue in light mode, navy in dark). */\n bgcolor?: string\n /**\n * Optional background image (e.g., celebration gradient) for success states.\n * Layered over the `bgcolor` via `backgroundImage` (not `background` shorthand).\n */\n backgroundImage?: string\n /**\n * Show a confetti animation filling the slot (for success/celebration states).\n * Requires `useContainerDimensions` to measure the slot. Default false.\n */\n showConfetti?: boolean\n sx?: SxProps\n}\n\n// Default center-badge glyph. Hoisted to a stable reference so it isn't\n// re-created each render (`neutral.lighter` is the theme-aware inverse of the\n// badge fill: light glyph on dark badge, and vice-versa in dark).\nconst defaultTransferIcon = (\n <Icon aria-hidden={true} name=\"arrow_forward\" size={20} sx={{ color: 'neutral.lighter' }} />\n)\n\n// Connector dot: a small rounded square that reads as a dot at this size\n// (matches v1 `ConnectionCard`'s `Dot`). `neutral.darker` is theme-aware. The\n// inner pair is larger (`bigDots`, as Discovered Accounts uses) than the outer.\nconst Dot = ({ color = 'neutral.darker', size = 4 }: { color?: string; size?: number }) => (\n <Box sx={{ bgcolor: color, borderRadius: '4px', height: size, width: size }} />\n)\n\n/**\n * Confetti overlay for the success state. Measures the container and fires the\n * burst once dimensions arrive. Scoped to this component so the resize listener\n * only mounts when confetti is shown.\n */\nconst ConfettiOverlay = () => {\n const overlayRef = useRef<HTMLDivElement>(null)\n const { height, width } = useContainerDimensions(overlayRef)\n return (\n <Box aria-hidden={true} ref={overlayRef} sx={{ inset: 0, position: 'absolute', zIndex: 0 }}>\n <Confetti height={height} shouldRun={height > 0} width={width} />\n </Box>\n )\n}\n\n/**\n * A from → to account transfer visual: two institution logos on a rounded track\n * with a central arrow badge and connector dots between them.\n *\n * Figma: Switch Direct Deposit (default) Content. Structure ported from v1\n * `insights/components/shared/ConnectionCard` (grid-overlaid track + row).\n * Scope is the Content section only.\n */\nconst TransferLogoCard = ({\n badgeBgColor = 'neutral.darker',\n bgcolor = 'primary.lighter',\n backgroundImage,\n dotColor = 'neutral.darker',\n from,\n hasBigDots = true,\n icon = defaultTransferIcon,\n showConfetti = false,\n size = 64,\n to,\n sx,\n}: TransferLogoCardProps) => {\n const dotSize = hasBigDots ? 6 : 4\n const logoSx = {\n borderRadius: '4px',\n flexShrink: 0,\n height: size,\n overflow: 'hidden',\n width: size,\n } as const\n\n return (\n <Box\n sx={{\n bgcolor,\n ...(backgroundImage && { backgroundImage }),\n p: 16,\n // Positioned wrapper so the confetti overlay can fill the slot; the card\n // sits above it (zIndex). No `overflow: hidden` — that would clip the\n // burst's upper area (per the figma-to-code confetti guidance).\n position: 'relative',\n width: '100%',\n ...sx,\n }}\n >\n {showConfetti && <ConfettiOverlay />}\n <Card sx={{ position: 'relative', py: 16, zIndex: 1 }}>\n <Box sx={{ display: 'grid', placeItems: 'center' }}>\n {/* Grey track, centered behind the row via a shared grid cell. */}\n <Box\n sx={{\n bgcolor: 'neutral.lighter',\n borderRadius: '24px',\n gridArea: '1 / 1',\n height: TRACK_HEIGHT,\n width: TRACK_WIDTH,\n }}\n />\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gridArea: '1 / 1',\n height: size,\n justifyContent: 'space-between',\n width: ROW_WIDTH,\n }}\n >\n <Box sx={logoSx}>{from}</Box>\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n <Dot color={dotColor} />\n <Dot color={dotColor} size={dotSize} />\n <Stack\n sx={{\n alignItems: 'center',\n bgcolor: badgeBgColor,\n borderRadius: '50%',\n height: 28,\n justifyContent: 'center',\n width: 28,\n }}\n >\n {icon}\n </Stack>\n <Dot color={dotColor} size={dotSize} />\n <Dot color={dotColor} />\n </Stack>\n <Box sx={logoSx}>{to}</Box>\n </Stack>\n </Box>\n </Card>\n </Box>\n )\n}\n\nexport default TransferLogoCard\n"],"mappings":"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"}
|
|
@@ -17,3 +17,9 @@ export declare const WARM_LIME_ACCENT_GRADIENT = "linear-gradient(200.73deg, rgb
|
|
|
17
17
|
export declare const CELEBRATION_GRADIENT = "linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(255, 128, 229, 0.2) 101.54%)";
|
|
18
18
|
/** Peach → pink gradient for Discovered Accounts success state. */
|
|
19
19
|
export declare const DISCOVERED_ACCOUNTS_GRADIENT = "linear-gradient(200.73deg, rgba(255, 224, 153, 1) 1.86%, rgba(255, 129, 230, 1) 101.54%)";
|
|
20
|
+
/**
|
|
21
|
+
* Warm → pink wash at 20% opacity for the account-connected success state.
|
|
22
|
+
* Layer over `background.paper` (the Figma spec's `#FFF` base), not the
|
|
23
|
+
* `background` shorthand — a 20% gradient over transparency renders wrong.
|
|
24
|
+
*/
|
|
25
|
+
export declare const ACCOUNT_CONNECTED_GRADIENT = "linear-gradient(257deg, rgba(255, 224, 153, 0.2) 1.86%, rgba(255, 129, 230, 0.2) 101.54%)";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
var r = "linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(173, 248, 43, 0.2) 101.54%)", a = "linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(255, 128, 229, 0.2) 101.54%)";
|
|
1
|
+
var r = "linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(173, 248, 43, 0.2) 101.54%)", a = "linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(255, 128, 229, 0.2) 101.54%)", g = "linear-gradient(257deg, rgba(255, 224, 153, 0.2) 1.86%, rgba(255, 129, 230, 0.2) 101.54%)";
|
|
2
2
|
export {
|
|
3
|
+
g as ACCOUNT_CONNECTED_GRADIENT,
|
|
3
4
|
a as CELEBRATION_GRADIENT,
|
|
4
5
|
r as WARM_LIME_ACCENT_GRADIENT
|
|
5
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"celebrationGradients.es.js","names":[],"sources":["../../../src/insights-v2/components/celebrationGradients.ts"],"sourcesContent":["/**\n * Decorative celebration washes used behind confetti-backed \"complete\"/milestone states.\n * Shared so both the block layer (`AccountBlock`) and the presentational\n * components/stories reference one source instead of re-declaring the string.\n *\n * - WARM_LIME_ACCENT_GRADIENT: 20%-opacity warm→lime wash; layer over `background.paper`\n * for a tinted background. Used for merchant categorization and deposit celebration states.\n * - CELEBRATION_GRADIENT: 20%-opacity warm→pink wash; layer over `background.paper`.\n * - DISCOVERED_ACCOUNTS_GRADIENT: Fully opaque (100% opacity); use as the sole background.\n */\n\n/**\n * Warm → lime accent wash at 20% opacity. Used as a tinted background behind\n * merchant categorization highlights and deposit celebration callouts.\n */\nexport const WARM_LIME_ACCENT_GRADIENT =\n 'linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(173, 248, 43, 0.2) 101.54%)'\n\n/** Warm → pink wash behind balance/savings milestones. */\nexport const CELEBRATION_GRADIENT =\n 'linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(255, 128, 229, 0.2) 101.54%)'\n\n/** Peach → pink gradient for Discovered Accounts success state. */\nexport const DISCOVERED_ACCOUNTS_GRADIENT =\n 'linear-gradient(200.73deg, rgba(255, 224, 153, 1) 1.86%, rgba(255, 129, 230, 1) 101.54%)'\n"],"mappings":"AAeA,IAAa,IACX,+FAGW,IACX"}
|
|
1
|
+
{"version":3,"file":"celebrationGradients.es.js","names":[],"sources":["../../../src/insights-v2/components/celebrationGradients.ts"],"sourcesContent":["/**\n * Decorative celebration washes used behind confetti-backed \"complete\"/milestone states.\n * Shared so both the block layer (`AccountBlock`) and the presentational\n * components/stories reference one source instead of re-declaring the string.\n *\n * - WARM_LIME_ACCENT_GRADIENT: 20%-opacity warm→lime wash; layer over `background.paper`\n * for a tinted background. Used for merchant categorization and deposit celebration states.\n * - CELEBRATION_GRADIENT: 20%-opacity warm→pink wash; layer over `background.paper`.\n * - DISCOVERED_ACCOUNTS_GRADIENT: Fully opaque (100% opacity); use as the sole background.\n */\n\n/**\n * Warm → lime accent wash at 20% opacity. Used as a tinted background behind\n * merchant categorization highlights and deposit celebration callouts.\n */\nexport const WARM_LIME_ACCENT_GRADIENT =\n 'linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(173, 248, 43, 0.2) 101.54%)'\n\n/** Warm → pink wash behind balance/savings milestones. */\nexport const CELEBRATION_GRADIENT =\n 'linear-gradient(200.73deg, rgba(255, 223, 152, 0.2) 1.86%, rgba(255, 128, 229, 0.2) 101.54%)'\n\n/** Peach → pink gradient for Discovered Accounts success state. */\nexport const DISCOVERED_ACCOUNTS_GRADIENT =\n 'linear-gradient(200.73deg, rgba(255, 224, 153, 1) 1.86%, rgba(255, 129, 230, 1) 101.54%)'\n\n/**\n * Warm → pink wash at 20% opacity for the account-connected success state.\n * Layer over `background.paper` (the Figma spec's `#FFF` base), not the\n * `background` shorthand — a 20% gradient over transparency renders wrong.\n */\nexport const ACCOUNT_CONNECTED_GRADIENT =\n 'linear-gradient(257deg, rgba(255, 224, 153, 0.2) 1.86%, rgba(255, 129, 230, 0.2) 101.54%)'\n"],"mappings":"AAeA,IAAa,IACX,+FAGW,IACX,gGAWW,IACX"}
|
|
@@ -1,59 +1,61 @@
|
|
|
1
|
-
import { BAR_CHART_VARIANTS as o, barChartVariant as t, buildChartData as m, buildDataSeries as
|
|
1
|
+
import { BAR_CHART_VARIANTS as o, barChartVariant as t, buildChartData as m, buildDataSeries as i } from "./blocks/ChartBlocks/BarchartBlock/utils.es.js";
|
|
2
2
|
import { BarchartBlock as p } from "./blocks/ChartBlocks/BarchartBlock/BarchartBlock.es.js";
|
|
3
|
-
import { DoubleBarChartBlock as
|
|
3
|
+
import { DoubleBarChartBlock as c } from "./blocks/ChartBlocks/DoubleBarChartBlock/DoubleBarChartBlock.es.js";
|
|
4
4
|
import l from "./blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.es.js";
|
|
5
5
|
import s from "./blocks/ChartBlocks/DoubleProgressBarBlock/DoubleProgressBarBlock.es.js";
|
|
6
6
|
import g from "./blocks/ComponentBlocks/AccountBlock/AccountBlock.es.js";
|
|
7
|
-
import
|
|
8
|
-
import S from "./
|
|
9
|
-
import h from "./blocks/ComponentBlocks/
|
|
10
|
-
import T from "./components/
|
|
11
|
-
import D from "./
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import R from "./
|
|
15
|
-
import E from "./
|
|
16
|
-
import V from "./components/
|
|
17
|
-
import
|
|
18
|
-
import G from "./components/
|
|
19
|
-
import O from "./components/
|
|
20
|
-
import j from "./components/
|
|
21
|
-
import z from "./components/
|
|
22
|
-
import J from "./components/
|
|
23
|
-
import Q from "./components/
|
|
24
|
-
import X from "./components/
|
|
25
|
-
import Z from "./components/
|
|
26
|
-
import rr from "./components/
|
|
27
|
-
import tr from "./components/
|
|
7
|
+
import u from "./components/TransferLogoCard.es.js";
|
|
8
|
+
import S from "./blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js";
|
|
9
|
+
import { BudgetBlock as h } from "./blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js";
|
|
10
|
+
import T from "./components/SaveAnExtraCard.es.js";
|
|
11
|
+
import D from "./blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
|
|
12
|
+
import P from "./components/InsightTransactionRow.es.js";
|
|
13
|
+
import y from "./components/TransactionListCard.es.js";
|
|
14
|
+
import { CategoryTransactionsBlock as R } from "./blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
|
|
15
|
+
import { SVGImageBlock as E } from "./blocks/ImageBlocks/SVGImageBlock/SVGImageBlock.es.js";
|
|
16
|
+
import V from "./components/AccountHeroCard.es.js";
|
|
17
|
+
import M from "./components/AmountPill.es.js";
|
|
18
|
+
import G from "./components/DesignateEmergencySavingsCard.es.js";
|
|
19
|
+
import O from "./components/BaseLayout.es.js";
|
|
20
|
+
import j from "./components/StatusMessageCard.es.js";
|
|
21
|
+
import z from "./components/LogoTile.es.js";
|
|
22
|
+
import J from "./components/LogoClusterCard.es.js";
|
|
23
|
+
import Q from "./components/MerchantHighlightCard.es.js";
|
|
24
|
+
import X from "./components/P2PLogoStack.es.js";
|
|
25
|
+
import Z from "./components/SavingsOpportunityCard.es.js";
|
|
26
|
+
import rr from "./components/StatusPill.es.js";
|
|
27
|
+
import tr from "./components/SubscriptionHeroCard.es.js";
|
|
28
|
+
import ir from "./components/UpcomingBillCard.es.js";
|
|
28
29
|
export {
|
|
29
30
|
g as AccountBlock,
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
V as AccountHeroCard,
|
|
32
|
+
S as AccountSwitchBlock,
|
|
33
|
+
M as AmountPill,
|
|
32
34
|
o as BAR_CHART_VARIANTS,
|
|
33
35
|
p as BarchartBlock,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
O as BaseLayout,
|
|
37
|
+
h as BudgetBlock,
|
|
38
|
+
R as CategoryTransactionsBlock,
|
|
39
|
+
G as DesignateEmergencySavingsCard,
|
|
38
40
|
l as DonutChartBlock,
|
|
39
|
-
|
|
41
|
+
c as DoubleBarChartBlock,
|
|
40
42
|
s as DoubleProgressBarBlock,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
43
|
+
P as InsightTransactionRow,
|
|
44
|
+
J as LogoClusterCard,
|
|
45
|
+
z as LogoTile,
|
|
46
|
+
Q as MerchantHighlightCard,
|
|
47
|
+
X as P2PLogoStack,
|
|
48
|
+
E as SVGImageBlock,
|
|
49
|
+
T as SaveAnExtraCard,
|
|
50
|
+
D as SaveExtraBlock,
|
|
51
|
+
Z as SavingsOpportunityCard,
|
|
52
|
+
j as StatusMessageCard,
|
|
53
|
+
rr as StatusPill,
|
|
54
|
+
tr as SubscriptionHeroCard,
|
|
55
|
+
y as TransactionListCard,
|
|
56
|
+
u as TransferLogoCard,
|
|
57
|
+
ir as UpcomingBillCard,
|
|
56
58
|
t as barChartVariant,
|
|
57
59
|
m as buildChartData,
|
|
58
|
-
|
|
60
|
+
i as buildDataSeries
|
|
59
61
|
};
|
|
@@ -1,53 +1,55 @@
|
|
|
1
1
|
import { BarchartBlock as e } from "../blocks/ChartBlocks/BarchartBlock/BarchartBlock.es.js";
|
|
2
2
|
import { DoubleBarChartBlock as a } from "../blocks/ChartBlocks/DoubleBarChartBlock/DoubleBarChartBlock.es.js";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import n from "../blocks/ComponentBlocks/
|
|
3
|
+
import c from "../blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.es.js";
|
|
4
|
+
import m from "../blocks/ChartBlocks/DoubleProgressBarBlock/DoubleProgressBarBlock.es.js";
|
|
5
|
+
import l from "../blocks/ComponentBlocks/AccountBlock/AccountBlock.es.js";
|
|
6
|
+
import i from "../blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js";
|
|
7
|
+
import { BudgetBlock as n } from "../blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js";
|
|
8
|
+
import k from "../blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
|
|
8
9
|
import { CategoryTransactionsBlock as B } from "../blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
|
|
9
|
-
import
|
|
10
|
-
import { SVGImageBlock as
|
|
11
|
-
import
|
|
12
|
-
import { PlaceholderActionBlock as
|
|
13
|
-
import { getMakeTransferDrawerTitle as
|
|
14
|
-
import { MakeTransferActionBlockLayer as
|
|
10
|
+
import p from "../blocks/ImageBlocks/ImageBlock.es.js";
|
|
11
|
+
import { SVGImageBlock as f } from "../blocks/ImageBlocks/SVGImageBlock/SVGImageBlock.es.js";
|
|
12
|
+
import s from "../blocks/ChartBlocks/StepChartBlock/StepChartBlock.es.js";
|
|
13
|
+
import { PlaceholderActionBlock as u } from "../actionBlocks/PlaceholderActionBlock.es.js";
|
|
14
|
+
import { getMakeTransferDrawerTitle as h } from "../actionBlocks/MakeTransferActionBlock/layout.es.js";
|
|
15
|
+
import { MakeTransferActionBlockLayer as C } from "../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer.es.js";
|
|
15
16
|
var t = (o) => {
|
|
16
|
-
},
|
|
17
|
+
}, _ = /* @__PURE__ */ new Set([
|
|
17
18
|
"",
|
|
18
19
|
"null",
|
|
19
20
|
"undefined"
|
|
20
|
-
]),
|
|
21
|
+
]), M = (o) => {
|
|
21
22
|
const r = o?.trim().toLowerCase();
|
|
22
|
-
return !!r && !
|
|
23
|
-
},
|
|
23
|
+
return !!r && !_.has(r);
|
|
24
|
+
}, N = {
|
|
24
25
|
PlaceholderActionBlock: {
|
|
25
|
-
Component:
|
|
26
|
+
Component: u,
|
|
26
27
|
usePrepare: t,
|
|
27
28
|
title: () => "Action Block Layer Drilldown"
|
|
28
29
|
},
|
|
29
30
|
make_transfer: {
|
|
30
|
-
Component:
|
|
31
|
+
Component: C,
|
|
31
32
|
usePrepare: t,
|
|
32
|
-
title:
|
|
33
|
+
title: h
|
|
33
34
|
}
|
|
34
|
-
},
|
|
35
|
-
AccountBlock:
|
|
35
|
+
}, O = {
|
|
36
|
+
AccountBlock: l,
|
|
37
|
+
account_switch_block: i,
|
|
36
38
|
BarChartBlock: e,
|
|
37
|
-
BudgetBlock:
|
|
39
|
+
BudgetBlock: n,
|
|
38
40
|
CategoryTransactionsBlock: B,
|
|
39
|
-
DonutChartBlock:
|
|
41
|
+
DonutChartBlock: c,
|
|
40
42
|
DoubleBarChartBlock: a,
|
|
41
|
-
DoubleProgressBarBlock:
|
|
42
|
-
ImageBlock:
|
|
43
|
-
save_extra_block:
|
|
44
|
-
StepChartBlock:
|
|
45
|
-
SVGImageBlock:
|
|
43
|
+
DoubleProgressBarBlock: m,
|
|
44
|
+
ImageBlock: p,
|
|
45
|
+
save_extra_block: k,
|
|
46
|
+
StepChartBlock: s,
|
|
47
|
+
SVGImageBlock: f
|
|
46
48
|
};
|
|
47
49
|
export {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
N as actionBlocks,
|
|
51
|
+
O as blocks,
|
|
52
|
+
M as hasDrawerBlock
|
|
51
53
|
};
|
|
52
54
|
|
|
53
55
|
//# 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 BarchartBlock,\n BudgetBlock,\n CategoryTransactionsBlock,\n DonutChartBlock,\n DoubleBarChartBlock,\n DoubleProgressBarBlock,\n SaveExtraBlock,\n SVGImageBlock,\n} from '../blocks'\nimport StepChartBlock from '../blocks/ChartBlocks/StepChartBlock'\nimport ImageBlock from '../blocks/ImageBlocks/ImageBlock'\n\nimport type { Beat, GlobalCopy, InsightsPayload } from '../../core'\nimport { PlaceholderActionBlock } from '../actionBlocks/PlaceholderActionBlock'\nimport { MakeTransferActionBlockLayer } from '../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer'\nimport { getMakeTransferDrawerTitle } from '../actionBlocks/MakeTransferActionBlock/layout'\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// A CTA opens a drawer only when it carries a real `block`. The backend may send\n// an empty/absent block (or the literal strings \"null\"/\"undefined\") for CTAs\n// that trigger something else (e.g. a postMessage) instead of a drilldown.\nconst NON_BLOCK_VALUES = new Set(['', 'null', 'undefined'])\nexport const hasDrawerBlock = (block?: string | null): boolean => {\n const normalized = block?.trim().toLowerCase()\n return !!normalized && !NON_BLOCK_VALUES.has(normalized)\n}\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 (e.g.\n // MakeTransfer reads its variant title from layout.ts). Falls back to the CTA label.\n title?: (variant: string | null | undefined, copy: GlobalCopy) => string\n}\n\n// Registry of drawer drilldowns, keyed by the `block` name the backend sends\n// on a beat's CTA. To add one: create a component taking ActionBlockProps,\n// read the clicked indexes from useInsightsV2Store().actionDrawer, and\n// register it here. Add\n// `usePrepare` when the block needs to load data before rendering.\nexport const actionBlocks = {\n PlaceholderActionBlock: {\n Component: PlaceholderActionBlock,\n usePrepare: noop,\n title: () => 'Action Block Layer Drilldown',\n },\n make_transfer: {\n Component: MakeTransferActionBlockLayer,\n usePrepare: noop,\n title: getMakeTransferDrawerTitle,\n },\n} as Record<string, ActionBlockEntry>\n\nexport const blocks = {\n AccountBlock: AccountBlock,\n BarChartBlock: BarchartBlock,\n BudgetBlock: BudgetBlock,\n CategoryTransactionsBlock: CategoryTransactionsBlock,\n DonutChartBlock: DonutChartBlock,\n DoubleBarChartBlock: DoubleBarChartBlock,\n DoubleProgressBarBlock: DoubleProgressBarBlock,\n ImageBlock: ImageBlock,\n save_extra_block: SaveExtraBlock,\n StepChartBlock: StepChartBlock,\n SVGImageBlock: SVGImageBlock,\n} as Record<string, React.ComponentType<{ payload: InsightsPayload; beatGuid?: string }>>\n"],"mappings":"
|
|
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 CategoryTransactionsBlock,\n DonutChartBlock,\n DoubleBarChartBlock,\n DoubleProgressBarBlock,\n SaveExtraBlock,\n SVGImageBlock,\n} from '../blocks'\nimport StepChartBlock from '../blocks/ChartBlocks/StepChartBlock'\nimport ImageBlock from '../blocks/ImageBlocks/ImageBlock'\n\nimport type { Beat, GlobalCopy, InsightsPayload } from '../../core'\nimport { PlaceholderActionBlock } from '../actionBlocks/PlaceholderActionBlock'\nimport { MakeTransferActionBlockLayer } from '../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer'\nimport { getMakeTransferDrawerTitle } from '../actionBlocks/MakeTransferActionBlock/layout'\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// A CTA opens a drawer only when it carries a real `block`. The backend may send\n// an empty/absent block (or the literal strings \"null\"/\"undefined\") for CTAs\n// that trigger something else (e.g. a postMessage) instead of a drilldown.\nconst NON_BLOCK_VALUES = new Set(['', 'null', 'undefined'])\nexport const hasDrawerBlock = (block?: string | null): boolean => {\n const normalized = block?.trim().toLowerCase()\n return !!normalized && !NON_BLOCK_VALUES.has(normalized)\n}\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 (e.g.\n // MakeTransfer reads its variant title from layout.ts). Falls back to the CTA label.\n title?: (variant: string | null | undefined, copy: GlobalCopy) => string\n}\n\n// Registry of drawer drilldowns, keyed by the `block` name the backend sends\n// on a beat's CTA. To add one: create a component taking ActionBlockProps,\n// read the clicked indexes from useInsightsV2Store().actionDrawer, and\n// register it here. Add\n// `usePrepare` when the block needs to load data before rendering.\nexport const actionBlocks = {\n PlaceholderActionBlock: {\n Component: PlaceholderActionBlock,\n usePrepare: noop,\n title: () => 'Action Block Layer Drilldown',\n },\n make_transfer: {\n Component: MakeTransferActionBlockLayer,\n usePrepare: noop,\n title: getMakeTransferDrawerTitle,\n },\n} as Record<string, ActionBlockEntry>\n\nexport const blocks = {\n AccountBlock: AccountBlock,\n account_switch_block: AccountSwitchBlock,\n BarChartBlock: BarchartBlock,\n BudgetBlock: BudgetBlock,\n CategoryTransactionsBlock: CategoryTransactionsBlock,\n DonutChartBlock: DonutChartBlock,\n DoubleBarChartBlock: DoubleBarChartBlock,\n DoubleProgressBarBlock: DoubleProgressBarBlock,\n ImageBlock: ImageBlock,\n save_extra_block: SaveExtraBlock,\n StepChartBlock: StepChartBlock,\n SVGImageBlock: SVGImageBlock,\n} as Record<string, React.ComponentType<{ payload: InsightsPayload; beatGuid?: string }>>\n"],"mappings":";;;;;;;;;;;;;;;AA0BA,IAAM,IAAA,CAAQ,MAAwB;AAAC,GAKjC,IAAmB,oBAAI,IAAI;AAAA,EAAC;AAAA,EAAI;AAAA,EAAQ;AAAW,CAAC,GAC7C,IAAA,CAAkB,MAAmC;AAChE,QAAM,IAAa,GAAO,KAAK,EAAE,YAAY;AAC7C,SAAO,CAAC,CAAC,KAAc,CAAC,EAAiB,IAAI,CAAU;AACzD,GAea,IAAe;AAAA,EAC1B,wBAAwB;AAAA,IACtB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,MAAa;AAAA,EACf;AAAA,EACA,eAAe;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AACF,GAEa,IAAS;AAAA,EACN,cAAA;AAAA,EACd,sBAAsB;AAAA,EACtB,eAAe;AAAA,EACF,aAAA;AAAA,EACc,2BAAA;AAAA,EACV,iBAAA;AAAA,EACI,qBAAA;AAAA,EACG,wBAAA;AAAA,EACZ,YAAA;AAAA,EACZ,kBAAkB;AAAA,EACF,gBAAA;AAAA,EACD,eAAA;AACjB"}
|