@mx-cartographer/experiences 9.1.3 → 9.1.4-alpha.al1
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 +0 -6
- package/dist/{AccountDetailsDrawer-Cq4kiiKD.mjs → AccountDetailsDrawer-Da1-Y86z.mjs} +10 -10
- package/dist/{AccountDetailsDrawer-Cq4kiiKD.mjs.map → AccountDetailsDrawer-Da1-Y86z.mjs.map} +1 -1
- package/dist/{AccountDetailsHeader-BliEZhz7.mjs → AccountDetailsHeader-CE0HYbRA.mjs} +4 -4
- package/dist/{AccountDetailsHeader-BliEZhz7.mjs.map → AccountDetailsHeader-CE0HYbRA.mjs.map} +1 -1
- package/dist/{Analytics-CkYXKvco.mjs → Analytics-BJDUP2qI.mjs} +2 -2
- package/dist/{Analytics-CkYXKvco.mjs.map → Analytics-BJDUP2qI.mjs.map} +1 -1
- package/dist/{CategorySelectorDrawer-NJsFsKP1.mjs → CategorySelectorDrawer-BM5mKt7P.mjs} +2 -2
- package/dist/{CategorySelectorDrawer-NJsFsKP1.mjs.map → CategorySelectorDrawer-BM5mKt7P.mjs.map} +1 -1
- package/dist/{Connect-BH0Pt6zc.mjs → Connect-JoOkCXSZ.mjs} +2 -2
- package/dist/{Connect-BH0Pt6zc.mjs.map → Connect-JoOkCXSZ.mjs.map} +1 -1
- package/dist/{ConnectCard-D7uxoH5Y.mjs → ConnectCard-DnZHCv3m.mjs} +2 -2
- package/dist/{ConnectCard-D7uxoH5Y.mjs.map → ConnectCard-DnZHCv3m.mjs.map} +1 -1
- package/dist/{ConnectDrawer-CW4LA3H3.mjs → ConnectDrawer-Btol_U7o.mjs} +3 -3
- package/dist/{ConnectDrawer-CW4LA3H3.mjs.map → ConnectDrawer-Btol_U7o.mjs.map} +1 -1
- package/dist/{ConnectionsDrawer-CZU9ku-k.mjs → ConnectionsDrawer-DGv6aJ6x.mjs} +3 -3
- package/dist/{ConnectionsDrawer-CZU9ku-k.mjs.map → ConnectionsDrawer-DGv6aJ6x.mjs.map} +1 -1
- package/dist/{CurrencyInput-DaGEQaLW.mjs → CurrencyInput-CxAsTGg2.mjs} +2 -2
- package/dist/{CurrencyInput-DaGEQaLW.mjs.map → CurrencyInput-CxAsTGg2.mjs.map} +1 -1
- package/dist/{EmbeddedCard-DCOQnTz-.mjs → EmbeddedCard-Dwj1CkBK.mjs} +3 -3
- package/dist/{EmbeddedCard-DCOQnTz-.mjs.map → EmbeddedCard-Dwj1CkBK.mjs.map} +1 -1
- package/dist/{Error-Dtw6yxkf.mjs → Error-BMVsnvtd.mjs} +2 -2
- package/dist/{Error-Dtw6yxkf.mjs.map → Error-BMVsnvtd.mjs.map} +1 -1
- package/dist/ErrorBoundary-C7BlHx04.mjs +27 -0
- package/dist/ErrorBoundary-C7BlHx04.mjs.map +1 -0
- package/dist/{ExportCsvAction-C-IisDcv.mjs → ExportCsvAction-B23U4xj8.mjs} +3 -3
- package/dist/{ExportCsvAction-C-IisDcv.mjs.map → ExportCsvAction-B23U4xj8.mjs.map} +1 -1
- package/dist/{GlobalAccountFilter-BhzR5Vb1.mjs → GlobalAccountFilter-1NlROwU8.mjs} +2 -2
- package/dist/{GlobalAccountFilter-BhzR5Vb1.mjs.map → GlobalAccountFilter-1NlROwU8.mjs.map} +1 -1
- package/dist/GlobalCopyApi-Tz10hezK.mjs +130 -0
- package/dist/GlobalCopyApi-Tz10hezK.mjs.map +1 -0
- package/dist/{Help-zVZdcmlk.mjs → Help-BC5OU0yX.mjs} +145 -145
- package/dist/Help-BC5OU0yX.mjs.map +1 -0
- package/dist/{LineChart-CUfiH86G.mjs → LineChart-YCIQN3ho.mjs} +2 -2
- package/dist/{LineChart-CUfiH86G.mjs.map → LineChart-YCIQN3ho.mjs.map} +1 -1
- package/dist/{ListItemAction-BqUCLj_w.mjs → ListItemAction-D-XYTjj4.mjs} +2 -2
- package/dist/{ListItemAction-BqUCLj_w.mjs.map → ListItemAction-D-XYTjj4.mjs.map} +1 -1
- package/dist/{ListItemWrapper-DRse79Iu.mjs → ListItemWrapper-XiustNlS.mjs} +2 -2
- package/dist/{ListItemWrapper-DRse79Iu.mjs.map → ListItemWrapper-XiustNlS.mjs.map} +1 -1
- package/dist/{ManageIncome-B_8i71mE.mjs → ManageIncome-CWr2Eij2.mjs} +32 -32
- package/dist/{ManageIncome-B_8i71mE.mjs.map → ManageIncome-CWr2Eij2.mjs.map} +1 -1
- package/dist/{MicroWidgetContainer-B2NnKBgW.mjs → MicroWidgetContainer-u1hE4nVI.mjs} +2 -2
- package/dist/{MicroWidgetContainer-B2NnKBgW.mjs.map → MicroWidgetContainer-u1hE4nVI.mjs.map} +1 -1
- package/dist/{MiniWidgetContainer-Bmv_WeUd.mjs → MiniWidgetContainer-DFUhI7Ok.mjs} +2 -2
- package/dist/{MiniWidgetContainer-Bmv_WeUd.mjs.map → MiniWidgetContainer-DFUhI7Ok.mjs.map} +1 -1
- package/dist/{NotificationSettings-CW7okUrk.mjs → NotificationSettings-1OxkZpn7.mjs} +33 -33
- package/dist/{NotificationSettings-CW7okUrk.mjs.map → NotificationSettings-1OxkZpn7.mjs.map} +1 -1
- package/dist/{OriginalBalanceAction-YrvxBYAl.mjs → OriginalBalanceAction-BmuKAlKl.mjs} +4 -4
- package/dist/{OriginalBalanceAction-YrvxBYAl.mjs.map → OriginalBalanceAction-BmuKAlKl.mjs.map} +1 -1
- package/dist/{RecurringSettings-hs0YUp83.mjs → RecurringSettings-CMspUOGC.mjs} +3 -3
- package/dist/{RecurringSettings-hs0YUp83.mjs.map → RecurringSettings-CMspUOGC.mjs.map} +1 -1
- package/dist/{SpendingLegend-CxvNOg3c.mjs → SpendingLegend-CqLSaAYE.mjs} +2 -2
- package/dist/{SpendingLegend-CxvNOg3c.mjs.map → SpendingLegend-CqLSaAYE.mjs.map} +1 -1
- package/dist/{TransactionDetails-DT-MQqOB.mjs → TransactionDetails-DsWYPMCj.mjs} +5 -5
- package/dist/{TransactionDetails-DT-MQqOB.mjs.map → TransactionDetails-DsWYPMCj.mjs.map} +1 -1
- package/dist/{UserStore-E5WvBXaY.mjs → UserStore-CL_kIDzt.mjs} +367 -317
- package/dist/UserStore-CL_kIDzt.mjs.map +1 -0
- package/dist/{ViewMoreMicroCard-fnwE0hqd.mjs → ViewMoreMicroCard-CJckyYda.mjs} +4 -4
- package/dist/{ViewMoreMicroCard-fnwE0hqd.mjs.map → ViewMoreMicroCard-CJckyYda.mjs.map} +1 -1
- package/dist/{WidgetContainer-CjdCY4sj.mjs → WidgetContainer-C4PFkL6g.mjs} +3 -3
- package/dist/{WidgetContainer-CjdCY4sj.mjs.map → WidgetContainer-C4PFkL6g.mjs.map} +1 -1
- package/dist/accounts/index.es.js +11 -11
- package/dist/analytics/index.es.js +2 -2
- package/dist/budgets/index.es.js +10 -10
- package/dist/cashflow/index.es.js +70 -70
- package/dist/categories/index.es.js +1 -1
- package/dist/common/components/ErrorBoundary.d.ts +2 -0
- package/dist/common/components/ErrorTestButtons.d.ts +3 -0
- package/dist/common/components/index.d.ts +1 -0
- package/dist/common/context/GlobalDataProvider.d.ts +2 -1
- package/dist/common/context/hooks.d.ts +3 -0
- package/dist/common/context/index.d.ts +1 -1
- package/dist/common/index.es.js +252 -224
- package/dist/common/index.es.js.map +1 -1
- package/dist/core/api/AccountApi.d.ts +2 -2
- package/dist/core/api/AnalyticsApi.d.ts +2 -2
- package/dist/core/api/AppDataApi.d.ts +2 -2
- package/dist/core/api/BeatApi.d.ts +2 -2
- package/dist/core/api/BudgetsApi.d.ts +2 -2
- package/dist/core/api/CategoryApi.d.ts +2 -2
- package/dist/core/api/FinstrongApi.d.ts +2 -2
- package/dist/core/api/GlobalCopyApi.d.ts +2 -2
- package/dist/core/api/GoalApi.d.ts +2 -2
- package/dist/core/api/HelpApi.d.ts +2 -2
- package/dist/core/api/HoldingApi.d.ts +2 -2
- package/dist/core/api/MerchantApi.d.ts +2 -2
- package/dist/core/api/NotificationApi.d.ts +2 -2
- package/dist/core/api/RepeatingTransactionsApi.d.ts +2 -2
- package/dist/core/api/ScheduledPaymentsApi.d.ts +2 -2
- package/dist/core/api/SettingsApi.d.ts +2 -2
- package/dist/core/api/TransactionApi.d.ts +2 -2
- package/dist/core/api/UserApi.d.ts +2 -2
- package/dist/core/index.es.js +95 -95
- package/dist/core/index.es.js.map +1 -1
- package/dist/core/stores/GlobalStore.d.ts +4 -2
- package/dist/core/types/Handlers.d.ts +1 -0
- package/dist/core/types/index.d.ts +1 -1
- package/dist/core/utils/Fetch.d.ts +3 -2
- package/dist/dashboard/index.es.js +4 -4
- package/dist/debts/index.es.js +8 -8
- package/dist/finstrong/index.es.js +12 -12
- package/dist/goals/index.es.js +9 -9
- package/dist/help/index.es.js +4 -4
- package/dist/hooks-Chcgk3F2.mjs +83 -0
- package/dist/hooks-Chcgk3F2.mjs.map +1 -0
- package/dist/insights/index.es.js +4 -4
- package/dist/investments/index.es.js +4 -4
- package/dist/merchants/index.es.js +1 -1
- package/dist/microinsights/index.es.js +1 -1
- package/dist/networth/index.es.js +6 -6
- package/dist/notifications/index.es.js +8 -8
- package/dist/recurringtransactions/index.es.js +38 -38
- package/dist/settings/index.es.js +27 -27
- package/dist/spending/index.es.js +7 -7
- package/dist/transactions/index.es.js +11 -11
- package/dist/trends/index.es.js +12 -12
- package/dist/{useAccountDisplayName-BsiXA0qf.mjs → useAccountDisplayName-BC5i7pMh.mjs} +2 -2
- package/dist/{useAccountDisplayName-BsiXA0qf.mjs.map → useAccountDisplayName-BC5i7pMh.mjs.map} +1 -1
- package/dist/{useInsightsEnabled-D5Sdm0TJ.mjs → useInsightsEnabled-BpBk6YYj.mjs} +2 -2
- package/dist/{useInsightsEnabled-D5Sdm0TJ.mjs.map → useInsightsEnabled-BpBk6YYj.mjs.map} +1 -1
- package/dist/{useWidgetLoadTimer-B0tB-yzL.mjs → useWidgetLoadTimer-D0bW29qj.mjs} +2 -2
- package/dist/{useWidgetLoadTimer-B0tB-yzL.mjs.map → useWidgetLoadTimer-D0bW29qj.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/ErrorBoundary-CsdOcnJ9.mjs +0 -24
- package/dist/ErrorBoundary-CsdOcnJ9.mjs.map +0 -1
- package/dist/GlobalCopyApi-wcnDUzMV.mjs +0 -129
- package/dist/GlobalCopyApi-wcnDUzMV.mjs.map +0 -1
- package/dist/Help-zVZdcmlk.mjs.map +0 -1
- package/dist/UserStore-E5WvBXaY.mjs.map +0 -1
- package/dist/hooks-97sNJ_lf.mjs +0 -78
- package/dist/hooks-97sNJ_lf.mjs.map +0 -1
|
@@ -7,8 +7,8 @@ import R from "@mui/material/Tabs";
|
|
|
7
7
|
import d from "@mui/material/Divider";
|
|
8
8
|
import b from "@mui/material/List";
|
|
9
9
|
import T from "@mui/material/Stack";
|
|
10
|
-
import { R as C, A as S, a as E, M as v } from "./ManageIncome-
|
|
11
|
-
import { u as _, h as A, f } from "./hooks-
|
|
10
|
+
import { R as C, A as S, a as E, M as v } from "./ManageIncome-CWr2Eij2.mjs";
|
|
11
|
+
import { u as _, h as A, f } from "./hooks-Chcgk3F2.mjs";
|
|
12
12
|
import { R as y, F as N } from "./RecurringTransactionsUtil-CHWmqvW5.mjs";
|
|
13
13
|
import { A as m } from "./Analytics-D-jdcL72.mjs";
|
|
14
14
|
const I = h(() => {
|
|
@@ -86,4 +86,4 @@ export {
|
|
|
86
86
|
I as M,
|
|
87
87
|
X as R
|
|
88
88
|
};
|
|
89
|
-
//# sourceMappingURL=RecurringSettings-
|
|
89
|
+
//# sourceMappingURL=RecurringSettings-CMspUOGC.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecurringSettings-
|
|
1
|
+
{"version":3,"file":"RecurringSettings-CMspUOGC.mjs","sources":["../src/recurringtransactions/components/shared/recurringsettings/ManageExpenses.tsx","../src/recurringtransactions/components/shared/RecurringSettings.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../../common'\nimport { type RepeatingTransaction, Frequency, RepeatingType } from '../../../../core'\n\nimport { RecurringRow } from './RecurringRow'\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\nimport { RecurringSettingsZeroState } from './RecurringSettingsZeroState'\n\nexport const ManageExpenses = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const { detailedRepeatingTransactions } = useRecurringTransactionsStore()\n const { onEvent } = useEvent()\n\n const onClick = (repeatingTransaction: RepeatingTransaction) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_EXPENSE, {\n repeating_transaction_guid: repeatingTransaction.guid,\n })\n }\n\n const onAdd = () => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_EXPENSE)\n }\n\n const filteredTransactions = detailedRepeatingTransactions.filter(\n (rt) =>\n rt.repeating_transaction_type !== RepeatingType.Income &&\n (rt.transactions.length > 0 || rt.recurrence_type === Frequency.EveryYear),\n )\n\n return (\n <>\n {filteredTransactions.length !== 0 ? (\n <Stack\n sx={{\n height: 'calc(100vh - 109px)',\n maxHeight: 'calc(100vh - 109px)',\n }}\n >\n <Box sx={{ flex: 1, overflow: 'auto' }}>\n <List sx={{ bgcolor: 'background.paper' }}>\n {filteredTransactions.map((rt, index) => (\n <React.Fragment key={rt.guid}>\n <RecurringRow onClick={onClick} repeatingTransaction={rt} />\n <Divider\n variant={index < filteredTransactions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n </List>\n </Box>\n <Box>\n <Divider />\n <Box\n sx={{\n alignContent: 'center',\n bgcolor: 'background.paper',\n justifyContent: 'flex-end',\n px: 24,\n py: 12,\n textAlign: 'right',\n }}\n >\n <AddRecurringTransaction label={copy.add_expense} onAddRecurringTransaction={onAdd} />\n </Box>\n </Box>\n </Stack>\n ) : (\n <RecurringSettingsZeroState zeroStateFor=\"expenses\" />\n )}\n </>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { ManageExpenses } from './recurringsettings/ManageExpenses'\nimport { ManageIncome } from './recurringsettings/ManageIncome'\n\nimport { useEvent, useGlobalCopyStore } from '../../../common'\n\ninterface RecurringSettingsProps {\n defaultSelectedTab?: number\n}\n\nexport const RecurringSettings = observer(({ defaultSelectedTab = 0 }: RecurringSettingsProps) => {\n const [selectedTab, setSelectedTab] = React.useState(defaultSelectedTab)\n const { onEvent } = useEvent()\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n onEvent(\n newValue === 0\n ? 'recurring_transactions_widget_manage_expenses'\n : 'recurring_transactions_widget_edit_income',\n )\n }\n\n return (\n <Box bgcolor=\"background.default\" height=\"100%\">\n <Tabs\n onChange={handleTabChange}\n sx={{ bgcolor: 'background.paper', mb: 0 }}\n value={selectedTab}\n variant=\"fullWidth\"\n >\n <Tab label={recurringCopy.expenses} />\n <Tab label={recurringCopy.income} />\n </Tabs>\n {selectedTab === 0 && <ManageExpenses />}\n {selectedTab === 1 && <ManageIncome />}\n </Box>\n )\n})\n"],"names":["ManageExpenses","observer","copy","useGlobalCopyStore","detailedRepeatingTransactions","useRecurringTransactionsStore","onEvent","useEvent","onClick","repeatingTransaction","ANALYTICS_EVENTS","onAdd","filteredTransactions","rt","RepeatingType","Frequency","jsx","Fragment","jsxs","Stack","Box","List","index","React","RecurringRow","Divider","AddRecurringTransaction","RecurringSettingsZeroState","RecurringSettings","defaultSelectedTab","selectedTab","setSelectedTab","recurringCopy","Tabs","_event","newValue","Tab","ManageIncome"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { CategoryIcon as M, CategoryIconVariants as G, Text as y, P as O } from
|
|
|
11
11
|
import { f as b } from "./NumberFormatting--XMeeBfr.mjs";
|
|
12
12
|
import { D as $ } from "./Donut-SzzfZDHF.mjs";
|
|
13
13
|
import { u as j } from "./useAriaLive-MkYebyUR.mjs";
|
|
14
|
-
import { u as v } from "./hooks-
|
|
14
|
+
import { u as v } from "./hooks-Chcgk3F2.mjs";
|
|
15
15
|
import { u as R } from "./useScreenSize-mWpmnh5w.mjs";
|
|
16
16
|
const _ = 5, V = (i, g, s, c) => c.reduce((o, n) => {
|
|
17
17
|
const a = i.find((u) => u.guid === n.category_guid);
|
|
@@ -201,4 +201,4 @@ export {
|
|
|
201
201
|
rt as b,
|
|
202
202
|
ot as g
|
|
203
203
|
};
|
|
204
|
-
//# sourceMappingURL=SpendingLegend-
|
|
204
|
+
//# sourceMappingURL=SpendingLegend-CqLSaAYE.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpendingLegend-CxvNOg3c.mjs","sources":["../src/spending/utils/SpendingData.ts","../src/spending/components/SpendingDonut.tsx","../src/spending/components/SpendingLegend.tsx"],"sourcesContent":["import { Theme } from '@mui/material'\n\nimport { getCategoryColor } from '../../core/utils/CategoryUtil'\nimport { CategoryGuids } from '../../core/constants'\nimport { Category, DateRangeCategoryTotals, GoalsCopy } from '../../core'\nimport type { DonutData } from '../../common/components/charts/Donut'\n\nconst TOP_CATEGORY_LENGTH = 5\n\nexport interface CategoryTotal {\n guid: string\n name: string\n color: string\n categoryTotals?: CategoryTotal[]\n amount: number\n}\n\nexport interface SpendingData {\n categoryData: CategoryTotal[]\n donutData: DonutData[]\n totalAmount: number\n}\n\n/**\n * Rolls all categories up into parent categories and return an array of CategoryTotal items.\n * @param categories - Array of all categories\n * @param theme - The current theme to use for colors\n * @param totals - And array of type DateRangeCategoryTotals\n */\nconst getTotalsByParentCategory = (\n categories: Category[],\n copy: GoalsCopy,\n theme: Theme,\n totals: DateRangeCategoryTotals[],\n): CategoryTotal[] => {\n // Iterate over the category data from BE and roll up all categories into parent categories\n // acc is the accumulated category totals of type CategoryTotal that is initialized as an empty []\n // curr is the current DateRangeCategoryTotal\n return totals.reduce((acc, curr) => {\n // Find category and if it doesn't exist, return acc\n const category = categories.find((c) => c.guid === curr.category_guid)\n if (!category) return acc\n\n // Find parent category and if it doesn't exist, return acc\n const parentGuid = category.parent_guid ?? category.guid\n const parentCategory = categories.find((c) => c.guid === parentGuid)\n if (!parentCategory) return acc\n\n // Skip negative totals — they represent credits/income/transfers, not spending\n if (curr.total <= 0) return acc\n\n const categoryTotal = {\n guid: category.guid,\n name:\n category.guid === parentGuid\n ? `${copy.parent_category_totals_label_general} ${category.name}`\n : category.name,\n color: getCategoryColor(parentCategory.guid, theme),\n amount: curr.total,\n }\n\n // If parent category has already been added to acc then find it and add the current total,\n // otherwise add the parent category to acc.\n const parentCategoryTotal = acc.find((ct) => ct.guid === parentGuid)\n if (parentCategoryTotal) {\n parentCategoryTotal.amount += curr.total\n parentCategoryTotal.categoryTotals?.push(categoryTotal)\n } else {\n acc.push({\n guid: parentGuid,\n name: parentCategory.name,\n color: getCategoryColor(parentCategory.guid, theme),\n categoryTotals: [categoryTotal],\n amount: curr.total,\n })\n }\n\n return acc\n }, [] as CategoryTotal[])\n}\n\n/**\n * Returns an object of type SpendingData containing a subset of category totals related to spending\n * Excludes Income and Transfers\n *\n * @param categories - Array of all categories\n * @param copy - Localized copy\n * @param theme - The current theme to use for colors\n * @param totals - And array of type DateRangeCategoryTotals\n */\nexport const getSpendingData = (\n categories: Category[],\n copy: GoalsCopy, // TODO: Replace after `Other` is added to SpendingCopy\n theme: Theme,\n totals: DateRangeCategoryTotals[],\n): SpendingData => {\n const parentCategoryTotals = getTotalsByParentCategory(categories, copy, theme, totals)\n\n // Filter out Income and Transfers from spending totals\n // Sort in decending order by amount\n const spendingTotals = parentCategoryTotals\n .filter(\n (ct) =>\n ct.guid !== CategoryGuids.INCOME &&\n ct.guid !== CategoryGuids.INVESTMENTS &&\n ct.guid !== CategoryGuids.TRANSFER &&\n ct.amount > 0,\n )\n .sort((cat1, cat2) => cat2.amount - cat1.amount)\n\n // Calculate the total spend\n const totalAmount = spendingTotals.reduce(\n (acc: number, total: CategoryTotal) => acc + total.amount,\n 0,\n )\n\n // Find the number of top categories to include\n const length =\n spendingTotals.length > TOP_CATEGORY_LENGTH ? TOP_CATEGORY_LENGTH : spendingTotals.length\n\n // Only include the top categories\n const categoryData = spendingTotals.slice(0, length)\n\n // Map the category data to donut data\n const donutData = categoryData.map((categoryTotal) => ({\n id: categoryTotal.guid,\n color: getCategoryColor(categoryTotal.guid, theme),\n label: categoryTotal.name,\n value: (categoryTotal.amount / totalAmount) * 100,\n }))\n\n // If there additional categories outside of the top categories, combine them into an Other category\n if (spendingTotals.length > 5) {\n const otherCategories = spendingTotals.slice(TOP_CATEGORY_LENGTH)\n const otherTotal = otherCategories.reduce(\n (acc: number, total: CategoryTotal) => acc + total.amount,\n 0,\n )\n categoryData.push({\n guid: 'other',\n color: theme.palette.categories.others || '',\n name: copy.saving_goal_other,\n categoryTotals: otherCategories,\n amount: otherTotal,\n })\n\n donutData.push({\n id: 'other',\n color: theme.palette.categories.others || '',\n label: copy.saving_goal_other,\n value: (otherTotal / totalAmount) * 100,\n })\n }\n\n // Return an object of type SpendingData\n return {\n categoryData,\n donutData,\n totalAmount,\n }\n}\n\n/**\n * Returns an object of type SpendingData containing a subset of category totals related to income\n * Only includes Income subcategories\n *\n * @param categories - Array of all categories\n * @param monthlyTotals - And array of type DateRangeCategoryTotals\n * @param colors - An array of color strings to use for income colors\n */\nexport const getIncomeData = (\n categories: Category[],\n monthlyTotals: DateRangeCategoryTotals[],\n colors: string[],\n): SpendingData => {\n // Get all income subcategories\n const incomeCategories = categories.filter(\n (category) =>\n category.guid === CategoryGuids.INCOME || category.parent_guid === CategoryGuids.INCOME,\n )\n\n // Filter, sort & map DateRangeCategoryTotals to CategoryTotal objects\n // The filter return only subcategories with a parent category of Income\n // The sort is in acending order due to amounts being negative\n const incomeTotals: CategoryTotal[] = monthlyTotals\n .filter((total) => incomeCategories.some((category) => category.guid === total.category_guid))\n .sort((total1, total2) => total1.total - total2.total)\n .map((total, index) => {\n return {\n guid: total.category_guid,\n name: categories.find((cat) => cat.guid === total.category_guid)?.name,\n color: colors[index % colors.length],\n categoryTotals: [],\n amount: Math.abs(total.total),\n }\n }) as CategoryTotal[]\n\n // Calculates the total income amount\n const totalAmount = incomeTotals.reduce(\n (acc: number, total: CategoryTotal) => acc + total.amount,\n 0,\n )\n\n // Maps the income totals to donut data\n const donutData = incomeTotals.map((incomeTotal) => ({\n id: incomeTotal.guid,\n color: incomeTotal.color,\n label: incomeTotal.name,\n value: (incomeTotal.amount / totalAmount) * 100,\n }))\n\n // Return an object of type SpendingData\n return {\n categoryData: incomeTotals,\n donutData,\n totalAmount,\n }\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { CategoryIcon, CategoryIconVariants, P, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useScreenSize } from '../../common'\nimport { CategoryGuids } from '../../core/constants'\nimport Donut from '../../common/components/charts/Donut'\nimport { useAriaLive } from '../../common/hooks/useAriaLive'\n\nimport type { SpendingData } from '../utils/SpendingData'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface SpendingDonutProps {\n data: SpendingData\n isIncome?: boolean\n onSelected: (id: string) => void\n onViewTransactions?: (id: string) => void\n selectedId: string\n size?: number\n totalLabel: string\n variant?: 'mini' | 'full'\n}\n\nconst SpendingDonut: React.FC<SpendingDonutProps> = ({\n data,\n isIncome = false,\n onSelected,\n onViewTransactions,\n selectedId,\n size = 150,\n totalLabel,\n variant = 'mini',\n}) => {\n const { spending: spendingCopy } = useGlobalCopyStore()\n const theme = useTheme()\n const { isTablet } = useScreenSize()\n const { announce, ariaLive } = useAriaLive()\n\n const selectedCategory = React.useMemo(\n () => (selectedId ? data.categoryData.find((cd) => cd.guid === selectedId) : undefined),\n [selectedId],\n )\n\n // Announce category selection to screen readers\n React.useEffect(() => {\n if (selectedCategory) {\n const amount = formatCurrency(selectedCategory.amount, variant === 'mini' ? '0,0' : '0,0.00')\n announce(`${selectedCategory.name}: ${amount}`)\n }\n }, [selectedCategory, announce, variant])\n\n const donutData =\n data.donutData.length > 0\n ? data.donutData\n : [{ id: '0', color: theme.palette.divider, value: 100 }]\n\n const handleViewTransactions = () => {\n onViewTransactions?.(selectedId)\n }\n\n const iconSize = isTablet ? 32 : 48\n return (\n <Box\n aria-label={spendingCopy.chart_description}\n height={size}\n position=\"relative\"\n role=\"group\"\n width={size}\n >\n {ariaLive}\n <Donut data={donutData} onClick={onSelected} selectedId={selectedId} size={size}>\n <Stack alignItems=\"center\" height=\"100%\" justifyContent=\"center\" width=\"100%\">\n <Stack alignItems=\"center\" justifyContent=\"center\" minHeight={size} minWidth={size}>\n {selectedCategory && (\n <Stack\n alignItems=\"center\"\n gap={variant === 'mini' ? 0 : 8}\n mb={variant === 'mini' ? 0 : 8}\n mt={variant === 'mini' ? 0 : -16}\n sx={\n variant === 'mini'\n ? { gap: 0, mb: 0 }\n : { gap: { xs: 4, xl: 8 }, mb: { xs: 4, xl: 8 } }\n }\n >\n <Box aria-hidden=\"true\" role=\"presentation\">\n <CategoryIcon\n categoryGuid={isIncome ? CategoryGuids.INCOME : selectedCategory.guid}\n size={variant === 'mini' ? 24 : iconSize}\n variant={CategoryIconVariants.Transparent}\n />\n </Box>\n <Text\n color=\"text.secondary\"\n noWrap={true}\n variant={variant === 'mini' ? 'tiny' : 'body1'}\n >\n {selectedCategory ? selectedCategory.name : totalLabel}\n </Text>\n </Stack>\n )}\n\n {!selectedCategory && variant === 'full' && (\n <Text bold={true} color=\"text.secondary\" sx={{ mb: { xs: 4, xl: 8 } }}>\n {totalLabel}\n </Text>\n )}\n\n <P variant={variant === 'mini' ? 'h2' : 'h1'}>\n {selectedCategory\n ? formatCurrency(selectedCategory.amount, variant === 'mini' ? '0,0' : '0,0.00')\n : formatCurrency(data.totalAmount, variant === 'mini' ? '0,0' : '0,0.00')}\n </P>\n {!selectedCategory && variant === 'mini' && (\n <Text color=\"text.secondary\" noWrap={true} variant=\"tiny\">\n {totalLabel}\n </Text>\n )}\n\n {variant === 'full' && (\n <Button\n aria-label={`View ${selectedCategory?.name || ''} Transactions`}\n disabled={data.categoryData.length === 0}\n onClick={handleViewTransactions}\n sx={{ mt: { xl: 4, xs: 0 }, zIndex: 1 }}\n variant=\"text\"\n >\n {spendingCopy.view_transactions}\n </Button>\n )}\n </Stack>\n </Stack>\n </Donut>\n </Box>\n )\n}\n\nexport default observer(SpendingDonut)\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport type { SpendingData } from '../utils/SpendingData'\n\ninterface SpendingLegendProps {\n data: SpendingData\n onSelected: (id: string) => void\n selectedId: string\n}\n\nconst SpendingLegend: React.FC<SpendingLegendProps> = ({ data, onSelected, selectedId }) => {\n const handleKeyDown = (event: React.KeyboardEvent, guid: string) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n onSelected(guid)\n }\n }\n\n return (\n <Stack gap={8} height=\"100%\" justifyContent=\"center\" my=\"auto\">\n {data.categoryData.map((item) => (\n <Stack\n alignItems=\"center\"\n aria-label={item.name}\n aria-pressed={item.guid === selectedId}\n direction=\"row\"\n gap={8}\n key={item.guid}\n onClick={() => onSelected(item.guid)}\n onKeyDown={(e) => handleKeyDown(e, item.guid)}\n role=\"button\"\n sx={{ cursor: 'pointer', touchAction: 'manipulation' }}\n tabIndex={0}\n >\n <Box borderRadius={4} height={8} sx={{ backgroundColor: item.color }} width={8} />\n <Text bold={item.guid === selectedId} variant=\"caption\">\n {item.name}\n </Text>\n </Stack>\n ))}\n </Stack>\n )\n}\n\nexport default SpendingLegend\n"],"names":["TOP_CATEGORY_LENGTH","getTotalsByParentCategory","categories","copy","theme","totals","acc","curr","category","c","parentGuid","parentCategory","categoryTotal","getCategoryColor","parentCategoryTotal","ct","getSpendingData","spendingTotals","CategoryGuids","cat1","cat2","totalAmount","total","length","categoryData","donutData","otherCategories","otherTotal","getIncomeData","monthlyTotals","colors","incomeCategories","incomeTotals","total1","total2","index","cat","incomeTotal","SpendingDonut","data","isIncome","onSelected","onViewTransactions","selectedId","size","totalLabel","variant","spendingCopy","useGlobalCopyStore","useTheme","isTablet","useScreenSize","announce","ariaLive","useAriaLive","selectedCategory","React","cd","amount","formatCurrency","handleViewTransactions","iconSize","jsxs","Box","jsx","Donut","Stack","CategoryIcon","CategoryIconVariants","Text","P","Button","SpendingDonut$1","observer","SpendingLegend","handleKeyDown","event","guid","item","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SpendingLegend-CqLSaAYE.mjs","sources":["../src/spending/utils/SpendingData.ts","../src/spending/components/SpendingDonut.tsx","../src/spending/components/SpendingLegend.tsx"],"sourcesContent":["import { Theme } from '@mui/material'\n\nimport { getCategoryColor } from '../../core/utils/CategoryUtil'\nimport { CategoryGuids } from '../../core/constants'\nimport { Category, DateRangeCategoryTotals, GoalsCopy } from '../../core'\nimport type { DonutData } from '../../common/components/charts/Donut'\n\nconst TOP_CATEGORY_LENGTH = 5\n\nexport interface CategoryTotal {\n guid: string\n name: string\n color: string\n categoryTotals?: CategoryTotal[]\n amount: number\n}\n\nexport interface SpendingData {\n categoryData: CategoryTotal[]\n donutData: DonutData[]\n totalAmount: number\n}\n\n/**\n * Rolls all categories up into parent categories and return an array of CategoryTotal items.\n * @param categories - Array of all categories\n * @param theme - The current theme to use for colors\n * @param totals - And array of type DateRangeCategoryTotals\n */\nconst getTotalsByParentCategory = (\n categories: Category[],\n copy: GoalsCopy,\n theme: Theme,\n totals: DateRangeCategoryTotals[],\n): CategoryTotal[] => {\n // Iterate over the category data from BE and roll up all categories into parent categories\n // acc is the accumulated category totals of type CategoryTotal that is initialized as an empty []\n // curr is the current DateRangeCategoryTotal\n return totals.reduce((acc, curr) => {\n // Find category and if it doesn't exist, return acc\n const category = categories.find((c) => c.guid === curr.category_guid)\n if (!category) return acc\n\n // Find parent category and if it doesn't exist, return acc\n const parentGuid = category.parent_guid ?? category.guid\n const parentCategory = categories.find((c) => c.guid === parentGuid)\n if (!parentCategory) return acc\n\n // Skip negative totals — they represent credits/income/transfers, not spending\n if (curr.total <= 0) return acc\n\n const categoryTotal = {\n guid: category.guid,\n name:\n category.guid === parentGuid\n ? `${copy.parent_category_totals_label_general} ${category.name}`\n : category.name,\n color: getCategoryColor(parentCategory.guid, theme),\n amount: curr.total,\n }\n\n // If parent category has already been added to acc then find it and add the current total,\n // otherwise add the parent category to acc.\n const parentCategoryTotal = acc.find((ct) => ct.guid === parentGuid)\n if (parentCategoryTotal) {\n parentCategoryTotal.amount += curr.total\n parentCategoryTotal.categoryTotals?.push(categoryTotal)\n } else {\n acc.push({\n guid: parentGuid,\n name: parentCategory.name,\n color: getCategoryColor(parentCategory.guid, theme),\n categoryTotals: [categoryTotal],\n amount: curr.total,\n })\n }\n\n return acc\n }, [] as CategoryTotal[])\n}\n\n/**\n * Returns an object of type SpendingData containing a subset of category totals related to spending\n * Excludes Income and Transfers\n *\n * @param categories - Array of all categories\n * @param copy - Localized copy\n * @param theme - The current theme to use for colors\n * @param totals - And array of type DateRangeCategoryTotals\n */\nexport const getSpendingData = (\n categories: Category[],\n copy: GoalsCopy, // TODO: Replace after `Other` is added to SpendingCopy\n theme: Theme,\n totals: DateRangeCategoryTotals[],\n): SpendingData => {\n const parentCategoryTotals = getTotalsByParentCategory(categories, copy, theme, totals)\n\n // Filter out Income and Transfers from spending totals\n // Sort in decending order by amount\n const spendingTotals = parentCategoryTotals\n .filter(\n (ct) =>\n ct.guid !== CategoryGuids.INCOME &&\n ct.guid !== CategoryGuids.INVESTMENTS &&\n ct.guid !== CategoryGuids.TRANSFER &&\n ct.amount > 0,\n )\n .sort((cat1, cat2) => cat2.amount - cat1.amount)\n\n // Calculate the total spend\n const totalAmount = spendingTotals.reduce(\n (acc: number, total: CategoryTotal) => acc + total.amount,\n 0,\n )\n\n // Find the number of top categories to include\n const length =\n spendingTotals.length > TOP_CATEGORY_LENGTH ? TOP_CATEGORY_LENGTH : spendingTotals.length\n\n // Only include the top categories\n const categoryData = spendingTotals.slice(0, length)\n\n // Map the category data to donut data\n const donutData = categoryData.map((categoryTotal) => ({\n id: categoryTotal.guid,\n color: getCategoryColor(categoryTotal.guid, theme),\n label: categoryTotal.name,\n value: (categoryTotal.amount / totalAmount) * 100,\n }))\n\n // If there additional categories outside of the top categories, combine them into an Other category\n if (spendingTotals.length > 5) {\n const otherCategories = spendingTotals.slice(TOP_CATEGORY_LENGTH)\n const otherTotal = otherCategories.reduce(\n (acc: number, total: CategoryTotal) => acc + total.amount,\n 0,\n )\n categoryData.push({\n guid: 'other',\n color: theme.palette.categories.others || '',\n name: copy.saving_goal_other,\n categoryTotals: otherCategories,\n amount: otherTotal,\n })\n\n donutData.push({\n id: 'other',\n color: theme.palette.categories.others || '',\n label: copy.saving_goal_other,\n value: (otherTotal / totalAmount) * 100,\n })\n }\n\n // Return an object of type SpendingData\n return {\n categoryData,\n donutData,\n totalAmount,\n }\n}\n\n/**\n * Returns an object of type SpendingData containing a subset of category totals related to income\n * Only includes Income subcategories\n *\n * @param categories - Array of all categories\n * @param monthlyTotals - And array of type DateRangeCategoryTotals\n * @param colors - An array of color strings to use for income colors\n */\nexport const getIncomeData = (\n categories: Category[],\n monthlyTotals: DateRangeCategoryTotals[],\n colors: string[],\n): SpendingData => {\n // Get all income subcategories\n const incomeCategories = categories.filter(\n (category) =>\n category.guid === CategoryGuids.INCOME || category.parent_guid === CategoryGuids.INCOME,\n )\n\n // Filter, sort & map DateRangeCategoryTotals to CategoryTotal objects\n // The filter return only subcategories with a parent category of Income\n // The sort is in acending order due to amounts being negative\n const incomeTotals: CategoryTotal[] = monthlyTotals\n .filter((total) => incomeCategories.some((category) => category.guid === total.category_guid))\n .sort((total1, total2) => total1.total - total2.total)\n .map((total, index) => {\n return {\n guid: total.category_guid,\n name: categories.find((cat) => cat.guid === total.category_guid)?.name,\n color: colors[index % colors.length],\n categoryTotals: [],\n amount: Math.abs(total.total),\n }\n }) as CategoryTotal[]\n\n // Calculates the total income amount\n const totalAmount = incomeTotals.reduce(\n (acc: number, total: CategoryTotal) => acc + total.amount,\n 0,\n )\n\n // Maps the income totals to donut data\n const donutData = incomeTotals.map((incomeTotal) => ({\n id: incomeTotal.guid,\n color: incomeTotal.color,\n label: incomeTotal.name,\n value: (incomeTotal.amount / totalAmount) * 100,\n }))\n\n // Return an object of type SpendingData\n return {\n categoryData: incomeTotals,\n donutData,\n totalAmount,\n }\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { CategoryIcon, CategoryIconVariants, P, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useScreenSize } from '../../common'\nimport { CategoryGuids } from '../../core/constants'\nimport Donut from '../../common/components/charts/Donut'\nimport { useAriaLive } from '../../common/hooks/useAriaLive'\n\nimport type { SpendingData } from '../utils/SpendingData'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface SpendingDonutProps {\n data: SpendingData\n isIncome?: boolean\n onSelected: (id: string) => void\n onViewTransactions?: (id: string) => void\n selectedId: string\n size?: number\n totalLabel: string\n variant?: 'mini' | 'full'\n}\n\nconst SpendingDonut: React.FC<SpendingDonutProps> = ({\n data,\n isIncome = false,\n onSelected,\n onViewTransactions,\n selectedId,\n size = 150,\n totalLabel,\n variant = 'mini',\n}) => {\n const { spending: spendingCopy } = useGlobalCopyStore()\n const theme = useTheme()\n const { isTablet } = useScreenSize()\n const { announce, ariaLive } = useAriaLive()\n\n const selectedCategory = React.useMemo(\n () => (selectedId ? data.categoryData.find((cd) => cd.guid === selectedId) : undefined),\n [selectedId],\n )\n\n // Announce category selection to screen readers\n React.useEffect(() => {\n if (selectedCategory) {\n const amount = formatCurrency(selectedCategory.amount, variant === 'mini' ? '0,0' : '0,0.00')\n announce(`${selectedCategory.name}: ${amount}`)\n }\n }, [selectedCategory, announce, variant])\n\n const donutData =\n data.donutData.length > 0\n ? data.donutData\n : [{ id: '0', color: theme.palette.divider, value: 100 }]\n\n const handleViewTransactions = () => {\n onViewTransactions?.(selectedId)\n }\n\n const iconSize = isTablet ? 32 : 48\n return (\n <Box\n aria-label={spendingCopy.chart_description}\n height={size}\n position=\"relative\"\n role=\"group\"\n width={size}\n >\n {ariaLive}\n <Donut data={donutData} onClick={onSelected} selectedId={selectedId} size={size}>\n <Stack alignItems=\"center\" height=\"100%\" justifyContent=\"center\" width=\"100%\">\n <Stack alignItems=\"center\" justifyContent=\"center\" minHeight={size} minWidth={size}>\n {selectedCategory && (\n <Stack\n alignItems=\"center\"\n gap={variant === 'mini' ? 0 : 8}\n mb={variant === 'mini' ? 0 : 8}\n mt={variant === 'mini' ? 0 : -16}\n sx={\n variant === 'mini'\n ? { gap: 0, mb: 0 }\n : { gap: { xs: 4, xl: 8 }, mb: { xs: 4, xl: 8 } }\n }\n >\n <Box aria-hidden=\"true\" role=\"presentation\">\n <CategoryIcon\n categoryGuid={isIncome ? CategoryGuids.INCOME : selectedCategory.guid}\n size={variant === 'mini' ? 24 : iconSize}\n variant={CategoryIconVariants.Transparent}\n />\n </Box>\n <Text\n color=\"text.secondary\"\n noWrap={true}\n variant={variant === 'mini' ? 'tiny' : 'body1'}\n >\n {selectedCategory ? selectedCategory.name : totalLabel}\n </Text>\n </Stack>\n )}\n\n {!selectedCategory && variant === 'full' && (\n <Text bold={true} color=\"text.secondary\" sx={{ mb: { xs: 4, xl: 8 } }}>\n {totalLabel}\n </Text>\n )}\n\n <P variant={variant === 'mini' ? 'h2' : 'h1'}>\n {selectedCategory\n ? formatCurrency(selectedCategory.amount, variant === 'mini' ? '0,0' : '0,0.00')\n : formatCurrency(data.totalAmount, variant === 'mini' ? '0,0' : '0,0.00')}\n </P>\n {!selectedCategory && variant === 'mini' && (\n <Text color=\"text.secondary\" noWrap={true} variant=\"tiny\">\n {totalLabel}\n </Text>\n )}\n\n {variant === 'full' && (\n <Button\n aria-label={`View ${selectedCategory?.name || ''} Transactions`}\n disabled={data.categoryData.length === 0}\n onClick={handleViewTransactions}\n sx={{ mt: { xl: 4, xs: 0 }, zIndex: 1 }}\n variant=\"text\"\n >\n {spendingCopy.view_transactions}\n </Button>\n )}\n </Stack>\n </Stack>\n </Donut>\n </Box>\n )\n}\n\nexport default observer(SpendingDonut)\n","import React from 'react'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport type { SpendingData } from '../utils/SpendingData'\n\ninterface SpendingLegendProps {\n data: SpendingData\n onSelected: (id: string) => void\n selectedId: string\n}\n\nconst SpendingLegend: React.FC<SpendingLegendProps> = ({ data, onSelected, selectedId }) => {\n const handleKeyDown = (event: React.KeyboardEvent, guid: string) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n onSelected(guid)\n }\n }\n\n return (\n <Stack gap={8} height=\"100%\" justifyContent=\"center\" my=\"auto\">\n {data.categoryData.map((item) => (\n <Stack\n alignItems=\"center\"\n aria-label={item.name}\n aria-pressed={item.guid === selectedId}\n direction=\"row\"\n gap={8}\n key={item.guid}\n onClick={() => onSelected(item.guid)}\n onKeyDown={(e) => handleKeyDown(e, item.guid)}\n role=\"button\"\n sx={{ cursor: 'pointer', touchAction: 'manipulation' }}\n tabIndex={0}\n >\n <Box borderRadius={4} height={8} sx={{ backgroundColor: item.color }} width={8} />\n <Text bold={item.guid === selectedId} variant=\"caption\">\n {item.name}\n </Text>\n </Stack>\n ))}\n </Stack>\n )\n}\n\nexport default SpendingLegend\n"],"names":["TOP_CATEGORY_LENGTH","getTotalsByParentCategory","categories","copy","theme","totals","acc","curr","category","c","parentGuid","parentCategory","categoryTotal","getCategoryColor","parentCategoryTotal","ct","getSpendingData","spendingTotals","CategoryGuids","cat1","cat2","totalAmount","total","length","categoryData","donutData","otherCategories","otherTotal","getIncomeData","monthlyTotals","colors","incomeCategories","incomeTotals","total1","total2","index","cat","incomeTotal","SpendingDonut","data","isIncome","onSelected","onViewTransactions","selectedId","size","totalLabel","variant","spendingCopy","useGlobalCopyStore","useTheme","isTablet","useScreenSize","announce","ariaLive","useAriaLive","selectedCategory","React","cd","amount","formatCurrency","handleViewTransactions","iconSize","jsxs","Box","jsx","Donut","Stack","CategoryIcon","CategoryIconVariants","Text","P","Button","SpendingDonut$1","observer","SpendingLegend","handleKeyDown","event","guid","item","e"],"mappings":"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"}
|
|
@@ -22,8 +22,8 @@ import Xe from "@mui/material/FormGroup";
|
|
|
22
22
|
import ue from "@mui/material/IconButton";
|
|
23
23
|
import $e from "@mui/material/TextField";
|
|
24
24
|
import { u as Ae } from "./useAriaLive-MkYebyUR.mjs";
|
|
25
|
-
import { b as Ze, T as Je, u as ne, O as f, c as et, d as tt, E as at, C as nt } from "./EmbeddedCard-
|
|
26
|
-
import { u as E, g as M,
|
|
25
|
+
import { b as Ze, T as Je, u as ne, O as f, c as et, d as tt, E as at, C as nt } from "./EmbeddedCard-Dwj1CkBK.mjs";
|
|
26
|
+
import { u as E, g as M, p as rt, c as ot, l as we, f as G, a as it, D as st } from "./hooks-Chcgk3F2.mjs";
|
|
27
27
|
import { A as j } from "./Analytics-D-jdcL72.mjs";
|
|
28
28
|
import lt from "@mui/material/ToggleButton";
|
|
29
29
|
import { ChevronRight as Ke, Icon as k, Delete as fe, Cancel as Se, Search as ct, Edit as dt, Flag as ut } from "@mxenabled/mx-icons";
|
|
@@ -37,7 +37,7 @@ import { BarChart as mt } from "@mui/x-charts";
|
|
|
37
37
|
import { L as _t } from "./Loader-CxeBwuPG.mjs";
|
|
38
38
|
import X from "@mui/material/ListItemButton";
|
|
39
39
|
import Z from "@mui/material/ListItemIcon";
|
|
40
|
-
import { b as Fe } from "./CategorySelectorDrawer-
|
|
40
|
+
import { b as Fe } from "./CategorySelectorDrawer-BM5mKt7P.mjs";
|
|
41
41
|
import { D as ae } from "./Dialog-Bvd2n8hz.mjs";
|
|
42
42
|
import { D as _e } from "./Drawer-DsnW2o0v.mjs";
|
|
43
43
|
import { b as gt, C as pt, a as ht } from "./CurrencyDialog-DumQCTPO.mjs";
|
|
@@ -45,7 +45,7 @@ import Pe from "@mui/material/InputAdornment";
|
|
|
45
45
|
import yt from "@mui/material/Checkbox";
|
|
46
46
|
import { l as Tt } from "./DateUtil-CzBmbjmA.mjs";
|
|
47
47
|
import Ne from "@mui/material/Grid";
|
|
48
|
-
import { C as bt } from "./CurrencyInput-
|
|
48
|
+
import { C as bt } from "./CurrencyInput-CxAsTGg2.mjs";
|
|
49
49
|
import Ct from "@mui/material/Switch";
|
|
50
50
|
var de = /* @__PURE__ */ ((t) => (t[t.Category = 0] = "Category", t[t.Date = 1] = "Date", t[t.Memo = 2] = "Memo", t[t.Tags = 3] = "Tags", t))(de || {}), ie = /* @__PURE__ */ ((t) => (t[t.MerchantBudget = 0] = "MerchantBudget", t[t.SplitTransaction = 1] = "SplitTransaction", t[t.HideTransaction = 2] = "HideTransaction", t[t.MerchantLogo = 3] = "MerchantLogo", t))(ie || {});
|
|
51
51
|
const ft = [
|
|
@@ -1705,4 +1705,4 @@ export {
|
|
|
1705
1705
|
de as b,
|
|
1706
1706
|
At as c
|
|
1707
1707
|
};
|
|
1708
|
-
//# sourceMappingURL=TransactionDetails-
|
|
1708
|
+
//# sourceMappingURL=TransactionDetails-DsWYPMCj.mjs.map
|