@mx-cartographer/experiences 9.4.70 → 9.5.0-alpha.al0

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 (59) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -0
  3. package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailEdit.es.js +2 -2
  4. package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailEdit.es.js.map +1 -1
  5. package/dist/core/types/Insights.d.ts +8 -0
  6. package/dist/debts/components/DebtsTable.es.js +2 -2
  7. package/dist/debts/components/DebtsTable.es.js.map +1 -1
  8. package/dist/finstrong/components/ManageDOB.es.js +1 -1
  9. package/dist/finstrong/components/ManageDOB.es.js.map +1 -1
  10. package/dist/finstrong/components/onboarding/OnboardingBirthday.es.js +1 -1
  11. package/dist/finstrong/components/onboarding/OnboardingBirthday.es.js.map +1 -1
  12. package/dist/goals/components/actions/BirthdayAction.es.js +1 -1
  13. package/dist/goals/components/actions/BirthdayAction.es.js.map +1 -1
  14. package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.d.ts +16 -0
  15. package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.es.js +24 -0
  16. package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/DirectDepositBlock.es.js.map +1 -0
  17. package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/index.d.ts +1 -0
  18. package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/layout.d.ts +28 -0
  19. package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/layout.es.js +63 -0
  20. package/dist/insights-v2/blocks/ComponentBlocks/DirectDepositBlock/layout.es.js.map +1 -0
  21. package/dist/insights-v2/blocks/ComponentBlocks/index.d.ts +1 -0
  22. package/dist/insights-v2/components/AccountHeroCard.d.ts +7 -1
  23. package/dist/insights-v2/components/AccountHeroCard.es.js +6 -7
  24. package/dist/insights-v2/components/AccountHeroCard.es.js.map +1 -1
  25. package/dist/insights-v2/components/DirectDepositCard.d.ts +48 -0
  26. package/dist/insights-v2/components/DirectDepositCard.es.js +37 -0
  27. package/dist/insights-v2/components/DirectDepositCard.es.js.map +1 -0
  28. package/dist/insights-v2/components/TransferLogoCard.d.ts +5 -0
  29. package/dist/insights-v2/components/TransferLogoCard.es.js +37 -55
  30. package/dist/insights-v2/components/TransferLogoCard.es.js.map +1 -1
  31. package/dist/insights-v2/components/shared/ConfettiOverlay.d.ts +1 -0
  32. package/dist/insights-v2/components/shared/ConfettiOverlay.es.js +27 -0
  33. package/dist/insights-v2/components/shared/ConfettiOverlay.es.js.map +1 -0
  34. package/dist/insights-v2/index.d.ts +1 -0
  35. package/dist/insights-v2/index.es.js +70 -66
  36. package/dist/insights-v2/mappings/blocks.es.js +34 -32
  37. package/dist/insights-v2/mappings/blocks.es.js.map +1 -1
  38. package/dist/investments/components/HoldingTable.es.js +1 -1
  39. package/dist/investments/components/HoldingTable.es.js.map +1 -1
  40. package/dist/recurringtransactions/components/PaymentSchedule.es.js +1 -1
  41. package/dist/recurringtransactions/components/PaymentSchedule.es.js.map +1 -1
  42. package/dist/recurringtransactions/components/recurrencecalendar/RecurrenceCalendar.es.js +1 -1
  43. package/dist/recurringtransactions/components/recurrencecalendar/RecurrenceCalendar.es.js.map +1 -1
  44. package/dist/recurringtransactions/components/recurrencecalendar/RecurrenceDay.d.ts +1 -1
  45. package/dist/recurringtransactions/components/recurrencecalendar/RecurrenceDay.es.js.map +1 -1
  46. package/dist/settings/components/notifications/AccountProfileListItem.es.js +10 -10
  47. package/dist/settings/components/notifications/AccountProfileListItem.es.js.map +1 -1
  48. package/dist/settings/components/profile/ProfileTab.es.js +22 -22
  49. package/dist/settings/components/profile/ProfileTab.es.js.map +1 -1
  50. package/dist/transactions/components/shared/TransactionTable.es.js +2 -2
  51. package/dist/transactions/components/shared/TransactionTable.es.js.map +1 -1
  52. package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js +1 -1
  53. package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js.map +1 -1
  54. package/dist/trends/components/trendstable/AccessibleSortIcon.d.ts +2 -9
  55. package/dist/trends/components/trendstable/AccessibleSortIcon.es.js +19 -20
  56. package/dist/trends/components/trendstable/AccessibleSortIcon.es.js.map +1 -1
  57. package/dist/trends/components/trendstable/TrendsTable.es.js +2 -2
  58. package/dist/trends/components/trendstable/TrendsTable.es.js.map +1 -1
  59. package/package.json +17 -6
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.es.js","names":[],"sources":["../../../src/insights-v2/mappings/blocks.ts"],"sourcesContent":["import {\n AccountBlock,\n AccountSwitchBlock,\n BarchartBlock,\n BudgetBlock,\n DonutChartBlock,\n DoubleBarChartBlock,\n DoubleProgressBarBlock,\n SaveExtraBlock,\n SVGImageBlock,\n WithdrawalBlock,\n TransactionBlock,\n} from '../blocks'\nimport StepChartBlock from '../blocks/ChartBlocks/StepChartBlock'\nimport ImageBlock from '../blocks/ImageBlocks/ImageBlock'\n\nimport type { Beat, GlobalCopy, InsightsPayload } from '../../core'\nimport { ContactSupportActionBlock } from '../actionBlocks/ContactSupportActionBlock'\nimport { PlaceholderActionBlock } from '../actionBlocks/PlaceholderActionBlock'\nimport { MakeTransferActionBlockLayer } from '../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer'\nimport { getMakeTransferDrawerTitle } from '../actionBlocks/MakeTransferActionBlock/layout'\nimport { TransactionHistoryBlock } from '../actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock'\nimport { getDrawerHeaderTitle } from '../actionBlocks/TransactionHistoryBlock/utils'\nimport {\n TransactionDetailsBlock,\n useTransactionDetailsPrepare,\n} from '../actionBlocks/TransactionDetailsBlock'\nimport {\n RecurringTransactionBlock,\n useRecurringTransactionPrepare,\n} from '../actionBlocks/RecurringTransactionBlock'\nimport { TransactionListBlock } from '../actionBlocks/TransactionListBlock'\nimport { RemainingCashBlock } from '../actionBlocks/RemainingCashBlock'\n// Keys live in ./actionBlocksKey (imported directly by chart blocks/tests too) to avoid a\n// circular import between this module and the chart blocks — see that file for details.\nimport { actionBlocksKey } from './actionBlocksKey'\n\n// Drilldown indexes are not passed down: action blocks read them from\n// InsightsV2Store (useInsightsV2Store().actionDrawer).\nexport interface ActionBlockProps {\n beat: Beat\n}\n\nconst noop = (_: ActionBlockProps) => {}\n\n// A CTA opens a drawer only when it carries a real `block`. The backend may send\n// an empty/absent block (or the literal strings \"null\"/\"undefined\") for CTAs\n// that trigger something else (e.g. a postMessage) instead of a drilldown.\nconst NON_BLOCK_VALUES = new Set(['', 'null', 'undefined'])\nexport const hasDrawerBlock = (block?: string | null): boolean => {\n const normalized = block?.trim().toLowerCase()\n return !!normalized && !NON_BLOCK_VALUES.has(normalized)\n}\n\nexport interface ActionBlockEntry {\n Component: React.ComponentType<ActionBlockProps>\n usePrepare: (props: ActionBlockProps) => void // required; default to noop in each entry\n // Resolves the drawer title from the clicked CTA's variant + copy, with the beat available\n // for blocks that title from beat fields (e.g. transaction-list reads insights_payload.title).\n // Falls back to the CTA label when the resolver returns an empty string / is absent.\n title?: (variant: string | null | undefined, copy: GlobalCopy, beat?: Beat) => string\n}\n\n// Registry of drawer drilldowns, keyed by the `block` name the backend sends\n// on a beat's CTA. To add one: create a component taking ActionBlockProps,\n// read the clicked indexes from useInsightsV2Store().actionDrawer, and\n// register it here. Add\n// `usePrepare` when the block needs to load data before rendering.\n\nexport const actionBlocks = {\n [actionBlocksKey.PLACEHOLDER_ACTION_BLOCK]: {\n Component: PlaceholderActionBlock,\n usePrepare: noop,\n title: () => 'Action Block Layer Drilldown',\n },\n [actionBlocksKey.MAKE_TRANSFER_ACTION_BLOCK]: {\n Component: MakeTransferActionBlockLayer,\n usePrepare: noop,\n title: getMakeTransferDrawerTitle,\n },\n [actionBlocksKey.TRANSCATION_HISTORY_ACTION_BLOCK]: {\n Component: TransactionHistoryBlock,\n usePrepare: noop,\n title: getDrawerHeaderTitle,\n },\n [actionBlocksKey.TRANSACTION_DETAILS_ACTION_BLOCK]: {\n Component: TransactionDetailsBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: () => 'Transaction Details',\n },\n // Expense Details for one recurring subscription. Which subscription a beat names is resolved in\n // `RecurringTransactionBlock/subscriptionBeats.ts`, not through this registry.\n [actionBlocksKey.RECURRING_TRANSACTION_ACTION_BLOCK]: {\n Component: RecurringTransactionBlock,\n usePrepare: useRecurringTransactionPrepare,\n title: (_variant, copy) => copy.recurring?.expense_details ?? '',\n },\n // Remaining Cash for the Payday Cash Left Over Status beat. Store-driven: reuses the recurring\n // loader, which also loads accounts and categories, so CashflowStore's computeds are ready.\n [actionBlocksKey.REMAINING_CASH_ACTION_BLOCK]: {\n Component: RemainingCashBlock,\n usePrepare: useRecurringTransactionPrepare,\n title: (_variant, copy) => copy.insights_feed?.remaining_cash?.title ?? '',\n },\n // The block renders its own drawer (the help module's RequestSupport) on top of the action\n // drawer, so the action drawer's title is the CTA label.\n [actionBlocksKey.CONTACT_SUPPORT_ACTION_BLOCK]: {\n Component: ContactSupportActionBlock,\n usePrepare: noop,\n title: (_variant, copy) => copy.help?.request_support ?? '',\n },\n [actionBlocksKey.TRANSACTION_LIST_ACTION_BLOCK]: {\n Component: TransactionListBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: (_variant, _copy, beat) => beat?.insights_payload?.title ?? '',\n },\n} as Record<string, ActionBlockEntry>\n\nexport const blocks = {\n account_block: AccountBlock,\n account_switch_block: AccountSwitchBlock,\n bar_chart_block: BarchartBlock,\n budget_block: BudgetBlock,\n donut_chart_block: DonutChartBlock,\n double_bar_chart_block: DoubleBarChartBlock,\n double_progress_bar_block: DoubleProgressBarBlock,\n image_block: ImageBlock,\n save_extra_block: SaveExtraBlock,\n step_chart_block: StepChartBlock,\n svg_image_block: SVGImageBlock,\n withdrawal_block: WithdrawalBlock,\n transaction_block: TransactionBlock,\n} as Record<string, React.ComponentType<{ payload: InsightsPayload; beatGuid?: string }>>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,IAAM,IAAA,CAAQ,MAAwB;AAAC,GAKjC,IAAmB,oBAAI,IAAI;AAAA,EAAC;AAAA,EAAI;AAAA,EAAQ;AAAW,CAAC,GAC7C,KAAA,CAAkB,MAAmC;AAChE,QAAM,IAAa,GAAO,KAAK,EAAE,YAAY;AAC7C,SAAO,CAAC,CAAC,KAAc,CAAC,EAAiB,IAAI,CAAU;AACzD,GAiBa,KAAe;AAAA,EACzB,CAAA,EAAgB,wBAAA,GAA2B;AAAA,IAC1C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,MAAa;AAAA,EACf;AAAA,EACC,CAAA,EAAgB,0BAAA,GAA6B;AAAA,IAC5C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACC,CAAA,EAAgB,gCAAA,GAAmC;AAAA,IAClD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACC,CAAA,EAAgB,gCAAA,GAAmC;AAAA,IAClD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,MAAa;AAAA,EACf;AAAA,EAGC,CAAA,EAAgB,kCAAA,GAAqC;AAAA,IACpD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,WAAW,mBAAmB;AAAA,EAChE;AAAA,EAGC,CAAA,EAAgB,2BAAA,GAA8B;AAAA,IAC7C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,eAAe,gBAAgB,SAAS;AAAA,EAC1E;AAAA,EAGC,CAAA,EAAgB,4BAAA,GAA+B;AAAA,IAC9C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,MAAM,mBAAmB;AAAA,EAC3D;AAAA,EACC,CAAA,EAAgB,6BAAA,GAAgC;AAAA,IAC/C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,GAAO,MAAS,GAAM,kBAAkB,SAAS;AAAA,EACrE;AACF,GAEa,KAAS;AAAA,EACpB,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,2BAA2B;AAAA,EAC3B,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,mBAAmB;AACrB"}
1
+ {"version":3,"file":"blocks.es.js","names":[],"sources":["../../../src/insights-v2/mappings/blocks.ts"],"sourcesContent":["import {\n AccountBlock,\n AccountSwitchBlock,\n DirectDepositBlock,\n BarchartBlock,\n BudgetBlock,\n DonutChartBlock,\n DoubleBarChartBlock,\n DoubleProgressBarBlock,\n SaveExtraBlock,\n SVGImageBlock,\n WithdrawalBlock,\n TransactionBlock,\n} from '../blocks'\nimport StepChartBlock from '../blocks/ChartBlocks/StepChartBlock'\nimport ImageBlock from '../blocks/ImageBlocks/ImageBlock'\n\nimport type { Beat, GlobalCopy, InsightsPayload } from '../../core'\nimport { ContactSupportActionBlock } from '../actionBlocks/ContactSupportActionBlock'\nimport { PlaceholderActionBlock } from '../actionBlocks/PlaceholderActionBlock'\nimport { MakeTransferActionBlockLayer } from '../actionBlocks/MakeTransferActionBlock/MakeTransferActionBlockLayer'\nimport { getMakeTransferDrawerTitle } from '../actionBlocks/MakeTransferActionBlock/layout'\nimport { TransactionHistoryBlock } from '../actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock'\nimport { getDrawerHeaderTitle } from '../actionBlocks/TransactionHistoryBlock/utils'\nimport {\n TransactionDetailsBlock,\n useTransactionDetailsPrepare,\n} from '../actionBlocks/TransactionDetailsBlock'\nimport {\n RecurringTransactionBlock,\n useRecurringTransactionPrepare,\n} from '../actionBlocks/RecurringTransactionBlock'\nimport { TransactionListBlock } from '../actionBlocks/TransactionListBlock'\nimport { RemainingCashBlock } from '../actionBlocks/RemainingCashBlock'\n// Keys live in ./actionBlocksKey (imported directly by chart blocks/tests too) to avoid a\n// circular import between this module and the chart blocks — see that file for details.\nimport { actionBlocksKey } from './actionBlocksKey'\n\n// Drilldown indexes are not passed down: action blocks read them from\n// InsightsV2Store (useInsightsV2Store().actionDrawer).\nexport interface ActionBlockProps {\n beat: Beat\n}\n\nconst noop = (_: ActionBlockProps) => {}\n\n// A CTA opens a drawer only when it carries a real `block`. The backend may send\n// an empty/absent block (or the literal strings \"null\"/\"undefined\") for CTAs\n// that trigger something else (e.g. a postMessage) instead of a drilldown.\nconst NON_BLOCK_VALUES = new Set(['', 'null', 'undefined'])\nexport const hasDrawerBlock = (block?: string | null): boolean => {\n const normalized = block?.trim().toLowerCase()\n return !!normalized && !NON_BLOCK_VALUES.has(normalized)\n}\n\nexport interface ActionBlockEntry {\n Component: React.ComponentType<ActionBlockProps>\n usePrepare: (props: ActionBlockProps) => void // required; default to noop in each entry\n // Resolves the drawer title from the clicked CTA's variant + copy, with the beat available\n // for blocks that title from beat fields (e.g. transaction-list reads insights_payload.title).\n // Falls back to the CTA label when the resolver returns an empty string / is absent.\n title?: (variant: string | null | undefined, copy: GlobalCopy, beat?: Beat) => string\n}\n\n// Registry of drawer drilldowns, keyed by the `block` name the backend sends\n// on a beat's CTA. To add one: create a component taking ActionBlockProps,\n// read the clicked indexes from useInsightsV2Store().actionDrawer, and\n// register it here. Add\n// `usePrepare` when the block needs to load data before rendering.\n\nexport const actionBlocks = {\n [actionBlocksKey.PLACEHOLDER_ACTION_BLOCK]: {\n Component: PlaceholderActionBlock,\n usePrepare: noop,\n title: () => 'Action Block Layer Drilldown',\n },\n [actionBlocksKey.MAKE_TRANSFER_ACTION_BLOCK]: {\n Component: MakeTransferActionBlockLayer,\n usePrepare: noop,\n title: getMakeTransferDrawerTitle,\n },\n [actionBlocksKey.TRANSCATION_HISTORY_ACTION_BLOCK]: {\n Component: TransactionHistoryBlock,\n usePrepare: noop,\n title: getDrawerHeaderTitle,\n },\n [actionBlocksKey.TRANSACTION_DETAILS_ACTION_BLOCK]: {\n Component: TransactionDetailsBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: () => 'Transaction Details',\n },\n // Expense Details for one recurring subscription. Which subscription a beat names is resolved in\n // `RecurringTransactionBlock/subscriptionBeats.ts`, not through this registry.\n [actionBlocksKey.RECURRING_TRANSACTION_ACTION_BLOCK]: {\n Component: RecurringTransactionBlock,\n usePrepare: useRecurringTransactionPrepare,\n title: (_variant, copy) => copy.recurring?.expense_details ?? '',\n },\n // Remaining Cash for the Payday Cash Left Over Status beat. Store-driven: reuses the recurring\n // loader, which also loads accounts and categories, so CashflowStore's computeds are ready.\n [actionBlocksKey.REMAINING_CASH_ACTION_BLOCK]: {\n Component: RemainingCashBlock,\n usePrepare: useRecurringTransactionPrepare,\n title: (_variant, copy) => copy.insights_feed?.remaining_cash?.title ?? '',\n },\n // The block renders its own drawer (the help module's RequestSupport) on top of the action\n // drawer, so the action drawer's title is the CTA label.\n [actionBlocksKey.CONTACT_SUPPORT_ACTION_BLOCK]: {\n Component: ContactSupportActionBlock,\n usePrepare: noop,\n title: (_variant, copy) => copy.help?.request_support ?? '',\n },\n [actionBlocksKey.TRANSACTION_LIST_ACTION_BLOCK]: {\n Component: TransactionListBlock,\n usePrepare: useTransactionDetailsPrepare,\n title: (_variant, _copy, beat) => beat?.insights_payload?.title ?? '',\n },\n} as Record<string, ActionBlockEntry>\n\nexport const blocks = {\n account_block: AccountBlock,\n account_switch_block: AccountSwitchBlock,\n direct_deposit_block: DirectDepositBlock,\n bar_chart_block: BarchartBlock,\n budget_block: BudgetBlock,\n donut_chart_block: DonutChartBlock,\n double_bar_chart_block: DoubleBarChartBlock,\n double_progress_bar_block: DoubleProgressBarBlock,\n image_block: ImageBlock,\n save_extra_block: SaveExtraBlock,\n step_chart_block: StepChartBlock,\n svg_image_block: SVGImageBlock,\n withdrawal_block: WithdrawalBlock,\n transaction_block: TransactionBlock,\n} as Record<string, React.ComponentType<{ payload: InsightsPayload; beatGuid?: string }>>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,IAAM,IAAA,CAAQ,MAAwB;AAAC,GAKjC,IAAmB,oBAAI,IAAI;AAAA,EAAC;AAAA,EAAI;AAAA,EAAQ;AAAW,CAAC,GAC7C,KAAA,CAAkB,MAAmC;AAChE,QAAM,IAAa,GAAO,KAAK,EAAE,YAAY;AAC7C,SAAO,CAAC,CAAC,KAAc,CAAC,EAAiB,IAAI,CAAU;AACzD,GAiBa,KAAe;AAAA,EACzB,CAAA,EAAgB,wBAAA,GAA2B;AAAA,IAC1C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,MAAa;AAAA,EACf;AAAA,EACC,CAAA,EAAgB,0BAAA,GAA6B;AAAA,IAC5C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACC,CAAA,EAAgB,gCAAA,GAAmC;AAAA,IAClD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACC,CAAA,EAAgB,gCAAA,GAAmC;AAAA,IAClD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,MAAa;AAAA,EACf;AAAA,EAGC,CAAA,EAAgB,kCAAA,GAAqC;AAAA,IACpD,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,WAAW,mBAAmB;AAAA,EAChE;AAAA,EAGC,CAAA,EAAgB,2BAAA,GAA8B;AAAA,IAC7C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,eAAe,gBAAgB,SAAS;AAAA,EAC1E;AAAA,EAGC,CAAA,EAAgB,4BAAA,GAA+B;AAAA,IAC9C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,MAAS,EAAK,MAAM,mBAAmB;AAAA,EAC3D;AAAA,EACC,CAAA,EAAgB,6BAAA,GAAgC;AAAA,IAC/C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAA,CAAQ,GAAU,GAAO,MAAS,GAAM,kBAAkB,SAAS;AAAA,EACrE;AACF,GAEa,KAAS;AAAA,EACpB,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,2BAA2B;AAAA,EAC3B,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,mBAAmB;AACrB"}
@@ -195,7 +195,7 @@ var O = ({ data: u, editingHoldingId: m, currentEditedCostBasis: x, handleCostBa
195
195
  disableRowSelectionOnClick: !0,
196
196
  hideFooter: !0,
197
197
  rows: u,
198
- slotProps: { baseIconButton: { sx: { display: "none" } } }
198
+ slotProps: { baseIconButton: { material: { sx: { display: "none" } } } }
199
199
  })
200
200
  });
