@mx-cartographer/experiences 6.26.0 → 6.26.1-alpha.mega1

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.
Files changed (84) hide show
  1. package/dist/AccountStore-DkL93tXL.mjs +317 -0
  2. package/dist/AccountStore-DkL93tXL.mjs.map +1 -0
  3. package/dist/BudgetUtil-CVqAdv-j.mjs +187 -0
  4. package/dist/BudgetUtil-CVqAdv-j.mjs.map +1 -0
  5. package/dist/CashflowStore-gPEEBiXo.mjs +53 -0
  6. package/dist/CashflowStore-gPEEBiXo.mjs.map +1 -0
  7. package/dist/CategoryStore-m7oieLzP.mjs +260 -0
  8. package/dist/CategoryStore-m7oieLzP.mjs.map +1 -0
  9. package/dist/ConnectMiniWidget-CQWafYtQ.mjs +22966 -0
  10. package/dist/ConnectMiniWidget-CQWafYtQ.mjs.map +1 -0
  11. package/dist/DebtsStore-cUhIgJx6.mjs +145 -0
  12. package/dist/DebtsStore-cUhIgJx6.mjs.map +1 -0
  13. package/dist/Donut-CGNFni9y.mjs +58 -0
  14. package/dist/Donut-CGNFni9y.mjs.map +1 -0
  15. package/dist/FinstrongStore-BDG7l0nI.mjs +183 -0
  16. package/dist/FinstrongStore-BDG7l0nI.mjs.map +1 -0
  17. package/dist/GoalStore-o2waGeyf.mjs +293 -0
  18. package/dist/GoalStore-o2waGeyf.mjs.map +1 -0
  19. package/dist/Loader-CwdK8lfx.mjs +147 -0
  20. package/dist/Loader-CwdK8lfx.mjs.map +1 -0
  21. package/dist/MerchantStore-Cck9IGIH.mjs +125 -0
  22. package/dist/MerchantStore-Cck9IGIH.mjs.map +1 -0
  23. package/dist/NetWorthStore-D5eUfGQt.mjs +66 -0
  24. package/dist/NetWorthStore-D5eUfGQt.mjs.map +1 -0
  25. package/dist/NotificationStore-DCxw8W7u.mjs +141 -0
  26. package/dist/NotificationStore-DCxw8W7u.mjs.map +1 -0
  27. package/dist/RecurringTransactionsStore-Bijrgllq.mjs +337 -0
  28. package/dist/RecurringTransactionsStore-Bijrgllq.mjs.map +1 -0
  29. package/dist/SettingsStore-BhOYgUOa.mjs +352 -0
  30. package/dist/SettingsStore-BhOYgUOa.mjs.map +1 -0
  31. package/dist/TransactionApi-Dnbyi1JL.mjs +175 -0
  32. package/dist/TransactionApi-Dnbyi1JL.mjs.map +1 -0
  33. package/dist/TransactionStore-CiEtt5XJ.mjs +417 -0
  34. package/dist/TransactionStore-CiEtt5XJ.mjs.map +1 -0
  35. package/dist/TrendsStore-Idq3QfoA.mjs +131 -0
  36. package/dist/TrendsStore-Idq3QfoA.mjs.map +1 -0
  37. package/dist/accounts/index.es.js +18 -0
  38. package/dist/accounts/index.es.js.map +1 -0
  39. package/dist/analytics/index.es.js +170 -0
  40. package/dist/analytics/index.es.js.map +1 -0
  41. package/dist/budgets/index.es.js +1116 -0
  42. package/dist/budgets/index.es.js.map +1 -0
  43. package/dist/cashflow/index.es.js +118 -0
  44. package/dist/cashflow/index.es.js.map +1 -0
  45. package/dist/categories/index.es.js +10 -0
  46. package/dist/categories/index.es.js.map +1 -0
  47. package/dist/common/context/hooks.d.ts +13 -13
  48. package/dist/common/index.es.js +1549 -0
  49. package/dist/common/index.es.js.map +1 -0
  50. package/dist/dashboard/index.es.js +257 -0
  51. package/dist/dashboard/index.es.js.map +1 -0
  52. package/dist/debts/index.es.js +9 -0
  53. package/dist/debts/index.es.js.map +1 -0
  54. package/dist/finstrong/index.es.js +11 -0
  55. package/dist/finstrong/index.es.js.map +1 -0
  56. package/dist/goals/index.es.js +9 -0
  57. package/dist/goals/index.es.js.map +1 -0
  58. package/dist/help/components/content/section/index.d.ts +15 -15
  59. package/dist/help/index.es.js +6 -0
  60. package/dist/help/index.es.js.map +1 -0
  61. package/dist/investments/index.es.js +1694 -0
  62. package/dist/investments/index.es.js.map +1 -0
  63. package/dist/merchants/index.es.js +7 -0
  64. package/dist/merchants/index.es.js.map +1 -0
  65. package/dist/microinsights/index.es.js +21 -0
  66. package/dist/microinsights/index.es.js.map +1 -0
  67. package/dist/networth/index.es.js +11 -0
  68. package/dist/networth/index.es.js.map +1 -0
  69. package/dist/notifications/index.es.js +116 -0
  70. package/dist/notifications/index.es.js.map +1 -0
  71. package/dist/recurringtransactions/index.es.js +14 -0
  72. package/dist/recurringtransactions/index.es.js.map +1 -0
  73. package/dist/settings/index.es.js +112 -0
  74. package/dist/settings/index.es.js.map +1 -0
  75. package/dist/spending/index.es.js +632 -0
  76. package/dist/spending/index.es.js.map +1 -0
  77. package/dist/transactions/index.es.js +19 -0
  78. package/dist/transactions/index.es.js.map +1 -0
  79. package/dist/trends/index.es.js +10 -0
  80. package/dist/trends/index.es.js.map +1 -0
  81. package/package.json +91 -3
  82. package/dist/index.d.ts +0 -22
  83. package/dist/index.es.js +0 -29907
  84. package/dist/index.es.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../../src/common/constants/ScheduledPayment.ts","../../src/common/constants/SpendingPlan.ts","../../src/common/utils/Theme.ts","../../src/common/api/BannerApi.ts","../../src/common/api/LocalizedCopyApi.ts","../../src/common/api/ScheduledPaymentsApi.ts","../../src/common/api/UserApi.ts","../../src/common/api/WidgetApi.ts","../../src/common/hooks/usePrevious.tsx","../../src/common/components/barchart/Legend.tsx","../../src/common/components/barchart/Bar.tsx","../../src/common/components/barchart/BarColumn.tsx","../../src/common/components/barchart/Util.ts","../../src/common/components/barchart/BarChart.tsx","../../src/common/components/donuts/MultiSegmentDonut.tsx","../../src/common/components/ResponsiveButton.tsx","../../src/common/stores/GlobalCopyStore.ts","../../src/analytics/stores/AnalyticsStore.ts","../../src/microinsights/utils/beatUtils.ts","../../src/insights/store/BeatStore.ts","../../src/budgets/api/BudgetsApi.ts","../../src/budgets/store/BudgetsStore.ts","../../src/common/types/Beat.ts","../../src/common/types/Expense.ts","../../src/common/types/ScreenSize.tsx","../../src/help/api/HelpApi.ts","../../src/help/utils/getAccessibleHelpCategories.ts","../../src/help/store/HelpStore.ts","../../src/investments/api/HoldingApi.ts","../../src/investments/stores/HoldingStore.ts","../../src/common/constants/DefaultConfig.ts","../../src/common/api/AppDataApi.ts","../../src/common/stores/AppDataStore.ts","../../src/common/stores/ConnectStore.ts","../../src/common/stores/GlobalUiStore.ts","../../src/common/stores/UserStore.ts","../../src/common/stores/GlobalStore.ts"],"sourcesContent":["export enum RecurrenceTypes {\n Unknown = 0,\n EveryWeek = 1,\n EveryOtherWeek = 2,\n EveryMonth = 3,\n EveryOtherMonth = 4,\n EveryQuarter = 5,\n EveryOtherQuarter = 6,\n EveryYear = 7,\n}\n\nexport const RECURRENCE_COPY = [\n { id: RecurrenceTypes.Unknown, copy: 'frequency_unknown' },\n { id: RecurrenceTypes.EveryWeek, copy: 'frequency_every_week' },\n { id: RecurrenceTypes.EveryOtherWeek, copy: 'frequency_every_other_week' },\n { id: RecurrenceTypes.EveryMonth, copy: 'frequency_every_month' },\n { id: RecurrenceTypes.EveryOtherMonth, copy: 'frequency_every_other_month' },\n { id: RecurrenceTypes.EveryQuarter, copy: 'frequency_every_quarter' },\n { id: RecurrenceTypes.EveryOtherQuarter, copy: 'frequency_every_other_quarter' },\n { id: RecurrenceTypes.EveryYear, copy: 'frequency_every_year' },\n]\n","export const LOADING_STATUS = {\n ERROR: 'ERROR',\n LOADING: 'LOADING',\n SUCCESS: 'SUCCESS',\n}\n\nexport enum PlanTypes {\n SpendingPlan = 0,\n Budgets = 1,\n}\n\nexport enum IterationItemTypes {\n RecurringExpense = 0,\n PlannedExpense = 1,\n Other = 2,\n Income = 3,\n}\n","import { alpha, darken, lighten, PaletteColor, Theme } from '@mui/material'\n\nimport type { ClientStyleProfile } from '../types'\n\nexport const getClientTheme = (theme: Theme, clientStyleProfile: ClientStyleProfile) => {\n const isDark = theme.palette.mode === 'dark'\n\n const generatePalette = (colorKey: keyof ClientStyleProfile, defaultColor: PaletteColor) => {\n const color = clientStyleProfile?.[colorKey] as string | undefined\n return {\n lighter: color ? lighten(color, 0.5) : defaultColor.lighter,\n light: color ? lighten(color, 0.25) : defaultColor.light,\n main: color || defaultColor.main,\n dark: color ? darken(color, 0.25) : defaultColor.dark,\n darker: color ? darken(color, 0.5) : defaultColor.darker,\n }\n }\n\n const palette = {\n primary: isDark\n ? generatePalette('primary_color_dark', theme.palette.primary)\n : generatePalette('primary_color', theme.palette.primary),\n secondary: isDark\n ? generatePalette('neutral_color_dark', theme.palette.secondary)\n : generatePalette('neutral_color', theme.palette.secondary),\n error: isDark\n ? generatePalette('error_color_dark', theme.palette.error)\n : generatePalette('error_color', theme.palette.error),\n warning: isDark\n ? generatePalette('warning_color_dark', theme.palette.warning)\n : generatePalette('warning_color', theme.palette.warning),\n info: isDark\n ? generatePalette('info_color_dark', theme.palette.info)\n : generatePalette('info_color', theme.palette.info),\n success: isDark\n ? generatePalette('success_color_dark', theme.palette.success)\n : generatePalette('success_color', theme.palette.success),\n }\n\n const components = {\n MuiTabs: {\n styleOverrides: {\n indicator: {\n backgroundColor: palette.primary.light,\n },\n },\n },\n MuiPickersCalendarHeader: {\n styleOverrides: {\n switchViewButton: {\n color: palette.primary.lighter,\n '&:hover': {\n backgroundColor: alpha(palette.primary.light, 0.1),\n },\n },\n },\n },\n ...(clientStyleProfile?.button_corner_radius\n ? {\n MuiButton: {\n styleOverrides: {\n root: {\n borderRadius: `${clientStyleProfile.button_corner_radius}px`,\n },\n },\n },\n }\n : {}),\n ...(clientStyleProfile?.card_corner_radius\n ? {\n MuiCard: {\n styleOverrides: {\n root: {\n borderRadius: `${clientStyleProfile.card_corner_radius}px`,\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n borderRadius: `${clientStyleProfile.card_corner_radius}px`,\n },\n },\n },\n }\n : {}),\n }\n\n return {\n typography: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n H1: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n h1: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n H2: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n h2: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n H3: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n h3: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n Body: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n body1: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n Small: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n body2: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n Button: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n button: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n XSmall: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n caption: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n Paragraph: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n subtitle1: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n ParagraphSmall: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n subtitle2: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n Tiny: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n tiny: {\n fontFamily: clientStyleProfile?.system_font ?? theme.typography.fontFamily,\n },\n },\n palette,\n components,\n shape: {\n borderRadius: clientStyleProfile?.button_corner_radius ?? theme.shape.borderRadius,\n },\n }\n}\n","import Fetch from '../utils/Fetch'\n\nexport class BannerApi {\n fetchInstance: Fetch | null\n\n constructor(bullseyeEndpoint: string) {\n // Override headers without MD-Session-Token to avoid CORS error in bullseye\n this.fetchInstance = new Fetch(bullseyeEndpoint, '', {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n })\n }\n\n getBanner = async (userGuid: string) => {\n try {\n const path = `/banner/${userGuid}/account_widget_banner`\n return this.fetchInstance?.get(path).then((data) => data.banner) ?? {}\n } catch (error) {\n console.error('Error fetching banner:', error)\n return null\n }\n }\n}\n","import Fetch from '../utils/Fetch'\n\nimport { ApiEndpoints } from '../constants/ApiEndpoints'\n\nexport class LocalizedCopyApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n getLocalizedCopy = async (req: any) => {\n return this.fetchInstance.post(ApiEndpoints.LOCALIZED_COPY, req).then((data) => data)\n }\n\n getLocalizedContent = async (namespace: string) => {\n return this.fetchInstance\n .post(`${ApiEndpoints.LOCALIZED_CONTENT}/${namespace}`)\n .then((data) => data)\n }\n}\n","import { ApiEndpoints, Fetch, type ScheduledPayment, TransactionType } from '../index'\n\nexport class ScheduledPaymentsApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n addScheduledPayment = async (scheduledPayment: ScheduledPayment) => {\n return this.fetchInstance\n .post(ApiEndpoints.SCHEDULED_PAYMENTS, {\n ...scheduledPayment,\n is_recurring: 'true',\n transaction_type: TransactionType.DEBIT,\n })\n .then((data) => data.scheduled_payment)\n }\n\n getScheduledPayments = async () => {\n return this.fetchInstance\n .get(ApiEndpoints.SCHEDULED_PAYMENTS)\n .then((data) => data.scheduled_payments)\n }\n\n updateScheduledPayment = async (scheduledPayment: ScheduledPayment) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.SCHEDULED_PAYMENTS}/${scheduledPayment.guid}`, scheduledPayment)\n .then((data) => data.scheduled_payment)\n }\n\n deleteScheduledPayment = async (guid: string) => {\n return this.fetchInstance\n .delete(`${ApiEndpoints.SCHEDULED_PAYMENTS}/${guid}`)\n .then((data) => data)\n }\n}\n","import Fetch from '../utils/Fetch'\n\nimport { ApiEndpoints } from '../constants'\n\nimport type { User, UserProfile } from '../types'\n\nexport class UserApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n getUserFeatures = async () => {\n return this.fetchInstance\n .get(ApiEndpoints.USER_FEATURES)\n .then((data) => data.user_features)\n .catch((e) => e)\n }\n\n updateUser = async (user: User) => {\n return this.fetchInstance.put(ApiEndpoints.USER, user).then((data) => data.user)\n }\n\n updateUserProfile = async (userProfile: UserProfile) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.USER_PROFILES}/${userProfile.guid}`, userProfile)\n .then((data) => data.user_profile)\n }\n}\n","import Fetch from '../utils/Fetch'\n\nimport { ApiEndpoints } from '../constants'\n\nexport class WidgetApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n requestWidgetUrl = async (req: any) => {\n return this.fetchInstance.post(ApiEndpoints.WIDGET_URLS, req).then((data) => data.widget_url)\n }\n}\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = (value: any) => {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n }, [value])\n return ref.current\n}\nexport default usePrevious\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { Text, useTokens } from '@mxenabled/mxui'\n\ninterface BarChartLegendProps {\n color: string\n labelAverage: string\n labelMain: string\n}\n\nconst Legend: React.FC<BarChartLegendProps> = ({ color, labelAverage, labelMain }) => {\n const tokens = useTokens()\n const styles = getStyles(tokens, color)\n\n return (\n <div className={`mx-cmn-bar-chart-legend ${styles}`}>\n <div aria-label={labelMain} className=\"mx-cmn-color-square\" role=\"img\" />\n <Text variant=\"XSmall\">{labelMain}</Text>\n\n <div aria-label={labelAverage} className=\"mx-cmn-triple-dot\" role=\"img\">\n <div className=\"mx-cmn-dot\" />\n <div className=\"mx-cmn-dot\" />\n <div className=\"mx-cmn-dot\" />\n </div>\n <Text variant=\"XSmall\">{labelAverage}</Text>\n </div>\n )\n}\n\nconst getStyles = (tokens: any, color: string) =>\n css({\n alignItems: 'center',\n display: 'flex',\n gap: tokens.Spacing.XSmall,\n justifyContent: 'flex-end',\n marginRight: tokens.Spacing.XLarge,\n paddingBottom: tokens.Spacing.XSmall,\n width: '100%',\n '& .mx-cmn-color-square': {\n backgroundColor: color,\n height: 6,\n width: 6,\n },\n '& .mx-cmn-triple-dot': {\n display: 'flex',\n gap: 1,\n },\n '& .mx-cmn-dot': {\n backgroundColor: tokens.Color.Neutral500,\n height: 3,\n width: 3,\n borderRadius: 1.5,\n },\n '& > .kyper-text': {\n marginRight: tokens.Spacing.XSmall,\n },\n })\n\nexport default Legend\n","import React from 'react'\nimport { css, keyframes } from '@mxenabled/cssinjs'\n\nimport { Text, useTokens } from '@mxenabled/mxui'\n\ninterface BarProps {\n ariaLabel?: string\n color: string\n height: number\n index: number\n label: string\n onClick?: (index: number) => void\n selectedIndex?: number\n value: number\n}\n\n/**\n * The Bar component is what displays the colored (optionally clickable) bar\n *\n * @param ariaLabel OPTIONAL aria label used on the bar\n * @param color The color of the bar\n * @param height The pixel height of the bar\n * @param index The index of the bar\n * @param label The label to use above (on positive bars) or below (on negative bars)\n * @param onClick OPTIONAL function to call if the bar is clicked\n * @param selectedIndex OPTIONAL indicates the selected bar\n * @param value Value representing the bar\n */\nconst Bar: React.FC<BarProps> = ({\n ariaLabel,\n color,\n height,\n index,\n label,\n onClick,\n selectedIndex,\n value,\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens, color, height)\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (onClick && (event.key === ' ' || event.key === 'Enter')) {\n onClick(index)\n }\n }\n\n const labelColor =\n selectedIndex === undefined || selectedIndex === index ? 'primary' : 'secondary'\n\n const BarLabel = () => (\n <Text\n aria-hidden={true}\n bold={selectedIndex === index}\n className=\"mx-cmn-bar-text\"\n color={labelColor}\n component=\"div\"\n variant=\"Small\"\n >\n {label}\n </Text>\n )\n\n return (\n <div className={`mx-cmn-bar-container ${styles} ${value < 0 ? 'mx-cmn-negative' : ''}`}>\n {/* Display the value on top for positive values */}\n {value >= 0 && <BarLabel />}\n\n <div\n aria-label={ariaLabel}\n className={`mx-cmn-bar ${onClick ? 'mx-cmn-clickable' : ''} ${\n value < 0 ? 'mx-cmn-bar-negative' : ''\n }`}\n onClick={onClick ? () => onClick?.(index) : undefined}\n onKeyDown={handleKeyDown}\n role={ariaLabel ? 'button' : undefined}\n tabIndex={ariaLabel ? 0 : undefined}\n />\n\n {/* Display the value on bottom for negative values */}\n {value < 0 && <BarLabel />}\n </div>\n )\n}\n\nconst getStyles = (tokens: any, color: string, height: number) => {\n const frameName = `expandBar-${Math.round(height)}`\n const expandAnimation = keyframes(frameName, { from: { height: 0 }, to: { height } })\n\n return css({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n height: '100%',\n '&.mx-cmn-negative': {\n justifyContent: 'flex-start',\n },\n '& .mx-cmn-bar': {\n animationDelay: '.5s',\n animationDuration: '1s',\n animationFillMode: 'forwards',\n animationName: expandAnimation,\n animationTimingFunction: tokens.Easing.Default,\n backgroundColor: color,\n borderRadius: `${tokens.BorderRadius.Medium}px ${tokens.BorderRadius.Medium}px 0 0`,\n maxHeight: height,\n },\n '& .mx-cmn-bar-negative': {\n borderRadius: `0 0 ${tokens.BorderRadius.Medium}px ${tokens.BorderRadius.Medium}px`,\n marginTop: -tokens.Spacing.XTiny,\n },\n '& .mx-cmn-bar-text': {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: tokens.Spacing.Tiny,\n marginTop: tokens.Spacing.Tiny,\n whiteSpace: 'nowrap',\n width: '100%',\n },\n })\n}\n\nexport default Bar\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { Text, useTokens } from '@mxenabled/mxui'\n\nimport Bar from './Bar'\n\ninterface BarColumnProps {\n ariaLabel?: string\n averageLineHeight: number\n bottomHeight: number\n color: string\n index?: number\n onClick?: (index: number) => void\n range: number\n selectedIndex?: number\n topHeight: number\n value: number\n valueLabel?: string\n width?: number | string\n xAxisLabel?: string\n}\n\n/**\n * The BarColumn component represents a single vertical slice of the bar chart. It contains from top to bottom\n * the positive section, which will only display a bar if value > 0, the zero line, the average line, negative\n * section, which will only display a bar if value < 0 and the X-Axis label.\n *\n * @param ariaLabel OPTIONAL aria label used to label the bar\n * @param averageLineHeight the pixel height above/below the zero line for the dashed average line\n * @param bottomHeight the height of the bottom (negative) section\n * @param color the color of the bar\n * @param index OPTIONAL index of the bar (Only used when bar is clickable)\n * @param onClick OPTIONAL function to call if the bar is clicked\n * @param range\n * @param selectedIndex OPTIONAL indicates the selected bar\n * @param topHeight the pixel height of the top (positvie section)\n * @param value the value for the bar\n * @param valueLabel OPTIONAL string value to use for the bar\n * @param width OPTIONAL pixel or percentage width of the bar\n * @param xAxisLabel label for the X-Axis\n */\nconst BarColumn: React.FC<BarColumnProps> = ({\n ariaLabel,\n averageLineHeight,\n bottomHeight,\n color,\n index = -1,\n onClick,\n range,\n selectedIndex,\n topHeight,\n value,\n valueLabel = '',\n width,\n xAxisLabel = '',\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens, width)\n\n const topBarHeight = (value / range) * topHeight\n const bottomBarHeight = (Math.abs(value) / range) * bottomHeight\n const xAxisColor =\n selectedIndex === undefined || selectedIndex === index ? 'primary' : 'secondary'\n\n return (\n <div className={`mx-cmn-barchart-bar-column ${styles}`}>\n {/* Top (Positive) Chart Area */}\n <div style={{ height: topHeight }}>\n {/* Only display the bar here if it has a positive value */}\n {value >= 0 && (\n <Bar\n ariaLabel={ariaLabel}\n color={color}\n height={topBarHeight}\n index={index}\n label={valueLabel}\n onClick={onClick}\n selectedIndex={selectedIndex}\n value={value}\n />\n )}\n </div>\n\n {/* Zero Line */}\n <div className=\"mx-cmn-zero-line\" />\n\n {/* Average Line - Only display if average is not 0 */}\n {averageLineHeight !== 0 && (\n <div className=\"mx-cmn-chart-average\" style={{ bottom: averageLineHeight }} />\n )}\n\n {/* Bottom (Negative) Chart Area */}\n <div style={{ height: bottomHeight }}>\n {/* Only display the bar here if it has a negative value */}\n {value < 0 && (\n <Bar\n ariaLabel={ariaLabel}\n color={color}\n height={bottomBarHeight}\n index={index}\n label={valueLabel}\n onClick={onClick}\n value={value}\n />\n )}\n </div>\n\n {/* X-Axis label */}\n <div\n className={`mx-cmn-bar-label ${onClick ? 'mx-cmn-clickable' : ''}`}\n onClick={onClick ? () => onClick(index) : undefined}\n >\n <Text bold={selectedIndex === index} color={xAxisColor} variant=\"Small\">\n {xAxisLabel}\n </Text>\n </div>\n </div>\n )\n}\n\nconst getStyles = (tokens: any, width: number | string | undefined) =>\n css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: width === undefined ? 1 : 0,\n width,\n '& .mx-cmn-chart-average': {\n borderTop: `${tokens.Spacing.XTiny}px dotted ${tokens.Color.Neutral500}`,\n position: 'relative',\n marginRight: tokens.Spacing.XTiny,\n },\n '& .mx-cmn-zero-line': {\n borderBottom: '1px solid text.primary',\n width: '100%',\n },\n '& .mx-cmn-bar-label': {\n minHeight: tokens.Spacing.Medium,\n maxHeight: tokens.Spacing.Medium,\n marginBottom: tokens.Spacing.XSmall,\n marginTop: tokens.Spacing.XSmall,\n textAlign: 'center',\n width: '100%',\n },\n '& .mx-cmn-clickable': {\n cursor: 'pointer',\n },\n })\n\nexport default BarColumn\n","/**\n * Returns a sum\n *\n * @param acc accumulator\n * @param value current value\n */\nexport const sumReducer = (acc: number, value: number) => acc + value\n\n/**\n * Returns the max range\n *\n * @param acc accumulator\n * @param value current value\n */\nexport const rangeReducer = (acc: number, value: number) =>\n Math.abs(value) > acc ? Math.abs(value) : acc\n\n/**\n * Returns an array with the value of an object added\n *\n * @param acc accumulator\n * @param value current value\n */\nexport const valueReducer = (acc: number[], value: { value: number }) => [...acc, value.value]\n\n/**\n * Returns full height if only the first section is visible, half height if both sections\n * are visible and 0 if the first section is not visible\n *\n * @param hasSection1 If the first section is visible\n * @param hasSection2 If the second section is visible\n * @param fullHeight The full height\n */\nexport const getSectionHeight = (\n hasSection1: boolean,\n hasSection2: boolean,\n fullHeight: number,\n) => {\n const height = hasSection1 && hasSection2 ? fullHeight / 2 : fullHeight\n return !hasSection1 ? 0 : height\n}\n\n/**\n * Returns the +/- pixel height of the average line. This is calcluated using the percentange of average\n * to max value multiplied by the height. If the max value is less than 0, then we use negative min value.\n *\n * @param average The average value\n * @param max The maximum value\n * @param min The minimum value\n * @param height The height of the container the average line displays in.\n */\nexport const getAverageLineHeight = (average: number, max: number, min: number, height: number) => {\n return (average / (max < 0 ? -min : max)) * height || 0\n}\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { useTokens } from '@mxenabled/mxui'\n\nimport Legend from './Legend'\nimport BarColumn from './BarColumn'\nimport {\n getAverageLineHeight,\n getSectionHeight,\n rangeReducer,\n sumReducer,\n valueReducer,\n} from './Util'\n\nexport type BarChartData = {\n ariaLabel: string\n label: string\n value: number\n}\n\nexport interface BarChartProps {\n average?: number\n barWidth?: number | string\n color: string\n data: BarChartData[]\n height: number\n legendLabelAverage: string\n legendLabelMain: string\n onBarClick?: (index: number) => void\n selectedIndex?: number\n valueFormatter?: (value: number) => string\n}\n\n/**\n * BarChart component to display a vertical bar chart given an array of data\n *\n * @param average OPTIONAL custom average not based on average or all value\n * @param barWidth OPTIONAL pixel or percentage width of bars\n * @param color Color of the bars\n * @param data An array of chart data. Chart data must contain and aria label, label and value.\n * @param height Height in pixels of the chart\n * @param legendLabelAverage Label to use on legend for the average value\n * @param legendLabelMain Label to use on the legend for the data\n * @param onBarClick OPTIONAL function to call if bar is clicked\n * @param selectedIndex OPTIONAL indicates the selected bar\n * @param valueFormatter OPTIONAL function to call to format the value displayed with the bars\n */\nconst BarChart: React.FC<BarChartProps> = ({\n average,\n barWidth = '8%',\n color,\n data,\n height,\n legendLabelAverage,\n legendLabelMain,\n onBarClick,\n selectedIndex,\n valueFormatter = (value: number) => `${value}`,\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens)\n\n const values = data.reduce(valueReducer, [])\n const avg = average !== undefined ? average : values.reduce(sumReducer, 0) / values.length\n const max = Math.max(...values)\n const min = Math.min(...values)\n const range = values.reduce(rangeReducer, 0)\n\n const hasTop = max >= 0\n const hasBottom = min < 0\n const topHeight = getSectionHeight(hasTop, hasBottom, height)\n const bottomHeight = getSectionHeight(hasBottom, hasTop, height)\n const averageLineHeight = getAverageLineHeight(avg, max, min, topHeight || bottomHeight)\n\n const getBarColor = (index: number) => {\n if (selectedIndex === undefined || index === selectedIndex) {\n return color\n }\n return `${color}80`\n }\n\n const EmptyColumn = () => (\n <BarColumn\n averageLineHeight={averageLineHeight}\n bottomHeight={bottomHeight}\n color={''}\n range={range}\n topHeight={topHeight}\n value={0}\n width={undefined}\n />\n )\n\n return (\n <div className={`mx-cmn-bar-chart ${styles}`}>\n <div className=\"mx-cmn-chart-container\">\n <EmptyColumn />\n {data.map((d, index) => (\n <React.Fragment key={`column-${index}`}>\n <BarColumn\n ariaLabel={d.ariaLabel}\n averageLineHeight={averageLineHeight}\n bottomHeight={bottomHeight}\n color={getBarColor(index)}\n index={index}\n onClick={onBarClick}\n range={range}\n selectedIndex={selectedIndex}\n topHeight={topHeight}\n value={d.value}\n valueLabel={valueFormatter(d.value)}\n width={barWidth}\n xAxisLabel={d.label}\n />\n <EmptyColumn />\n </React.Fragment>\n ))}\n </div>\n <Legend color={color} labelAverage={legendLabelAverage} labelMain={legendLabelMain} />\n </div>\n )\n}\n\nconst getStyles = (tokens: any) =>\n css({\n '& .mx-cmn-chart-container': {\n alignItems: 'flex-end',\n display: 'flex',\n justifyContent: 'space-evenly',\n marginTop: tokens.Spacing.Large,\n marginBottom: tokens.Spacing.Medium,\n },\n })\n\nexport default BarChart\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { useTokens } from '@mxenabled/mxui'\n\nimport { DEFAULT_DONUT_SIZE, DEFAULT_STROKE_WIDTH } from '../../constants/Donut'\n\nexport interface Segment {\n percent: number\n color: string\n}\n\nexport interface MultiSegmentDonutProps {\n children: React.ReactNode\n hasGap?: boolean\n segments: Segment[]\n size?: number\n strokeWidth?: number\n}\n\nconst MultiSegmentDonut: React.FC<MultiSegmentDonutProps> = ({\n hasGap = false,\n segments,\n size = DEFAULT_DONUT_SIZE,\n strokeWidth = DEFAULT_STROKE_WIDTH,\n children,\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens, size)\n\n const radius = (size - strokeWidth) / 2\n const halfSize = size / 2\n\n let offset = -90 - (hasGap ? 1 : 0)\n\n let length = 0\n\n return (\n <div className={`mx-cmn-multi-segment-donut ${styles}`}>\n <svg height={size} width={size}>\n <circle\n cx={halfSize}\n cy={halfSize}\n fill=\"none\"\n r={radius}\n stroke={tokens.Color.Neutral300}\n strokeWidth={strokeWidth}\n />\n {segments.map((segment, index) => {\n offset += 360 * length + (hasGap ? 1 : 0)\n length = (segment.percent - (hasGap ? 0.3 : 0)) / 100\n\n return (\n <circle\n cx={halfSize}\n cy={halfSize}\n fill=\"none\"\n key={index}\n r={radius}\n stroke={segment.color}\n strokeDasharray={2 * Math.PI * radius}\n strokeDashoffset={2 * Math.PI * radius * (1 - length)}\n strokeWidth={strokeWidth}\n transform={`rotate(${offset}, ${halfSize}, ${halfSize})`}\n />\n )\n })}\n </svg>\n <div className=\"mx-cmn-multi-segment-donut-children\">{children}</div>\n </div>\n )\n}\n\nconst getStyles = (tokens: any, size: number) =>\n css({\n height: size,\n marginTop: `-${tokens.Spacing.XSmall}px`,\n position: 'relative',\n width: size,\n '& .mx-cmn-multi-segment-donut-children': {\n left: '50%',\n position: 'absolute',\n textAlign: 'center',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n })\n\nexport default MultiSegmentDonut\n","import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport IconButton from '@mui/material/IconButton'\nimport Tooltip from '@mui/material/Tooltip'\nimport useTheme from '@mui/material/styles/useTheme'\n\ninterface ResponsiveButtonProps {\n icon: React.ReactElement\n label: string\n onClick?: () => void\n placement?:\n | 'bottom-end'\n | 'bottom-start'\n | 'bottom'\n | 'left-end'\n | 'left-start'\n | 'left'\n | 'right-end'\n | 'right-start'\n | 'right'\n | 'top-end'\n | 'top-start'\n | 'top'\n tooltipText: string\n variant?: 'contained' | 'outlined' | 'text'\n}\n\nconst ResponsiveButton: React.FC<ResponsiveButtonProps> = ({\n icon,\n label,\n onClick,\n placement = 'bottom',\n tooltipText,\n variant = 'text',\n}) => {\n const theme = useTheme()\n\n return (\n <React.Fragment>\n <Button\n onClick={onClick}\n startIcon={icon}\n sx={{\n [theme.breakpoints.down('lg')]: { display: 'none' },\n [theme.breakpoints.up('lg')]: { display: 'inline-flex' },\n }}\n title={tooltipText}\n variant={variant}\n >\n {label}\n </Button>\n <Tooltip\n describeChild={true}\n placement={placement}\n sx={{ display: { xs: 'inline-flex', lg: 'none' } }}\n title={tooltipText}\n >\n <IconButton onClick={onClick}>{icon}</IconButton>\n </Tooltip>\n </React.Fragment>\n )\n}\n\nexport default ResponsiveButton\n","import { makeAutoObservable, runInAction } from 'mobx'\nimport { GlobalCopyApi } from '../api'\nimport { GlobalCopy } from '../types'\nimport { GlobalStore } from './GlobalStore'\n\nexport class GlobalCopyStore {\n globalStore: GlobalStore\n api: GlobalCopyApi = new GlobalCopyApi('/', '')\n\n copy: GlobalCopy = {} as GlobalCopy\n featureNamespace = 'experiences'\n\n isInitialized = false\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new GlobalCopyApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n // DEPRECATED: Initialize api in constructor and use loadCopy instead\n // TODO: Remove this function\n initialize = async (endpoint: string, token: string) => {\n this.api = new GlobalCopyApi(endpoint, token)\n\n await this.loadCopy()\n }\n\n loadCopy = async () => {\n await this.getCopy(this.featureNamespace)\n\n runInAction(() => {\n this.isInitialized = true\n })\n }\n\n getCopy = async (namespace: string, translationKey: string = '') => {\n try {\n const newCopy = await this.api.getGlobalCopy(namespace, translationKey)\n\n runInAction(() => {\n this.copy = newCopy[namespace]\n })\n } catch (error) {\n console.error(`Error occurred while fetching ${this.featureNamespace} copy: ${error}`)\n }\n }\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\nimport posthog, { Survey, SurveyQuestion } from 'posthog-js'\n\nimport { GlobalStore } from '../../common/stores/GlobalStore'\nexport class AnalyticsStore {\n globalStore: GlobalStore\n survey: Survey | null = null\n currentQuestionIndex: number = 0\n question: SurveyQuestion | null = null\n response: number | string | null = null\n responses: Record<string, number | string | null> = {}\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n makeAutoObservable(this)\n }\n\n get isLastQuestion() {\n return this.currentQuestionIndex === this.surveyQuestions.length - 1\n }\n\n get questionCount() {\n return `${this.currentQuestionIndex + 1}/${this.surveyQuestions.length}`\n }\n\n get responsePayload() {\n return {\n $survey_id: this.surveyId,\n ...this.responses,\n }\n }\n\n // TODO hardcode elsewhere\n get surveyId() {\n const posthogKey = window.app?.postHogPublicKey\n\n return posthogKey === 'phc_KclQGnOZEaYCttkpiVpuyOYeBlixGo6xNphYgWV4CXo'\n ? '0196caa6-9b37-0000-98a7-f04e8d56faf5'\n : '0196a6b0-ccde-0000-b980-0b84ea2fef4a'\n }\n\n get surveyQuestions() {\n return this.survey ? this.survey.questions : ([] as SurveyQuestion[])\n }\n\n loadSurvey = (forceReload: boolean = false) => {\n posthog.getActiveMatchingSurveys((surveys) => {\n runInAction(() => {\n if (surveys.length > 0) {\n const survey = surveys.find((s) => s.id === this.surveyId)\n if (survey) {\n this.survey = survey\n this.currentQuestionIndex = 0\n this.question = survey.questions[0]\n this.response = null\n this.responses = {}\n }\n }\n })\n }, forceReload)\n }\n\n nextQuestion = () => {\n if (this.currentQuestionIndex < this.surveyQuestions.length - 1) {\n this.currentQuestionIndex += 1\n }\n this.response = null\n this.question = this.surveyQuestions[this.currentQuestionIndex]\n }\n\n resetStore = () => {\n this.survey = null\n this.currentQuestionIndex = 0\n this.question = null\n this.response = null\n this.responses = {}\n }\n\n setResponse = (response: number | string | null) => {\n this.response = response\n if (this.question) {\n this.responses[`$survey_response_${this.question.id}`] = response\n }\n }\n}\n","import type { Offer } from '../interfaces'\n\ntype SortOrder = 'asc' | 'desc'\n\nexport function orderArray<T>(arr1: T[], arr2: T[], prop: keyof T, order: SortOrder = 'asc'): T[] {\n const direction = order === 'desc' ? -1 : 1\n return [...arr1, ...arr2].sort((item1, item2) => {\n if (item1[prop] < item2[prop]) return -1 * direction\n if (item1[prop] > item2[prop]) return 1 * direction\n return 0\n })\n}\n\nexport const transformOfferIntoBeatLikeObject = (offer: Offer) => {\n return {\n ...offer, //fields that are offer specific, adding here for visibility\n image_url: offer.image_url,\n guid: offer.guid,\n created_at: offer.created_at,\n dismissed_at: offer.dismissed_at,\n active_at: offer.campaign_activated_at,\n displayed_at: offer.has_been_viewed,\n post_message_secondary: offer.pulse_post_message_secondary, //offer fields mapped to beat fields for functionality\n title: offer.pulse_title || offer.campaign_name,\n html_title: offer.pulse_title || offer.campaign_name,\n short_title: offer.pulse_title || offer.campaign_name,\n html_short_title: offer.pulse_title || offer.campaign_name,\n micro_title: offer.pulse_title || offer.campaign_name,\n html_micro_title: offer.pulse_title || offer.campaign_name,\n supporting_action: offer.pulse_call_to_action_text_secondary,\n description: offer.pulse_body,\n html_description: offer.pulse_body,\n micro_description: offer.pulse_body,\n html_micro_description: offer.pulse_body,\n call_to_action: offer.pulse_call_to_action_text,\n html_micro_call_to_action: offer.pulse_call_to_action_text,\n micro_call_to_action: offer.pulse_call_to_action_text,\n is_dismissed: offer.has_been_dismissed,\n icon_type: 5,\n template: 'MarketingOffer',\n //beat fields we null out\n account_guids: [],\n data_series: {},\n has_been_displayed: false,\n is_obsolete: false,\n is_refreshable: false,\n is_sampled: false,\n merchant_guids: [],\n payload: {},\n pulse_campaign_name: offer.campaign_name,\n scheduled_payment_guids: [],\n transaction_guids: [],\n user_guid: '',\n user_verification: 0,\n }\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\nimport { BeatApi } from '../../common/api/BeatApi'\nimport { orderArray, transformOfferIntoBeatLikeObject } from '../../microinsights/utils/beatUtils'\nimport type { Offer } from './../../microinsights/interfaces'\nimport type { Beat } from '../../common/types/Beat'\nimport type { GlobalStore } from '../../common/stores/GlobalStore'\n\nexport class BeatStore {\n globalStore: GlobalStore\n api: BeatApi = new BeatApi('/', '')\n beats: Beat[] = []\n isLoading = false\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new BeatApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n loadBeats = async () => {\n this.isLoading = true\n const beats = await this.api.getBeats()\n const offers = await this.api.getOffers()\n const beatLikeOffers = offers.map((o: Offer) => transformOfferIntoBeatLikeObject(o))\n\n runInAction(() => {\n this.beats = orderArray(beats, beatLikeOffers, 'active_at', 'desc')\n this.isLoading = false\n })\n }\n\n getBeatsByCategories(categoryGuids: string[]): Beat[] {\n // Return beats with any beat.category_guids that are in categoryGuids\n return this.beats.filter((beat) => {\n return beat.category_guids?.some((guid) => categoryGuids.includes(guid))\n })\n }\n}\n","import { ApiEndpoints, type Budget, Category, Fetch } from '../../common'\n\nexport class BudgetsApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n addBudget = async (category: Category, amount: number, parentGuid: string | null = null) => {\n return this.fetchInstance\n .post(ApiEndpoints.BUDGETS, {\n amount,\n category_guid: category.guid,\n category_name: category.name,\n parent_guid: parentGuid,\n })\n .then((data) => data.budget)\n .catch((error) => {\n throw error\n })\n }\n\n deleteBudget = async (guid: string) => {\n return this.fetchInstance\n .delete(`${ApiEndpoints.BUDGETS}/${guid}`)\n .then((data) => data)\n .catch((error) => {\n throw error\n })\n }\n\n getBudgets = async () => {\n return this.fetchInstance\n .get(ApiEndpoints.BUDGETS)\n .then((data) => data.budgets)\n .catch((error) => error)\n }\n\n updateBudget = async (budget: Budget) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.BUDGETS}/${budget.guid}`, budget)\n .then((data) => data.budget)\n .catch((error) => {\n throw error\n })\n }\n}\n","import { makeAutoObservable, reaction, runInAction } from 'mobx'\n\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport { Theme } from '@mui/system'\n\nimport {\n type Budget,\n type Category,\n type DateRange,\n type DetailedBudget,\n type DetailedCategory,\n CategoryGuids,\n GlobalStore,\n} from '../../common'\n\nimport { BudgetsApi } from '../api/BudgetsApi'\nimport { augmentBudgets, findBudget, findSubBudget } from '../utils/BudgetUtil'\n\nexport class BudgetsStore {\n api: BudgetsApi = new BudgetsApi('/', '')\n\n globalStore: GlobalStore\n\n alert: string = ''\n dateRange: DateRange = { start: startOfMonth(startOfToday()), end: endOfMonth(startOfToday()) }\n budgets: Budget[] = []\n selectedBudget: DetailedBudget | undefined\n selectedSubBudget: DetailedBudget | undefined\n isDataLoaded = false\n theme = {} as Theme\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new BudgetsApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n loadBudgetData = async () => {\n await this.loadBudgets()\n\n /** Reaction to update the selected budget/sub-budget if detailedBudgets is updated **/\n reaction(\n () => this.detailedBudgets,\n (detailedBudgets) => {\n if (detailedBudgets) {\n const budget = this.selectedBudget\n if (budget) {\n this.selectedBudget = findBudget(detailedBudgets, budget.guid)\n }\n\n const subBudget = this.selectedSubBudget\n if (subBudget && subBudget.parent_guid) {\n this.selectedSubBudget = findSubBudget(\n detailedBudgets,\n subBudget.guid,\n subBudget.parent_guid,\n )\n }\n }\n },\n )\n }\n\n get detailedBudgets(): DetailedBudget[] {\n return augmentBudgets(\n this.budgets.filter(\n (budget: Budget) =>\n budget.category_guid !== CategoryGuids.INCOME &&\n budget.category_guid !== CategoryGuids.TRANSFER &&\n budget.category_guid !== CategoryGuids.INVESTMENTS,\n ),\n this.globalStore.categoryStore.detailedCategories,\n this.globalStore.copyStore.copy.budgets,\n this.theme,\n ).sort((a, b) => {\n if (a.percentage > b.percentage) return -1\n if (a.percentage < b.percentage) return 1\n return 0\n })\n }\n\n get incomeBudget(): number | undefined {\n const filteredBudgets = augmentBudgets(\n this.budgets.filter((budget: Budget) => !budget.parent_guid),\n this.globalStore.categoryStore.detailedCategories,\n this.globalStore.copyStore.copy.budgets,\n this.theme,\n )\n\n const incomeBudget = filteredBudgets.reduce(\n (acc, curr) => {\n if (curr.category_guid !== CategoryGuids.INCOME) return acc\n if (!acc || curr.percentage > acc.percentage) return curr\n return acc\n },\n undefined as DetailedBudget | undefined,\n )\n\n return incomeBudget?.amount\n }\n\n get unbudgetedCategories(): DetailedCategory[] {\n return this.globalStore.categoryStore.spendCategories.filter(\n (category) => !this.detailedBudgets.find((budget) => budget.category_guid === category.guid),\n )\n }\n\n get totalBudgeted(): number {\n return this.detailedBudgets.reduce((total, budget) => total + budget.amount, 0)\n }\n\n addBudget = async (category: Category, amount: number, parentGuid: string | null = null) => {\n try {\n const budget = await this.api.addBudget(category, amount, parentGuid)\n runInAction(() => {\n this.budgets.push(budget)\n })\n } catch (error) {\n console.error(`Error adding budget: ${error}`)\n }\n }\n\n deleteBudget = async (guid: string) => {\n try {\n await this.api.deleteBudget(guid)\n\n runInAction(() => {\n const index = this.budgets.findIndex((budget) => budget.guid === guid)\n if (index >= 0) {\n this.budgets.splice(index, 1)\n }\n })\n } catch (error) {\n console.error(`Error deleting budget: ${error}`)\n }\n }\n\n loadBudgets = async () => {\n try {\n const budgets = (await this.api.getBudgets()) as Budget[]\n\n runInAction(() => {\n this.budgets = budgets\n this.isDataLoaded = true\n })\n } catch (error) {\n console.error(`Error occurred while loading budgets: ${error}`)\n throw error\n }\n }\n\n setAlert = (alert: string) => (this.alert = alert)\n\n setDateRange = (dateRange: DateRange) => (this.dateRange = dateRange)\n\n setSelectedBudget = (budget: DetailedBudget | undefined) => (this.selectedBudget = budget)\n\n setSelectedSubBudget = (budget: DetailedBudget | undefined) => (this.selectedSubBudget = budget)\n\n setTheme = (theme: Theme) => (this.theme = theme)\n\n /**\n * Recalculate budget by using the average amount from top-level categories\n * @param categories Detailed categories\n */\n recalculateBudgets = async (categories: DetailedCategory[]) => {\n try {\n for (const category of categories) {\n const budget = this.budgets.find((budget) => budget.category_guid === category.guid)\n if (budget) {\n await this.api.updateBudget({\n ...budget,\n amount: category.totalAverageAmount,\n })\n } else {\n await this.api.addBudget(category, category.totalAverageAmount)\n }\n }\n const budgetsToDelete = this.budgets.filter(\n (budget) => !categories.find((c) => c.guid === budget.category_guid),\n )\n\n for (const budgetToDelete of budgetsToDelete) {\n await this.api.deleteBudget(budgetToDelete.guid)\n }\n\n await this.loadBudgets()\n\n return { data: this.budgets, isSuccess: true }\n } catch (error) {\n console.error('error recalculating budgets', error)\n return { data: [], isSuccess: false }\n }\n }\n\n updateBudget = async (budget: Budget) => {\n try {\n const updatedBudget = await this.api.updateBudget(budget)\n\n runInAction(() => {\n const index = this.budgets.findIndex((b) => b.guid === budget.guid)\n if (index >= 0) {\n this.budgets[index] = updatedBudget\n }\n })\n } catch (error) {\n console.error(`Error updating budget: ${error}`)\n }\n }\n}\n","import { Account } from './Account'\nimport { Transaction } from './Transaction'\n\nexport interface Beat {\n account_guids: string[] | []\n active_at?: string | number\n associated_transaction_guid?: string | null\n call_to_action?: string | null\n category_guids?: string[] | []\n created_at?: string | number\n cta_clicked_at?: number | null\n data_series: DataSeries\n description?: string\n digest?: string\n dismissed_at?: number | null\n displayed_at?: string | null\n errors?: any\n guid: string\n has_been_displayed: boolean\n html_description?: string\n html_in_description_cta?: string\n html_micro_call_to_action?: string\n html_micro_description?: string\n html_micro_title?: string\n html_short_title?: string\n html_title: string\n icon_color?: string | null\n icon_type?: number | null\n in_description_cta?: string | null\n is_dismissed: boolean\n is_obsolete: boolean\n is_refreshable: boolean\n is_sampled: boolean\n merchant_guids: string[] | []\n metadata?: string | null\n micro_call_to_action?: string | null\n micro_description?: string | null\n micro_title?: string | null\n payload: any\n primary_account?: Account\n primary_account_guid?: string | null\n primary_category_guid?: string | null\n primary_goal_guid?: string | null\n primary_merchant_guid?: string | null\n primary_scheduled_payment_guid?: string | null\n primary_transaction?: Transaction\n primary_transaction_guid?: string | null\n power_action_completed_at?: string | null\n power_action_has_been_completed?: boolean\n scheduled_payment_guids: string[] | []\n short_title?: string | null\n supporting_action?: string | null\n template: string\n title: string\n transaction_guids: string[] | []\n transactions?: Transaction[]\n user_guid: string\n user_verification: UserVerification\n}\n\nexport interface DataSeries {\n names?: string[]\n types?: string[]\n data?: any[]\n}\n\nexport enum UserVerification {\n UNKNOWN = 0,\n CORRECT = 1,\n INCORRECT = 2,\n}\n","import { ScheduledPayment, Transaction } from '../index'\n\nexport enum ExpenseStatus {\n Missed = 'Missed',\n Paid = 'Paid',\n Upcoming = 'Upcoming expense',\n Income = 'Income',\n}\n\nexport interface Expense extends ScheduledPayment {\n status: ExpenseStatus\n payments: Transaction[]\n transactions: Transaction[]\n}\n\nexport enum ScheduledPaymentTypes {\n Unknown = 0,\n Subscription = 1,\n Bill = 2,\n}\n","export enum ScreenSize {\n Desktop = 'Desktop',\n Mobile = 'Mobile',\n}\n","import { ApiEndpoints, Fetch } from '../../common'\nimport { Ticket } from '../../common/types/Help'\n\nexport class HelpApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n createSupportTicket = async (ticket: Ticket) => {\n return this.fetchInstance.post(ApiEndpoints.SUPPORT_TICKETS, ticket).then((data) => data)\n }\n}\n","import type { HelpCategory, Profile } from '../../common/types/Help'\nimport { CategoryList } from '../../common/types/localization/HelpCopy'\nimport { HELP_CATEGORIES } from '../constants'\n\nconst isCategoryAccessibleByProfile = (category: HelpCategory, profile: Profile): boolean => {\n if (category.guid === 'general' || category.guid === 'insights') return true\n if (!category.flags) return false\n return category.flags.every((flag) => profile[flag as keyof Profile])\n}\n\nexport const getAccessibleHelpCategories = (\n profile: Profile,\n categoryList: CategoryList,\n): HelpCategory[] => {\n const accessibleCategories: HelpCategory[] = []\n\n for (const el of HELP_CATEGORIES) {\n const category = categoryList[el.guid as keyof CategoryList]\n if (!category) continue\n\n const updatedCategory = {\n ...el,\n title: category.label,\n topics: el.topics.map(({ topicKey }, index) => ({\n topicKey,\n label: category.topics[index],\n })),\n }\n if (isCategoryAccessibleByProfile(updatedCategory, profile))\n accessibleCategories.push(updatedCategory)\n }\n\n return accessibleCategories\n}\n","import { makeAutoObservable } from 'mobx'\n\nimport { HelpApi } from '../api/HelpApi'\nimport { HelpCopy, type GlobalStore } from '../../common'\nimport { Config } from '../../common/types/Global'\nimport { HelpAlertProps, Ticket } from '../../common/types/Help'\nimport { getAccessibleHelpCategories } from '../utils'\n\nexport class HelpStore {\n alert: HelpAlertProps = { message: '', severity: undefined }\n api = new HelpApi('/', '')\n appConfig: Config | undefined\n globalStore: GlobalStore\n isLoading: boolean = false\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new HelpApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n createSupportTicket = async (ticket: Ticket) => {\n try {\n this.isLoading = true\n await this.api.createSupportTicket(ticket)\n this.setAlert(this.copy.request_support_submit_success_message, 'success')\n } catch (error) {\n this.setAlert(this.copy.request_support_submit_failure_message, 'error')\n console.error(`Error occurred while submitting:`, error)\n } finally {\n this.isLoading = false\n }\n }\n\n setAlert = (message: string, severity: HelpAlertProps['severity'] = undefined) =>\n (this.alert = { message, severity })\n\n get copy(): HelpCopy {\n return this.globalStore.copyStore.copy.help\n }\n\n get helpCategories() {\n const { client_communication_profile, client_profile } = this.globalStore.appDataStore.appData\n\n const {\n help: { category_list },\n } = this.globalStore.copyStore.copy\n\n return getAccessibleHelpCategories(\n {\n ...client_communication_profile,\n ...client_profile,\n ...this.globalStore.appConfig.config,\n },\n category_list,\n )\n }\n}\n","import { ApiEndpoints, Fetch, Holding } from '../../common'\n\nexport class HoldingApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n getHoldings = async () => {\n return this.fetchInstance.get(ApiEndpoints.HOLDINGS).then((data) => data.holdings)\n }\n\n updateHoldings = async (holding: Holding) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.HOLDINGS}/${holding.guid}`, holding)\n .then((data) => data.holding)\n }\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\n\nimport { type Holding, GlobalStore } from '../../common'\n\nimport { HoldingApi } from '../api/HoldingApi'\nimport { AnalysisType } from '../constants'\nimport {\n analysisChartData,\n analysisDetailsData,\n mapDataToPercentageGrid,\n} from '../util/InvestmentUtil'\n\nexport class HoldingStore {\n analysisType: AnalysisType = AnalysisType.Stocks\n api = new HoldingApi('/', '')\n holdings: Holding[] = []\n holdingsLoaded = false\n globalStore: GlobalStore\n showConnectionsWidget = false\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new HoldingApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n get analysisChartData() {\n return mapDataToPercentageGrid(analysisChartData(this.visibleHoldings), this.analysisType)\n }\n\n get analysisDetails() {\n return analysisDetailsData(this.visibleHoldings)[this.analysisType] || {}\n }\n\n get visibleHoldings() {\n return this.holdings.filter((holding) =>\n this.globalStore.globalUiStore.selectedAccountGuids.includes(holding.account_guid),\n )\n }\n\n setShowConnectionsWidget = (value: boolean) => {\n this.showConnectionsWidget = value\n }\n\n loadHoldings = async () => {\n try {\n const holdings = await this.api.getHoldings()\n\n runInAction(() => {\n this.holdings = [...holdings]\n this.holdingsLoaded = true\n })\n } catch (error) {\n console.error(`Error occured while getting holdings: ${error}`)\n }\n }\n\n setAnalysisType = (analysisType: AnalysisType) => {\n this.analysisType = analysisType\n }\n\n updateHoldings = async (holding: Holding) => {\n this.holdingsLoaded = false\n try {\n const updatedHolding = await this.api.updateHoldings(holding)\n const updatedIndex = this.holdings.findIndex(({ guid }) => guid === holding.guid)\n\n if (updatedIndex >= 0) {\n const holdings = [...this.holdings]\n holdings[updatedIndex] = updatedHolding\n\n runInAction(() => {\n this.holdings = holdings\n this.holdingsLoaded = true\n })\n }\n } catch (error) {\n console.error(`Error occurred while updating holding: ${error}`)\n }\n }\n}\n","import { AppConfig } from '../types/AppData'\n\nexport const DefaultAppConfig: AppConfig = {\n clientConfig: {},\n clientStyleProfile: {},\n config: {\n assets_prefix: '/assets',\n bundle: 'widgetLoader',\n client_guid: '',\n dashboard_accounts_index: 6,\n dashboard_accounts_location: 0,\n dashboard_activity_index: 2,\n dashboard_activity_location: 0,\n dashboard_budgets_index: 5,\n dashboard_budgets_location: 1,\n dashboard_cash_flow_index: 0,\n dashboard_cash_flow_location: 0,\n dashboard_connect_index: 7,\n dashboard_connect_location: 1,\n dashboard_insights_index: 3,\n dashboard_insights_location: 1,\n dashboard_spending_index: 1,\n dashboard_spending_location: 1,\n dashboard_trends_index: 4,\n dashboard_trends_location: 0,\n display_account_number_in_accounts: true,\n display_add_manual_transaction_in_transactions: true,\n display_available_balance_in_accounts: true,\n display_email_edit_field_in_settings: true,\n display_mobile_devices_in_settings: true,\n display_notification_settings_in_settings: true,\n display_only_external_accounts_in_accounts: false,\n display_password_options_in_settings: true,\n display_sms_edit_field_in_settings: true,\n display_terms_and_conditions: true,\n display_user_profile_in_settings: true,\n display_user_transaction_rules_in_settings: true,\n enable_add_account_in_zero_state: true,\n enable_aggregation_prompts: true,\n enable_external_accounts_in_goals_widget: true,\n enable_funds_transfers_in_goals_widget: false,\n enable_manual_accounts: true,\n enable_mark_account_closed_for_held_accounts: true,\n enable_mark_account_duplicate_for_held_accounts: true,\n enable_renaming_home_accounts: true,\n enable_support_requests: false,\n language: 'en-US',\n product_name: 'Money Dashboard',\n session_token: '',\n show_account_nicknames_in_master: false,\n show_accounts_widget_in_master: true,\n show_budgets_widget_in_master: true,\n show_carousel_card_border_in_pulse_micro_widget: false,\n show_cash_flow_widget_in_master: true,\n show_connections_widget_in_master: true,\n show_cta_colocated_with_text_in_pulse_micro_widget: true,\n show_debts_widget_in_master: true,\n show_finstrong_widget_in_master: true,\n show_full_experience_link_in_pulse_micro_widget: false,\n show_full_experience_link_in_pulse_mini_widget: false,\n show_goals_widget_in_master: true,\n show_help_widget_in_master: true,\n show_horizontal_padding_in_pulse_micro_widget: true,\n show_icon_in_pulse_micro_widget: true,\n show_insights_widget_in_master: true,\n show_investments_widget_in_master: false,\n show_mx_branding: true,\n show_navigation_controls_in_pulse_micro_widget: true,\n show_net_worth_widget_in_master: true,\n show_notifications_widget_in_master: true,\n show_recurring_transactions_widget_in_master: true,\n show_settings_widget_in_master: true,\n show_spending_plan_widget_in_master: false,\n show_spending_widget_in_master: true,\n show_transactions_widget_in_master: true,\n show_trends_widget_in_master: true,\n type: 'money-dashboard',\n websocket: {\n hmac: '',\n token: '',\n url: '',\n },\n widgets_display_name: 'Money Dashboard ',\n },\n honeyBadgerPublicKey: '',\n options: {\n assets_prefix: '/assets',\n brokaw_auth: {\n token: '',\n hmac: '',\n url: '',\n },\n brokaw_websocket_url: '',\n bundle: 'widgetLoader',\n custom_copy_namespace: '',\n language: 'en-US',\n product_name: 'Master Widget',\n session_token: '',\n subtype: 'master',\n type: 'money_dashboard',\n },\n postHogPublicKey: 'phc_1fVYJICC69TpW4wagp9o2XqQ8E7X98cAmcR5psSpfkE',\n userFeatures: [],\n}\n","import Fetch from '../utils/Fetch'\n\nimport { ApiEndpoints } from '../constants'\nimport { AppData } from '../types'\n\nexport class AppDataApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n getAppData = async () => {\n return this.fetchInstance.get(ApiEndpoints.APP_DATA).then((data): AppData => data)\n }\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\n\nimport { AppDataApi } from '../api/AppDataApi'\n\nimport type {\n AppConfig,\n AppData,\n Banner,\n User,\n UserCommunicationProfile,\n UserProfile,\n} from '../types'\nimport { BannerApi } from '../api'\nimport { GlobalStore } from './GlobalStore'\n\nexport class AppDataStore {\n globalStore: GlobalStore\n api: AppDataApi = new AppDataApi('/', '')\n bannerApi: BannerApi = new BannerApi('/')\n\n appData: AppData = {} as AppData\n banner: Banner = {}\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new AppDataApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n get appConfig(): AppConfig {\n return this.globalStore.appConfig\n }\n\n get clientCommunicationProfile() {\n return this.appData.client_communication_profile\n }\n\n get clientInsightProfile() {\n return this.appData.client_insight_profile\n }\n\n get user() {\n return this.appData.user\n }\n\n get userCommunicationProfile() {\n return this.appData.user_communication_profile\n }\n\n get userProfile() {\n return this.appData.user_profile\n }\n\n loadAppData = async (appDataOverrides?: AppData) => {\n try {\n const appData = appDataOverrides || (await this.api.getAppData())\n\n runInAction(() => {\n this.appData = appData\n this.bannerApi = new BannerApi(appData.address?.bullseye || '/')\n })\n } catch (error) {\n console.error(`Error loading app data: ${error}`)\n }\n }\n\n loadBanner = async () => {\n try {\n const userGuid = this.user?.guid ?? null\n const banner = userGuid ? await this.bannerApi.getBanner(userGuid) : {}\n\n runInAction(() => {\n this.banner = banner\n })\n } catch (error) {\n console.error(`Error loading banner: ${error}`)\n }\n }\n\n setUser = (user: User) => (this.appData.user = user)\n\n setUserCommunicationProfile = (profile: UserCommunicationProfile) =>\n (this.appData.user_communication_profile = profile)\n\n setUserProfile = (userProfile: UserProfile) => (this.appData.user_profile = userProfile)\n}\n","import { makeAutoObservable } from 'mobx'\n\nimport { WidgetApi } from '../api'\n\nimport type { GlobalStore } from '../../common'\n\nexport class ConnectStore {\n globalStore: GlobalStore\n widgetApi: WidgetApi = new WidgetApi('/', '')\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.widgetApi = new WidgetApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n loadWidget = async ({ widget = 'connect_widget', mode = 'light', ...rest }) => {\n return await this.widgetApi.requestWidgetUrl({\n widget_url: { widget_type: widget, color_scheme: mode, ...rest },\n })\n }\n}\n","import { makeAutoObservable } from 'mobx'\n\nimport { addMonths } from 'date-fns/addMonths'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getMonth } from 'date-fns/getMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport { Account } from '../types'\nimport type { GlobalStore } from './GlobalStore'\n\nexport class GlobalUiStore {\n globalStore: GlobalStore\n isInitialized = false\n\n selectedAccounts: Account[] = []\n selectedAccountGuids: string[] = this.selectedAccounts.map((account) => account.guid)\n\n displayedDate = new Date()\n displayedDateRange = {\n start: startOfMonth(this.displayedDate),\n end: endOfMonth(this.displayedDate),\n }\n\n constructor(globalStore: GlobalStore) {\n makeAutoObservable(this)\n this.globalStore = globalStore\n }\n\n get isCopyLoaded() {\n return this.globalStore.copyStore.isInitialized\n }\n\n setInitialized = (isInitialized: boolean) => {\n this.isInitialized = isInitialized\n }\n\n // for the global account filter\n // if excluded from 1 widget, excluded from all\n setSelectedAccounts = (accounts: Account[]) => {\n this.selectedAccounts = accounts.filter(\n (account: Account) =>\n !(\n account.is_excluded_from_accounts ||\n account.is_excluded_from_budgets ||\n account.is_excluded_from_cash_flow ||\n account.is_excluded_from_debts ||\n account.is_excluded_from_goals ||\n account.is_excluded_from_investments ||\n account.is_excluded_from_net_worth ||\n account.is_excluded_from_spending ||\n account.is_excluded_from_transactions ||\n account.is_excluded_from_trends\n ),\n )\n this.selectedAccountGuids = this.selectedAccounts.map((account) => account.guid)\n }\n\n // Sets an array of selected account guids for the AccountFilter component\n setSelectedAccountGuids = async (guids: string[]) => {\n const currentSelected = new Set(this.selectedAccountGuids)\n const newSelected = new Set(guids)\n\n // determine if and how selections are different; get differing guid(s)\n const guidsToInclude = [...newSelected].filter((guid) => !currentSelected.has(guid))\n const guidsToExclude = [...currentSelected].filter((guid) => !newSelected.has(guid))\n\n if (guidsToInclude.length > 0) {\n this.globalStore.accountStore.updateAccountFiltering(guidsToInclude, false)\n }\n\n if (guidsToExclude.length > 0) {\n this.globalStore.accountStore.updateAccountFiltering(guidsToExclude, true)\n }\n\n this.selectedAccountGuids = guids\n }\n\n setDisplayedDate = (startDate: Date, endDate: Date) => {\n this.displayedDate = endDate\n this.displayedDateRange = {\n start: startDate,\n end: endDate,\n }\n }\n\n get shouldDisableNextDate() {\n const selectedMonth = getMonth(this.displayedDate)\n const nextMonth = getMonth(addMonths(new Date(), 1))\n\n return selectedMonth === nextMonth\n }\n\n get shouldDisablePrevDate() {\n const selectedMonth = getMonth(this.displayedDate)\n const currentMonth = getMonth(new Date())\n\n return selectedMonth === currentMonth\n }\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\n\nimport { UserApi } from '../api'\nimport { GlobalStore } from './GlobalStore'\nimport type { User, UserFeature, UserProfile } from '../types'\n\nexport class UserStore {\n globalStore: GlobalStore\n api: UserApi = new UserApi('/', '')\n\n userFeatures: UserFeature[] = []\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.api = new UserApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n // DEPRECATED: Initialize api in constructor and use loadUserFeatures instead\n // TODO: Remove this function\n initialize = async (endpoint: string, token: string) => {\n this.api = new UserApi(endpoint, token)\n await this.loadUserFeatures()\n }\n\n get userProfile() {\n return this.globalStore.appDataStore.userProfile\n }\n\n get user() {\n return this.globalStore.appDataStore.user\n }\n\n loadUserFeatures = async (featuresOverrides?: UserFeature[]) => {\n try {\n const features = featuresOverrides || (await this.api.getUserFeatures())\n\n runInAction(() => {\n this.userFeatures = features\n })\n } catch (e) {\n console.error(`Error occurred while loading user features: ${e}`)\n }\n }\n\n updateUser = async (user: User) => {\n try {\n const updatedUser = await this.api.updateUser(user)\n\n this.globalStore.appDataStore.setUser(updatedUser)\n } catch (error) {\n console.error(`Error updating User: ${error}`)\n }\n }\n\n updateUserProfile = async (userProfile: UserProfile) => {\n try {\n const updatedProfile = await this.api.updateUserProfile(userProfile)\n\n this.globalStore.appDataStore.setUserProfile(updatedProfile)\n } catch (error) {\n console.error(`Error occurred while updating user profile: ${error}`)\n }\n }\n}\n","import { makeAutoObservable } from 'mobx'\n\nimport { AccountStore } from '../../accounts'\nimport { AnalyticsStore } from '../../analytics/stores/AnalyticsStore'\nimport { BeatStore } from '../../insights/store/BeatStore'\nimport { BudgetsStore } from '../../budgets/store/BudgetsStore'\nimport { CashflowStore } from '../../cashflow'\nimport { CategoryStore } from '../../categories'\nimport { DebtsStore } from '../../debts'\nimport { FinstrongStore } from '../../finstrong'\nimport { GoalStore } from '../../goals'\nimport { HelpStore } from '../../help/store/HelpStore'\nimport { HoldingStore } from '../../investments/stores/HoldingStore'\nimport { MerchantStore } from '../../merchants'\nimport { NetWorthStore } from '../../networth'\nimport { NotificationStore } from '../../notifications'\nimport { SettingsStore } from '../../settings'\nimport { TransactionStore } from '../../transactions'\nimport { DefaultAppConfig } from '../constants/DefaultConfig'\nimport { RecurringTransactionsStore } from '../../recurringtransactions'\nimport { TrendsStore } from '../../trends'\n\nimport { AppDataStore } from './AppDataStore'\nimport { ConnectStore } from './ConnectStore'\nimport { GlobalCopyStore } from './GlobalCopyStore'\nimport { GlobalUiStore } from './GlobalUiStore'\nimport { UserStore } from './UserStore'\n\nimport type { Account, Category, Institution, Member } from '../../common'\n\nimport type {\n AppConfig,\n AppData,\n Beat,\n Tag,\n Tagging,\n Transaction,\n TransactionRule,\n UserFeature,\n} from '../types'\n\ninterface LoadDataProps {\n accounts?: Account[]\n appData?: AppData\n associatedBeats?: Beat[]\n categories?: Category[]\n institutions?: Institution[]\n members?: Member[]\n taggings?: Tagging[]\n tags?: Tag[]\n transactionRules?: TransactionRule[]\n transactions?: Transaction[]\n userFeatures?: UserFeature[]\n}\n\nexport class GlobalStore {\n // Global properties\n appConfig: AppConfig = DefaultAppConfig\n endpoint: string = '/'\n sessionToken: string = ''\n\n // Data Stores\n accountStore: AccountStore\n appDataStore: AppDataStore\n analyticsStore: AnalyticsStore\n beatStore: BeatStore\n budgetsStore: BudgetsStore\n cashflowStore: CashflowStore\n categoryStore: CategoryStore\n connectStore: ConnectStore\n copyStore: GlobalCopyStore\n debtsStore: DebtsStore\n finstrongStore: FinstrongStore\n goalStore: GoalStore\n helpStore: HelpStore\n holdingStore: HoldingStore\n merchantStore: MerchantStore\n netWorthStore: NetWorthStore\n notificationStore: NotificationStore\n recurringTransactionsStore: RecurringTransactionsStore\n settingsStore: SettingsStore\n transactionStore: TransactionStore\n trendsStore: TrendsStore\n userStore: UserStore\n\n // UI Stores\n globalUiStore: GlobalUiStore\n\n constructor(appConfig: AppConfig = DefaultAppConfig, endpoint: string = '/') {\n this.appConfig = appConfig\n this.endpoint = endpoint\n this.sessionToken = appConfig.options.session_token ?? ''\n\n this.accountStore = new AccountStore(this)\n this.appDataStore = new AppDataStore(this)\n this.analyticsStore = new AnalyticsStore(this)\n this.beatStore = new BeatStore(this)\n this.budgetsStore = new BudgetsStore(this)\n this.cashflowStore = new CashflowStore(this)\n this.categoryStore = new CategoryStore(this)\n this.connectStore = new ConnectStore(this)\n this.copyStore = new GlobalCopyStore(this)\n this.debtsStore = new DebtsStore(this)\n this.finstrongStore = new FinstrongStore(this)\n this.goalStore = new GoalStore(this)\n this.helpStore = new HelpStore(this)\n this.holdingStore = new HoldingStore(this)\n this.merchantStore = new MerchantStore(this)\n this.netWorthStore = new NetWorthStore(this)\n this.notificationStore = new NotificationStore(this)\n this.recurringTransactionsStore = new RecurringTransactionsStore(this)\n this.settingsStore = new SettingsStore(this)\n this.transactionStore = new TransactionStore(this)\n this.trendsStore = new TrendsStore(this)\n this.userStore = new UserStore(this)\n\n this.globalUiStore = new GlobalUiStore(this)\n\n makeAutoObservable(this)\n }\n\n get isInitialized() {\n return this.globalUiStore.isInitialized\n }\n\n loadData = async ({\n accounts,\n appData,\n associatedBeats,\n categories,\n institutions,\n transactionRules,\n transactions,\n userFeatures,\n }: LoadDataProps = {}) => {\n await Promise.all([\n // Load copy, config and quser data\n this.copyStore.loadCopy(),\n this.appDataStore.loadAppData(appData),\n this.userStore.loadUserFeatures(userFeatures),\n ])\n\n // Load common data used by all widgets\n await Promise.all([\n this.accountStore.loadAccountData({ accounts, institutions }),\n this.categoryStore.loadCategories(categories),\n this.transactionStore.loadTransactionData({\n associatedBeats,\n transactionRules,\n transactions,\n }),\n ])\n\n this.globalUiStore.setInitialized(true)\n }\n}\n"],"names":["RecurrenceTypes","RECURRENCE_COPY","LOADING_STATUS","PlanTypes","IterationItemTypes","getClientTheme","theme","clientStyleProfile","isDark","generatePalette","colorKey","defaultColor","color","lighten","darken","palette","components","alpha","BannerApi","bullseyeEndpoint","Fetch","userGuid","path","data","error","LocalizedCopyApi","endpoint","token","req","ApiEndpoints","namespace","ScheduledPaymentsApi","scheduledPayment","TransactionType","guid","UserApi","e","user","userProfile","WidgetApi","usePrevious","value","ref","useRef","useEffect","Legend","labelAverage","labelMain","tokens","useTokens","styles","getStyles","jsxs","jsx","Text","css","Bar","ariaLabel","height","index","label","onClick","selectedIndex","handleKeyDown","event","labelColor","BarLabel","frameName","expandAnimation","keyframes","BarColumn","averageLineHeight","bottomHeight","range","topHeight","valueLabel","width","xAxisLabel","topBarHeight","bottomBarHeight","xAxisColor","sumReducer","acc","rangeReducer","valueReducer","getSectionHeight","hasSection1","hasSection2","fullHeight","getAverageLineHeight","average","max","min","BarChart","barWidth","legendLabelAverage","legendLabelMain","onBarClick","valueFormatter","values","avg","hasTop","hasBottom","getBarColor","EmptyColumn","d","React","MultiSegmentDonut","hasGap","segments","size","DEFAULT_DONUT_SIZE","strokeWidth","DEFAULT_STROKE_WIDTH","children","radius","halfSize","offset","length","segment","ResponsiveButton","icon","placement","tooltipText","variant","useTheme","Button","Tooltip","IconButton","GlobalCopyStore","GlobalCopyApi","globalStore","makeAutoObservable","runInAction","translationKey","newCopy","AnalyticsStore","forceReload","posthog","surveys","survey","s","response","orderArray","arr1","arr2","prop","order","direction","item1","item2","transformOfferIntoBeatLikeObject","offer","BeatStore","BeatApi","beats","beatLikeOffers","o","categoryGuids","beat","BudgetsApi","category","amount","parentGuid","budget","BudgetsStore","startOfMonth","startOfToday","endOfMonth","reaction","detailedBudgets","findBudget","subBudget","findSubBudget","augmentBudgets","CategoryGuids","a","b","curr","total","budgets","alert","dateRange","categories","budgetsToDelete","c","budgetToDelete","updatedBudget","UserVerification","ExpenseStatus","ScheduledPaymentTypes","ScreenSize","HelpApi","ticket","isCategoryAccessibleByProfile","profile","flag","getAccessibleHelpCategories","categoryList","accessibleCategories","el","HELP_CATEGORIES","updatedCategory","topicKey","HelpStore","message","severity","client_communication_profile","client_profile","category_list","HoldingApi","holding","HoldingStore","AnalysisType","mapDataToPercentageGrid","analysisChartData","analysisDetailsData","holdings","analysisType","updatedHolding","updatedIndex","DefaultAppConfig","AppDataApi","AppDataStore","appDataOverrides","appData","banner","ConnectStore","widget","mode","rest","GlobalUiStore","account","isInitialized","accounts","guids","currentSelected","newSelected","guidsToInclude","guidsToExclude","startDate","endDate","selectedMonth","getMonth","nextMonth","addMonths","currentMonth","UserStore","featuresOverrides","features","updatedUser","updatedProfile","GlobalStore","appConfig","AccountStore","CashflowStore","CategoryStore","DebtsStore","FinstrongStore","GoalStore","MerchantStore","NetWorthStore","NotificationStore","RecurringTransactionsStore","SettingsStore","TransactionStore","TrendsStore","associatedBeats","institutions","transactionRules","transactions","userFeatures"],"mappings":"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"}
@@ -0,0 +1,257 @@
1
+ import { jsx as t, jsxs as a } from "react/jsx-runtime";
2
+ import n from "react";
3
+ import { observer as f } from "mobx-react-lite";
4
+ import d from "@mui/material/Unstable_Grid2";
5
+ import p from "@mui/material/Skeleton";
6
+ import m from "@mui/material/Stack";
7
+ import "bowser";
8
+ import "date-fns/getUnixTime";
9
+ import "date-fns/intlFormat";
10
+ import { av as A, a$ as B, b0 as D } from "../ConnectMiniWidget-CQWafYtQ.mjs";
11
+ import "date-fns/addMonths";
12
+ import "date-fns/addQuarters";
13
+ import "date-fns/addWeeks";
14
+ import "date-fns/addYears";
15
+ import "date-fns/getDay";
16
+ import "date-fns/isBefore";
17
+ import "date-fns/nextDay";
18
+ import "date-fns/setDate";
19
+ import "date-fns/startOfToday";
20
+ import "date-fns/fromUnixTime";
21
+ import "numeral";
22
+ import "@mui/material";
23
+ import G from "@mui/material/Button";
24
+ import { Icon as S, H1 as k, P as F } from "@mxenabled/mxui";
25
+ import W from "@mui/material/Tooltip";
26
+ import I from "@mui/material/Box";
27
+ import T from "@mui/material/IconButton";
28
+ import { e as v, b as C, f as M, d as z, g as $ } from "../Loader-CwdK8lfx.mjs";
29
+ import "@mxenabled/cssinjs";
30
+ import "date-fns/addDays";
31
+ import "date-fns/eachDayOfInterval";
32
+ import "date-fns/eachWeekOfInterval";
33
+ import "date-fns/endOfMonth";
34
+ import "date-fns/format";
35
+ import "date-fns/isSameMonth";
36
+ import "date-fns/startOfMonth";
37
+ import "date-fns/subMonths";
38
+ import H from "@mui/material/Paper";
39
+ import "@mxenabled/mx-icons";
40
+ import "date-fns/isSameDay";
41
+ import "date-fns/isWithinInterval";
42
+ import R from "@mui/material/styles/useTheme";
43
+ import "d3";
44
+ import "@mui/material/styles";
45
+ import "@mui/x-charts";
46
+ import j from "@mui/material/useMediaQuery";
47
+ import "@mui/x-charts/ChartsTooltip";
48
+ import "date-fns/differenceInCalendarDays";
49
+ import "date-fns/endOfToday";
50
+ import "date-fns/endOfYear";
51
+ import "date-fns/startOfYear";
52
+ import "date-fns/subDays";
53
+ import "date-fns/subYears";
54
+ import "@mui/material/ButtonGroup";
55
+ import "@mui/material/Tab";
56
+ import "@mui/material/Tabs";
57
+ import "@mui/material/ToggleButton";
58
+ import "@mui/material/ToggleButtonGroup";
59
+ import "@mui/material/Dialog";
60
+ import "@mui/material/DialogContent";
61
+ import "@mui/material/Card";
62
+ import "@mui/material/CardContent";
63
+ import "@mui/material/CardHeader";
64
+ import "uuid";
65
+ import "@mui/material/CircularProgress";
66
+ import "@mui/material/FormControlLabel";
67
+ import "@mui/material/Radio";
68
+ import "@mui/material/Avatar";
69
+ import "@mui/material/ListItem";
70
+ import "@mui/material/ListItemAvatar";
71
+ import "@mui/material/ListItemButton";
72
+ import "@mui/material/ListItemText";
73
+ import "@mui/material/ListItemIcon";
74
+ import "@mui/material/MenuItem";
75
+ import "@mui/material/TextField";
76
+ import "@mui/material/Switch";
77
+ import "mobx";
78
+ import "posthog-js";
79
+ import "date-fns/differenceInDays";
80
+ import "@mui/x-data-grid-pro";
81
+ import "date-fns";
82
+ import "@mui/material/Divider";
83
+ import "@mui/material/List";
84
+ import "date-fns/formatISO";
85
+ import "date-fns/isAfter";
86
+ import "date-fns/parseISO";
87
+ import "date-fns/subQuarters";
88
+ import "date-fns/lastDayOfMonth";
89
+ import "date-fns/setDayOfYear";
90
+ import "date-fns/addSeconds";
91
+ import "date-fns/differenceInCalendarMonths";
92
+ import "date-fns/getMonth";
93
+ import { useMediaQuery as Q } from "@mui/system";
94
+ const E = f(() => {
95
+ const o = R(), {
96
+ appDataStore: { banner: i, loadBanner: c, user: l }
97
+ } = v();
98
+ return n.useEffect(() => {
99
+ c().finally();
100
+ }, [l]), i?.image_url ? /* @__PURE__ */ t(
101
+ m,
102
+ {
103
+ sx: {
104
+ alignItems: "center",
105
+ width: "100%",
106
+ mb: 24
107
+ },
108
+ children: /* @__PURE__ */ t(
109
+ "a",
110
+ {
111
+ href: i?.redirect_url,
112
+ rel: "noreferrer",
113
+ style: {
114
+ width: "100%"
115
+ },
116
+ target: "_blank",
117
+ children: /* @__PURE__ */ t(
118
+ "img",
119
+ {
120
+ alt: "",
121
+ src: i.image_url,
122
+ style: {
123
+ width: "100%",
124
+ height: "auto",
125
+ border: `1px solid ${o.palette.grey[300]}`
126
+ }
127
+ }
128
+ )
129
+ }
130
+ )
131
+ }
132
+ ) : null;
133
+ }), P = ({ handleConnectClick: o }) => {
134
+ const { common: i } = C(), c = j("(max-width: 700px)");
135
+ return /* @__PURE__ */ t(I, { my: 4, children: c ? /* @__PURE__ */ t(W, { id: "add-accounts", placement: "bottom", title: i.add_accounts, children: /* @__PURE__ */ t(
136
+ T,
137
+ {
138
+ "aria-controls": "add_accounts",
139
+ "aria-describedby": "add-accounts",
140
+ "aria-haspopup": !0,
141
+ "aria-label": i.add_accounts,
142
+ color: "primary",
143
+ onClick: o,
144
+ children: /* @__PURE__ */ t(S, { name: "add", size: 24 })
145
+ }
146
+ ) }) : /* @__PURE__ */ t(
147
+ G,
148
+ {
149
+ "aria-controls": "add_accounts",
150
+ "aria-haspopup": !0,
151
+ "aria-label": i.add_accounts,
152
+ onClick: o,
153
+ startIcon: /* @__PURE__ */ t(S, { name: "add", size: 24 }),
154
+ sx: {
155
+ p: 12,
156
+ whiteSpace: "nowrap",
157
+ minWidth: "max-content"
158
+ },
159
+ variant: "text",
160
+ children: i.add_accounts
161
+ }
162
+ ) });
163
+ }, N = f(P), O = () => {
164
+ const [o, i] = n.useState(!1), c = Q("(max-width:320px)"), { visibleAccounts: l } = M(), { selectedAccountGuids: _, setSelectedAccountGuids: g } = z(), { common: e, connect: s } = C(), { config: b } = $(), { isMobile: x } = A(), r = {
165
+ accountFilterOptionsCopy: {
166
+ accountTypeAccounts: e.account_filter.account_type_accounts,
167
+ cancelButton: e.cancel_button,
168
+ filterButton: e.filter_button,
169
+ filterButtonAria: e.account_filter.filter_button_generic_aria,
170
+ selectAllAccounts: e.account_filter.select_all_accounts,
171
+ toggleAccountTypeAccounts: e.account_filter.toggle_account_type_accounts,
172
+ unselectAllAccounts: e.account_filter.unselect_all_accounts,
173
+ zeroStateButton: e.account_filter.zero_state_button,
174
+ zeroStateDescription: e.account_filter.zero_state_description,
175
+ zeroStateTitle: e.account_filter.zero_state_title
176
+ },
177
+ title: e.filter_button
178
+ }, y = () => {
179
+ const u = (/* @__PURE__ */ new Date()).getHours();
180
+ return u > 1 && u < 12 ? e.good_morning : u >= 12 && u < 18 ? e.good_afternoon : e.good_evening;
181
+ };
182
+ return /* @__PURE__ */ a(n.Fragment, { children: [
183
+ /* @__PURE__ */ t(H, { sx: { gap: 12, mb: x ? 24 : 0, p: 24 }, children: /* @__PURE__ */ a(m, { alignItems: "center", flexDirection: "row", justifyContent: "space-between", children: [
184
+ /* @__PURE__ */ a(m, { children: [
185
+ /* @__PURE__ */ t(k, { variant: c ? "H2" : "H1", children: y() }),
186
+ /* @__PURE__ */ t(F, { color: "text.secondary", children: e.heres_your_spending_overview })
187
+ ] }),
188
+ /* @__PURE__ */ a(m, { flexDirection: "row", children: [
189
+ b.show_connections_widget_in_master && /* @__PURE__ */ t(N, { handleConnectClick: () => i(!0) }),
190
+ /* @__PURE__ */ t(
191
+ B,
192
+ {
193
+ accounts: l,
194
+ copy: r,
195
+ onConnectAccountClick: () => i(!0),
196
+ onFilterClick: (w) => {
197
+ g(w);
198
+ },
199
+ selectedAccountGuids: _,
200
+ showAccountNumbers: !1,
201
+ sx: {
202
+ maxWidth: "100%"
203
+ },
204
+ variant: "text"
205
+ }
206
+ )
207
+ ] })
208
+ ] }) }),
209
+ o && /* @__PURE__ */ t(
210
+ D,
211
+ {
212
+ onClose: () => i(!1),
213
+ showConnectWidget: o,
214
+ title: s.mini_title
215
+ }
216
+ )
217
+ ] });
218
+ }, U = f(O);
219
+ var h = /* @__PURE__ */ ((o) => (o[o.Main = 0] = "Main", o[o.RightSide = 1] = "RightSide", o[o.Disabled = 2] = "Disabled", o))(h || {});
220
+ const q = ({ widgets: o, isLoading: i }) => {
221
+ const { isDesktop: c, isMobile: l } = A(), { copyStore: _ } = v(), { setSelectedAccounts: g } = z(), { visibleAccounts: e } = M();
222
+ n.useEffect(() => {
223
+ g(e);
224
+ }, [e]);
225
+ const s = n.useMemo(
226
+ () => o.filter((r) => r.location !== h.Disabled).sort((r, y) => r.index - y.index),
227
+ [o]
228
+ ), b = n.useMemo(
229
+ () => s.filter((r) => r.location === h.Main),
230
+ [s]
231
+ ), x = n.useMemo(
232
+ () => s.filter((r) => r.location === h.RightSide),
233
+ [s]
234
+ );
235
+ return /* @__PURE__ */ a(d, { container: !0, spacing: l ? 0 : 24, sx: { overflow: "scroll" }, children: [
236
+ /* @__PURE__ */ t(d, { xs: 12, children: _.isInitialized && /* @__PURE__ */ t(U, {}) }),
237
+ /* @__PURE__ */ a(d, { lg: 8, xs: 12, children: [
238
+ /* @__PURE__ */ t(E, {}),
239
+ i && /* @__PURE__ */ a(m, { direction: "column", spacing: 24, children: [
240
+ /* @__PURE__ */ t(p, { height: 100, variant: "rounded", width: "100%" }),
241
+ /* @__PURE__ */ t(p, { height: 300, variant: "rounded", width: "100%" }),
242
+ /* @__PURE__ */ t(p, { height: 300, variant: "rounded", width: "100%" })
243
+ ] }),
244
+ !i && /* @__PURE__ */ t(m, { direction: "column", spacing: 24, children: c ? b.map((r) => /* @__PURE__ */ t(n.Fragment, { children: r.component }, r.index)) : s.map((r) => /* @__PURE__ */ t(n.Fragment, { children: r.component }, r.index)) })
245
+ ] }),
246
+ c && /* @__PURE__ */ t(d, { lg: 4, children: i ? /* @__PURE__ */ a(m, { direction: "column", spacing: 24, children: [
247
+ /* @__PURE__ */ t(p, { height: 200, variant: "rounded", width: "100%" }),
248
+ /* @__PURE__ */ t(p, { height: 100, variant: "rounded", width: "100%" }),
249
+ /* @__PURE__ */ t(p, { height: 300, variant: "rounded", width: "100%" })
250
+ ] }) : /* @__PURE__ */ t(m, { direction: "column", spacing: 24, children: x.map((r) => /* @__PURE__ */ t(n.Fragment, { children: r.component }, r.index)) }) })
251
+ ] });
252
+ }, Wo = f(q);
253
+ export {
254
+ Wo as Dashboard,
255
+ h as DashboardLocation
256
+ };
257
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../../src/common/components/Banner.tsx","../../src/common/components/addaccounts/AddAccounts.tsx","../../src/dashboard/Greeting.tsx","../../src/dashboard/constants/Dashboard.ts","../../src/dashboard/Dashboard.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport useTheme from '@mui/material/styles/useTheme'\nimport Stack from '@mui/material/Stack'\n\nimport { useGlobalStore } from '..'\n\nexport const Banner = observer(() => {\n const theme = useTheme()\n const {\n appDataStore: { banner, loadBanner, user },\n } = useGlobalStore()\n\n React.useEffect(() => {\n loadBanner().finally()\n }, [user])\n\n if (!banner?.image_url) {\n return null\n }\n\n return (\n <Stack\n sx={{\n alignItems: 'center',\n width: '100%',\n mb: 24,\n }}\n >\n <a\n href={banner?.redirect_url}\n rel=\"noreferrer\"\n style={{\n width: '100%',\n }}\n target=\"_blank\"\n >\n <img\n alt=\"\"\n src={banner.image_url}\n style={{\n width: '100%',\n height: 'auto',\n border: `1px solid ${theme.palette.grey['300']}`,\n }}\n />\n </a>\n </Stack>\n )\n})\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport IconButton from '@mui/material/IconButton'\nimport Tooltip from '@mui/material/Tooltip'\nimport useMediaQuery from '@mui/material/useMediaQuery'\n\nimport { Icon } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../common'\n\ninterface AddAccountsProps {\n handleConnectClick: () => void\n}\n\nconst AddAccounts = ({ handleConnectClick }: AddAccountsProps) => {\n const { common: copy } = useGlobalCopyStore()\n const isSmallerThan700 = useMediaQuery('(max-width: 700px)')\n\n return (\n <Box my={4}>\n {isSmallerThan700 ? (\n <Tooltip id=\"add-accounts\" placement=\"bottom\" title={copy.add_accounts}>\n <IconButton\n aria-controls=\"add_accounts\"\n aria-describedby=\"add-accounts\"\n aria-haspopup={true}\n aria-label={copy.add_accounts}\n color=\"primary\"\n onClick={handleConnectClick}\n >\n <Icon name=\"add\" size={24} />\n </IconButton>\n </Tooltip>\n ) : (\n <Button\n aria-controls=\"add_accounts\"\n aria-haspopup={true}\n aria-label={copy.add_accounts}\n onClick={handleConnectClick}\n startIcon={<Icon name=\"add\" size={24} />}\n sx={{\n p: 12,\n whiteSpace: 'nowrap',\n minWidth: 'max-content',\n }}\n variant=\"text\"\n >\n {copy.add_accounts}\n </Button>\n )}\n </Box>\n )\n}\n\nexport default observer(AddAccounts)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport Paper from '@mui/material/Paper'\n\nimport { H1, P } from '@mxenabled/mxui'\nimport { useMediaQuery } from '@mui/system'\n\nimport {\n AccountFilter,\n ConnectDrawer,\n useAccountStore,\n useAppConfig,\n useGlobalCopyStore,\n useGlobalUiStore,\n useScreenSize,\n} from '../common'\n\nimport AddAccounts from '../common/components/addaccounts/AddAccounts'\n\nconst Greeting = () => {\n const [showConnectWidget, setShowConnectWidget] = React.useState(false)\n\n const isSmallMobileDevice = useMediaQuery('(max-width:320px)')\n\n const { visibleAccounts: accounts } = useAccountStore()\n const { selectedAccountGuids, setSelectedAccountGuids } = useGlobalUiStore()\n const { common: commonCopy, connect: connectCopy } = useGlobalCopyStore()\n const { config } = useAppConfig()\n const { isMobile } = useScreenSize()\n\n const accountFilterCopy = {\n accountFilterOptionsCopy: {\n accountTypeAccounts: commonCopy.account_filter.account_type_accounts,\n cancelButton: commonCopy.cancel_button,\n filterButton: commonCopy.filter_button,\n filterButtonAria: commonCopy.account_filter.filter_button_generic_aria,\n selectAllAccounts: commonCopy.account_filter.select_all_accounts,\n toggleAccountTypeAccounts: commonCopy.account_filter.toggle_account_type_accounts,\n unselectAllAccounts: commonCopy.account_filter.unselect_all_accounts,\n zeroStateButton: commonCopy.account_filter.zero_state_button,\n zeroStateDescription: commonCopy.account_filter.zero_state_description,\n zeroStateTitle: commonCopy.account_filter.zero_state_title,\n },\n title: commonCopy.filter_button,\n }\n\n const getGreeting = () => {\n const now = new Date()\n const hour = now.getHours()\n\n if (hour > 1 && hour < 12) {\n return commonCopy.good_morning\n } else if (hour >= 12 && hour < 18) {\n return commonCopy.good_afternoon\n } else {\n return commonCopy.good_evening\n }\n }\n\n return (\n <React.Fragment>\n <Paper sx={{ gap: 12, mb: isMobile ? 24 : 0, p: 24 }}>\n <Stack alignItems=\"center\" flexDirection=\"row\" justifyContent=\"space-between\">\n <Stack>\n <H1 variant={isSmallMobileDevice ? 'H2' : 'H1'}>{getGreeting()}</H1>\n <P color=\"text.secondary\">{commonCopy.heres_your_spending_overview}</P>\n </Stack>\n <Stack flexDirection=\"row\">\n {config.show_connections_widget_in_master && (\n <AddAccounts handleConnectClick={() => setShowConnectWidget(true)} />\n )}\n <AccountFilter\n accounts={accounts}\n copy={accountFilterCopy}\n onConnectAccountClick={() => setShowConnectWidget(true)}\n onFilterClick={(guids) => {\n setSelectedAccountGuids(guids)\n }}\n selectedAccountGuids={selectedAccountGuids}\n showAccountNumbers={false}\n sx={{\n maxWidth: '100%',\n }}\n variant=\"text\"\n />\n </Stack>\n </Stack>\n </Paper>\n {showConnectWidget && (\n <ConnectDrawer\n onClose={() => setShowConnectWidget(false)}\n showConnectWidget={showConnectWidget}\n title={connectCopy.mini_title}\n />\n )}\n </React.Fragment>\n )\n}\n\nexport default observer(Greeting)\n","export enum DashboardLocation {\n Main = 0,\n RightSide = 1,\n Disabled = 2,\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Grid from '@mui/material/Unstable_Grid2'\nimport Skeleton from '@mui/material/Skeleton'\nimport Stack from '@mui/material/Stack'\n\nimport { useAccountStore, useGlobalStore, useGlobalUiStore, useScreenSize } from '../common'\n\nimport { Banner } from '../common/components/Banner'\n\nimport Greeting from './Greeting'\nimport { DashboardLocation } from './constants/Dashboard'\nimport type { DashboardWidget } from './types/DashboardTypes'\n\nexport interface DashboardProps {\n widgets: DashboardWidget[]\n isLoading: boolean\n}\n\nconst Dashboard: React.FC<DashboardProps> = ({ widgets, isLoading }) => {\n const { isDesktop, isMobile } = useScreenSize()\n const { copyStore } = useGlobalStore()\n const { setSelectedAccounts } = useGlobalUiStore()\n const { visibleAccounts: accounts } = useAccountStore()\n\n React.useEffect(() => {\n setSelectedAccounts(accounts)\n }, [accounts])\n\n const sortedWidgets = React.useMemo(\n () =>\n widgets\n .filter((widget) => widget.location !== DashboardLocation.Disabled)\n .sort((w1, w2) => w1.index - w2.index),\n [widgets],\n )\n\n const mainWidgets = React.useMemo(\n () => sortedWidgets.filter((widget) => widget.location === DashboardLocation.Main),\n [sortedWidgets],\n )\n\n const sideWidgets = React.useMemo(\n () => sortedWidgets.filter((widget) => widget.location === DashboardLocation.RightSide),\n [sortedWidgets],\n )\n\n return (\n <Grid container={true} spacing={isMobile ? 0 : 24} sx={{ overflow: 'scroll' }}>\n <Grid xs={12}>{copyStore.isInitialized && <Greeting />}</Grid>\n\n {/* Main Column */}\n <Grid lg={8} xs={12}>\n <Banner />\n {isLoading && (\n <Stack direction=\"column\" spacing={24}>\n <Skeleton height={100} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={300} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={300} variant=\"rounded\" width=\"100%\" />\n </Stack>\n )}\n {!isLoading && (\n <Stack direction=\"column\" spacing={24}>\n {isDesktop\n ? mainWidgets.map((widget) => (\n <React.Fragment key={widget.index}>{widget.component}</React.Fragment>\n ))\n : sortedWidgets.map((widget) => (\n <React.Fragment key={widget.index}>{widget.component}</React.Fragment>\n ))}\n </Stack>\n )}\n </Grid>\n\n {/* Right Column */}\n {isDesktop && (\n <Grid lg={4}>\n {isLoading ? (\n <Stack direction=\"column\" spacing={24}>\n <Skeleton height={200} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={100} variant=\"rounded\" width=\"100%\" />\n <Skeleton height={300} variant=\"rounded\" width=\"100%\" />\n </Stack>\n ) : (\n <Stack direction=\"column\" spacing={24}>\n {sideWidgets.map((widget) => (\n <React.Fragment key={widget.index}>{widget.component}</React.Fragment>\n ))}\n </Stack>\n )}\n </Grid>\n )}\n </Grid>\n )\n}\n\nexport default observer(Dashboard)\n"],"names":["Banner","observer","theme","useTheme","banner","loadBanner","user","useGlobalStore","React","jsx","Stack","AddAccounts","handleConnectClick","copy","useGlobalCopyStore","isSmallerThan700","useMediaQuery","Box","Tooltip","IconButton","Icon","Button","AddAccounts$1","Greeting","showConnectWidget","setShowConnectWidget","isSmallMobileDevice","accounts","useAccountStore","selectedAccountGuids","setSelectedAccountGuids","useGlobalUiStore","commonCopy","connectCopy","config","useAppConfig","isMobile","useScreenSize","accountFilterCopy","getGreeting","hour","jsxs","Paper","H1","P","AccountFilter","guids","ConnectDrawer","Greeting$1","DashboardLocation","Dashboard","widgets","isLoading","isDesktop","copyStore","setSelectedAccounts","sortedWidgets","widget","w1","w2","mainWidgets","sideWidgets","Grid","Skeleton","Dashboard$1"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { k as s, l as a, D as r } from "../ConnectMiniWidget-CQWafYtQ.mjs";
2
+ import { D as b } from "../DebtsStore-cUhIgJx6.mjs";
3
+ export {
4
+ s as DebtsChart,
5
+ b as DebtsStore,
6
+ a as DebtsTable,
7
+ r as DebtsWidget
8
+ };
9
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,11 @@
1
+ import { o, m as n, n as t, p as i } from "../ConnectMiniWidget-CQWafYtQ.mjs";
2
+ import { F as e, a as p } from "../FinstrongStore-BDG7l0nI.mjs";
3
+ export {
4
+ o as CreditScoreGraph,
5
+ n as DialScoreCard,
6
+ t as FinancialStrengthGraph,
7
+ e as FinstrongApi,
8
+ p as FinstrongStore,
9
+ i as FinstrongWidget
10
+ };
11
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,9 @@
1
+ import { G as r, a as s } from "../GoalStore-o2waGeyf.mjs";
2
+ import { q as e, G as t } from "../ConnectMiniWidget-CQWafYtQ.mjs";
3
+ export {
4
+ r as GoalApi,
5
+ s as GoalStore,
6
+ e as GoalsMicroWidget,
7
+ t as GoalsWidget
8
+ };
9
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}