@mx-cartographer/experiences 6.26.1-alpha.mega1 → 6.26.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 +9 -5
- package/dist/categories/util/CategoryUtil.d.ts +2 -3
- package/dist/common/context/hooks.d.ts +13 -13
- package/dist/common/types/Category.d.ts +8 -2
- package/dist/common/types/index.d.ts +1 -1
- package/dist/help/components/content/section/index.d.ts +15 -15
- package/dist/index.d.ts +22 -0
- package/dist/index.es.js +29896 -0
- package/dist/index.es.js.map +1 -0
- package/dist/trends/components/CategoriesList.d.ts +5 -5
- package/dist/trends/components/CategoriesListItem.d.ts +4 -7
- package/dist/trends/components/CategoryDetailChart.d.ts +1 -5
- package/dist/trends/stores/TrendsStore.d.ts +16 -11
- package/package.json +3 -91
- package/dist/AccountStore-DkL93tXL.mjs +0 -317
- package/dist/AccountStore-DkL93tXL.mjs.map +0 -1
- package/dist/BudgetUtil-CVqAdv-j.mjs +0 -187
- package/dist/BudgetUtil-CVqAdv-j.mjs.map +0 -1
- package/dist/CashflowStore-gPEEBiXo.mjs +0 -53
- package/dist/CashflowStore-gPEEBiXo.mjs.map +0 -1
- package/dist/CategoryStore-m7oieLzP.mjs +0 -260
- package/dist/CategoryStore-m7oieLzP.mjs.map +0 -1
- package/dist/ConnectMiniWidget-CQWafYtQ.mjs +0 -22966
- package/dist/ConnectMiniWidget-CQWafYtQ.mjs.map +0 -1
- package/dist/DebtsStore-cUhIgJx6.mjs +0 -145
- package/dist/DebtsStore-cUhIgJx6.mjs.map +0 -1
- package/dist/Donut-CGNFni9y.mjs +0 -58
- package/dist/Donut-CGNFni9y.mjs.map +0 -1
- package/dist/FinstrongStore-BDG7l0nI.mjs +0 -183
- package/dist/FinstrongStore-BDG7l0nI.mjs.map +0 -1
- package/dist/GoalStore-o2waGeyf.mjs +0 -293
- package/dist/GoalStore-o2waGeyf.mjs.map +0 -1
- package/dist/Loader-CwdK8lfx.mjs +0 -147
- package/dist/Loader-CwdK8lfx.mjs.map +0 -1
- package/dist/MerchantStore-Cck9IGIH.mjs +0 -125
- package/dist/MerchantStore-Cck9IGIH.mjs.map +0 -1
- package/dist/NetWorthStore-D5eUfGQt.mjs +0 -66
- package/dist/NetWorthStore-D5eUfGQt.mjs.map +0 -1
- package/dist/NotificationStore-DCxw8W7u.mjs +0 -141
- package/dist/NotificationStore-DCxw8W7u.mjs.map +0 -1
- package/dist/RecurringTransactionsStore-Bijrgllq.mjs +0 -337
- package/dist/RecurringTransactionsStore-Bijrgllq.mjs.map +0 -1
- package/dist/SettingsStore-BhOYgUOa.mjs +0 -352
- package/dist/SettingsStore-BhOYgUOa.mjs.map +0 -1
- package/dist/TransactionApi-Dnbyi1JL.mjs +0 -175
- package/dist/TransactionApi-Dnbyi1JL.mjs.map +0 -1
- package/dist/TransactionStore-CiEtt5XJ.mjs +0 -417
- package/dist/TransactionStore-CiEtt5XJ.mjs.map +0 -1
- package/dist/TrendsStore-Idq3QfoA.mjs +0 -131
- package/dist/TrendsStore-Idq3QfoA.mjs.map +0 -1
- package/dist/accounts/index.es.js +0 -18
- package/dist/accounts/index.es.js.map +0 -1
- package/dist/analytics/index.es.js +0 -170
- package/dist/analytics/index.es.js.map +0 -1
- package/dist/budgets/index.es.js +0 -1116
- package/dist/budgets/index.es.js.map +0 -1
- package/dist/cashflow/index.es.js +0 -118
- package/dist/cashflow/index.es.js.map +0 -1
- package/dist/categories/index.es.js +0 -10
- package/dist/categories/index.es.js.map +0 -1
- package/dist/common/index.es.js +0 -1549
- package/dist/common/index.es.js.map +0 -1
- package/dist/dashboard/index.es.js +0 -257
- package/dist/dashboard/index.es.js.map +0 -1
- package/dist/debts/index.es.js +0 -9
- package/dist/debts/index.es.js.map +0 -1
- package/dist/finstrong/index.es.js +0 -11
- package/dist/finstrong/index.es.js.map +0 -1
- package/dist/goals/index.es.js +0 -9
- package/dist/goals/index.es.js.map +0 -1
- package/dist/help/index.es.js +0 -6
- package/dist/help/index.es.js.map +0 -1
- package/dist/investments/index.es.js +0 -1694
- package/dist/investments/index.es.js.map +0 -1
- package/dist/merchants/index.es.js +0 -7
- package/dist/merchants/index.es.js.map +0 -1
- package/dist/microinsights/index.es.js +0 -21
- package/dist/microinsights/index.es.js.map +0 -1
- package/dist/networth/index.es.js +0 -11
- package/dist/networth/index.es.js.map +0 -1
- package/dist/notifications/index.es.js +0 -116
- package/dist/notifications/index.es.js.map +0 -1
- package/dist/recurringtransactions/index.es.js +0 -14
- package/dist/recurringtransactions/index.es.js.map +0 -1
- package/dist/settings/index.es.js +0 -112
- package/dist/settings/index.es.js.map +0 -1
- package/dist/spending/index.es.js +0 -632
- package/dist/spending/index.es.js.map +0 -1
- package/dist/transactions/index.es.js +0 -19
- package/dist/transactions/index.es.js.map +0 -1
- package/dist/trends/index.es.js +0 -10
- package/dist/trends/index.es.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../src/budgets/utils/BubblesSVG.ts","../../src/budgets/components/bubblechart/Mercury.tsx","../../src/budgets/components/bubblechart/Bubble.tsx","../../src/budgets/components/BubbleChart.tsx","../../src/budgets/components/BudgetsEmptyState.tsx","../../src/budgets/components/BubbleBudgets.tsx","../../src/budgets/components/addbudget/Header.tsx","../../src/budgets/components/addbudget/RecalculateBudgetRow.tsx","../../src/budgets/components/addbudget/RecalculateBudgets.tsx","../../src/budgets/components/shared/BudgetAmount.tsx","../../src/budgets/components/addbudget/UnbudgetedRow.tsx","../../src/budgets/components/AddBudgets.tsx","../../src/budgets/BubbleBudgetsMiniWidget.tsx","../../src/budgets/components/budgetdetails/Header.tsx","../../src/budgets/components/budgetlist/SubBudgetZeroState.tsx","../../src/budgets/components/budgetlist/SubBudgetRow.tsx","../../src/budgets/components/budgetdetails/AddSubBudget.tsx","../../src/budgets/components/budgetdetails/SubBudgetList.tsx","../../src/budgets/components/budgetdetails/BudgetDetails.tsx","../../src/budgets/components/BudgetDetailsDrawer.tsx","../../src/budgets/components/budgetlist/BudgetRow.tsx","../../src/budgets/components/BudgetList.tsx","../../src/budgets/components/Overview.tsx","../../src/budgets/BubbleBudgetsWidget.tsx"],"sourcesContent":["import * as d3 from 'd3'\n\nimport type { Simulation } from 'd3'\n\nimport { type BubbleData } from '../components/BubbleChart'\nimport { DetailedBudget } from '../../common'\n\n// D3 SVG Types\nexport type SimulationType = Simulation<BubbleData, undefined>\n\nconst PROGRESS_INDICATOR_SIZE = 5\nconst MAX_BUBBLE_RADIUS = 100\nconst MIN_BUBBLE_RADIUS = 25\n\n/**\n * Enables dragging of bubbles\n * @param simulation D3 Simulation\n */\nexport const drag = (simulation: SimulationType) => {\n const dragStarted = (event: any) => {\n if (!event.active) simulation.alphaTarget(0.3).restart()\n event.subject.fx = event.subject.x\n event.subject.fy = event.subject.y\n }\n\n const dragged = (event: any) => {\n event.subject.fx = event.x\n event.subject.fy = event.y\n }\n\n const dragEnded = (event: any) => {\n if (!event.active) simulation.alphaTarget(0)\n event.subject.fx = null\n event.subject.fy = null\n }\n return d3.drag().on('start', dragStarted).on('drag', dragged).on('end', dragEnded)\n}\n\n/**\n * Provide d values for the arc between the start and end radius based on time\n * @param bubble Bubble data\n */\nexport const arcTween = (bubble: BubbleData) => {\n // Percentage of the budget\n let p = bubble.transaction_total / bubble.amount\n if (p < 0) p = 0\n else if (p > 1) p = 1\n\n // End angle for the progress status\n const angle = p * 2 * Math.PI\n // Interpolate values between 0 and the end angle\n const interpolate = d3.interpolate(0, angle)\n // Progress arc starting at 0\n const arc = d3\n .arc<BubbleData>()\n .cornerRadius(5)\n .innerRadius(bubble.radius - PROGRESS_INDICATOR_SIZE * 2)\n .outerRadius(bubble.radius - PROGRESS_INDICATOR_SIZE)\n .startAngle(0)\n .endAngle(0)\n\n return (t: number) => {\n // assign end angle to interpolated value for t\n arc.endAngle(interpolate(t))\n // call arc and return intermediate `d` value\n return arc(bubble) || ''\n }\n}\n\n/**\n * Enable drag\n * @param simulation D3 Simulation\n */\nexport const enableDrag = (simulation: SimulationType) => {\n d3.selectAll('.bubble').call(drag(simulation) as any)\n}\n\n/**\n * Update location after a resize\n * @param simulation D3 Simulation\n * @param height New height\n * @param width New width\n */\nexport const resize = (simulation: SimulationType, height: number, width: number) => {\n simulation\n .alpha(1)\n .restart()\n .force(\n 'x',\n d3\n .forceX()\n .x(width / 2)\n .strength(0.01),\n )\n .force(\n 'y',\n d3\n .forceY()\n .y(height / 2)\n .strength(0.01),\n )\n}\n\nexport const getScale = (min: number, max: number) => {\n return d3.scaleLinear().domain([min, max]).range([MIN_BUBBLE_RADIUS, MAX_BUBBLE_RADIUS])\n}\n\n/**\n * Simulates the chart\n * @param budgets Budget data\n */\nexport const simulate = (budgets: DetailedBudget[]) => {\n const maxValue = budgets.reduce((acc, budget) => {\n const max = Math.max(budget.transaction_total, budget.amount)\n return max > acc ? max : acc\n }, 0)\n\n const minValue = budgets.reduce((acc, budget) => {\n const max = Math.max(budget.transaction_total, budget.amount)\n return max < acc ? max : acc\n }, maxValue)\n\n const scale = getScale(minValue, maxValue)\n\n const bubbles = budgets.map((budget) => {\n const radius = scale(Math.max(budget.transaction_total, budget.amount)) || 25\n\n return {\n ...budget,\n radius,\n } as BubbleData\n })\n\n return d3\n .forceSimulation<BubbleData>(bubbles)\n .velocityDecay(0.05)\n .force('collide', d3.forceCollide<BubbleData>((d) => d.radius + 2).strength(0.5))\n .on('tick', () => {\n d3.selectAll('.bubble')\n .data(bubbles)\n .attr('transform', (d: BubbleData) => `translate(${d.x},${d.y})`)\n })\n}\n\n/**\n * Calculate the target radius based on the number of bubbles and container size\n * @param count Number of bubbles\n * @param height Height of the container\n * @param width Width of the container\n * @returns An object containing the target minimum and maximum radius\n */\nconst getTargetRadius = (count: number, height: number, width: number) => {\n const BUBBLE_AREA_MIN = Math.PI * MIN_BUBBLE_RADIUS * MIN_BUBBLE_RADIUS\n const totalMinArea = BUBBLE_AREA_MIN * count\n\n const containerArea = width * height\n\n let targetMaxRadius = MIN_BUBBLE_RADIUS\n if (totalMinArea < containerArea)\n targetMaxRadius = Math.min(MAX_BUBBLE_RADIUS, Math.sqrt(containerArea / count / Math.PI))\n\n const targetMinRadius = Math.max(20, targetMaxRadius * 0.6)\n\n return { targetMinRadius, targetMaxRadius }\n}\n\n/* @param count Number of bubbles\n * @param height Height of the container\n * @param maxValue Maximum value for the scale\n * @param minValue Minimum value for the scale\n * @param width Width of the container\n * @returns A D3 linear scale for bubble radius\n */\nexport const getSmartScale = (\n count: number,\n height: number,\n maxValue: number,\n minValue: number,\n width: number,\n) => {\n const { targetMinRadius, targetMaxRadius } = getTargetRadius(count, height, width)\n\n return d3.scaleLinear().domain([minValue, maxValue]).range([targetMinRadius, targetMaxRadius])\n}\n\n/**\n * Clamp the position of the bubble to ensure it stays within the container\n * @param d Bubble data\n * @param width Width of the container\n * @param height Height of the container\n * @returns A string representing the translation for the bubble\n */\nconst clampPosition = (d: BubbleData, width: number, height: number) => {\n const x = Math.max(d.radius, Math.min(width - d.radius, d.x || 0))\n const y = Math.max(d.radius, Math.min(height - d.radius, d.y || 0))\n return `translate(${x},${y})`\n}\n\n/**\n * Simulate a compact layout for smaller viewports\n * @param budgets Budget data\n * @param height Height of the container\n * @param width Width of the container\n * @returns A D3 simulation for the compact layout\n */\nexport const simulateCompact = (budgets: DetailedBudget[], height: number, width: number) => {\n const maxValue = budgets.reduce(\n (acc, b) => Math.max(acc, Math.max(b.transaction_total, b.amount)),\n 0,\n )\n\n const minValue = budgets.reduce(\n (acc, b) => Math.min(acc, Math.max(b.transaction_total, b.amount)),\n maxValue,\n )\n\n const scale = getSmartScale(budgets.length, height, maxValue, minValue, width)\n\n const bubbles: BubbleData[] = budgets.map((budget) => ({\n ...budget,\n radius: scale(Math.max(budget.transaction_total, budget.amount)),\n }))\n\n return d3\n .forceSimulation<BubbleData>(bubbles)\n .velocityDecay(0.05)\n .force('collide', d3.forceCollide<BubbleData>((d) => d.radius + 1).strength(1))\n .force(\n 'x',\n d3\n .forceX()\n .x(width / 2)\n .strength(0.05),\n )\n .force(\n 'y',\n d3\n .forceY()\n .y(height / 2)\n .strength(0.05),\n )\n .on('tick', () => {\n d3.selectAll('.bubble')\n .data(bubbles)\n .attr('transform', (d) => clampPosition(d, width, height))\n })\n}\n","import React from 'react'\nimport * as d3 from 'd3'\n\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { arcTween } from '../../utils/BubblesSVG'\n\nimport type { BubbleData } from '../BubbleChart'\n\nconst PROGRESS_INDICATOR_SIZE = 5\nconst PROGRESS_DURATION = 2000\n\ninterface MercuryProps {\n bubble: BubbleData\n}\n\nexport function Mercury({ bubble }: MercuryProps) {\n const theme = useTheme()\n const {\n guid,\n budgetColors: { mercury },\n radius,\n } = bubble\n\n const bubbleId = `mercury-${guid}`\n\n React.useEffect(() => {\n // Remove previous status arc\n d3.select(`.${bubbleId}`).selectAll('.status').remove()\n\n // Append updated status arc\n d3.select(`.${bubbleId}`)\n .append('path')\n .transition()\n .duration(PROGRESS_DURATION)\n .delay(0)\n .attr('class', 'status')\n .attr('style', `fill: ${mercury}; fill-opacity: 1;`)\n .attrTween('d', () => arcTween(bubble))\n }, [bubble])\n\n const trackArc = d3\n .arc<number>()\n .innerRadius((radius: number) => radius - 2 * PROGRESS_INDICATOR_SIZE)\n .outerRadius((radius: number) => radius - PROGRESS_INDICATOR_SIZE)\n .startAngle(0)\n .endAngle(2 * Math.PI)\n\n return (\n <g className={bubbleId}>\n <path\n d={trackArc(radius) || ''}\n style={{ fill: theme.palette.common.white, fillOpacity: 0.35 }}\n />\n </g>\n )\n}\n","import React from 'react'\n\nimport Tooltip from '@mui/material/Tooltip'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport { Mercury } from './Mercury'\n\nimport type { DetailedBudget } from '../../../common'\nimport type { BubbleData } from '../BubbleChart'\n\nconst LARGE_THRESHOLD = 75\nconst MEDIUM_THRESHOLD = 50\n\ninterface BubbleProps {\n bubble: BubbleData\n isDraggable: boolean\n onClick?: (budget: DetailedBudget) => void\n}\n\nexport function Bubble({ bubble, isDraggable, onClick = () => {} }: BubbleProps) {\n const [showTooltip, setShowTooltip] = React.useState(false)\n\n if (!bubble) return undefined\n\n const {\n budgetColors: { background, text: textColor },\n category: { icon, name },\n guid,\n description,\n radius,\n x,\n y,\n } = bubble\n\n let iconX = -12\n let iconY = -12\n if (radius > LARGE_THRESHOLD) {\n iconX = -14\n iconY = -45\n } else if (radius > MEDIUM_THRESHOLD) {\n iconY = -32\n }\n\n const tooltipText = `${bubble.category.name}: ${description}`\n const tooltipPopperSlot = {\n modifiers: [\n {\n name: 'offset',\n options: { offset: [0, 15] },\n },\n ],\n }\n\n return (\n <g\n className=\"bubble\"\n id={`bubble-${guid}`}\n key={guid}\n onClick={() => onClick(bubble)}\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n style={{ cursor: isDraggable ? 'pointer' : 'default' }}\n textAnchor=\"middle\"\n x={x}\n y={y}\n >\n <Tooltip\n followCursor={true}\n open={showTooltip}\n slotProps={{ popper: tooltipPopperSlot }}\n title={tooltipText}\n >\n <circle fill={background} id={`circle-${guid}`} r={radius} />\n </Tooltip>\n\n <svg x={iconX} y={iconY}>\n <Icon name={icon} size={radius <= LARGE_THRESHOLD ? 24 : 32} sx={{ fill: textColor }} />\n </svg>\n\n {radius > LARGE_THRESHOLD && (\n <Text\n bold={true}\n component=\"text\"\n id={`budget-category-${guid}`}\n sx={{ fill: textColor }}\n variant=\"Small\"\n /* @ts-expect-error Property doesn't exist on type */\n y={4}\n >\n {name}\n </Text>\n )}\n\n {radius > MEDIUM_THRESHOLD && (\n <Text\n bold={true}\n component=\"text\"\n id={`budget-description-${guid}-1`}\n sx={{ fill: textColor }}\n variant=\"Body\"\n /* @ts-expect-error Property doesn't exist on type */\n y={radius <= LARGE_THRESHOLD ? 12 : 24}\n >\n {radius <= LARGE_THRESHOLD ? description.split(' ')[0] : description}\n </Text>\n )}\n\n {radius <= LARGE_THRESHOLD && radius > MEDIUM_THRESHOLD && (\n <Text\n component=\"text\"\n id={`budget-description-${guid}-2`}\n sx={{ fill: textColor }}\n variant=\"XSmall\"\n /* @ts-expect-error Property doesn't exist on type */\n y={28}\n >\n {description.split(' ')[1]}\n </Text>\n )}\n\n <Mercury bubble={bubble} />\n </g>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { SimulationNodeDatum } from 'd3-force'\n\nimport { DetailedBudget, useBudgetsStore } from '../../common'\n\nimport { enableDrag, resize, simulate, SimulationType } from '../utils/BubblesSVG'\nimport { Bubble } from './bubblechart/Bubble'\n\nexport interface BubbleData extends DetailedBudget, SimulationNodeDatum {\n radius: number\n}\n\ninterface BubbleChartProps {\n height: number\n width: number\n isDraggable?: boolean\n onClick?: (budget: DetailedBudget) => void\n}\n\nlet simulation: SimulationType\n\nconst BubbleChart: React.FC<BubbleChartProps> = ({\n height,\n width,\n isDraggable = false,\n onClick = () => {},\n}) => {\n const { detailedBudgets: budgets } = useBudgetsStore()\n\n simulation = React.useMemo(() => simulate(budgets), [budgets])\n\n React.useEffect(() => {\n resize(simulation, height, width)\n\n if (isDraggable) {\n enableDrag(simulation)\n }\n }, [simulation, height, width])\n\n return (\n <svg height={height} style={{ overflow: 'visible' }} width={Math.abs(width)}>\n {simulation.nodes().map((bubble) => (\n <Bubble bubble={bubble} isDraggable={isDraggable} key={bubble.guid} onClick={onClick} />\n ))}\n </svg>\n )\n}\n\nexport default observer(BubbleChart)\n","import React from 'react'\n\nimport {\n EmptyState,\n Loader,\n useBudgetsStore,\n useCategoryStore,\n useGlobalCopyStore,\n} from '../../common'\n\ninterface BudgetsEmptyStateProps {\n isMiniWidget?: boolean\n onConnectAccountsClick: () => void\n createBudgetOnClick: () => void\n}\nexport const BudgetsEmptyState: React.FC<BudgetsEmptyStateProps> = ({\n isMiniWidget = false,\n onConnectAccountsClick,\n createBudgetOnClick,\n}) => {\n const { recalculateBudgets } = useBudgetsStore()\n\n const { spendCategories } = useCategoryStore()\n\n const { budgets: copy } = useGlobalCopyStore()\n\n const [shouldShowEmptyGeneratedBudgets, setShouldShowEmptyGeneratedBudgets] =\n React.useState(false)\n\n const [isError, setError] = React.useState(false)\n\n const [recalculateBudgetsLoading, setRecalculateBudgetsLoading] = React.useState(false)\n\n const newBudgetCategories = React.useMemo(() => {\n return [...spendCategories.filter((category) => category.totalAverageAmount > 0)]\n }, [spendCategories])\n\n const autoGenerateBudgets = async () => {\n setRecalculateBudgetsLoading(true)\n const { data, isSuccess } = await recalculateBudgets(newBudgetCategories)\n setRecalculateBudgetsLoading(false)\n if (isSuccess) {\n if (data.length === 0) {\n setShouldShowEmptyGeneratedBudgets(true)\n }\n setError(false)\n } else {\n setError(true)\n }\n }\n\n if (recalculateBudgetsLoading) {\n return <Loader />\n }\n if (isError) {\n return (\n <EmptyState\n header={copy.autogenerate_budgets_error_header}\n icon={'error'}\n iconColor=\"#4D4D4D\"\n onClick={(buttonType) => {\n if (buttonType === 'primary') {\n autoGenerateBudgets()\n } else {\n createBudgetOnClick()\n }\n }}\n primaryButton={copy.autogenerate_budgets_error_primary_button}\n secondaryButton={copy.zero_state_generate_budgets_secondary_button}\n subText={copy.autogenerate_budgets_error_subheader}\n sx={{\n width: { sm: 468 },\n '.buttons-footer': {\n width: 208,\n },\n }}\n />\n )\n }\n\n return (\n <>\n {shouldShowEmptyGeneratedBudgets ? (\n <EmptyState\n header={copy.zero_state_generate_budgets_header}\n icon=\"error\"\n iconColor=\"#4D4D4D\"\n onClick={(buttonType: string) => {\n if (buttonType === 'primary') {\n onConnectAccountsClick()\n } else {\n createBudgetOnClick()\n }\n }}\n primaryButton={copy.zero_state_generate_budgets_primary_button}\n secondaryButton={copy.zero_state_generate_budgets_secondary_button}\n subText={copy.zero_state_generate_budgets_subheader}\n sx={{\n width: isMiniWidget ? '100%' : { sm: 500 },\n height: isMiniWidget ? '100%' : { sm: 468 },\n mt: 50,\n '.buttons-footer': {\n width: 208,\n height: 100,\n },\n padding: isMiniWidget ? 5 : 0,\n }}\n />\n ) : (\n <EmptyState\n header={copy.create_budgets_title}\n icon=\"bubble_chart\"\n iconColor=\"#1A1A1A\"\n onClick={(buttonType: string) => {\n if (buttonType === 'primary') {\n autoGenerateBudgets()\n } else {\n createBudgetOnClick()\n }\n }}\n primaryButton={copy.empty_state_primary_button}\n secondaryButton={!isMiniWidget ? copy.empty_state_secondary_button : undefined}\n subText={copy.empty_state_subheader}\n sx={{\n width: isMiniWidget ? '100%' : { sm: 432 },\n height: isMiniWidget ? '100%' : { sm: 468 },\n mt: 50,\n '.buttons-footer': {\n width: 208,\n height: 100,\n },\n padding: isMiniWidget ? 4 : 0,\n }}\n />\n )}\n </>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nimport ConnectionsDrawer from '../../accounts/components/ConnectionsDrawer'\nimport BubbleChart from './BubbleChart'\n\nimport {\n type DetailedBudget,\n ANALYTICS_EVENTS,\n useBudgetsStore,\n useEvent,\n useGlobalUiStore,\n useWidgetContainerProvider,\n useCategoryStore,\n Loader,\n useScreenSize,\n useGlobalCopyStore,\n} from '../../common'\n\nimport { BudgetsEmptyState } from './BudgetsEmptyState'\n\ninterface BubbleBudgetsProps {\n createBudgetOnClick?: () => void\n height: number\n isDraggable?: boolean\n isMiniWidget?: boolean\n shouldShowZeroState: boolean\n unavailableWidth?: number\n}\n\nexport const BubbleBudgets: React.FC<BubbleBudgetsProps> = observer(\n ({\n createBudgetOnClick = () => {},\n height,\n isDraggable = false,\n isMiniWidget = false,\n shouldShowZeroState,\n unavailableWidth = 24,\n }) => {\n const { onEvent } = useEvent()\n const { setSelectedBudget } = useBudgetsStore()\n const { isLoadingCategoryTotals } = useCategoryStore()\n const { isInitialized } = useGlobalUiStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { availableWidth } = useWidgetContainerProvider()\n const { isMobile } = useScreenSize()\n\n const [showConnectionsWidget, setShowConnectionsWidget] = React.useState(false)\n\n const width = React.useMemo(() => {\n return availableWidth - unavailableWidth\n }, [availableWidth])\n\n const handleBubbleClick = (budget: DetailedBudget) => {\n setSelectedBudget(budget)\n onEvent(ANALYTICS_EVENTS.BUDGETS_CLICK_BUDGET_CATEGORY, {\n budget_category: budget.category.name,\n click_type: 'bubble',\n })\n }\n\n const handleManageConnections = () => {\n setShowConnectionsWidget(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_CONNECT)\n }\n\n if (isLoadingCategoryTotals) {\n return (\n <Stack alignItems=\"center\" height={height} justifyContent=\"center\" width={Math.abs(width)}>\n <Loader />\n </Stack>\n )\n }\n\n return (\n <Box ml={shouldShowZeroState || isMobile ? 0 : 24} sx={{ alignSelf: 'center' }}>\n {shouldShowZeroState || !isInitialized ? (\n <BudgetsEmptyState\n createBudgetOnClick={createBudgetOnClick}\n isMiniWidget={isMiniWidget}\n onConnectAccountsClick={handleManageConnections}\n />\n ) : (\n <BubbleChart\n height={height}\n isDraggable={isDraggable}\n onClick={handleBubbleClick}\n width={width}\n />\n )}\n\n <ConnectionsDrawer\n onClose={() => setShowConnectionsWidget(false)}\n showConnectionsWidget={showConnectionsWidget}\n title={accountsCopy.manage_connections}\n />\n </Box>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n formatCurrency,\n useBudgetsStore,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../common'\n\nexport const Header = observer(() => {\n const { budgets: copy } = useGlobalCopyStore()\n const { totalBudgeted } = useBudgetsStore()\n const { incomeTotal } = useRecurringTransactionsStore()\n\n const remaining = incomeTotal - totalBudgeted\n\n return (\n <Stack direction=\"row\" justifyContent=\"center\" my={16} spacing={20}>\n <Stack alignItems=\"center\">\n <Text bold={true} variant=\"Body\">\n {formatCurrency(incomeTotal, '0,0')}\n </Text>\n <Text color=\"secondary\" variant=\"Small\">\n {copy.projected_income}\n </Text>\n </Stack>\n\n <Text bold={true} justifyContent=\"center\" variant=\"Body\">\n {'-'}\n </Text>\n\n <Stack alignItems=\"center\">\n <Text bold={true} variant=\"Body\">\n {formatCurrency(totalBudgeted, '0,0')}\n </Text>\n <Text color=\"secondary\" variant=\"Small\">\n {copy.budgeted}\n </Text>\n </Stack>\n\n <Text bold={true} justifyContent=\"center\" variant=\"Body\">\n {'='}\n </Text>\n\n <Stack alignItems=\"center\">\n <Text bold={true} variant=\"Body\">\n {formatCurrency(remaining, '0,0')}\n </Text>\n <Text color=\"secondary\" variant=\"Small\">\n {copy.remaining}\n </Text>\n </Stack>\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { CategoryIcon } from '@mxenabled/mxui'\n\nimport {\n type DetailedCategory,\n buildDynamicCopy,\n formatCurrency,\n useBudgetsStore,\n useGlobalCopyStore,\n} from '../../../common'\n\ninterface RecalculateBudgetRowProps {\n category: DetailedCategory\n}\n\nexport const RecalculateBudgetRow: React.FC<RecalculateBudgetRowProps> = observer(\n ({ category }) => {\n const { budgets: copy } = useGlobalCopyStore()\n const { budgets } = useBudgetsStore()\n\n const secondaryText = React.useMemo(() => {\n const budget = budgets.find((b) => b.category_guid === category.guid)\n const part1 = formatCurrency(category.totalAverageAmount, '0,0')\n const part2 = budget\n ? buildDynamicCopy(copy.recalculate_previous_budget, formatCurrency(budget.amount, '0,0'))\n : copy.recalculate_new_budget\n\n return `${part1} - ${part2}`\n }, [copy, budgets])\n\n return (\n <React.Fragment key={category.guid}>\n <ListItem>\n <ListItemButton>\n <ListItemAvatar>\n <CategoryIcon categoryGuid={category.guid} variant=\"filled\" />\n </ListItemAvatar>\n <ListItemText primary={category.name} secondary={secondaryText} />\n </ListItemButton>\n </ListItem>\n <Divider />\n </React.Fragment>\n )\n },\n)\n","import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport List from '@mui/material/List'\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { Drawer, useBudgetsStore, useCategoryStore, useGlobalCopyStore } from '../../../common'\n\nimport { RecalculateBudgetRow } from './RecalculateBudgetRow'\n\ninterface RecalculateBudgetsProps {\n onRecalculateBudgets?: () => void\n}\n\nexport const RecalculateBudgets = ({ onRecalculateBudgets }: RecalculateBudgetsProps) => {\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const { spendCategories } = useCategoryStore()\n const { recalculateBudgets, setAlert } = useBudgetsStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const newBudgetCategories = spendCategories.filter((category) => category.totalAverageAmount > 0)\n\n const handlePrimaryClick = async () => {\n await recalculateBudgets(newBudgetCategories)\n\n setIsOpen(false)\n setAlert(copy.alert_recalculated_budgets)\n onRecalculateBudgets?.()\n }\n\n return (\n <React.Fragment>\n <Button onClick={() => setIsOpen(true)} sx={{ mt: 24, mx: 24 }} variant=\"text\">\n {copy.recalculate_button}\n </Button>\n\n <Text sx={{ mx: 24, my: 16, textAlign: 'center', whiteSpace: 'wrap' }} variant=\"Paragraph\">\n {copy.recalculate_help}\n </Text>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onPrimaryAction={handlePrimaryClick}\n title={copy.recalculate_title}\n >\n <Stack>\n <Stack mx={24} my={16}>\n <Text bold={true} variant=\"Body\">\n {copy.recalculate_description_top}\n </Text>\n <Text variant=\"ParagraphSmall\">{copy.recalculate_description_bottom}</Text>\n </Stack>\n <Box bgcolor=\"background.paper\">\n <List>\n {newBudgetCategories.map((category) => (\n <RecalculateBudgetRow category={category} key={category.guid} />\n ))}\n </List>\n </Box>\n </Stack>\n </Drawer>\n </React.Fragment>\n )\n}\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport { Text } from '@mxenabled/mxui'\nimport {\n buildDynamicCopy,\n CurrencyInput,\n formatCurrency,\n useBudgetsStore,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../common'\n\ninterface BudgetAmountProps {\n amount: string\n categoryName: string\n onAmountChanged: (amount: string) => void\n}\n\nexport const BudgetAmount: React.FC<BudgetAmountProps> = ({\n amount,\n categoryName,\n onAmountChanged,\n}) => {\n const { budgets: copy } = useGlobalCopyStore()\n const { totalBudgeted } = useBudgetsStore()\n const { incomeTotal } = useRecurringTransactionsStore()\n\n const unbudgetedIncome = incomeTotal - totalBudgeted\n\n return (\n <Stack gap={16}>\n <Stack>\n <Text>\n {\n buildDynamicCopy(\n copy.add_description_top,\n formatCurrency(unbudgetedIncome, '0,0'),\n ) as string\n }\n </Text>\n <Text>{buildDynamicCopy(copy.add_description_bottom, categoryName) as string}</Text>\n </Stack>\n <CurrencyInput\n amount={amount}\n autoFocus={true}\n label={copy.add_label}\n minAmount={0}\n setAmount={onAmountChanged}\n sx={{ '.MuiTypography-Body': { p: 0 } }}\n />\n </Stack>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { CategoryIcon, Icon } from '@mxenabled/mxui'\n\nimport { type DetailedCategory, Dialog, formatCurrency, useGlobalCopyStore } from '../../../common'\n\nimport { BudgetAmount } from '../shared/BudgetAmount'\n\ninterface UnbudgetedRowProps {\n category: DetailedCategory\n onAddBudget: (category: DetailedCategory, amount: number) => void\n}\n\nexport const UnbudgetedRow: React.FC<UnbudgetedRowProps> = observer(({ category, onAddBudget }) => {\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n\n const [isAddBudgetOpen, setIsAddBudgetOpen] = React.useState(false)\n const [amount, setAmount] = React.useState(\n `${category.totalAmount === 0 ? '' : category.totalAmount}`,\n )\n\n return (\n <React.Fragment>\n <ListItem key={category.guid}>\n <ListItemButton onClick={() => setIsAddBudgetOpen(true)}>\n <ListItemAvatar>\n <CategoryIcon categoryGuid={category.guid} />\n </ListItemAvatar>\n <ListItemText\n primary={category.name}\n secondary={formatCurrency(category.totalAmount, '0,0')}\n />\n <ListItemSecondaryAction>\n <Icon name=\"add\" size={20} />\n </ListItemSecondaryAction>\n </ListItemButton>\n </ListItem>\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.add_title }}\n disablePrimaryButton={Number(amount) <= 0}\n isOpen={isAddBudgetOpen}\n onClose={() => setIsAddBudgetOpen(false)}\n onPrimaryAction={() => onAddBudget(category, Number(amount))}\n primaryText={copy.add_save_button}\n >\n <BudgetAmount amount={amount} categoryName={category.name} onAmountChanged={setAmount} />\n </Dialog>\n </React.Fragment>\n )\n})\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport {\n buildDynamicCopy,\n type DetailedCategory,\n useBudgetsStore,\n useGlobalCopyStore,\n} from '../../common'\n\nimport { Header } from './addbudget/Header'\nimport { RecalculateBudgets } from './addbudget/RecalculateBudgets'\nimport { UnbudgetedRow } from './addbudget/UnbudgetedRow'\n\ninterface AddBudgetsProps {\n onRecalculateBudgets?: () => void\n}\n\nexport const AddBudgets = observer(({ onRecalculateBudgets }: AddBudgetsProps) => {\n const { budgets: copy } = useGlobalCopyStore()\n const { addBudget, setAlert, unbudgetedCategories } = useBudgetsStore()\n\n const handleOnAddBudget = async (category: DetailedCategory, amount: number) => {\n await addBudget(category, amount)\n setAlert(buildDynamicCopy(copy.alert_budget_created, category.name) as string)\n }\n\n return (\n <Stack>\n <Header />\n\n <Box bgcolor=\"background.paper\">\n <List>\n {unbudgetedCategories.map((category) => (\n <UnbudgetedRow\n category={category}\n key={category.guid}\n onAddBudget={handleOnAddBudget}\n />\n ))}\n </List>\n </Box>\n\n <RecalculateBudgets onRecalculateBudgets={onRecalculateBudgets} />\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n formatCurrency,\n Loader,\n MiniWidgetContainer,\n MiniWidgetProps,\n useBudgetsStore,\n useCategoryStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n} from '../common'\n\nimport { useGetBudgetDifference } from './utils/BudgetUtil'\nimport { BubbleBudgets } from './components/BubbleBudgets'\nimport { AddBudgets } from './components/AddBudgets'\n\nconst BubbleBudgetsMiniWidget = (props: MiniWidgetProps) => {\n const theme = useTheme()\n\n const { onEvent } = useEvent()\n const { detailedBudgets: budgets, isDataLoaded, loadBudgetData, setTheme } = useBudgetsStore()\n const { budgets: budgetsCopy, common: commonCopy } = useGlobalCopyStore()\n const { isCopyLoaded, isInitialized, selectedAccounts } = useGlobalUiStore()\n const { reloadCategoryTotals } = useCategoryStore()\n const difference = useGetBudgetDifference()\n const shouldShowZeroState = budgets.length === 0\n\n const [isAddOpen, setIsAddOpen] = React.useState(false)\n\n const handleAddClick = () => {\n setIsAddOpen(true)\n onEvent(ANALYTICS_EVENTS.BUDGETS_CLICK_ADD)\n }\n\n const handleBudgetsRecalculated = () => {\n setIsAddOpen(false)\n }\n\n React.useEffect(() => {\n setTheme(theme)\n }, [theme])\n\n React.useEffect(() => {\n if (isInitialized && !isDataLoaded) {\n reloadCategoryTotals(selectedAccounts, startOfMonth(new Date()), endOfMonth(new Date())).then(\n () => {\n loadBudgetData().finally()\n },\n )\n }\n }, [isInitialized, selectedAccounts])\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <MiniWidgetContainer\n primaryCtaLabel={shouldShowZeroState ? budgetsCopy.get_started_cta : budgetsCopy.details_cta}\n title={budgetsCopy.budgets_title}\n {...props}\n >\n {!isDataLoaded ? (\n <Loader />\n ) : (\n <Stack height={450} mt={32}>\n <BubbleBudgets\n createBudgetOnClick={handleAddClick}\n height={370}\n isMiniWidget={true}\n shouldShowZeroState={shouldShowZeroState}\n />\n {!shouldShowZeroState && (\n <Box ml={16}>\n <Text bold={true} color={difference < 0 ? 'error.main' : 'success.main'}>\n {formatCurrency(Math.abs(difference), '0,0')}\n </Text>\n <Text>\n {difference < 0 ? budgetsCopy.overspent_in_budgets : budgetsCopy.left_in_budgets}\n </Text>\n </Box>\n )}\n </Stack>\n )}\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isAddOpen}\n onClose={() => setIsAddOpen(false)}\n title={budgetsCopy.add_new_title}\n >\n <AddBudgets onRecalculateBudgets={handleBudgetsRecalculated} />\n </Drawer>\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(BubbleBudgetsMiniWidget)\n","import React from 'react'\n\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport Stack from '@mui/material/Stack'\n\nimport { CategoryIcon, H1, Text } from '@mxenabled/mxui'\n\nimport { DetailedBudget, formatCurrency, StatusBar } from '../../../common'\n\ninterface HeaderProps {\n budget: DetailedBudget\n}\n\nexport const Header: React.FC<HeaderProps> = ({ budget }) => {\n const {\n amount,\n budgetColors: { background },\n category: { name: categoryName },\n category_guid,\n percentage,\n transaction_total,\n } = budget\n\n const status = [\n {\n color: background,\n percentage: `${percentage}%`,\n },\n ]\n\n return (\n <Card sx={{ mt: 24, mx: 24 }}>\n <CardContent>\n <Stack alignItems=\"center\" gap={16}>\n <CategoryIcon categoryGuid={category_guid} size={56} />\n <H1>\n {`${formatCurrency(transaction_total, '0,0')} / ${formatCurrency(amount, '0,0')}`}\n </H1>\n <Text bold={true} variant=\"XSmall\">\n {categoryName}\n </Text>\n <StatusBar data={status} height={10} />\n </Stack>\n </CardContent>\n </Card>\n )\n}\n","import Stack from '@mui/material/Stack'\nimport { observer } from 'mobx-react-lite'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../common'\n\nexport const SubBudgetZeroState = observer(() => {\n const { budgets: copy } = useGlobalCopyStore()\n\n return (\n <Stack alignItems=\"center\" gap={12} height=\"auto\" mb={24} mt={24}>\n <Icon color=\"secondary\" name=\"bubble_chart\" sx={{ fontSize: 32 }} />\n <Text bold={true} color=\"secondary\" variant=\"Small\">\n {copy.zero_state_no_sub_budgets}\n </Text>\n <Text color=\"text.secondary\" variant=\"XSmall\">\n {copy.zero_state_no_sub_budgets_description}\n </Text>\n </Stack>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { CategoryIcon, Text } from '@mxenabled/mxui'\n\nimport {\n type DetailedBudget,\n formatCurrency,\n SingleSegmentDonut,\n useBudgetsStore,\n} from '../../../common'\n\ninterface SubBudgetRowProps {\n budget: DetailedBudget\n}\n\nexport const SubBudgetRow: React.FC<SubBudgetRowProps> = observer(({ budget }) => {\n const {\n amount,\n budgetColors: { background },\n category,\n percentage,\n transaction_total,\n } = budget\n\n const { setSelectedSubBudget } = useBudgetsStore()\n\n return (\n <ListItem>\n <ListItemButton onClick={() => setSelectedSubBudget(budget)}>\n <ListItemAvatar sx={{ mb: -8, mr: 16 }}>\n <SingleSegmentDonut color={background} percent={percentage} size={40}>\n <CategoryIcon categoryGuid={category.parent_guid} variant=\"basic\" />\n </SingleSegmentDonut>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Stack component=\"span\" direction=\"row\" justifyContent=\"space-between\">\n <Text bold={true} variant=\"Body\">\n {budget.category.name}\n </Text>\n </Stack>\n }\n secondary={\n <Stack component=\"span\" direction=\"row\" justifyContent=\"space-between\">\n <Text fontWeight={400} variant=\"Body\">\n {`\n ${formatCurrency(transaction_total, '0,0')} / \n ${formatCurrency(amount, '0,0')}\n `}\n </Text>\n </Stack>\n }\n />\n </ListItemButton>\n </ListItem>\n )\n})\n","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 ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport {\n type DetailedBudget,\n type DetailedCategory,\n Dialog,\n Drawer,\n useBudgetsStore,\n useGlobalCopyStore,\n} from '../../../common'\nimport { CategoryRow, useCategoryUiStore } from '../../../categories'\nimport { BudgetAmount } from '../shared/BudgetAmount'\n\ninterface AddSubBudgetProps {\n category: DetailedCategory\n parentBudget: DetailedBudget\n}\n\nexport const AddSubBudget: React.FC<AddSubBudgetProps> = observer(({ category, parentBudget }) => {\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const { setExpandedGuid, setOnSelect } = useCategoryUiStore()\n const { addBudget } = useBudgetsStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n const [isAddBudgetOpen, setIsAddBudgetOpen] = React.useState(false)\n const [amount, setAmount] = React.useState('')\n const [subCategory, setSubCategory] = React.useState<DetailedCategory | undefined>(undefined)\n\n React.useEffect(() => {\n setOnSelect((guid: string) => {\n const subCategory = category.subCategories.find((sc) => sc.guid === guid)\n if (subCategory) {\n setSubCategory(subCategory)\n setAmount(`${subCategory.currentAmount === 0 ? '' : subCategory.currentAmount}`)\n setIsAddBudgetOpen(true)\n }\n })\n }, [])\n\n const handleOpen = () => {\n setExpandedGuid(category.guid)\n setIsOpen(true)\n }\n\n const handleAddSubBudget = async () => {\n if (subCategory && Number(amount) > 0) {\n await addBudget(subCategory, Number(amount), parentBudget.guid)\n setIsAddBudgetOpen(false)\n setIsOpen(false)\n setSubCategory(undefined)\n }\n }\n\n return (\n <Box>\n <ListItem disableGutters={true} disablePadding={true} sx={{ bgcolor: 'background.paper' }}>\n <ListItemButton onClick={handleOpen}>\n <ListItemText>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <Icon fill={true} name=\"add_box\" size={24} sx={{ color: 'primary.light' }} />\n <Text bold={true} sx={{ color: 'primary.light' }} variant=\"Body\">\n {copy.add_sub_budget_button}\n </Text>\n </Stack>\n <Icon name=\"chevron_right\" size={24} sx={{ color: 'primary.light' }} />\n </Stack>\n </ListItemText>\n </ListItemButton>\n </ListItem>\n <Divider />\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n title={copy.add_sub_budget_title}\n >\n <List>\n <CategoryRow category={category} subCategories={category.subCategories} />\n </List>\n </Drawer>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.add_title }}\n disablePrimaryButton={Number(amount) <= 0}\n isOpen={isAddBudgetOpen}\n onClose={() => setIsAddBudgetOpen(false)}\n onPrimaryAction={handleAddSubBudget}\n primaryText={copy.add_save_button}\n >\n <BudgetAmount\n amount={amount}\n categoryName={subCategory?.name || ''}\n onAmountChanged={setAmount}\n />\n </Dialog>\n </Box>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n type Budget,\n type DetailedBudget,\n type Transaction,\n buildDynamicCopy,\n Dialog,\n Drawer,\n useBudgetsStore,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../common'\n\nimport { TransactionList } from '../../../transactions'\n\nimport { SubBudgetZeroState } from '../budgetlist/SubBudgetZeroState'\nimport { SubBudgetRow } from '../budgetlist/SubBudgetRow'\nimport { BudgetAmount } from '../shared/BudgetAmount'\nimport { AddSubBudget } from './AddSubBudget'\nimport { Header } from './Header'\n\ninterface SubBudgetListProps {\n budget: DetailedBudget\n}\n\nexport const SubBudgetList: React.FC<SubBudgetListProps> = observer(({ budget }) => {\n const { category, subBudgets } = budget\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const { deleteBudget, selectedSubBudget, setSelectedSubBudget, updateBudget } = useBudgetsStore()\n const { filter, setFilter } = useTransactionStore()\n\n const [isEditOpen, setIsEditOpen] = React.useState(false)\n const [isDeleteOpen, setIsDeleteOpen] = React.useState(false)\n const [amount, setAmount] = React.useState(``)\n\n React.useEffect(() => {\n if (selectedSubBudget) {\n setAmount(`${selectedSubBudget.amount}`)\n setFilter({\n ...filter,\n custom: (t: Transaction) => t.category_guid === selectedSubBudget.category_guid,\n })\n }\n }, [selectedSubBudget])\n\n const handleUpdateBudget = async () => {\n if (selectedSubBudget) {\n await updateBudget({\n ...selectedSubBudget,\n amount: Number(amount),\n } as Budget)\n }\n }\n\n const handleDeleteBudget = async () => {\n if (selectedSubBudget) {\n await deleteBudget(selectedSubBudget.guid)\n }\n setIsDeleteOpen(false)\n handleClose()\n }\n\n const handleClose = () => {\n setFilter({\n ...filter,\n custom: (t: Transaction) =>\n t.category_guid === budget.category_guid ||\n t.top_level_category_guid === budget.category_guid,\n })\n setSelectedSubBudget(undefined)\n }\n\n return (\n <React.Fragment>\n <List sx={{ bgcolor: 'background.paper' }}>\n {subBudgets.length === 0 ? (\n <SubBudgetZeroState />\n ) : (\n subBudgets.map((subBudget) => (\n <React.Fragment key={subBudget.guid}>\n <SubBudgetRow budget={subBudget} />\n <Divider />\n </React.Fragment>\n ))\n )}\n <AddSubBudget category={category} parentBudget={budget} />\n </List>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={Boolean(selectedSubBudget)}\n onClose={handleClose}\n onPrimaryAction={() => setIsEditOpen(true)}\n onSecondaryAction={() => setIsDeleteOpen(true)}\n primaryText={copy.details_edit_button}\n secondaryText={copy.details_delete_button}\n title={copy.details_title}\n >\n {selectedSubBudget && (\n <Stack gap={24}>\n <Header budget={selectedSubBudget} />\n <TransactionList height=\"100%\" />\n </Stack>\n )}\n </Drawer>\n\n {selectedSubBudget && (\n <React.Fragment>\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.details_edit_title }}\n disablePrimaryButton={Number(amount) <= 0}\n isOpen={isEditOpen}\n onClose={() => setIsEditOpen(false)}\n onPrimaryAction={handleUpdateBudget}\n primaryText={copy.edit_save_button}\n >\n <BudgetAmount\n amount={amount}\n categoryName={selectedSubBudget.category.name}\n onAmountChanged={setAmount}\n />\n </Dialog>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.delete_title }}\n isOpen={isDeleteOpen}\n onClose={() => setIsDeleteOpen(false)}\n onPrimaryAction={handleDeleteBudget}\n primaryColor=\"error\"\n primaryText=\"Delete\"\n secondaryColor=\"secondary\"\n >\n <Text variant=\"Paragraph\">\n {buildDynamicCopy(copy.delete_description, selectedSubBudget.category.name) as string}\n </Text>\n </Dialog>\n </React.Fragment>\n )}\n </React.Fragment>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { Icon } from '@mxenabled/mxui'\n\nimport {\n type DetailedBudget,\n Drawer,\n useAppConfig,\n useBudgetsStore,\n useGlobalCopyStore,\n useScreenSize,\n useTransactionStore,\n} from '../../../common'\n\nimport { exportTransactionsToCSV, TransactionDetails, TransactionList } from '../../../transactions'\n\nimport { Header } from './Header'\nimport { SubBudgetList } from './SubBudgetList'\n\ninterface BudgetDetailsProps {\n budget: DetailedBudget\n}\n\nexport const BudgetDetails: React.FC<BudgetDetailsProps> = observer(({ budget }) => {\n const { is_mobile_webview } = useAppConfig()\n const { setAlert } = useBudgetsStore()\n const { budgets: copy, common: commonCopy, transactions: transactionCopy } = useGlobalCopyStore()\n const { isDesktop } = useScreenSize()\n const {\n sortedTransactions: transactions,\n sortedTransactionsWithSplits,\n tags,\n } = useTransactionStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n }\n\n const handleExportToCsv = () => {\n exportTransactionsToCSV(sortedTransactionsWithSplits, tags)\n setAlert(copy.alert_csv_downloaded)\n }\n\n const shouldShowExportButton = transactions.length > 0 && !is_mobile_webview && isDesktop\n\n return (\n <Stack gap={24}>\n <Header budget={budget} />\n\n <Stack>\n <Tabs\n onChange={handleTabChange}\n sx={{ width: '100%' }}\n textColor=\"primary\"\n value={selectedTab}\n variant=\"fullWidth\"\n >\n <Tab label={copy.details_transactions_tab} />\n <Tab label={copy.details_subbudgets_tab} />\n </Tabs>\n {selectedTab === 0 && (\n <Stack>\n {shouldShowExportButton && (\n <Stack direction=\"row\" justifyContent=\"right\" mb={-24} mr={8} mt={8} zIndex={1}>\n <Button\n onClick={handleExportToCsv}\n startIcon={<Icon name=\"ios_share\" />}\n variant=\"text\"\n >\n {transactionCopy.export_csv_btn}\n </Button>\n </Stack>\n )}\n <TransactionList height=\"100%\" onClick={setTransactionGuid} />\n </Stack>\n )}\n {selectedTab === 1 && <SubBudgetList budget={budget} />}\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={Boolean(transaction)}\n onClose={() => setTransactionGuid('')}\n title={copy.details_transaction_drawer}\n >\n {transaction && <TransactionDetails transaction={transaction} />}\n </Drawer>\n </Stack>\n </Stack>\n )\n})\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n type Budget,\n type Transaction,\n buildDynamicCopy,\n Dialog,\n Drawer,\n useBudgetsStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n} from '../../common'\n\nimport { BudgetDetails } from './budgetdetails/BudgetDetails'\nimport { BudgetAmount } from './shared/BudgetAmount'\n\nexport const BudgetDetailsDrawer = observer(() => {\n const { selectedAccountGuids } = useGlobalUiStore()\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const {\n dateRange,\n deleteBudget,\n selectedBudget,\n selectedSubBudget,\n setAlert,\n setSelectedBudget,\n updateBudget,\n } = useBudgetsStore()\n const { setFilter } = useTransactionStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n const [isEditOpen, setIsEditOpen] = React.useState(false)\n const [isDeleteOpen, setIsDeleteOpen] = React.useState(false)\n const [amount, setAmount] = React.useState(``)\n\n React.useEffect(() => {\n if (selectedBudget && !selectedSubBudget) {\n setAmount(`${selectedBudget.amount}`)\n setIsOpen(true)\n setFilter({\n accounts: selectedAccountGuids,\n dateRange: dateRange,\n custom: (t: Transaction) =>\n t.category_guid === selectedBudget.category_guid ||\n t.top_level_category_guid === selectedBudget.category_guid,\n })\n }\n }, [selectedBudget])\n\n const handleUpdateBudget = async () => {\n if (selectedBudget) {\n await updateBudget({\n ...selectedBudget,\n amount: Number(amount),\n percentage: (selectedBudget.category.totalAmount / Number(amount)) * 100,\n } as Budget)\n\n setAlert(buildDynamicCopy(copy.alert_budget_updated, selectedBudget.category.name) as string)\n }\n }\n\n const handleDeleteBudget = async () => {\n if (selectedBudget) {\n await deleteBudget(selectedBudget.guid)\n setAlert(buildDynamicCopy(copy.alert_budget_deleted, selectedBudget.category.name) as string)\n }\n setIsDeleteOpen(false)\n handleClose()\n }\n\n const handleClose = () => {\n setIsOpen(false)\n // Wait for the close animation before set the selected budget\n setTimeout(() => {\n setSelectedBudget(undefined)\n }, 250)\n }\n\n if (!selectedBudget) {\n return undefined\n }\n\n return (\n <React.Fragment>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={handleClose}\n onPrimaryAction={() => setIsEditOpen(true)}\n onSecondaryAction={() => setIsDeleteOpen(true)}\n primaryText={copy.details_edit_button}\n secondaryColor=\"error\"\n secondaryText={copy.details_delete_button}\n title={copy.details_title}\n >\n <BudgetDetails budget={selectedBudget} />\n </Drawer>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.details_edit_title }}\n disablePrimaryButton={Number(amount) <= 0}\n isOpen={isEditOpen}\n onClose={() => setIsEditOpen(false)}\n onPrimaryAction={handleUpdateBudget}\n primaryText={copy.edit_save_button}\n >\n <BudgetAmount\n amount={amount}\n categoryName={selectedBudget.category.name}\n onAmountChanged={setAmount}\n />\n </Dialog>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.delete_title }}\n isOpen={isDeleteOpen}\n onClose={() => setIsDeleteOpen(false)}\n onPrimaryAction={handleDeleteBudget}\n primaryColor=\"error\"\n primaryText={copy.details_delete_button}\n secondaryColor=\"secondary\"\n >\n <Text variant=\"Paragraph\">\n {buildDynamicCopy(copy.delete_description, selectedBudget.category.name) as string}\n </Text>\n </Dialog>\n </React.Fragment>\n )\n})\n","import React from 'react'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { CategoryIcon, Text } from '@mxenabled/mxui'\n\nimport { type DetailedBudget, formatCurrency, SingleSegmentDonut } from '../../../common'\n\ninterface BudgetRowProps {\n budget: DetailedBudget\n onClick?: (budget: DetailedBudget) => void\n}\n\nexport const BudgetRow: React.FC<BudgetRowProps> = ({ budget, onClick }) => {\n const {\n amount,\n budgetColors: { background, description: descriptionColor },\n category_guid,\n description,\n percentage,\n subBudgets,\n transaction_total,\n } = budget\n\n return (\n <ListItem>\n <ListItemButton onClick={() => onClick?.(budget)}>\n <ListItemAvatar sx={{ mb: -8, mr: 16 }}>\n <SingleSegmentDonut color={background} percent={percentage} size={40}>\n <CategoryIcon categoryGuid={category_guid} variant=\"basic\" />\n </SingleSegmentDonut>\n </ListItemAvatar>\n <ListItemText\n primary={\n <Stack component=\"span\" direction=\"row\" justifyContent=\"space-between\">\n <Text bold={true} variant=\"Body\">\n {budget.category.name}\n </Text>\n <Text fontWeight={400} variant=\"Body\">\n {`\n ${formatCurrency(transaction_total, '0,0')} / \n ${formatCurrency(amount, '0,0')}\n `}\n </Text>\n </Stack>\n }\n secondary={\n <Stack component=\"span\" direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"XSmall\">{`${subBudgets.length} Sub-budgets`}</Text>\n <Text bold={percentage > 100} color={descriptionColor} variant=\"XSmall\">\n {description}\n </Text>\n </Stack>\n }\n />\n </ListItemButton>\n </ListItem>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\n\nimport { H3 } from '@mxenabled/mxui'\n\nimport {\n type DetailedBudget,\n ANALYTICS_EVENTS,\n useBudgetsStore,\n useEvent,\n useGlobalCopyStore,\n} from '../../common'\n\nimport { BudgetRow } from './budgetlist/BudgetRow'\n\nexport const BudgetList = observer(() => {\n const { onEvent } = useEvent()\n const { budgets: copy } = useGlobalCopyStore()\n const { detailedBudgets: budgets, setSelectedBudget } = useBudgetsStore()\n\n const handleBudgetClick = (budget: DetailedBudget) => {\n setSelectedBudget(budget)\n onEvent(ANALYTICS_EVENTS.BUDGETS_CLICK_BUDGET_CATEGORY, {\n budget_category: budget.category.name,\n click_type: 'list',\n })\n }\n\n return (\n <Card elevation={2}>\n <CardHeader sx={{ pb: 8, pl: 24 }} title={<H3>{copy.budget_categories_title}</H3>} />\n <CardContent sx={{ p: 0, ':last-child': { p: 0 } }}>\n <List>\n {budgets.map((budget) => (\n <React.Fragment key={budget.guid}>\n <BudgetRow budget={budget} onClick={handleBudgetClick} />\n <Divider />\n </React.Fragment>\n ))}\n </List>\n </CardContent>\n </Card>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { subDays } from 'date-fns/subDays'\n\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport useTheme from '@mui/material/styles/useTheme'\n\nimport { H3, Icon, Text } from '@mxenabled/mxui'\n\nimport {\n type StatusBarData,\n ANALYTICS_EVENTS,\n buildDynamicCopy,\n Drawer,\n formatCurrency,\n StatusBar,\n useBudgetsStore,\n useCategoryStore,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useAccountStore,\n useEvent,\n} from '../../common'\n\nimport { ManageIncome } from '../../recurringtransactions'\n\nexport const Overview = observer(() => {\n const theme = useTheme()\n\n const { onEvent } = useEvent()\n const { visibleAccounts: accounts } = useAccountStore()\n const { budgets: copy, common: commonCopy, recurring: recurringCopy } = useGlobalCopyStore()\n const { incomeCategories, spendCategories } = useCategoryStore()\n const { detailedBudgets: budgets, totalBudgeted } = useBudgetsStore()\n const { incomeTotal } = useRecurringTransactionsStore()\n const { setFilter } = useTransactionStore()\n\n const [isIncomeOpen, setIsIncomeOpen] = React.useState(false)\n\n const [spentTotal, spendingStatus] = React.useMemo(() => {\n const spentTotal = spendCategories.reduce((total, current) => total + current.totalAmount, 0)\n let spendingPercentage = spentTotal / totalBudgeted\n if (spendingPercentage > 1) spendingPercentage = 1\n let color = theme.palette.success.main\n if (spendingPercentage > 0.8 && spendingPercentage < 1) {\n color = theme.palette.warning.main\n } else if (spendingPercentage >= 1) {\n color = theme.palette.error.main\n }\n\n const spendingStatus = [\n {\n color,\n percentage: `${spendingPercentage}`,\n },\n ] as StatusBarData[]\n return [spentTotal, spendingStatus]\n }, [budgets, spendCategories])\n\n const [incomePaid, incomeStatus] = React.useMemo(() => {\n const incomePaid = Math.abs(\n incomeCategories.reduce((total, current) => total + current.totalAmount, 0),\n )\n let incomePercentage = incomePaid / incomeTotal\n if (incomePercentage > 1) incomePercentage = 1\n\n const incomeStatus = [\n {\n color: theme.palette.secondary.main,\n percentage: `${incomePercentage}`,\n },\n ]\n return [incomePaid, incomeStatus]\n }, [incomeCategories, incomeTotal])\n\n const handleOpenIncome = () => {\n setFilter({\n accounts: accounts.map((account) => account.guid),\n dateRange: {\n start: subDays(new Date(), 90),\n end: new Date(),\n },\n })\n setIsIncomeOpen(true)\n onEvent(ANALYTICS_EVENTS.BUDGETS_CLICK_EDIT_INCOME)\n }\n\n return (\n <Card elevation={2} sx={{ overflow: 'visible' }}>\n <CardHeader sx={{ pb: 8, pl: 24 }} title={<H3>{copy.overview_title}</H3>} />\n <CardContent sx={{ pt: 12, px: 24 }}>\n <Stack gap={24}>\n <Stack gap={8}>\n <Text bold={true} sx={{ mb: 8 }} variant=\"Body\">\n {copy.spending_title}\n </Text>\n <StatusBar data={spendingStatus} height={16} />\n <Text variant=\"Small\">\n {\n buildDynamicCopy(\n copy.spending_description,\n formatCurrency(spentTotal, '0,0'),\n formatCurrency(totalBudgeted, '0,0'),\n ) as string\n }\n </Text>\n </Stack>\n\n <Stack gap={8}>\n <Stack alignItems=\"center\" direction=\"row\" gap={4} mb={-4}>\n <Text bold={true} variant=\"Body\">\n {copy.income_title}\n </Text>\n <IconButton\n aria-label={recurringCopy.manage_income}\n onClick={handleOpenIncome}\n sx={{ p: 0 }}\n >\n <Icon color=\"primary\" name=\"edit\" />\n </IconButton>\n </Stack>\n <StatusBar data={incomeStatus} height={16} />\n <Text variant=\"Small\">\n {\n buildDynamicCopy(\n copy.income_description,\n formatCurrency(incomePaid, '0,0'),\n formatCurrency(incomeTotal, '0,0'),\n ) as string\n }\n </Text>\n </Stack>\n </Stack>\n </CardContent>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isIncomeOpen}\n onClose={() => setIsIncomeOpen(false)}\n title={recurringCopy.manage_income}\n >\n <Stack gap={4}>\n <Text bold={true} sx={{ mt: 12, mx: 24 }} variant=\"Small\">\n {copy.income_title}\n </Text>\n <ManageIncome />\n </Stack>\n </Drawer>\n </Card>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { isAfter } from 'date-fns/isAfter'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport Alert from '@mui/material/Alert'\nimport Stack from '@mui/material/Stack'\nimport Snackbar from '@mui/material/Snackbar'\nimport useTheme from '@mui/material/styles/useTheme'\nimport { DateRange } from '@mui/x-date-pickers-pro'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n Loader,\n useAccountStore,\n useBudgetsStore,\n useCategoryStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useScreenSize,\n WidgetContainer,\n WidgetProps,\n} from '../common'\n\nimport { AddBudgets } from './components/AddBudgets'\nimport { BubbleBudgets } from './components/BubbleBudgets'\nimport { BudgetDetailsDrawer } from './components/BudgetDetailsDrawer'\nimport { BudgetList } from './components/BudgetList'\nimport { Overview } from './components/Overview'\n\nconst BUDGET_LIST_WIDTH = 480\n\nexport const BubbleBudgetsWidget: React.FC<WidgetProps> = observer(({ onBackClick, sx }) => {\n const theme = useTheme()\n\n const { onEvent } = useEvent()\n const { visibleAccounts: accounts } = useAccountStore()\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const { isCopyLoaded, isInitialized, selectedAccounts, setDisplayedDate, setSelectedAccounts } =\n useGlobalUiStore()\n const {\n alert,\n dateRange,\n isDataLoaded,\n loadBudgetData,\n setDateRange,\n setAlert,\n setTheme,\n detailedBudgets: budgets,\n } = useBudgetsStore()\n const { loadRepeatingTransactions, setDateRange: setRecurringDateRange } =\n useRecurringTransactionsStore()\n const { reloadCategoryTotals } = useCategoryStore()\n const { isSmallTablet, isMobile, isSmallMobile } = useScreenSize()\n const isColumnWidths = isSmallTablet || isMobile || isSmallMobile\n\n const [isAddOpen, setIsAddOpen] = React.useState(false)\n\n React.useEffect(() => {\n setTheme(theme)\n setSelectedAccounts(accounts)\n setDisplayedDate(dateRange.start, dateRange.end)\n onEvent(ANALYTICS_EVENTS.BUDGETS_VIEW)\n }, [])\n\n React.useEffect(() => {\n setSelectedAccounts(accounts)\n }, [accounts])\n\n React.useEffect(() => {\n if (isInitialized) {\n reloadCategoryTotals(selectedAccounts, dateRange.start, dateRange.end).finally()\n setRecurringDateRange(dateRange)\n if (!isDataLoaded) {\n loadRepeatingTransactions().finally()\n loadBudgetData().finally()\n }\n }\n }, [isInitialized, selectedAccounts, dateRange])\n\n const onMonthChanged = (dateRange: DateRange<Date>) => {\n setDateRange({ start: dateRange[0] || new Date(), end: dateRange[1] || new Date() })\n }\n\n const handleAccountFilterClick = () => {\n onEvent(ANALYTICS_EVENTS.BUDGETS_CLICK_FILTER)\n }\n\n const handleAddClick = () => {\n setIsAddOpen(true)\n onEvent(ANALYTICS_EVENTS.BUDGETS_CLICK_ADD)\n }\n\n const handleBudgetsRecalculated = () => {\n setIsAddOpen(false)\n }\n\n const shouldDisableNext = isAfter(dateRange.end, startOfMonth(new Date()))\n\n if (!isCopyLoaded || !isInitialized || !isDataLoaded) {\n return <Loader />\n }\n\n return (\n <WidgetContainer\n accountOptions={accounts}\n actions={[\n {\n iconName: 'add',\n label: copy.add_title,\n onClick: handleAddClick,\n },\n ]}\n calendarActions={{ onRangeChanged: onMonthChanged, shouldDisableNext }}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\n sx={sx}\n title={copy.budgets_title}\n >\n {(!isInitialized || !isDataLoaded) && <Loader />}\n {isInitialized && isDataLoaded && (\n <Stack\n direction={!isColumnWidths ? 'row' : 'column'}\n height=\"100%\"\n sx={{ justifyContent: 'center' }}\n width=\"100%\"\n >\n <Stack height={!isColumnWidths ? 'calc(100dvh - 150px)' : 450}>\n <BubbleBudgets\n createBudgetOnClick={handleAddClick}\n height={!isColumnWidths ? 800 : 450}\n isDraggable={true}\n shouldShowZeroState={budgets.length === 0}\n unavailableWidth={!isColumnWidths ? BUDGET_LIST_WIDTH : 0}\n />\n </Stack>\n {budgets.length !== 0 && (\n <Stack\n gap={24}\n height=\"100%\"\n sx={{ mr: 24, mt: 48 }}\n width={!isColumnWidths ? BUDGET_LIST_WIDTH : '100%'}\n >\n <Overview />\n <BudgetList />\n </Stack>\n )}\n </Stack>\n )}\n\n <BudgetDetailsDrawer />\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isAddOpen}\n onClose={() => setIsAddOpen(false)}\n title={copy.add_new_title}\n >\n <AddBudgets onRecalculateBudgets={handleBudgetsRecalculated} />\n </Drawer>\n\n <Snackbar\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n autoHideDuration={3500}\n onClose={() => {\n setAlert('')\n }}\n open={Boolean(alert)}\n >\n <Alert\n onClose={() => {\n setAlert('')\n }}\n severity={'success'}\n variant=\"filled\"\n >\n {alert}\n </Alert>\n </Snackbar>\n </WidgetContainer>\n )\n})\n"],"names":["PROGRESS_INDICATOR_SIZE","MAX_BUBBLE_RADIUS","MIN_BUBBLE_RADIUS","drag","simulation","dragStarted","event","dragged","dragEnded","d3","arcTween","bubble","p","angle","interpolate","arc","t","enableDrag","resize","height","width","getScale","min","max","simulate","budgets","maxValue","acc","budget","minValue","scale","bubbles","radius","d","PROGRESS_DURATION","Mercury","theme","useTheme","guid","mercury","bubbleId","React","trackArc","jsx","LARGE_THRESHOLD","MEDIUM_THRESHOLD","Bubble","isDraggable","onClick","showTooltip","setShowTooltip","background","textColor","icon","name","description","x","y","iconX","iconY","tooltipText","tooltipPopperSlot","jsxs","Tooltip","Icon","Text","BubbleChart","useBudgetsStore","BubbleChart$1","observer","BudgetsEmptyState","isMiniWidget","onConnectAccountsClick","createBudgetOnClick","recalculateBudgets","spendCategories","useCategoryStore","copy","useGlobalCopyStore","shouldShowEmptyGeneratedBudgets","setShouldShowEmptyGeneratedBudgets","isError","setError","recalculateBudgetsLoading","setRecalculateBudgetsLoading","newBudgetCategories","category","autoGenerateBudgets","data","isSuccess","Loader","EmptyState","buttonType","BubbleBudgets","shouldShowZeroState","unavailableWidth","onEvent","useEvent","setSelectedBudget","isLoadingCategoryTotals","isInitialized","useGlobalUiStore","accountsCopy","availableWidth","useWidgetContainerProvider","isMobile","useScreenSize","showConnectionsWidget","setShowConnectionsWidget","handleBubbleClick","ANALYTICS_EVENTS","handleManageConnections","Stack","Box","ConnectionsDrawer","Header","totalBudgeted","incomeTotal","useRecurringTransactionsStore","remaining","formatCurrency","RecalculateBudgetRow","secondaryText","b","part1","part2","buildDynamicCopy","ListItem","ListItemButton","ListItemAvatar","CategoryIcon","ListItemText","Divider","RecalculateBudgets","onRecalculateBudgets","commonCopy","setAlert","isOpen","setIsOpen","handlePrimaryClick","Button","Drawer","List","BudgetAmount","amount","categoryName","onAmountChanged","unbudgetedIncome","CurrencyInput","UnbudgetedRow","onAddBudget","isAddBudgetOpen","setIsAddBudgetOpen","setAmount","ListItemSecondaryAction","Dialog","AddBudgets","addBudget","unbudgetedCategories","handleOnAddBudget","BubbleBudgetsMiniWidget","props","isDataLoaded","loadBudgetData","setTheme","budgetsCopy","isCopyLoaded","selectedAccounts","reloadCategoryTotals","difference","useGetBudgetDifference","isAddOpen","setIsAddOpen","handleAddClick","handleBudgetsRecalculated","startOfMonth","endOfMonth","MiniWidgetContainer","BubbleBudgetsMiniWidget$1","category_guid","percentage","transaction_total","status","Card","CardContent","H1","StatusBar","SubBudgetZeroState","SubBudgetRow","setSelectedSubBudget","SingleSegmentDonut","AddSubBudget","parentBudget","setExpandedGuid","setOnSelect","useCategoryUiStore","subCategory","setSubCategory","sc","handleOpen","handleAddSubBudget","CategoryRow","SubBudgetList","subBudgets","deleteBudget","selectedSubBudget","updateBudget","filter","setFilter","useTransactionStore","isEditOpen","setIsEditOpen","isDeleteOpen","setIsDeleteOpen","handleUpdateBudget","handleDeleteBudget","handleClose","subBudget","TransactionList","BudgetDetails","is_mobile_webview","useAppConfig","transactionCopy","isDesktop","transactions","sortedTransactionsWithSplits","tags","selectedTab","setSelectedTab","transactionGuid","setTransactionGuid","transaction","handleTabChange","_event","newValue","handleExportToCsv","exportTransactionsToCSV","shouldShowExportButton","Tabs","Tab","TransactionDetails","BudgetDetailsDrawer","selectedAccountGuids","dateRange","selectedBudget","BudgetRow","descriptionColor","BudgetList","handleBudgetClick","CardHeader","H3","Overview","accounts","useAccountStore","recurringCopy","incomeCategories","isIncomeOpen","setIsIncomeOpen","spentTotal","spendingStatus","total","current","spendingPercentage","color","incomePaid","incomeStatus","incomePercentage","handleOpenIncome","account","subDays","IconButton","ManageIncome","BUDGET_LIST_WIDTH","BubbleBudgetsWidget","onBackClick","sx","setDisplayedDate","setSelectedAccounts","alert","setDateRange","loadRepeatingTransactions","setRecurringDateRange","isSmallTablet","isSmallMobile","isColumnWidths","onMonthChanged","handleAccountFilterClick","shouldDisableNext","isAfter","WidgetContainer","Snackbar","Alert"],"mappings":"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"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { ae as m, af as r } from "../ConnectMiniWidget-CQWafYtQ.mjs";
|
|
2
|
-
import { ag as Rt, ai as kt, ah as zt } from "../ConnectMiniWidget-CQWafYtQ.mjs";
|
|
3
|
-
import { getUnixTime as i } from "date-fns/getUnixTime";
|
|
4
|
-
import "bowser";
|
|
5
|
-
import "date-fns/intlFormat";
|
|
6
|
-
import "date-fns/addMonths";
|
|
7
|
-
import "date-fns/addQuarters";
|
|
8
|
-
import "date-fns/addWeeks";
|
|
9
|
-
import "date-fns/addYears";
|
|
10
|
-
import "date-fns/getDay";
|
|
11
|
-
import "date-fns/isBefore";
|
|
12
|
-
import "date-fns/nextDay";
|
|
13
|
-
import "date-fns/setDate";
|
|
14
|
-
import "date-fns/startOfToday";
|
|
15
|
-
import "date-fns/fromUnixTime";
|
|
16
|
-
import "react";
|
|
17
|
-
import "numeral";
|
|
18
|
-
import "@mui/material";
|
|
19
|
-
import "react/jsx-runtime";
|
|
20
|
-
import "@mui/material/Button";
|
|
21
|
-
import "@mxenabled/mxui";
|
|
22
|
-
import "@mui/material/Tooltip";
|
|
23
|
-
import "@mui/material/Box";
|
|
24
|
-
import "@mui/material/IconButton";
|
|
25
|
-
import "../Loader-CwdK8lfx.mjs";
|
|
26
|
-
import "@mui/material/styles/useTheme";
|
|
27
|
-
import "@mui/material/useMediaQuery";
|
|
28
|
-
import "@mxenabled/cssinjs";
|
|
29
|
-
import "date-fns/addDays";
|
|
30
|
-
import "date-fns/eachDayOfInterval";
|
|
31
|
-
import "date-fns/eachWeekOfInterval";
|
|
32
|
-
import "date-fns/endOfMonth";
|
|
33
|
-
import "date-fns/format";
|
|
34
|
-
import "date-fns/isSameMonth";
|
|
35
|
-
import "date-fns/startOfMonth";
|
|
36
|
-
import "date-fns/subMonths";
|
|
37
|
-
import "@mui/material/Paper";
|
|
38
|
-
import "@mxenabled/mx-icons";
|
|
39
|
-
import "date-fns/isSameDay";
|
|
40
|
-
import "date-fns/isWithinInterval";
|
|
41
|
-
import "d3";
|
|
42
|
-
import "@mui/material/styles";
|
|
43
|
-
import "@mui/x-charts";
|
|
44
|
-
import "@mui/x-charts/ChartsTooltip";
|
|
45
|
-
import "@mui/material/Stack";
|
|
46
|
-
import "date-fns/differenceInCalendarDays";
|
|
47
|
-
import "date-fns/endOfToday";
|
|
48
|
-
import "date-fns/endOfYear";
|
|
49
|
-
import "date-fns/startOfYear";
|
|
50
|
-
import "date-fns/subDays";
|
|
51
|
-
import "date-fns/subYears";
|
|
52
|
-
import "@mui/material/ButtonGroup";
|
|
53
|
-
import "@mui/material/Tab";
|
|
54
|
-
import "@mui/material/Tabs";
|
|
55
|
-
import "@mui/material/ToggleButton";
|
|
56
|
-
import "@mui/material/ToggleButtonGroup";
|
|
57
|
-
import "@mui/material/Dialog";
|
|
58
|
-
import "@mui/material/DialogContent";
|
|
59
|
-
import "@mui/material/Card";
|
|
60
|
-
import "@mui/material/CardContent";
|
|
61
|
-
import "@mui/material/CardHeader";
|
|
62
|
-
import "uuid";
|
|
63
|
-
import "@mui/material/CircularProgress";
|
|
64
|
-
import "@mui/material/FormControlLabel";
|
|
65
|
-
import "@mui/material/Radio";
|
|
66
|
-
import "@mui/material/Avatar";
|
|
67
|
-
import "@mui/material/ListItem";
|
|
68
|
-
import "@mui/material/ListItemAvatar";
|
|
69
|
-
import "@mui/material/ListItemButton";
|
|
70
|
-
import "@mui/material/ListItemText";
|
|
71
|
-
import "@mui/material/ListItemIcon";
|
|
72
|
-
import "@mui/material/MenuItem";
|
|
73
|
-
import "@mui/material/TextField";
|
|
74
|
-
import "@mui/material/Switch";
|
|
75
|
-
import "mobx";
|
|
76
|
-
import "posthog-js";
|
|
77
|
-
import "date-fns/differenceInDays";
|
|
78
|
-
import "@mui/x-data-grid-pro";
|
|
79
|
-
import "date-fns";
|
|
80
|
-
import "@mui/material/Divider";
|
|
81
|
-
import "@mui/material/List";
|
|
82
|
-
import "date-fns/formatISO";
|
|
83
|
-
import "date-fns/isAfter";
|
|
84
|
-
import "date-fns/parseISO";
|
|
85
|
-
import "date-fns/subQuarters";
|
|
86
|
-
import "date-fns/lastDayOfMonth";
|
|
87
|
-
import "date-fns/setDayOfYear";
|
|
88
|
-
import "date-fns/addSeconds";
|
|
89
|
-
import "date-fns/differenceInCalendarMonths";
|
|
90
|
-
import "date-fns/getMonth";
|
|
91
|
-
import { C as Jt } from "../CashflowStore-gPEEBiXo.mjs";
|
|
92
|
-
class Dt {
|
|
93
|
-
fetchInstance;
|
|
94
|
-
constructor(t, o) {
|
|
95
|
-
this.fetchInstance = new m(t, o);
|
|
96
|
-
}
|
|
97
|
-
addCashflowEvent = async (t) => this.fetchInstance.post(r.CASHFLOW_EVENTS, { ...t }).then((o) => o);
|
|
98
|
-
addCashflowSequence = async (t) => this.fetchInstance.post(r.CASHFLOW_SEQUENCES, { ...t }).then((o) => o.cashflow_sequence);
|
|
99
|
-
getCashflowSequences = async () => this.fetchInstance.get(r.CASHFLOW_SEQUENCES).then((t) => t.cashflow_sequences);
|
|
100
|
-
getCashflowEventsByDateRange = async (t, o) => this.fetchInstance.get(
|
|
101
|
-
`${r.CASHFLOW_EVENTS}/from/${i(t)}/to/${i(o)}`
|
|
102
|
-
).then((p) => p.cashflow_events);
|
|
103
|
-
deleteCashflowSequence = async (t) => this.fetchInstance.delete(`${r.CASHFLOW_SEQUENCES}/${t}`).then((o) => o);
|
|
104
|
-
getProjectedCashflowEvents = async (t, o) => this.fetchInstance.get(
|
|
105
|
-
`${r.CASHFLOW_SEQUENCES}/projected_events/from/${i(
|
|
106
|
-
t
|
|
107
|
-
)}/to/${i(o)}`
|
|
108
|
-
).then((p) => p.cashflow_events);
|
|
109
|
-
updateCashflowSequence = async (t) => this.fetchInstance.put(`${r.CASHFLOW_SEQUENCES}/${t.guid}`, t).then((o) => o.cashflow_sequence);
|
|
110
|
-
}
|
|
111
|
-
export {
|
|
112
|
-
Dt as CashflowApi,
|
|
113
|
-
Rt as CashflowMiniWidget,
|
|
114
|
-
kt as CashflowOnboarding,
|
|
115
|
-
Jt as CashflowStore,
|
|
116
|
-
zt as CashflowWidget
|
|
117
|
-
};
|
|
118
|
-
//# sourceMappingURL=index.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../src/cashflow/api/CashflowApi.ts"],"sourcesContent":["import { getUnixTime } from 'date-fns/getUnixTime'\n\nimport { ApiEndpoints, Fetch, type CashflowEvent, type CashflowSequence } from '../../common'\n\nexport class CashflowApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n addCashflowEvent = async (cashflowEvent: CashflowEvent) => {\n return this.fetchInstance\n .post(ApiEndpoints.CASHFLOW_EVENTS, { ...cashflowEvent })\n .then((data) => data)\n }\n\n addCashflowSequence = async (cashflowSequence: CashflowSequence) => {\n return this.fetchInstance\n .post(ApiEndpoints.CASHFLOW_SEQUENCES, { ...cashflowSequence })\n .then((data) => data.cashflow_sequence)\n }\n\n getCashflowSequences = async (): Promise<CashflowSequence[]> => {\n return this.fetchInstance\n .get(ApiEndpoints.CASHFLOW_SEQUENCES)\n .then((data) => data.cashflow_sequences)\n }\n\n getCashflowEventsByDateRange = async (\n beginDate: Date,\n endDate: Date,\n ): Promise<CashflowEvent[]> => {\n return this.fetchInstance\n .get(\n `${ApiEndpoints.CASHFLOW_EVENTS}/from/${getUnixTime(beginDate)}/to/${getUnixTime(endDate)}`,\n )\n .then((data) => data.cashflow_events)\n }\n\n deleteCashflowSequence = async (guid: string) => {\n return this.fetchInstance\n .delete(`${ApiEndpoints.CASHFLOW_SEQUENCES}/${guid}`)\n .then((data) => data)\n }\n\n getProjectedCashflowEvents = async (beginDate: Date, endDate: Date): Promise<CashflowEvent[]> => {\n return this.fetchInstance\n .get(\n `${ApiEndpoints.CASHFLOW_SEQUENCES}/projected_events/from/${getUnixTime(\n beginDate,\n )}/to/${getUnixTime(endDate)}`,\n )\n .then((data) => data.cashflow_events)\n }\n\n updateCashflowSequence = async (cashflowSequence: CashflowSequence) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.CASHFLOW_SEQUENCES}/${cashflowSequence.guid}`, cashflowSequence)\n .then((data) => data.cashflow_sequence)\n }\n}\n"],"names":["CashflowApi","endpoint","token","Fetch","cashflowEvent","ApiEndpoints","data","cashflowSequence","beginDate","endDate","getUnixTime","guid"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,MAAMA,GAAY;AAAA,EACvB;AAAA,EAEA,YAAYC,GAAkBC,GAAe;AAC3C,SAAK,gBAAgB,IAAIC,EAAMF,GAAUC,CAAK;AAAA,EAChD;AAAA,EAEA,mBAAmB,OAAOE,MACjB,KAAK,cACT,KAAKC,EAAa,iBAAiB,EAAE,GAAGD,EAAA,CAAe,EACvD,KAAK,CAACE,MAASA,CAAI;AAAA,EAGxB,sBAAsB,OAAOC,MACpB,KAAK,cACT,KAAKF,EAAa,oBAAoB,EAAE,GAAGE,EAAkB,CAAA,EAC7D,KAAK,CAACD,MAASA,EAAK,iBAAiB;AAAA,EAG1C,uBAAuB,YACd,KAAK,cACT,IAAID,EAAa,kBAAkB,EACnC,KAAK,CAACC,MAASA,EAAK,kBAAkB;AAAA,EAG3C,+BAA+B,OAC7BE,GACAC,MAEO,KAAK,cACT;AAAA,IACC,GAAGJ,EAAa,eAAe,SAASK,EAAYF,CAAS,CAAC,OAAOE,EAAYD,CAAO,CAAC;AAAA,EAE1F,EAAA,KAAK,CAACH,MAASA,EAAK,eAAe;AAAA,EAGxC,yBAAyB,OAAOK,MACvB,KAAK,cACT,OAAO,GAAGN,EAAa,kBAAkB,IAAIM,CAAI,EAAE,EACnD,KAAK,CAACL,MAASA,CAAI;AAAA,EAGxB,6BAA6B,OAAOE,GAAiBC,MAC5C,KAAK,cACT;AAAA,IACC,GAAGJ,EAAa,kBAAkB,0BAA0BK;AAAA,MAC1DF;AAAA,IACD,CAAA,OAAOE,EAAYD,CAAO,CAAC;AAAA,EAE7B,EAAA,KAAK,CAACH,MAASA,EAAK,eAAe;AAAA,EAGxC,yBAAyB,OAAOC,MACvB,KAAK,cACT,IAAI,GAAGF,EAAa,kBAAkB,IAAIE,EAAiB,IAAI,IAAIA,CAAgB,EACnF,KAAK,CAACD,MAASA,EAAK,iBAAiB;AAE5C;"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { i as o, f as a, h as t, j as s } from "../ConnectMiniWidget-CQWafYtQ.mjs";
|
|
2
|
-
import { C as g } from "../CategoryStore-m7oieLzP.mjs";
|
|
3
|
-
export {
|
|
4
|
-
o as CategoryRow,
|
|
5
|
-
a as CategorySelector,
|
|
6
|
-
t as CategorySelectorDrawer,
|
|
7
|
-
g as CategoryStore,
|
|
8
|
-
s as useCategoryUiStore
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=index.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|