201
201
  };
@@ -1 +1 @@
1
- {"version":3,"file":"HoldingTable.es.js","names":[],"sources":["../../../src/investments/components/HoldingTable.tsx"],"sourcesContent":["import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport Paper from '@mui/material/Paper'\nimport IconButton from '@mui/material/IconButton'\nimport TextField from '@mui/material/TextField'\nimport { useTheme } from '@mui/material/styles'\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\n\nimport { HeaderCell } from './HeaderCell'\n\ninterface HoldingDetail {\n id: string\n description: string\n qty: number\n holding: string\n costBasis: number\n rawCostBasis: number\n totalGainLoss: number\n gainLossAvailable: boolean\n gainLossBasis: number\n marketValue: number\n}\n\ninterface HoldingsTableProps {\n data: HoldingDetail[]\n editingHoldingId: string | null\n currentEditedCostBasis: string\n handleCostBasisClick: (holdingId: string, currentCostBasis: number) => void\n handleCostBasisChange: (event: React.ChangeEvent<HTMLInputElement>) => void\n handleCostBasisKeyDown: (event: React.KeyboardEvent<HTMLInputElement>, id: string) => void\n handleCostBasisBlur: (id: string) => void\n}\n\nconst HoldingsTable: React.FC<HoldingsTableProps> = ({\n data,\n editingHoldingId,\n currentEditedCostBasis,\n handleCostBasisClick,\n handleCostBasisChange,\n handleCostBasisKeyDown,\n handleCostBasisBlur,\n}) => {\n const { investments: copy } = useGlobalCopyStore()\n const theme = useTheme()\n\n const isDarkMode = theme.palette.mode === 'dark'\n const gainDisplayColor = 'success.main'\n const lossDisplayColor = isDarkMode ? 'grey.300' : 'grey.700'\n\n const gainLossDisplayColor = (value: number, type: string = 'lesserThan') => {\n if (type === 'greaterThan') {\n return value >= 0 ? gainDisplayColor : lossDisplayColor\n }\n return value <= 0 ? lossDisplayColor : gainDisplayColor\n }\n\n const columns: GridColDef[] = [\n {\n field: 'qty',\n headerName: copy.overview.qty_header,\n sortable: false,\n width: 48,\n align: 'center',\n headerAlign: 'center',\n },\n {\n field: 'holding',\n headerName: copy.overview.holding_header,\n flex: 1,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Stack sx={{ alignItems: 'center', gap: 16, flexDirection: 'row' }}>\n <Stack>\n {/* TODO :InstitutionLogo in future */}\n <Text sx={{ fontWeight: 700 }}>{params.row.holding}</Text>\n <Text sx={{ color: 'text.secondary', fontWeight: 400 }} variant=\"tiny\">\n {params.row.description}\n </Text>\n </Stack>\n </Stack>\n ),\n },\n {\n field: 'costBasis',\n headerName: copy.overview.cost_basis_header,\n width: 132,\n renderHeader: HeaderCell,\n renderCell: (params) => {\n const isCurrentlyEditing = editingHoldingId === params.row.id\n return (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n {isCurrentlyEditing ? (\n <TextField\n autoFocus={true}\n onBlur={() => handleCostBasisBlur(params.row.id)}\n onChange={handleCostBasisChange}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) =>\n handleCostBasisKeyDown(e, params.row.id)\n }\n size=\"small\"\n sx={{\n fontSize: 14,\n width: 57,\n '& .MuiInputBase-input': {\n padding: '4px 0',\n textAlign: 'center',\n fontWeight: 600,\n color: 'text.primary',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n border: 'none',\n },\n }}\n value={currentEditedCostBasis}\n />\n ) : (\n <Text sx={{ fontSize: 14, width: 57 }} variant=\"body2\">\n {params.row.gainLossAvailable\n ? params.value?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })\n : '—'}\n </Text>\n )}\n <IconButton\n onClick={() => handleCostBasisClick(params.row.id, params.row.rawCostBasis)}\n sx={{ minWidth: 12, minHeight: 12 }}\n >\n <Icon name={'stylus'} size={12} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n )\n },\n align: 'center',\n headerAlign: 'center',\n },\n {\n field: 'totalGainLoss',\n headerName: copy.overview.total_gain_loss_header,\n width: 196,\n renderHeader: HeaderCell,\n renderCell: (params) => {\n const gainLossBasis = params.row.gainLossBasis\n const gainLossPercentage = gainLossBasis\n ? (params.row.totalGainLoss / gainLossBasis) * 100\n : 0\n // No known cost basis — show \"—\" instead of a fabricated 0/100%.\n if (!params.row.gainLossAvailable) {\n return (\n <Text sx={{ color: 'text.secondary' }} variant=\"body2\">\n —\n </Text>\n )\n }\n return (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 2 }}>\n {params.value !== 0 && (\n <Icon\n name={params.value > 0 ? 'trending_up' : 'trending_down'}\n size={16}\n sx={{\n color: gainLossDisplayColor(params.value),\n mr: 1,\n verticalAlign: 'middle',\n }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"body2\"\n >\n {gainLossBasis ? `${gainLossPercentage.toFixed(2)}%` : '0.00%'}\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"body2\"\n >\n {Math.abs(params.value).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n )\n },\n align: 'right',\n headerAlign: 'right',\n sortable: false,\n },\n {\n field: 'marketValue',\n headerName: copy.overview.market_value_header,\n width: 132,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text sx={{ fontWeight: 700 }} variant={'body2'}>\n {params.value?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n ),\n align: 'right',\n headerAlign: 'right',\n },\n ]\n\n return (\n <Paper\n sx={{\n boxShadow: 'none',\n width: '100%',\n }}\n >\n <DataGridPro\n columns={columns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n disableRowSelectionOnClick={true}\n hideFooter={true}\n rows={data}\n slotProps={{ baseIconButton: { sx: { display: 'none' } } }}\n />\n </Paper>\n )\n}\n\nexport default HoldingsTable\n"],"mappings":"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"}
1
+ {"version":3,"file":"HoldingTable.es.js","names":[],"sources":["../../../src/investments/components/HoldingTable.tsx"],"sourcesContent":["import React from 'react'\n\nimport Stack from '@mui/material/Stack'\nimport Paper from '@mui/material/Paper'\nimport IconButton from '@mui/material/IconButton'\nimport TextField from '@mui/material/TextField'\nimport { useTheme } from '@mui/material/styles'\nimport { DataGridPro, GridColDef } from '@mui/x-data-grid-pro'\n\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\n\nimport { HeaderCell } from './HeaderCell'\n\ninterface HoldingDetail {\n id: string\n description: string\n qty: number\n holding: string\n costBasis: number\n rawCostBasis: number\n totalGainLoss: number\n gainLossAvailable: boolean\n gainLossBasis: number\n marketValue: number\n}\n\ninterface HoldingsTableProps {\n data: HoldingDetail[]\n editingHoldingId: string | null\n currentEditedCostBasis: string\n handleCostBasisClick: (holdingId: string, currentCostBasis: number) => void\n handleCostBasisChange: (event: React.ChangeEvent<HTMLInputElement>) => void\n handleCostBasisKeyDown: (event: React.KeyboardEvent<HTMLInputElement>, id: string) => void\n handleCostBasisBlur: (id: string) => void\n}\n\nconst HoldingsTable: React.FC<HoldingsTableProps> = ({\n data,\n editingHoldingId,\n currentEditedCostBasis,\n handleCostBasisClick,\n handleCostBasisChange,\n handleCostBasisKeyDown,\n handleCostBasisBlur,\n}) => {\n const { investments: copy } = useGlobalCopyStore()\n const theme = useTheme()\n\n const isDarkMode = theme.palette.mode === 'dark'\n const gainDisplayColor = 'success.main'\n const lossDisplayColor = isDarkMode ? 'grey.300' : 'grey.700'\n\n const gainLossDisplayColor = (value: number, type: string = 'lesserThan') => {\n if (type === 'greaterThan') {\n return value >= 0 ? gainDisplayColor : lossDisplayColor\n }\n return value <= 0 ? lossDisplayColor : gainDisplayColor\n }\n\n const columns: GridColDef[] = [\n {\n field: 'qty',\n headerName: copy.overview.qty_header,\n sortable: false,\n width: 48,\n align: 'center',\n headerAlign: 'center',\n },\n {\n field: 'holding',\n headerName: copy.overview.holding_header,\n flex: 1,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Stack sx={{ alignItems: 'center', gap: 16, flexDirection: 'row' }}>\n <Stack>\n {/* TODO :InstitutionLogo in future */}\n <Text sx={{ fontWeight: 700 }}>{params.row.holding}</Text>\n <Text sx={{ color: 'text.secondary', fontWeight: 400 }} variant=\"tiny\">\n {params.row.description}\n </Text>\n </Stack>\n </Stack>\n ),\n },\n {\n field: 'costBasis',\n headerName: copy.overview.cost_basis_header,\n width: 132,\n renderHeader: HeaderCell,\n renderCell: (params) => {\n const isCurrentlyEditing = editingHoldingId === params.row.id\n return (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 4 }}>\n {isCurrentlyEditing ? (\n <TextField\n autoFocus={true}\n onBlur={() => handleCostBasisBlur(params.row.id)}\n onChange={handleCostBasisChange}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) =>\n handleCostBasisKeyDown(e, params.row.id)\n }\n size=\"small\"\n sx={{\n fontSize: 14,\n width: 57,\n '& .MuiInputBase-input': {\n padding: '4px 0',\n textAlign: 'center',\n fontWeight: 600,\n color: 'text.primary',\n },\n '& .MuiOutlinedInput-notchedOutline': {\n border: 'none',\n },\n }}\n value={currentEditedCostBasis}\n />\n ) : (\n <Text sx={{ fontSize: 14, width: 57 }} variant=\"body2\">\n {params.row.gainLossAvailable\n ? params.value?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })\n : '—'}\n </Text>\n )}\n <IconButton\n onClick={() => handleCostBasisClick(params.row.id, params.row.rawCostBasis)}\n sx={{ minWidth: 12, minHeight: 12 }}\n >\n <Icon name={'stylus'} size={12} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n )\n },\n align: 'center',\n headerAlign: 'center',\n },\n {\n field: 'totalGainLoss',\n headerName: copy.overview.total_gain_loss_header,\n width: 196,\n renderHeader: HeaderCell,\n renderCell: (params) => {\n const gainLossBasis = params.row.gainLossBasis\n const gainLossPercentage = gainLossBasis\n ? (params.row.totalGainLoss / gainLossBasis) * 100\n : 0\n // No known cost basis — show \"—\" instead of a fabricated 0/100%.\n if (!params.row.gainLossAvailable) {\n return (\n <Text sx={{ color: 'text.secondary' }} variant=\"body2\">\n —\n </Text>\n )\n }\n return (\n <Stack sx={{ alignItems: 'center', flexDirection: 'row', gap: 2 }}>\n {params.value !== 0 && (\n <Icon\n name={params.value > 0 ? 'trending_up' : 'trending_down'}\n size={16}\n sx={{\n color: gainLossDisplayColor(params.value),\n mr: 1,\n verticalAlign: 'middle',\n }}\n />\n )}\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"body2\"\n >\n {gainLossBasis ? `${gainLossPercentage.toFixed(2)}%` : '0.00%'}\n </Text>\n <Text sx={{ color: 'text.secondary' }} variant=\"caption\">\n |\n </Text>\n <Text\n sx={{\n color: gainLossDisplayColor(params.value),\n fontWeight: params.value > 0 ? 700 : 400,\n }}\n variant=\"body2\"\n >\n {Math.abs(params.value).toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n </Stack>\n )\n },\n align: 'right',\n headerAlign: 'right',\n sortable: false,\n },\n {\n field: 'marketValue',\n headerName: copy.overview.market_value_header,\n width: 132,\n renderHeader: HeaderCell,\n renderCell: (params) => (\n <Text sx={{ fontWeight: 700 }} variant={'body2'}>\n {params.value?.toLocaleString('en-US', {\n currency: 'USD',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n style: 'currency',\n })}\n </Text>\n ),\n align: 'right',\n headerAlign: 'right',\n },\n ]\n\n return (\n <Paper\n sx={{\n boxShadow: 'none',\n width: '100%',\n }}\n >\n <DataGridPro\n columns={columns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n disableRowSelectionOnClick={true}\n hideFooter={true}\n rows={data}\n slotProps={{ baseIconButton: { material: { sx: { display: 'none' } } } }}\n />\n </Paper>\n )\n}\n\nexport default HoldingsTable\n"],"mappings":"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"}
@@ -9,7 +9,7 @@ import { jsx as t, jsxs as T } from "react/jsx-runtime";
9
9
  import { addYears as _ } from "date-fns/addYears";
