@mx-cartographer/experiences 9.6.0 → 9.6.1
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 +11 -0
- package/dist/common/components/ConnectDrawer.es.js +17 -44
- package/dist/common/components/ConnectDrawer.es.js.map +1 -1
- package/dist/common/components/ConnectWidgetPanel.d.ts +8 -0
- package/dist/common/components/ConnectWidgetPanel.es.js +44 -0
- package/dist/common/components/ConnectWidgetPanel.es.js.map +1 -0
- package/dist/common/components/dialog/Dialog.d.ts +2 -0
- package/dist/common/components/dialog/Dialog.es.js +30 -30
- package/dist/common/components/dialog/Dialog.es.js.map +1 -1
- package/dist/common/components/index.d.ts +1 -0
- package/dist/common/index.es.js +67 -65
- package/dist/core/types/localization/InsightsFeedCopy.d.ts +87 -0
- package/dist/insights-v2/actionBlocks/ActionBlockLayer.es.js +19 -19
- package/dist/insights-v2/actionBlocks/ActionBlockLayer.es.js.map +1 -1
- package/dist/insights-v2/actionBlocks/ConnectWidgetActionBlock.d.ts +21 -0
- package/dist/insights-v2/actionBlocks/ConnectWidgetActionBlock.es.js +16 -0
- package/dist/insights-v2/actionBlocks/ConnectWidgetActionBlock.es.js.map +1 -0
- package/dist/insights-v2/actionBlocks/ConnectionDetailActionBlock.d.ts +12 -0
- package/dist/insights-v2/actionBlocks/ConnectionDetailActionBlock.es.js +25 -0
- package/dist/insights-v2/actionBlocks/ConnectionDetailActionBlock.es.js.map +1 -0
- package/dist/insights-v2/actionBlocks/FeedbackModalActionBlock.d.ts +17 -0
- package/dist/insights-v2/actionBlocks/FeedbackModalActionBlock.es.js +39 -0
- package/dist/insights-v2/actionBlocks/FeedbackModalActionBlock.es.js.map +1 -0
- package/dist/insights-v2/actionBlocks/SurveyModalActionBlock.d.ts +16 -0
- package/dist/insights-v2/actionBlocks/SurveyModalActionBlock.es.js +47 -0
- package/dist/insights-v2/actionBlocks/SurveyModalActionBlock.es.js.map +1 -0
- package/dist/insights-v2/beatActions.d.ts +2 -2
- package/dist/insights-v2/beatActions.es.js.map +1 -1
- package/dist/insights-v2/components/BaseLayout.es.js +14 -14
- package/dist/insights-v2/components/ConnectionDetailDrillDown.d.ts +32 -0
- package/dist/insights-v2/components/ConnectionDetailDrillDown.es.js +148 -0
- package/dist/insights-v2/components/ConnectionDetailDrillDown.es.js.map +1 -0
- package/dist/insights-v2/components/FeedbackDialog.d.ts +3 -1
- package/dist/insights-v2/components/FeedbackDialog.es.js +80 -72
- package/dist/insights-v2/components/FeedbackDialog.es.js.map +1 -1
- package/dist/insights-v2/components/FeedbackModal.d.ts +60 -0
- package/dist/insights-v2/components/FeedbackModal.es.js +61 -0
- package/dist/insights-v2/components/FeedbackModal.es.js.map +1 -0
- package/dist/insights-v2/components/SurveyModal.d.ts +65 -0
- package/dist/insights-v2/components/SurveyModal.es.js +138 -0
- package/dist/insights-v2/components/SurveyModal.es.js.map +1 -0
- package/dist/insights-v2/components/shared/StatusSnackbar.d.ts +28 -0
- package/dist/insights-v2/components/shared/StatusSnackbar.es.js +19 -0
- package/dist/insights-v2/components/shared/StatusSnackbar.es.js.map +1 -0
- package/dist/insights-v2/index.d.ts +4 -0
- package/dist/insights-v2/index.es.js +72 -64
- package/dist/insights-v2/mappings/actionBlocksKey.d.ts +4 -0
- package/dist/insights-v2/mappings/actionBlocksKey.es.js +4 -0
- package/dist/insights-v2/mappings/actionBlocksKey.es.js.map +1 -1
- package/dist/insights-v2/mappings/blocks.es.js +79 -56
- package/dist/insights-v2/mappings/blocks.es.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## [9.6.1] - 10-12-2026
|
|
2
|
+
|
|
3
|
+
- **ADDED** - Three Insights V2 CTA action blocks, registered in `actionBlocksKey`/`blocks`: `feedback_modal_block` (`FeedbackModalActionBlock`) renders a survey dialog with a success/error `StatusSnackbar` on top of the action drawer; `connection_detail_block` (`ConnectionDetailActionBlock`) shows the connection-details education drilldown (`ConnectionDetailDrillDown`); and `connect_widget_block` (`ConnectWidgetActionBlock`) boots MX's Connect widget (web-widget-sdk iframe) inside the drawer. Added `feedback_modal` and `connection_details` copy under `insights_feed`, exported the new `FeedbackModal`, `StatusSnackbar`, and `ConnectionDetailDrillDown` components, and added tests and stories (WEC-1879)
|
|
4
|
+
- **FIXED** - A CTA pointing at a 'modal' action block (`feedback_modal_block`, `survey_modal_block`) no longer also opens an empty action Drawer behind/under its dialog; `ActionBlockEntry` gains a `presentation?: 'drawer' | 'modal'` field and `ActionBlockLayer` skips the Drawer wrapper entirely for `'modal'` entries (WEC-1879)
|
|
5
|
+
- **ADDED** - Storybook stories for `FeedbackModalActionBlock`, `ConnectionDetailActionBlock`, `ConnectWidgetActionBlock`, and `SurveyModalActionBlock`, each rendered through `BaseLayout` with a CTA that opens the real action-block registry path (WEC-1879)
|
|
6
|
+
|
|
7
|
+
## [9.6.0] - 10-10-2026
|
|
8
|
+
|
|
9
|
+
- **CHANGED** - Tupac now builds `instance_slot` from ditto's block schema as `{ block, variant, data }` instead of `{ header_text, data_series }`; the V2 envelope path reads the new shape. `InstanceSlotData` (`core/types/Insights.ts`) is now schemaless and keyed by slot name (replacing the fixed `header_text`/`data_series` fields on `InstanceSlot`), with a new `slot<T>(data, name)` reader so each block names the slot and kind it expects at the read site; `block` is now optional, since tupac emits `instance_slot: {}` for a beat whose template has no ditto config. `TransactionBlock` reads `slot<InstanceSlotRow[]>(data, 'series')` and `slot<string>(data, 'header_text')`; `WithdrawalBlock` reads `data.series`. Scope is the V2 envelope path only — V1 blocks reading `instance_slot_data` are untouched, and `InsightsInstanceSlotData` is unchanged (WEC-1823)
|
|
10
|
+
- **CHANGED** - `CompactInsightCard`'s `WarningBadgeVisual` is now registered under ditto's `with_warning_badge` variant instead of `embedded` (a rename of an existing `createVariantBlock` entry, not a new one) — the variant names a look, not a surface; micro/notification continue to resolve `minimal`. Reads the flat `logo` slot, as does `microinsights/cards/InsightCard` (WEC-1823)
|
|
11
|
+
|
|
1
12
|
## [9.5.4] - 10-09-2026
|
|
2
13
|
|
|
3
14
|
- **ADDED** - `amount_input_modal_block`, the first modal action block: edits one whole-dollar setting in a dialog, picked by the CTA variant. `low_balance_threshold` (Low Account Balance "Edit Alert Settings") saves the threshold on the account's low-balance alert profile; `safety_net` (Savings Opportunity V2 "Set Reminder" / "Adjust Reminder") saves the safety net on the user insight profile. Saves run through `useCtaHandler`. Copy under `insights_feed.amount_input_modal`; mock beats, stories and `docs/action-blocks/amount-input-modal-block.md`.
|
|
@@ -1,53 +1,26 @@
|
|
|
1
|
-
import { useAccountStore as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
let s;
|
|
12
|
-
const { refreshAccounts: f } = _(), { loadWidget: d } = b(), { connect: p } = g(), [C, e] = r.useState(!1), [h, t] = r.useState(!1), { palette: { mode: S } } = v();
|
|
13
|
-
return r.useEffect(() => (o ? (e(!0), d({
|
|
14
|
-
mode: S,
|
|
15
|
-
...l
|
|
16
|
-
}).then((E) => {
|
|
17
|
-
s = new w({
|
|
18
|
-
container: `#${a}`,
|
|
19
|
-
style: {
|
|
20
|
-
border: "none",
|
|
21
|
-
height: "calc(100% - 62px)",
|
|
22
|
-
maxWidth: "450px",
|
|
23
|
-
position: "absolute",
|
|
24
|
-
width: "100%"
|
|
25
|
-
},
|
|
26
|
-
url: E.url,
|
|
27
|
-
onSsoUrlLoadError: () => {
|
|
28
|
-
e(!1), t(!0);
|
|
29
|
-
},
|
|
30
|
-
onLoad: () => {
|
|
31
|
-
e(!1), t(!1);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
})) : (e(!1), t(!1)), () => {
|
|
35
|
-
s?.unmount();
|
|
36
|
-
}), [o]), /* @__PURE__ */ n(x, {
|
|
37
|
-
ariaLabelClose: p.close_manage_connection_aria,
|
|
1
|
+
import { useAccountStore as i, useGlobalCopyStore as m } from "../context/hooks.es.js";
|
|
2
|
+
import s from "./drawer/Drawer.es.js";
|
|
3
|
+
import l from "./ConnectWidgetPanel.es.js";
|
|
4
|
+
import "react";
|
|
5
|
+
import { observer as f } from "mobx-react-lite";
|
|
6
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
7
|
+
var p = ({ loadWidgetProps: e, onClose: t, showConnectWidget: o, title: n }) => {
|
|
8
|
+
const { refreshAccounts: a } = i(), { connect: c } = m();
|
|
9
|
+
return /* @__PURE__ */ r(s, {
|
|
10
|
+
ariaLabelClose: c.close_manage_connection_aria,
|
|
38
11
|
isOpen: o,
|
|
39
12
|
onClose: () => {
|
|
40
|
-
|
|
13
|
+
t(), a();
|
|
41
14
|
},
|
|
42
|
-
title:
|
|
43
|
-
children: /* @__PURE__ */
|
|
44
|
-
|
|
45
|
-
|
|
15
|
+
title: n,
|
|
16
|
+
children: /* @__PURE__ */ r(l, {
|
|
17
|
+
isActive: o,
|
|
18
|
+
loadWidgetProps: e
|
|
46
19
|
})
|
|
47
20
|
});
|
|
48
|
-
},
|
|
21
|
+
}, D = f(p);
|
|
49
22
|
export {
|
|
50
|
-
|
|
23
|
+
D as default
|
|
51
24
|
};
|
|
52
25
|
|
|
53
26
|
//# sourceMappingURL=ConnectDrawer.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectDrawer.es.js","names":[],"sources":["../../../src/common/components/ConnectDrawer.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\
|
|
1
|
+
{"version":3,"file":"ConnectDrawer.es.js","names":[],"sources":["../../../src/common/components/ConnectDrawer.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ConnectWidgetPanel from './ConnectWidgetPanel'\nimport { Drawer, useAccountStore, useGlobalCopyStore } from '../../common'\n\ninterface ConnectDrawerProps {\n loadWidgetProps?: object\n onClose: () => void\n showConnectWidget: boolean\n title: string\n}\n\n/**\n * Drawer wrapper around `ConnectWidgetPanel` (SSO url via ConnectStore, the\n * iframe-based `@mxenabled/web-widget-sdk` ConnectWidget, loading/error\n * statuses) with an account refresh on close. Unchanged behaviour for its\n * existing callers; `ConnectWidgetActionBlock` renders `ConnectWidgetPanel`\n * directly instead, since `ActionBlockLayer` already supplies its own Drawer.\n */\nconst ConnectDrawer: React.FC<ConnectDrawerProps> = ({\n loadWidgetProps,\n onClose,\n showConnectWidget,\n title,\n}) => {\n const { refreshAccounts } = useAccountStore()\n const { connect: connectCopy } = useGlobalCopyStore()\n\n return (\n <Drawer\n ariaLabelClose={connectCopy.close_manage_connection_aria}\n isOpen={showConnectWidget}\n onClose={() => {\n onClose()\n refreshAccounts()\n }}\n title={title}\n >\n <ConnectWidgetPanel isActive={showConnectWidget} loadWidgetProps={loadWidgetProps} />\n </Drawer>\n )\n}\n\nexport default observer(ConnectDrawer)\n"],"mappings":";;;;;;AAoBA,IAAM,IAAA,CAA+C,EACnD,iBAAA,GACA,SAAA,GACA,mBAAA,GACA,OAAA,EAAA,MACI;AACJ,QAAM,EAAE,iBAAA,EAAA,IAAoB,EAAgB,GACtC,EAAE,SAAS,EAAA,IAAgB,EAAmB;AAEpD,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,gBAAgB,EAAY;AAAA,IAC5B,QAAQ;AAAA,IACR,SAAA,MAAe;AACb,MAAA,EAAQ,GACR,EAAgB;AAAA,IAClB;AAAA,IACO,OAAA;AAAA,IAEP,UAAA,gBAAA,EAAC,GAAD;AAAA,MAAoB,UAAU;AAAA,MAAoC,iBAAA;AAAA,IAAkB,CAAA;AAAA,EAC9E,CAAA;AAEZ,GAEA,IAAe,EAAS,CAAa"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export interface ConnectWidgetPanelProps {
|
|
3
|
+
loadWidgetProps?: object;
|
|
4
|
+
/** Mounts/unmounts the underlying iframe-based ConnectWidget. */
|
|
5
|
+
isActive: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: React.FunctionComponent<ConnectWidgetPanelProps>;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useConnectStore as g } from "../context/hooks.es.js";
|
|
2
|
+
import { CONNECT_WIDGET_ID as s, MemberConnectionStatus as a } from "../constants/Connect.es.js";
|
|
3
|
+
import i from "./ConnectStatus.es.js";
|
|
4
|
+
import o from "react";
|
|
5
|
+
import { observer as h } from "mobx-react-lite";
|
|
6
|
+
import { jsx as l, jsxs as C } from "react/jsx-runtime";
|
|
7
|
+
import { useTheme as E } from "@mui/material/styles";
|
|
8
|
+
import { ConnectWidget as W } from "@mxenabled/web-widget-sdk";
|
|
9
|
+
var x = ({ isActive: r, loadWidgetProps: d }) => {
|
|
10
|
+
let n;
|
|
11
|
+
const { loadWidget: f } = g(), [m, e] = o.useState(!1), [u, t] = o.useState(!1), { palette: { mode: c } } = E();
|
|
12
|
+
return o.useEffect(() => (r ? (e(!0), f({
|
|
13
|
+
mode: c,
|
|
14
|
+
...d
|
|
15
|
+
}).then((p) => {
|
|
16
|
+
n = new W({
|
|
17
|
+
container: `#${s}`,
|
|
18
|
+
style: {
|
|
19
|
+
border: "none",
|
|
20
|
+
height: "calc(100% - 62px)",
|
|
21
|
+
maxWidth: "450px",
|
|
22
|
+
position: "absolute",
|
|
23
|
+
width: "100%"
|
|
24
|
+
},
|
|
25
|
+
url: p.url,
|
|
26
|
+
onSsoUrlLoadError: () => {
|
|
27
|
+
e(!1), t(!0);
|
|
28
|
+
},
|
|
29
|
+
onLoad: () => {
|
|
30
|
+
e(!1), t(!1);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
})) : (e(!1), t(!1)), () => {
|
|
34
|
+
n?.unmount();
|
|
35
|
+
}), [r]), /* @__PURE__ */ C("div", {
|
|
36
|
+
id: s,
|
|
37
|
+
children: [u && /* @__PURE__ */ l(i, { status: a.Error }), m && /* @__PURE__ */ l(i, { status: a.Loading })]
|
|
38
|
+
});
|
|
39
|
+
}, w = h(x);
|
|
40
|
+
export {
|
|
41
|
+
w as default
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=ConnectWidgetPanel.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectWidgetPanel.es.js","names":[],"sources":["../../../src/common/components/ConnectWidgetPanel.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { useTheme } from '@mui/material/styles'\nimport { ConnectWidget } from '@mxenabled/web-widget-sdk'\n\nimport ConnectStatus from './ConnectStatus'\nimport { CONNECT_WIDGET_ID, MemberConnectionStatus } from '../constants/Connect'\nimport { useConnectStore } from '../context/hooks'\n\nexport interface ConnectWidgetPanelProps {\n loadWidgetProps?: object\n /** Mounts/unmounts the underlying iframe-based ConnectWidget. */\n isActive: boolean\n}\n\n/**\n * The Connect widget itself (SSO url via ConnectStore, the iframe-based\n * `@mxenabled/web-widget-sdk` ConnectWidget, loading/error statuses) with no\n * `Drawer` of its own — content-only, so a caller can put it inside any\n * container (a `Drawer`, as `ConnectDrawer` does, or directly inside another\n * drawer's content slot, as `ConnectWidgetActionBlock` does).\n *\n * Extracted from `ConnectDrawer` so `ConnectWidgetActionBlock` can render just\n * the widget without nesting a second `Drawer` inside `ActionBlockLayer`'s.\n */\nconst ConnectWidgetPanel: React.FC<ConnectWidgetPanelProps> = ({ isActive, loadWidgetProps }) => {\n let connectWidget: ConnectWidget\n\n const { loadWidget } = useConnectStore()\n const [isLoading, setIsLoading] = React.useState(false)\n const [hasError, setHasError] = React.useState(false)\n const {\n palette: { mode },\n } = useTheme()\n\n React.useEffect(() => {\n if (isActive) {\n setIsLoading(true)\n loadWidget({ mode: mode, ...loadWidgetProps }).then((res) => {\n connectWidget = new ConnectWidget({\n container: `#${CONNECT_WIDGET_ID}`,\n style: {\n border: 'none',\n height: 'calc(100% - 62px)',\n maxWidth: '450px',\n position: 'absolute',\n width: '100%',\n },\n url: res.url,\n onSsoUrlLoadError: () => {\n setIsLoading(false)\n setHasError(true)\n },\n onLoad: () => {\n setIsLoading(false)\n setHasError(false)\n },\n })\n })\n } else {\n setIsLoading(false)\n setHasError(false)\n }\n\n return () => {\n connectWidget?.unmount()\n }\n }, [isActive])\n\n return (\n <div id={CONNECT_WIDGET_ID}>\n {hasError && <ConnectStatus status={MemberConnectionStatus.Error} />}\n {isLoading && <ConnectStatus status={MemberConnectionStatus.Loading} />}\n </div>\n )\n}\n\nexport default observer(ConnectWidgetPanel)\n"],"mappings":";;;;;;;;AAyBA,IAAM,IAAA,CAAyD,EAAE,UAAA,GAAU,iBAAA,EAAA,MAAsB;AAC/F,MAAI;AAEJ,QAAM,EAAE,YAAA,EAAA,IAAe,EAAgB,GACjC,CAAC,GAAW,CAAA,IAAgB,EAAM,SAAS,EAAK,GAChD,CAAC,GAAU,CAAA,IAAe,EAAM,SAAS,EAAK,GAC9C,EACJ,SAAS,EAAE,MAAA,EAAA,EAAA,IACT,EAAS;AAEb,SAAA,EAAM,UAAA,OACA,KACF,EAAa,EAAI,GACjB,EAAW;AAAA,IAAQ,MAAA;AAAA,IAAM,GAAG;AAAA,EAAgB,CAAC,EAAE,KAAA,CAAM,MAAQ;AAC3D,IAAA,IAAgB,IAAI,EAAc;AAAA,MAChC,WAAW,IAAI,CAAA;AAAA,MACf,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,MACA,KAAK,EAAI;AAAA,MACT,mBAAA,MAAyB;AACvB,QAAA,EAAa,EAAK,GAClB,EAAY,EAAI;AAAA,MAClB;AAAA,MACA,QAAA,MAAc;AACZ,QAAA,EAAa,EAAK,GAClB,EAAY,EAAK;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH,CAAC,MAED,EAAa,EAAK,GAClB,EAAY,EAAK,IAGnB,MAAa;AACX,IAAA,GAAe,QAAQ;AAAA,EACzB,IACC,CAAC,CAAQ,CAAC,GAGX,gBAAA,EAAC,OAAD;AAAA,IAAK,IAAI;AAAA,IAAT,UAAA,CACG,KAAY,gBAAA,EAAC,GAAD,EAAe,QAAQ,EAAuB,MAAQ,CAAA,GAClE,KAAa,gBAAA,EAAC,GAAD,EAAe,QAAQ,EAAuB,QAAU,CAAA,CACnE;AAAA;AAET,GAEA,IAAe,EAAS,CAAkB"}
|
|
@@ -9,6 +9,8 @@ export interface DialogProps extends Omit<MuiDialogProps, OwnedMuiProps> {
|
|
|
9
9
|
className?: string;
|
|
10
10
|
copy: CopyObject;
|
|
11
11
|
disablePrimaryButton?: boolean;
|
|
12
|
+
/** Render the footer action buttons. Default true; content-only dialogs (e.g. the insights survey modal) pass false. */
|
|
13
|
+
showActions?: boolean;
|
|
12
14
|
isOpen: boolean;
|
|
13
15
|
onClose: (event?: unknown, reason?: string) => void;
|
|
14
16
|
onPrimaryAction?: () => void;
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
import { useScreenSize as
|
|
2
|
-
import { useFocusReturn as
|
|
3
|
-
import
|
|
4
|
-
import { DialogFooter as
|
|
5
|
-
import { jsx as o, jsxs as
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
var
|
|
9
|
-
const { sx: a, ...
|
|
10
|
-
|
|
11
|
-
},
|
|
1
|
+
import { useScreenSize as H } from "../../hooks/useScreenSize.es.js";
|
|
2
|
+
import { useFocusReturn as j } from "../../hooks/useFocusReturn.es.js";
|
|
3
|
+
import k from "react";
|
|
4
|
+
import { DialogFooter as v, DialogHeader as C } from "@mxenabled/mxui";
|
|
5
|
+
import { jsx as o, jsxs as I } from "react/jsx-runtime";
|
|
6
|
+
import W from "@mui/material/Dialog";
|
|
7
|
+
import _ from "@mui/material/DialogContent";
|
|
8
|
+
var G = ({ className: l, copy: i, disablePrimaryButton: n = !1, showActions: c = !0, isOpen: e = !1, onClose: r, onPrimaryAction: m, primaryColor: d = "primary", primaryText: u = "Confirm", returnFocusTo: p, onSecondaryAction: t, secondaryColor: f = "primary", secondaryText: g = "Cancel", children: x, ...h }) => {
|
|
9
|
+
const { sx: a, ...D } = h, b = i?.title ?? "", y = i?.close_aria ?? "Close", s = k.useId(), { isSmallMobile: P } = H(), { onExited: S, onFocus: A, rootRef: F } = j(e, p), M = () => {
|
|
10
|
+
m?.(), r();
|
|
11
|
+
}, R = () => {
|
|
12
12
|
t && t(), r();
|
|
13
13
|
};
|
|
14
14
|
return /* @__PURE__ */ o("div", {
|
|
15
15
|
className: `mx-cmn-dialog ${l}`,
|
|
16
|
-
children: /* @__PURE__ */
|
|
16
|
+
children: /* @__PURE__ */ I(W, {
|
|
17
17
|
"aria-labelledby": s,
|
|
18
18
|
maxWidth: "xs",
|
|
19
19
|
onClose: r,
|
|
20
20
|
open: e,
|
|
21
21
|
sx: [{
|
|
22
22
|
"& .MuiDialog-paperScrollPaper": { backgroundColor: "background.default" },
|
|
23
|
-
...
|
|
23
|
+
...P && { "& .MuiDialog-paper": { minWidth: "100%" } },
|
|
24
24
|
height: "100%"
|
|
25
25
|
}, ...a ? [a] : []],
|
|
26
|
-
...
|
|
26
|
+
...D,
|
|
27
27
|
disableRestoreFocus: !0,
|
|
28
|
-
onFocus:
|
|
29
|
-
ref:
|
|
30
|
-
slotProps: { transition: { onExited:
|
|
28
|
+
onFocus: A,
|
|
29
|
+
ref: F,
|
|
30
|
+
slotProps: { transition: { onExited: S } },
|
|
31
31
|
children: [
|
|
32
|
-
/* @__PURE__ */ o(
|
|
32
|
+
/* @__PURE__ */ o(C, {
|
|
33
33
|
ariaHidden: !0,
|
|
34
34
|
copy: {
|
|
35
|
-
title:
|
|
36
|
-
close_aria:
|
|
35
|
+
title: b,
|
|
36
|
+
close_aria: y
|
|
37
37
|
},
|
|
38
38
|
id: s,
|
|
39
39
|
onClose: r,
|
|
40
40
|
truncate: !0
|
|
41
41
|
}),
|
|
42
|
-
/* @__PURE__ */ o(
|
|
42
|
+
/* @__PURE__ */ o(_, {
|
|
43
43
|
sx: { lineHeight: 1.5 },
|
|
44
|
-
children:
|
|
44
|
+
children: x
|
|
45
45
|
}),
|
|
46
|
-
/* @__PURE__ */ o(
|
|
46
|
+
c && /* @__PURE__ */ o(v, {
|
|
47
47
|
isPrimaryDisabled: n,
|
|
48
|
-
onPrimaryAction:
|
|
49
|
-
onSecondaryAction:
|
|
50
|
-
primaryColor:
|
|
51
|
-
primaryText:
|
|
52
|
-
secondaryColor:
|
|
53
|
-
secondaryText:
|
|
48
|
+
onPrimaryAction: M,
|
|
49
|
+
onSecondaryAction: R,
|
|
50
|
+
primaryColor: d,
|
|
51
|
+
primaryText: u,
|
|
52
|
+
secondaryColor: f,
|
|
53
|
+
secondaryText: g
|
|
54
54
|
})
|
|
55
55
|
]
|
|
56
56
|
})
|
|
57
57
|
});
|
|
58
58
|
};
|
|
59
59
|
export {
|
|
60
|
-
|
|
60
|
+
G as default
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
//# sourceMappingURL=Dialog.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.es.js","names":[],"sources":["../../../../src/common/components/dialog/Dialog.tsx"],"sourcesContent":["import React from 'react'\n\nimport MuiDialog from '@mui/material/Dialog'\nimport { DialogProps as MuiDialogProps } from '@mui/material/Dialog'\nimport DialogContent from '@mui/material/DialogContent'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { DialogFooter, DialogHeader } from '@mxenabled/mxui'\nimport { useScreenSize } from '../../hooks'\nimport { useFocusReturn } from '../../hooks/useFocusReturn'\n\nexport type CopyObject = {\n close_aria?: string\n title: string\n}\n\ntype OwnedMuiProps =\n | 'disableRestoreFocus'\n | 'onFocus'\n | 'open'\n | 'slotProps'\n | 'slots'\n | 'TransitionComponent'\n | 'TransitionProps'\n\nexport interface DialogProps extends Omit<MuiDialogProps, OwnedMuiProps> {\n className?: string\n copy: CopyObject\n disablePrimaryButton?: boolean\n isOpen: boolean\n onClose: (event?: unknown, reason?: string) => void\n onPrimaryAction?: () => void\n onSecondaryAction?: () => void\n primaryColor?: 'primary' | 'inherit' | 'secondary' | 'success' | 'error' | 'info' | 'warning'\n primaryText?: string\n /** Where focus goes on close. Takes precedence over the element that opened the dialog. */\n returnFocusTo?: React.RefObject<HTMLElement | null>\n secondaryColor?: 'primary' | 'inherit' | 'secondary' | 'success' | 'error' | 'info' | 'warning'\n secondaryText?: string\n}\n\nconst Dialog: React.FC<React.PropsWithChildren<DialogProps>> = ({\n className,\n copy,\n disablePrimaryButton = false,\n isOpen = false,\n onClose,\n onPrimaryAction,\n primaryColor = 'primary',\n primaryText = 'Confirm',\n returnFocusTo,\n onSecondaryAction,\n secondaryColor = 'primary',\n secondaryText = 'Cancel',\n children,\n ...rest\n}) => {\n // Extract sx from rest to merge with Dialog's own styles instead of overwriting\n const { sx: restSx, ...restProps } = rest\n const title = copy?.title ?? ''\n const closeAria = copy?.close_aria ?? 'Close'\n\n // Label the dialog *by* its visible heading (WAI-ARIA APG) instead of a duplicate\n // aria-label, so screen readers announce the title once rather than name + heading.\n const titleId = React.useId()\n\n const { isSmallMobile } = useScreenSize()\n\n const { onExited, onFocus, rootRef } = useFocusReturn(isOpen, returnFocusTo)\n\n const handlePrimaryAction = () => {\n onPrimaryAction?.()\n onClose()\n }\n\n const handleSecondaryAction = () => {\n if (onSecondaryAction) {\n onSecondaryAction()\n }\n onClose()\n }\n\n return (\n <div className={`mx-cmn-dialog ${className}`}>\n <MuiDialog\n aria-labelledby={titleId}\n maxWidth=\"xs\"\n onClose={onClose}\n open={isOpen}\n sx={\n [\n {\n '& .MuiDialog-paperScrollPaper': { backgroundColor: 'background.default' },\n ...(isSmallMobile && { '& .MuiDialog-paper': { minWidth: '100%' } }),\n height: '100%',\n },\n ...(restSx ? [restSx] : []),\n ] as SxProps\n }\n {...restProps}\n disableRestoreFocus={true}\n onFocus={onFocus}\n ref={rootRef}\n slotProps={{ transition: { onExited } }}\n >\n <DialogHeader\n ariaHidden={true}\n copy={{ title, close_aria: closeAria }}\n id={titleId}\n onClose={onClose}\n truncate={true}\n />\n\n <DialogContent sx={{ lineHeight: 1.5 }}>{children}</DialogContent>\n\n <DialogFooter\n
|
|
1
|
+
{"version":3,"file":"Dialog.es.js","names":[],"sources":["../../../../src/common/components/dialog/Dialog.tsx"],"sourcesContent":["import React from 'react'\n\nimport MuiDialog from '@mui/material/Dialog'\nimport { DialogProps as MuiDialogProps } from '@mui/material/Dialog'\nimport DialogContent from '@mui/material/DialogContent'\nimport type { SxProps } from '@mui/material/styles'\n\nimport { DialogFooter, DialogHeader } from '@mxenabled/mxui'\nimport { useScreenSize } from '../../hooks'\nimport { useFocusReturn } from '../../hooks/useFocusReturn'\n\nexport type CopyObject = {\n close_aria?: string\n title: string\n}\n\ntype OwnedMuiProps =\n | 'disableRestoreFocus'\n | 'onFocus'\n | 'open'\n | 'slotProps'\n | 'slots'\n | 'TransitionComponent'\n | 'TransitionProps'\n\nexport interface DialogProps extends Omit<MuiDialogProps, OwnedMuiProps> {\n className?: string\n copy: CopyObject\n disablePrimaryButton?: boolean\n /** Render the footer action buttons. Default true; content-only dialogs (e.g. the insights survey modal) pass false. */\n showActions?: boolean\n isOpen: boolean\n onClose: (event?: unknown, reason?: string) => void\n onPrimaryAction?: () => void\n onSecondaryAction?: () => void\n primaryColor?: 'primary' | 'inherit' | 'secondary' | 'success' | 'error' | 'info' | 'warning'\n primaryText?: string\n /** Where focus goes on close. Takes precedence over the element that opened the dialog. */\n returnFocusTo?: React.RefObject<HTMLElement | null>\n secondaryColor?: 'primary' | 'inherit' | 'secondary' | 'success' | 'error' | 'info' | 'warning'\n secondaryText?: string\n}\n\nconst Dialog: React.FC<React.PropsWithChildren<DialogProps>> = ({\n className,\n copy,\n disablePrimaryButton = false,\n showActions = true,\n isOpen = false,\n onClose,\n onPrimaryAction,\n primaryColor = 'primary',\n primaryText = 'Confirm',\n returnFocusTo,\n onSecondaryAction,\n secondaryColor = 'primary',\n secondaryText = 'Cancel',\n children,\n ...rest\n}) => {\n // Extract sx from rest to merge with Dialog's own styles instead of overwriting\n const { sx: restSx, ...restProps } = rest\n const title = copy?.title ?? ''\n const closeAria = copy?.close_aria ?? 'Close'\n\n // Label the dialog *by* its visible heading (WAI-ARIA APG) instead of a duplicate\n // aria-label, so screen readers announce the title once rather than name + heading.\n const titleId = React.useId()\n\n const { isSmallMobile } = useScreenSize()\n\n const { onExited, onFocus, rootRef } = useFocusReturn(isOpen, returnFocusTo)\n\n const handlePrimaryAction = () => {\n onPrimaryAction?.()\n onClose()\n }\n\n const handleSecondaryAction = () => {\n if (onSecondaryAction) {\n onSecondaryAction()\n }\n onClose()\n }\n\n return (\n <div className={`mx-cmn-dialog ${className}`}>\n <MuiDialog\n aria-labelledby={titleId}\n maxWidth=\"xs\"\n onClose={onClose}\n open={isOpen}\n sx={\n [\n {\n '& .MuiDialog-paperScrollPaper': { backgroundColor: 'background.default' },\n ...(isSmallMobile && { '& .MuiDialog-paper': { minWidth: '100%' } }),\n height: '100%',\n },\n ...(restSx ? [restSx] : []),\n ] as SxProps\n }\n {...restProps}\n disableRestoreFocus={true}\n onFocus={onFocus}\n ref={rootRef}\n slotProps={{ transition: { onExited } }}\n >\n <DialogHeader\n ariaHidden={true}\n copy={{ title, close_aria: closeAria }}\n id={titleId}\n onClose={onClose}\n truncate={true}\n />\n\n <DialogContent sx={{ lineHeight: 1.5 }}>{children}</DialogContent>\n\n {showActions && (\n <DialogFooter\n isPrimaryDisabled={disablePrimaryButton}\n onPrimaryAction={handlePrimaryAction}\n onSecondaryAction={handleSecondaryAction}\n primaryColor={primaryColor}\n primaryText={primaryText}\n secondaryColor={secondaryColor}\n secondaryText={secondaryText}\n />\n )}\n </MuiDialog>\n </div>\n )\n}\n\nexport default Dialog\n"],"mappings":";;;;;;;AA2CA,IAAM,IAAA,CAA0D,EAC9D,WAAA,GACA,MAAA,GACA,sBAAA,IAAuB,IACvB,aAAA,IAAc,IACd,QAAA,IAAS,IACT,SAAA,GACA,iBAAA,GACA,cAAA,IAAe,WACf,aAAA,IAAc,WACd,eAAA,GACA,mBAAA,GACA,gBAAA,IAAiB,WACjB,eAAA,IAAgB,UAChB,UAAA,GACA,GAAG,EAAA,MACC;AAEJ,QAAM,EAAE,IAAI,GAAQ,GAAG,EAAA,IAAc,GAC/B,IAAQ,GAAM,SAAS,IACvB,IAAY,GAAM,cAAc,SAIhC,IAAU,EAAM,MAAM,GAEtB,EAAE,eAAA,EAAA,IAAkB,EAAc,GAElC,EAAE,UAAA,GAAU,SAAA,GAAS,SAAA,EAAA,IAAY,EAAe,GAAQ,CAAa,GAErE,IAAA,MAA4B;AAChC,IAAA,IAAkB,GAClB,EAAQ;AAAA,EACV,GAEM,IAAA,MAA8B;AAClC,IAAI,KACF,EAAkB,GAEpB,EAAQ;AAAA,EACV;AAEA,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAW,iBAAiB,CAAA;AAAA,IAC/B,UAAA,gBAAA,EAAC,GAAD;AAAA,MACE,mBAAiB;AAAA,MACjB,UAAS;AAAA,MACA,SAAA;AAAA,MACT,MAAM;AAAA,MACN,IACE,CACE;AAAA,QACE,iCAAiC,EAAE,iBAAiB,qBAAqB;AAAA,QACzE,GAAI,KAAiB,EAAE,sBAAsB,EAAE,UAAU,OAAO,EAAE;AAAA,QAClE,QAAQ;AAAA,MACV,GACA,GAAI,IAAS,CAAC,CAAM,IAAI,CAAC,CAC3B;AAAA,MAEF,GAAI;AAAA,MACJ,qBAAqB;AAAA,MACZ,SAAA;AAAA,MACT,KAAK;AAAA,MACL,WAAW,EAAE,YAAY,EAAE,UAAA,EAAS,EAAE;AAAA,MAnBxC,UAAA;AAAA,QAqBE,gBAAA,EAAC,GAAD;AAAA,UACE,YAAY;AAAA,UACZ,MAAM;AAAA,YAAE,OAAA;AAAA,YAAO,YAAY;AAAA,UAAU;AAAA,UACrC,IAAI;AAAA,UACK,SAAA;AAAA,UACT,UAAU;AAAA,QACX,CAAA;AAAA,QAED,gBAAA,EAAC,GAAD;AAAA,UAAe,IAAI,EAAE,YAAY,IAAI;AAAA,UAAI,UAAA;AAAA,QAAwB,CAAA;AAAA,QAEhE,KACC,gBAAA,EAAC,GAAD;AAAA,UACE,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,mBAAmB;AAAA,UACL,cAAA;AAAA,UACD,aAAA;AAAA,UACG,gBAAA;AAAA,UACD,eAAA;AAAA,QAChB,CAAA;AAAA,MAEM;AAAA;EACR,CAAA;AAET"}
|
|
@@ -10,6 +10,7 @@ export { default as MicroWidgetContainer } from './MicroWidgetContainer';
|
|
|
10
10
|
export { default as MiniWidgetContainer } from './MiniWidgetContainer';
|
|
11
11
|
export { WidgetContainer } from './WidgetContainer';
|
|
12
12
|
export { default as ConnectDrawer } from './ConnectDrawer';
|
|
13
|
+
export { default as ConnectWidgetPanel, type ConnectWidgetPanelProps } from './ConnectWidgetPanel';
|
|
13
14
|
export { default as CurrencyDialog } from './CurrencyDialog';
|
|
14
15
|
export { default as CurrencyInput } from './CurrencyInput';
|
|
15
16
|
export { default as Loader } from './Loader';
|
package/dist/common/index.es.js
CHANGED
|
@@ -4,9 +4,9 @@ import a from "./components/charts/StatusBar.es.js";
|
|
|
4
4
|
import p from "./components/charts/Donut.es.js";
|
|
5
5
|
import u from "./hooks/useAccountDisplayName.es.js";
|
|
6
6
|
import { useCombineEvents as C, useCombinePageviews as S } from "./hooks/useCombineEvents.es.js";
|
|
7
|
-
import { GlobalDataContext as c, GlobalDataProvider as
|
|
7
|
+
import { GlobalDataContext as c, GlobalDataProvider as d } from "./context/GlobalDataProvider.es.js";
|
|
8
8
|
import { WidgetContainerContext as E, WidgetContainerProvider as D } from "./context/WidgetContainerProvider.es.js";
|
|
9
|
-
import { useAccountStore as
|
|
9
|
+
import { useAccountStore as I, useActionContext as N, useAppConfig as P, useBudgetsStore as y, useCashflowStore as A, useCategoryStore as b, useDebtStore as O, useError as W, useEvent as G, useFinstrongStore as L, useGlobalCopyStore as R, useGlobalStore as U, useGlobalUiStore as v, useGoalStore as B, useHelpStore as h, useHoldingStore as w, useInsightsV2Store as x, useLoad as M, useMerchantStore as Y, useNetWorthStore as H, useNotificationStore as F, usePageView as z, useRecurringTransactionsStore as V, useSettingsStore as Z, useTransactionStore as k, useTrendsStore as q, useUserStore as K, useWidgetContainerProvider as j } from "./context/hooks.es.js";
|
|
10
10
|
import { useInsightsEnabled as Q } from "./hooks/useInsightsEnabled.es.js";
|
|
11
11
|
import { useScreenSize as $ } from "./hooks/useScreenSize.es.js";
|
|
12
12
|
import ro from "./hooks/usePrevious.es.js";
|
|
@@ -16,10 +16,10 @@ import { useWidgetHeaderStyles as lo } from "./hooks/useWidgetHeaderStyles.es.js
|
|
|
16
16
|
import { useWidgetLoadTimer as So } from "./hooks/useWidgetLoadTimer.es.js";
|
|
17
17
|
import co from "./components/dialog/Dialog.es.js";
|
|
18
18
|
import Eo from "./components/drawer/Drawer.es.js";
|
|
19
|
-
import
|
|
19
|
+
import _o from "./components/daterangeselector/DateRangeSelector.es.js";
|
|
20
20
|
import { ANALYTICS_EVENTS as No } from "./constants/Analytics.es.js";
|
|
21
|
-
import { CONNECTIONS_WIDGET_ID as
|
|
22
|
-
import { GlobalStore as
|
|
21
|
+
import { CONNECTIONS_WIDGET_ID as yo, CONNECT_WIDGET_ID as Ao, MemberConnectionStatus as bo } from "./constants/Connect.es.js";
|
|
22
|
+
import { GlobalStore as Wo } from "../core/stores/GlobalStore.es.js";
|
|
23
23
|
import { INCOME_ACCOUNT_TYPES as Lo, PAYMENT_ACCOUNT_TYPES as Ro, SPENDING_ACCOUNT_TYPES as Uo } from "./constants/Account.es.js";
|
|
24
24
|
import { RECURRENCE_COPY as Bo } from "./constants/ScheduledPayment.es.js";
|
|
25
25
|
import { LOADING_STATUS as wo } from "./constants/SpendingPlan.es.js";
|
|
@@ -34,108 +34,110 @@ import rr from "./components/MiniWidgetContainer.es.js";
|
|
|
34
34
|
import { GlobalAccountFilter as er } from "./components/GlobalAccountFilter.es.js";
|
|
35
35
|
import mr from "./components/Loader.es.js";
|
|
36
36
|
import { WidgetContainer as ar } from "./components/WidgetContainer.es.js";
|
|
37
|
-
import pr from "./components/
|
|
38
|
-
import ur from "./components/
|
|
39
|
-
import Cr from "./components/
|
|
40
|
-
import gr from "./components/
|
|
41
|
-
import
|
|
42
|
-
import Er from "./components/
|
|
43
|
-
import
|
|
44
|
-
import Nr from "./components/
|
|
45
|
-
import
|
|
46
|
-
import
|
|
47
|
-
import
|
|
48
|
-
import
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
import {
|
|
57
|
-
import {
|
|
58
|
-
import {
|
|
37
|
+
import pr from "./components/ConnectWidgetPanel.es.js";
|
|
38
|
+
import ur from "./components/ConnectDrawer.es.js";
|
|
39
|
+
import Cr from "./components/CurrencyDialog.es.js";
|
|
40
|
+
import gr from "./components/CurrencyInput.es.js";
|
|
41
|
+
import dr from "./components/ResponsiveButton.es.js";
|
|
42
|
+
import Er from "./components/SearchBox.es.js";
|
|
43
|
+
import _r from "./components/SelectionBox.es.js";
|
|
44
|
+
import Nr from "./components/TabContentContainer.es.js";
|
|
45
|
+
import yr from "./components/IconBacking.es.js";
|
|
46
|
+
import br from "./components/DataRow.es.js";
|
|
47
|
+
import Wr from "./components/ZeroState.es.js";
|
|
48
|
+
import Lr from "./components/InformationTooltip.es.js";
|
|
49
|
+
import { ConnectCard as Ur } from "./components/ConnectCard.es.js";
|
|
50
|
+
import { CurrencyText as Br } from "./components/CurrencyText.es.js";
|
|
51
|
+
import { EmptyState as wr } from "./components/EmptyState.es.js";
|
|
52
|
+
import { ListItemAction as Mr } from "./components/ListItemAction.es.js";
|
|
53
|
+
import { ListItemRow as Hr } from "./components/ListItemRow.es.js";
|
|
54
|
+
import { ListItemWrapper as zr } from "./components/ListItemWrapper.es.js";
|
|
55
|
+
import { Select as Zr } from "./components/Select.es.js";
|
|
56
|
+
import { ToggleButtonListItem as qr } from "./components/listitems/ToggleButtonListItem.es.js";
|
|
57
|
+
import { ToggleListItem as jr } from "./components/listitems/ToggleListItem.es.js";
|
|
58
|
+
import { analyticsSession as Qr } from "./utils/Analytics.es.js";
|
|
59
|
+
import { getClientComponentOverrides as $r, getClientCustomizations as ot, getClientPaletteOptions as rt, getClientTheme as tt } from "./utils/Theme.es.js";
|
|
59
60
|
export {
|
|
60
61
|
No as ANALYTICS_EVENTS,
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
yo as CONNECTIONS_WIDGET_ID,
|
|
63
|
+
Ao as CONNECT_WIDGET_ID,
|
|
63
64
|
i as Calendar,
|
|
64
65
|
m as CalendarSelectionTypes,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
Cr as
|
|
69
|
-
|
|
66
|
+
Ur as ConnectCard,
|
|
67
|
+
ur as ConnectDrawer,
|
|
68
|
+
pr as ConnectWidgetPanel,
|
|
69
|
+
Cr as CurrencyDialog,
|
|
70
|
+
gr as CurrencyInput,
|
|
71
|
+
Br as CurrencyText,
|
|
70
72
|
Mo as DEFAULT_DONUT_SIZE,
|
|
71
73
|
Yo as DEFAULT_STROKE_WIDTH,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
br as DataRow,
|
|
75
|
+
_o as DateRangeSelector,
|
|
74
76
|
co as Dialog,
|
|
75
77
|
p as Donut,
|
|
76
78
|
Eo as Drawer,
|
|
77
|
-
|
|
79
|
+
wr as EmptyState,
|
|
78
80
|
Qo as Error,
|
|
79
81
|
jo as ErrorBoundary,
|
|
80
82
|
er as GlobalAccountFilter,
|
|
81
83
|
c as GlobalDataContext,
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
d as GlobalDataProvider,
|
|
85
|
+
Wo as GlobalStore,
|
|
84
86
|
Lo as INCOME_ACCOUNT_TYPES,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
yr as IconBacking,
|
|
88
|
+
Lr as InformationTooltip,
|
|
87
89
|
wo as LOADING_STATUS,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
90
|
+
Mr as ListItemAction,
|
|
91
|
+
Hr as ListItemRow,
|
|
92
|
+
zr as ListItemWrapper,
|
|
91
93
|
mr as Loader,
|
|
92
|
-
|
|
94
|
+
bo as MemberConnectionStatus,
|
|
93
95
|
$o as MicroWidgetContainer,
|
|
94
96
|
rr as MiniWidgetContainer,
|
|
95
97
|
Zo as MultiSegmentDonut,
|
|
96
98
|
Ro as PAYMENT_ACCOUNT_TYPES,
|
|
97
99
|
Bo as RECURRENCE_COPY,
|
|
98
|
-
|
|
100
|
+
dr as ResponsiveButton,
|
|
99
101
|
Uo as SPENDING_ACCOUNT_TYPES,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
Er as SearchBox,
|
|
103
|
+
Zr as Select,
|
|
104
|
+
_r as SelectionBox,
|
|
103
105
|
qo as SingleSegmentDonut,
|
|
104
106
|
Fo as Sizes,
|
|
105
107
|
a as StatusBar,
|
|
106
108
|
zo as TOUCH_TARGET,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
Nr as TabContentContainer,
|
|
110
|
+
qr as ToggleButtonListItem,
|
|
111
|
+
jr as ToggleListItem,
|
|
110
112
|
ar as WidgetContainer,
|
|
111
113
|
E as WidgetContainerContext,
|
|
112
114
|
D as WidgetContainerProvider,
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
Wr as ZeroState,
|
|
116
|
+
Qr as analyticsSession,
|
|
115
117
|
r as buildDynamicCopy,
|
|
116
118
|
t as buildPluralCopy,
|
|
117
119
|
eo as formatCurrency,
|
|
118
120
|
io as formatOrdinal,
|
|
119
121
|
mo as formatPercentage,
|
|
120
122
|
no as generateEqualIntervals,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
$r as getClientComponentOverrides,
|
|
124
|
+
ot as getClientCustomizations,
|
|
125
|
+
rt as getClientPaletteOptions,
|
|
126
|
+
tt as getClientTheme,
|
|
125
127
|
ao as getCurrencyCodes,
|
|
126
128
|
so as getPluralRules,
|
|
127
129
|
u as useAccountDisplayName,
|
|
128
|
-
|
|
130
|
+
I as useAccountStore,
|
|
129
131
|
N as useActionContext,
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
P as useAppConfig,
|
|
133
|
+
y as useBudgetsStore,
|
|
134
|
+
A as useCashflowStore,
|
|
135
|
+
b as useCategoryStore,
|
|
134
136
|
C as useCombineEvents,
|
|
135
137
|
S as useCombinePageviews,
|
|
136
138
|
O as useDebtStore,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
W as useError,
|
|
140
|
+
G as useEvent,
|
|
139
141
|
L as useFinstrongStore,
|
|
140
142
|
R as useGlobalCopyStore,
|
|
141
143
|
U as useGlobalStore,
|
|
@@ -132,6 +132,87 @@ export interface FeedbackCopy {
|
|
|
132
132
|
/** ARIA label for the close button. */
|
|
133
133
|
close_aria: string;
|
|
134
134
|
}
|
|
135
|
+
/** Confirmation survey drilldown (`survey_modal_block`), e.g. "Does this look right?". */
|
|
136
|
+
export interface SurveyModalCopy {
|
|
137
|
+
/** Dialog title, e.g. "Does this look right?". */
|
|
138
|
+
title: string;
|
|
139
|
+
/** Overline above the positive row, e.g. "Yes,". */
|
|
140
|
+
yes_overline: string;
|
|
141
|
+
/** Positive row label, e.g. "This looks correct.". */
|
|
142
|
+
yes_label: string;
|
|
143
|
+
/** Overline above the negative row, e.g. "No,". */
|
|
144
|
+
no_overline: string;
|
|
145
|
+
/** Negative row label, e.g. "This looks wrong.". */
|
|
146
|
+
no_label: string;
|
|
147
|
+
/** Primary (Submit) button label. */
|
|
148
|
+
submit: string;
|
|
149
|
+
/** ARIA label for the dialog close button. */
|
|
150
|
+
close_aria: string;
|
|
151
|
+
/** Reasons dialog title (negative path), e.g. "This looks wrong". */
|
|
152
|
+
reasons_title: string;
|
|
153
|
+
/** Reasons dialog options; the last one reveals the detail text field. */
|
|
154
|
+
reason_options: DynamicKeyValue;
|
|
155
|
+
/** Reasons dialog secondary (Back) button label. */
|
|
156
|
+
back: string;
|
|
157
|
+
/** Helper text under the reasons detail field. */
|
|
158
|
+
character_limit: string;
|
|
159
|
+
/** Success snackbar message. */
|
|
160
|
+
success_message: string;
|
|
161
|
+
/** Error snackbar message. */
|
|
162
|
+
error_message: string;
|
|
163
|
+
/** Error snackbar retry action label. */
|
|
164
|
+
try_again: string;
|
|
165
|
+
/** ARIA label for the snackbar close button. */
|
|
166
|
+
toast_close_aria: string;
|
|
167
|
+
}
|
|
168
|
+
/** Connection-details education drilldown (`connection_detail_block`). */
|
|
169
|
+
export interface ConnectionDetailsCopy {
|
|
170
|
+
aria_label_thumbs_down: string;
|
|
171
|
+
aria_label_thumbs_up: string;
|
|
172
|
+
/** Bullet list under the header. */
|
|
173
|
+
benefits_list: DynamicKeyValue;
|
|
174
|
+
/** Drawer title (used by the registry entry's `title`). */
|
|
175
|
+
connection_details_drawer_title: string;
|
|
176
|
+
description: string;
|
|
177
|
+
/** "Was this helpful?" footer label. */
|
|
178
|
+
footer_title: string;
|
|
179
|
+
header_text: string;
|
|
180
|
+
shared_info_description: string;
|
|
181
|
+
shared_info_header_text: string;
|
|
182
|
+
/** Shared-info cards, numeric-keyed like other list copy. */
|
|
183
|
+
shared_info_list: {
|
|
184
|
+
[key: string]: {
|
|
185
|
+
content: string;
|
|
186
|
+
icon_name: string;
|
|
187
|
+
title: string;
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/** CTA feedback drilldown (`feedback_modal_block`): survey dialog + success snackbar. */
|
|
192
|
+
export interface FeedbackModalCopy {
|
|
193
|
+
/** Dialog title, e.g. "Can you tell us why?". */
|
|
194
|
+
title: string;
|
|
195
|
+
/** Paragraph under the title; interpolates `_1{account_name}`. */
|
|
196
|
+
description: string;
|
|
197
|
+
/** Survey reasons; the last option reveals the detail text field. */
|
|
198
|
+
options: DynamicKeyValue;
|
|
199
|
+
/** Primary (Submit) button label. */
|
|
200
|
+
submit: string;
|
|
201
|
+
/** Secondary (No thanks) button label. */
|
|
202
|
+
no_thanks: string;
|
|
203
|
+
/** ARIA label for the dialog close button. */
|
|
204
|
+
close_aria: string;
|
|
205
|
+
/** Success snackbar message. */
|
|
206
|
+
success_message: string;
|
|
207
|
+
/** Error snackbar message. */
|
|
208
|
+
error_message: string;
|
|
209
|
+
/** Error snackbar retry action label. */
|
|
210
|
+
try_again: string;
|
|
211
|
+
/** ARIA label for the snackbar close button. */
|
|
212
|
+
toast_close_aria: string;
|
|
213
|
+
/** Helper text under the detail field. */
|
|
214
|
+
character_limit: string;
|
|
215
|
+
}
|
|
135
216
|
export interface RemainingCashCopy {
|
|
136
217
|
title: string;
|
|
137
218
|
remaining_until_payday: string;
|
|
@@ -175,6 +256,12 @@ export interface InsightsFeedCopy {
|
|
|
175
256
|
hidden_confirmation: HiddenConfirmationCopy;
|
|
176
257
|
hide_feedback: HideFeedbackCopy;
|
|
177
258
|
feedback: FeedbackCopy;
|
|
259
|
+
/** Optional: every caller already null-guards (`copyStore.insights_feed?.feedback_modal`). */
|
|
260
|
+
feedback_modal?: FeedbackModalCopy;
|
|
261
|
+
/** Optional: every caller already null-guards (`copyStore.insights_feed?.connection_details`). */
|
|
262
|
+
connection_details?: ConnectionDetailsCopy;
|
|
263
|
+
/** Optional: every caller already null-guards (`copyStore.insights_feed?.survey_modal`). */
|
|
264
|
+
survey_modal?: SurveyModalCopy;
|
|
178
265
|
feedback_bar: FeedbackBarCopy;
|
|
179
266
|
dismiss: DismissInsightCopy;
|
|
180
267
|
/** Optional until the localized-content service ships the namespace. */
|