@mx-cartographer/experiences 9.4.15 → 9.4.16
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/localization/InsightsFeedCopy.d.ts +8 -0
- package/dist/core/types/localization/index.d.ts +1 -1
- package/dist/insights-v2/beatActions.d.ts +30 -0
- package/dist/insights-v2/beatActions.es.js +12 -0
- package/dist/insights-v2/beatActions.es.js.map +1 -0
- package/dist/insights-v2/components/BaseLayout.d.ts +5 -1
- package/dist/insights-v2/components/BaseLayout.es.js +68 -64
- package/dist/insights-v2/components/BaseLayout.es.js.map +1 -1
- package/dist/insights-v2/components/Header.es.js +23 -33
- package/dist/insights-v2/components/Header.es.js.map +1 -1
- package/dist/insights-v2/components/InsightOptionsMenu.d.ts +10 -0
- package/dist/insights-v2/components/InsightOptionsMenu.es.js +54 -0
- package/dist/insights-v2/components/InsightOptionsMenu.es.js.map +1 -0
- package/dist/insights-v2/components/OverflowMenu.d.ts +32 -0
- package/dist/insights-v2/components/OverflowMenu.es.js +73 -0
- package/dist/insights-v2/components/OverflowMenu.es.js.map +1 -0
- package/dist/insights-v2/index.d.ts +3 -0
- package/dist/insights-v2/index.es.js +51 -45
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
## [9.4.16] - 09-03-2026
|
|
2
|
+
|
|
3
|
+
- **ADDED** - insights-v2 overflow (“…”) menu on the insight card header: new presentational `OverflowMenu` (icon trigger + action list with full aria/keyboard support) and `InsightOptionsMenu`, which owns the item set — helpful / not helpful / hide — from `insights_feed.overflow_menu` copy. The host supplies the action handler via `beatActions.onMenuAction`, delivered through the new `BeatActionsProvider`/`useBeatActions` context; the menu renders only on the full (non-mini) layout when a handler is wired (WEC-1767)
|
|
4
|
+
- **ADDED** - `OverflowMenuCopy` (`insights_feed.overflow_menu`) localization type and copy keys (`aria_label`, `helpful`, `not_helpful`, `hide`) (WEC-1767)
|
|
5
|
+
|
|
1
6
|
## [9.4.15] - 09-03-2026
|
|
2
7
|
|
|
3
8
|
- **ADDED** - Transaction History action block (single-bar): `transaction_history_block` registered in `mappings/blocks.ts`, rendering a `BarChartV2` over the beat's monthly `data_series` above a reused transactions `TransactionList` drilldown. Variant behavior (chart top, bar colors, drawer header, and the per-variant `filterStrategy`) is driven by `drillDownConfig`, covering the Transaction, CategorySpend, MonthlySpend, AccountBalance, and UpcomingBill variants (WEC-1701)
|
|
@@ -48,6 +48,13 @@ export interface MakeTransferCopy {
|
|
|
48
48
|
increment_aria_label: string;
|
|
49
49
|
decrement_aria_label: string;
|
|
50
50
|
}
|
|
51
|
+
export interface OverflowMenuCopy {
|
|
52
|
+
/** Accessible label for the "…" trigger button. */
|
|
53
|
+
aria_label: string;
|
|
54
|
+
helpful: string;
|
|
55
|
+
not_helpful: string;
|
|
56
|
+
hide: string;
|
|
57
|
+
}
|
|
51
58
|
export interface TransactionHistoryBlock {
|
|
52
59
|
category_spend_drawer_title: string;
|
|
53
60
|
monthly_spend_comparison_drawer_title: string;
|
|
@@ -64,6 +71,7 @@ export interface InsightsFeedCopy {
|
|
|
64
71
|
general: GeneralInsightsFeedCopy;
|
|
65
72
|
settings_menu: SettingsMenuCopy;
|
|
66
73
|
make_transfer: MakeTransferCopy;
|
|
74
|
+
overflow_menu: OverflowMenuCopy;
|
|
67
75
|
transaction_history_block: TransactionHistoryBlock;
|
|
68
76
|
}
|
|
69
77
|
export {};
|
|
@@ -13,7 +13,7 @@ export type { DebtsCopy } from './DebtsCopy';
|
|
|
13
13
|
export type { FinstrongCopy } from './FinstrongCopy';
|
|
14
14
|
export type { GoalsCopy } from './GoalsCopy';
|
|
15
15
|
export type { HelpCopy, HelpByCategoryList } from './HelpCopy';
|
|
16
|
-
export type { InsightsFeedCopy, MakeTransferCopy } from './InsightsFeedCopy';
|
|
16
|
+
export type { InsightsFeedCopy, MakeTransferCopy, OverflowMenuCopy } from './InsightsFeedCopy';
|
|
17
17
|
export type { InvestmentsCopy } from './InvestmentsCopy';
|
|
18
18
|
export type { MicroInsightsCopy } from './MicroInsightsCopy';
|
|
19
19
|
export type { NetWorthCopy } from './NetWorthCopy';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
/** Overflow-menu action keys emitted to the host. */
|
|
3
|
+
export type InsightMenuAction = 'helpful' | 'not_helpful' | 'hide';
|
|
4
|
+
export interface MenuActionHandlers {
|
|
5
|
+
/** Invoked with the chosen overflow-menu action key. */
|
|
6
|
+
onAction: (action: InsightMenuAction) => void;
|
|
7
|
+
/** Called when the overflow menu opens (e.g. analytics). */
|
|
8
|
+
onOpen?: () => void;
|
|
9
|
+
/** Disables the overflow menu trigger (e.g. an obsolete beat). */
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface UpdateParams {
|
|
13
|
+
beatGuid: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Host callbacks for a beat card, grouped under one prop and delivered via
|
|
17
|
+
* context so any descendant (header menu, blocks, variants) can reach the
|
|
18
|
+
* handler it needs without prop drilling. Each concern is its own typed slot —
|
|
19
|
+
* add new callbacks here as they arise.
|
|
20
|
+
*/
|
|
21
|
+
export interface BeatActions {
|
|
22
|
+
onMenuAction?: MenuActionHandlers;
|
|
23
|
+
onUpdate?: (params: UpdateParams) => void;
|
|
24
|
+
}
|
|
25
|
+
export declare const BeatActionsProvider: ({ value, children, }: {
|
|
26
|
+
value: BeatActions;
|
|
27
|
+
children: ReactNode;
|
|
28
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
/** Read the host callbacks for the current beat card. */
|
|
30
|
+
export declare const useBeatActions: () => BeatActions;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createContext as r, useContext as a } from "react";
|
|
2
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
3
|
+
var t = r({}), v = ({ value: e, children: o }) => /* @__PURE__ */ i(t.Provider, {
|
|
4
|
+
value: e,
|
|
5
|
+
children: o
|
|
6
|
+
}), x = () => a(t);
|
|
7
|
+
export {
|
|
8
|
+
v as BeatActionsProvider,
|
|
9
|
+
x as useBeatActions
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=beatActions.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beatActions.es.js","names":[],"sources":["../../src/insights-v2/beatActions.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from 'react'\n\n/** Overflow-menu action keys emitted to the host. */\nexport type InsightMenuAction = 'helpful' | 'not_helpful' | 'hide'\n\nexport interface MenuActionHandlers {\n /** Invoked with the chosen overflow-menu action key. */\n onAction: (action: InsightMenuAction) => void\n /** Called when the overflow menu opens (e.g. analytics). */\n onOpen?: () => void\n /** Disables the overflow menu trigger (e.g. an obsolete beat). */\n disabled?: boolean\n}\n\nexport interface UpdateParams {\n beatGuid: string\n // …extend with whatever the host's updateBeat needs.\n}\n\n/**\n * Host callbacks for a beat card, grouped under one prop and delivered via\n * context so any descendant (header menu, blocks, variants) can reach the\n * handler it needs without prop drilling. Each concern is its own typed slot —\n * add new callbacks here as they arise.\n */\nexport interface BeatActions {\n onMenuAction?: MenuActionHandlers\n onUpdate?: (params: UpdateParams) => void\n}\n\nconst BeatActionsContext = createContext<BeatActions>({})\n\nexport const BeatActionsProvider = ({\n value,\n children,\n}: {\n value: BeatActions\n children: ReactNode\n}) => <BeatActionsContext.Provider value={value}>{children}</BeatActionsContext.Provider>\n\n/** Read the host callbacks for the current beat card. */\nexport const useBeatActions = () => useContext(BeatActionsContext)\n"],"mappings":";;AA8BA,IAAM,IAAqB,EAA2B,CAAC,CAAC,GAE3C,IAAA,CAAuB,EAClC,OAAA,GACA,UAAA,EAAA,MAII,gBAAA,EAAC,EAAmB,UAApB;AAAA,EAAoC,OAAA;AAAA,EAAQ,UAAA;AAAsC,CAAA,GAG3E,IAAA,MAAuB,EAAW,CAAkB"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { Beat } from '../../core';
|
|
2
|
+
import { BeatActions } from '../beatActions';
|
|
2
3
|
interface BaseLayoutProps {
|
|
3
4
|
beat: Beat;
|
|
5
|
+
/** Host callbacks (menu actions, updateBeat, …) delivered to the card subtree
|
|
6
|
+
* via context, so blocks/variants can reach them without prop drilling. */
|
|
7
|
+
beatActions?: BeatActions;
|
|
4
8
|
}
|
|
5
|
-
declare const BaseLayout: ({ beat }: BaseLayoutProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
declare const BaseLayout: ({ beat, beatActions }: BaseLayoutProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
6
10
|
export default BaseLayout;
|
|
@@ -1,77 +1,81 @@
|
|
|
1
|
-
import { useInsightsV2Store as
|
|
1
|
+
import { useInsightsV2Store as _ } from "../../common/context/hooks.es.js";
|
|
2
2
|
import { blocks as g } from "../mappings/blocks.es.js";
|
|
3
3
|
import y from "./Footer.es.js";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import { BeatActionsProvider as k } from "../beatActions.es.js";
|
|
5
|
+
import x from "./Header.es.js";
|
|
6
|
+
import { ActionBlockLayer as C } from "../actionBlocks/ActionBlockLayer.es.js";
|
|
6
7
|
import l from "@mui/material/Stack";
|
|
7
8
|
import c from "@mui/material/Button";
|
|
8
|
-
import { ChevronRight as
|
|
9
|
-
import { jsx as
|
|
10
|
-
import
|
|
11
|
-
var
|
|
12
|
-
const { openCtaDrawer:
|
|
13
|
-
if (!
|
|
14
|
-
const { instance_slot:
|
|
15
|
-
return /* @__PURE__ */
|
|
16
|
-
|
|
17
|
-
children:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
dangerouslySetInnerHTML: { __html: o.html_description },
|
|
38
|
-
style: { paddingLeft: 4 }
|
|
39
|
-
}), o?.in_description_cta && /* @__PURE__ */ r(c, {
|
|
40
|
-
endIcon: /* @__PURE__ */ r(x, {}),
|
|
41
|
-
onClick: () => {
|
|
9
|
+
import { ChevronRight as v } from "@mxenabled/mx-icons";
|
|
10
|
+
import { jsx as o, jsxs as t } from "react/jsx-runtime";
|
|
11
|
+
import B from "@mui/material/Card";
|
|
12
|
+
var b = {}, D = ({ beat: r, beatActions: p = b }) => {
|
|
13
|
+
const { openCtaDrawer: a } = _(), i = r.insights_payload;
|
|
14
|
+
if (!i) return null;
|
|
15
|
+
const { instance_slot: m, primary_cta: n, secondary_cta: e, subtitle: h, widget_type: f } = i, { block: u } = m, s = g[u], d = f === "mini";
|
|
16
|
+
return /* @__PURE__ */ o(k, {
|
|
17
|
+
value: p,
|
|
18
|
+
children: /* @__PURE__ */ t(l, {
|
|
19
|
+
sx: { mb: 16 },
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ t(B, { children: [
|
|
22
|
+
/* @__PURE__ */ o(x, {
|
|
23
|
+
isMini: d,
|
|
24
|
+
subtitle: h,
|
|
25
|
+
title: r.title
|
|
26
|
+
}),
|
|
27
|
+
s && /* @__PURE__ */ o(s, {
|
|
28
|
+
beatGuid: r.guid,
|
|
29
|
+
payload: i
|
|
30
|
+
}),
|
|
31
|
+
/* @__PURE__ */ t(l, {
|
|
32
|
+
sx: {
|
|
33
|
+
gap: 6,
|
|
34
|
+
pb: 16,
|
|
35
|
+
pl: 12,
|
|
36
|
+
pr: 16,
|
|
37
|
+
pt: 12
|
|
42
38
|
},
|
|
39
|
+
children: [/* @__PURE__ */ o("div", {
|
|
40
|
+
dangerouslySetInnerHTML: { __html: r.html_description },
|
|
41
|
+
style: { paddingLeft: 4 }
|
|
42
|
+
}), r?.in_description_cta && /* @__PURE__ */ o(c, {
|
|
43
|
+
endIcon: /* @__PURE__ */ o(v, {}),
|
|
44
|
+
onClick: () => {
|
|
45
|
+
},
|
|
46
|
+
sx: {
|
|
47
|
+
height: 24,
|
|
48
|
+
p: 4,
|
|
49
|
+
width: "max-content"
|
|
50
|
+
},
|
|
51
|
+
children: r.in_description_cta
|
|
52
|
+
})]
|
|
53
|
+
}),
|
|
54
|
+
!d && n?.label && /* @__PURE__ */ t(l, {
|
|
43
55
|
sx: {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
gap: 8,
|
|
57
|
+
pb: 16,
|
|
58
|
+
px: 16
|
|
47
59
|
},
|
|
48
|
-
children: o
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
onClick: () => e.block && s(o.guid, "secondaryCta"),
|
|
64
|
-
children: e.label
|
|
65
|
-
})]
|
|
66
|
-
})
|
|
67
|
-
] }),
|
|
68
|
-
/* @__PURE__ */ r(k, { beat: o }),
|
|
69
|
-
t.footer && /* @__PURE__ */ r(y, { footer: t.footer })
|
|
70
|
-
]
|
|
60
|
+
children: [/* @__PURE__ */ o(c, {
|
|
61
|
+
onClick: () => n.block && a(r.guid, "primaryCta"),
|
|
62
|
+
variant: "outlined",
|
|
63
|
+
children: n.label
|
|
64
|
+
}), e?.label && /* @__PURE__ */ o(c, {
|
|
65
|
+
color: "secondary",
|
|
66
|
+
onClick: () => e.block && a(r.guid, "secondaryCta"),
|
|
67
|
+
children: e.label
|
|
68
|
+
})]
|
|
69
|
+
})
|
|
70
|
+
] }),
|
|
71
|
+
/* @__PURE__ */ o(C, { beat: r }),
|
|
72
|
+
i.footer && /* @__PURE__ */ o(y, { footer: i.footer })
|
|
73
|
+
]
|
|
74
|
+
})
|
|
71
75
|
});
|
|
72
76
|
};
|
|
73
77
|
export {
|
|
74
|
-
|
|
78
|
+
D as default
|
|
75
79
|
};
|
|
76
80
|
|
|
77
81
|
//# sourceMappingURL=BaseLayout.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseLayout.es.js","names":[],"sources":["../../../src/insights-v2/components/BaseLayout.tsx"],"sourcesContent":["import Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport Stack from '@mui/material/Stack'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { blocks } from '../mappings/blocks'\n\nimport Footer from './Footer'\nimport Header from './Header'\nimport { useInsightsV2Store } from '../../common'\nimport type { Beat } from '../../core'\nimport { ActionBlockLayer } from '../actionBlocks/ActionBlockLayer'\n\ninterface BaseLayoutProps {\n beat: Beat\n}\n\nconst BaseLayout = ({ beat }: BaseLayoutProps) => {\n const { openCtaDrawer } = useInsightsV2Store()\n\n const insights_payload = beat.insights_payload\n\n if (!insights_payload) {\n return null\n }\n\n const { instance_slot, primary_cta, secondary_cta, subtitle, widget_type } = insights_payload\n const { block } = instance_slot\n\n const Block = blocks[block as keyof typeof blocks]\n\n const isMini = widget_type === 'mini'\n\n return (\n <Stack sx={{ mb: 16 }}>\n
|
|
1
|
+
{"version":3,"file":"BaseLayout.es.js","names":[],"sources":["../../../src/insights-v2/components/BaseLayout.tsx"],"sourcesContent":["import Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport Stack from '@mui/material/Stack'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { blocks } from '../mappings/blocks'\n\nimport Footer from './Footer'\nimport Header from './Header'\nimport { useInsightsV2Store } from '../../common'\nimport type { Beat } from '../../core'\nimport { BeatActionsProvider, type BeatActions } from '../beatActions'\nimport { ActionBlockLayer } from '../actionBlocks/ActionBlockLayer'\n\ninterface BaseLayoutProps {\n beat: Beat\n /** Host callbacks (menu actions, updateBeat, …) delivered to the card subtree\n * via context, so blocks/variants can reach them without prop drilling. */\n beatActions?: BeatActions\n}\n\n// Stable default so an omitted prop doesn't create a new context value each\n// render (which would re-render every consumer).\nconst NO_BEAT_ACTIONS: BeatActions = {}\n\nconst BaseLayout = ({ beat, beatActions = NO_BEAT_ACTIONS }: BaseLayoutProps) => {\n const { openCtaDrawer } = useInsightsV2Store()\n\n const insights_payload = beat.insights_payload\n\n if (!insights_payload) {\n return null\n }\n\n const { instance_slot, primary_cta, secondary_cta, subtitle, widget_type } = insights_payload\n const { block } = instance_slot\n\n const Block = blocks[block as keyof typeof blocks]\n\n const isMini = widget_type === 'mini'\n\n return (\n <BeatActionsProvider value={beatActions}>\n <Stack sx={{ mb: 16 }}>\n <Card>\n {/* Header */}\n <Header isMini={isMini} subtitle={subtitle} title={beat.title} />\n\n {/* Instance Slot */}\n {Block && <Block beatGuid={beat.guid} payload={insights_payload} />}\n\n {/* Body */}\n <Stack sx={{ gap: 6, pb: 16, pl: 12, pr: 16, pt: 12 }}>\n <div\n dangerouslySetInnerHTML={{\n __html: beat.html_description as string,\n }}\n style={{ paddingLeft: 4 }}\n />\n {beat?.in_description_cta && (\n <Button\n endIcon={<ChevronRight />}\n onClick={() => {}}\n sx={{ height: 24, p: 4, width: 'max-content' }}\n >\n {beat.in_description_cta}\n </Button>\n )}\n </Stack>\n\n {/* CTA. A CTA without a real `block` doesn't open a drawer (it may trigger\n a postMessage etc.) — restrict the drawer to CTAs that carry a block. */}\n {!isMini && primary_cta?.label && (\n <Stack sx={{ gap: 8, pb: 16, px: 16 }}>\n <Button\n onClick={() => primary_cta.block && openCtaDrawer(beat.guid, 'primaryCta')}\n variant=\"outlined\"\n >\n {primary_cta.label}\n </Button>\n {secondary_cta?.label && (\n <Button\n color=\"secondary\"\n onClick={() => secondary_cta.block && openCtaDrawer(beat.guid, 'secondaryCta')}\n >\n {secondary_cta.label}\n </Button>\n )}\n </Stack>\n )}\n </Card>\n\n {/* Always mounted: the drawer's slide in/out animation only plays when\n MUI sees isOpen CHANGE on a mounted Drawer — conditionally mounting\n it here made it snap open and vanish on close. */}\n <ActionBlockLayer beat={beat} />\n\n {/* Footer */}\n {insights_payload.footer && <Footer footer={insights_payload.footer} />}\n </Stack>\n </BeatActionsProvider>\n )\n}\n\nexport default BaseLayout\n"],"mappings":";;;;;;;;;;;AAwBA,IAAM,IAA+B,CAAC,GAEhC,IAAA,CAAc,EAAE,MAAA,GAAM,aAAA,IAAc,EAAA,MAAuC;AAC/E,QAAM,EAAE,eAAA,EAAA,IAAkB,EAAmB,GAEvC,IAAmB,EAAK;AAE9B,MAAI,CAAC,EACH,QAAO;AAGT,QAAM,EAAE,eAAA,GAAe,aAAA,GAAa,eAAA,GAAe,UAAA,GAAU,aAAA,EAAA,IAAgB,GACvE,EAAE,OAAA,EAAA,IAAU,GAEZ,IAAQ,EAAO,CAAA,GAEf,IAAS,MAAgB;AAE/B,SACE,gBAAA,EAAC,GAAD;AAAA,IAAqB,OAAO;AAAA,IAC1B,UAAA,gBAAA,EAAC,GAAD;AAAA,MAAO,IAAI,EAAE,IAAI,GAAG;AAAA,MAApB,UAAA;AAAA,QACE,gBAAA,EAAC,GAAD,EAAA,UAAA;AAAA,UAEE,gBAAA,EAAC,GAAD;AAAA,YAAgB,QAAA;AAAA,YAAkB,UAAA;AAAA,YAAU,OAAO,EAAK;AAAA,UAAQ,CAAA;AAAA,UAG/D,KAAS,gBAAA,EAAC,GAAD;AAAA,YAAO,UAAU,EAAK;AAAA,YAAM,SAAS;AAAA,UAAmB,CAAA;AAAA,UAGlE,gBAAA,EAAC,GAAD;AAAA,YAAO,IAAI;AAAA,cAAE,KAAK;AAAA,cAAG,IAAI;AAAA,cAAI,IAAI;AAAA,cAAI,IAAI;AAAA,cAAI,IAAI;AAAA,YAAG;AAAA,YAApD,UAAA,CACE,gBAAA,EAAC,OAAD;AAAA,cACE,yBAAyB,EACvB,QAAQ,EAAK,iBACf;AAAA,cACA,OAAO,EAAE,aAAa,EAAE;AAAA,YACzB,CAAA,GACA,GAAM,sBACL,gBAAA,EAAC,GAAD;AAAA,cACE,SAAS,gBAAA,EAAC,GAAD,CAAe,CAAA;AAAA,cACxB,SAAA,MAAe;AAAA,cAAC;AAAA,cAChB,IAAI;AAAA,gBAAE,QAAQ;AAAA,gBAAI,GAAG;AAAA,gBAAG,OAAO;AAAA,cAAc;AAAA,cAE5C,UAAA,EAAK;AAAA,YACA,CAAA,CAEL;AAAA;UAIN,CAAC,KAAU,GAAa,SACvB,gBAAA,EAAC,GAAD;AAAA,YAAO,IAAI;AAAA,cAAE,KAAK;AAAA,cAAG,IAAI;AAAA,cAAI,IAAI;AAAA,YAAG;AAAA,YAApC,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cACE,SAAA,MAAe,EAAY,SAAS,EAAc,EAAK,MAAM,YAAY;AAAA,cACzE,SAAQ;AAAA,cAEP,UAAA,EAAY;AAAA,YACP,CAAA,GACP,GAAe,SACd,gBAAA,EAAC,GAAD;AAAA,cACE,OAAM;AAAA,cACN,SAAA,MAAe,EAAc,SAAS,EAAc,EAAK,MAAM,cAAc;AAAA,cAE5E,UAAA,EAAc;AAAA,YACT,CAAA,CAEL;AAAA;QAEL,EAAA,CAAA;AAAA,QAKN,gBAAA,EAAC,GAAD,EAAwB,MAAA,EAAO,CAAA;AAAA,QAG9B,EAAiB,UAAU,gBAAA,EAAC,GAAD,EAAQ,QAAQ,EAAiB,OAAS,CAAA;AAAA,MACjE;AAAA;EACY,CAAA;AAEzB"}
|
|
@@ -1,41 +1,31 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
pb: 12,
|
|
11
|
-
pl: 16,
|
|
12
|
-
pr: 16,
|
|
13
|
-
pt: 16
|
|
14
|
-
},
|
|
15
|
-
children: [/* @__PURE__ */ t(o, {
|
|
1
|
+
import m from "./SubHeader.es.js";
|
|
2
|
+
import { useBeatActions as s } from "../beatActions.es.js";
|
|
3
|
+
import { InsightOptionsMenu as a } from "./InsightOptionsMenu.es.js";
|
|
4
|
+
import t from "@mui/material/Stack";
|
|
5
|
+
import { H3 as c } from "@mxenabled/mxui";
|
|
6
|
+
import { jsx as r, jsxs as o } from "react/jsx-runtime";
|
|
7
|
+
var g = ({ isMini: n, subtitle: e, title: i }) => {
|
|
8
|
+
const { onMenuAction: p } = s();
|
|
9
|
+
return /* @__PURE__ */ o(t, {
|
|
16
10
|
sx: {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
gap: 4,
|
|
12
|
+
pb: 12,
|
|
13
|
+
pl: 16,
|
|
14
|
+
pr: 16,
|
|
15
|
+
pt: 16
|
|
20
16
|
},
|
|
21
|
-
children: [/* @__PURE__ */
|
|
22
|
-
"aria-label": "More Options",
|
|
23
|
-
onClick: () => {
|
|
24
|
-
},
|
|
17
|
+
children: [/* @__PURE__ */ o(t, {
|
|
25
18
|
sx: {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
alignItems: "center",
|
|
20
|
+
flexDirection: "row",
|
|
21
|
+
justifyContent: "space-between"
|
|
29
22
|
},
|
|
30
|
-
children: /* @__PURE__ */ r(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
})]
|
|
35
|
-
}), e && /* @__PURE__ */ r(p, { subtitle: e })]
|
|
36
|
-
});
|
|
23
|
+
children: [/* @__PURE__ */ r(c, { children: i }), !n && p && /* @__PURE__ */ r(a, {})]
|
|
24
|
+
}), e && /* @__PURE__ */ r(m, { subtitle: e })]
|
|
25
|
+
});
|
|
26
|
+
};
|
|
37
27
|
export {
|
|
38
|
-
|
|
28
|
+
g as default
|
|
39
29
|
};
|
|
40
30
|
|
|
41
31
|
//# sourceMappingURL=Header.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.es.js","names":[],"sources":["../../../src/insights-v2/components/Header.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Header.es.js","names":[],"sources":["../../../src/insights-v2/components/Header.tsx"],"sourcesContent":["import Stack from '@mui/material/Stack'\n\nimport { H3 } from '@mxenabled/mxui'\n\nimport SubHeader from './SubHeader'\nimport InsightOptionsMenu from './InsightOptionsMenu'\nimport { useBeatActions } from '../beatActions'\nimport type { Subtitle } from '../../core'\n\ninterface HeaderProps {\n isMini: boolean\n subtitle?: Subtitle\n title: string\n}\n\nconst Header = ({ isMini, subtitle, title }: HeaderProps) => {\n // The overflow menu appears only when the host wired a menu handler and this\n // isn't the compact/mini layout. Handlers are delivered via context.\n const { onMenuAction } = useBeatActions()\n\n return (\n <Stack sx={{ gap: 4, pb: 12, pl: 16, pr: 16, pt: 16 }}>\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', justifyContent: 'space-between' }}>\n <H3>{title}</H3>\n {!isMini && onMenuAction && <InsightOptionsMenu />}\n </Stack>\n\n {/* Sub Header */}\n {subtitle && <SubHeader subtitle={subtitle} />}\n </Stack>\n )\n}\n\nexport default Header\n"],"mappings":";;;;;;AAeA,IAAM,IAAA,CAAU,EAAE,QAAA,GAAQ,UAAA,GAAU,OAAA,EAAA,MAAyB;AAG3D,QAAM,EAAE,cAAA,EAAA,IAAiB,EAAe;AAExC,SACE,gBAAA,EAAC,GAAD;AAAA,IAAO,IAAI;AAAA,MAAE,KAAK;AAAA,MAAG,IAAI;AAAA,MAAI,IAAI;AAAA,MAAI,IAAI;AAAA,MAAI,IAAI;AAAA,IAAG;AAAA,IAApD,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,MAAO,IAAI;AAAA,QAAE,YAAY;AAAA,QAAU,eAAe;AAAA,QAAO,gBAAgB;AAAA,MAAgB;AAAA,MAAzF,UAAA,CACE,gBAAA,EAAC,GAAD,EAAA,UAAK,EAAU,CAAA,GACd,CAAC,KAAU,KAAgB,gBAAA,EAAC,GAAD,CAAqB,CAAA,CAC5C;AAAA,IAGN,CAAA,GAAA,KAAY,gBAAA,EAAC,GAAD,EAAqB,UAAA,EAAW,CAAA,CACxC;AAAA;AAEX"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The insight card's "…" overflow menu. This repo owns the item set — order,
|
|
3
|
+
* icons, and labels (from `insights_feed.overflow_menu` copy) — while the host
|
|
4
|
+
* supplies the action handler via `beatActions.onMenuAction` (read from
|
|
5
|
+
* context). Renders nothing without a handler or before copy resolves.
|
|
6
|
+
*/
|
|
7
|
+
export declare const InsightOptionsMenu: (() => import("react/jsx-runtime").JSX.Element | null) & {
|
|
8
|
+
displayName: string;
|
|
9
|
+
};
|
|
10
|
+
export default InsightOptionsMenu;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { useGlobalCopyStore as m } from "../../common/context/hooks.es.js";
|
|
2
|
+
import { useBeatActions as a } from "../beatActions.es.js";
|
|
3
|
+
import { OverflowMenu as p } from "./OverflowMenu.es.js";
|
|
4
|
+
import { observer as f } from "mobx-react-lite";
|
|
5
|
+
import { Icon as l } from "@mxenabled/mx-icons";
|
|
6
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
7
|
+
var d = f(() => {
|
|
8
|
+
const { onMenuAction: n } = a(), e = m().insights_feed?.overflow_menu;
|
|
9
|
+
if (!n || !e) return null;
|
|
10
|
+
const { onAction: t, onOpen: i, disabled: r } = n, s = [
|
|
11
|
+
{
|
|
12
|
+
key: "helpful",
|
|
13
|
+
icon: /* @__PURE__ */ o(l, {
|
|
14
|
+
name: "thumb_up",
|
|
15
|
+
size: 24,
|
|
16
|
+
sx: { color: "text.primary" }
|
|
17
|
+
}),
|
|
18
|
+
label: e.helpful,
|
|
19
|
+
onSelect: () => t("helpful")
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
key: "not_helpful",
|
|
23
|
+
icon: /* @__PURE__ */ o(l, {
|
|
24
|
+
name: "thumb_down",
|
|
25
|
+
size: 24,
|
|
26
|
+
sx: { color: "text.primary" }
|
|
27
|
+
}),
|
|
28
|
+
label: e.not_helpful,
|
|
29
|
+
onSelect: () => t("not_helpful")
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: "hide",
|
|
33
|
+
icon: /* @__PURE__ */ o(l, {
|
|
34
|
+
name: "visibility_off",
|
|
35
|
+
size: 24,
|
|
36
|
+
sx: { color: "text.primary" }
|
|
37
|
+
}),
|
|
38
|
+
label: e.hide,
|
|
39
|
+
onSelect: () => t("hide")
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
return /* @__PURE__ */ o(p, {
|
|
43
|
+
ariaLabel: e.aria_label,
|
|
44
|
+
disabled: r,
|
|
45
|
+
items: s,
|
|
46
|
+
onOpen: i
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
export {
|
|
50
|
+
d as InsightOptionsMenu,
|
|
51
|
+
d as default
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=InsightOptionsMenu.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsightOptionsMenu.es.js","names":[],"sources":["../../../src/insights-v2/components/InsightOptionsMenu.tsx"],"sourcesContent":["import { observer } from 'mobx-react-lite'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../common'\n\nimport { useBeatActions } from '../beatActions'\n\nimport { OverflowMenu, type OverflowMenuItem } from './OverflowMenu'\n\n/**\n * The insight card's \"…\" overflow menu. This repo owns the item set — order,\n * icons, and labels (from `insights_feed.overflow_menu` copy) — while the host\n * supplies the action handler via `beatActions.onMenuAction` (read from\n * context). Renders nothing without a handler or before copy resolves.\n */\nexport const InsightOptionsMenu = observer(() => {\n const { onMenuAction } = useBeatActions()\n const copy = useGlobalCopyStore().insights_feed?.overflow_menu\n\n if (!onMenuAction || !copy) return null\n\n const { onAction, onOpen, disabled } = onMenuAction\n\n const items: OverflowMenuItem[] = [\n {\n key: 'helpful',\n icon: <Icon name=\"thumb_up\" size={24} sx={{ color: 'text.primary' }} />,\n label: copy.helpful,\n onSelect: () => onAction('helpful'),\n },\n {\n key: 'not_helpful',\n icon: <Icon name=\"thumb_down\" size={24} sx={{ color: 'text.primary' }} />,\n label: copy.not_helpful,\n onSelect: () => onAction('not_helpful'),\n },\n {\n key: 'hide',\n icon: <Icon name=\"visibility_off\" size={24} sx={{ color: 'text.primary' }} />,\n label: copy.hide,\n onSelect: () => onAction('hide'),\n },\n ]\n\n return (\n <OverflowMenu ariaLabel={copy.aria_label} disabled={disabled} items={items} onOpen={onOpen} />\n )\n})\n\nexport default InsightOptionsMenu\n"],"mappings":";;;;;;AAgBA,IAAa,IAAqB,EAAA,MAAe;AAC/C,QAAM,EAAE,cAAA,EAAA,IAAiB,EAAe,GAClC,IAAO,EAAmB,EAAE,eAAe;AAEjD,MAAI,CAAC,KAAgB,CAAC,EAAM,QAAO;AAEnC,QAAM,EAAE,UAAA,GAAU,QAAA,GAAQ,UAAA,EAAA,IAAa,GAEjC,IAA4B;AAAA,IAChC;AAAA,MACE,KAAK;AAAA,MACL,MAAM,gBAAA,EAAC,GAAD;AAAA,QAAM,MAAK;AAAA,QAAW,MAAM;AAAA,QAAI,IAAI,EAAE,OAAO,eAAe;AAAA,MAAI,CAAA;AAAA,MACtE,OAAO,EAAK;AAAA,MACZ,UAAA,MAAgB,EAAS,SAAS;AAAA,IACpC;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,MAAM,gBAAA,EAAC,GAAD;AAAA,QAAM,MAAK;AAAA,QAAa,MAAM;AAAA,QAAI,IAAI,EAAE,OAAO,eAAe;AAAA,MAAI,CAAA;AAAA,MACxE,OAAO,EAAK;AAAA,MACZ,UAAA,MAAgB,EAAS,aAAa;AAAA,IACxC;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,MAAM,gBAAA,EAAC,GAAD;AAAA,QAAM,MAAK;AAAA,QAAiB,MAAM;AAAA,QAAI,IAAI,EAAE,OAAO,eAAe;AAAA,MAAI,CAAA;AAAA,MAC5E,OAAO,EAAK;AAAA,MACZ,UAAA,MAAgB,EAAS,MAAM;AAAA,IACjC;AAAA,EACF;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IAAc,WAAW,EAAK;AAAA,IAAsB,UAAA;AAAA,IAAiB,OAAA;AAAA,IAAe,QAAA;AAAA,EAAS,CAAA;AAEjG,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface OverflowMenuItem {
|
|
3
|
+
/** Stable identity for the item (also its React key). */
|
|
4
|
+
key: string;
|
|
5
|
+
/** Leading icon node. */
|
|
6
|
+
icon: ReactNode;
|
|
7
|
+
/** Visible label. */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Invoked when the item is chosen (after the menu closes). */
|
|
10
|
+
onSelect: () => void;
|
|
11
|
+
/** Optional per-item disabled state. */
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface OverflowMenuProps {
|
|
15
|
+
/** Items to render, top to bottom. */
|
|
16
|
+
items: OverflowMenuItem[];
|
|
17
|
+
/** Accessible label for the trigger button. */
|
|
18
|
+
ariaLabel: string;
|
|
19
|
+
/** Called when the menu opens (e.g. to fire analytics). */
|
|
20
|
+
onOpen?: () => void;
|
|
21
|
+
/** Disables the trigger entirely (e.g. an obsolete beat). */
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A "…" (MoreHoriz) overflow menu: an icon trigger that opens a list of actions.
|
|
26
|
+
*
|
|
27
|
+
* Presentational only — it owns nothing but the open/close anchor state. The item
|
|
28
|
+
* set and what each item does are supplied by the caller via `items[].onSelect`,
|
|
29
|
+
* so all data/side-effects (analytics, feedback, hide, …) live outside this file.
|
|
30
|
+
*/
|
|
31
|
+
export declare const OverflowMenu: ({ items, ariaLabel, onOpen, disabled }: OverflowMenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export default OverflowMenu;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { useId as v, useState as z } from "react";
|
|
2
|
+
import { MoreHoriz as M } from "@mxenabled/mx-icons";
|
|
3
|
+
import { Fragment as O, jsx as r, jsxs as m } from "react/jsx-runtime";
|
|
4
|
+
import k from "@mui/material/IconButton";
|
|
5
|
+
import C from "@mui/material/ListItemText";
|
|
6
|
+
import L from "@mui/material/ListItemIcon";
|
|
7
|
+
import S from "@mui/material/MenuItem";
|
|
8
|
+
import y from "@mui/material/Menu";
|
|
9
|
+
var P = ({ items: d, ariaLabel: c, onOpen: p, disabled: h = !1 }) => {
|
|
10
|
+
const [e, n] = z(null), t = !!e, i = v(), a = `${i}-button`, l = `${i}-menu`, u = (o) => {
|
|
11
|
+
n(o.currentTarget), p?.();
|
|
12
|
+
}, s = () => n(null), f = (o) => {
|
|
13
|
+
s(), o();
|
|
14
|
+
};
|
|
15
|
+
return /* @__PURE__ */ m(O, { children: [/* @__PURE__ */ r(k, {
|
|
16
|
+
"aria-controls": t ? l : void 0,
|
|
17
|
+
"aria-expanded": t || void 0,
|
|
18
|
+
"aria-haspopup": "true",
|
|
19
|
+
"aria-label": c,
|
|
20
|
+
disabled: h,
|
|
21
|
+
id: a,
|
|
22
|
+
onClick: u,
|
|
23
|
+
sx: {
|
|
24
|
+
minHeight: 24,
|
|
25
|
+
minWidth: 24,
|
|
26
|
+
p: 0
|
|
27
|
+
},
|
|
28
|
+
children: /* @__PURE__ */ r(M, {
|
|
29
|
+
size: 24,
|
|
30
|
+
sx: { color: "neutral.dark" }
|
|
31
|
+
})
|
|
32
|
+
}), /* @__PURE__ */ r(y, {
|
|
33
|
+
MenuListProps: {
|
|
34
|
+
"aria-labelledby": a,
|
|
35
|
+
sx: { width: 212 }
|
|
36
|
+
},
|
|
37
|
+
anchorEl: e,
|
|
38
|
+
anchorOrigin: {
|
|
39
|
+
horizontal: "right",
|
|
40
|
+
vertical: "top"
|
|
41
|
+
},
|
|
42
|
+
disableScrollLock: !0,
|
|
43
|
+
id: l,
|
|
44
|
+
onClose: s,
|
|
45
|
+
open: t,
|
|
46
|
+
transformOrigin: {
|
|
47
|
+
horizontal: "right",
|
|
48
|
+
vertical: "top"
|
|
49
|
+
},
|
|
50
|
+
children: d.map(({ key: o, icon: x, label: g, onSelect: b, disabled: I }) => /* @__PURE__ */ m(S, {
|
|
51
|
+
disabled: I,
|
|
52
|
+
onClick: () => f(b),
|
|
53
|
+
sx: { p: 12 },
|
|
54
|
+
children: [/* @__PURE__ */ r(L, {
|
|
55
|
+
sx: { minWidth: "32px !important" },
|
|
56
|
+
children: x
|
|
57
|
+
}), /* @__PURE__ */ r(C, {
|
|
58
|
+
primary: g,
|
|
59
|
+
slotProps: { primary: {
|
|
60
|
+
fontSize: 15,
|
|
61
|
+
fontWeight: "normal",
|
|
62
|
+
lineHeight: "20px"
|
|
63
|
+
} }
|
|
64
|
+
})]
|
|
65
|
+
}, o))
|
|
66
|
+
})] });
|
|
67
|
+
};
|
|
68
|
+
export {
|
|
69
|
+
P as OverflowMenu,
|
|
70
|
+
P as default
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=OverflowMenu.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverflowMenu.es.js","names":[],"sources":["../../../src/insights-v2/components/OverflowMenu.tsx"],"sourcesContent":["import { useId, useState, type MouseEvent, type ReactNode } from 'react'\n\nimport IconButton from '@mui/material/IconButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Menu from '@mui/material/Menu'\nimport MenuItem from '@mui/material/MenuItem'\n\nimport { MoreHoriz } from '@mxenabled/mx-icons'\n\nexport interface OverflowMenuItem {\n /** Stable identity for the item (also its React key). */\n key: string\n /** Leading icon node. */\n icon: ReactNode\n /** Visible label. */\n label: string\n /** Invoked when the item is chosen (after the menu closes). */\n onSelect: () => void\n /** Optional per-item disabled state. */\n disabled?: boolean\n}\n\nexport interface OverflowMenuProps {\n /** Items to render, top to bottom. */\n items: OverflowMenuItem[]\n /** Accessible label for the trigger button. */\n ariaLabel: string\n /** Called when the menu opens (e.g. to fire analytics). */\n onOpen?: () => void\n /** Disables the trigger entirely (e.g. an obsolete beat). */\n disabled?: boolean\n}\n\n/**\n * A \"…\" (MoreHoriz) overflow menu: an icon trigger that opens a list of actions.\n *\n * Presentational only — it owns nothing but the open/close anchor state. The item\n * set and what each item does are supplied by the caller via `items[].onSelect`,\n * so all data/side-effects (analytics, feedback, hide, …) live outside this file.\n */\nexport const OverflowMenu = ({ items, ariaLabel, onOpen, disabled = false }: OverflowMenuProps) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const isOpen = Boolean(anchorEl)\n\n // Unique per instance so multiple menus on a page (one per card) don't share\n // DOM ids or cross-wire their aria relationships.\n const baseId = useId()\n const buttonId = `${baseId}-button`\n const menuId = `${baseId}-menu`\n\n const handleOpen = (event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget)\n onOpen?.()\n }\n\n const handleClose = () => setAnchorEl(null)\n\n // Close before running the caller's handler so the menu never lingers over a\n // dialog/drawer the handler may open.\n const handleSelect = (onSelect: () => void) => {\n handleClose()\n onSelect()\n }\n\n return (\n <>\n <IconButton\n aria-controls={isOpen ? menuId : undefined}\n aria-expanded={isOpen || undefined}\n aria-haspopup=\"true\"\n aria-label={ariaLabel}\n disabled={disabled}\n id={buttonId}\n onClick={handleOpen}\n sx={{ minHeight: 24, minWidth: 24, p: 0 }}\n >\n <MoreHoriz size={24} sx={{ color: 'neutral.dark' }} />\n </IconButton>\n <Menu\n MenuListProps={{ 'aria-labelledby': buttonId, sx: { width: 212 } }}\n anchorEl={anchorEl}\n anchorOrigin={{ horizontal: 'right', vertical: 'top' }}\n disableScrollLock={true}\n id={menuId}\n onClose={handleClose}\n open={isOpen}\n transformOrigin={{ horizontal: 'right', vertical: 'top' }}\n >\n {items.map(({ key, icon, label, onSelect, disabled: itemDisabled }) => (\n <MenuItem\n disabled={itemDisabled}\n key={key}\n onClick={() => handleSelect(onSelect)}\n sx={{ p: 12 }}\n >\n <ListItemIcon sx={{ minWidth: '32px !important' }}>{icon}</ListItemIcon>\n <ListItemText\n primary={label}\n slotProps={{ primary: { fontSize: 15, fontWeight: 'normal', lineHeight: '20px' } }}\n />\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n}\n\nexport default OverflowMenu\n"],"mappings":";;;;;;;;AAyCA,IAAa,IAAA,CAAgB,EAAE,OAAA,GAAO,WAAA,GAAW,QAAA,GAAQ,UAAA,IAAW,GAAA,MAA+B;AACjG,QAAM,CAAC,GAAU,CAAA,IAAe,EAA6B,IAAI,GAC3D,IAAS,EAAQ,GAIjB,IAAS,EAAM,GACf,IAAW,GAAG,CAAA,WACd,IAAS,GAAG,CAAA,SAEZ,IAAA,CAAc,MAAyC;AAC3D,IAAA,EAAY,EAAM,aAAa,GAC/B,IAAS;AAAA,EACX,GAEM,IAAA,MAAoB,EAAY,IAAI,GAIpC,IAAA,CAAgB,MAAyB;AAC7C,IAAA,EAAY,GACZ,EAAS;AAAA,EACX;AAEA,SACE,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,IACE,iBAAe,IAAS,IAAS;AAAA,IACjC,iBAAe,KAAU;AAAA,IACzB,iBAAc;AAAA,IACd,cAAY;AAAA,IACF,UAAA;AAAA,IACV,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,IAAI;AAAA,MAAE,WAAW;AAAA,MAAI,UAAU;AAAA,MAAI,GAAG;AAAA,IAAE;AAAA,IAExC,UAAA,gBAAA,EAAC,GAAD;AAAA,MAAW,MAAM;AAAA,MAAI,IAAI,EAAE,OAAO,eAAe;AAAA,IAAI,CAAA;AAAA,EAC3C,CAAA,GACZ,gBAAA,EAAC,GAAD;AAAA,IACE,eAAe;AAAA,MAAE,mBAAmB;AAAA,MAAU,IAAI,EAAE,OAAO,IAAI;AAAA,IAAE;AAAA,IACvD,UAAA;AAAA,IACV,cAAc;AAAA,MAAE,YAAY;AAAA,MAAS,UAAU;AAAA,IAAM;AAAA,IACrD,mBAAmB;AAAA,IACnB,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,MAAM;AAAA,IACN,iBAAiB;AAAA,MAAE,YAAY;AAAA,MAAS,UAAU;AAAA,IAAM;AAAA,IAEvD,UAAA,EAAM,IAAA,CAAK,EAAE,KAAA,GAAK,MAAA,GAAM,OAAA,GAAO,UAAA,GAAU,UAAU,EAAA,MAClD,gBAAA,EAAC,GAAD;AAAA,MACE,UAAU;AAAA,MAEV,SAAA,MAAe,EAAa,CAAQ;AAAA,MACpC,IAAI,EAAE,GAAG,GAAG;AAAA,MAJd,UAAA,CAME,gBAAA,EAAC,GAAD;AAAA,QAAc,IAAI,EAAE,UAAU,kBAAkB;AAAA,QAAI,UAAA;AAAA,MAAmB,CAAA,GACvE,gBAAA,EAAC,GAAD;AAAA,QACE,SAAS;AAAA,QACT,WAAW,EAAE,SAAS;AAAA,UAAE,UAAU;AAAA,UAAI,YAAY;AAAA,UAAU,YAAY;AAAA,QAAO,EAAE;AAAA,MAClF,CAAA,CACO;AAAA,IATH,GAAA,CASG,CACX;AAAA,EACG,CAAA,CACN,EAAA,CAAA;AAEN"}
|
|
@@ -7,6 +7,9 @@ export { default as StatusMessageCard } from './components/StatusMessageCard';
|
|
|
7
7
|
export { default as TransactionListCard, type FooterRow } from './components/TransactionListCard';
|
|
8
8
|
export { default as InsightTransactionRow, type InsightTransactionRowProps, } from './components/InsightTransactionRow';
|
|
9
9
|
export { default as LogoClusterCard } from './components/LogoClusterCard';
|
|
10
|
+
export { default as OverflowMenu, type OverflowMenuItem, type OverflowMenuProps, } from './components/OverflowMenu';
|
|
11
|
+
export { default as InsightOptionsMenu } from './components/InsightOptionsMenu';
|
|
12
|
+
export { useBeatActions, type BeatActions, type MenuActionHandlers, type UpdateParams, type InsightMenuAction, } from './beatActions';
|
|
10
13
|
export { default as LogoTile } from './components/LogoTile';
|
|
11
14
|
export { default as MerchantHighlightCard } from './components/MerchantHighlightCard';
|
|
12
15
|
export { default as P2PLogoStack } from './components/P2PLogoStack';
|
|
@@ -1,63 +1,69 @@
|
|
|
1
|
-
import { BAR_CHART_VARIANTS as
|
|
1
|
+
import { BAR_CHART_VARIANTS as r, 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
|
|
4
|
-
import
|
|
3
|
+
import { DoubleBarChartBlock as e } from "./blocks/ChartBlocks/DoubleBarChartBlock/DoubleBarChartBlock.es.js";
|
|
4
|
+
import n from "./blocks/ChartBlocks/StepChartBlock/StepChartBlock.es.js";
|
|
5
5
|
import s from "./blocks/ChartBlocks/DonutChartBlock/DonutChartBlock.es.js";
|
|
6
6
|
import B from "./blocks/ChartBlocks/DoubleProgressBarBlock/DoubleProgressBarBlock.es.js";
|
|
7
|
-
import
|
|
7
|
+
import g from "./blocks/ComponentBlocks/AccountBlock/AccountBlock.es.js";
|
|
8
8
|
import S from "./components/TransferLogoCard.es.js";
|
|
9
|
-
import
|
|
9
|
+
import k from "./blocks/ComponentBlocks/AccountSwitchBlock/AccountSwitchBlock.es.js";
|
|
10
10
|
import { BudgetBlock as T } from "./blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js";
|
|
11
11
|
import D from "./components/SaveAnExtraCard.es.js";
|
|
12
|
-
import
|
|
12
|
+
import v from "./blocks/ComponentBlocks/SaveExtraBlock/SaveExtraBlock.es.js";
|
|
13
13
|
import y from "./components/InsightTransactionRow.es.js";
|
|
14
|
-
import
|
|
15
|
-
import { CategoryTransactionsBlock as
|
|
16
|
-
import { SVGImageBlock as
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import j from "./
|
|
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
|
|
27
|
-
import
|
|
28
|
-
import
|
|
29
|
-
import
|
|
14
|
+
import I from "./components/TransactionListCard.es.js";
|
|
15
|
+
import { CategoryTransactionsBlock as R } from "./blocks/ComponentBlocks/TransactionBlock/TransactionBlock.es.js";
|
|
16
|
+
import { SVGImageBlock as x } from "./blocks/ImageBlocks/SVGImageBlock/SVGImageBlock.es.js";
|
|
17
|
+
import O from "./components/AccountHeroCard.es.js";
|
|
18
|
+
import _ from "./components/AmountPill.es.js";
|
|
19
|
+
import N from "./components/DesignateEmergencySavingsCard.es.js";
|
|
20
|
+
import { useBeatActions as j } from "./beatActions.es.js";
|
|
21
|
+
import { OverflowMenu as z } from "./components/OverflowMenu.es.js";
|
|
22
|
+
import { InsightOptionsMenu as J } from "./components/InsightOptionsMenu.es.js";
|
|
23
|
+
import Q from "./components/BaseLayout.es.js";
|
|
24
|
+
import X from "./components/StatusMessageCard.es.js";
|
|
25
|
+
import Z from "./components/LogoTile.es.js";
|
|
26
|
+
import oo from "./components/LogoClusterCard.es.js";
|
|
27
|
+
import to from "./components/MerchantHighlightCard.es.js";
|
|
28
|
+
import io from "./components/P2PLogoStack.es.js";
|
|
29
|
+
import po from "./components/SavingsOpportunityCard.es.js";
|
|
30
|
+
import eo from "./components/StatusPill.es.js";
|
|
31
|
+
import no from "./components/SubscriptionHeroCard.es.js";
|
|
32
|
+
import so from "./components/UpcomingBillCard.es.js";
|
|
30
33
|
export {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
g as AccountBlock,
|
|
35
|
+
O as AccountHeroCard,
|
|
36
|
+
k as AccountSwitchBlock,
|
|
37
|
+
_ as AmountPill,
|
|
38
|
+
r as BAR_CHART_VARIANTS,
|
|
36
39
|
p as BarchartBlock,
|
|
37
|
-
|
|
40
|
+
Q as BaseLayout,
|
|
38
41
|
T as BudgetBlock,
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
R as CategoryTransactionsBlock,
|
|
43
|
+
N as DesignateEmergencySavingsCard,
|
|
41
44
|
s as DonutChartBlock,
|
|
42
|
-
|
|
45
|
+
e as DoubleBarChartBlock,
|
|
43
46
|
B as DoubleProgressBarBlock,
|
|
47
|
+
J as InsightOptionsMenu,
|
|
44
48
|
y as InsightTransactionRow,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
oo as LogoClusterCard,
|
|
50
|
+
Z as LogoTile,
|
|
51
|
+
to as MerchantHighlightCard,
|
|
52
|
+
z as OverflowMenu,
|
|
53
|
+
io as P2PLogoStack,
|
|
54
|
+
x as SVGImageBlock,
|
|
50
55
|
D as SaveAnExtraCard,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
v as SaveExtraBlock,
|
|
57
|
+
po as SavingsOpportunityCard,
|
|
58
|
+
X as StatusMessageCard,
|
|
59
|
+
eo as StatusPill,
|
|
60
|
+
n as StepChartBlock,
|
|
61
|
+
no as SubscriptionHeroCard,
|
|
62
|
+
I as TransactionListCard,
|
|
58
63
|
S as TransferLogoCard,
|
|
59
|
-
|
|
64
|
+
so as UpcomingBillCard,
|
|
60
65
|
t as barChartVariant,
|
|
61
66
|
m as buildChartData,
|
|
62
|
-
i as buildDataSeries
|
|
67
|
+
i as buildDataSeries,
|
|
68
|
+
j as useBeatActions
|
|
63
69
|
};
|