10
10
  import { subDays as Y } from "date-fns/subDays";
11
11
  import { setDayOfYear as x } from "date-fns/setDayOfYear";
12
- import { AdapterDateFns as D } from "@mui/x-date-pickers/AdapterDateFnsV3";
12
+ import { AdapterDateFns as D } from "@mui/x-date-pickers/AdapterDateFns";
13
13
  import { LocalizationProvider as C } from "@mui/x-date-pickers/LocalizationProvider";
14
14
  import { getDayOfYear as W } from "date-fns/getDayOfYear";
15
15
  import { DatePicker as P } from "@mui/x-date-pickers";
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentSchedule.es.js","names":[],"sources":["../../../src/recurringtransactions/components/PaymentSchedule.tsx"],"sourcesContent":["import React from 'react'\nimport { addYears } from 'date-fns/addYears'\nimport { getDayOfYear } from 'date-fns/getDayOfYear'\nimport { setDayOfYear } from 'date-fns/setDayOfYear'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Stack from '@mui/material/Stack'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { Select, useGlobalCopyStore } from '../../common'\nimport { Frequency } from '../../core'\nimport { formatOrdinal } from '../../core/utils/NumberFormatting'\n\ninterface PaymentScheduleProps {\n frequency: Frequency\n firstDay: number\n secondDay?: number\n onFrequencyChange: (frequency: Frequency) => void\n onFirstDayChange: (day: number) => void\n onSecondDayChange: (day: number) => void\n}\n\nexport const PaymentSchedule = ({\n frequency,\n firstDay,\n secondDay,\n onFrequencyChange,\n onFirstDayChange,\n onSecondDayChange,\n}: PaymentScheduleProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const frequencies = React.useMemo(\n () => [\n { id: Frequency.EveryWeek, label: copy.frequency_every_week },\n { id: Frequency.EveryOtherWeek, label: copy.frequency_every_other_week },\n { id: Frequency.TwiceAMonth, label: copy.frequency_twice_a_month },\n { id: Frequency.EveryMonth, label: copy.frequency_every_month },\n { id: Frequency.EveryOtherMonth, label: copy.frequency_every_other_month },\n { id: Frequency.EveryQuarter, label: copy.frequency_every_quarter },\n { id: Frequency.EveryOtherQuarter, label: copy.frequency_every_other_quarter },\n { id: Frequency.EveryYear, label: copy.frequency_every_year },\n ],\n [copy],\n )\n\n const daysOfWeek = [\n { id: 0, label: copy.weekday_sunday },\n { id: 1, label: copy.weekday_monday },\n { id: 2, label: copy.weekday_tuesday },\n { id: 3, label: copy.weekday_wednesday },\n { id: 4, label: copy.weekday_thursday },\n { id: 5, label: copy.weekday_friday },\n { id: 6, label: copy.weekday_saturday },\n ]\n\n const daysOfMonth = [...Array(31).keys()].map((day) => ({\n id: day + 1,\n label: formatOrdinal(day + 1),\n }))\n daysOfMonth[30].label += ` (${copy.last_day_of_month})`\n\n const beginDaysOfMonth = daysOfMonth.slice(0, 15)\n const endDaysOfMonth = daysOfMonth.slice(14)\n\n const weeklyType = frequency === Frequency.EveryWeek || frequency === Frequency.EveryOtherWeek\n const monthlyType =\n frequency === Frequency.TwiceAMonth ||\n frequency === Frequency.EveryMonth ||\n frequency === Frequency.EveryOtherMonth ||\n frequency === Frequency.EveryQuarter ||\n frequency === Frequency.EveryOtherQuarter\n\n const tempDayOfYear = setDayOfYear(startOfToday(), firstDay)\n const dayOfYear = tempDayOfYear < startOfToday() ? addYears(tempDayOfYear, 1) : tempDayOfYear\n\n const handleYearlyChange = (date: Date | null) => {\n if (date) {\n onFirstDayChange(getDayOfYear(date))\n }\n }\n\n return (\n <Stack gap={24} sx={{ m: 24 }}>\n <Select\n label={copy.frequency}\n onChange={onFrequencyChange}\n options={frequencies}\n value={frequency}\n />\n {weeklyType && (\n <Select\n label={copy.day_of_the_week}\n onChange={onFirstDayChange}\n options={daysOfWeek}\n value={firstDay}\n />\n )}\n {monthlyType && (\n <Select\n label={\n frequency === Frequency.TwiceAMonth\n ? copy.first_day_of_the_month\n : copy.day_of_the_month\n }\n onChange={onFirstDayChange}\n options={frequency === Frequency.TwiceAMonth ? beginDaysOfMonth : daysOfMonth}\n value={firstDay}\n />\n )}\n {frequency === Frequency.TwiceAMonth && (\n <Select\n label={copy.second_day_of_the_month}\n onChange={onSecondDayChange}\n options={endDaysOfMonth}\n value={secondDay ?? ''}\n />\n )}\n {frequency === Frequency.EveryYear && (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n disablePast={true}\n label={copy.next_payment_date}\n maxDate={subDays(addYears(startOfToday(), 1), 1)}\n minDate={startOfToday()}\n onChange={handleYearlyChange}\n value={dayOfYear}\n />\n </LocalizationProvider>\n )}\n </Stack>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PaymentSchedule.es.js","names":[],"sources":["../../../src/recurringtransactions/components/PaymentSchedule.tsx"],"sourcesContent":["import React from 'react'\nimport { addYears } from 'date-fns/addYears'\nimport { getDayOfYear } from 'date-fns/getDayOfYear'\nimport { setDayOfYear } from 'date-fns/setDayOfYear'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Stack from '@mui/material/Stack'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { Select, useGlobalCopyStore } from '../../common'\nimport { Frequency } from '../../core'\nimport { formatOrdinal } from '../../core/utils/NumberFormatting'\n\ninterface PaymentScheduleProps {\n frequency: Frequency\n firstDay: number\n secondDay?: number\n onFrequencyChange: (frequency: Frequency) => void\n onFirstDayChange: (day: number) => void\n onSecondDayChange: (day: number) => void\n}\n\nexport const PaymentSchedule = ({\n frequency,\n firstDay,\n secondDay,\n onFrequencyChange,\n onFirstDayChange,\n onSecondDayChange,\n}: PaymentScheduleProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const frequencies = React.useMemo(\n () => [\n { id: Frequency.EveryWeek, label: copy.frequency_every_week },\n { id: Frequency.EveryOtherWeek, label: copy.frequency_every_other_week },\n { id: Frequency.TwiceAMonth, label: copy.frequency_twice_a_month },\n { id: Frequency.EveryMonth, label: copy.frequency_every_month },\n { id: Frequency.EveryOtherMonth, label: copy.frequency_every_other_month },\n { id: Frequency.EveryQuarter, label: copy.frequency_every_quarter },\n { id: Frequency.EveryOtherQuarter, label: copy.frequency_every_other_quarter },\n { id: Frequency.EveryYear, label: copy.frequency_every_year },\n ],\n [copy],\n )\n\n const daysOfWeek = [\n { id: 0, label: copy.weekday_sunday },\n { id: 1, label: copy.weekday_monday },\n { id: 2, label: copy.weekday_tuesday },\n { id: 3, label: copy.weekday_wednesday },\n { id: 4, label: copy.weekday_thursday },\n { id: 5, label: copy.weekday_friday },\n { id: 6, label: copy.weekday_saturday },\n ]\n\n const daysOfMonth = [...Array(31).keys()].map((day) => ({\n id: day + 1,\n label: formatOrdinal(day + 1),\n }))\n daysOfMonth[30].label += ` (${copy.last_day_of_month})`\n\n const beginDaysOfMonth = daysOfMonth.slice(0, 15)\n const endDaysOfMonth = daysOfMonth.slice(14)\n\n const weeklyType = frequency === Frequency.EveryWeek || frequency === Frequency.EveryOtherWeek\n const monthlyType =\n frequency === Frequency.TwiceAMonth ||\n frequency === Frequency.EveryMonth ||\n frequency === Frequency.EveryOtherMonth ||\n frequency === Frequency.EveryQuarter ||\n frequency === Frequency.EveryOtherQuarter\n\n const tempDayOfYear = setDayOfYear(startOfToday(), firstDay)\n const dayOfYear = tempDayOfYear < startOfToday() ? addYears(tempDayOfYear, 1) : tempDayOfYear\n\n const handleYearlyChange = (date: Date | null) => {\n if (date) {\n onFirstDayChange(getDayOfYear(date))\n }\n }\n\n return (\n <Stack gap={24} sx={{ m: 24 }}>\n <Select\n label={copy.frequency}\n onChange={onFrequencyChange}\n options={frequencies}\n value={frequency}\n />\n {weeklyType && (\n <Select\n label={copy.day_of_the_week}\n onChange={onFirstDayChange}\n options={daysOfWeek}\n value={firstDay}\n />\n )}\n {monthlyType && (\n <Select\n label={\n frequency === Frequency.TwiceAMonth\n ? copy.first_day_of_the_month\n : copy.day_of_the_month\n }\n onChange={onFirstDayChange}\n options={frequency === Frequency.TwiceAMonth ? beginDaysOfMonth : daysOfMonth}\n value={firstDay}\n />\n )}\n {frequency === Frequency.TwiceAMonth && (\n <Select\n label={copy.second_day_of_the_month}\n onChange={onSecondDayChange}\n options={endDaysOfMonth}\n value={secondDay ?? ''}\n />\n )}\n {frequency === Frequency.EveryYear && (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n disablePast={true}\n label={copy.next_payment_date}\n maxDate={subDays(addYears(startOfToday(), 1), 1)}\n minDate={startOfToday()}\n onChange={handleYearlyChange}\n value={dayOfYear}\n />\n </LocalizationProvider>\n )}\n </Stack>\n )\n}\n"],"mappings":"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"}
@@ -12,7 +12,7 @@ import { endOfMonth as x } from "date-fns/endOfMonth";
12
12
  import { startOfMonth as l } from "date-fns/startOfMonth";
13
13
  import { jsx as o, jsxs as H } from "react/jsx-runtime";
14
14
  import { useTheme as _ } from "@mui/material/styles";
15
- import { AdapterDateFns as k } from "@mui/x-date-pickers/AdapterDateFnsV3";
15
+ import { AdapterDateFns as k } from "@mui/x-date-pickers/AdapterDateFns";
16
16
  import { DateCalendar as w } from "@mui/x-date-pickers/DateCalendar";
17
17
  import { LocalizationProvider as F } from "@mui/x-date-pickers/LocalizationProvider";
18
18
  import { getWeeksInMonth as c } from "date-fns/getWeeksInMonth";
@@ -1 +1 @@
1
- {"version":3,"file":"RecurrenceCalendar.es.js","names":[],"sources":["../../../../src/recurringtransactions/components/recurrencecalendar/RecurrenceCalendar.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getWeeksInMonth } from 'date-fns/getWeeksInMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { Locale } from 'date-fns'\nimport { enCA } from 'date-fns/locale/en-CA'\nimport { enUS } from 'date-fns/locale/en-US'\nimport { es } from 'date-fns/locale/es'\nimport { fr } from 'date-fns/locale/fr'\nimport { frCA } from 'date-fns/locale/fr-CA'\n\nimport { Text } from '@mxenabled/mxui'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DateCalendar } from '@mui/x-date-pickers/DateCalendar'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport {\n ANALYTICS_EVENTS,\n TOUCH_TARGET,\n useEvent,\n useRecurringTransactionsStore,\n useGlobalCopyStore,\n} from '../../../common'\nimport { getLocale, LOCALES } from '../../../core'\n\nimport { RecurrenceDay } from './RecurrenceDay'\nimport { Legend } from './Legend'\n\nconst HEADER_HEIGHT = 58\n\nconst getDateFnsLocale = () => {\n const locale = getLocale()\n const localeMap: Record<string, Locale> = {\n [LOCALES.EN_US]: enUS,\n [LOCALES.EN_CA]: enCA,\n [LOCALES.FR]: fr,\n [LOCALES.FR_CA]: frCA,\n [LOCALES.ES]: es,\n }\n return localeMap[locale] || enUS\n}\n\nexport const RecurrenceCalendar = observer(() => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedDay, setDateRange } = useRecurringTransactionsStore()\n const [calendarHeight, setCalendarHeight] = React.useState(\n getWeeksInMonth(new Date()) * TOUCH_TARGET + HEADER_HEIGHT,\n )\n\n const handleMonthChange = (date: Date) => {\n setCalendarHeight(getWeeksInMonth(date) * TOUCH_TARGET + HEADER_HEIGHT)\n setDateRange({\n start: startOfMonth(date),\n end: endOfMonth(date),\n })\n handleDateChange(date)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_CALENDAR_RIGHT)\n }\n\n const handleDateChange = (date: Date | null) => {\n if (!date) return\n\n requestAnimationFrame(() => {\n const recurrenceList = document.getElementById('recurrence-list')\n recurrenceList?.setAttribute('tabindex', '-1')\n recurrenceList?.focus()\n })\n }\n\n const calendar = (\n <DateCalendar\n minDate={startOfMonth(new Date())}\n onChange={handleDateChange}\n onMonthChange={handleMonthChange}\n showDaysOutsideCurrentMonth={true}\n slots={{\n day: RecurrenceDay,\n }}\n sx={{\n '& .MuiPickersArrowSwitcher-button': {\n color: 'primary.main',\n '&:disabled': {\n color: 'action.disabled',\n },\n },\n '& .MuiButtonBase-root.MuiPickersDay-root': {\n borderRadius: '4px',\n '&:focus, &:hover': {\n borderRadius: '4px',\n },\n },\n '& .MuiPickersCalendarHeader-root': {\n mt: 0,\n pl: 16,\n pr: 8,\n },\n '& .MuiPickersCalendarHeader-label': {\n fontFamily: theme.typography.body1.fontFamily,\n fontSize: theme.typography.body1.fontSize,\n fontWeight: 600,\n },\n '& .MuiDayCalendar-slideTransition': {\n minHeight: calendarHeight,\n },\n '&.MuiDateCalendar-root': {\n minHeight: calendarHeight + TOUCH_TARGET,\n },\n '& .MuiButtonBase-root, .MuiDayCalendar-weekDayLabel': {\n height: TOUCH_TARGET,\n width: TOUCH_TARGET,\n margin: 0,\n },\n '& .MuiDayCalendar-weekDayLabel': {\n fontFamily: theme.typography.h3.fontFamily,\n fontSize: theme.typography.body2.fontSize,\n },\n '& .MuiPickersDay-dayOutsideMonth': {\n color: 'text.secondary',\n },\n textTransform: 'capitalize',\n }}\n value={selectedDay}\n views={['day']}\n />\n )\n\n return (\n <Stack aria-labelledby=\"calendar-label\" justifyContent=\"center\" role=\"group\">\n <LocalizationProvider adapterLocale={getDateFnsLocale()} dateAdapter={AdapterDateFns}>\n {/*NOTE: This seems odd, but because the DateCalendar cannot go from a controlled\n /* calendar to an un-controlled calendar, we have to create 2 different instances\n /* when there a selectedDay and when selectedDay is undefined */}\n {selectedDay && calendar}\n {!selectedDay && calendar}\n\n <Text id=\"calendar-label\" sx={{ alignSelf: 'center' }} variant=\"body2\">\n {copy.calendar_tooltip}\n </Text>\n <Legend />\n </LocalizationProvider>\n </Stack>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"RecurrenceCalendar.es.js","names":[],"sources":["../../../../src/recurringtransactions/components/recurrencecalendar/RecurrenceCalendar.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getWeeksInMonth } from 'date-fns/getWeeksInMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { Locale } from 'date-fns'\nimport { enCA } from 'date-fns/locale/en-CA'\nimport { enUS } from 'date-fns/locale/en-US'\nimport { es } from 'date-fns/locale/es'\nimport { fr } from 'date-fns/locale/fr'\nimport { frCA } from 'date-fns/locale/fr-CA'\n\nimport { Text } from '@mxenabled/mxui'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'\nimport { DateCalendar } from '@mui/x-date-pickers/DateCalendar'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport {\n ANALYTICS_EVENTS,\n TOUCH_TARGET,\n useEvent,\n useRecurringTransactionsStore,\n useGlobalCopyStore,\n} from '../../../common'\nimport { getLocale, LOCALES } from '../../../core'\n\nimport { RecurrenceDay } from './RecurrenceDay'\nimport { Legend } from './Legend'\n\nconst HEADER_HEIGHT = 58\n\nconst getDateFnsLocale = () => {\n const locale = getLocale()\n const localeMap: Record<string, Locale> = {\n [LOCALES.EN_US]: enUS,\n [LOCALES.EN_CA]: enCA,\n [LOCALES.FR]: fr,\n [LOCALES.FR_CA]: frCA,\n [LOCALES.ES]: es,\n }\n return localeMap[locale] || enUS\n}\n\nexport const RecurrenceCalendar = observer(() => {\n const theme = useTheme()\n const { onEvent } = useEvent()\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedDay, setDateRange } = useRecurringTransactionsStore()\n const [calendarHeight, setCalendarHeight] = React.useState(\n getWeeksInMonth(new Date()) * TOUCH_TARGET + HEADER_HEIGHT,\n )\n\n const handleMonthChange = (date: Date) => {\n setCalendarHeight(getWeeksInMonth(date) * TOUCH_TARGET + HEADER_HEIGHT)\n setDateRange({\n start: startOfMonth(date),\n end: endOfMonth(date),\n })\n handleDateChange(date)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_CALENDAR_RIGHT)\n }\n\n const handleDateChange = (date: Date | null) => {\n if (!date) return\n\n requestAnimationFrame(() => {\n const recurrenceList = document.getElementById('recurrence-list')\n recurrenceList?.setAttribute('tabindex', '-1')\n recurrenceList?.focus()\n })\n }\n\n const calendar = (\n <DateCalendar\n minDate={startOfMonth(new Date())}\n onChange={handleDateChange}\n onMonthChange={handleMonthChange}\n showDaysOutsideCurrentMonth={true}\n slots={{\n day: RecurrenceDay,\n }}\n sx={{\n '& .MuiPickersArrowSwitcher-button': {\n color: 'primary.main',\n '&:disabled': {\n color: 'action.disabled',\n },\n },\n '& .MuiButtonBase-root.MuiPickersDay-root': {\n borderRadius: '4px',\n '&:focus, &:hover': {\n borderRadius: '4px',\n },\n },\n '& .MuiPickersCalendarHeader-root': {\n mt: 0,\n pl: 16,\n pr: 8,\n },\n '& .MuiPickersCalendarHeader-label': {\n fontFamily: theme.typography.body1.fontFamily,\n fontSize: theme.typography.body1.fontSize,\n fontWeight: 600,\n },\n '& .MuiDayCalendar-slideTransition': {\n minHeight: calendarHeight,\n },\n '&.MuiDateCalendar-root': {\n minHeight: calendarHeight + TOUCH_TARGET,\n },\n '& .MuiButtonBase-root, .MuiDayCalendar-weekDayLabel': {\n height: TOUCH_TARGET,\n width: TOUCH_TARGET,\n margin: 0,\n },\n '& .MuiDayCalendar-weekDayLabel': {\n fontFamily: theme.typography.h3.fontFamily,\n fontSize: theme.typography.body2.fontSize,\n },\n '& .MuiPickersDay-dayOutsideMonth': {\n color: 'text.secondary',\n },\n textTransform: 'capitalize',\n }}\n value={selectedDay}\n views={['day']}\n />\n )\n\n return (\n <Stack aria-labelledby=\"calendar-label\" justifyContent=\"center\" role=\"group\">\n <LocalizationProvider adapterLocale={getDateFnsLocale()} dateAdapter={AdapterDateFns}>\n {/*NOTE: This seems odd, but because the DateCalendar cannot go from a controlled\n /* calendar to an un-controlled calendar, we have to create 2 different instances\n /* when there a selectedDay and when selectedDay is undefined */}\n {selectedDay && calendar}\n {!selectedDay && calendar}\n\n <Text id=\"calendar-label\" sx={{ alignSelf: 'center' }} variant=\"body2\">\n {copy.calendar_tooltip}\n </Text>\n <Legend />\n </LocalizationProvider>\n </Stack>\n )\n})\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { PickersDayProps } from '@mui/x-date-pickers/PickersDay';
2
- export declare const RecurrenceDay: (({ day, outsideCurrentMonth, ...other }: PickersDayProps<Date>) => import("react/jsx-runtime").JSX.Element) & {
2
+ export declare const RecurrenceDay: (({ day, outsideCurrentMonth, ...other }: PickersDayProps) => import("react/jsx-runtime").JSX.Element) & {
3
3
  displayName: string;
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RecurrenceDay.es.js","names":[],"sources":["../../../../src/recurringtransactions/components/recurrencecalendar/RecurrenceDay.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { isSameDay } from 'date-fns/isSameDay'\n\nimport Badge from '@mui/material/Badge'\nimport { PickersDay, PickersDayProps } from '@mui/x-date-pickers/PickersDay'\n\nimport {\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n} from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { RecurrenceStatus, RecurrenceType } from '../../../core'\n\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from '../RecurrenceBadges'\n\nexport const RecurrenceDay = observer(\n ({ day, outsideCurrentMonth, ...other }: PickersDayProps<Date>) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { recurrences, setSelectedDay } = useRecurringTransactionsStore()\n\n const filteredRecurrences = React.useMemo(\n () =>\n recurrences.filter((recurrence) => selectedAccountGuids.includes(recurrence.accountGuid)),\n [selectedAccountGuids, recurrences],\n )\n\n const dayRecurrences = filteredRecurrences.filter((a) =>\n isSameDay(a.occurredOnDate || a.expectedDate, day),\n )\n const hasUpcoming = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Upcoming,\n )\n const hasMissed = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Missed,\n )\n const hasPaid = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Paid,\n )\n const hasIncome = dayRecurrences.some((a) => a.type === RecurrenceType.Income)\n\n const totalBadges =\n (hasUpcoming ? 1 : 0) + (hasMissed ? 1 : 0) + (hasPaid ? 1 : 0) + (hasIncome ? 1 : 0)\n\n const statusParts = [\n hasPaid && copy.paid,\n hasMissed && copy.missed,\n hasUpcoming && copy.upcoming,\n hasIncome && copy.income,\n ].filter(Boolean) as string[]\n\n const ariaLabel =\n statusParts.length > 0\n ? `${formatDate(day, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}, ${statusParts.join(', ')}`\n : formatDate(day, DATE_FORMATS_INTL.MONTH_DAY_YEAR)\n\n return (\n <Badge\n badgeContent={\n dayRecurrences.length > 0 && (\n <>\n {hasMissed && <MissedBadge isOffset={true} />}\n {hasPaid && <PaidBadge isOffset={true} />}\n {hasUpcoming && <UpcomingExpenseBadge isOffset={true} />}\n {hasIncome && <IncomeBadge isOffset={true} />}\n </>\n )\n }\n overlap=\"circular\"\n sx={{\n '& .MuiBadge-badge': {\n padding: 0,\n marginRight: `${(totalBadges - 1) * 6 + 1}px`,\n flexWrap: 'nowrap',\n },\n }}\n >\n <PickersDay\n aria-label={ariaLabel}\n day={day}\n onClick={() => setSelectedDay(day)}\n outsideCurrentMonth={outsideCurrentMonth}\n sx={{\n '&.MuiPickersDay-root': {\n ...(outsideCurrentMonth && {\n color: 'text.disabled',\n }),\n ...(other.today && {\n color: 'primary.main',\n }),\n },\n }}\n {...other}\n />\n </Badge>\n )\n },\n)\n"],"mappings":";;;;;;;;;;AAiBA,IAAa,IAAgB,EAAA,CAC1B,EAAE,KAAA,GAAK,qBAAA,GAAqB,GAAG,EAAA,MAAmC;AACjE,QAAM,EAAE,WAAW,EAAA,IAAS,EAAmB,GACzC,EAAE,sBAAA,EAAA,IAAyB,EAAiB,GAC5C,EAAE,aAAA,GAAa,gBAAA,EAAA,IAAmB,EAA8B,GAQhE,IANsB,EAAM,QAAA,MAE9B,EAAY,OAAA,CAAQ,MAAe,EAAqB,SAAS,EAAW,WAAW,CAAC,GAC1F,CAAC,GAAsB,CAAW,CAGb,EAAoB,OAAA,CAAQ,MACjD,EAAU,EAAE,kBAAkB,EAAE,cAAc,CAAG,CACnD,GACM,IAAc,EAAe,KAAA,CAChC,MAAM,EAAE,SAAS,EAAe,UAAU,EAAE,WAAW,EAAiB,QAC3E,GACM,IAAY,EAAe,KAAA,CAC9B,MAAM,EAAE,SAAS,EAAe,UAAU,EAAE,WAAW,EAAiB,MAC3E,GACM,IAAU,EAAe,KAAA,CAC5B,MAAM,EAAE,SAAS,EAAe,UAAU,EAAE,WAAW,EAAiB,IAC3E,GACM,IAAY,EAAe,KAAA,CAAM,MAAM,EAAE,SAAS,EAAe,MAAM,GAEvE,KACH,IAAc,IAAI,MAAM,IAAY,IAAI,MAAM,IAAU,IAAI,MAAM,IAAY,IAAI,IAE/E,IAAc;AAAA,IAClB,KAAW,EAAK;AAAA,IAChB,KAAa,EAAK;AAAA,IAClB,KAAe,EAAK;AAAA,IACpB,KAAa,EAAK;AAAA,EACpB,EAAE,OAAO,OAAO,GAEV,IACJ,EAAY,SAAS,IACjB,GAAG,EAAW,GAAK,EAAkB,cAAc,CAAA,KAAM,EAAY,KAAK,IAAI,CAAA,KAC9E,EAAW,GAAK,EAAkB,cAAc;AAEtD,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,cACE,EAAe,SAAS,KACtB,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,MACG,KAAa,gBAAA,EAAC,GAAD,EAAa,UAAU,GAAO,CAAA;AAAA,MAC3C,KAAW,gBAAA,EAAC,GAAD,EAAW,UAAU,GAAO,CAAA;AAAA,MACvC,KAAe,gBAAA,EAAC,GAAD,EAAsB,UAAU,GAAO,CAAA;AAAA,MACtD,KAAa,gBAAA,EAAC,GAAD,EAAa,UAAU,GAAO,CAAA;AAAA,IAC5C,EAAA,CAAA;AAAA,IAGN,SAAQ;AAAA,IACR,IAAI,EACF,qBAAqB;AAAA,MACnB,SAAS;AAAA,MACT,aAAa,IAAI,IAAc,KAAK,IAAI,CAAA;AAAA,MACxC,UAAU;AAAA,IACZ,EACF;AAAA,IAEA,UAAA,gBAAA,EAAC,GAAD;AAAA,MACE,cAAY;AAAA,MACP,KAAA;AAAA,MACL,SAAA,MAAe,EAAe,CAAG;AAAA,MACZ,qBAAA;AAAA,MACrB,IAAI,EACF,wBAAwB;AAAA,QACtB,GAAI,KAAuB,EACzB,OAAO,gBACT;AAAA,QACA,GAAI,EAAM,SAAS,EACjB,OAAO,eACT;AAAA,MACF,EACF;AAAA,MACA,GAAI;AAAA,IACL,CAAA;AAAA,EACI,CAAA;AAEX,CACF"}
1
+ {"version":3,"file":"RecurrenceDay.es.js","names":[],"sources":["../../../../src/recurringtransactions/components/recurrencecalendar/RecurrenceDay.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { isSameDay } from 'date-fns/isSameDay'\n\nimport Badge from '@mui/material/Badge'\nimport { PickersDay, PickersDayProps } from '@mui/x-date-pickers/PickersDay'\n\nimport {\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n} from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { RecurrenceStatus, RecurrenceType } from '../../../core'\n\nimport { IncomeBadge, MissedBadge, PaidBadge, UpcomingExpenseBadge } from '../RecurrenceBadges'\n\nexport const RecurrenceDay = observer(({ day, outsideCurrentMonth, ...other }: PickersDayProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { recurrences, setSelectedDay } = useRecurringTransactionsStore()\n\n const filteredRecurrences = React.useMemo(\n () => recurrences.filter((recurrence) => selectedAccountGuids.includes(recurrence.accountGuid)),\n [selectedAccountGuids, recurrences],\n )\n\n const dayRecurrences = filteredRecurrences.filter((a) =>\n isSameDay(a.occurredOnDate || a.expectedDate, day),\n )\n const hasUpcoming = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Upcoming,\n )\n const hasMissed = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Missed,\n )\n const hasPaid = dayRecurrences.some(\n (a) => a.type !== RecurrenceType.Income && a.status === RecurrenceStatus.Paid,\n )\n const hasIncome = dayRecurrences.some((a) => a.type === RecurrenceType.Income)\n\n const totalBadges =\n (hasUpcoming ? 1 : 0) + (hasMissed ? 1 : 0) + (hasPaid ? 1 : 0) + (hasIncome ? 1 : 0)\n\n const statusParts = [\n hasPaid && copy.paid,\n hasMissed && copy.missed,\n hasUpcoming && copy.upcoming,\n hasIncome && copy.income,\n ].filter(Boolean) as string[]\n\n const ariaLabel =\n statusParts.length > 0\n ? `${formatDate(day, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}, ${statusParts.join(', ')}`\n : formatDate(day, DATE_FORMATS_INTL.MONTH_DAY_YEAR)\n\n return (\n <Badge\n badgeContent={\n dayRecurrences.length > 0 && (\n <>\n {hasMissed && <MissedBadge isOffset={true} />}\n {hasPaid && <PaidBadge isOffset={true} />}\n {hasUpcoming && <UpcomingExpenseBadge isOffset={true} />}\n {hasIncome && <IncomeBadge isOffset={true} />}\n </>\n )\n }\n overlap=\"circular\"\n sx={{\n '& .MuiBadge-badge': {\n padding: 0,\n marginRight: `${(totalBadges - 1) * 6 + 1}px`,\n flexWrap: 'nowrap',\n },\n }}\n >\n <PickersDay\n aria-label={ariaLabel}\n day={day}\n onClick={() => setSelectedDay(day)}\n outsideCurrentMonth={outsideCurrentMonth}\n sx={{\n '&.MuiPickersDay-root': {\n ...(outsideCurrentMonth && {\n color: 'text.disabled',\n }),\n ...(other.today && {\n color: 'primary.main',\n }),\n },\n }}\n {...other}\n />\n </Badge>\n )\n})\n"],"mappings":";;;;;;;;;;AAiBA,IAAa,IAAgB,EAAA,CAAU,EAAE,KAAA,GAAK,qBAAA,GAAqB,GAAG,EAAA,MAA6B;AACjG,QAAM,EAAE,WAAW,EAAA,IAAS,EAAmB,GACzC,EAAE,sBAAA,EAAA,IAAyB,EAAiB,GAC5C,EAAE,aAAA,GAAa,gBAAA,EAAA,IAAmB,EAA8B,GAOhE,IALsB,EAAM,QAAA,MAC1B,EAAY,OAAA,CAAQ,MAAe,EAAqB,SAAS,EAAW,WAAW,CAAC,GAC9F,CAAC,GAAsB,CAAW,CAGb,EAAoB,OAAA,CAAQ,MACjD,EAAU,EAAE,kBAAkB,EAAE,cAAc,CAAG,CACnD,GACM,IAAc,EAAe,KAAA,CAChC,MAAM,EAAE,SAAS,EAAe,UAAU,EAAE,WAAW,EAAiB,QAC3E,GACM,IAAY,EAAe,KAAA,CAC9B,MAAM,EAAE,SAAS,EAAe,UAAU,EAAE,WAAW,EAAiB,MAC3E,GACM,IAAU,EAAe,KAAA,CAC5B,MAAM,EAAE,SAAS,EAAe,UAAU,EAAE,WAAW,EAAiB,IAC3E,GACM,IAAY,EAAe,KAAA,CAAM,MAAM,EAAE,SAAS,EAAe,MAAM,GAEvE,KACH,IAAc,IAAI,MAAM,IAAY,IAAI,MAAM,IAAU,IAAI,MAAM,IAAY,IAAI,IAE/E,IAAc;AAAA,IAClB,KAAW,EAAK;AAAA,IAChB,KAAa,EAAK;AAAA,IAClB,KAAe,EAAK;AAAA,IACpB,KAAa,EAAK;AAAA,EACpB,EAAE,OAAO,OAAO,GAEV,IACJ,EAAY,SAAS,IACjB,GAAG,EAAW,GAAK,EAAkB,cAAc,CAAA,KAAM,EAAY,KAAK,IAAI,CAAA,KAC9E,EAAW,GAAK,EAAkB,cAAc;AAEtD,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,cACE,EAAe,SAAS,KACtB,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,MACG,KAAa,gBAAA,EAAC,GAAD,EAAa,UAAU,GAAO,CAAA;AAAA,MAC3C,KAAW,gBAAA,EAAC,GAAD,EAAW,UAAU,GAAO,CAAA;AAAA,MACvC,KAAe,gBAAA,EAAC,GAAD,EAAsB,UAAU,GAAO,CAAA;AAAA,MACtD,KAAa,gBAAA,EAAC,GAAD,EAAa,UAAU,GAAO,CAAA;AAAA,IAC5C,EAAA,CAAA;AAAA,IAGN,SAAQ;AAAA,IACR,IAAI,EACF,qBAAqB;AAAA,MACnB,SAAS;AAAA,MACT,aAAa,IAAI,IAAc,KAAK,IAAI,CAAA;AAAA,MACxC,UAAU;AAAA,IACZ,EACF;AAAA,IAEA,UAAA,gBAAA,EAAC,GAAD;AAAA,MACE,cAAY;AAAA,MACP,KAAA;AAAA,MACL,SAAA,MAAe,EAAe,CAAG;AAAA,MACZ,qBAAA;AAAA,MACrB,IAAI,EACF,wBAAwB;AAAA,QACtB,GAAI,KAAuB,EACzB,OAAO,gBACT;AAAA,QACA,GAAI,EAAM,SAAS,EACjB,OAAO,eACT;AAAA,MACF,EACF;AAAA,MACA,GAAI;AAAA,IACL,CAAA;AAAA,EACI,CAAA;AAEX,CAAC"}
@@ -13,12 +13,12 @@ import { endOfMonth as L } from "date-fns/endOfMonth";
13
13
  import { startOfMonth as M } from "date-fns/startOfMonth";
14
14
  import { ChevronRight as R } from "@mxenabled/mx-icons";
15
15
  import { jsx as o, jsxs as B } from "react/jsx-runtime";
16
- import { AdapterDateFns as N } from "@mui/x-date-pickers/AdapterDateFnsV3";
16
+ import { AdapterDateFns as N } from "@mui/x-date-pickers/AdapterDateFns";
17
17
  import { DateCalendar as j } from "@mui/x-date-pickers/DateCalendar";
18
18
  import { LocalizationProvider as z } from "@mui/x-date-pickers/LocalizationProvider";
19
- var nt = S(({ onProfileUpdated: r, profile: t }) => {
20
- const { common: m, recurring: d, settings: n } = C(), { updateAccount: y } = A(), e = t.notification_type === P.DebtPaymentReminder, [_, c] = i.useState(!1), [s, l] = i.useState(t.threshold || 0), [u, p] = i.useState(t.account?.day_payment_is_due || 0), h = t.account?.name || t.account?.feed_name || "", b = t.account?.day_payment_is_due ? D(n.notification_debt_payment_date, v(t.account?.day_payment_is_due)) : n.notification_debt_payment_zero_state, f = e ? b : T(t.threshold ?? 0, "0,0"), g = async () => {
21
- e && t.account ? await y({
19
+ var et = S(({ onProfileUpdated: r, profile: t }) => {
20
+ const { common: m, recurring: d, settings: e } = C(), { updateAccount: y } = A(), n = t.notification_type === P.DebtPaymentReminder, [_, c] = i.useState(!1), [s, l] = i.useState(t.threshold || 0), [u, p] = i.useState(t.account?.day_payment_is_due || 0), h = t.account?.name || t.account?.feed_name || "", b = t.account?.day_payment_is_due ? D(e.notification_debt_payment_date, v(t.account?.day_payment_is_due)) : e.notification_debt_payment_zero_state, f = n ? b : T(t.threshold ?? 0, "0,0"), g = async () => {
21
+ n && t.account ? await y({
22
22
  ...t.account,
23
23
  day_payment_is_due: u
24
24
  }) : r({
@@ -41,24 +41,24 @@ var nt = S(({ onProfileUpdated: r, profile: t }) => {
41
41
  is_enabled: !t.is_enabled
42
42
  }),
43
43
  primaryText: h,
44
- secondaryText: t.is_enabled ? f : n.notification_disabled
44
+ secondaryText: t.is_enabled ? f : e.notification_disabled
45
45
  }), /* @__PURE__ */ o(x, {
46
46
  copy: {
47
- title: e ? d.day_of_the_month : n.notification_threshold_label,
47
+ title: n ? d.day_of_the_month : e.notification_threshold_label,
48
48
  close_aria: m.close_aria
49
49
  },
50
- disablePrimaryButton: e && u === 0,
50
+ disablePrimaryButton: n && u === 0,
51
51
  isOpen: _,
52
52
  onClose: () => c(!1),
53
53
  onPrimaryAction: g,
54
54
  primaryText: m.save_button,
55
- children: e ? /* @__PURE__ */ o(z, {
55
+ children: n ? /* @__PURE__ */ o(z, {
56
56
  dateAdapter: N,
57
57
  children: /* @__PURE__ */ o(j, {
58
58
  maxDate: L(/* @__PURE__ */ new Date()),
59
59
  minDate: M(/* @__PURE__ */ new Date()),
60
60
  onChange: (a) => {
61
- p(a.getDate());
61
+ a && p(a.getDate());
62
62
  },
63
63
  slots: {
64
64
  leftArrowIcon: () => null,
@@ -78,7 +78,7 @@ var nt = S(({ onProfileUpdated: r, profile: t }) => {
78
78
  })] });
79
79
  });
80
80
  export {
81
- nt as AccountProfileListItem
81
+ et as AccountProfileListItem
82
82
  };
83
83
 
84
84
  //# sourceMappingURL=AccountProfileListItem.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccountProfileListItem.es.js","names":[],"sources":["../../../../src/settings/components/notifications/AccountProfileListItem.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport Stack from '@mui/material/Stack'\nimport { DateCalendar } from '@mui/x-date-pickers/DateCalendar'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { InstitutionLogo } from '@mxenabled/mxui'\n\nimport {\n CurrencyInput,\n Dialog,\n ToggleButtonListItem,\n useAccountStore,\n useGlobalCopyStore,\n} from '../../../common'\nimport { AccountNotificationTypes, DetailedNotificationProfile } from '../../../core'\nimport { formatCurrency, formatOrdinal } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface AccountProfileListItemProps {\n onProfileUpdated: (profile: DetailedNotificationProfile) => void\n profile: DetailedNotificationProfile\n}\n\nexport const AccountProfileListItem = observer(\n ({ onProfileUpdated, profile }: AccountProfileListItemProps) => {\n const { common: commonCopy, recurring: recurringCopy, settings: copy } = useGlobalCopyStore()\n const { updateAccount } = useAccountStore()\n\n const isPaymentReminder =\n profile.notification_type === AccountNotificationTypes.DebtPaymentReminder\n\n const [isOpen, setIsOpen] = React.useState(false)\n const [amount, setAmount] = React.useState<number>(profile.threshold || 0)\n const [paymentDay, setPaymentDay] = React.useState<number>(\n profile.account?.day_payment_is_due || 0,\n )\n\n const accountName = profile.account?.name || profile.account?.feed_name || ''\n const accountPaymentDate = profile.account?.day_payment_is_due\n ? (buildDynamicCopy(\n copy.notification_debt_payment_date,\n formatOrdinal(profile.account?.day_payment_is_due),\n ) as string)\n : copy.notification_debt_payment_zero_state\n\n const secondaryText = isPaymentReminder\n ? accountPaymentDate\n : formatCurrency(profile.threshold ?? 0, '0,0')\n\n const handleUpdateProfile = async () => {\n if (isPaymentReminder && profile.account) {\n await updateAccount({ ...profile.account, day_payment_is_due: paymentDay })\n } else {\n onProfileUpdated({ ...profile, threshold: amount })\n }\n }\n\n return (\n <Stack>\n <ToggleButtonListItem\n avatar={\n profile.account?.institution_guid ? (\n <InstitutionLogo\n alt={profile.label}\n institutionGuid={profile.account?.institution_guid}\n />\n ) : undefined\n }\n endIcon={<ChevronRight />}\n isChecked={profile.is_enabled}\n isDisabled={!profile.is_enabled}\n isPrimaryTextBold={true}\n onClick={() => setIsOpen(true)}\n onToggle={() =>\n onProfileUpdated({\n ...profile,\n is_enabled: !profile.is_enabled,\n })\n }\n primaryText={accountName}\n secondaryText={!profile.is_enabled ? copy.notification_disabled : secondaryText}\n />\n\n <Dialog\n copy={{\n title: isPaymentReminder\n ? recurringCopy.day_of_the_month\n : copy.notification_threshold_label,\n close_aria: commonCopy.close_aria,\n }}\n disablePrimaryButton={isPaymentReminder && paymentDay === 0}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onPrimaryAction={handleUpdateProfile}\n primaryText={commonCopy.save_button}\n >\n {isPaymentReminder ? (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DateCalendar\n maxDate={endOfMonth(new Date())}\n minDate={startOfMonth(new Date())}\n onChange={(date: Date) => {\n setPaymentDay(date.getDate())\n }}\n slots={{\n // Hides the arrows\n leftArrowIcon: () => null,\n rightArrowIcon: () => null,\n }}\n sx={{\n // TODO: Needs to be updated in MXUI\n '& .MuiPickersDay-today': {\n color: 'primary.main',\n },\n }}\n views={['day']}\n />\n </LocalizationProvider>\n ) : (\n <CurrencyInput\n amount={amount}\n autoFocus={true}\n fullWidth={true}\n minAmount={0}\n setAmount={(value) => setAmount(Number(value) || 0)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n )}\n </Dialog>\n </Stack>\n )\n },\n)\n"],"mappings":"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"}
1
+ {"version":3,"file":"AccountProfileListItem.es.js","names":[],"sources":["../../../../src/settings/components/notifications/AccountProfileListItem.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport Stack from '@mui/material/Stack'\nimport { DateCalendar } from '@mui/x-date-pickers/DateCalendar'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { InstitutionLogo } from '@mxenabled/mxui'\n\nimport {\n CurrencyInput,\n Dialog,\n ToggleButtonListItem,\n useAccountStore,\n useGlobalCopyStore,\n} from '../../../common'\nimport { AccountNotificationTypes, DetailedNotificationProfile } from '../../../core'\nimport { formatCurrency, formatOrdinal } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface AccountProfileListItemProps {\n onProfileUpdated: (profile: DetailedNotificationProfile) => void\n profile: DetailedNotificationProfile\n}\n\nexport const AccountProfileListItem = observer(\n ({ onProfileUpdated, profile }: AccountProfileListItemProps) => {\n const { common: commonCopy, recurring: recurringCopy, settings: copy } = useGlobalCopyStore()\n const { updateAccount } = useAccountStore()\n\n const isPaymentReminder =\n profile.notification_type === AccountNotificationTypes.DebtPaymentReminder\n\n const [isOpen, setIsOpen] = React.useState(false)\n const [amount, setAmount] = React.useState<number>(profile.threshold || 0)\n const [paymentDay, setPaymentDay] = React.useState<number>(\n profile.account?.day_payment_is_due || 0,\n )\n\n const accountName = profile.account?.name || profile.account?.feed_name || ''\n const accountPaymentDate = profile.account?.day_payment_is_due\n ? (buildDynamicCopy(\n copy.notification_debt_payment_date,\n formatOrdinal(profile.account?.day_payment_is_due),\n ) as string)\n : copy.notification_debt_payment_zero_state\n\n const secondaryText = isPaymentReminder\n ? accountPaymentDate\n : formatCurrency(profile.threshold ?? 0, '0,0')\n\n const handleUpdateProfile = async () => {\n if (isPaymentReminder && profile.account) {\n await updateAccount({ ...profile.account, day_payment_is_due: paymentDay })\n } else {\n onProfileUpdated({ ...profile, threshold: amount })\n }\n }\n\n return (\n <Stack>\n <ToggleButtonListItem\n avatar={\n profile.account?.institution_guid ? (\n <InstitutionLogo\n alt={profile.label}\n institutionGuid={profile.account?.institution_guid}\n />\n ) : undefined\n }\n endIcon={<ChevronRight />}\n isChecked={profile.is_enabled}\n isDisabled={!profile.is_enabled}\n isPrimaryTextBold={true}\n onClick={() => setIsOpen(true)}\n onToggle={() =>\n onProfileUpdated({\n ...profile,\n is_enabled: !profile.is_enabled,\n })\n }\n primaryText={accountName}\n secondaryText={!profile.is_enabled ? copy.notification_disabled : secondaryText}\n />\n\n <Dialog\n copy={{\n title: isPaymentReminder\n ? recurringCopy.day_of_the_month\n : copy.notification_threshold_label,\n close_aria: commonCopy.close_aria,\n }}\n disablePrimaryButton={isPaymentReminder && paymentDay === 0}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onPrimaryAction={handleUpdateProfile}\n primaryText={commonCopy.save_button}\n >\n {isPaymentReminder ? (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DateCalendar\n maxDate={endOfMonth(new Date())}\n minDate={startOfMonth(new Date())}\n onChange={(date: Date | null) => {\n if (date) setPaymentDay(date.getDate())\n }}\n slots={{\n // Hides the arrows\n leftArrowIcon: () => null,\n rightArrowIcon: () => null,\n }}\n sx={{\n // TODO: Needs to be updated in MXUI\n '& .MuiPickersDay-today': {\n color: 'primary.main',\n },\n }}\n views={['day']}\n />\n </LocalizationProvider>\n ) : (\n <CurrencyInput\n amount={amount}\n autoFocus={true}\n fullWidth={true}\n minAmount={0}\n setAmount={(value) => setAmount(Number(value) || 0)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n )}\n </Dialog>\n </Stack>\n )\n },\n)\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { useAppConfig as F, useGlobalCopyStore as B, useSettingsStore as M, useUserStore as R } from "../../../common/context/hooks.es.js";
1
+ import { useAppConfig as E, useGlobalCopyStore as B, useSettingsStore as M, useUserStore as R } from "../../../common/context/hooks.es.js";
2
2
  import { useScreenSize as I } from "../../../common/hooks/useScreenSize.es.js";
3
3
  import L from "../../../common/components/dialog/Dialog.es.js";
4
4
  import z from "./actions/ResetPasswordAction.es.js";
@@ -14,11 +14,11 @@ import { alpha as b, useTheme as K } from "@mui/material/styles";
14
14
  import Y from "@mui/material/Box";
15
15
  import { getUnixTime as q } from "date-fns/getUnixTime";
16
16
  import d from "@mui/material/TextField";
17
- import { AdapterDateFns as Q } from "@mui/x-date-pickers/AdapterDateFnsV3";
17
+ import { AdapterDateFns as Q } from "@mui/x-date-pickers/AdapterDateFns";
18
18
  import { LocalizationProvider as W } from "@mui/x-date-pickers/LocalizationProvider";
19
19
  import { DatePicker as X } from "@mui/x-date-pickers";
20
- var Z = ({ availableWidth: C, handleOnLeaveClick: f }) => {
21
- const u = K(), { common: w, settings: o } = B(), { isMobile: m } = I(C), { config: h } = F(), { updateUser: S } = M(), { user: r } = R(), [a, U] = p.useState({
20
+ var Z = ({ availableWidth: C, handleOnLeaveClick: u }) => {
21
+ const f = K(), { common: w, settings: o } = B(), { isMobile: m } = I(C), { config: h } = E(), { updateUser: S } = M(), { user: r } = R(), [a, T] = p.useState({
22
22
  first_name: r.first_name,
23
23
  last_name: r.last_name,
24
24
  email: r.email,
@@ -26,9 +26,9 @@ var Z = ({ availableWidth: C, handleOnLeaveClick: f }) => {
26
26
  birthday: r.birthday,
27
27
  postal_code: r.postal_code,
28
28
  credit_score: r.credit_score
29
- }), [c, y] = p.useState(!1), [T, g] = p.useState(!1), _ = p.useRef(null), v = a.email && !r.email_is_verified && !c, x = a.phone && !r.phone_is_verified && !c;
29
+ }), [c, y] = p.useState(!1), [U, g] = p.useState(!1), _ = p.useRef(null), v = a.email && !r.email_is_verified && !c, x = a.phone && !r.phone_is_verified && !c;
30
30
  p.useEffect(() => {
31
- if (f) {
31
+ if (u) {
32
32
  const e = (s) => {
33
33
  _.current && !_.current.contains(s.target) && c && g(!0);
34
34
  };
@@ -37,26 +37,26 @@ var Z = ({ availableWidth: C, handleOnLeaveClick: f }) => {
37
37
  };
38
38
  }
39
39
  }, [c]);
40
- const V = () => {
40
+ const P = () => {
41
41
  if (a.birthday) {
42
- const e = /* @__PURE__ */ new Date(a.birthday * 1e3), s = e.getUTCFullYear(), A = e.getUTCMonth(), E = e.getUTCDate();
43
- return new Date(s, A, E);
42
+ const e = /* @__PURE__ */ new Date(a.birthday * 1e3), s = e.getUTCFullYear(), F = e.getUTCMonth(), A = e.getUTCDate();
43
+ return new Date(s, F, A);
44
44
  }
45
- }, D = async () => {
45
+ }, V = async () => {
46
46
  await S({
47
47
  ...r,
48
48
  ...a
49
49
  }), y(!1);
50
- }, P = () => {
51
- g(!1), f && f();
52
50
  }, k = () => {
51
+ g(!1), u && u();
52
+ }, D = () => {
53
53
  g(!1);
54
54
  }, n = (e) => {
55
55
  const s = {
56
56
  ...a,
57
57
  ...e
58
58
  };
59
- U(s), y(JSON.stringify({
59
+ T(s), y(JSON.stringify({
60
60
  ...r,
61
61
  ...s
62
62
  }) !== JSON.stringify(r));
@@ -67,7 +67,7 @@ var Z = ({ availableWidth: C, handleOnLeaveClick: f }) => {
67
67
  sx: {
68
68
  backgroundColor: "background.paper",
69
69
  p: 24,
70
- "& .MuiTextField-root": { flex: 1 }
70
+ "& .MuiTextField-root, & .MuiPickersTextField-root": { flex: 1 }
71
71
  },
72
72
  children: [
73
73
  /* @__PURE__ */ t(J, { children: o.personal_details }),
@@ -130,21 +130,21 @@ var Z = ({ availableWidth: C, handleOnLeaveClick: f }) => {
130
130
  slotProps: {
131
131
  nextIconButton: { sx: {
132
132
  color: "primary.main",
133
- "&:hover": { backgroundColor: b(u.palette.primary.light, 0.1) }
133
+ "&:hover": { backgroundColor: b(f.palette.primary.light, 0.1) }
134
134
  } },
135
135
  previousIconButton: { sx: {
136
136
  color: "primary.main",
137
- "&:hover": { backgroundColor: b(u.palette.primary.light, 0.1) }
137
+ "&:hover": { backgroundColor: b(f.palette.primary.light, 0.1) }
138
138
  } }
139
139
  },
140
140
  sx: {
141
141
  width: "100%",
142
142
  "& .MuiIconButton-edgeEnd": {
143
143
  color: "primary.main",
144
- "&:hover": { backgroundColor: b(u.palette.primary.light, 0.1) }
144
+ "&:hover": { backgroundColor: b(f.palette.primary.light, 0.1) }
145
145
  }
146
146
  },
147
- value: V()
147
+ value: P()
148
148
  })
149
149
  }), /* @__PURE__ */ t(d, {
150
150
  defaultValue: a.postal_code,
@@ -161,7 +161,7 @@ var Z = ({ availableWidth: C, handleOnLeaveClick: f }) => {
161
161
  h.display_password_options_in_settings && /* @__PURE__ */ t(z, {}),
162
162
  /* @__PURE__ */ t($, {
163
163
  disabled: !c,
164
- onClick: D,
164
+ onClick: V,
165
165
  sx: { width: m ? "100%" : 124 },
166
166
  variant: "contained",
167
167
  children: w.save_button
@@ -170,9 +170,9 @@ var Z = ({ availableWidth: C, handleOnLeaveClick: f }) => {
170
170
  ]
171
171
  }), /* @__PURE__ */ t(L, {
172
172
  copy: { title: o.discard_changes },
173
- isOpen: T,
174
- onClose: k,
175
- onSecondaryAction: P,
173
+ isOpen: U,
174
+ onClose: D,
175
+ onSecondaryAction: k,
176
176
  primaryText: o.keep_editing,
177
177
  secondaryText: o.leave,
178
178
  children: o.discard_changes_message
@@ -1 +1 @@
1
- {"version":3,"file":"ProfileTab.es.js","names":[],"sources":["../../../../src/settings/components/profile/ProfileTab.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { alpha, useTheme } from '@mui/material/styles'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport TextField from '@mui/material/TextField'\n\nimport { H3, P } from '@mxenabled/mxui'\n\nimport {\n useAppConfig,\n useGlobalCopyStore,\n useScreenSize,\n useSettingsStore,\n useUserStore,\n Dialog,\n} from '../../../common'\nimport { type EditableUser } from '../../../core'\nimport ResetPasswordAction from './actions/ResetPasswordAction'\nimport VerifyEmailAction from './actions/VerifyEmailAction'\nimport VerifyPhoneAction from './actions/VerifyPhoneAction'\n\ninterface ProfileFormProps {\n availableWidth?: number\n handleOnLeaveClick?: () => void\n}\n\ntype UserInput = {\n [U in keyof EditableUser]: EditableUser[U]\n}\n\nconst ProfileForm: React.FC<ProfileFormProps> = ({ availableWidth, handleOnLeaveClick }) => {\n const theme = useTheme()\n const { common: commonCopy, settings: settingsCopy } = useGlobalCopyStore()\n const { isMobile } = useScreenSize(availableWidth)\n const { config } = useAppConfig()\n const { updateUser } = useSettingsStore()\n const { user } = useUserStore()\n\n const [modifiedUser, setModifiedUser] = React.useState<EditableUser>({\n first_name: user.first_name,\n last_name: user.last_name,\n email: user.email,\n phone: user.phone,\n birthday: user.birthday,\n postal_code: user.postal_code,\n credit_score: user.credit_score,\n })\n const [hasUnsavedChanges, setHasUnsavedChanges] = React.useState(false)\n const [showLeaveDialog, setShowLeaveDialog] = React.useState(false)\n const boxRef = React.useRef<HTMLDivElement>(null)\n\n const showVerifyEmail = modifiedUser.email && !user.email_is_verified && !hasUnsavedChanges\n const showVerifyPhone = modifiedUser.phone && !user.phone_is_verified && !hasUnsavedChanges\n\n React.useEffect(() => {\n if (handleOnLeaveClick) {\n const handleClickOutside = (event: MouseEvent) => {\n if (boxRef.current && !boxRef.current.contains(event.target as Node) && hasUnsavedChanges) {\n setShowLeaveDialog(true)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }\n return undefined\n }, [hasUnsavedChanges])\n\n // eslint-disable-next-line consistent-return\n const formatReadableBirthday = () => {\n if (modifiedUser.birthday) {\n const utc = new Date(modifiedUser.birthday * 1000)\n const year = utc.getUTCFullYear()\n const month = utc.getUTCMonth()\n const day = utc.getUTCDate()\n return new Date(year, month, day)\n }\n }\n\n const handleSave = async () => {\n await updateUser({ ...user, ...modifiedUser })\n setHasUnsavedChanges(false)\n }\n\n const handleLeaveDialog = () => {\n setShowLeaveDialog(false)\n\n if (handleOnLeaveClick) {\n handleOnLeaveClick()\n }\n }\n\n const handleKeepEditing = () => {\n setShowLeaveDialog(false)\n }\n\n const handleInput = (update: UserInput) => {\n const changedUser = {\n ...modifiedUser,\n ...update,\n }\n setModifiedUser(changedUser)\n setHasUnsavedChanges(JSON.stringify({ ...user, ...changedUser }) !== JSON.stringify(user))\n }\n\n return (\n <>\n <Box\n component=\"form\"\n ref={boxRef}\n sx={{\n backgroundColor: 'background.paper',\n p: 24,\n '& .MuiTextField-root': {\n flex: 1,\n },\n }}\n >\n <H3>{settingsCopy.personal_details}</H3>\n <P variant=\"body1\">{settingsCopy.update_information}</P>\n <Stack direction={isMobile ? 'column' : 'row'} spacing={24} sx={{ mb: 24, pt: 24 }}>\n <TextField\n defaultValue={modifiedUser.first_name}\n label={settingsCopy.first_name}\n onChange={(e) => handleInput({ first_name: e.target.value })}\n />\n <TextField\n defaultValue={modifiedUser.last_name}\n label={settingsCopy.last_name}\n onChange={(e) => handleInput({ last_name: e.target.value })}\n />\n </Stack>\n <Stack direction={isMobile ? 'column' : 'row'}>\n {config.display_email_edit_field_in_settings && (\n <Stack sx={{ flex: 1, mb: showVerifyEmail ? 20 : 24, mr: isMobile ? 0 : 24 }}>\n <TextField\n defaultValue={modifiedUser.email}\n label={settingsCopy.email_address}\n onChange={(e) => handleInput({ email: e.target.value })}\n />\n {showVerifyEmail && <VerifyEmailAction />}\n </Stack>\n )}\n {config.display_sms_edit_field_in_settings && (\n <Stack sx={{ flex: 1, mb: showVerifyPhone ? 20 : 24 }}>\n <TextField\n defaultValue={modifiedUser.phone}\n label={settingsCopy.mobile_number}\n onChange={(e) => handleInput({ phone: e.target.value })}\n type=\"tel\"\n />\n {showVerifyPhone && <VerifyPhoneAction />}\n </Stack>\n )}\n </Stack>\n <Stack direction={isMobile ? 'column' : 'row'} spacing={24} sx={{ mb: 24 }}>\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n label={settingsCopy.birthdate}\n onChange={(value) => handleInput({ birthday: getUnixTime(value as Date) })}\n slotProps={{\n nextIconButton: {\n sx: {\n color: 'primary.main',\n '&:hover': { backgroundColor: alpha(theme.palette.primary.light, 0.1) },\n },\n },\n previousIconButton: {\n sx: {\n color: 'primary.main',\n '&:hover': { backgroundColor: alpha(theme.palette.primary.light, 0.1) },\n },\n },\n }}\n sx={{\n width: '100%',\n '& .MuiIconButton-edgeEnd': {\n color: 'primary.main',\n '&:hover': { backgroundColor: alpha(theme.palette.primary.light, 0.1) },\n },\n }}\n value={formatReadableBirthday()}\n />\n </LocalizationProvider>\n <TextField\n defaultValue={modifiedUser.postal_code}\n label={settingsCopy.zip_code}\n onChange={(e) => handleInput({ postal_code: e.target.value })}\n />\n </Stack>\n <Stack>\n <TextField\n defaultValue={modifiedUser.credit_score}\n label={settingsCopy.credit_score}\n onChange={(e) => handleInput({ credit_score: Number(e.target.value) })}\n />\n {config.display_password_options_in_settings && <ResetPasswordAction />}\n <Button\n disabled={!hasUnsavedChanges}\n onClick={handleSave}\n sx={{ width: isMobile ? '100%' : 124 }}\n variant=\"contained\"\n >\n {commonCopy.save_button}\n </Button>\n </Stack>\n </Box>\n <Dialog\n copy={{ title: settingsCopy.discard_changes }}\n isOpen={showLeaveDialog}\n onClose={handleKeepEditing}\n onSecondaryAction={handleLeaveDialog}\n primaryText={settingsCopy.keep_editing}\n secondaryText={settingsCopy.leave}\n >\n {settingsCopy.discard_changes_message}\n </Dialog>\n </>\n )\n}\n\nexport default observer(ProfileForm)\n"],"mappings":"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"}
1
+ {"version":3,"file":"ProfileTab.es.js","names":[],"sources":["../../../../src/settings/components/profile/ProfileTab.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { alpha, useTheme } from '@mui/material/styles'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport TextField from '@mui/material/TextField'\n\nimport { H3, P } from '@mxenabled/mxui'\n\nimport {\n useAppConfig,\n useGlobalCopyStore,\n useScreenSize,\n useSettingsStore,\n useUserStore,\n Dialog,\n} from '../../../common'\nimport { type EditableUser } from '../../../core'\nimport ResetPasswordAction from './actions/ResetPasswordAction'\nimport VerifyEmailAction from './actions/VerifyEmailAction'\nimport VerifyPhoneAction from './actions/VerifyPhoneAction'\n\ninterface ProfileFormProps {\n availableWidth?: number\n handleOnLeaveClick?: () => void\n}\n\ntype UserInput = {\n [U in keyof EditableUser]: EditableUser[U]\n}\n\nconst ProfileForm: React.FC<ProfileFormProps> = ({ availableWidth, handleOnLeaveClick }) => {\n const theme = useTheme()\n const { common: commonCopy, settings: settingsCopy } = useGlobalCopyStore()\n const { isMobile } = useScreenSize(availableWidth)\n const { config } = useAppConfig()\n const { updateUser } = useSettingsStore()\n const { user } = useUserStore()\n\n const [modifiedUser, setModifiedUser] = React.useState<EditableUser>({\n first_name: user.first_name,\n last_name: user.last_name,\n email: user.email,\n phone: user.phone,\n birthday: user.birthday,\n postal_code: user.postal_code,\n credit_score: user.credit_score,\n })\n const [hasUnsavedChanges, setHasUnsavedChanges] = React.useState(false)\n const [showLeaveDialog, setShowLeaveDialog] = React.useState(false)\n const boxRef = React.useRef<HTMLDivElement>(null)\n\n const showVerifyEmail = modifiedUser.email && !user.email_is_verified && !hasUnsavedChanges\n const showVerifyPhone = modifiedUser.phone && !user.phone_is_verified && !hasUnsavedChanges\n\n React.useEffect(() => {\n if (handleOnLeaveClick) {\n const handleClickOutside = (event: MouseEvent) => {\n if (boxRef.current && !boxRef.current.contains(event.target as Node) && hasUnsavedChanges) {\n setShowLeaveDialog(true)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }\n return undefined\n }, [hasUnsavedChanges])\n\n // eslint-disable-next-line consistent-return\n const formatReadableBirthday = () => {\n if (modifiedUser.birthday) {\n const utc = new Date(modifiedUser.birthday * 1000)\n const year = utc.getUTCFullYear()\n const month = utc.getUTCMonth()\n const day = utc.getUTCDate()\n return new Date(year, month, day)\n }\n }\n\n const handleSave = async () => {\n await updateUser({ ...user, ...modifiedUser })\n setHasUnsavedChanges(false)\n }\n\n const handleLeaveDialog = () => {\n setShowLeaveDialog(false)\n\n if (handleOnLeaveClick) {\n handleOnLeaveClick()\n }\n }\n\n const handleKeepEditing = () => {\n setShowLeaveDialog(false)\n }\n\n const handleInput = (update: UserInput) => {\n const changedUser = {\n ...modifiedUser,\n ...update,\n }\n setModifiedUser(changedUser)\n setHasUnsavedChanges(JSON.stringify({ ...user, ...changedUser }) !== JSON.stringify(user))\n }\n\n return (\n <>\n <Box\n component=\"form\"\n ref={boxRef}\n sx={{\n backgroundColor: 'background.paper',\n p: 24,\n '& .MuiTextField-root, & .MuiPickersTextField-root': {\n flex: 1,\n },\n }}\n >\n <H3>{settingsCopy.personal_details}</H3>\n <P variant=\"body1\">{settingsCopy.update_information}</P>\n <Stack direction={isMobile ? 'column' : 'row'} spacing={24} sx={{ mb: 24, pt: 24 }}>\n <TextField\n defaultValue={modifiedUser.first_name}\n label={settingsCopy.first_name}\n onChange={(e) => handleInput({ first_name: e.target.value })}\n />\n <TextField\n defaultValue={modifiedUser.last_name}\n label={settingsCopy.last_name}\n onChange={(e) => handleInput({ last_name: e.target.value })}\n />\n </Stack>\n <Stack direction={isMobile ? 'column' : 'row'}>\n {config.display_email_edit_field_in_settings && (\n <Stack sx={{ flex: 1, mb: showVerifyEmail ? 20 : 24, mr: isMobile ? 0 : 24 }}>\n <TextField\n defaultValue={modifiedUser.email}\n label={settingsCopy.email_address}\n onChange={(e) => handleInput({ email: e.target.value })}\n />\n {showVerifyEmail && <VerifyEmailAction />}\n </Stack>\n )}\n {config.display_sms_edit_field_in_settings && (\n <Stack sx={{ flex: 1, mb: showVerifyPhone ? 20 : 24 }}>\n <TextField\n defaultValue={modifiedUser.phone}\n label={settingsCopy.mobile_number}\n onChange={(e) => handleInput({ phone: e.target.value })}\n type=\"tel\"\n />\n {showVerifyPhone && <VerifyPhoneAction />}\n </Stack>\n )}\n </Stack>\n <Stack direction={isMobile ? 'column' : 'row'} spacing={24} sx={{ mb: 24 }}>\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n label={settingsCopy.birthdate}\n onChange={(value) => handleInput({ birthday: getUnixTime(value as Date) })}\n slotProps={{\n nextIconButton: {\n sx: {\n color: 'primary.main',\n '&:hover': { backgroundColor: alpha(theme.palette.primary.light, 0.1) },\n },\n },\n previousIconButton: {\n sx: {\n color: 'primary.main',\n '&:hover': { backgroundColor: alpha(theme.palette.primary.light, 0.1) },\n },\n },\n }}\n sx={{\n width: '100%',\n '& .MuiIconButton-edgeEnd': {\n color: 'primary.main',\n '&:hover': { backgroundColor: alpha(theme.palette.primary.light, 0.1) },\n },\n }}\n value={formatReadableBirthday()}\n />\n </LocalizationProvider>\n <TextField\n defaultValue={modifiedUser.postal_code}\n label={settingsCopy.zip_code}\n onChange={(e) => handleInput({ postal_code: e.target.value })}\n />\n </Stack>\n <Stack>\n <TextField\n defaultValue={modifiedUser.credit_score}\n label={settingsCopy.credit_score}\n onChange={(e) => handleInput({ credit_score: Number(e.target.value) })}\n />\n {config.display_password_options_in_settings && <ResetPasswordAction />}\n <Button\n disabled={!hasUnsavedChanges}\n onClick={handleSave}\n sx={{ width: isMobile ? '100%' : 124 }}\n variant=\"contained\"\n >\n {commonCopy.save_button}\n </Button>\n </Stack>\n </Box>\n <Dialog\n copy={{ title: settingsCopy.discard_changes }}\n isOpen={showLeaveDialog}\n onClose={handleKeepEditing}\n onSecondaryAction={handleLeaveDialog}\n primaryText={settingsCopy.keep_editing}\n secondaryText={settingsCopy.leave}\n >\n {settingsCopy.discard_changes_message}\n </Dialog>\n </>\n )\n}\n\nexport default observer(ProfileForm)\n"],"mappings":"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"}
@@ -103,10 +103,10 @@ var F = ({ height: i = "100dvh", onCategoryClick: s, onRowClick: c }) => {
103
103
  onCellClick: n,
104
104
  onCellKeyDown: h,
105
105
  rows: g,
106
- slotProps: { baseIconButton: {
106
+ slotProps: { baseIconButton: { material: {
107
107
  color: "secondary",
108
108
  sx: { ml: 8 }
109
- } },
109
+ } } },
110
110
  sx: {
111
111
  "& .split-row": { bgcolor: "background.default" },
112
112
  "& .excluded-row": {
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionTable.es.js","names":[],"sources":["../../../../src/transactions/components/shared/TransactionTable.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Paper from '@mui/material/Paper'\nimport { DataGridPro, GridCellParams, GridColDef } from '@mui/x-data-grid-pro'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n} from '../../../common'\n\nimport { useTransactionsUiStore } from '../../context/hooks'\n\nimport {\n AccountCell,\n AmountCell,\n CategoryCell,\n DateCell,\n FlagCell,\n HeaderCell,\n PayeeCell,\n} from './transactiontable/cells'\n\ninterface TransactionTableProps {\n height?: number | string\n onCategoryClick?: (guid: string) => void\n onRowClick?: (guid: string) => void\n}\n\nconst TransactionTable: React.FC<TransactionTableProps> = ({\n height = '100dvh',\n onCategoryClick,\n onRowClick,\n}) => {\n const { onEvent } = useEvent()\n const { transactions: copy } = useGlobalCopyStore()\n const { isCopyLoaded } = useGlobalUiStore()\n const { isLoading, sortedTransactions } = useTransactionStore()\n const { clearExpandedSplits, toggleSplit } = useTransactionsUiStore()\n\n React.useEffect(() => {\n return () => clearExpandedSplits()\n }, [])\n\n const rows = React.useMemo(\n () =>\n sortedTransactions.map((transaction) => ({\n id: transaction.guid,\n isHovering: false,\n ...transaction,\n })),\n [sortedTransactions],\n )\n\n const handleCellClick = ({ row: { id, guid, has_been_split }, field }: GridCellParams) => {\n if (has_been_split) return toggleSplit(id)\n\n if (field === 'category') {\n onEvent(ANALYTICS_EVENTS.TRANSACTIONS_TABLE_CLICK_CATEGORY, { guid })\n return onCategoryClick?.(guid)\n }\n\n return onRowClick?.(guid)\n }\n\n const handleCellKeyDown = (params: GridCellParams, event: React.KeyboardEvent) => {\n if (event.key !== 'Enter' && event.key !== ' ') return\n handleCellClick(params)\n }\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n const columns: GridColDef[] = [\n {\n field: 'flag',\n headerName: '',\n minWidth: 32,\n width: 32,\n sortable: false,\n renderCell: (params) => <FlagCell {...params} />,\n renderHeader: () => <span aria-label={copy.transaction_status} />,\n },\n {\n field: 'date',\n headerName: copy.date_title,\n width: 103,\n renderHeader: HeaderCell,\n renderCell: (params) => (params.row.parent_guid ? null : <DateCell {...params} />),\n sortingOrder: ['desc', 'asc'],\n },\n {\n cellClassName: 'vertical-align-center',\n field: 'payee',\n headerName: copy.payee_title,\n flex: 0.33,\n renderHeader: HeaderCell,\n renderCell: (params) => <PayeeCell {...params} excludedText={copy.is_excluded} />,\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'category',\n headerName: copy.category_title,\n flex: 0.25,\n renderHeader: HeaderCell,\n renderCell: (params) => <CategoryCell {...params} />,\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'account',\n headerName: copy.account_title,\n flex: 0.33,\n renderHeader: HeaderCell,\n renderCell: (params) => (params.row.parent_guid ? null : <AccountCell {...params} />),\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'amount',\n headerName: copy.amount_title,\n flex: 0.25,\n renderHeader: HeaderCell,\n renderCell: AmountCell,\n align: 'right',\n headerAlign: 'right',\n sortingOrder: ['asc', 'desc'],\n },\n ]\n\n return (\n <Paper sx={{ height: height, px: 24, width: '100%', boxShadow: 'none' }}>\n <DataGridPro\n columns={columns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n getCellClassName={(params) => {\n if (params.row.parent_guid) return 'split-row'\n if (params.row.is_hidden) return 'excluded-row'\n return ''\n }}\n hideFooter={true}\n initialState={{ sorting: { sortModel: [{ field: 'date', sort: 'desc' }] } }}\n loading={isLoading}\n onCellClick={handleCellClick}\n onCellKeyDown={handleCellKeyDown}\n rows={rows}\n slotProps={{ baseIconButton: { color: 'secondary', sx: { ml: 8 } } }}\n sx={{\n '& .split-row': {\n bgcolor: 'background.default',\n },\n '& .excluded-row': {\n bgcolor: 'grey.50',\n color: 'text.secondary',\n },\n }}\n />\n </Paper>\n )\n}\n\nexport default observer(TransactionTable)\n"],"mappings":"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"}
1
+ {"version":3,"file":"TransactionTable.es.js","names":[],"sources":["../../../../src/transactions/components/shared/TransactionTable.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Paper from '@mui/material/Paper'\nimport { DataGridPro, GridCellParams, GridColDef } from '@mui/x-data-grid-pro'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n} from '../../../common'\n\nimport { useTransactionsUiStore } from '../../context/hooks'\n\nimport {\n AccountCell,\n AmountCell,\n CategoryCell,\n DateCell,\n FlagCell,\n HeaderCell,\n PayeeCell,\n} from './transactiontable/cells'\n\ninterface TransactionTableProps {\n height?: number | string\n onCategoryClick?: (guid: string) => void\n onRowClick?: (guid: string) => void\n}\n\nconst TransactionTable: React.FC<TransactionTableProps> = ({\n height = '100dvh',\n onCategoryClick,\n onRowClick,\n}) => {\n const { onEvent } = useEvent()\n const { transactions: copy } = useGlobalCopyStore()\n const { isCopyLoaded } = useGlobalUiStore()\n const { isLoading, sortedTransactions } = useTransactionStore()\n const { clearExpandedSplits, toggleSplit } = useTransactionsUiStore()\n\n React.useEffect(() => {\n return () => clearExpandedSplits()\n }, [])\n\n const rows = React.useMemo(\n () =>\n sortedTransactions.map((transaction) => ({\n id: transaction.guid,\n isHovering: false,\n ...transaction,\n })),\n [sortedTransactions],\n )\n\n const handleCellClick = ({ row: { id, guid, has_been_split }, field }: GridCellParams) => {\n if (has_been_split) return toggleSplit(id)\n\n if (field === 'category') {\n onEvent(ANALYTICS_EVENTS.TRANSACTIONS_TABLE_CLICK_CATEGORY, { guid })\n return onCategoryClick?.(guid)\n }\n\n return onRowClick?.(guid)\n }\n\n const handleCellKeyDown = (params: GridCellParams, event: React.KeyboardEvent) => {\n if (event.key !== 'Enter' && event.key !== ' ') return\n handleCellClick(params)\n }\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n const columns: GridColDef[] = [\n {\n field: 'flag',\n headerName: '',\n minWidth: 32,\n width: 32,\n sortable: false,\n renderCell: (params) => <FlagCell {...params} />,\n renderHeader: () => <span aria-label={copy.transaction_status} />,\n },\n {\n field: 'date',\n headerName: copy.date_title,\n width: 103,\n renderHeader: HeaderCell,\n renderCell: (params) => (params.row.parent_guid ? null : <DateCell {...params} />),\n sortingOrder: ['desc', 'asc'],\n },\n {\n cellClassName: 'vertical-align-center',\n field: 'payee',\n headerName: copy.payee_title,\n flex: 0.33,\n renderHeader: HeaderCell,\n renderCell: (params) => <PayeeCell {...params} excludedText={copy.is_excluded} />,\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'category',\n headerName: copy.category_title,\n flex: 0.25,\n renderHeader: HeaderCell,\n renderCell: (params) => <CategoryCell {...params} />,\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'account',\n headerName: copy.account_title,\n flex: 0.33,\n renderHeader: HeaderCell,\n renderCell: (params) => (params.row.parent_guid ? null : <AccountCell {...params} />),\n sortingOrder: ['asc', 'desc'],\n },\n {\n field: 'amount',\n headerName: copy.amount_title,\n flex: 0.25,\n renderHeader: HeaderCell,\n renderCell: AmountCell,\n align: 'right',\n headerAlign: 'right',\n sortingOrder: ['asc', 'desc'],\n },\n ]\n\n return (\n <Paper sx={{ height: height, px: 24, width: '100%', boxShadow: 'none' }}>\n <DataGridPro\n columns={columns}\n disableColumnFilter={true}\n disableColumnMenu={true}\n getCellClassName={(params) => {\n if (params.row.parent_guid) return 'split-row'\n if (params.row.is_hidden) return 'excluded-row'\n return ''\n }}\n hideFooter={true}\n initialState={{ sorting: { sortModel: [{ field: 'date', sort: 'desc' }] } }}\n loading={isLoading}\n onCellClick={handleCellClick}\n onCellKeyDown={handleCellKeyDown}\n rows={rows}\n slotProps={{ baseIconButton: { material: { color: 'secondary', sx: { ml: 8 } } } }}\n sx={{\n '& .split-row': {\n bgcolor: 'background.default',\n },\n '& .excluded-row': {\n bgcolor: 'grey.50',\n color: 'text.secondary',\n },\n }}\n />\n </Paper>\n )\n}\n\nexport default observer(TransactionTable)\n"],"mappings":";;;;;;;;;;;;;;;;AAiCA,IAAM,IAAA,CAAqD,EACzD,QAAA,IAAS,UACT,iBAAA,GACA,YAAA,EAAA,MACI;AACJ,QAAM,EAAE,SAAA,EAAA,IAAY,EAAS,GACvB,EAAE,cAAc,EAAA,IAAS,EAAmB,GAC5C,EAAE,cAAA,EAAA,IAAiB,EAAiB,GACpC,EAAE,WAAA,GAAW,oBAAA,EAAA,IAAuB,EAAoB,GACxD,EAAE,qBAAA,GAAqB,aAAA,EAAA,IAAgB,EAAuB;AAEpE,EAAA,EAAM,UAAA,MACJ,MAAa,EAAoB,GAChC,CAAC,CAAC;AAEL,QAAM,IAAO,EAAM,QAAA,MAEf,EAAmB,IAAA,CAAK,OAAiB;AAAA,IACvC,IAAI,EAAY;AAAA,IAChB,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,EAAE,GACJ,CAAC,CAAkB,CACrB,GAEM,IAAA,CAAmB,EAAE,KAAK,EAAE,IAAA,GAAI,MAAA,GAAM,gBAAA,EAAA,GAAkB,OAAA,EAAA,MACxD,IAAuB,EAAY,CAAE,IAErC,MAAU,cACZ,EAAQ,EAAiB,mCAAmC,EAAE,MAAA,EAAK,CAAC,GAC7D,IAAkB,CAAI,KAGxB,IAAa,CAAI,GAGpB,IAAA,CAAqB,GAAwB,MAA+B;AAChF,IAAI,EAAM,QAAQ,WAAW,EAAM,QAAQ,OAC3C,EAAgB,CAAM;AAAA,EACxB;AAEA,MAAI,CAAC,EACH,QAAO,gBAAA,EAAC,GAAD,CAAS,CAAA;AAGlB,QAAM,IAAwB;AAAA,IAC5B;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAA,CAAa,MAAW,gBAAA,EAAC,GAAD,EAAU,GAAI,EAAS,CAAA;AAAA,MAC/C,cAAA,MAAoB,gBAAA,EAAC,QAAD,EAAM,cAAY,EAAK,mBAAqB,CAAA;AAAA,IAClE;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,YAAY,EAAK;AAAA,MACjB,OAAO;AAAA,MACP,cAAc;AAAA,MACd,YAAA,CAAa,MAAY,EAAO,IAAI,cAAc,OAAO,gBAAA,EAAC,GAAD,EAAU,GAAI,EAAS,CAAA;AAAA,MAChF,cAAc,CAAC,QAAQ,KAAK;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,OAAO;AAAA,MACP,YAAY,EAAK;AAAA,MACjB,MAAM;AAAA,MACN,cAAc;AAAA,MACd,YAAA,CAAa,MAAW,gBAAA,EAAC,GAAD;AAAA,QAAW,GAAI;AAAA,QAAQ,cAAc,EAAK;AAAA,MAAc,CAAA;AAAA,MAChF,cAAc,CAAC,OAAO,MAAM;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,YAAY,EAAK;AAAA,MACjB,MAAM;AAAA,MACN,cAAc;AAAA,MACd,YAAA,CAAa,MAAW,gBAAA,EAAC,GAAD,EAAc,GAAI,EAAS,CAAA;AAAA,MACnD,cAAc,CAAC,OAAO,MAAM;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,YAAY,EAAK;AAAA,MACjB,MAAM;AAAA,MACN,cAAc;AAAA,MACd,YAAA,CAAa,MAAY,EAAO,IAAI,cAAc,OAAO,gBAAA,EAAC,GAAD,EAAa,GAAI,EAAS,CAAA;AAAA,MACnF,cAAc,CAAC,OAAO,MAAM;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,YAAY,EAAK;AAAA,MACjB,MAAM;AAAA,MACN,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,cAAc,CAAC,OAAO,MAAM;AAAA,IAC9B;AAAA,EACF;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IAAO,IAAI;AAAA,MAAU,QAAA;AAAA,MAAQ,IAAI;AAAA,MAAI,OAAO;AAAA,MAAQ,WAAW;AAAA,IAAO;AAAA,IACpE,UAAA,gBAAA,EAAC,GAAD;AAAA,MACW,SAAA;AAAA,MACT,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,MACnB,kBAAA,CAAmB,MACb,EAAO,IAAI,cAAoB,cAC/B,EAAO,IAAI,YAAkB,iBAC1B;AAAA,MAET,YAAY;AAAA,MACZ,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC;AAAA,QAAE,OAAO;AAAA,QAAQ,MAAM;AAAA,MAAO,CAAC,EAAE,EAAE;AAAA,MAC1E,SAAS;AAAA,MACT,aAAa;AAAA,MACb,eAAe;AAAA,MACT,MAAA;AAAA,MACN,WAAW,EAAE,gBAAgB,EAAE,UAAU;AAAA,QAAE,OAAO;AAAA,QAAa,IAAI,EAAE,IAAI,EAAE;AAAA,MAAE,EAAE,EAAE;AAAA,MACjF,IAAI;AAAA,QACF,gBAAgB,EACd,SAAS,qBACX;AAAA,QACA,mBAAmB;AAAA,UACjB,SAAS;AAAA,UACT,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACD,CAAA;AAAA,EACI,CAAA;AAEX,GAEA,KAAe,EAAS,CAAgB"}