@mx-cartographer/experiences 9.4.70 → 9.4.71
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 +7 -0
- package/dist/core/types/Insights.d.ts +8 -0
- package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.d.ts +16 -0
- package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.es.js +24 -0
- package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.es.js.map +1 -0
- package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/index.d.ts +1 -0
- package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/layout.d.ts +28 -0
- package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/layout.es.js +63 -0
- package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/layout.es.js.map +1 -0
- package/dist/insights-v2/blocks/ComponentBlocks/index.d.ts +1 -0
- package/dist/insights-v2/components/AccountHeroCard.d.ts +7 -1
- package/dist/insights-v2/components/AccountHeroCard.es.js +6 -7
- package/dist/insights-v2/components/AccountHeroCard.es.js.map +1 -1
- package/dist/insights-v2/components/DirectDepositCard.d.ts +48 -0
- package/dist/insights-v2/components/DirectDepositCard.es.js +37 -0
- package/dist/insights-v2/components/DirectDepositCard.es.js.map +1 -0
- package/dist/insights-v2/components/TransferLogoCard.d.ts +5 -0
- package/dist/insights-v2/components/TransferLogoCard.es.js +37 -55
- package/dist/insights-v2/components/TransferLogoCard.es.js.map +1 -1
- package/dist/insights-v2/components/shared/ConfettiOverlay.d.ts +1 -0
- package/dist/insights-v2/components/shared/ConfettiOverlay.es.js +27 -0
- package/dist/insights-v2/components/shared/ConfettiOverlay.es.js.map +1 -0
- package/dist/insights-v2/index.d.ts +1 -0
- package/dist/insights-v2/index.es.js +70 -66
- package/dist/insights-v2/mappings/blocks.es.js +34 -32
- package/dist/insights-v2/mappings/blocks.es.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [9.4.71] - 10-09-2026
|
|
2
|
+
|
|
3
|
+
- **CHANGED** - `DirectDepositVariant` (`DirectDepositBlock/layout.ts`) is now a single `directDepositVariant` const object used both as the runtime value and as the source for the derived `DirectDepositVariant` type, so a variant name only needs to change in one place; `getLayoutConfig`'s keys are computed properties off that object instead of retyped literals (WEC-1875)
|
|
4
|
+
- **FIXED** - `DirectDepositBlockBeats.ts` fixture typed its `insights_payload` per-JSON-literal, which broke `primary_cta` access for the `DirectDepositComplete` variant (no CTA on that beat) with a `TS2339` typecheck error; `insights_payload` is now cast to the real `InsightsPayload` type (matching `TransactionBlockBeats.ts`'s pattern), which already models `primary_cta` as optional (WEC-1875)
|
|
5
|
+
- **CHANGED** - `DirectDepositBlockPayload.json` fixture's `instance_slot.variant` values switched to snake_case (WEC-1875)
|
|
6
|
+
- **CHANGED** - Extracted `ConfettiOverlay` (`src/insights-v2/components/shared/ConfettiOverlay.tsx`) as a shared component, used by both `DirectDepositCard` and `TransferLogoCard` instead of each defining its own (WEC-1875)
|
|
7
|
+
|
|
1
8
|
## [9.4.70] - 10-09-2026
|
|
2
9
|
|
|
3
10
|
- **ADDED** - `PrimaryCTA` / `SecondaryCTA` accept a backend-described `metadata` object (`event`, `action`, `payload`); on press the CTA runner posts that message to the host after the step's handler and effects succeed, so per-insight post messages no longer need frontend code (WEC-1852)
|
|
@@ -253,4 +253,12 @@ export interface InstanceSlot {
|
|
|
253
253
|
* from `InsightsPayload.instance_slot_data` instead and leave this absent.
|
|
254
254
|
*/
|
|
255
255
|
data_series?: InstanceSlotRow[];
|
|
256
|
+
/** Primary line on the hero card, e.g. "Epic Bank Checking, *1234". */
|
|
257
|
+
account_name?: string;
|
|
258
|
+
/** Secondary line beneath the name, e.g. "Checking Account" / "Credit Card". */
|
|
259
|
+
account_type?: string;
|
|
260
|
+
/** Status pill label, e.g. "Direct Deposit Not Set Up" / "Interest Rate: 19.99% APR". */
|
|
261
|
+
status_text?: string;
|
|
262
|
+
institution_guid?: string;
|
|
263
|
+
institution_name?: string;
|
|
256
264
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { InsightsPayload } from '../../../../core';
|
|
2
|
+
interface DirectDepositBlockProps {
|
|
3
|
+
payload: InsightsPayload;
|
|
4
|
+
beatGuid?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Direct Deposit component block — the shared hero visual for the Set Up
|
|
8
|
+
* Direct Deposit, Switch Direct Deposit, and Missing Interest Rate beats.
|
|
9
|
+
*
|
|
10
|
+
* The backend picks the design branch via `instance_slot.variant` and carries
|
|
11
|
+
* the account facts flat on `instance_slot` (V2 contract — no
|
|
12
|
+
* `instance_slot_data`). Everything variant-specific is flat on the layout
|
|
13
|
+
* config (`./layout.ts`); `DirectDepositCard` is a variant-agnostic hero.
|
|
14
|
+
*/
|
|
15
|
+
declare const DirectDepositBlock: ({ payload }: DirectDepositBlockProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export default DirectDepositBlock;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DepositLogo as f } from "../../../components/ComponentBlocks/DepositLogo.es.js";
|
|
2
|
+
import { directDepositVariant as l, getLayoutConfig as D } from "./layout.es.js";
|
|
3
|
+
import g from "../../../components/DirectDepositCard.es.js";
|
|
4
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
5
|
+
import { useTheme as _ } from "@mui/material/styles";
|
|
6
|
+
var L = ({ payload: i }) => {
|
|
7
|
+
const e = _(), { instance_slot: n } = i, { account_name: a, account_type: s, institution_guid: r, institution_name: c, status_text: m, variant: u } = n, t = D(e), p = t[u] ?? t[l.SetUpDirectDeposit];
|
|
8
|
+
return /* @__PURE__ */ o(g, {
|
|
9
|
+
...p,
|
|
10
|
+
logo: /* @__PURE__ */ o(f, {
|
|
11
|
+
iconName: "account_balance",
|
|
12
|
+
institutionName: c ?? "",
|
|
13
|
+
institutionGuid: r ?? ""
|
|
14
|
+
}),
|
|
15
|
+
name: a,
|
|
16
|
+
statusLabel: m,
|
|
17
|
+
subtitle: s
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
L as default
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=DirectDepositBlock.es.js.map
|
package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.es.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectDepositBlock.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.tsx"],"sourcesContent":["import { useTheme } from '@mui/material/styles'\n\nimport type { InsightsPayload } from '../../../../core'\n\nimport DirectDepositCard from '../../../components/DirectDepositCard'\n\nimport { directDepositVariant, getLayoutConfig, type DirectDepositVariant } from './layout'\nimport DepositLogo from '../../../components/ComponentBlocks/DepositLogo'\n\ninterface DirectDepositBlockProps {\n payload: InsightsPayload\n beatGuid?: string\n}\n\n/**\n * Direct Deposit component block — the shared hero visual for the Set Up\n * Direct Deposit, Switch Direct Deposit, and Missing Interest Rate beats.\n *\n * The backend picks the design branch via `instance_slot.variant` and carries\n * the account facts flat on `instance_slot` (V2 contract — no\n * `instance_slot_data`). Everything variant-specific is flat on the layout\n * config (`./layout.ts`); `DirectDepositCard` is a variant-agnostic hero.\n */\nconst DirectDepositBlock = ({ payload }: DirectDepositBlockProps) => {\n const theme = useTheme()\n const { instance_slot } = payload\n const { account_name, account_type, institution_guid, institution_name, status_text, variant } =\n instance_slot\n\n const layoutConfig = getLayoutConfig(theme)\n // Unknown backend variants degrade to the pending setup styling rather than\n // crashing (mirrors createVariantBlock's fallback philosophy).\n const config =\n layoutConfig[variant as DirectDepositVariant] ??\n layoutConfig[directDepositVariant.SetUpDirectDeposit]\n\n return (\n <DirectDepositCard\n {...config}\n logo={\n <DepositLogo\n iconName=\"account_balance\"\n institutionName={institution_name ?? ''}\n institutionGuid={institution_guid ?? ''}\n />\n }\n name={account_name}\n statusLabel={status_text}\n subtitle={account_type}\n />\n )\n}\n\nexport default DirectDepositBlock\n"],"mappings":";;;;;AAuBA,IAAM,IAAA,CAAsB,EAAE,SAAA,EAAA,MAAuC;AACnE,QAAM,IAAQ,EAAS,GACjB,EAAE,eAAA,EAAA,IAAkB,GACpB,EAAE,cAAA,GAAc,cAAA,GAAc,kBAAA,GAAkB,kBAAA,GAAkB,aAAA,GAAa,SAAA,EAAA,IACnF,GAEI,IAAe,EAAgB,CAAK,GAGpC,IACJ,EAAa,CAAA,KACb,EAAa,EAAqB,kBAAA;AAEpC,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,GAAI;AAAA,IACJ,MACE,gBAAA,EAAC,GAAD;AAAA,MACE,UAAS;AAAA,MACT,iBAAiB,KAAoB;AAAA,MACrC,iBAAiB,KAAoB;AAAA,IACtC,CAAA;AAAA,IAEH,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACX,CAAA;AAEL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as DirectDepositBlock } from './DirectDepositBlock';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Theme } from '@mui/material/styles';
|
|
2
|
+
import { DirectDepositCardStyleProps, DirectDepositPillConfig } from '../../../components/DirectDepositCard';
|
|
3
|
+
/**
|
|
4
|
+
* Design branches of the Direct Deposit component block (Figma: "Direct
|
|
5
|
+
* Deposit" — Detailed Primary / Detailed Success / Deposit Completed):
|
|
6
|
+
*
|
|
7
|
+
* - `SetUpDirectDeposit` — pending setup: flat `primary.lighter` slot, neutral pill
|
|
8
|
+
* ("Direct Deposit Not Set Up").
|
|
9
|
+
* - `DirectDepositComplete` — Set Up / Switch Direct Deposit success: celebration wash +
|
|
10
|
+
* confetti, solid success pill with a check_circle glyph ("Direct Deposit Complete").
|
|
11
|
+
* - `MissingInterestRate` — pending rate: blue gradient slot, primary-tinted pill
|
|
12
|
+
* ("Unknown Interest Rate (APR)%").
|
|
13
|
+
* - `InterestRateAdded` — rate added: green gradient slot, solid success pill
|
|
14
|
+
* ("Interest Rate: 19.99% APR").
|
|
15
|
+
*/
|
|
16
|
+
export declare const directDepositVariant: {
|
|
17
|
+
readonly SetUpDirectDeposit: "set_up_direct_deposit";
|
|
18
|
+
readonly DirectDepositComplete: "direct_deposit_complete";
|
|
19
|
+
readonly MissingInterestRate: "missing_interest_rate";
|
|
20
|
+
readonly InterestRateAdded: "interest_rate_added";
|
|
21
|
+
};
|
|
22
|
+
export type DirectDepositVariant = (typeof directDepositVariant)[keyof typeof directDepositVariant];
|
|
23
|
+
export declare const NEUTRAL_PILL: DirectDepositPillConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Per-variant style props for `DirectDepositCard`, keyed by the backend
|
|
26
|
+
* `instance_slot.variant` (mirrors AccountBlock's `getLayoutConfig`).
|
|
27
|
+
*/
|
|
28
|
+
export declare const getLayoutConfig: (theme: Theme) => Record<DirectDepositVariant, DirectDepositCardStyleProps>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { WARM_LIME_ACCENT_GRADIENT as o } from "../../../components/celebrationGradients.es.js";
|
|
2
|
+
var e = {
|
|
3
|
+
SetUpDirectDeposit: "set_up_direct_deposit",
|
|
4
|
+
DirectDepositComplete: "direct_deposit_complete",
|
|
5
|
+
MissingInterestRate: "missing_interest_rate",
|
|
6
|
+
InterestRateAdded: "interest_rate_added"
|
|
7
|
+
}, i = {
|
|
8
|
+
light: "linear-gradient(180deg, #A0B9F8 0%, #2C64EF 100%)",
|
|
9
|
+
dark: "linear-gradient(180deg, #1F46A7 0%, #6B92F4 100%)"
|
|
10
|
+
}, l = {
|
|
11
|
+
light: "linear-gradient(180deg, #94C9B7 0%, #12875E 100%)",
|
|
12
|
+
dark: "linear-gradient(180deg, #0D5F42 0%, #59AB8E 100%)"
|
|
13
|
+
}, n = {
|
|
14
|
+
bgcolor: "grey.200",
|
|
15
|
+
borderColor: "grey.200",
|
|
16
|
+
labelColor: "text.primary"
|
|
17
|
+
}, d = {
|
|
18
|
+
bgcolor: "primary.lighter",
|
|
19
|
+
borderColor: "primary.lighter",
|
|
20
|
+
labelColor: "text.primary"
|
|
21
|
+
}, t = {
|
|
22
|
+
bgcolor: "success.main",
|
|
23
|
+
borderColor: "success.main",
|
|
24
|
+
labelColor: "success.contrastText"
|
|
25
|
+
}, c = (a) => {
|
|
26
|
+
const r = a.palette.mode;
|
|
27
|
+
return {
|
|
28
|
+
[e.SetUpDirectDeposit]: {
|
|
29
|
+
bgcolor: "primary.lighter",
|
|
30
|
+
nameVariant: "body2",
|
|
31
|
+
pill: n
|
|
32
|
+
},
|
|
33
|
+
[e.DirectDepositComplete]: {
|
|
34
|
+
backgroundImage: o,
|
|
35
|
+
bgcolor: "background.paper",
|
|
36
|
+
nameVariant: "body2",
|
|
37
|
+
pill: {
|
|
38
|
+
...t,
|
|
39
|
+
icon: "check_circle"
|
|
40
|
+
},
|
|
41
|
+
showConfetti: !0
|
|
42
|
+
},
|
|
43
|
+
[e.MissingInterestRate]: {
|
|
44
|
+
backgroundImage: i[r],
|
|
45
|
+
bgcolor: "background.paper",
|
|
46
|
+
nameVariant: "body1",
|
|
47
|
+
pill: d
|
|
48
|
+
},
|
|
49
|
+
[e.InterestRateAdded]: {
|
|
50
|
+
backgroundImage: l[r],
|
|
51
|
+
bgcolor: "background.paper",
|
|
52
|
+
nameVariant: "body1",
|
|
53
|
+
pill: t
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
export {
|
|
58
|
+
n as NEUTRAL_PILL,
|
|
59
|
+
e as directDepositVariant,
|
|
60
|
+
c as getLayoutConfig
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=layout.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.es.js","names":[],"sources":["../../../../../src/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/layout.ts"],"sourcesContent":["import type { Theme } from '@mui/material/styles'\n\nimport { WARM_LIME_ACCENT_GRADIENT } from '../../../components/celebrationGradients'\nimport type {\n DirectDepositCardStyleProps,\n DirectDepositPillConfig,\n} from '../../../components/DirectDepositCard'\n\n/**\n * Design branches of the Direct Deposit component block (Figma: \"Direct\n * Deposit\" — Detailed Primary / Detailed Success / Deposit Completed):\n *\n * - `SetUpDirectDeposit` — pending setup: flat `primary.lighter` slot, neutral pill\n * (\"Direct Deposit Not Set Up\").\n * - `DirectDepositComplete` — Set Up / Switch Direct Deposit success: celebration wash +\n * confetti, solid success pill with a check_circle glyph (\"Direct Deposit Complete\").\n * - `MissingInterestRate` — pending rate: blue gradient slot, primary-tinted pill\n * (\"Unknown Interest Rate (APR)%\").\n * - `InterestRateAdded` — rate added: green gradient slot, solid success pill\n * (\"Interest Rate: 19.99% APR\").\n */\nexport const directDepositVariant = {\n SetUpDirectDeposit: 'set_up_direct_deposit',\n DirectDepositComplete: 'direct_deposit_complete',\n MissingInterestRate: 'missing_interest_rate',\n InterestRateAdded: 'interest_rate_added',\n} as const\n\nexport type DirectDepositVariant = (typeof directDepositVariant)[keyof typeof directDepositVariant]\n\n// Figma slot gradients (opaque, vertical). Light/dark pairs are taken from the\n// light and dark pages of the Missing Interest Rates frame — they are bespoke\n// blends with no theme token, so they stay literal hexes keyed by palette mode.\nconst MISSING_RATE_GRADIENTS = {\n light: 'linear-gradient(180deg, #A0B9F8 0%, #2C64EF 100%)',\n dark: 'linear-gradient(180deg, #1F46A7 0%, #6B92F4 100%)',\n} as const\n\nconst RATE_ADDED_GRADIENTS = {\n light: 'linear-gradient(180deg, #94C9B7 0%, #12875E 100%)',\n dark: 'linear-gradient(180deg, #0D5F42 0%, #59AB8E 100%)',\n} as const\n\n// Figma light-mode references: neutral pill #ececec, primary-tinted pill\n// #dfe8fd (`primary.lighter`), solid success pill #12875e (`success.main`).\nexport const NEUTRAL_PILL: DirectDepositPillConfig = {\n bgcolor: 'grey.200',\n borderColor: 'grey.200',\n labelColor: 'text.primary',\n}\n\nconst PRIMARY_TINT_PILL: DirectDepositPillConfig = {\n bgcolor: 'primary.lighter',\n borderColor: 'primary.lighter',\n labelColor: 'text.primary',\n}\n\nconst SUCCESS_PILL: DirectDepositPillConfig = {\n bgcolor: 'success.main',\n borderColor: 'success.main',\n labelColor: 'success.contrastText',\n}\n\n/**\n * Per-variant style props for `DirectDepositCard`, keyed by the backend\n * `instance_slot.variant` (mirrors AccountBlock's `getLayoutConfig`).\n */\nexport const getLayoutConfig = (\n theme: Theme,\n): Record<DirectDepositVariant, DirectDepositCardStyleProps> => {\n const mode = theme.palette.mode\n\n return {\n [directDepositVariant.SetUpDirectDeposit]: {\n bgcolor: 'primary.lighter',\n nameVariant: 'body2',\n pill: NEUTRAL_PILL,\n },\n [directDepositVariant.DirectDepositComplete]: {\n backgroundImage: WARM_LIME_ACCENT_GRADIENT,\n bgcolor: 'background.paper',\n nameVariant: 'body2',\n // Figma 1941:192796: 16px check_circle inside the complete pill.\n pill: { ...SUCCESS_PILL, icon: 'check_circle' },\n showConfetti: true,\n },\n [directDepositVariant.MissingInterestRate]: {\n backgroundImage: MISSING_RATE_GRADIENTS[mode],\n bgcolor: 'background.paper',\n nameVariant: 'body1',\n pill: PRIMARY_TINT_PILL,\n },\n [directDepositVariant.InterestRateAdded]: {\n backgroundImage: RATE_ADDED_GRADIENTS[mode],\n bgcolor: 'background.paper',\n nameVariant: 'body1',\n pill: SUCCESS_PILL,\n },\n }\n}\n"],"mappings":";AAqBA,IAAa,IAAuB;AAAA,EAClC,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,mBAAmB;AACrB,GAOM,IAAyB;AAAA,EAC7B,OAAO;AAAA,EACP,MAAM;AACR,GAEM,IAAuB;AAAA,EAC3B,OAAO;AAAA,EACP,MAAM;AACR,GAIa,IAAwC;AAAA,EACnD,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AACd,GAEM,IAA6C;AAAA,EACjD,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AACd,GAEM,IAAwC;AAAA,EAC5C,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AACd,GAMa,IAAA,CACX,MAC8D;AAC9D,QAAM,IAAO,EAAM,QAAQ;AAE3B,SAAO;AAAA,IACJ,CAAA,EAAqB,kBAAA,GAAqB;AAAA,MACzC,SAAS;AAAA,MACT,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACC,CAAA,EAAqB,qBAAA,GAAwB;AAAA,MAC5C,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,aAAa;AAAA,MAEb,MAAM;AAAA,QAAE,GAAG;AAAA,QAAc,MAAM;AAAA,MAAe;AAAA,MAC9C,cAAc;AAAA,IAChB;AAAA,IACC,CAAA,EAAqB,mBAAA,GAAsB;AAAA,MAC1C,iBAAiB,EAAuB,CAAA;AAAA,MACxC,SAAS;AAAA,MACT,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACC,CAAA,EAAqB,iBAAA,GAAoB;AAAA,MACxC,iBAAiB,EAAqB,CAAA;AAAA,MACtC,SAAS;AAAA,MACT,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AACF"}
|
|
@@ -7,6 +7,12 @@ interface AccountHeroCardProps {
|
|
|
7
7
|
name: ReactNode;
|
|
8
8
|
/** Optional secondary line beneath the name, e.g. "Checking Account". */
|
|
9
9
|
subtitle?: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* Name typography. Figma: Set Up/Switch Direct Deposit use body2 metrics
|
|
12
|
+
* (13px / lh 16, default); Missing Interest Rate uses body1 (15px / lh 20).
|
|
13
|
+
* Both render at weight 600.
|
|
14
|
+
*/
|
|
15
|
+
nameVariant?: 'body1' | 'body2';
|
|
10
16
|
/** Status element beneath the text (e.g. a `<StatusPill>`). */
|
|
11
17
|
status?: ReactNode;
|
|
12
18
|
/** Decorative backdrop behind the card (e.g. a `<Confetti>` burst). */
|
|
@@ -31,5 +37,5 @@ interface AccountHeroCardProps {
|
|
|
31
37
|
* Figma: Set Up Direct Deposit (default + complete) and Switch Direct Deposit
|
|
32
38
|
* (complete) Content. Scope is the Content section only.
|
|
33
39
|
*/
|
|
34
|
-
declare const AccountHeroCard: ({ backdrop, backgroundImage, bgcolor, logo, name, status, subtitle, sx, }: AccountHeroCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
declare const AccountHeroCard: ({ backdrop, backgroundImage, bgcolor, logo, name, nameVariant, status, subtitle, sx, }: AccountHeroCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
35
41
|
export default AccountHeroCard;
|
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
import { getLogoElevation as
|
|
1
|
+
import { getLogoElevation as m } from "./logoShadow.es.js";
|
|
2
2
|
import r from "@mui/material/Stack";
|
|
3
3
|
import { Text as d } from "@mxenabled/mxui";
|
|
4
4
|
import { jsx as t, jsxs as e } from "react/jsx-runtime";
|
|
5
5
|
import i from "@mui/material/Box";
|
|
6
|
-
var
|
|
6
|
+
var v = ({ backdrop: n, backgroundImage: o, bgcolor: s = "primary.lighter", logo: p, name: c, nameVariant: x = "body2", status: a, subtitle: l, sx: h }) => /* @__PURE__ */ e(i, {
|
|
7
7
|
sx: {
|
|
8
8
|
alignItems: "center",
|
|
9
9
|
bgcolor: s,
|
|
10
10
|
...o && { backgroundImage: o },
|
|
11
11
|
display: "flex",
|
|
12
12
|
flexDirection: "column",
|
|
13
|
-
overflow: "hidden",
|
|
14
13
|
pb: 16,
|
|
15
14
|
position: "relative",
|
|
16
15
|
pt: 41,
|
|
17
16
|
px: 16,
|
|
18
17
|
width: "100%",
|
|
19
|
-
...
|
|
18
|
+
...h
|
|
20
19
|
},
|
|
21
20
|
children: [n && /* @__PURE__ */ t(i, {
|
|
22
21
|
"aria-hidden": !0,
|
|
@@ -31,7 +30,7 @@ var w = ({ backdrop: n, backgroundImage: o, bgcolor: s = "primary.lighter", logo
|
|
|
31
30
|
alignItems: "center",
|
|
32
31
|
bgcolor: "background.paper",
|
|
33
32
|
borderRadius: "8px",
|
|
34
|
-
boxShadow:
|
|
33
|
+
boxShadow: m,
|
|
35
34
|
gap: 16,
|
|
36
35
|
pb: 16,
|
|
37
36
|
position: "relative",
|
|
@@ -65,7 +64,7 @@ var w = ({ backdrop: n, backgroundImage: o, bgcolor: s = "primary.lighter", logo
|
|
|
65
64
|
children: [/* @__PURE__ */ t(d, {
|
|
66
65
|
sx: { fontWeight: 600 },
|
|
67
66
|
truncate: !0,
|
|
68
|
-
variant:
|
|
67
|
+
variant: x,
|
|
69
68
|
children: c
|
|
70
69
|
}), l && /* @__PURE__ */ t(d, {
|
|
71
70
|
color: "text.secondary",
|
|
@@ -85,7 +84,7 @@ var w = ({ backdrop: n, backgroundImage: o, bgcolor: s = "primary.lighter", logo
|
|
|
85
84
|
})]
|
|
86
85
|
});
|
|
87
86
|
export {
|
|
88
|
-
|
|
87
|
+
v as default
|
|
89
88
|
};
|
|
90
89
|
|
|
91
90
|
//# sourceMappingURL=AccountHeroCard.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountHeroCard.es.js","names":[],"sources":["../../../src/insights-v2/components/AccountHeroCard.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { getLogoElevation } from './logoShadow'\n\n// Figma: the logo overhangs the white card's top edge by 25px and the slot pads\n// 16px above that overhang (so `pt = overhang + 16`).\nconst LOGO_OVERHANG = 25\n\ninterface AccountHeroCardProps {\n /** Central account/institution logo, rendered overhanging the card's top edge. */\n logo: ReactNode\n /** Primary line, e.g. \"Epic Bank Checking, *1234\". */\n name: ReactNode\n /** Optional secondary line beneath the name, e.g. \"Checking Account\". */\n subtitle?: ReactNode\n /** Status element beneath the text (e.g. a `<StatusPill>`). */\n status?: ReactNode\n /** Decorative backdrop behind the card (e.g. a `<Confetti>` burst). */\n backdrop?: ReactNode\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 decorative wash layered over `bgcolor` (e.g. a celebration\n * gradient). Figma's gradient is ~20% opacity over a white base, so this is a\n * `backgroundImage` on top of `bgcolor`, not a replacement — pass\n * `bgcolor=\"background.paper\"` with it for the complete state.\n */\n backgroundImage?: string\n sx?: SxProps\n}\n\n/**\n * A centered account hero: an overhanging institution logo above a white card\n * with a name, optional subtitle, and a status slot, over a tinted (or\n * gradient + confetti) slot.\n *\n * Figma: Set Up Direct Deposit (default + complete) and Switch Direct Deposit\n * (complete) Content. Scope is the Content section only.\n */\nconst AccountHeroCard = ({\n backdrop,\n backgroundImage,\n bgcolor = 'primary.lighter',\n logo,\n name,\n status,\n subtitle,\n sx,\n}: AccountHeroCardProps) => (\n <Box\n sx={{\n alignItems: 'center',\n bgcolor,\n ...(backgroundImage && { backgroundImage }),\n display: 'flex',\n flexDirection: 'column',\n
|
|
1
|
+
{"version":3,"file":"AccountHeroCard.es.js","names":[],"sources":["../../../src/insights-v2/components/AccountHeroCard.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { getLogoElevation } from './logoShadow'\n\n// Figma: the logo overhangs the white card's top edge by 25px and the slot pads\n// 16px above that overhang (so `pt = overhang + 16`).\nconst LOGO_OVERHANG = 25\n\ninterface AccountHeroCardProps {\n /** Central account/institution logo, rendered overhanging the card's top edge. */\n logo: ReactNode\n /** Primary line, e.g. \"Epic Bank Checking, *1234\". */\n name: ReactNode\n /** Optional secondary line beneath the name, e.g. \"Checking Account\". */\n subtitle?: ReactNode\n /**\n * Name typography. Figma: Set Up/Switch Direct Deposit use body2 metrics\n * (13px / lh 16, default); Missing Interest Rate uses body1 (15px / lh 20).\n * Both render at weight 600.\n */\n nameVariant?: 'body1' | 'body2'\n /** Status element beneath the text (e.g. a `<StatusPill>`). */\n status?: ReactNode\n /** Decorative backdrop behind the card (e.g. a `<Confetti>` burst). */\n backdrop?: ReactNode\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 decorative wash layered over `bgcolor` (e.g. a celebration\n * gradient). Figma's gradient is ~20% opacity over a white base, so this is a\n * `backgroundImage` on top of `bgcolor`, not a replacement — pass\n * `bgcolor=\"background.paper\"` with it for the complete state.\n */\n backgroundImage?: string\n sx?: SxProps\n}\n\n/**\n * A centered account hero: an overhanging institution logo above a white card\n * with a name, optional subtitle, and a status slot, over a tinted (or\n * gradient + confetti) slot.\n *\n * Figma: Set Up Direct Deposit (default + complete) and Switch Direct Deposit\n * (complete) Content. Scope is the Content section only.\n */\nconst AccountHeroCard = ({\n backdrop,\n backgroundImage,\n bgcolor = 'primary.lighter',\n logo,\n name,\n nameVariant = 'body2',\n status,\n subtitle,\n sx,\n}: AccountHeroCardProps) => (\n <Box\n sx={{\n alignItems: 'center',\n bgcolor,\n ...(backgroundImage && { backgroundImage }),\n display: 'flex',\n flexDirection: 'column',\n pb: 16,\n position: 'relative',\n pt: LOGO_OVERHANG + 16,\n px: 16,\n width: '100%',\n ...sx,\n }}\n >\n {backdrop && (\n <Box aria-hidden={true} sx={{ inset: 0, position: 'absolute', zIndex: 0 }}>\n {backdrop}\n </Box>\n )}\n <Stack\n sx={{\n alignItems: 'center',\n // Theme-aware card surface (white in light, dark surface in dark) — not\n // `common.white`, which stays white and breaks dark mode.\n bgcolor: 'background.paper',\n borderRadius: '8px',\n // Figma: soft card drop-shadow (0 2px 8px rgba(0,0,0,0.12)).\n boxShadow: getLogoElevation,\n gap: 16,\n pb: 16,\n position: 'relative',\n pt: 36,\n px: 16,\n width: '100%',\n zIndex: 1,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n left: '50%',\n position: 'absolute',\n top: -LOGO_OVERHANG,\n transform: 'translateX(-50%)',\n }}\n >\n {logo}\n </Box>\n <Stack sx={{ alignItems: 'center', gap: 12, minWidth: 0, width: '100%' }}>\n <Stack sx={{ alignItems: 'center', minWidth: 0, width: '100%' }}>\n {/* Figma name style: body2 (13/16) or body1 (15/20) metrics at weight\n 600. MXUI `bold` renders 700, so set fontWeight explicitly. */}\n <Text sx={{ fontWeight: 600 }} truncate={true} variant={nameVariant}>\n {name}\n </Text>\n {subtitle && (\n <Text color=\"text.secondary\" truncate={true} variant=\"caption\">\n {subtitle}\n </Text>\n )}\n </Stack>\n {/* Center the status regardless of its own alignment (StatusPill\n defaults to `alignSelf: flex-start` for left-aligned contexts). */}\n {status && (\n <Box sx={{ display: 'flex', justifyContent: 'center', width: '100%' }}>{status}</Box>\n )}\n </Stack>\n </Stack>\n </Box>\n)\n\nexport default AccountHeroCard\n"],"mappings":";;;;;AAoDA,IAAM,IAAA,CAAmB,EACvB,UAAA,GACA,iBAAA,GACA,SAAA,IAAU,mBACV,MAAA,GACA,MAAA,GACA,aAAA,IAAc,SACd,QAAA,GACA,UAAA,GACA,IAAA,EAAA,MAEA,gBAAA,EAAC,GAAD;AAAA,EACE,IAAI;AAAA,IACF,YAAY;AAAA,IACZ,SAAA;AAAA,IACA,GAAI,KAAmB,EAAE,iBAAA,EAAgB;AAAA,IACzC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,GAAG;AAAA,EACL;AAAA,EAbF,UAAA,CAeG,KACC,gBAAA,EAAC,GAAD;AAAA,IAAK,eAAa;AAAA,IAAM,IAAI;AAAA,MAAE,OAAO;AAAA,MAAG,UAAU;AAAA,MAAY,QAAQ;AAAA,IAAE;AAAA,IACrE,UAAA;AAAA,EACE,CAAA,GAEP,gBAAA,EAAC,GAAD;AAAA,IACE,IAAI;AAAA,MACF,YAAY;AAAA,MAGZ,SAAS;AAAA,MACT,cAAc;AAAA,MAEd,WAAW;AAAA,MACX,KAAK;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,IAhBF,UAAA,CAkBE,gBAAA,EAAC,GAAD;AAAA,MACE,IAAI;AAAA,QACF,SAAS;AAAA,QACT,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK;AAAA,QACL,WAAW;AAAA,MACb;AAAA,MAEC,UAAA;AAAA,IACE,CAAA,GACL,gBAAA,EAAC,GAAD;AAAA,MAAO,IAAI;AAAA,QAAE,YAAY;AAAA,QAAU,KAAK;AAAA,QAAI,UAAU;AAAA,QAAG,OAAO;AAAA,MAAO;AAAA,MAAvE,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,QAAO,IAAI;AAAA,UAAE,YAAY;AAAA,UAAU,UAAU;AAAA,UAAG,OAAO;AAAA,QAAO;AAAA,QAA9D,UAAA,CAGE,gBAAA,EAAC,GAAD;AAAA,UAAM,IAAI,EAAE,YAAY,IAAI;AAAA,UAAG,UAAU;AAAA,UAAM,SAAS;AAAA,UACrD,UAAA;AAAA,QACG,CAAA,GACL,KACC,gBAAA,EAAC,GAAD;AAAA,UAAM,OAAM;AAAA,UAAiB,UAAU;AAAA,UAAM,SAAQ;AAAA,UAClD,UAAA;AAAA,QACG,CAAA,CAEH;AAAA,MAGN,CAAA,GAAA,KACC,gBAAA,EAAC,GAAD;AAAA,QAAK,IAAI;AAAA,UAAE,SAAS;AAAA,UAAQ,gBAAgB;AAAA,UAAU,OAAO;AAAA,QAAO;AAAA,QAAI,UAAA;AAAA,MAAY,CAAA,CAEjF;AAAA,IACF,CAAA,CAAA;AAAA,EACJ,CAAA,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface DirectDepositPillConfig {
|
|
3
|
+
/** Pill background color token. */
|
|
4
|
+
bgcolor: string;
|
|
5
|
+
/** Pill border color token. */
|
|
6
|
+
borderColor: string;
|
|
7
|
+
/** Pill label color token. */
|
|
8
|
+
labelColor: string;
|
|
9
|
+
/** Optional mx-icons glyph rendered before the label (e.g. `check_circle`). */
|
|
10
|
+
icon?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Style props for the card. Variant-specific values live in the Direct Deposit
|
|
14
|
+
* block's `layout.ts` (`getLayoutConfig`) — the card itself is variant-agnostic.
|
|
15
|
+
*/
|
|
16
|
+
export interface DirectDepositCardStyleProps {
|
|
17
|
+
/** Slot surface token behind the white hero card. Default `primary.lighter`. */
|
|
18
|
+
bgcolor?: string;
|
|
19
|
+
/** Decorative wash layered over `bgcolor` (celebration/gradient slots). */
|
|
20
|
+
backgroundImage?: string;
|
|
21
|
+
/** Confetti burst behind the hero card (complete states). */
|
|
22
|
+
showConfetti?: boolean;
|
|
23
|
+
/** Hero name typography. Default `body2` (13/16); rate variants use `body1` (15/20). */
|
|
24
|
+
nameVariant?: 'body1' | 'body2';
|
|
25
|
+
/** Status pill color tokens + optional leading glyph. */
|
|
26
|
+
pill?: DirectDepositPillConfig;
|
|
27
|
+
}
|
|
28
|
+
interface DirectDepositCardProps extends DirectDepositCardStyleProps {
|
|
29
|
+
/** Institution/account logo, rendered overhanging the hero card's top edge. */
|
|
30
|
+
logo: ReactNode;
|
|
31
|
+
/** Primary line, e.g. "Epic Bank Checking, *1234". */
|
|
32
|
+
name: ReactNode;
|
|
33
|
+
/** Optional secondary line, e.g. "Checking Account" / "Credit Card". */
|
|
34
|
+
subtitle?: ReactNode;
|
|
35
|
+
/** Optional status pill label, e.g. "Direct Deposit Not Set Up". */
|
|
36
|
+
statusLabel?: ReactNode;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The basic Direct Deposit hero card: an overhanging logo above a white card
|
|
40
|
+
* with a name, optional subtitle, and a status pill, over a tinted/gradient
|
|
41
|
+
* slot with an optional confetti backdrop.
|
|
42
|
+
*
|
|
43
|
+
* Purely presentational — it knows nothing about beats or variants. The Direct
|
|
44
|
+
* Deposit block resolves `instance_slot.variant` to these style props via its
|
|
45
|
+
* `layout.ts` (`getLayoutConfig`).
|
|
46
|
+
*/
|
|
47
|
+
declare const DirectDepositCard: ({ backgroundImage, bgcolor, logo, name, nameVariant, pill, showConfetti, statusLabel, subtitle, }: DirectDepositCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export default DirectDepositCard;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import n from "./StatusPill.es.js";
|
|
2
|
+
import { ConfettiOverlay as b } from "./shared/ConfettiOverlay.es.js";
|
|
3
|
+
import f from "./AccountHeroCard.es.js";
|
|
4
|
+
import { NEUTRAL_PILL as s } from "../blocks/ComponentBlocks/DirectDepositBlock/layout.es.js";
|
|
5
|
+
import { Icon as C } from "@mxenabled/mx-icons";
|
|
6
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
7
|
+
var h = ({ backgroundImage: t, bgcolor: i = "primary.lighter", logo: a, name: d, nameVariant: m = "body2", pill: o = s, showConfetti: l = !1, statusLabel: e, subtitle: c }) => /* @__PURE__ */ r(f, {
|
|
8
|
+
backdrop: l ? /* @__PURE__ */ r(b, {}) : void 0,
|
|
9
|
+
backgroundImage: t,
|
|
10
|
+
bgcolor: i,
|
|
11
|
+
logo: a,
|
|
12
|
+
name: d,
|
|
13
|
+
nameVariant: m,
|
|
14
|
+
status: e ? /* @__PURE__ */ r(n, {
|
|
15
|
+
bgcolor: o.bgcolor,
|
|
16
|
+
borderColor: o.borderColor,
|
|
17
|
+
icon: o.icon ? /* @__PURE__ */ r(C, {
|
|
18
|
+
"aria-hidden": !0,
|
|
19
|
+
"data-testid": "pill-icon",
|
|
20
|
+
name: o.icon,
|
|
21
|
+
size: 16,
|
|
22
|
+
sx: { color: o.labelColor }
|
|
23
|
+
}) : void 0,
|
|
24
|
+
label: e,
|
|
25
|
+
labelColor: o.labelColor,
|
|
26
|
+
sx: {
|
|
27
|
+
border: "none",
|
|
28
|
+
px: 12
|
|
29
|
+
}
|
|
30
|
+
}) : void 0,
|
|
31
|
+
subtitle: c
|
|
32
|
+
});
|
|
33
|
+
export {
|
|
34
|
+
h as default
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=DirectDepositCard.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectDepositCard.es.js","names":[],"sources":["../../../src/insights-v2/components/DirectDepositCard.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport AccountHeroCard from './AccountHeroCard'\nimport StatusPill from './StatusPill'\n\nimport { ConfettiOverlay } from './shared/ConfettiOverlay'\nimport { NEUTRAL_PILL } from '../blocks/ComponentBlocks/DirectDepositBlock/layout'\n\nexport interface DirectDepositPillConfig {\n /** Pill background color token. */\n bgcolor: string\n /** Pill border color token. */\n borderColor: string\n /** Pill label color token. */\n labelColor: string\n /** Optional mx-icons glyph rendered before the label (e.g. `check_circle`). */\n icon?: string\n}\n\n/**\n * Style props for the card. Variant-specific values live in the Direct Deposit\n * block's `layout.ts` (`getLayoutConfig`) — the card itself is variant-agnostic.\n */\nexport interface DirectDepositCardStyleProps {\n /** Slot surface token behind the white hero card. Default `primary.lighter`. */\n bgcolor?: string\n /** Decorative wash layered over `bgcolor` (celebration/gradient slots). */\n backgroundImage?: string\n /** Confetti burst behind the hero card (complete states). */\n showConfetti?: boolean\n /** Hero name typography. Default `body2` (13/16); rate variants use `body1` (15/20). */\n nameVariant?: 'body1' | 'body2'\n /** Status pill color tokens + optional leading glyph. */\n pill?: DirectDepositPillConfig\n}\n\ninterface DirectDepositCardProps extends DirectDepositCardStyleProps {\n /** Institution/account logo, rendered overhanging the hero card's top edge. */\n logo: ReactNode\n /** Primary line, e.g. \"Epic Bank Checking, *1234\". */\n name: ReactNode\n /** Optional secondary line, e.g. \"Checking Account\" / \"Credit Card\". */\n subtitle?: ReactNode\n /** Optional status pill label, e.g. \"Direct Deposit Not Set Up\". */\n statusLabel?: ReactNode\n}\n\n/**\n * The basic Direct Deposit hero card: an overhanging logo above a white card\n * with a name, optional subtitle, and a status pill, over a tinted/gradient\n * slot with an optional confetti backdrop.\n *\n * Purely presentational — it knows nothing about beats or variants. The Direct\n * Deposit block resolves `instance_slot.variant` to these style props via its\n * `layout.ts` (`getLayoutConfig`).\n */\nconst DirectDepositCard = ({\n backgroundImage,\n bgcolor = 'primary.lighter',\n logo,\n name,\n nameVariant = 'body2',\n pill = NEUTRAL_PILL,\n showConfetti = false,\n statusLabel,\n subtitle,\n}: DirectDepositCardProps) => {\n return (\n <AccountHeroCard\n backdrop={showConfetti ? <ConfettiOverlay /> : undefined}\n backgroundImage={backgroundImage}\n bgcolor={bgcolor}\n logo={logo}\n name={name}\n nameVariant={nameVariant}\n status={\n statusLabel ? (\n <StatusPill\n bgcolor={pill.bgcolor}\n borderColor={pill.borderColor}\n icon={\n pill.icon ? (\n <Icon\n aria-hidden={true}\n data-testid=\"pill-icon\"\n name={pill.icon}\n size={16}\n sx={{ color: pill.labelColor }}\n />\n ) : undefined\n }\n label={statusLabel}\n labelColor={pill.labelColor}\n // Figma pill geometry: 24px tall, 12px side padding, no stroke\n // (StatusPill defaults draw a 1px border and 16px padding).\n sx={{ border: 'none', px: 12 }}\n />\n ) : undefined\n }\n subtitle={subtitle}\n />\n )\n}\n\nexport default DirectDepositCard\n"],"mappings":";;;;;;AA0DA,IAAM,IAAA,CAAqB,EACzB,iBAAA,GACA,SAAA,IAAU,mBACV,MAAA,GACA,MAAA,GACA,aAAA,IAAc,SACd,MAAA,IAAO,GACP,cAAA,IAAe,IACf,aAAA,GACA,UAAA,EAAA,MAGE,gBAAA,EAAC,GAAD;AAAA,EACE,UAAU,IAAe,gBAAA,EAAC,GAAD,CAAkB,CAAA,IAAI;AAAA,EAC9B,iBAAA;AAAA,EACR,SAAA;AAAA,EACH,MAAA;AAAA,EACA,MAAA;AAAA,EACO,aAAA;AAAA,EACb,QACE,IACE,gBAAA,EAAC,GAAD;AAAA,IACE,SAAS,EAAK;AAAA,IACd,aAAa,EAAK;AAAA,IAClB,MACE,EAAK,OACH,gBAAA,EAAC,GAAD;AAAA,MACE,eAAa;AAAA,MACb,eAAY;AAAA,MACZ,MAAM,EAAK;AAAA,MACX,MAAM;AAAA,MACN,IAAI,EAAE,OAAO,EAAK,WAAW;AAAA,IAC9B,CAAA,IACC;AAAA,IAEN,OAAO;AAAA,IACP,YAAY,EAAK;AAAA,IAGjB,IAAI;AAAA,MAAE,QAAQ;AAAA,MAAQ,IAAI;AAAA,IAAG;AAAA,EAC9B,CAAA,IACC;AAAA,EAEI,UAAA;AACX,CAAA"}
|
|
@@ -34,6 +34,11 @@ interface TransferLogoCardProps {
|
|
|
34
34
|
showConfetti?: boolean;
|
|
35
35
|
sx?: SxProps;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Confetti overlay for the success state. Measures the container and fires the
|
|
39
|
+
* burst once dimensions arrive. Scoped to this component so the resize listener
|
|
40
|
+
* only mounts when confetti is shown.
|
|
41
|
+
*/
|
|
37
42
|
/**
|
|
38
43
|
* A from → to account transfer visual: two institution logos on a rounded track
|
|
39
44
|
* with a central arrow badge and connector dots between them.
|
|
@@ -1,118 +1,100 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Confetti as v } from "./shared/Confetti.es.js";
|
|
3
|
-
import { useRef as I } from "react";
|
|
1
|
+
import { ConfettiOverlay as w } from "./shared/ConfettiOverlay.es.js";
|
|
4
2
|
import d from "@mui/material/Stack";
|
|
5
|
-
import { Icon as
|
|
6
|
-
import { jsx as r, jsxs as
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
var
|
|
3
|
+
import { Icon as v } from "@mxenabled/mx-icons";
|
|
4
|
+
import { jsx as r, jsxs as o } from "react/jsx-runtime";
|
|
5
|
+
import e from "@mui/material/Box";
|
|
6
|
+
import I from "@mui/material/Card";
|
|
7
|
+
var b = 240, R = 40, T = 204, y = /* @__PURE__ */ r(v, {
|
|
10
8
|
"aria-hidden": !0,
|
|
11
9
|
name: "arrow_forward",
|
|
12
10
|
size: 20,
|
|
13
11
|
sx: { color: "neutral.lighter" }
|
|
14
|
-
}),
|
|
15
|
-
bgcolor:
|
|
12
|
+
}), a = ({ color: n = "neutral.darker", size: i = 4 }) => /* @__PURE__ */ r(e, { sx: {
|
|
13
|
+
bgcolor: n,
|
|
16
14
|
borderRadius: "4px",
|
|
17
|
-
height:
|
|
18
|
-
width:
|
|
19
|
-
} }),
|
|
20
|
-
const
|
|
21
|
-
return /* @__PURE__ */ r(i, {
|
|
22
|
-
"aria-hidden": !0,
|
|
23
|
-
ref: t,
|
|
24
|
-
sx: {
|
|
25
|
-
inset: 0,
|
|
26
|
-
position: "absolute",
|
|
27
|
-
zIndex: 0
|
|
28
|
-
},
|
|
29
|
-
children: /* @__PURE__ */ r(v, {
|
|
30
|
-
height: e,
|
|
31
|
-
shouldRun: e > 0,
|
|
32
|
-
width: o
|
|
33
|
-
})
|
|
34
|
-
});
|
|
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 = {
|
|
15
|
+
height: i,
|
|
16
|
+
width: i
|
|
17
|
+
} }), S = ({ badgeBgColor: n = "neutral.darker", bgcolor: i = "primary.lighter", backgroundImage: s, dotColor: t = "neutral.darker", from: x, hasBigDots: f = !0, icon: p = y, showConfetti: g = !1, size: l = 64, to: m, sx: u }) => {
|
|
18
|
+
const h = f ? 6 : 4, c = {
|
|
37
19
|
borderRadius: "4px",
|
|
38
20
|
flexShrink: 0,
|
|
39
21
|
height: l,
|
|
40
22
|
overflow: "hidden",
|
|
41
23
|
width: l
|
|
42
24
|
};
|
|
43
|
-
return /* @__PURE__ */
|
|
25
|
+
return /* @__PURE__ */ o(e, {
|
|
44
26
|
sx: {
|
|
45
|
-
bgcolor:
|
|
46
|
-
...
|
|
27
|
+
bgcolor: i,
|
|
28
|
+
...s && { backgroundImage: s },
|
|
47
29
|
p: 16,
|
|
48
30
|
position: "relative",
|
|
49
31
|
width: "100%",
|
|
50
|
-
...
|
|
32
|
+
...u
|
|
51
33
|
},
|
|
52
|
-
children: [
|
|
34
|
+
children: [g && /* @__PURE__ */ r(w, {}), /* @__PURE__ */ r(I, {
|
|
53
35
|
sx: {
|
|
54
36
|
position: "relative",
|
|
55
37
|
py: 16,
|
|
56
38
|
zIndex: 1
|
|
57
39
|
},
|
|
58
|
-
children: /* @__PURE__ */
|
|
40
|
+
children: /* @__PURE__ */ o(e, {
|
|
59
41
|
sx: {
|
|
60
42
|
display: "grid",
|
|
61
43
|
placeItems: "center"
|
|
62
44
|
},
|
|
63
|
-
children: [/* @__PURE__ */ r(
|
|
45
|
+
children: [/* @__PURE__ */ r(e, { sx: {
|
|
64
46
|
bgcolor: "neutral.lighter",
|
|
65
47
|
borderRadius: "24px",
|
|
66
48
|
gridArea: "1 / 1",
|
|
67
|
-
height:
|
|
68
|
-
width:
|
|
69
|
-
} }), /* @__PURE__ */
|
|
49
|
+
height: R,
|
|
50
|
+
width: b
|
|
51
|
+
} }), /* @__PURE__ */ o(d, {
|
|
70
52
|
sx: {
|
|
71
53
|
alignItems: "center",
|
|
72
54
|
flexDirection: "row",
|
|
73
55
|
gridArea: "1 / 1",
|
|
74
56
|
height: l,
|
|
75
57
|
justifyContent: "space-between",
|
|
76
|
-
width:
|
|
58
|
+
width: T
|
|
77
59
|
},
|
|
78
60
|
children: [
|
|
79
|
-
/* @__PURE__ */ r(
|
|
61
|
+
/* @__PURE__ */ r(e, {
|
|
80
62
|
sx: c,
|
|
81
|
-
children:
|
|
63
|
+
children: x
|
|
82
64
|
}),
|
|
83
|
-
/* @__PURE__ */
|
|
65
|
+
/* @__PURE__ */ o(d, {
|
|
84
66
|
sx: {
|
|
85
67
|
alignItems: "center",
|
|
86
68
|
flexDirection: "row",
|
|
87
69
|
gap: 4
|
|
88
70
|
},
|
|
89
71
|
children: [
|
|
90
|
-
/* @__PURE__ */ r(
|
|
91
|
-
/* @__PURE__ */ r(
|
|
92
|
-
color:
|
|
72
|
+
/* @__PURE__ */ r(a, { color: t }),
|
|
73
|
+
/* @__PURE__ */ r(a, {
|
|
74
|
+
color: t,
|
|
93
75
|
size: h
|
|
94
76
|
}),
|
|
95
77
|
/* @__PURE__ */ r(d, {
|
|
96
78
|
sx: {
|
|
97
79
|
alignItems: "center",
|
|
98
|
-
bgcolor:
|
|
80
|
+
bgcolor: n,
|
|
99
81
|
borderRadius: "50%",
|
|
100
82
|
height: 28,
|
|
101
83
|
justifyContent: "center",
|
|
102
84
|
width: 28
|
|
103
85
|
},
|
|
104
|
-
children:
|
|
86
|
+
children: p
|
|
105
87
|
}),
|
|
106
|
-
/* @__PURE__ */ r(
|
|
107
|
-
color:
|
|
88
|
+
/* @__PURE__ */ r(a, {
|
|
89
|
+
color: t,
|
|
108
90
|
size: h
|
|
109
91
|
}),
|
|
110
|
-
/* @__PURE__ */ r(
|
|
92
|
+
/* @__PURE__ */ r(a, { color: t })
|
|
111
93
|
]
|
|
112
94
|
}),
|
|
113
|
-
/* @__PURE__ */ r(
|
|
95
|
+
/* @__PURE__ */ r(e, {
|
|
114
96
|
sx: c,
|
|
115
|
-
children:
|
|
97
|
+
children: m
|
|
116
98
|
})
|
|
117
99
|
]
|
|
118
100
|
})]
|
|
@@ -121,7 +103,7 @@ var y = 240, T = 40, C = 204, D = /* @__PURE__ */ r(R, {
|
|
|
121
103
|
});
|
|
122
104
|
};
|
|
123
105
|
export {
|
|
124
|
-
|
|
106
|
+
S as default
|
|
125
107
|
};
|
|
126
108
|
|
|
127
109
|
//# 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'\
|
|
1
|
+
{"version":3,"file":"TransferLogoCard.es.js","names":[],"sources":["../../../src/insights-v2/components/TransferLogoCard.tsx"],"sourcesContent":["import type { ReactNode } 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'\nimport { ConfettiOverlay } from './shared/ConfettiOverlay'\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 */\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":";;;;;;AAYA,IAAM,IAAc,KACd,IAAe,IACf,IAAY,KAwCZ,IACJ,gBAAA,EAAC,GAAD;AAAA,EAAM,eAAa;AAAA,EAAM,MAAK;AAAA,EAAgB,MAAM;AAAA,EAAI,IAAI,EAAE,OAAO,kBAAkB;AAAI,CAAA,GAMvF,IAAA,CAAO,EAAE,OAAA,IAAQ,kBAAkB,MAAA,IAAO,EAAA,MAC9C,gBAAA,EAAC,GAAD,EAAK,IAAI;AAAA,EAAE,SAAS;AAAA,EAAO,cAAc;AAAA,EAAO,QAAQ;AAAA,EAAM,OAAO;AAAK,EAAI,CAAA,GAiB1E,IAAA,CAAoB,EACxB,cAAA,IAAe,kBACf,SAAA,IAAU,mBACV,iBAAA,GACA,UAAA,IAAW,kBACX,MAAA,GACA,YAAA,IAAa,IACb,MAAA,IAAO,GACP,cAAA,IAAe,IACf,MAAA,IAAO,IACP,IAAA,GACA,IAAA,EAAA,MAC2B;AAC3B,QAAM,IAAU,IAAa,IAAI,GAC3B,IAAS;AAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,IAAI;AAAA,MACF,SAAA;AAAA,MACA,GAAI,KAAmB,EAAE,iBAAA,EAAgB;AAAA,MACzC,GAAG;AAAA,MAIH,UAAU;AAAA,MACV,OAAO;AAAA,MACP,GAAG;AAAA,IACL;AAAA,IAXF,UAAA,CAaG,KAAgB,gBAAA,EAAC,GAAD,CAAkB,CAAA,GACnC,gBAAA,EAAC,GAAD;AAAA,MAAM,IAAI;AAAA,QAAE,UAAU;AAAA,QAAY,IAAI;AAAA,QAAI,QAAQ;AAAA,MAAE;AAAA,MAClD,UAAA,gBAAA,EAAC,GAAD;AAAA,QAAK,IAAI;AAAA,UAAE,SAAS;AAAA,UAAQ,YAAY;AAAA,QAAS;AAAA,QAAjD,UAAA,CAEE,gBAAA,EAAC,GAAD,EACE,IAAI;AAAA,UACF,SAAS;AAAA,UACT,cAAc;AAAA,UACd,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,QACT,EACD,CAAA,GACD,gBAAA,EAAC,GAAD;AAAA,UACE,IAAI;AAAA,YACF,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,gBAAgB;AAAA,YAChB,OAAO;AAAA,UACT;AAAA,UARF,UAAA;AAAA,YAUE,gBAAA,EAAC,GAAD;AAAA,cAAK,IAAI;AAAA,cAAS,UAAA;AAAA,YAAU,CAAA;AAAA,YAC5B,gBAAA,EAAC,GAAD;AAAA,cAAO,IAAI;AAAA,gBAAE,YAAY;AAAA,gBAAU,eAAe;AAAA,gBAAO,KAAK;AAAA,cAAE;AAAA,cAAhE,UAAA;AAAA,gBACE,gBAAA,EAAC,GAAD,EAAK,OAAO,EAAW,CAAA;AAAA,gBACvB,gBAAA,EAAC,GAAD;AAAA,kBAAK,OAAO;AAAA,kBAAU,MAAM;AAAA,gBAAU,CAAA;AAAA,gBACtC,gBAAA,EAAC,GAAD;AAAA,kBACE,IAAI;AAAA,oBACF,YAAY;AAAA,oBACZ,SAAS;AAAA,oBACT,cAAc;AAAA,oBACd,QAAQ;AAAA,oBACR,gBAAgB;AAAA,oBAChB,OAAO;AAAA,kBACT;AAAA,kBAEC,UAAA;AAAA,gBACI,CAAA;AAAA,gBACP,gBAAA,EAAC,GAAD;AAAA,kBAAK,OAAO;AAAA,kBAAU,MAAM;AAAA,gBAAU,CAAA;AAAA,gBACtC,gBAAA,EAAC,GAAD,EAAK,OAAO,EAAW,CAAA;AAAA,cAClB;AAAA;YACP,gBAAA,EAAC,GAAD;AAAA,cAAK,IAAI;AAAA,cAAS,UAAA;AAAA,YAAQ,CAAA;AAAA,UACrB;AAAA,QACJ,CAAA,CAAA;AAAA;IACD,CAAA,CACH;AAAA;AAET"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ConfettiOverlay: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useContainerDimensions as i } from "../../hooks/useContainerDimensions.es.js";
|
|
2
|
+
import { Confetti as n } from "./Confetti.es.js";
|
|
3
|
+
import { useRef as s } from "react";
|
|
4
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
5
|
+
import { Box as m } from "@mui/material";
|
|
6
|
+
var d = () => {
|
|
7
|
+
const o = s(null), { height: r, width: t } = i(o);
|
|
8
|
+
return /* @__PURE__ */ e(m, {
|
|
9
|
+
"aria-hidden": !0,
|
|
10
|
+
ref: o,
|
|
11
|
+
sx: {
|
|
12
|
+
inset: 0,
|
|
13
|
+
position: "absolute",
|
|
14
|
+
zIndex: 0
|
|
15
|
+
},
|
|
16
|
+
children: /* @__PURE__ */ e(n, {
|
|
17
|
+
height: r,
|
|
18
|
+
shouldRun: r > 0,
|
|
19
|
+
width: t
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
export {
|
|
24
|
+
d as ConfettiOverlay
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=ConfettiOverlay.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfettiOverlay.es.js","names":[],"sources":["../../../../src/insights-v2/components/shared/ConfettiOverlay.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useContainerDimensions } from '../../hooks/useContainerDimensions'\nimport Confetti from './Confetti'\nimport { Box } from '@mui/material'\n\nexport const 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"],"mappings":";;;;;AAKA,IAAa,IAAA,MAAwB;AACnC,QAAM,IAAa,EAAuB,IAAI,GACxC,EAAE,QAAA,GAAQ,OAAA,EAAA,IAAU,EAAuB,CAAU;AAC3D,SACE,gBAAA,EAAC,GAAD;AAAA,IAAK,eAAa;AAAA,IAAM,KAAK;AAAA,IAAY,IAAI;AAAA,MAAE,OAAO;AAAA,MAAG,UAAU;AAAA,MAAY,QAAQ;AAAA,IAAE;AAAA,IACvF,UAAA,gBAAA,EAAC,GAAD;AAAA,MAAkB,QAAA;AAAA,MAAQ,WAAW,IAAS;AAAA,MAAU,OAAA;AAAA,IAAQ,CAAA;AAAA,EAC7D,CAAA;AAET"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from './blocks';
|
|
2
2
|
export { default as AccountHeroCard } from './components/AccountHeroCard';
|
|
3
|
+
export { default as DirectDepositCard, type DirectDepositCardStyleProps, type DirectDepositPillConfig, } from './components/DirectDepositCard';
|
|
3
4
|
export { default as AmountPill } from './components/AmountPill';
|
|
4
5
|
export { default as BadgedTile } from './components/BadgedTile';
|
|
5
6
|
export { default as StatusBadge, type StatusTone } from './components/StatusBadge';
|
|
@@ -8,7 +8,7 @@ import d, { isLogoGuid as C } from "./components/LogoFromGuid.es.js";
|
|
|
8
8
|
import B from "./components/StatusBadge.es.js";
|
|
9
9
|
import h from "./components/CompactInsightCard.es.js";
|
|
10
10
|
import S from "./components/InsightErrorCard.es.js";
|
|
11
|
-
import { BAR_CHART_VARIANTS as
|
|
11
|
+
import { BAR_CHART_VARIANTS as A, barChartVariant as T, buildChartData as b, buildDataSeries as I } from "./blocks/ChartBlocks/BarchartBlock/utils.es.js";
|
|
12
12
|
import { BarchartBlock as H } from "./blocks/ChartBlocks/BarchartBlock/BarchartBlock.es.js";
|
|
13
13
|
import { DoubleBarChartBlock as O } from "./blocks/ChartBlocks/DoubleBarChartBlock/DoubleBarChartBlock.es.js";
|
|
14
14
|
import E from "./blocks/ChartBlocks/StepChartBlock/StepChartBlock.es.js";
|
|
@@ -17,90 +17,94 @@ import V from "./blocks/ChartBlocks/DoubleProgressBarBlock/DoubleProgressBarBloc
|
|
|
17
17
|
import y from "./blocks/ComponentBlocks/AccountBlock/AccountBlock.es.js";
|
|
18
18
|
import G from "./components/TransferLogoCard.es.js";
|
|
19
19
|
import N from "./blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js";
|
|
20
|
-
import
|
|
21
|
-
import q from "./components/
|
|
22
|
-
import J from "./blocks/ComponentBlocks/
|
|
23
|
-
import Q from "./
|
|
24
|
-
import Y from "./components/
|
|
25
|
-
import
|
|
26
|
-
import
|
|
27
|
-
import
|
|
28
|
-
import {
|
|
29
|
-
import er from "./components/
|
|
30
|
-
import sr from "./
|
|
31
|
-
import lr from "./
|
|
32
|
-
import
|
|
33
|
-
import
|
|
34
|
-
import hr from "./components/
|
|
35
|
-
import {
|
|
36
|
-
import
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
import
|
|
42
|
-
import Vr from "./
|
|
43
|
-
import yr from "./components/
|
|
44
|
-
import Gr from "./components/
|
|
45
|
-
import Nr from "./components/
|
|
46
|
-
import Ur from "./components/
|
|
47
|
-
import qr from "./components/
|
|
48
|
-
import Jr from "./components/
|
|
49
|
-
import Qr from "./components/
|
|
20
|
+
import U from "./components/AccountHeroCard.es.js";
|
|
21
|
+
import q from "./components/DirectDepositCard.es.js";
|
|
22
|
+
import J from "./blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.es.js";
|
|
23
|
+
import { BudgetBlock as Q } from "./blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js";
|
|
24
|
+
import Y from "./components/SaveAnExtraCard.es.js";
|
|
25
|
+
import $ from "./blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
|
|
26
|
+
import or from "./components/InsightTransactionRow.es.js";
|
|
27
|
+
import mr from "./components/TransactionListCard.es.js";
|
|
28
|
+
import { TransactionBlock as ar, TransactionBlockVariant as pr } from "./blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
|
|
29
|
+
import er from "./components/WithdrawalCard.es.js";
|
|
30
|
+
import sr from "./blocks/ComponentBlocks/WithdrawalBlock/WithdrawalBlock.es.js";
|
|
31
|
+
import { SVGImageBlock as lr } from "./blocks/ImageBlocks/SVGImageBlock/SVGImageBlock.es.js";
|
|
32
|
+
import Cr from "./components/AmountPill.es.js";
|
|
33
|
+
import Br from "./components/DesignateEmergencySavingsCard.es.js";
|
|
34
|
+
import { ErrorCard as hr } from "./components/ErrorCard.es.js";
|
|
35
|
+
import { FeedbackBar as Sr } from "./components/FeedbackBar.es.js";
|
|
36
|
+
import Ar from "./components/FeedbackDialog.es.js";
|
|
37
|
+
import { DismissInsightDialog as br } from "./components/DismissInsightDialog.es.js";
|
|
38
|
+
import { HiddenConfirmationCard as Lr } from "./components/HiddenConfirmationCard.es.js";
|
|
39
|
+
import { LoadingCard as vr } from "./components/LoadingCard.es.js";
|
|
40
|
+
import { ObsolesceBanner as wr } from "./components/ObsolesceBanner.es.js";
|
|
41
|
+
import { HOST_ACTIONS as Pr } from "./ctaActions/hostActions.es.js";
|
|
42
|
+
import { useBeatCtaActions as Mr, useCtaHandler as Vr } from "./ctaActions/useCtaAction.es.js";
|
|
43
|
+
import yr from "./components/BaseLayout.es.js";
|
|
44
|
+
import Gr from "./components/StatusMessageCard.es.js";
|
|
45
|
+
import Nr from "./components/LogoTile.es.js";
|
|
46
|
+
import Ur from "./components/LogoClusterCard.es.js";
|
|
47
|
+
import qr from "./components/MerchantHighlightCard.es.js";
|
|
48
|
+
import Jr from "./components/P2PLogoStack.es.js";
|
|
49
|
+
import Qr from "./components/SavingsOpportunityCard.es.js";
|
|
50
|
+
import Yr from "./components/SubscriptionHeroCard.es.js";
|
|
51
|
+
import $r from "./components/UpcomingBillCard.es.js";
|
|
50
52
|
export {
|
|
51
53
|
y as AccountBlock,
|
|
52
|
-
|
|
54
|
+
U as AccountHeroCard,
|
|
53
55
|
N as AccountSwitchBlock,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
Cr as AmountPill,
|
|
57
|
+
A as BAR_CHART_VARIANTS,
|
|
56
58
|
f as BadgedTile,
|
|
57
59
|
H as BarchartBlock,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
yr as BaseLayout,
|
|
61
|
+
Q as BudgetBlock,
|
|
60
62
|
h as CompactInsightCard,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
Br as DesignateEmergencySavingsCard,
|
|
64
|
+
J as DirectDepositBlock,
|
|
65
|
+
q as DirectDepositCard,
|
|
66
|
+
br as DismissInsightDialog,
|
|
63
67
|
R as DonutChartBlock,
|
|
64
68
|
O as DoubleBarChartBlock,
|
|
65
69
|
V as DoubleProgressBarBlock,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
hr as ErrorCard,
|
|
71
|
+
Sr as FeedbackBar,
|
|
72
|
+
Ar as FeedbackDialog,
|
|
73
|
+
Pr as HOST_ACTIONS,
|
|
74
|
+
Lr as HiddenConfirmationCard,
|
|
71
75
|
S as InsightErrorCard,
|
|
72
76
|
c as InsightOptionsMenu,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
or as InsightTransactionRow,
|
|
78
|
+
vr as LoadingCard,
|
|
79
|
+
Ur as LogoClusterCard,
|
|
76
80
|
d as LogoFromGuid,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
81
|
+
Nr as LogoTile,
|
|
82
|
+
qr as MerchantHighlightCard,
|
|
83
|
+
wr as ObsolesceBanner,
|
|
80
84
|
n as OverflowMenu,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
Jr as P2PLogoStack,
|
|
86
|
+
lr as SVGImageBlock,
|
|
87
|
+
Y as SaveAnExtraCard,
|
|
88
|
+
$ as SaveExtraBlock,
|
|
89
|
+
Qr as SavingsOpportunityCard,
|
|
86
90
|
B as StatusBadge,
|
|
87
|
-
|
|
91
|
+
Gr as StatusMessageCard,
|
|
88
92
|
o as StatusPill,
|
|
89
93
|
E as StepChartBlock,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
+
Yr as SubscriptionHeroCard,
|
|
95
|
+
ar as TransactionBlock,
|
|
96
|
+
pr as TransactionBlockVariant,
|
|
97
|
+
mr as TransactionListCard,
|
|
94
98
|
G as TransferLogoCard,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
$r as UpcomingBillCard,
|
|
100
|
+
sr as WithdrawalBlock,
|
|
101
|
+
er as WithdrawalCard,
|
|
102
|
+
T as barChartVariant,
|
|
103
|
+
b as buildChartData,
|
|
100
104
|
I as buildDataSeries,
|
|
101
105
|
C as isLogoGuid,
|
|
102
106
|
m as resolveInsightRender,
|
|
103
107
|
a as useBeatActions,
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
Mr as useBeatCtaActions,
|
|
109
|
+
Vr as useCtaHandler
|
|
106
110
|
};
|
|
@@ -1,52 +1,53 @@
|
|
|
1
|
-
import { ContactSupportActionBlock as
|
|
1
|
+
import { ContactSupportActionBlock as l } from "../actionBlocks/ContactSupportActionBlock.es.js";
|
|
2
2
|
import { actionBlocksKey as r } from "./actionBlocksKey.es.js";
|
|
3
|
-
import { BarchartBlock as
|
|
3
|
+
import { BarchartBlock as n } from "../blocks/ChartBlocks/BarchartBlock/BarchartBlock.es.js";
|
|
4
4
|
import { DoubleBarChartBlock as m } from "../blocks/ChartBlocks/DoubleBarChartBlock/DoubleBarChartBlock.es.js";
|
|
5
5
|
import _ from "../blocks/ChartBlocks/StepChartBlock/StepChartBlock.es.js";
|
|
6
6
|
import p from "../blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.es.js";
|
|
7
7
|
import s from "../blocks/ChartBlocks/DoubleProgressBarBlock/DoubleProgressBarBlock.es.js";
|
|
8
8
|
import k from "../blocks/ComponentBlocks/AccountBlock/AccountBlock.es.js";
|
|
9
9
|
import C from "../blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js";
|
|
10
|
-
import
|
|
11
|
-
import T from "../blocks/ComponentBlocks/
|
|
10
|
+
import B from "../blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.es.js";
|
|
11
|
+
import { BudgetBlock as T } from "../blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js";
|
|
12
|
+
import f from "../blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
|
|
12
13
|
import { TransactionBlock as u } from "../blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import { SVGImageBlock as
|
|
14
|
+
import A from "../blocks/ComponentBlocks/WithdrawalBlock/WithdrawalBlock.es.js";
|
|
15
|
+
import O from "../blocks/ImageBlocks/ImageBlock.es.js";
|
|
16
|
+
import { SVGImageBlock as b } from "../blocks/ImageBlocks/SVGImageBlock/SVGImageBlock.es.js";
|
|
16
17
|
import { PlaceholderActionBlock as N } from "../actionBlocks/PlaceholderActionBlock.es.js";
|
|
17
|
-
import { getMakeTransferDrawerTitle as
|
|
18
|
-
import { MakeTransferActionBlockLayer as
|
|
19
|
-
import { getDrawerHeaderTitle as
|
|
18
|
+
import { getMakeTransferDrawerTitle as h } from "../actionBlocks/MakeTransferActionBlock/layout.es.js";
|
|
19
|
+
import { MakeTransferActionBlockLayer as I } from "../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer.es.js";
|
|
20
|
+
import { getDrawerHeaderTitle as d } from "../actionBlocks/TransactionHistoryBlock/utils.es.js";
|
|
20
21
|
import { TransactionDetailsBlock as g } from "../actionBlocks/TransactionDetailsBlock/TransactionDetailsBlock.es.js";
|
|
21
22
|
import { useTransactionDetailsPrepare as a } from "../actionBlocks/TransactionDetailsBlock/useTransactionDetailsPrepare.es.js";
|
|
22
23
|
import { TransactionHistoryBlock as L } from "../actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock.es.js";
|
|
23
24
|
import { useRecurringTransactionPrepare as i } from "../actionBlocks/RecurringTransactionBlock/useRecurringTransactionPrepare.es.js";
|
|
24
25
|
import { RecurringTransactionBlock as S } from "../actionBlocks/RecurringTransactionBlock/RecurringTransactionBlock.es.js";
|
|
25
|
-
import { TransactionListBlock as
|
|
26
|
-
import { RemainingCashBlock as
|
|
26
|
+
import { TransactionListBlock as R } from "../actionBlocks/TransactionListBlock/TransactionListBlock.es.js";
|
|
27
|
+
import { RemainingCashBlock as P } from "../actionBlocks/RemainingCashBlock/RemainingCashBlock.es.js";
|
|
27
28
|
var e = (t) => {
|
|
28
|
-
},
|
|
29
|
+
}, D = /* @__PURE__ */ new Set([
|
|
29
30
|
"",
|
|
30
31
|
"null",
|
|
31
32
|
"undefined"
|
|
32
|
-
]),
|
|
33
|
+
]), io = (t) => {
|
|
33
34
|
const o = t?.trim().toLowerCase();
|
|
34
|
-
return !!o && !
|
|
35
|
-
},
|
|
35
|
+
return !!o && !D.has(o);
|
|
36
|
+
}, co = {
|
|
36
37
|
[r.PLACEHOLDER_ACTION_BLOCK]: {
|
|
37
38
|
Component: N,
|
|
38
39
|
usePrepare: e,
|
|
39
40
|
title: () => "Action Block Layer Drilldown"
|
|
40
41
|
},
|
|
41
42
|
[r.MAKE_TRANSFER_ACTION_BLOCK]: {
|
|
42
|
-
Component:
|
|
43
|
+
Component: I,
|
|
43
44
|
usePrepare: e,
|
|
44
|
-
title:
|
|
45
|
+
title: h
|
|
45
46
|
},
|
|
46
47
|
[r.TRANSCATION_HISTORY_ACTION_BLOCK]: {
|
|
47
48
|
Component: L,
|
|
48
49
|
usePrepare: e,
|
|
49
|
-
title:
|
|
50
|
+
title: d
|
|
50
51
|
},
|
|
51
52
|
[r.TRANSACTION_DETAILS_ACTION_BLOCK]: {
|
|
52
53
|
Component: g,
|
|
@@ -59,39 +60,40 @@ var e = (t) => {
|
|
|
59
60
|
title: (t, o) => o.recurring?.expense_details ?? ""
|
|
60
61
|
},
|
|
61
62
|
[r.REMAINING_CASH_ACTION_BLOCK]: {
|
|
62
|
-
Component:
|
|
63
|
+
Component: P,
|
|
63
64
|
usePrepare: i,
|
|
64
65
|
title: (t, o) => o.insights_feed?.remaining_cash?.title ?? ""
|
|
65
66
|
},
|
|
66
67
|
[r.CONTACT_SUPPORT_ACTION_BLOCK]: {
|
|
67
|
-
Component:
|
|
68
|
+
Component: l,
|
|
68
69
|
usePrepare: e,
|
|
69
70
|
title: (t, o) => o.help?.request_support ?? ""
|
|
70
71
|
},
|
|
71
72
|
[r.TRANSACTION_LIST_ACTION_BLOCK]: {
|
|
72
|
-
Component:
|
|
73
|
+
Component: R,
|
|
73
74
|
usePrepare: a,
|
|
74
75
|
title: (t, o, c) => c?.insights_payload?.title ?? ""
|
|
75
76
|
}
|
|
76
|
-
},
|
|
77
|
+
}, lo = {
|
|
77
78
|
account_block: k,
|
|
78
79
|
account_switch_block: C,
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
direct_deposit_block: B,
|
|
81
|
+
bar_chart_block: n,
|
|
82
|
+
budget_block: T,
|
|
81
83
|
donut_chart_block: p,
|
|
82
84
|
double_bar_chart_block: m,
|
|
83
85
|
double_progress_bar_block: s,
|
|
84
|
-
image_block:
|
|
85
|
-
save_extra_block:
|
|
86
|
+
image_block: O,
|
|
87
|
+
save_extra_block: f,
|
|
86
88
|
step_chart_block: _,
|
|
87
|
-
svg_image_block:
|
|
88
|
-
withdrawal_block:
|
|
89
|
+
svg_image_block: b,
|
|
90
|
+
withdrawal_block: A,
|
|
89
91
|
transaction_block: u
|
|
90
92
|
};
|
|
91
93
|
export {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
co as actionBlocks,
|
|
95
|
+
lo as blocks,
|
|
96
|
+
io as hasDrawerBlock
|
|
95
97
|
};
|
|
96
98
|
|
|
97
99
|
//# 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 DonutChartBlock,\n DoubleBarChartBlock,\n DoubleProgressBarBlock,\n SaveExtraBlock,\n SVGImageBlock,\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 { 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 {\n TransactionDetailsBlock,\n useTransactionDetailsPrepare,\n} from '../actionBlocks/TransactionDetailsBlock'\nimport {\n RecurringTransactionBlock,\n useRecurringTransactionPrepare,\n} from '../actionBlocks/RecurringTransactionBlock'\nimport { TransactionListBlock } from '../actionBlocks/TransactionListBlock'\nimport { RemainingCashBlock } from '../actionBlocks/RemainingCashBlock'\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// 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, 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}\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.\n\nexport const actionBlocks = {\n [actionBlocksKey.PLACEHOLDER_ACTION_BLOCK]: {\n Component: PlaceholderActionBlock,\n usePrepare: noop,\n title: () => 'Action Block Layer Drilldown',\n },\n [actionBlocksKey.MAKE_TRANSFER_ACTION_BLOCK]: {\n Component: MakeTransferActionBlockLayer,\n usePrepare: noop,\n title: getMakeTransferDrawerTitle,\n },\n [actionBlocksKey.TRANSCATION_HISTORY_ACTION_BLOCK]: {\n Component: TransactionHistoryBlock,\n usePrepare: noop,\n title: getDrawerHeaderTitle,\n },\n [actionBlocksKey.TRANSACTION_DETAILS_ACTION_BLOCK]: {\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]: {\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]: {\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]: {\n Component: ContactSupportActionBlock,\n usePrepare: noop,\n title: (_variant, copy) => copy.help?.request_support ?? '',\n },\n [actionBlocksKey.TRANSACTION_LIST_ACTION_BLOCK]: {\n Component: TransactionListBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: (_variant, _copy, beat) => beat?.insights_payload?.title ?? '',\n },\n} as Record<string, ActionBlockEntry>\n\nexport const blocks = {\n account_block: AccountBlock,\n account_switch_block: AccountSwitchBlock,\n bar_chart_block: BarchartBlock,\n budget_block: BudgetBlock,\n donut_chart_block: DonutChartBlock,\n double_bar_chart_block: DoubleBarChartBlock,\n double_progress_bar_block: DoubleProgressBarBlock,\n image_block: ImageBlock,\n save_extra_block: SaveExtraBlock,\n step_chart_block: StepChartBlock,\n svg_image_block: SVGImageBlock,\n withdrawal_block: WithdrawalBlock,\n transaction_block: TransactionBlock,\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 DirectDepositBlock,\n BarchartBlock,\n BudgetBlock,\n DonutChartBlock,\n DoubleBarChartBlock,\n DoubleProgressBarBlock,\n SaveExtraBlock,\n SVGImageBlock,\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 { 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 {\n TransactionDetailsBlock,\n useTransactionDetailsPrepare,\n} from '../actionBlocks/TransactionDetailsBlock'\nimport {\n RecurringTransactionBlock,\n useRecurringTransactionPrepare,\n} from '../actionBlocks/RecurringTransactionBlock'\nimport { TransactionListBlock } from '../actionBlocks/TransactionListBlock'\nimport { RemainingCashBlock } from '../actionBlocks/RemainingCashBlock'\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// 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, 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}\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.\n\nexport const actionBlocks = {\n [actionBlocksKey.PLACEHOLDER_ACTION_BLOCK]: {\n Component: PlaceholderActionBlock,\n usePrepare: noop,\n title: () => 'Action Block Layer Drilldown',\n },\n [actionBlocksKey.MAKE_TRANSFER_ACTION_BLOCK]: {\n Component: MakeTransferActionBlockLayer,\n usePrepare: noop,\n title: getMakeTransferDrawerTitle,\n },\n [actionBlocksKey.TRANSCATION_HISTORY_ACTION_BLOCK]: {\n Component: TransactionHistoryBlock,\n usePrepare: noop,\n title: getDrawerHeaderTitle,\n },\n [actionBlocksKey.TRANSACTION_DETAILS_ACTION_BLOCK]: {\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]: {\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]: {\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]: {\n Component: ContactSupportActionBlock,\n usePrepare: noop,\n title: (_variant, copy) => copy.help?.request_support ?? '',\n },\n [actionBlocksKey.TRANSACTION_LIST_ACTION_BLOCK]: {\n Component: TransactionListBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: (_variant, _copy, beat) => beat?.insights_payload?.title ?? '',\n },\n} as Record<string, ActionBlockEntry>\n\nexport const blocks = {\n account_block: AccountBlock,\n account_switch_block: AccountSwitchBlock,\n direct_deposit_block: DirectDepositBlock,\n bar_chart_block: BarchartBlock,\n budget_block: BudgetBlock,\n donut_chart_block: DonutChartBlock,\n double_bar_chart_block: DoubleBarChartBlock,\n double_progress_bar_block: DoubleProgressBarBlock,\n image_block: ImageBlock,\n save_extra_block: SaveExtraBlock,\n step_chart_block: StepChartBlock,\n svg_image_block: SVGImageBlock,\n withdrawal_block: WithdrawalBlock,\n transaction_block: TransactionBlock,\n} as Record<string, React.ComponentType<{ payload: InsightsPayload; beatGuid?: string }>>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,IAAM,IAAA,CAAQ,MAAwB;AAAC,GAKjC,IAAmB,oBAAI,IAAI;AAAA,EAAC;AAAA,EAAI;AAAA,EAAQ;AAAW,CAAC,GAC7C,KAAA,CAAkB,MAAmC;AAChE,QAAM,IAAa,GAAO,KAAK,EAAE,YAAY;AAC7C,SAAO,CAAC,CAAC,KAAc,CAAC,EAAiB,IAAI,CAAU;AACzD,GAiBa,KAAe;AAAA,EACzB,CAAA,EAAgB,wBAAA,GAA2B;AAAA,IAC1C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,MAAa;AAAA,EACf;AAAA,EACC,CAAA,EAAgB,0BAAA,GAA6B;AAAA,IAC5C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACC,CAAA,EAAgB,gCAAA,GAAmC;AAAA,IAClD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACC,CAAA,EAAgB,gCAAA,GAAmC;AAAA,IAClD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,MAAa;AAAA,EACf;AAAA,EAGC,CAAA,EAAgB,kCAAA,GAAqC;AAAA,IACpD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,WAAW,mBAAmB;AAAA,EAChE;AAAA,EAGC,CAAA,EAAgB,2BAAA,GAA8B;AAAA,IAC7C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,eAAe,gBAAgB,SAAS;AAAA,EAC1E;AAAA,EAGC,CAAA,EAAgB,4BAAA,GAA+B;AAAA,IAC9C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,MAAM,mBAAmB;AAAA,EAC3D;AAAA,EACC,CAAA,EAAgB,6BAAA,GAAgC;AAAA,IAC/C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,GAAO,MAAS,GAAM,kBAAkB,SAAS;AAAA,EACrE;AACF,GAEa,KAAS;AAAA,EACpB,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,2BAA2B;AAAA,EAC3B,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,mBAAmB;AACrB"}
|