@mx-cartographer/experiences 9.1.1 → 9.1.3-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.
- package/CHANGELOG.md +4 -0
- package/dist/{AccountDetailsDrawer-C1hhmlmI.mjs → AccountDetailsDrawer-Cq4kiiKD.mjs} +4 -4
- package/dist/{AccountDetailsDrawer-C1hhmlmI.mjs.map → AccountDetailsDrawer-Cq4kiiKD.mjs.map} +1 -1
- package/dist/{Analytics-WeZYytR0.mjs → Analytics-D-jdcL72.mjs} +3 -3
- package/dist/Analytics-D-jdcL72.mjs.map +1 -0
- package/dist/{EmbeddedCard-DH8vQ3qN.mjs → EmbeddedCard-DCOQnTz-.mjs} +2 -2
- package/dist/{EmbeddedCard-DH8vQ3qN.mjs.map → EmbeddedCard-DCOQnTz-.mjs.map} +1 -1
- package/dist/{ExportCsvAction-C9KWH3Az.mjs → ExportCsvAction-C-IisDcv.mjs} +2 -2
- package/dist/{ExportCsvAction-C9KWH3Az.mjs.map → ExportCsvAction-C-IisDcv.mjs.map} +1 -1
- package/dist/{Help-aERwhajy.mjs → Help-zVZdcmlk.mjs} +2 -2
- package/dist/{Help-aERwhajy.mjs.map → Help-zVZdcmlk.mjs.map} +1 -1
- package/dist/{ManageIncome-Be9WHv-s.mjs → ManageIncome-B_8i71mE.mjs} +5 -5
- package/dist/{ManageIncome-Be9WHv-s.mjs.map → ManageIncome-B_8i71mE.mjs.map} +1 -1
- package/dist/{RecurringSettings-kRqAViNn.mjs → RecurringSettings-hs0YUp83.mjs} +3 -3
- package/dist/{RecurringSettings-kRqAViNn.mjs.map → RecurringSettings-hs0YUp83.mjs.map} +1 -1
- package/dist/{TransactionDetails-roZ5xLq8.mjs → TransactionDetails-DT-MQqOB.mjs} +3 -3
- package/dist/{TransactionDetails-roZ5xLq8.mjs.map → TransactionDetails-DT-MQqOB.mjs.map} +1 -1
- package/dist/{WidgetContainer-DJnp6t6c.mjs → WidgetContainer-CjdCY4sj.mjs} +21 -21
- package/dist/WidgetContainer-CjdCY4sj.mjs.map +1 -0
- package/dist/accounts/index.es.js +4 -4
- package/dist/budgets/index.es.js +5 -5
- package/dist/cashflow/index.es.js +6 -6
- package/dist/common/components/daterangeselector/DateRangeSelector.d.ts +5 -0
- package/dist/common/index.es.js +2 -2
- package/dist/dashboard/index.es.js +93 -71
- package/dist/dashboard/index.es.js.map +1 -1
- package/dist/debts/index.es.js +2 -2
- package/dist/finstrong/index.es.js +4 -4
- package/dist/goals/index.es.js +2 -2
- package/dist/help/index.es.js +2 -2
- package/dist/insights/index.es.js +2 -2
- package/dist/investments/index.es.js +2 -2
- package/dist/networth/index.es.js +78 -76
- package/dist/networth/index.es.js.map +1 -1
- package/dist/recurringtransactions/index.es.js +6 -6
- package/dist/settings/index.es.js +2 -2
- package/dist/spending/index.es.js +4 -4
- package/dist/transactions/index.es.js +7 -7
- package/dist/trends/index.es.js +5 -5
- package/package.json +1 -1
- package/dist/Analytics-WeZYytR0.mjs.map +0 -1
- package/dist/WidgetContainer-DJnp6t6c.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionDetails-roZ5xLq8.mjs","sources":["../src/transactions/constants/Actions.ts","../src/budgets/components/shared/BudgetDetailsTopSection.tsx","../src/budgets/components/MerchantBudgetDetailsDrawer.tsx","../src/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.tsx","../src/transactions/components/shared/transactiondetails/actions/CategoryAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DateAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DeleteAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DeleteLogoAction.tsx","../src/transactions/components/shared/transactiondetails/actions/ExcludeAction.tsx","../src/transactions/components/shared/transactiondetails/TransactionAmountHeader.tsx","../src/transactions/components/shared/transactiondetails/actions/MemoAction.tsx","../src/transactions/components/splitmanager/SplitRow.tsx","../src/transactions/components/splitmanager/SplitManager.tsx","../src/transactions/components/shared/transactiondetails/actions/SplitAction.tsx","../src/transactions/components/tagmanager/Header.tsx","../src/transactions/components/tagmanager/SearchBox.tsx","../src/transactions/components/tagmanager/TagRow.tsx","../src/transactions/components/tagmanager/TagManager.tsx","../src/transactions/components/shared/transactiondetails/actions/TagsAction.tsx","../src/transactions/components/shared/transactiondetails/Description.tsx","../src/transactions/components/shared/transactiondetails/FlagTransaction.tsx","../src/transactions/components/shared/transactiondetails/TransactionDetailsView.tsx","../src/common/components/TinyBarChart.tsx","../src/transactions/components/shared/getEmbeddedInstanceSlotByBeatTemplates.tsx","../src/transactions/components/shared/TransactionDetails.tsx"],"sourcesContent":["export enum TopActions {\n Category,\n Date,\n Memo,\n Tags,\n}\n\nexport enum BottomActions {\n MerchantBudget,\n SplitTransaction,\n HideTransaction,\n MerchantLogo,\n}\n\nexport const DEFAULT_TOP_ACTIONS = [\n TopActions.Category,\n TopActions.Date,\n TopActions.Memo,\n TopActions.Tags,\n] as TopActions[]\n\nexport const DEFAULT_BOTTOM_ACTIONS = [\n BottomActions.SplitTransaction,\n BottomActions.HideTransaction,\n BottomActions.MerchantLogo,\n] as BottomActions[]\n\nexport const CHEVRON_ICON_SIZE = 20\nexport const ICON_SIZE = 28\n","import React from 'react'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { H2, P, Text } from '@mxenabled/mxui'\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../../common'\nimport { StatusIndicator } from '../../../insights'\nimport { fromTimestampToMonthYear } from '../../../core/utils/DateUtil'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface BudgetDetailsTopAndMiddleSectionProps {\n startDate: number\n onViewHistory?: () => void\n totalTransaction: number\n amount: number\n spentPercentage: number\n remainingAmount: number\n iconColor?: string\n icon: React.ReactNode\n}\n\nexport const BudgetDetailsTopSection = ({\n startDate,\n onViewHistory,\n totalTransaction,\n amount,\n spentPercentage,\n remainingAmount,\n iconColor,\n icon,\n}: BudgetDetailsTopAndMiddleSectionProps) => {\n const { budgets: budgetsCopy } = useGlobalCopyStore()\n\n return (\n <React.Fragment>\n <Box\n sx={{\n bgcolor: 'background.paper',\n borderBottomColor: 'divider',\n borderBottomStyle: 'solid',\n borderBottomWidth: 1,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 12,\n justifyContent: 'space-between',\n pt: 16,\n px: 24,\n }}\n >\n <P bold={true} variant=\"subtitle1\">\n {fromTimestampToMonthYear(startDate)}\n </P>\n {onViewHistory && (\n <Button endIcon={<ChevronRight />} onClick={onViewHistory} sx={{ height: 28 }}>\n <Text bold={true} variant=\"body2\">\n {budgetsCopy.spending_history}\n </Text>\n </Button>\n )}\n </Stack>\n <StatusIndicator\n amount={\n <Stack sx={{ alignItems: 'baseline', flexDirection: 'row', gap: 4 }}>\n <H2>{formatCurrency(totalTransaction, '0,0.00')}</H2>\n <P color=\"text.secondary\" variant=\"body2\">\n /\n </P>\n <P color=\"text.secondary\" variant=\"body2\">\n {formatCurrency(amount, '0,0.00')}\n </P>\n </Stack>\n }\n completeColor={`${iconColor}.main`}\n icon={icon}\n label={budgetsCopy.spent_label}\n leftLabel={\n buildDynamicCopy(budgetsCopy.percent_spent, spentPercentage.toFixed()) as string\n }\n percentComplete={spentPercentage}\n rightLabel={\n buildDynamicCopy(\n budgetsCopy.balance_left,\n formatCurrency(remainingAmount, '0,0.00'),\n ) as string\n }\n sx={{\n pb: 24,\n pt: 16,\n px: 24,\n }}\n />\n </Box>\n </React.Fragment>\n )\n}\n","import React from 'react'\n\nimport { MerchantLogo } from '@mxenabled/mxui'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { BudgetDetailsTopSection } from './shared/BudgetDetailsTopSection'\n\nimport { getRemainingAmountSpentPercentage } from '../../core/utils/BudgetUtil'\n\nimport { useGlobalCopyStore, useTransactionStore } from '../../common'\nimport { type Transaction } from '../../core'\nimport { Drawer } from '../../common/components'\nimport type { MerchantBudget } from '../../core/types/Budget'\nimport { TransactionList } from '../../transactions'\nimport { CurrencyDialogAction } from '../../transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\ninterface MerchantBudgetDetailsDrawerProps {\n merchantBudget: MerchantBudget\n transaction: Transaction\n onClose: () => void\n isOpen: boolean\n setCurrencyDialogAction: (action: CurrencyDialogAction) => void\n renderingToast?: () => React.ReactNode\n}\n\nexport const MerchantBudgetDetailsDrawer = ({\n merchantBudget,\n transaction,\n onClose,\n isOpen,\n setCurrencyDialogAction,\n renderingToast,\n}: MerchantBudgetDetailsDrawerProps) => {\n const { budgets: budgetsCopy, common: commonCopy } = useGlobalCopyStore()\n\n const { sortedTransactions } = useTransactionStore()\n\n const transactionTotal = React.useMemo(() => {\n return sortedTransactions.reduce((acc, t) => {\n if (!t.parent_guid) {\n return acc + t.amount\n }\n return acc\n }, 0)\n }, [sortedTransactions])\n\n const { remainingAmount, spentPercentage, iconColor } = getRemainingAmountSpentPercentage(\n transactionTotal,\n merchantBudget.amount ?? 0,\n )\n\n return (\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n footerStyles={{\n px: 24,\n py: 16,\n }}\n isOpen={isOpen}\n onClose={onClose}\n onPrimaryAction={() => setCurrencyDialogAction(CurrencyDialogAction.EDIT)}\n onSecondaryAction={() => {\n setCurrencyDialogAction(CurrencyDialogAction.DELETE)\n }}\n primaryText={budgetsCopy.details_edit_button}\n secondaryColor=\"error\"\n secondaryText={budgetsCopy.details_delete_button}\n sx={{\n '& .list-wrapper': {\n pr: 24,\n },\n }}\n title={\n buildDynamicCopy(budgetsCopy.details_type_title, merchantBudget.merchant_name) as string\n }\n >\n <BudgetDetailsTopSection\n amount={merchantBudget.amount}\n icon={\n <MerchantLogo\n categoryGuid={transaction.top_level_category_guid || ''}\n merchantGuid={transaction.merchant_guid || ''}\n />\n }\n iconColor={iconColor}\n remainingAmount={remainingAmount}\n spentPercentage={spentPercentage}\n startDate={transaction.date}\n totalTransaction={transactionTotal}\n />\n <TransactionList />\n {renderingToast?.()}\n </Drawer>\n )\n}\n\nexport default observer(MerchantBudgetDetailsDrawer)\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text, Toast } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport {\n CurrencyDialog,\n useAccountStore,\n useBudgetsStore,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../../common'\nimport { type Transaction } from '../../../../../core'\nimport { useAriaLive } from '../../../../../common/hooks/useAriaLive'\nimport MerchantBudgetDetailsDrawer from '../../../../../budgets/components/MerchantBudgetDetailsDrawer'\nimport { formatCurrency } from '../../../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../../../core/utils/Localization'\n\ninterface AddMerchantBudgetActionProps {\n transaction: Transaction\n}\n\nexport enum CurrencyDialogAction {\n CREATE = 'create',\n EDIT = 'edit',\n DELETE = 'delete',\n}\n\nexport const AddMerchantBudgetAction = observer(({ transaction }: AddMerchantBudgetActionProps) => {\n const [currencyDialogAction, setCurrencyDialogAction] =\n React.useState<CurrencyDialogAction | null>(null)\n\n const [amount, setAmount] = React.useState('')\n\n const [isError, setIsError] = React.useState(false)\n\n const inProgressRef = React.useRef(false)\n\n const [lastActionType, setLastActionType] = React.useState<CurrencyDialogAction | null>(null)\n\n const theme = useTheme()\n\n const {\n addMerchantBudget,\n updateMerchantBudget,\n deleteMerchantBudget,\n getMerchantBudgetByMerchantGuid,\n alert,\n setAlert,\n } = useBudgetsStore()\n const { setFilter } = useTransactionStore()\n const { accounts } = useAccountStore()\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n const { budgets: budgetsCopy, common: commonCopy } = useGlobalCopyStore()\n\n const { announce, ariaLive } = useAriaLive()\n\n const [merchantBudgetDetailsDrawerOpen, setMerchantBudgetDetailsDrawerOpen] =\n React.useState(false)\n\n const existingMerchantBudget = transaction?.merchant_guid\n ? getMerchantBudgetByMerchantGuid(transaction.merchant_guid)\n : undefined\n\n const handleModalClose = () => {\n setLastActionType(currencyDialogAction)\n setCurrencyDialogAction(null)\n setAmount('')\n }\n\n const handleClick = () => {\n if (!existingMerchantBudget) {\n setCurrencyDialogAction(CurrencyDialogAction.CREATE)\n } else {\n setMerchantBudgetDetailsDrawerOpen(true)\n }\n }\n\n // details needed for all the three states of the dialog - create, edit, delete\n const actionDetails = {\n [CurrencyDialogAction.CREATE]: {\n content: buildDynamicCopy(\n budgetsCopy.create_budget_content,\n <strong>{transaction.description}</strong>,\n `${formatCurrency(transaction.amount, '0,0.00')}`,\n ) as string,\n title: budgetsCopy.dialog_create_budget_title,\n primaryButtonText: budgetsCopy.dialog_primary_button_text,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.alert_merchant_budget_not_created,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.CREATE),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.alert_budget_created,\n transaction.description,\n ) as string,\n apiTrigger: async () => await addMerchantBudget(transaction.merchant_guid!, Number(amount)),\n },\n\n [CurrencyDialogAction.EDIT]: {\n content: buildDynamicCopy(\n budgetsCopy.edit_budget_content,\n <strong>{transaction.description}</strong>,\n ) as string,\n title: budgetsCopy.details_edit_title,\n primaryButtonText: budgetsCopy.add_save_button,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.error_alert_edit_merchant_budget,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.EDIT),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.success_alert_edit_merchant_budget,\n transaction.description,\n ) as string,\n apiTrigger: async () =>\n await updateMerchantBudget({\n ...existingMerchantBudget!,\n amount: Number(amount),\n }),\n },\n\n [CurrencyDialogAction.DELETE]: {\n content: buildDynamicCopy(\n budgetsCopy.delete_description,\n <strong>{transaction.description}</strong>,\n ) as string,\n title: budgetsCopy.delete_title,\n primaryButtonText: budgetsCopy.details_delete_button,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.error_alert_delete_merchant_budget,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.DELETE),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.success_alert_delete_merchant_budget,\n transaction.description,\n ) as string,\n apiTrigger: async () => await deleteMerchantBudget(existingMerchantBudget!.guid),\n },\n }\n\n const handlePrimaryAction = async () => {\n if (inProgressRef.current) return\n\n inProgressRef.current = true\n\n const { apiTrigger, successAlertMessage, errorAlertMessage } =\n actionDetails[currencyDialogAction as CurrencyDialogAction]\n\n const { isSuccess } = await apiTrigger()\n const alertMessage = isSuccess ? successAlertMessage : errorAlertMessage\n handleModalClose()\n setIsError(!isSuccess)\n setAlert(alertMessage)\n announce(alertMessage)\n\n if (isSuccess && currencyDialogAction === CurrencyDialogAction.DELETE) {\n setMerchantBudgetDetailsDrawerOpen(false)\n }\n inProgressRef.current = false\n }\n\n React.useEffect(() => {\n const dateRange = {\n start: startOfMonth(new Date(transaction.date * 1000)),\n end: endOfMonth(new Date(transaction.date * 1000)),\n }\n\n if (merchantBudgetDetailsDrawerOpen) {\n setFilter({\n accounts: accounts.map((account) => account.guid),\n custom: merchantBudgetDetailsDrawerOpen\n ? (trn) => trn.merchant_guid === transaction.merchant_guid\n : (trn) => trn.guid === transaction.guid,\n dateRange,\n })\n }\n }, [merchantBudgetDetailsDrawerOpen, transaction, accounts])\n\n const snackBar = () => (\n <Toast\n actionText={budgetsCopy.autogenerate_budgets_error_primary_button}\n autoHideDuration={3500}\n closeAriaLabel={commonCopy.close_aria}\n handleClose={() => setAlert('')}\n message={alert}\n onActionClick={actionDetails[lastActionType as CurrencyDialogAction]?.errorRetryAction}\n open={Boolean(alert)}\n severity={isError ? 'error' : 'success'}\n showAction={isError}\n showClose={true}\n />\n )\n return (\n <React.Fragment>\n {ariaLive}\n\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleClick}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"bubble_chart\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={budgetsCopy.add_merchant_budget_primary_text}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {existingMerchantBudget\n ? `${formatCurrency(existingMerchantBudget.amount, '0,0.00')} / ${commonCopy.month_text}`\n : budgetsCopy.add_merchant_budget_secondary_text}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n\n {!!existingMerchantBudget && (\n <MerchantBudgetDetailsDrawer\n isOpen={merchantBudgetDetailsDrawerOpen}\n merchantBudget={existingMerchantBudget}\n onClose={() => setMerchantBudgetDetailsDrawerOpen(false)}\n renderingToast={() => alert && snackBar()}\n setCurrencyDialogAction={(action) => {\n if (action === CurrencyDialogAction.EDIT) {\n setAmount(existingMerchantBudget?.amount.toString() || '')\n }\n setCurrencyDialogAction(action)\n }}\n transaction={transaction}\n />\n )}\n {currencyDialogAction && (\n <CurrencyDialog\n closeAriaLabel={commonCopy.close_aria}\n content={actionDetails[currencyDialogAction].content}\n handleInputChange={setAmount}\n handleModalClose={handleModalClose}\n handlePrimaryAction={handlePrimaryAction}\n handleSecondaryAction={handleModalClose}\n inputLabel={\n currencyDialogAction !== CurrencyDialogAction.DELETE ? commonCopy.amount_text : ''\n }\n inputValue={amount}\n isOpen={Boolean(currencyDialogAction)}\n primaryText={actionDetails[currencyDialogAction].primaryButtonText}\n secondaryText={commonCopy.cancel_button}\n title={actionDetails[currencyDialogAction].title}\n />\n )}\n\n {!!alert && snackBar()}\n </React.Fragment>\n )\n})\n","import React from 'react'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { CategoryIcon, CategoryIconVariants, P, Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\nimport { CategorySelectorDrawer } from '../../../../../categories'\n\nimport {\n ANALYTICS_EVENTS,\n Dialog,\n useCategoryStore,\n useGlobalCopyStore,\n} from '../../../../../common'\nimport type { Transaction } from '../../../../../core'\n\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { buildDynamicCopy } from '../../../../../core/utils/Localization'\n\ninterface CategoryActionProps {\n transaction: Transaction\n}\n\nconst CategoryAction: React.FC<CategoryActionProps> = ({ transaction }) => {\n const { addOrUpdateTransactionRule, updateTransaction } = useTransactionStore()\n const { categories } = useCategoryStore()\n const { onEvent } = useEvent()\n const { setShouldDisableDrawerScroll, updateManualTransaction } = useTransactionsUiStore()\n const { transactions: copy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n const [open, setOpen] = React.useState(false)\n const [selectedGuid, setSelectedGuid] = React.useState('')\n\n const handleCategoryChange = async (applyToAll: boolean) => {\n await updateTransaction({ ...transaction, category_guid: selectedGuid })\n if (applyToAll) {\n await addOrUpdateTransactionRule(selectedGuid, transaction)\n }\n setSelectedGuid('')\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_CATEGORY, {\n transaction_guid: transaction.guid,\n })\n }\n\n const handleSelected = (guid: string) => {\n if (transaction.is_manual && !transaction.guid) {\n const category = categories.find((c) => c.guid === guid)\n updateManualTransaction({\n ...transaction,\n category: category?.name,\n category_guid: guid,\n top_level_category_guid: category?.parent_guid || guid,\n })\n } else {\n setSelectedGuid(guid)\n }\n\n handleCloseDrawer()\n }\n\n const handleCloseDrawer = () => {\n setOpen(false)\n setShouldDisableDrawerScroll(false)\n }\n\n const category = React.useMemo(\n () => categories.find((item) => item.guid === selectedGuid),\n [selectedGuid],\n )\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_CATEGORY_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <CategoryIcon\n categoryGuid={transaction.top_level_category_guid}\n size={24}\n sx={{ color: 'text.primary' }}\n variant={CategoryIconVariants.Transparent}\n />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.category_title}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {transaction.category ?? copy.actions_select_a_category}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n\n <CategorySelectorDrawer\n initialSelected={transaction.category_guid}\n onClose={handleCloseDrawer}\n onSelect={handleSelected}\n showDrawer={open}\n title={copy.actions_select_a_category}\n />\n\n <Dialog\n copy={{\n title: buildDynamicCopy(\n copy.actions_apply_to_all_transaction_types,\n transaction.description,\n ) as string,\n }}\n isOpen={Boolean(selectedGuid)}\n onClose={() => setSelectedGuid('')}\n onPrimaryAction={() => handleCategoryChange(true)}\n onSecondaryAction={() => handleCategoryChange(false)}\n primaryText={copy.actions_apply_to_all}\n secondaryText={copy.actions_this_time_only}\n >\n <P variant=\"subtitle1\">\n {\n buildDynamicCopy(\n copy.actions_all_past_and_future,\n transaction.description,\n category?.name,\n ) as string\n }\n </P>\n </Dialog>\n </ListItem>\n )\n}\n\nexport default CategoryAction\n","import React from 'react'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Avatar from '@mui/material/Avatar'\nimport Stack from '@mui/material/Stack'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport {\n ANALYTICS_EVENTS,\n Calendar,\n CalendarSelectionTypes,\n Drawer,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../../common'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../../../../core/constants'\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DateActionProps {\n transaction: Transaction\n}\n\nconst DateAction: React.FC<DateActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const theme = useTheme()\n const [open, setOpen] = React.useState(false)\n const [date, setDate] = React.useState<number>(transaction.date)\n\n const handleDateSelected = (date: Date) => {\n setDate(getUnixTime(date))\n }\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, date })\n setOpen(false)\n return\n }\n\n await updateTransaction({ ...transaction, date })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DATE, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <ListItem className=\"mx-txn-date-action\" disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DATE_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"calendar_month\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.date_title}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {formatDate(fromUnixTime(transaction.date), DATE_FORMATS_INTL.YEAR_MONTH_DAY)}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.date_edit_title}\n >\n <Stack alignItems=\"center\" mt={40}>\n <Calendar\n beginDate={fromUnixTime(date)}\n copy={{\n nextAria: copy.date_next_aria,\n prevAria: copy.date_prev_aria,\n today: commonCopy.date_range_picker.today,\n }}\n onDateSelected={handleDateSelected}\n selectionType={CalendarSelectionTypes.Single}\n />\n </Stack>\n </Drawer>\n </ListItem>\n )\n}\n\nexport default DateAction\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport Box from '@mui/material/Box'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Delete as DeleteOutlinedIcon } from '@mxenabled/mx-icons'\n\nimport { Dialog, useEvent, useGlobalCopyStore, useTransactionStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DeleteActionProps {\n transaction: Transaction\n}\n\nconst DeleteAction: React.FC<DeleteActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { removeTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [open, setOpen] = React.useState(false)\n const handleDelete = async () => {\n await removeTransaction(transaction.guid)\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_DELETED)\n }\n\n return (\n <Box className=\"mx-txn-delete\">\n {transaction && (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_CLICK)\n setShouldDisableDrawerScroll(true)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar variant=\"rounded\">\n <DeleteOutlinedIcon color=\"secondary\" fontSize=\"small\" />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.manual_transaction_delete_title}\n secondary={copy.manual_transaction_delete_subtitle}\n />\n <ListItemIcon>\n <DeleteOutlinedIcon />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n )}\n <Dialog\n copy={{ title: copy.manual_transaction_delete_title }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={handleDelete}\n onSecondaryAction={() => onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_CANCEL)}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <Text variant=\"subtitle1\">{copy.manual_transaction_delete_description}</Text>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(DeleteAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { ANALYTICS_EVENTS, Dialog, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DeleteLogoActionProps {\n transaction: Transaction\n}\n\nconst DeleteLogoAction: React.FC<DeleteLogoActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const theme = useTheme()\n const [open, setOpen] = React.useState(false)\n\n const handleDeleteLogo = async () => {\n await updateTransaction({ ...transaction, merchant_guid: '' })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DELETE_LOGO, {\n transaction_guid: transaction.guid,\n })\n }\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <React.Fragment>\n {transaction && (\n <ListItem className=\"mx-txn-delete-logo\" disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"delete\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary={copy.merchant_logo_title} secondary={copy.merchant_logo_desc} />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n <Dialog\n copy={{ title: copy.merchant_logo_modal_title }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={handleDeleteLogo}\n onSecondaryAction={() => onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_CANCEL)}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.merchant_logo_modal_title}\n >\n <Text variant=\"subtitle1\">{copy.merchant_logo_modal_desc}</Text>\n <Text bold={true} variant=\"subtitle1\">\n {` ${copy.merchant_logo_modal_desc_bold}`}\n </Text>\n </Dialog>\n </ListItem>\n )}\n </React.Fragment>\n )\n}\n\nexport default observer(DeleteLogoAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Switch from '@mui/material/Switch'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Dialog, useEvent, useGlobalCopyStore, useTransactionStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface ExcludeActionProps {\n transaction: Transaction\n}\n\nconst ExcludeAction: React.FC<ExcludeActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { setAlert, updateTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const theme = useTheme()\n const [open, setOpen] = React.useState(false)\n\n const isExcluded = transaction.is_hidden\n\n const toggleExclude = async () => {\n try {\n await updateTransaction({ ...transaction, is_hidden: !transaction.is_hidden })\n onEvent(\n isExcluded\n ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDDEN\n : ON_CLICK_EVENTS.ON_TRANSACTION_HIDDEN,\n )\n setAlert(isExcluded ? copy.transaction_included : copy.transaction_excluded)\n } catch {\n setAlert(isExcluded ? copy.transaction_not_included : copy.transaction_not_excluded)\n }\n }\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <React.Fragment>\n {transaction && (\n <ListItem className=\"mx-txn-hide-transaction\" disableGutters={true} disablePadding={true}>\n <ListItemButton\n aria-checked={isExcluded}\n aria-labelledby=\"hide-transaction-text\"\n onClick={() => {\n onEvent(\n isExcluded\n ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDE_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_HIDE_CLICK,\n )\n onEvent(\n isExcluded\n ? 'transaction_details_click_unhide_transaction'\n : 'transaction_details_click_hide_transaction',\n {\n transaction_guid: transaction.guid,\n },\n )\n setOpen(true)\n }}\n role=\"switch\"\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n {isExcluded ? (\n <Icon name=\"visibility_off\" sx={{ color: 'text.primary' }} />\n ) : (\n <Icon name=\"visibility\" sx={{ color: 'text.primary' }} />\n )}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n id=\"hide-transaction-text\"\n primary={copy.exclude_transaction}\n secondary={copy.excluding_transaction}\n />\n <ListItemIcon aria-hidden=\"true\">\n <Switch\n checked={isExcluded}\n slotProps={{ input: { tabIndex: -1 } }}\n sx={{ pointerEvents: 'none' }}\n tabIndex={-1}\n />\n </ListItemIcon>\n </ListItemButton>\n\n <Dialog\n copy={{\n title: isExcluded ? copy.include_transaction : copy.exclude_transaction,\n }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={toggleExclude}\n onSecondaryAction={() =>\n onEvent(\n isExcluded\n ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDE_CANCEL_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_HIDE_CANCEL_CLICK,\n )\n }\n primaryText={isExcluded ? copy.include : copy.exclude}\n secondaryText={commonCopy.cancel_button}\n >\n <Text truncate={false} variant=\"subtitle1\">\n {isExcluded ? copy.including_transaction : copy.excluding_transaction}\n </Text>\n </Dialog>\n </ListItem>\n )}\n </React.Fragment>\n )\n}\n\nexport default observer(ExcludeAction)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { MerchantLogo, P, Text } from '@mxenabled/mxui'\n\nimport type { Transaction } from '../../../../core'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\ninterface TransactionAmountHeaderProps {\n transaction: Transaction\n}\n\nconst TransactionAmountHeader: React.FC<TransactionAmountHeaderProps> = ({ transaction }) => {\n const { amount, description, isIncome, merchant_guid, payee, top_level_category_guid } =\n transaction\n\n return (\n <Stack className=\"mx-txn-amount-header\" direction=\"row\" gap={12} px={16} py={24}>\n <MerchantLogo\n categoryGuid={top_level_category_guid || ''}\n merchantGuid={merchant_guid || ''}\n size={64}\n />\n <Stack overflow=\"hidden'\">\n <Text bold={true} mb={4} truncate={true} variant=\"body1\">\n {description || payee}\n </Text>\n <P color={isIncome ? 'success.main' : 'text.primary'} truncate={true} variant=\"h1\">\n {isIncome ? '+' : ''}\n {formatCurrency(amount, '0,0.00')}\n </P>\n </Stack>\n </Stack>\n )\n}\n\nexport default TransactionAmountHeader\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport TextField from '@mui/material/TextField'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { ANALYTICS_EVENTS, Drawer, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\nimport TransactionAmountHeader from '../TransactionAmountHeader'\n\ninterface MemoActionProps {\n transaction: Transaction\n}\n\nconst MemoAction: React.FC<MemoActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n const [open, setOpen] = React.useState(false)\n const [memoText, setMemoText] = React.useState('')\n\n React.useEffect(() => {\n if (open) {\n setMemoText(transaction.memo ? transaction.memo : '')\n }\n }, [open])\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, memo: memoText })\n setOpen(false)\n return\n }\n\n await updateTransaction({ ...transaction, memo: memoText })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_MEMO, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <ListItem className=\"mx-txn-memo-action\" disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_MEMO_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"article\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.memo_title}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {transaction.memo ? transaction.memo : copy.memo_desc}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n title={copy.memo_title}\n >\n <TransactionAmountHeader transaction={transaction} />\n <TextField\n aria-label={copy.memo_desc_aria}\n focused={true}\n multiline={true}\n name=\"memo\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setMemoText(e.target.value)}\n placeholder={copy.memo_desc}\n rows={4}\n sx={{ mx: 16, width: 'calc(100% - 32px)' }}\n value={memoText}\n />\n </Drawer>\n </ListItem>\n )\n}\n\nexport default observer(MemoAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Grid from '@mui/material/Grid'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\n\nimport { CategoryIcon, Text } from '@mxenabled/mxui'\nimport {\n Cancel as CancelIcon,\n ChevronRight as ChevronRightIcon,\n Delete as DeleteOutlinedIcon,\n} from '@mxenabled/mx-icons'\n\nimport { CategorySelectorDrawer } from '../../../categories'\n\nimport { CurrencyInput, useGlobalCopyStore } from '../../../common'\nimport type { Transaction } from '../../../core'\n\nimport { useEvent } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface SplitRowProps {\n index: number\n onCategoryChanged: (index: number, categoryGuid: string) => void\n onDeleteRow: (index: number) => void\n onUpdateAmount: (index: number, amount: number) => void\n split: Transaction\n}\n\nconst SplitRow: React.FC<SplitRowProps> = ({\n index,\n onDeleteRow,\n onCategoryChanged,\n onUpdateAmount,\n split,\n}) => {\n const { onEvent } = useEvent()\n const { transactions: copy } = useGlobalCopyStore()\n\n const [amount, setAmount] = React.useState(`${split.amount}`)\n const [categorySelectorOpen, setCategorySelectorOpen] = React.useState(false)\n\n const isTopRow = index === 0\n\n const handleChangeAmount = (value: string) => {\n if (!isNaN(Number(value))) {\n setAmount(value)\n onUpdateAmount(index, Number(value))\n }\n }\n\n return (\n <Box bgcolor=\"background.paper\" className=\"mx-txn-split-manager-row\" pb={4} px={8}>\n <Grid alignItems={isTopRow ? 'center' : 'start'} container={true}>\n <Grid size={7}>\n <Stack alignItems=\"start\">\n <Button\n endIcon={<ChevronRightIcon />}\n onClick={() => setCategorySelectorOpen(true)}\n startIcon={<CategoryIcon categoryGuid={split.top_level_category_guid} />}\n sx={{ px: 12, py: 8 }}\n >\n {split.category}\n </Button>\n <Box>\n {!split.category_guid && (\n <Stack color=\"error.main\" direction=\"row\" gap={8} p={12}>\n <span aria-label=\"error\" role=\"img\">\n <CancelIcon sx={{ fontSize: 15 }} />\n </span>\n <Text variant=\"body2\">{copy.split_transaction_errors_select_category}</Text>\n </Stack>\n )}\n </Box>\n </Stack>\n </Grid>\n <Grid size={5}>\n {isTopRow ? (\n <div className=\"mx-txn-split-manager-row-top-container\">\n <Text>{formatCurrency(split.amount, '0,0.00')}</Text>\n </div>\n ) : (\n <Stack alignItems=\"start\">\n <Stack alignItems=\"start\" direction=\"row\" gap={8}>\n <CurrencyInput\n amount={amount}\n ariaLabel={copy.split_transaction_edit_split_amount}\n label={copy.split_transaction_edit_split_amount}\n minAmount={0.01}\n name=\"split-amount-input\"\n setAmount={handleChangeAmount}\n sx={{\n '.MuiOutlinedInput-input': { p: 12 },\n }}\n type=\"number\"\n />\n <IconButton\n aria-label={copy.split_transaction_delete_split_btn}\n color=\"secondary\"\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_DELETE_CLICK)\n onDeleteRow(index)\n }}\n sx={{ w: 44, h: 44 }}\n >\n <DeleteOutlinedIcon />\n </IconButton>\n </Stack>\n {!amount && (\n <Stack color=\"error.main\" direction=\"row\" gap={8} py={12}>\n <span aria-label=\"error\" role=\"img\">\n <CancelIcon sx={{ fontSize: 15 }} />\n </span>\n <Text variant=\"body2\">{copy.split_transaction_errors_enter_an_amount}</Text>\n </Stack>\n )}\n </Stack>\n )}\n </Grid>\n </Grid>\n\n <CategorySelectorDrawer\n initialSelected={split.category_guid}\n onClose={() => setCategorySelectorOpen(false)}\n onSelect={(guid: string) => {\n onCategoryChanged(index, guid)\n setCategorySelectorOpen(false)\n }}\n showDrawer={categorySelectorOpen}\n title={copy.actions_select_a_category}\n />\n </Box>\n )\n}\n\nexport default observer(SplitRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Cancel as CancelIcon } from '@mxenabled/mx-icons'\n\nimport { useEvent, useGlobalCopyStore } from '../../../common'\nimport type { Transaction } from '../../../core'\nimport { useAriaLive } from '../../../common/hooks/useAriaLive'\n\nimport SplitRow from './SplitRow'\n\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface SplitManagerProps {\n onAddSplit: () => void\n onCategoryChanged: (index: number, categoryGuid: string) => void\n onDeleteSplit: (index: number) => void\n onUpdateAmount: (index: number, amount: number) => void\n splits: Transaction[]\n transaction: Transaction\n}\n\nconst SplitManager: React.FC<SplitManagerProps> = ({\n onAddSplit,\n onCategoryChanged,\n onDeleteSplit,\n onUpdateAmount,\n splits,\n transaction,\n}) => {\n const { transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const [error, setError] = React.useState('')\n const { announce, ariaLive } = useAriaLive()\n\n React.useEffect(() => {\n if (splits.length <= 1) {\n setError(copy.split_transaction_errors_min_splits)\n announce(copy.split_transaction_errors_min_splits)\n } else if (splits[0].amount < 0) {\n const errorCopy = buildDynamicCopy(\n copy.split_transaction_errors_totals_must_equal_amount,\n formatCurrency(transaction.amount, '0,0.00'),\n ) as string\n setError(errorCopy)\n announce(errorCopy)\n } else {\n setError('')\n announce('')\n }\n }, [splits])\n\n return (\n <Box className=\"mx-txn-split-manager\">\n {ariaLive}\n {splits.map((split, index) => (\n <SplitRow\n index={index}\n key={index}\n onCategoryChanged={onCategoryChanged}\n onDeleteRow={onDeleteSplit}\n onUpdateAmount={onUpdateAmount}\n split={split}\n />\n ))}\n {error && (\n <Stack bgcolor=\"background.paper\" color=\"error.main\" direction=\"row\" gap={8} p={16}>\n {/* TODO: Move span with aria-label and role into @mxenabled/mx-icons */}\n <span aria-label=\"error\" role=\"img\">\n <CancelIcon sx={{ fontSize: 15 }} />\n </span>\n <Text variant=\"body2\">{error}</Text>\n </Stack>\n )}\n <Box p={16}>\n <Button\n aria-label={copy.split_transaction_add_split_btn}\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_ADD_CLICK)\n onAddSplit()\n }}\n >\n {copy.split_transaction_add_split_btn}\n </Button>\n </Box>\n </Box>\n )\n}\n\nexport default observer(SplitManager)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { P } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport {\n Dialog,\n Drawer,\n useCategoryStore,\n useGlobalCopyStore,\n useEvent,\n useTransactionStore,\n ANALYTICS_EVENTS,\n} from '../../../../../common'\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\nimport { SplitManager } from '../../../splitmanager'\n\nimport TransactionAmountHeader from '../TransactionAmountHeader'\nimport { useAriaLive } from '../../../../../common/hooks/useAriaLive'\nimport { buildDynamicCopy } from '../../../../../core/utils/Localization'\n\ninterface SplitActionProps {\n transaction: Transaction\n}\n\nconst SplitAction: React.FC<SplitActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { announce, ariaLive } = useAriaLive()\n const { splitTransaction, unSplitTransaction, transactionSplitting } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { categories } = useCategoryStore()\n const theme = useTheme()\n const INITIAL_SPLIT = {\n ...transaction,\n amount: transaction.amount - 1,\n guid: '',\n has_been_split: false,\n parent_guid: transaction.guid,\n }\n\n const EMPTY_SPLIT = {\n ...transaction,\n amount: 1,\n category_guid: undefined,\n category: copy.split_transaction_select_category_btn,\n guid: '',\n has_been_split: false,\n parent_guid: transaction.guid,\n top_level_category_guid: undefined,\n }\n\n const [isSplitDrawerOpen, setIsSplitDrawerOpen] = React.useState(false)\n const [isDeleteSplitOpen, setIsDeleteSplitOpen] = React.useState(false)\n const [splits, setSplits] = React.useState<Transaction[]>([])\n\n const handleAddSplit = () => {\n const updatedSplits = [...splits]\n\n updatedSplits.push({ ...EMPTY_SPLIT })\n updatedSplits[0].amount -= 1\n setSplits(updatedSplits)\n\n announce(\n buildDynamicCopy(\n copy.split_transaction_add_split_announcement,\n updatedSplits.length,\n ) as string,\n )\n }\n\n const handleDeleteSplit = (index: number) => {\n if (index > 0) {\n const row = splits[index]\n const updatedSplits = [...splits]\n\n updatedSplits.splice(index, 1)\n updatedSplits[0].amount += row.amount\n setSplits(updatedSplits)\n\n announce(\n buildDynamicCopy(copy.split_transaction_delete_split_announcement, index + 1) as string,\n )\n }\n }\n\n const handleUpdateAmount = (index: number, amount: number) => {\n const updatedSplits = [...splits]\n\n updatedSplits[index].amount = amount\n updatedSplits[0].amount =\n transaction.amount -\n updatedSplits.reduce(\n (sum: number, split: Transaction, index) => sum + (index !== 0 ? split.amount : 0),\n 0,\n )\n setSplits(updatedSplits)\n }\n\n const handleCategoryChanged = (index: number, categoryGuid: string) => {\n const updatedSplits = [...splits]\n const category = categories.find((item) => item.guid === categoryGuid)\n if (category) {\n updatedSplits[index] = {\n ...updatedSplits[index],\n category_guid: categoryGuid,\n category: category.name,\n top_level_category_guid: category.parent_guid || categoryGuid,\n }\n setSplits(updatedSplits)\n announce(\n buildDynamicCopy(\n copy.split_transaction_select_category_announcement,\n category.name,\n index + 1,\n ) as string,\n )\n }\n }\n\n const handleClick = () => {\n if (transaction.parent_guid || transaction.has_been_split) {\n setIsDeleteSplitOpen(true)\n return\n }\n\n setSplits([{ ...INITIAL_SPLIT }, { ...EMPTY_SPLIT }])\n\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_SPLIT, {\n transaction_guid: transaction.guid,\n })\n setIsSplitDrawerOpen(true)\n }\n\n const handleSave = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_SAVE_CLICK)\n await splitTransaction({ ...transaction, has_been_split: true }, splits)\n setIsSplitDrawerOpen(false)\n }\n\n const handleCancel = async () => {\n if (transactionSplitting) return\n\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_CANCEL_CLICK)\n setSplits([{ ...INITIAL_SPLIT }, { ...EMPTY_SPLIT }])\n setIsSplitDrawerOpen(false)\n }\n\n const handleUnSplit = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_UNSPLIT, {\n transaction_guid: transaction.guid,\n })\n const guid = transaction.parent_guid ?? transaction.guid\n await unSplitTransaction(guid)\n }\n\n const hasError = React.useMemo(() => {\n const hasCategoryError = splits.some((split) => !split.category_guid)\n const hasAmountError = splits.some((split) => split.amount <= 0)\n\n return hasCategoryError || hasAmountError\n }, [splits])\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <React.Fragment>\n {transaction && (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleClick}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"call_split\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n transaction.has_been_split || transaction.parent_guid\n ? copy.split_transaction_unsplit_title\n : copy.split_transaction_title\n }\n secondary={\n transaction.has_been_split || transaction.parent_guid\n ? copy.split_transaction_unsplit_subtitle\n : copy.split_transaction_desc\n }\n />\n <ListItemIcon>\n {transaction.has_been_split || transaction.parent_guid ? (\n <Icon name=\"delete\" />\n ) : (\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n )}\n </ListItemIcon>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isSplitDrawerOpen}\n isPrimaryDisabled={hasError || transactionSplitting}\n onClose={handleCancel}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.split_transaction_title}\n >\n {ariaLive}\n <TransactionAmountHeader transaction={transaction} />\n <SplitManager\n onAddSplit={handleAddSplit}\n onCategoryChanged={handleCategoryChanged}\n onDeleteSplit={handleDeleteSplit}\n onUpdateAmount={handleUpdateAmount}\n splits={splits}\n transaction={transaction}\n />\n </Drawer>\n\n <Dialog\n copy={{ title: copy.split_transaction_unsplit_title }}\n isOpen={isDeleteSplitOpen}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setIsDeleteSplitOpen(false)\n }}\n onPrimaryAction={handleUnSplit}\n onSecondaryAction={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_UNSPLIT_CANCEL)\n }}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <P variant=\"subtitle1\">\n {\n buildDynamicCopy(\n copy.split_transaction_unsplit_description,\n transaction.description,\n ) as string\n }\n </P>\n </Dialog>\n </ListItem>\n )}\n </React.Fragment>\n )\n}\n\nexport default observer(SplitAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { P, Text, TextField } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\nimport { useEvent, useTransactionStore } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\nconst Header = () => {\n const theme = useTheme()\n\n const { onEvent } = useEvent()\n const { addTag } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n\n const [isAdding, setIsAdding] = React.useState(false)\n const [tagName, setTagName] = React.useState('')\n const [tagNameError, setTagNameError] = React.useState('')\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (isAdding) {\n inputRef?.current?.focus()\n }\n }, [isAdding])\n\n const handleAdding = () => {\n onEvent(\n isAdding\n ? ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADD_CANCEL_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADD_CLICK,\n )\n if (!isAdding) {\n setTagName('')\n }\n setIsAdding(!isAdding)\n }\n\n const handleAddTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADDED)\n await addTag(tagName)\n setIsAdding(false)\n }\n\n React.useEffect(() => {\n setTagNameError(tagName.length > 40 ? copy.tags_error_name_must_be_40_chars : '')\n }, [tagName])\n\n return (\n <Box className=\"mx-txn-tag-manager-header\">\n <Stack\n alignItems=\"center\"\n bgcolor={theme.palette.background.default}\n direction=\"row\"\n justifyContent=\"space-between\"\n px={24}\n py={16}\n >\n <Text bold={true}>{copy.tags_your_tags}</Text>\n <Button\n aria-expanded={isAdding}\n aria-label={copy.tags_add_tag_btn_aria}\n onClick={handleAdding}\n >\n {copy.tags_add_tag_btn}\n </Button>\n </Stack>\n\n <Dialog\n copy={{ title: copy.tags_add_tag_btn }}\n isOpen={isAdding}\n onClose={() => setIsAdding(false)}\n onPrimaryAction={handleAddTag}\n onSecondaryAction={() => setIsAdding(false)}\n >\n <TextField\n aria-label={copy.tags_placeholder}\n name=\"add-tag\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setTagName(e.target.value)}\n placeholder={copy.tags_placeholder}\n sx={{ width: '100%' }}\n value={tagName}\n />\n <P id=\"add-tag-error\" sx={{ color: 'error.main' }} variant=\"subtitle2\">\n {tagNameError}\n </P>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(Header)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport IconButton from '@mui/material/IconButton'\nimport InputAdornment from '@mui/material/InputAdornment'\n\nimport { TextField } from '@mxenabled/mxui'\nimport { Cancel as HighlightOffIcon, Search as SearchIcon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../../common'\n\ninterface SearchBoxProps {\n onSearchValueChanged: (value: string) => void\n searchValue: string\n}\n\nconst SearchBox: React.FC<SearchBoxProps> = ({ onSearchValueChanged, searchValue }) => {\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const cancelButton = (\n <IconButton\n aria-label={copy.tags_cancel_search || 'Search'}\n onClick={() => onSearchValueChanged('')}\n >\n <HighlightOffIcon />\n </IconButton>\n )\n\n return (\n <Box className=\"mx-txn-tag-manager-search\" px={24} py={16}>\n <TextField\n aria-label={commonCopy.search_aria}\n name=\"search\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => onSearchValueChanged(e.target.value)}\n placeholder={commonCopy.search_placeholder}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\" sx={{ padding: 0 }}>\n {searchValue ? cancelButton : null}\n </InputAdornment>\n ),\n },\n }}\n // TODO: Theme needs to have the background color defaulted to paper for TextField\n sx={{ bgcolor: 'background.paper', width: '100%' }}\n value={searchValue}\n />\n </Box>\n )\n}\n\nexport default observer(SearchBox)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Checkbox from '@mui/material/Checkbox'\nimport IconButton from '@mui/material/IconButton'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { P, Text, TextField } from '@mxenabled/mxui'\nimport { Delete as DeleteOutlinedIcon, Edit as EditIcon } from '@mxenabled/mx-icons'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\nimport type { Tag } from '../../../core'\n\nimport { useEvent, useTransactionStore } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\ninterface TagRowProps {\n tag: Tag\n selectedTags: string[]\n onTagChecked: (guid: string) => void\n}\n\nconst TagRow: React.FC<TagRowProps> = ({ onTagChecked, selectedTags, tag }) => {\n const { onEvent } = useEvent()\n const { removeTag, updateTag } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [editOpen, setEditOpen] = React.useState(false)\n const [deleteOpen, setDeleteOpen] = React.useState(false)\n\n const [tagName, setTagName] = React.useState('')\n const [tagNameError, setTagNameError] = React.useState('')\n\n const handleSaveTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_EDIT_SAVED)\n if (tag) {\n await updateTag({ ...tag, name: tagName })\n }\n setEditOpen(false)\n }\n\n const handleDeleteTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETED)\n await removeTag(tag.guid)\n setDeleteOpen(false)\n }\n\n React.useEffect(() => {\n setTagNameError(tagName.length > 40 ? copy.tags_error_name_must_be_40_chars : '')\n }, [tagName])\n\n const handleEditClick = () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_EDIT_CLICK)\n setTagName(tag.name)\n setEditOpen(true)\n }\n\n const handleDeleteClick = () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETE_CLICK)\n setDeleteOpen(true)\n }\n\n return (\n <ListItem\n className=\"mx-txn-transaction-manager-row\"\n disableGutters={true}\n disablePadding={true}\n secondaryAction={\n !tag.is_default_tag && (\n <Stack direction=\"row\">\n <IconButton\n aria-label={`Edit ${tag.name} tag`}\n color=\"secondary\"\n onClick={handleEditClick}\n >\n <EditIcon color=\"secondary\" />\n </IconButton>\n <IconButton\n aria-label={`Delete ${tag.name} tag`}\n color=\"secondary\"\n onClick={handleDeleteClick}\n >\n <DeleteOutlinedIcon color=\"secondary\" />\n </IconButton>\n </Stack>\n )\n }\n >\n <ListItemButton\n aria-checked={selectedTags.includes(tag.guid)}\n onClick={() => onTagChecked(tag.guid)}\n role=\"checkbox\"\n >\n <ListItemIcon sx={{ ml: 0 }}>\n <Checkbox\n aria-hidden={true}\n checked={selectedTags.includes(tag.guid)}\n edge=\"start\"\n tabIndex={-1}\n />\n </ListItemIcon>\n <ListItemText>{tag.name}</ListItemText>\n </ListItemButton>\n\n <Dialog\n copy={{ title: 'Update tag name' }} // TODO: Need copy\n isOpen={editOpen}\n onClose={() => setEditOpen(false)}\n onPrimaryAction={handleSaveTag}\n onSecondaryAction={() => setEditOpen(false)}\n >\n <TextField\n aria-describedby={tagNameError ? 'update-tag-error' : undefined}\n aria-label={copy.tags_update_the_tag_name}\n name=\"update-tag\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setTagName(e.target.value)}\n placeholder=\"Tag name\" // TODO: Need copy\n sx={{ width: '100%' }}\n value={tagName}\n />\n <P id=\"update-tag-error\" sx={{ color: 'error.main' }} variant=\"subtitle2\">\n {tagNameError}\n </P>\n </Dialog>\n\n <Dialog\n copy={{ title: copy.tags_delete_title }}\n isOpen={deleteOpen}\n onClose={() => setDeleteOpen(false)}\n onPrimaryAction={handleDeleteTag}\n onSecondaryAction={() =>\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETE_CANCEL_CLICK)\n }\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <Text truncate={false}>{copy.tags_deleting_this_tag_will_remove_it}</Text>\n </Dialog>\n </ListItem>\n )\n}\n\nexport default observer(TagRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Paper from '@mui/material/Paper'\n\nimport { useTransactionStore } from '../../../common'\n\nimport Header from './Header'\nimport SearchBox from './SearchBox'\nimport TagRow from './TagRow'\n\ninterface TagManagerProps {\n selectedTags: string[]\n onTagChecked: (guid: string) => void\n}\n\nconst TagManager: React.FC<TagManagerProps> = ({ selectedTags, onTagChecked }) => {\n const { tags } = useTransactionStore()\n\n const [searchValue, setSearchValue] = React.useState('')\n\n const filteredTags = tags.filter((tag) =>\n tag.name.toLowerCase().includes(searchValue.toLowerCase()),\n )\n\n return (\n <div className=\"mx-txn-tag-manager\">\n <SearchBox\n onSearchValueChanged={(value) => setSearchValue(value)}\n searchValue={searchValue}\n />\n\n <Header />\n\n <Paper sx={{ boxShadow: 'none' }}>\n <List>\n {filteredTags.map((tag) => (\n <React.Fragment key={tag.guid}>\n <TagRow onTagChecked={onTagChecked} selectedTags={selectedTags} tag={tag} />\n <Divider sx={{ ml: 24 }} />\n </React.Fragment>\n ))}\n </List>\n </Paper>\n </div>\n )\n}\n\nexport default observer(TagManager)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { ANALYTICS_EVENTS, Drawer, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { TagManager } from '../../../tagmanager'\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface TagsActionProps {\n transaction: Transaction\n}\n\nconst TagsAction: React.FC<TagsActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { tags, updateTaggings, updateTransaction } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n\n const theme = useTheme()\n\n const [open, setOpen] = React.useState(false)\n const [selectedTags, setSelectedTags] = React.useState<string[]>(transaction.tags)\n\n React.useEffect(() => {\n setSelectedTags(transaction.tags)\n }, [open, transaction])\n\n const handleTagChecked = (guid: string) => {\n const tags = [...selectedTags]\n\n const index = selectedTags.indexOf(guid)\n if (index >= 0) {\n tags.splice(index, 1)\n } else {\n tags.push(guid)\n }\n setSelectedTags(tags)\n }\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, tags: selectedTags })\n setOpen(false)\n return\n }\n\n await updateTaggings(selectedTags, transaction.guid)\n await updateTransaction({ ...transaction, tags: selectedTags })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_TAGS, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n const tagNames = React.useMemo(\n () =>\n transaction.tags.map(\n (tagGuid, index, selectedTags) =>\n `${tags.find((item) => item.guid === tagGuid)?.name}${\n index < selectedTags.length - 1 ? ' / ' : ''\n }`,\n ),\n [tags, transaction],\n )\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"local_offer\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.tags_title}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {transaction.tags?.length > 0 ? tagNames : copy.tags_desc}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.tags_title}\n >\n <TagManager onTagChecked={handleTagChecked} selectedTags={selectedTags} />\n </Drawer>\n </ListItem>\n )\n}\n\nexport default observer(TagsAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport FormGroup from '@mui/material/FormGroup'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport TextField from '@mui/material/TextField'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport type { Transaction } from '../../../../core'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\nimport { useAriaLive } from '../../../../common/hooks/useAriaLive'\nimport { ON_CLICK_EVENTS } from '../../../constants/OnClickEvents'\n\ninterface DescriptionProps {\n transaction: Transaction\n viewOnly?: boolean\n}\n\nconst Description: React.FC<DescriptionProps> = ({ transaction, viewOnly = false }) => {\n const { updateTransaction } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const { announce, ariaLive } = useAriaLive()\n\n const [isEditing, setIsEditing] = React.useState(false)\n const [description, setDescription] = React.useState('')\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (isEditing) {\n setDescription(transaction.description)\n inputRef?.current?.focus()\n }\n }, [isEditing])\n\n const handleEdit = () => {\n setIsEditing(true)\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DESCRIPTION_EDIT_CLICK)\n setTimeout(() => document.getElementById(`transaction-description-input`)?.focus(), 0)\n }\n\n const handleSave = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DESCRIPTION, {\n transaction_guid: transaction.guid,\n })\n await updateTransaction({ ...transaction, description })\n setIsEditing(false)\n announce(`${copy.payee_title}: ${description}`)\n setTimeout(() => document.getElementById(`transaction-description-edit-button`)?.focus(), 0)\n }\n\n return (\n <Box className=\"mx-txn-transaction-description\">\n {ariaLive}\n {isEditing ? (\n <FormGroup row={true}>\n <TextField\n aria-label={copy.payee_title}\n id={`transaction-description-input`}\n label={copy.payee_title}\n name={copy.payee_title}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setDescription(e.target.value)}\n ref={inputRef}\n slotProps={{ htmlInput: { maxLength: 140 } }}\n sx={{\n backgroundColor: 'background.paper',\n '.MuiOutlinedInput-root': { borderTopRightRadius: 0, borderBottomRightRadius: 0 },\n '.MuiOutlinedInput-input': { p: 11 },\n width: 250,\n }}\n value={description}\n />\n <Button\n disabled={!description}\n onClick={handleSave}\n sx={{\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }}\n variant=\"outlined\"\n >\n {commonCopy.save_button}\n </Button>\n </FormGroup>\n ) : (\n <Stack alignItems=\"center\" direction=\"row\" gap={4} sx={{ minHeight: 44 }}>\n <Text bold={true}>{transaction.description}</Text>\n {!viewOnly && (\n <IconButton\n aria-label={copy.payee_edit}\n id={`transaction-description-edit-button`}\n onClick={handleEdit}\n sx={{ color: 'action.active' }}\n >\n <Icon name=\"create\" size={22} />\n </IconButton>\n )}\n </Stack>\n )}\n </Box>\n )\n}\n\nexport default observer(Description)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ToggleButton from '@mui/material/ToggleButton'\nimport { alpha, useTheme } from '@mui/material/styles'\n\nimport { Flag as FlagOutlinedIcon } from '@mxenabled/mx-icons'\n\nimport type { Transaction } from '../../../../core'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\n\ninterface FlagTransactionProps {\n transaction: Transaction\n}\n\nconst FlagTransaction: React.FC<FlagTransactionProps> = ({ transaction }) => {\n const { updateTransaction } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const theme = useTheme()\n const isDarkMode = theme.palette.mode === 'dark'\n\n const handleFlagTransaction = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_FLAG, { transaction_guid: transaction.guid })\n await updateTransaction({ ...transaction, is_flagged: !transaction.is_flagged })\n }\n\n return (\n <div className=\"mx-txn-transaction-flag\">\n <ToggleButton\n aria-label={copy.flag_btn_aria}\n aria-pressed={transaction.is_flagged}\n color={isDarkMode ? 'primary' : 'warning'}\n onClick={handleFlagTransaction}\n selected={transaction.is_flagged}\n sx={{\n borderRadius: 6,\n color: isDarkMode ? 'common.white' : 'secondary.main',\n '&.Mui-selected': {\n color: isDarkMode ? 'primary.main' : 'common.white',\n backgroundColor: isDarkMode ? alpha(theme.palette.primary.main, 0.25) : 'warning.dark',\n ':hover': {\n color: isDarkMode ? 'primary.main' : 'common.white',\n backgroundColor: isDarkMode ? alpha(theme.palette.primary.main, 0.2) : 'warning.main',\n },\n },\n ':hover': {\n color: isDarkMode ? 'common.white' : 'warning.contrastText',\n backgroundColor: isDarkMode ? alpha(theme.palette.primary.main, 0.2) : 'warning.light',\n },\n }}\n value=\"flagged\"\n >\n <FlagOutlinedIcon color=\"inherit\" />\n </ToggleButton>\n </div>\n )\n}\nexport default observer(FlagTransaction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport Avatar from '@mui/material/Avatar'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { CategoryIcon, CategoryIconVariants, Icon, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useTransactionStore } from '../../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../../core/constants'\nimport { type Transaction } from '../../../../core'\n\ninterface TransactionDetailsViewProps {\n transaction: Transaction\n}\n\nconst renderItem = (\n icon: React.ReactNode,\n primary: string,\n secondary: React.ReactNode,\n show: boolean = true,\n dividerVariant: 'inset' | 'fullWidth' = 'inset',\n) => {\n if (!show) return null\n return (\n <React.Fragment>\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'neutral.light' }} variant=\"rounded\">\n {icon}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={primary}\n secondary={secondary}\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n </ListItem>\n <Divider variant={dividerVariant} />\n </React.Fragment>\n )\n}\n\nconst TransactionDetailsView = ({ transaction }: TransactionDetailsViewProps) => {\n const { transactions: copy } = useGlobalCopyStore()\n const { tags } = useTransactionStore()\n\n const tagNames = React.useMemo(() => {\n const tagMap = new Map(tags.map((tag) => [tag.guid, tag.name]))\n\n return transaction.tags\n .map((tagGuid) => tagMap.get(tagGuid))\n .filter(Boolean)\n .join(' / ')\n }, [tags, transaction.tags])\n\n return (\n <List sx={{ '& .MuiListItem-root': { px: 24, py: 12 } }}>\n {renderItem(\n <CategoryIcon\n categoryGuid={transaction.top_level_category_guid}\n size={24}\n sx={{ color: 'text.primary' }}\n variant={CategoryIconVariants.Transparent}\n />,\n copy.category_title,\n <Text bold={true} variant=\"body1\">\n {transaction.category ?? copy.actions_select_a_category}\n </Text>,\n )}\n\n {renderItem(\n <Icon name=\"calendar_month\" sx={{ color: 'text.primary' }} />,\n copy.date_title,\n <Text bold={true} variant=\"body1\">\n {formatDate(fromUnixTime(transaction.date), DATE_FORMATS_INTL.YEAR_MONTH_DAY)}\n </Text>,\n )}\n\n {renderItem(\n <Icon name=\"article\" sx={{ color: 'text.primary' }} />,\n copy.memo_title,\n <Text bold={true} variant=\"body1\">\n {transaction.memo ?? copy.memo_desc}\n </Text>,\n Boolean(transaction.memo),\n transaction.tags?.length > 0 ? 'inset' : 'fullWidth',\n )}\n\n {renderItem(\n <Icon name=\"local_offer\" sx={{ color: 'text.primary' }} />,\n copy.tags_title,\n <Text bold={true} variant=\"body1\">\n {transaction.tags?.length ? tagNames : copy.tags_desc}\n </Text>,\n Boolean(transaction.tags?.length),\n 'fullWidth',\n )}\n </List>\n )\n}\n\nexport default observer(TransactionDetailsView)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { useTheme } from '@mui/material/styles'\nimport type { Theme } from '@mui/material/styles'\n\nimport { type BarSeriesType, BarChart } from '@mui/x-charts'\n\nimport type { BarDataProps } from '../../insights/types/Charts/BarChart'\n\nexport interface TinyBarChartProps {\n data: BarDataProps[]\n color: (theme: Theme) => string | undefined\n width?: number\n height?: number\n}\n\nexport const TinyBarChart: React.FC<TinyBarChartProps> = ({\n data,\n color,\n width = 85,\n height = 65,\n}) => {\n const theme = useTheme()\n\n const chartData = {\n series: [\n {\n data: data.map(({ value }) => value),\n type: 'bar',\n },\n ] as BarSeriesType[],\n xAxis: [\n {\n data: data.map(({ label }) => label),\n scaleType: 'band' as const,\n categoryGapRatio: 0.3,\n },\n ],\n }\n\n const colorRange = data.map((_, index) =>\n index === data.length - 1 ? color(theme) : `${color(theme)}80`,\n )\n\n const createRoundedRectPath = (w: number, h: number) => {\n if (w <= 0 || h <= 0) return ''\n const r = Math.min(6, w / 2, h / 2)\n return `M${r},0 L${w - r},0 Q${w},0 ${w},${r} L${w},${h} L0,${h} L0,${r} Q0,0 ${r},0 Z`\n }\n\n return (\n <Stack\n sx={{\n width,\n height,\n }}\n >\n <BarChart\n axisHighlight={{\n x: 'none',\n y: 'none',\n }}\n height={height}\n margin={{\n bottom: -10,\n left: 0,\n right: 0,\n top: 10,\n }}\n series={chartData.series}\n slots={{\n bar: ({ ownerState, ...props }) => {\n const { ariaLabel } = data[ownerState.dataIndex]\n return (\n <g aria-label={ariaLabel}>\n <path\n d={createRoundedRectPath(props.width, props.height)}\n fill={colorRange[ownerState.dataIndex]}\n transform={`translate(${props.x}, ${props.y})`}\n />\n </g>\n )\n },\n axisTickLabel: ({ text, ...restProps }) => {\n const label = data[data.length - 1]?.label\n return (\n <text\n {...restProps}\n style={\n {\n ...restProps.style,\n fontSize: 6.75,\n lineHeight: '9px',\n fontWeight: label === text ? 'bold' : 400,\n } as React.CSSProperties\n }\n >\n {text}\n </text>\n )\n },\n }}\n sx={{\n '& .MuiChartsAxis-bottom .MuiChartsAxis-tickContainer:first-of-type .MuiChartsAxis-tick':\n {\n display: 'none',\n },\n }}\n width={width}\n xAxis={chartData.xAxis}\n yAxis={[{ width: 0, position: 'none' }]}\n />\n </Stack>\n )\n}\n","import type { Theme } from '@mui/material/styles'\n\nimport { TinyBarChart } from '../../../common/components/TinyBarChart'\nimport type { CommonCopy } from '../../../core/types/localization/CommonCopy'\nimport { type Beat } from '../../../insights/types/CommonBeat'\n\nimport { buildChartData, buildDataSeries, type ChartDataProps } from '../../utils/Transactions'\n\nexport const BeatTemplates = {\n BILL_AMOUNT_NOT_STANDARD: 'BillAmountNotStandard',\n}\n\nexport const getEmbeddedInstanceSlotByBeatTemplates = (copy: CommonCopy, beat?: Beat) => {\n if (beat) {\n switch (beat.template) {\n case BeatTemplates.BILL_AMOUNT_NOT_STANDARD: {\n const dataSeries = beat.data_series\n ? (buildDataSeries(beat.data_series) as ChartDataProps[])\n : []\n const chartData = buildChartData(dataSeries, beat.payload?.merchant_name)\n\n return {\n instanceSlot: (\n <TinyBarChart\n color={(theme: Theme) => {\n return theme.palette.categories.billsUtilities\n }}\n data={chartData.slice(-3)}\n />\n ),\n dataSeries,\n chartData,\n callToAction: copy.view_history,\n }\n }\n default: {\n return null\n }\n }\n }\n return null\n}\n","import React, { useMemo } from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Paper from '@mui/material/Paper'\nimport Snackbar from '@mui/material/Snackbar'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { MerchantLogo, P, Text } from '@mxenabled/mxui'\n\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { isBefore } from 'date-fns/isBefore'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n useCategoryStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n useUserStore,\n} from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { Transaction } from '../../../core'\nimport { isFeatureEnabled } from '../../../core/utils/UserUtils'\nimport { ChartTransactionWithDrillDown, EmbeddedCard } from '../../../insights'\n\nimport {\n BottomActions,\n DEFAULT_BOTTOM_ACTIONS,\n DEFAULT_TOP_ACTIONS,\n TopActions,\n} from '../../constants/Actions'\n\nimport {\n AddMerchantBudgetAction,\n CategoryAction,\n DateAction,\n DeleteAction,\n DeleteLogoAction,\n ExcludeAction,\n MemoAction,\n SplitAction,\n TagsAction,\n} from './transactiondetails/actions'\nimport Description from './transactiondetails/Description'\nimport FlagTransaction from './transactiondetails/FlagTransaction'\nimport TransactionDetailsView from './transactiondetails/TransactionDetailsView'\nimport { getEmbeddedInstanceSlotByBeatTemplates } from './getEmbeddedInstanceSlotByBeatTemplates'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\nexport interface TransactionDetailsProps {\n bottomActions?: BottomActions[]\n canFlagTransaction?: boolean\n topActions?: TopActions[]\n transaction: Transaction\n}\n\nconst TransactionDetails: React.FC<TransactionDetailsProps> = ({\n bottomActions = DEFAULT_BOTTOM_ACTIONS,\n canFlagTransaction = true,\n topActions = DEFAULT_TOP_ACTIONS,\n transaction,\n}) => {\n const { onEvent } = useEvent()\n const { isCopyLoaded } = useGlobalUiStore()\n const { userFeatures } = useUserStore()\n const { accounts: copy, common: commonCopy, insights_feed: insightsCopy } = useGlobalCopyStore()\n\n const { detailedCategories } = useCategoryStore()\n const {\n alert,\n associatedBeats,\n detailedTransactions,\n cachedStartDate,\n loadEmbeddedInstanceTransactions,\n setAlert,\n } = useTransactionStore()\n\n const [showTranscationDrilldownDrawer, setShowTransactionDrillDownDrawer] = React.useState(false)\n\n const [isLoading, setIsLoading] = React.useState(false)\n const [closeTipSection, setCloseTipSection] = React.useState(false)\n const theme = useTheme()\n\n const showFullNumber = transaction?.number && transaction.number.length > 4\n\n const beat = React.useMemo(() => {\n return associatedBeats.find((beat) => beat.associated_transaction_guid === transaction.guid)\n }, [associatedBeats, transaction])\n\n const embeddedData = getEmbeddedInstanceSlotByBeatTemplates(commonCopy, beat)\n\n const [selectedTabIndex, setSelectedTabIndex] = React.useState(\n embeddedData ? embeddedData.dataSeries.length - 1 : 0,\n )\n\n React.useEffect(\n () =>\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_VIEW, { transaction_guid: transaction.guid }),\n [],\n )\n\n React.useEffect(() => {\n if (!embeddedData || embeddedData.dataSeries.length === 0) return\n\n const { date: selectedSeriesItemDate } = embeddedData.dataSeries[selectedTabIndex]\n\n const start = startOfMonth(selectedSeriesItemDate)\n\n if (isBefore(start, cachedStartDate)) {\n setIsLoading(true)\n loadEmbeddedInstanceTransactions(start).finally(() => {\n setIsLoading(false)\n })\n }\n }, [selectedTabIndex, embeddedData, cachedStartDate])\n\n //if merchant_guid is null then no need to show the MerchantBudget action.\n const updatedBottomActions =\n bottomActions.includes(BottomActions.MerchantBudget) && !transaction?.merchant_guid\n ? bottomActions.filter((action) => action !== BottomActions.MerchantBudget)\n : bottomActions\n\n const embeddedCardDataCategory = useMemo(() => {\n if (embeddedData) {\n const category = detailedCategories.find(\n (cat) => cat.guid === transaction.top_level_category_guid,\n )\n const mean = beat?.payload?.average_amount ?? 0\n const currentAmount = transaction.amount\n\n let changetype = insightsCopy.general.increased_text\n if (currentAmount - mean < 0) {\n changetype = insightsCopy.general.decreased_text\n }\n const percentageAmount =\n mean === 0 ? 0 : Math.round((Math.abs(currentAmount - mean) / mean) * 100)\n\n return { category, percentageAmount, changetype }\n }\n return null\n }, [embeddedData, detailedCategories])\n\n const filteredTransactions = useMemo(() => {\n if (!embeddedData?.dataSeries?.length) {\n return []\n }\n\n const { guid: selectedSeriesItemGuid, date: selectedSeriesItemDate } =\n embeddedData.dataSeries[selectedTabIndex]\n\n const start = startOfMonth(selectedSeriesItemDate)\n const end = endOfMonth(selectedSeriesItemDate)\n\n return detailedTransactions.filter((t) => {\n return (\n t.date >= getUnixTime(start) &&\n t.date <= getUnixTime(end) &&\n t.guid === selectedSeriesItemGuid\n )\n })\n }, [selectedTabIndex, embeddedData, detailedTransactions, isLoading])\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n const shouldShowViewOnlyMode = isFeatureEnabled(userFeatures, 'MX_TXN_DETAILS_VIEW_ONLY')\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <Box className=\"mx-txn-transaction-details\" width=\"100%\">\n {transaction && (\n <Stack>\n <Stack gap={12} p={24}>\n <Paper elevation={2} sx={{ width: 64 }}>\n <MerchantLogo\n categoryGuid={transaction.top_level_category_guid || ''}\n merchantGuid={transaction.merchant_guid || ''}\n size={64}\n />\n </Paper>\n\n <Description transaction={transaction} viewOnly={shouldShowViewOnlyMode} />\n\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ minHeight: 44 }}>\n <P color={transaction.isIncome ? 'success.main' : 'text.primary'} variant=\"h1\">\n {transaction.isIncome ? '+' : ''}\n {formatCurrency(transaction.amount, '0,0.00')}\n </P>\n {!shouldShowViewOnlyMode && canFlagTransaction && (\n <FlagTransaction transaction={transaction} />\n )}\n </Stack>\n\n {embeddedData?.instanceSlot && (\n <EmbeddedCard\n callToAction={embeddedData.callToAction}\n description={\n buildDynamicCopy(\n insightsCopy.general.embedded_description,\n embeddedCardDataCategory!.changetype,\n <strong>{embeddedCardDataCategory!.percentageAmount}</strong>,\n ) as string\n }\n instanceSlot={embeddedData.instanceSlot}\n onCtaClick={() => {\n setShowTransactionDrillDownDrawer(true)\n }}\n title={beat!.html_micro_title!}\n />\n )}\n <Stack sx={{ bgcolor: bgColor, borderRadius: '4px', gap: 4, p: 8 }}>\n <Text bold={true}>\n {`${transaction.account}\n ${\n showFullNumber\n ? transaction.number\n : '\\u2022'.repeat(4).concat(transaction.number ?? '')\n }`}\n </Text>\n <Text bold={true} truncate={true} variant=\"tiny\">\n {transaction.feed_description}\n </Text>\n </Stack>\n </Stack>\n\n <Paper square={true} sx={{ boxShadow: 'none' }}>\n {shouldShowViewOnlyMode ? (\n <TransactionDetailsView transaction={transaction} />\n ) : (\n <List>\n {topActions.map((action, index) => (\n <React.Fragment key={action}>\n {action === TopActions.Category && <CategoryAction transaction={transaction} />}\n {action === TopActions.Date && <DateAction transaction={transaction} />}\n {action === TopActions.Memo && <MemoAction transaction={transaction} />}\n {action === TopActions.Tags && <TagsAction transaction={transaction} />}\n <Divider\n component=\"li\"\n variant={index < topActions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n </List>\n )}\n </Paper>\n\n {!shouldShowViewOnlyMode && updatedBottomActions.length > 0 && (\n <React.Fragment>\n <Text bold={true} mb={8} ml={26} mt={16} variant=\"body1\">\n {copy.actions}\n </Text>\n\n <Paper square={true} sx={{ boxShadow: 'none' }}>\n <List>\n {updatedBottomActions.map((action, index) => (\n <React.Fragment key={action}>\n {action === BottomActions.MerchantBudget && (\n <AddMerchantBudgetAction transaction={transaction} />\n )}\n {action === BottomActions.SplitTransaction && (\n <SplitAction transaction={transaction} />\n )}\n {action === BottomActions.HideTransaction && (\n <ExcludeAction transaction={transaction} />\n )}\n {action === BottomActions.MerchantLogo && (\n <DeleteLogoAction transaction={transaction} />\n )}\n <Divider\n component=\"li\"\n variant={index < updatedBottomActions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n\n {/* \n Show DeleteAction only if:\n - The transaction is manual\n - The transaction is NOT a parent transaction (no parent_guid)\n - The transaction has NOT been split (has_been_split is false)\n \n This ensures delete is hidden for parent or split transactions.\n */}\n {transaction.is_manual &&\n !transaction.parent_guid &&\n !transaction.has_been_split && <DeleteAction transaction={transaction} />}\n </List>\n </Paper>\n </React.Fragment>\n )}\n </Stack>\n )}\n {beat && embeddedData && (\n <ChartTransactionWithDrillDown\n ariaLabel={formatDate(\n embeddedData?.dataSeries[selectedTabIndex]?.date,\n DATE_FORMATS_INTL.MONTH,\n )}\n barChartProps={{\n amounts: {\n average: beat.payload.average_amount,\n formattedAverage: formatCurrency(beat.payload.average_amount, '0,0'),\n },\n color: embeddedCardDataCategory!.category?.color || '',\n data: embeddedData.chartData,\n margin: { bottom: 10, left: 24, right: 24, top: 20 },\n monthlyAmountLabel: insightsCopy.general.monthly_amount,\n onBarClick: (index) => {\n setSelectedTabIndex(index)\n },\n trendAmountLabel: insightsCopy.general.trend,\n legendPosition: 'top',\n }}\n beat={{\n heading: beat.html_title,\n subHeading: {\n category_guid: transaction.category_guid ?? '',\n merchant_guid: transaction.merchant_guid ?? '',\n description: transaction.description ?? '',\n },\n }}\n data={embeddedData.chartData}\n defaultSelectedIndex={selectedTabIndex}\n icon={\n <MerchantLogo\n alt={transaction.description ?? ''}\n categoryGuid={transaction.category_guid ?? ''}\n merchantGuid={transaction.merchant_guid ?? ''}\n size={16}\n />\n }\n isOpen={showTranscationDrilldownDrawer}\n onClose={() => {\n setShowTransactionDrillDownDrawer(false)\n setSelectedTabIndex(embeddedData!.dataSeries.length - 1)\n }}\n onTabChange={(index: number) => {\n setSelectedTabIndex(index)\n }}\n tipSection={\n !closeTipSection\n ? {\n message: buildDynamicCopy(\n insightsCopy.general.tip_section_message,\n <strong>{insightsCopy.general.tip_section_title}</strong>,\n <strong>{beat.primary_transaction?.description}</strong>,\n ) as string,\n onDismiss: () => setCloseTipSection(true),\n }\n : undefined\n }\n title={insightsCopy.general.transaction_history_title}\n transactionListProps={{\n showLoader: isLoading,\n showInsights: true,\n transaction: filteredTransactions,\n }}\n />\n )}\n <Snackbar\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n autoHideDuration={3500}\n onClose={() => setAlert('')}\n open={Boolean(alert)}\n >\n <Alert closeText=\"\" onClose={() => setAlert('')} severity=\"success\" variant=\"filled\">\n {alert}\n </Alert>\n </Snackbar>\n </Box>\n )\n}\n\nexport default observer(TransactionDetails)\n"],"names":["TopActions","BottomActions","DEFAULT_TOP_ACTIONS","DEFAULT_BOTTOM_ACTIONS","BudgetDetailsTopSection","startDate","onViewHistory","totalTransaction","amount","spentPercentage","remainingAmount","iconColor","icon","budgetsCopy","useGlobalCopyStore","jsx","React","jsxs","Box","Stack","P","fromTimestampToMonthYear","Button","ChevronRight","Text","StatusIndicator","H2","formatCurrency","buildDynamicCopy","MerchantBudgetDetailsDrawer","merchantBudget","transaction","onClose","isOpen","setCurrencyDialogAction","renderingToast","commonCopy","sortedTransactions","useTransactionStore","transactionTotal","acc","t","getRemainingAmountSpentPercentage","Drawer","CurrencyDialogAction","MerchantLogo","TransactionList","MerchantBudgetDetailsDrawer$1","observer","AddMerchantBudgetAction","currencyDialogAction","setAmount","isError","setIsError","inProgressRef","lastActionType","setLastActionType","theme","useTheme","addMerchantBudget","updateMerchantBudget","deleteMerchantBudget","getMerchantBudgetByMerchantGuid","alert","setAlert","useBudgetsStore","setFilter","accounts","useAccountStore","bgColor","announce","ariaLive","useAriaLive","merchantBudgetDetailsDrawerOpen","setMerchantBudgetDetailsDrawerOpen","existingMerchantBudget","handleModalClose","handleClick","actionDetails","handlePrimaryAction","apiTrigger","successAlertMessage","errorAlertMessage","isSuccess","alertMessage","dateRange","startOfMonth","endOfMonth","account","trn","snackBar","Toast","ListItem","ListItemButton","ListItemAvatar","Avatar","Icon","ListItemText","ListItemIcon","action","CurrencyDialog","CategoryAction","addOrUpdateTransactionRule","updateTransaction","categories","useCategoryStore","onEvent","useEvent","setShouldDisableDrawerScroll","updateManualTransaction","useTransactionsUiStore","copy","open","setOpen","selectedGuid","setSelectedGuid","handleCategoryChange","applyToAll","ANALYTICS_EVENTS","handleSelected","guid","category","c","handleCloseDrawer","item","ON_CLICK_EVENTS","CategoryIcon","CategoryIconVariants","CategorySelectorDrawer","Dialog","DateAction","date","setDate","handleDateSelected","getUnixTime","handleSave","fromUnixTime","DATE_FORMATS_INTL","Calendar","CalendarSelectionTypes","DeleteAction","removeTransaction","handleDelete","DeleteOutlinedIcon","DeleteAction$1","DeleteLogoAction","handleDeleteLogo","DeleteLogoAction$1","ExcludeAction","isExcluded","toggleExclude","Switch","ExcludeAction$1","TransactionAmountHeader","description","isIncome","merchant_guid","payee","top_level_category_guid","MemoAction","memoText","setMemoText","TextField","e","MemoAction$1","SplitRow","index","onDeleteRow","onCategoryChanged","onUpdateAmount","split","categorySelectorOpen","setCategorySelectorOpen","isTopRow","handleChangeAmount","value","Grid","ChevronRightIcon","CancelIcon","CurrencyInput","IconButton","SplitRow$1","SplitManager","onAddSplit","onDeleteSplit","splits","error","setError","errorCopy","SplitManager$1","SplitAction","splitTransaction","unSplitTransaction","transactionSplitting","INITIAL_SPLIT","EMPTY_SPLIT","isSplitDrawerOpen","setIsSplitDrawerOpen","isDeleteSplitOpen","setIsDeleteSplitOpen","setSplits","handleAddSplit","updatedSplits","handleDeleteSplit","row","handleUpdateAmount","sum","handleCategoryChanged","categoryGuid","handleCancel","handleUnSplit","hasError","hasCategoryError","hasAmountError","SplitAction$1","Header","addTag","isAdding","setIsAdding","tagName","setTagName","tagNameError","setTagNameError","inputRef","handleAdding","handleAddTag","Header$1","SearchBox","onSearchValueChanged","searchValue","cancelButton","HighlightOffIcon","InputAdornment","SearchIcon","SearchBox$1","TagRow","onTagChecked","selectedTags","tag","removeTag","updateTag","editOpen","setEditOpen","deleteOpen","setDeleteOpen","handleSaveTag","handleDeleteTag","handleEditClick","handleDeleteClick","EditIcon","Checkbox","TagRow$1","TagManager","tags","setSearchValue","filteredTags","Paper","List","Divider","TagManager$1","TagsAction","updateTaggings","setSelectedTags","handleTagChecked","tagNames","tagGuid","TagsAction$1","Description","viewOnly","isEditing","setIsEditing","setDescription","handleEdit","FormGroup","Description$1","FlagTransaction","isDarkMode","handleFlagTransaction","ToggleButton","alpha","FlagOutlinedIcon","FlagTransaction$1","renderItem","primary","secondary","show","dividerVariant","TransactionDetailsView","tagMap","formatDate","TransactionDetailsView$1","TinyBarChart","data","color","width","height","chartData","label","colorRange","_","createRoundedRectPath","w","h","r","BarChart","ownerState","props","ariaLabel","text","restProps","BeatTemplates","getEmbeddedInstanceSlotByBeatTemplates","beat","dataSeries","buildDataSeries","buildChartData","TransactionDetails","bottomActions","canFlagTransaction","topActions","isCopyLoaded","useGlobalUiStore","userFeatures","useUserStore","insightsCopy","detailedCategories","associatedBeats","detailedTransactions","cachedStartDate","loadEmbeddedInstanceTransactions","showTranscationDrilldownDrawer","setShowTransactionDrillDownDrawer","isLoading","setIsLoading","closeTipSection","setCloseTipSection","showFullNumber","embeddedData","selectedTabIndex","setSelectedTabIndex","selectedSeriesItemDate","start","isBefore","updatedBottomActions","embeddedCardDataCategory","useMemo","cat","mean","currentAmount","changetype","percentageAmount","filteredTransactions","selectedSeriesItemGuid","end","Loader","shouldShowViewOnlyMode","isFeatureEnabled","EmbeddedCard","ChartTransactionWithDrillDown","Snackbar","Alert","TransactionDetails$1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAKA,uBAAAA,OACVA,EAAAA,EAAA,WAAA,CAAA,IAAA,YACAA,EAAAA,EAAA,OAAA,CAAA,IAAA,QACAA,EAAAA,EAAA,OAAA,CAAA,IAAA,QACAA,EAAAA,EAAA,OAAA,CAAA,IAAA,QAJUA,IAAAA,MAAA,CAAA,CAAA,GAOAC,uBAAAA,OACVA,EAAAA,EAAA,iBAAA,CAAA,IAAA,kBACAA,EAAAA,EAAA,mBAAA,CAAA,IAAA,oBACAA,EAAAA,EAAA,kBAAA,CAAA,IAAA,mBACAA,EAAAA,EAAA,eAAA,CAAA,IAAA,gBAJUA,IAAAA,MAAA,CAAA,CAAA;AAOL,MAAMC,KAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACF,GAEaC,KAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA;AACF,GCAaC,KAA0B,CAAC;AAAA,EACtC,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC;AACF,MAA6C;AAC3C,QAAM,EAAE,SAASC,EAAA,IAAgBC,EAAA;AAEjC,SACE,gBAAAC,EAACC,EAAM,UAAN,EACC,UAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,MAAA;AAAA,MAGrB,UAAA;AAAA,QAAA,gBAAAD;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,KAAK;AAAA,cACL,gBAAgB;AAAA,cAChB,IAAI;AAAA,cACJ,IAAI;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAJ,EAACK,MAAE,MAAM,IAAM,SAAQ,aACpB,UAAAC,GAAyBhB,CAAS,GACrC;AAAA,cACCC,uBACEgB,IAAA,EAAO,2BAAUC,IAAA,CAAA,CAAa,GAAI,SAASjB,GAAe,IAAI,EAAE,QAAQ,GAAA,GACvE,4BAACkB,GAAA,EAAK,MAAM,IAAM,SAAQ,SACvB,UAAAX,EAAY,iBAAA,CACf,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,gBAAAE;AAAA,UAACU;AAAA,UAAA;AAAA,YACC,QACE,gBAAAR,EAACE,GAAA,EAAM,IAAI,EAAE,YAAY,YAAY,eAAe,OAAO,KAAK,EAAA,GAC9D,UAAA;AAAA,cAAA,gBAAAJ,EAACW,IAAA,EAAI,UAAAC,EAAepB,GAAkB,QAAQ,GAAE;AAAA,gCAC/Ca,IAAA,EAAE,OAAM,kBAAiB,SAAQ,SAAQ,UAAA,KAE1C;AAAA,cACA,gBAAAL,EAACK,MAAE,OAAM,kBAAiB,SAAQ,SAC/B,UAAAO,EAAenB,GAAQ,QAAQ,EAAA,CAClC;AAAA,YAAA,GACF;AAAA,YAEF,eAAe,GAAGG,CAAS;AAAA,YAC3B,MAAAC;AAAA,YACA,OAAOC,EAAY;AAAA,YACnB,WACEe,EAAiBf,EAAY,eAAeJ,EAAgB,SAAS;AAAA,YAEvE,iBAAiBA;AAAA,YACjB,YACEmB;AAAA,cACEf,EAAY;AAAA,cACZc,EAAejB,GAAiB,QAAQ;AAAA,YAAA;AAAA,YAG5C,IAAI;AAAA,cACF,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,IAAI;AAAA,YAAA;AAAA,UACN;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ,GC3EamB,KAA8B,CAAC;AAAA,EAC1C,gBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,yBAAAC;AAAA,EACA,gBAAAC;AACF,MAAwC;AACtC,QAAM,EAAE,SAAStB,GAAa,QAAQuB,EAAA,IAAetB,EAAA,GAE/C,EAAE,oBAAAuB,EAAA,IAAuBC,EAAA,GAEzBC,IAAmBvB,EAAM,QAAQ,MAC9BqB,EAAmB,OAAO,CAACG,GAAKC,MAChCA,EAAE,cAGAD,IAFEA,IAAMC,EAAE,QAGhB,CAAC,GACH,CAACJ,CAAkB,CAAC,GAEjB,EAAE,iBAAA3B,GAAiB,iBAAAD,GAAiB,WAAAE,EAAA,IAAc+B;AAAA,IACtDH;AAAA,IACAT,EAAe,UAAU;AAAA,EAAA;AAG3B,SACE,gBAAAb;AAAA,IAAC0B;AAAA,IAAA;AAAA,MACC,gBAAgBP,EAAW;AAAA,MAC3B,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,QAAAH;AAAA,MACA,SAAAD;AAAA,MACA,iBAAiB,MAAME,EAAwBU,GAAqB,IAAI;AAAA,MACxE,mBAAmB,MAAM;AACvB,QAAAV,EAAwBU,GAAqB,MAAM;AAAA,MACrD;AAAA,MACA,aAAa/B,EAAY;AAAA,MACzB,gBAAe;AAAA,MACf,eAAeA,EAAY;AAAA,MAC3B,IAAI;AAAA,QACF,mBAAmB;AAAA,UACjB,IAAI;AAAA,QAAA;AAAA,MACN;AAAA,MAEF,OACEe,EAAiBf,EAAY,oBAAoBiB,EAAe,aAAa;AAAA,MAG/E,UAAA;AAAA,QAAA,gBAAAf;AAAA,UAACX;AAAA,UAAA;AAAA,YACC,QAAQ0B,EAAe;AAAA,YACvB,MACE,gBAAAf;AAAA,cAAC8B;AAAA,cAAA;AAAA,gBACC,cAAcd,EAAY,2BAA2B;AAAA,gBACrD,cAAcA,EAAY,iBAAiB;AAAA,cAAA;AAAA,YAAA;AAAA,YAG/C,WAAApB;AAAA,YACA,iBAAAD;AAAA,YACA,iBAAAD;AAAA,YACA,WAAWsB,EAAY;AAAA,YACvB,kBAAkBQ;AAAA,UAAA;AAAA,QAAA;AAAA,0BAEnBO,IAAA,EAAgB;AAAA,QAChBX,IAAA;AAAA,MAAiB;AAAA,IAAA;AAAA,EAAA;AAGxB,GAEAY,KAAeC,EAASnB,EAA2B;AC/D5C,IAAKe,uBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,OAAO,QACPA,EAAA,SAAS,UAHCA,IAAAA,MAAA,CAAA,CAAA;AAML,MAAMK,KAA0BD,EAAS,CAAC,EAAE,aAAAjB,QAAgD;AACjG,QAAM,CAACmB,GAAsBhB,CAAuB,IAClDlB,EAAM,SAAsC,IAAI,GAE5C,CAACR,GAAQ2C,CAAS,IAAInC,EAAM,SAAS,EAAE,GAEvC,CAACoC,GAASC,CAAU,IAAIrC,EAAM,SAAS,EAAK,GAE5CsC,IAAgBtC,EAAM,OAAO,EAAK,GAElC,CAACuC,GAAgBC,CAAiB,IAAIxC,EAAM,SAAsC,IAAI,GAEtFyC,IAAQC,EAAA,GAER;AAAA,IACJ,mBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,iCAAAC;AAAA,IACA,OAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,IACEC,GAAA,GACE,EAAE,WAAAC,EAAA,IAAc5B,EAAA,GAChB,EAAE,UAAA6B,EAAA,IAAaC,GAAA,GACfC,IAAUZ,EAAM,QAAQ,SAAS,SAAS,aAAa,YAEvD,EAAE,SAAS5C,GAAa,QAAQuB,EAAA,IAAetB,EAAA,GAE/C,EAAE,UAAAwD,IAAU,UAAAC,GAAA,IAAaC,GAAA,GAEzB,CAACC,IAAiCC,CAAkC,IACxE1D,EAAM,SAAS,EAAK,GAEhB2D,IAAyB5C,GAAa,gBACxC+B,EAAgC/B,EAAY,aAAa,IACzD,QAEE6C,IAAmB,MAAM;AAC7B,IAAApB,EAAkBN,CAAoB,GACtChB,EAAwB,IAAI,GAC5BiB,EAAU,EAAE;AAAA,EACd,GAEM0B,KAAc,MAAM;AACxB,IAAKF,IAGHD,EAAmC,EAAI,IAFvCxC;AAAA,MAAwB;AAAA;AAAA,IAAA;AAAA,EAI5B,GAGM4C,IAAgB;AAAA,IACnB,QAA8B;AAAA,MAC7B,SAASlD;AAAA,QACPf,EAAY;AAAA,QACZ,gBAAAE,EAAC,UAAA,EAAQ,UAAAgB,EAAY,YAAA,CAAY;AAAA,QACjC,GAAGJ,EAAeI,EAAY,QAAQ,QAAQ,CAAC;AAAA,MAAA;AAAA,MAEjD,OAAOlB,EAAY;AAAA,MACnB,mBAAmBA,EAAY;AAAA,MAC/B,mBAAmBe;AAAA,QACjBf,EAAY;AAAA,QACZkB,EAAY;AAAA,MAAA;AAAA,MAEd,kBAAkB,MAAMG;AAAA,QAAwB;AAAA;AAAA,MAAA;AAAA,MAChD,qBAAqBN;AAAA,QACnBf,EAAY;AAAA,QACZkB,EAAY;AAAA,MAAA;AAAA,MAEd,YAAY,YAAY,MAAM4B,EAAkB5B,EAAY,eAAgB,OAAOvB,CAAM,CAAC;AAAA,IAAA;AAAA,IAG3F,MAA4B;AAAA,MAC3B,SAASoB;AAAA,QACPf,EAAY;AAAA,QACZ,gBAAAE,EAAC,UAAA,EAAQ,UAAAgB,EAAY,YAAA,CAAY;AAAA,MAAA;AAAA,MAEnC,OAAOlB,EAAY;AAAA,MACnB,mBAAmBA,EAAY;AAAA,MAC/B,mBAAmBe;AAAA,QACjBf,EAAY;AAAA,QACZkB,EAAY;AAAA,MAAA;AAAA,MAEd,kBAAkB,MAAMG;AAAA,QAAwB;AAAA;AAAA,MAAA;AAAA,MAChD,qBAAqBN;AAAA,QACnBf,EAAY;AAAA,QACZkB,EAAY;AAAA,MAAA;AAAA,MAEd,YAAY,YACV,MAAM6B,EAAqB;AAAA,QACzB,GAAGe;AAAA,QACH,QAAQ,OAAOnE,CAAM;AAAA,MAAA,CACtB;AAAA,IAAA;AAAA,IAGJ,QAA8B;AAAA,MAC7B,SAASoB;AAAA,QACPf,EAAY;AAAA,QACZ,gBAAAE,EAAC,UAAA,EAAQ,UAAAgB,EAAY,YAAA,CAAY;AAAA,MAAA;AAAA,MAEnC,OAAOlB,EAAY;AAAA,MACnB,mBAAmBA,EAAY;AAAA,MAC/B,mBAAmBe;AAAA,QACjBf,EAAY;AAAA,QACZkB,EAAY;AAAA,MAAA;AAAA,MAEd,kBAAkB,MAAMG;AAAA,QAAwB;AAAA;AAAA,MAAA;AAAA,MAChD,qBAAqBN;AAAA,QACnBf,EAAY;AAAA,QACZkB,EAAY;AAAA,MAAA;AAAA,MAEd,YAAY,YAAY,MAAM8B,EAAqBc,EAAwB,IAAI;AAAA,IAAA;AAAA,EACjF,GAGII,IAAsB,YAAY;AACtC,QAAIzB,EAAc,QAAS;AAE3B,IAAAA,EAAc,UAAU;AAExB,UAAM,EAAE,YAAA0B,GAAY,qBAAAC,GAAqB,mBAAAC,EAAA,IACvCJ,EAAc5B,CAA4C,GAEtD,EAAE,WAAAiC,MAAc,MAAMH,EAAA,GACtBI,KAAeD,IAAYF,IAAsBC;AACvD,IAAAN,EAAA,GACAvB,EAAW,CAAC8B,CAAS,GACrBnB,EAASoB,EAAY,GACrBd,GAASc,EAAY,GAEjBD,KAAajC,MAAyB,YACxCwB,EAAmC,EAAK,GAE1CpB,EAAc,UAAU;AAAA,EAC1B;AAEAtC,EAAAA,EAAM,UAAU,MAAM;AACpB,UAAMqE,IAAY;AAAA,MAChB,OAAOC,GAAa,IAAI,KAAKvD,EAAY,OAAO,GAAI,CAAC;AAAA,MACrD,KAAKwD,GAAW,IAAI,KAAKxD,EAAY,OAAO,GAAI,CAAC;AAAA,IAAA;AAGnD,IAAI0C,MACFP,EAAU;AAAA,MACR,UAAUC,EAAS,IAAI,CAACqB,MAAYA,EAAQ,IAAI;AAAA,MAChD,QAAQf,KACJ,CAACgB,MAAQA,EAAI,kBAAkB1D,EAAY,gBAC3C,CAAC0D,MAAQA,EAAI,SAAS1D,EAAY;AAAA,MACtC,WAAAsD;AAAA,IAAA,CACD;AAAA,EAEL,GAAG,CAACZ,IAAiC1C,GAAaoC,CAAQ,CAAC;AAE3D,QAAMuB,IAAW,MACf,gBAAA3E;AAAA,IAAC4E;AAAA,IAAA;AAAA,MACC,YAAY9E,EAAY;AAAA,MACxB,kBAAkB;AAAA,MAClB,gBAAgBuB,EAAW;AAAA,MAC3B,aAAa,MAAM4B,EAAS,EAAE;AAAA,MAC9B,SAASD;AAAA,MACT,eAAee,EAAcvB,CAAsC,GAAG;AAAA,MACtE,MAAM,EAAQQ;AAAA,MACd,UAAUX,IAAU,UAAU;AAAA,MAC9B,YAAYA;AAAA,MACZ,WAAW;AAAA,IAAA;AAAA,EAAA;AAGf,SACE,gBAAAnC,EAACD,EAAM,UAAN,EACE,UAAA;AAAA,IAAAuD;AAAA,IAED,gBAAAxD,EAAC6E,KAAS,gBAAgB,IAAM,gBAAgB,IAC9C,UAAA,gBAAA3E,EAAC4E,GAAA,EAAe,SAAShB,IACvB,UAAA;AAAA,MAAA,gBAAA9D,EAAC+E,GAAA,EACC,4BAACC,GAAA,EAAO,IAAI,EAAE,SAAS1B,EAAA,GAAW,SAAQ,WACxC,4BAAC2B,GAAA,EAAK,MAAK,gBAAe,IAAI,EAAE,OAAO,eAAA,GAAkB,GAC3D,EAAA,CACF;AAAA,MACA,gBAAAjF;AAAA,QAACkF;AAAA,QAAA;AAAA,UACC,SAASpF,EAAY;AAAA,UACrB,WACE,gBAAAE,EAACS,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,SACtD,cACG,GAAGG,EAAegD,EAAuB,QAAQ,QAAQ,CAAC,MAAMvC,EAAW,UAAU,KACrFvB,EAAY,mCAAA,CAClB;AAAA,UAEF,WAAW,EAAE,SAAS,EAAE,SAAS,WAAW,UAAU,IAAI,YAAY,SAAA,EAAS;AAAA,QAAE;AAAA,MAAA;AAAA,MAEnF,gBAAAE,EAACmF,GAAA,EACC,UAAA,gBAAAnF,EAACiF,GAAA,EAAK,MAAK,iBAAgB,IAAI,EAAE,OAAO,eAAA,EAAe,CAAG,EAAA,CAC5D;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IAEC,CAAC,CAACrB,KACD,gBAAA5D;AAAA,MAACc;AAAAA,MAAA;AAAA,QACC,QAAQ4C;AAAA,QACR,gBAAgBE;AAAA,QAChB,SAAS,MAAMD,EAAmC,EAAK;AAAA,QACvD,gBAAgB,MAAMX,KAAS2B,EAAA;AAAA,QAC/B,yBAAyB,CAACS,MAAW;AACnC,UAAIA,MAAW,UACbhD,EAAUwB,GAAwB,OAAO,SAAA,KAAc,EAAE,GAE3DzC,EAAwBiE,CAAM;AAAA,QAChC;AAAA,QACA,aAAApE;AAAA,MAAA;AAAA,IAAA;AAAA,IAGHmB,KACC,gBAAAnC;AAAA,MAACqF;AAAA,MAAA;AAAA,QACC,gBAAgBhE,EAAW;AAAA,QAC3B,SAAS0C,EAAc5B,CAAoB,EAAE;AAAA,QAC7C,mBAAmBC;AAAA,QACnB,kBAAAyB;AAAA,QACA,qBAAAG;AAAA,QACA,uBAAuBH;AAAA,QACvB,YACE1B,MAAyB,WAA8Bd,EAAW,cAAc;AAAA,QAElF,YAAY5B;AAAA,QACZ,QAAQ,EAAQ0C;AAAA,QAChB,aAAa4B,EAAc5B,CAAoB,EAAE;AAAA,QACjD,eAAed,EAAW;AAAA,QAC1B,OAAO0C,EAAc5B,CAAoB,EAAE;AAAA,MAAA;AAAA,IAAA;AAAA,IAI9C,CAAC,CAACa,KAAS2B,EAAA;AAAA,EAAS,GACvB;AAEJ,CAAC,GCnPKW,KAAgD,CAAC,EAAE,aAAAtE,QAAkB;AACzE,QAAM,EAAE,4BAAAuE,GAA4B,mBAAAC,EAAA,IAAsBjE,EAAA,GACpD,EAAE,YAAAkE,EAAA,IAAeC,GAAA,GACjB,EAAE,SAAAC,EAAA,IAAYC,EAAA,GACd,EAAE,8BAAAC,GAA8B,yBAAAC,EAAA,IAA4BC,GAAA,GAC5D,EAAE,cAAcC,EAAA,IAASjG,EAAA,GAEzB2C,IAAQC,EAAA,GAER,CAACsD,GAAMC,CAAO,IAAIjG,EAAM,SAAS,EAAK,GACtC,CAACkG,GAAcC,CAAe,IAAInG,EAAM,SAAS,EAAE,GAEnDoG,IAAuB,OAAOC,MAAwB;AAC1D,UAAMd,EAAkB,EAAE,GAAGxE,GAAa,eAAemF,GAAc,GACnEG,KACF,MAAMf,EAA2BY,GAAcnF,CAAW,GAE5DoF,EAAgB,EAAE,GAClBT,EAAQY,EAAiB,oCAAoC;AAAA,MAC3D,kBAAkBvF,EAAY;AAAA,IAAA,CAC/B;AAAA,EACH,GAEMwF,IAAiB,CAACC,MAAiB;AACvC,QAAIzF,EAAY,aAAa,CAACA,EAAY,MAAM;AAC9C,YAAM0F,IAAWjB,EAAW,KAAK,CAACkB,MAAMA,EAAE,SAASF,CAAI;AACvD,MAAAX,EAAwB;AAAA,QACtB,GAAG9E;AAAA,QACH,UAAU0F,GAAU;AAAA,QACpB,eAAeD;AAAA,QACf,yBAAyBC,GAAU,eAAeD;AAAA,MAAA,CACnD;AAAA,IACH;AACE,MAAAL,EAAgBK,CAAI;AAGtB,IAAAG,EAAA;AAAA,EACF,GAEMA,IAAoB,MAAM;AAC9B,IAAAV,EAAQ,EAAK,GACbL,EAA6B,EAAK;AAAA,EACpC,GAEMa,IAAWzG,EAAM;AAAA,IACrB,MAAMwF,EAAW,KAAK,CAACoB,MAASA,EAAK,SAASV,CAAY;AAAA,IAC1D,CAACA,CAAY;AAAA,EAAA,GAGT7C,IAAUZ,EAAM,QAAQ,SAAS,SAAS,aAAa;AAE7D,SACE,gBAAAxC,EAAC2E,GAAA,EAAS,gBAAgB,IAAM,gBAAgB,IAC9C,UAAA;AAAA,IAAA,gBAAA3E;AAAA,MAAC4E;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAAa,EAAQmB,EAAgB,6BAA6B,GACrDZ,EAAQ,EAAI;AAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAlG,EAAC+E,GAAA,EACC,4BAACC,GAAA,EAAO,IAAI,EAAE,SAAS1B,EAAA,GAAW,SAAQ,WACxC,UAAA,gBAAAtD;AAAA,YAAC+G;AAAA,YAAA;AAAA,cACC,cAAc/F,EAAY;AAAA,cAC1B,MAAM;AAAA,cACN,IAAI,EAAE,OAAO,eAAA;AAAA,cACb,SAASgG,GAAqB;AAAA,YAAA;AAAA,UAAA,GAElC,EAAA,CACF;AAAA,UACA,gBAAAhH;AAAA,YAACkF;AAAA,YAAA;AAAA,cACC,SAASc,EAAK;AAAA,cACd,WACE,gBAAAhG,EAACS,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,SACtD,UAAAO,EAAY,YAAYgF,EAAK,2BAChC;AAAA,cAEF,WAAW,EAAE,SAAS,EAAE,SAAS,WAAW,UAAU,IAAI,YAAY,SAAA,EAAS;AAAA,YAAE;AAAA,UAAA;AAAA,UAEnF,gBAAAhG,EAACmF,GAAA,EACC,UAAA,gBAAAnF,EAACiF,GAAA,EAAK,MAAK,iBAAgB,IAAI,EAAE,OAAO,eAAA,EAAe,CAAG,EAAA,CAC5D;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAjF;AAAA,MAACiH;AAAA,MAAA;AAAA,QACC,iBAAiBjG,EAAY;AAAA,QAC7B,SAAS4F;AAAA,QACT,UAAUJ;AAAA,QACV,YAAYP;AAAA,QACZ,OAAOD,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAGd,gBAAAhG;AAAA,MAACkH;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,UACJ,OAAOrG;AAAA,YACLmF,EAAK;AAAA,YACLhF,EAAY;AAAA,UAAA;AAAA,QACd;AAAA,QAEF,QAAQ,EAAQmF;AAAA,QAChB,SAAS,MAAMC,EAAgB,EAAE;AAAA,QACjC,iBAAiB,MAAMC,EAAqB,EAAI;AAAA,QAChD,mBAAmB,MAAMA,EAAqB,EAAK;AAAA,QACnD,aAAaL,EAAK;AAAA,QAClB,eAAeA,EAAK;AAAA,QAEpB,UAAA,gBAAAhG,EAACK,IAAA,EAAE,SAAQ,aAEP,UAAAQ;AAAA,UACEmF,EAAK;AAAA,UACLhF,EAAY;AAAA,UACZ0F,GAAU;AAAA,QAAA,EACZ,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GChHMS,KAAwC,CAAC,EAAE,aAAAnG,QAAkB;AACjE,QAAM,EAAE,SAAA2E,EAAA,IAAYC,EAAA,GACd,EAAE,mBAAAJ,EAAA,IAAsBjE,EAAA,GACxB,EAAE,yBAAAuE,EAAA,IAA4BC,GAAA,GAC9B,EAAE,QAAQ1E,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAE7C2C,IAAQC,EAAA,GACR,CAACsD,GAAMC,CAAO,IAAIjG,EAAM,SAAS,EAAK,GACtC,CAACmH,GAAMC,CAAO,IAAIpH,EAAM,SAAiBe,EAAY,IAAI,GAEzDsG,IAAqB,CAACF,MAAe;AACzC,IAAAC,EAAQE,GAAYH,CAAI,CAAC;AAAA,EAC3B,GAEMI,IAAa,YAAY;AAC7B,QAAIxG,EAAY,aAAa,CAACA,EAAY,MAAM;AAC9C,MAAA8E,EAAwB,EAAE,GAAG9E,GAAa,MAAAoG,GAAM,GAChDlB,EAAQ,EAAK;AACb;AAAA,IACF;AAEA,UAAMV,EAAkB,EAAE,GAAGxE,GAAa,MAAAoG,GAAM,GAChDzB,EAAQY,EAAiB,gCAAgC,EAAE,kBAAkBvF,EAAY,MAAM,GAC/FkF,EAAQ,EAAK;AAAA,EACf,GAEM5C,IAAUZ,EAAM,QAAQ,SAAS,SAAS,aAAa;AAE7D,2BACGmC,GAAA,EAAS,WAAU,sBAAqB,gBAAgB,IAAM,gBAAgB,IAC7E,UAAA;AAAA,IAAA,gBAAA3E;AAAA,MAAC4E;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAAa,EAAQmB,EAAgB,yBAAyB,GACjDZ,EAAQ,EAAI;AAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAlG,EAAC+E,GAAA,EACC,4BAACC,GAAA,EAAO,IAAI,EAAE,SAAS1B,EAAA,GAAW,SAAQ,WACxC,4BAAC2B,GAAA,EAAK,MAAK,kBAAiB,IAAI,EAAE,OAAO,eAAA,GAAkB,GAC7D,EAAA,CACF;AAAA,UACA,gBAAAjF;AAAA,YAACkF;AAAA,YAAA;AAAA,cACC,SAASc,EAAK;AAAA,cACd,WACE,gBAAAhG,EAACS,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,SACtD,aAAWgH,GAAazG,EAAY,IAAI,GAAG0G,GAAkB,cAAc,GAC9E;AAAA,cAEF,WAAW,EAAE,SAAS,EAAE,SAAS,WAAW,UAAU,IAAI,YAAY,SAAA,EAAS;AAAA,YAAE;AAAA,UAAA;AAAA,UAEnF,gBAAA1H,EAACmF,GAAA,EACC,UAAA,gBAAAnF,EAACiF,GAAA,EAAK,MAAK,iBAAgB,IAAI,EAAE,OAAO,eAAA,EAAe,CAAG,EAAA,CAC5D;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAjF;AAAA,MAAC4B;AAAA,MAAA;AAAA,QACC,gBAAgBP,EAAW;AAAA,QAC3B,QAAQ4E;AAAA,QACR,SAAS,MAAMC,EAAQ,EAAK;AAAA,QAC5B,iBAAiBsB;AAAA,QACjB,aAAanG,EAAW;AAAA,QACxB,eAAeA,EAAW;AAAA,QAC1B,OAAO2E,EAAK;AAAA,QAEZ,UAAA,gBAAAhG,EAACI,GAAA,EAAM,YAAW,UAAS,IAAI,IAC7B,UAAA,gBAAAJ;AAAA,UAAC2H;AAAA,UAAA;AAAA,YACC,WAAWF,GAAaL,CAAI;AAAA,YAC5B,MAAM;AAAA,cACJ,UAAUpB,EAAK;AAAA,cACf,UAAUA,EAAK;AAAA,cACf,OAAO3E,EAAW,kBAAkB;AAAA,YAAA;AAAA,YAEtC,gBAAgBiG;AAAA,YAChB,eAAeM,GAAuB;AAAA,UAAA;AAAA,QAAA,EACxC,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GC1FMC,KAA4C,CAAC,EAAE,aAAA7G,QAAkB;AACrE,QAAM,EAAE,SAAA2E,EAAA,IAAYC,EAAA,GACd,EAAE,mBAAAkC,EAAA,IAAsBvG,EAAA,GACxB,EAAE,8BAAAsE,EAAA,IAAiCE,GAAA,GACnC,EAAE,QAAQ1E,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAE7C,CAACkG,GAAMC,CAAO,IAAIjG,EAAM,SAAS,EAAK,GACtC8H,IAAe,YAAY;AAC/B,UAAMD,EAAkB9G,EAAY,IAAI,GACxC2E,EAAQmB,EAAgB,6BAA6B;AAAA,EACvD;AAEA,SACE,gBAAA5G,EAACC,GAAA,EAAI,WAAU,iBACZ,UAAA;AAAA,IAAAa,KACC,gBAAAhB,EAAC6E,GAAA,EAAS,gBAAgB,IAAM,gBAAgB,IAC9C,UAAA,gBAAA3E;AAAA,MAAC4E;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAAa,EAAQmB,EAAgB,2BAA2B,GACnDjB,EAA6B,EAAI,GACjCK,EAAQ,EAAI;AAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAlG,EAAC+E,GAAA,EACC,UAAA,gBAAA/E,EAACgF,GAAA,EAAO,SAAQ,WACd,UAAA,gBAAAhF,EAACgI,IAAA,EAAmB,OAAM,aAAY,UAAS,QAAA,CAAQ,EAAA,CACzD,GACF;AAAA,UACA,gBAAAhI;AAAA,YAACkF;AAAA,YAAA;AAAA,cACC,SAASc,EAAK;AAAA,cACd,WAAWA,EAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAElB,gBAAAhG,EAACmF,GAAA,EACC,UAAA,gBAAAnF,EAACgI,IAAA,CAAA,CAAmB,EAAA,CACtB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IAEF,gBAAAhI;AAAA,MAACkH;AAAA,MAAA;AAAA,QACC,MAAM,EAAE,OAAOlB,EAAK,gCAAA;AAAA,QACpB,QAAQC;AAAA,QACR,SAAS,MAAM;AACb,UAAAJ,EAA6B,EAAK,GAClCK,EAAQ,EAAK;AAAA,QACf;AAAA,QACA,iBAAiB6B;AAAA,QACjB,mBAAmB,MAAMpC,EAAQmB,EAAgB,4BAA4B;AAAA,QAC7E,aAAazF,EAAW;AAAA,QACxB,eAAeA,EAAW;AAAA,QAE1B,UAAA,gBAAArB,EAACS,GAAA,EAAK,SAAQ,aAAa,YAAK,sCAAA,CAAsC;AAAA,MAAA;AAAA,IAAA;AAAA,EACxE,GACF;AAEJ,GAEAwH,KAAehG,EAAS4F,EAAY,GCvD9BK,KAAoD,CAAC,EAAE,aAAAlH,QAAkB;AAC7E,QAAM,EAAE,SAAA2E,EAAA,IAAYC,EAAA,GACd,EAAE,mBAAAJ,EAAA,IAAsBjE,EAAA,GACxB,EAAE,8BAAAsE,EAAA,IAAiCE,GAAA,GACnC,EAAE,QAAQ1E,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAC7C2C,IAAQC,EAAA,GACR,CAACsD,GAAMC,CAAO,IAAIjG,EAAM,SAAS,EAAK,GAEtCkI,IAAmB,YAAY;AACnC,UAAM3C,EAAkB,EAAE,GAAGxE,GAAa,eAAe,IAAI,GAC7D2E,EAAQY,EAAiB,uCAAuC;AAAA,MAC9D,kBAAkBvF,EAAY;AAAA,IAAA,CAC/B;AAAA,EACH,GAEMsC,IAAUZ,EAAM,QAAQ,SAAS,SAAS,aAAa;AAE7D,SACE,gBAAA1C,EAACC,EAAM,UAAN,EACE,UAAAe,KACC,gBAAAd,EAAC2E,GAAA,EAAS,WAAU,sBAAqB,gBAAgB,IAAM,gBAAgB,IAC7E,UAAA;AAAA,IAAA,gBAAA3E;AAAA,MAAC4E;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAAa,EAAQmB,EAAgB,gCAAgC,GACxDZ,EAAQ,EAAI;AAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAlG,EAAC+E,GAAA,EACC,4BAACC,GAAA,EAAO,IAAI,EAAE,SAAS1B,EAAA,GAAW,SAAQ,WACxC,4BAAC2B,GAAA,EAAK,MAAK,UAAS,IAAI,EAAE,OAAO,eAAA,GAAkB,GACrD,EAAA,CACF;AAAA,4BACCC,GAAA,EAAa,SAASc,EAAK,qBAAqB,WAAWA,EAAK,oBAAoB;AAAA,UACrF,gBAAAhG,EAACmF,GAAA,EACC,UAAA,gBAAAnF,EAACiF,GAAA,EAAK,MAAK,iBAAgB,IAAI,EAAE,OAAO,eAAA,EAAe,CAAG,EAAA,CAC5D;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAA/E;AAAA,MAACgH;AAAA,MAAA;AAAA,QACC,MAAM,EAAE,OAAOlB,EAAK,0BAAA;AAAA,QACpB,QAAQC;AAAA,QACR,SAAS,MAAM;AACb,UAAAJ,EAA6B,EAAK,GAClCK,EAAQ,EAAK;AAAA,QACf;AAAA,QACA,iBAAiBiC;AAAA,QACjB,mBAAmB,MAAMxC,EAAQmB,EAAgB,iCAAiC;AAAA,QAClF,aAAazF,EAAW;AAAA,QACxB,eAAeA,EAAW;AAAA,QAC1B,OAAO2E,EAAK;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAhG,EAACS,GAAA,EAAK,SAAQ,aAAa,UAAAuF,EAAK,0BAAyB;AAAA,UACzD,gBAAAhG,EAACS,KAAK,MAAM,IAAM,SAAQ,aACvB,UAAA,IAAIuF,EAAK,6BAA6B,GAAA,CACzC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CAEJ;AAEJ,GAEAoC,KAAenG,EAASiG,EAAgB,GC7DlCG,KAA8C,CAAC,EAAE,aAAArH,QAAkB;AACvE,QAAM,EAAE,SAAA2E,EAAA,IAAYC,EAAA,GACd,EAAE,UAAA3C,GAAU,mBAAAuC,EAAA,IAAsBjE,EAAA,GAClC,EAAE,8BAAAsE,EAAA,IAAiCE,GAAA,GACnC,EAAE,QAAQ1E,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAC7C2C,IAAQC,EAAA,GACR,CAACsD,GAAMC,CAAO,IAAIjG,EAAM,SAAS,EAAK,GAEtCqI,IAAatH,EAAY,WAEzBuH,IAAgB,YAAY;AAChC,QAAI;AACF,YAAM/C,EAAkB,EAAE,GAAGxE,GAAa,WAAW,CAACA,EAAY,WAAW,GAC7E2E;AAAA,QACE2C,IACIxB,EAAgB,0BAChBA,EAAgB;AAAA,MAAA,GAEtB7D,EAASqF,IAAatC,EAAK,uBAAuBA,EAAK,oBAAoB;AAAA,IAC7E,QAAQ;AACN,MAAA/C,EAASqF,IAAatC,EAAK,2BAA2BA,EAAK,wBAAwB;AAAA,IACrF;AAAA,EACF,GAEM1C,IAAUZ,EAAM,QAAQ,SAAS,SAAS,aAAa;AAE7D,SACE,gBAAA1C,EAACC,EAAM,UAAN,EACE,UAAAe,KACC,gBAAAd,EAAC2E,GAAA,EAAS,WAAU,2BAA0B,gBAAgB,IAAM,gBAAgB,IAClF,UAAA;AAAA,IAAA,gBAAA3E;AAAA,MAAC4E;AAAA,MAAA;AAAA,QACC,gBAAcwD;AAAA,QACd,mBAAgB;AAAA,QAChB,SAAS,MAAM;AACb,UAAA3C;AAAA,YACE2C,IACIxB,EAAgB,8BAChBA,EAAgB;AAAA,UAAA,GAEtBnB;AAAA,YACE2C,IACI,iDACA;AAAA,YACJ;AAAA,cACE,kBAAkBtH,EAAY;AAAA,YAAA;AAAA,UAChC,GAEFkF,EAAQ,EAAI;AAAA,QACd;AAAA,QACA,MAAK;AAAA,QAEL,UAAA;AAAA,UAAA,gBAAAlG,EAAC+E,GAAA,EACC,UAAA,gBAAA/E,EAACgF,GAAA,EAAO,IAAI,EAAE,SAAS1B,EAAA,GAAW,SAAQ,WACvC,UAAAgF,IACC,gBAAAtI,EAACiF,KAAK,MAAK,kBAAiB,IAAI,EAAE,OAAO,eAAA,EAAe,CAAG,sBAE1DA,GAAA,EAAK,MAAK,cAAa,IAAI,EAAE,OAAO,eAAA,EAAe,CAAG,GAE3D,GACF;AAAA,UACA,gBAAAjF;AAAA,YAACkF;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,SAASc,EAAK;AAAA,cACd,WAAWA,EAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAElB,gBAAAhG,EAACmF,GAAA,EAAa,eAAY,QACxB,UAAA,gBAAAnF;AAAA,YAACwI;AAAA,YAAA;AAAA,cACC,SAASF;AAAA,cACT,WAAW,EAAE,OAAO,EAAE,UAAU,KAAG;AAAA,cACnC,IAAI,EAAE,eAAe,OAAA;AAAA,cACrB,UAAU;AAAA,YAAA;AAAA,UAAA,EACZ,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAtI;AAAA,MAACkH;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,UACJ,OAAOoB,IAAatC,EAAK,sBAAsBA,EAAK;AAAA,QAAA;AAAA,QAEtD,QAAQC;AAAA,QACR,SAAS,MAAM;AACb,UAAAJ,EAA6B,EAAK,GAClCK,EAAQ,EAAK;AAAA,QACf;AAAA,QACA,iBAAiBqC;AAAA,QACjB,mBAAmB,MACjB5C;AAAA,UACE2C,IACIxB,EAAgB,qCAChBA,EAAgB;AAAA,QAAA;AAAA,QAGxB,aAAawB,IAAatC,EAAK,UAAUA,EAAK;AAAA,QAC9C,eAAe3E,EAAW;AAAA,QAE1B,UAAA,gBAAArB,EAACS,GAAA,EAAK,UAAU,IAAO,SAAQ,aAC5B,UAAA6H,IAAatC,EAAK,wBAAwBA,EAAK,sBAAA,CAClD;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CAEJ;AAEJ,GAEAyC,KAAexG,EAASoG,EAAa,GCtH/BK,KAAkE,CAAC,EAAE,aAAA1H,QAAkB;AAC3F,QAAM,EAAE,QAAAvB,GAAQ,aAAAkJ,GAAa,UAAAC,GAAU,eAAAC,GAAe,OAAAC,GAAO,yBAAAC,MAC3D/H;AAEF,SACE,gBAAAd,EAACE,GAAA,EAAM,WAAU,wBAAuB,WAAU,OAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAC3E,UAAA;AAAA,IAAA,gBAAAJ;AAAA,MAAC8B;AAAA,MAAA;AAAA,QACC,cAAciH,KAA2B;AAAA,QACzC,cAAcF,KAAiB;AAAA,QAC/B,MAAM;AAAA,MAAA;AAAA,IAAA;AAAA,IAER,gBAAA3I,EAACE,GAAA,EAAM,UAAS,WACd,UAAA;AAAA,MAAA,gBAAAJ,EAACS,GAAA,EAAK,MAAM,IAAM,IAAI,GAAG,UAAU,IAAM,SAAQ,SAC9C,UAAAkI,KAAeG,EAAA,CAClB;AAAA,MACA,gBAAA5I,EAACG,MAAE,OAAOuI,IAAW,iBAAiB,gBAAgB,UAAU,IAAM,SAAQ,MAC3E,UAAA;AAAA,QAAAA,IAAW,MAAM;AAAA,QACjBhI,EAAenB,GAAQ,QAAQ;AAAA,MAAA,EAAA,CAClC;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GCNMuJ,KAAwC,CAAC,EAAE,aAAAhI,QAAkB;AACjE,QAAM,EAAE,SAAA2E,EAAA,IAAYC,EAAA,GACd,EAAE,mBAAAJ,EAAA,IAAsBjE,EAAA,GACxB,EAAE,yBAAAuE,EAAA,IAA4BC,GAAA,GAC9B,EAAE,QAAQ1E,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAE7C2C,IAAQC,EAAA,GAER,CAACsD,GAAMC,CAAO,IAAIjG,EAAM,SAAS,EAAK,GACtC,CAACgJ,GAAUC,CAAW,IAAIjJ,EAAM,SAAS,EAAE;AAEjDA,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAIgG,KACFiD,EAAYlI,EAAY,OAAOA,EAAY,OAAO,EAAE;AAAA,EAExD,GAAG,CAACiF,CAAI,CAAC;AAET,QAAMuB,IAAa,YAAY;AAC7B,QAAIxG,EAAY,aAAa,CAACA,EAAY,MAAM;AAC9C,MAAA8E,EAAwB,EAAE,GAAG9E,GAAa,MAAMiI,GAAU,GAC1D/C,EAAQ,EAAK;AACb;AAAA,IACF;AAEA,UAAMV,EAAkB,EAAE,GAAGxE,GAAa,MAAMiI,GAAU,GAC1DtD,EAAQY,EAAiB,gCAAgC,EAAE,kBAAkBvF,EAAY,MAAM,GAC/FkF,EAAQ,EAAK;AAAA,EACf,GAEM5C,IAAUZ,EAAM,QAAQ,SAAS,SAAS,aAAa;AAE7D,2BACGmC,GAAA,EAAS,WAAU,sBAAqB,gBAAgB,IAAM,gBAAgB,IAC7E,UAAA;AAAA,IAAA,gBAAA3E;AAAA,MAAC4E;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAAa,EAAQmB,EAAgB,yBAAyB,GACjDZ,EAAQ,EAAI;AAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAlG,EAAC+E,GAAA,EACC,4BAACC,GAAA,EAAO,IAAI,EAAE,SAAS1B,EAAA,GAAW,SAAQ,WACxC,4BAAC2B,GAAA,EAAK,MAAK,WAAU,IAAI,EAAE,OAAO,eAAA,GAAkB,GACtD,EAAA,CACF;AAAA,UACA,gBAAAjF;AAAA,YAACkF;AAAA,YAAA;AAAA,cACC,SAASc,EAAK;AAAA,cACd,WACE,gBAAAhG,EAACS,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,SACtD,UAAAO,EAAY,OAAOA,EAAY,OAAOgF,EAAK,WAC9C;AAAA,cAEF,WAAW,EAAE,SAAS,EAAE,SAAS,WAAW,UAAU,IAAI,YAAY,SAAA,EAAS;AAAA,YAAE;AAAA,UAAA;AAAA,UAEnF,gBAAAhG,EAACmF,GAAA,EACC,UAAA,gBAAAnF,EAACiF,GAAA,EAAK,MAAK,iBAAgB,IAAI,EAAE,OAAO,eAAA,EAAe,CAAG,EAAA,CAC5D;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAA/E;AAAA,MAAC0B;AAAA,MAAA;AAAA,QACC,gBAAgBP,EAAW;AAAA,QAC3B,QAAQ4E;AAAA,QACR,SAAS,MAAMC,EAAQ,EAAK;AAAA,QAC5B,iBAAiBsB;AAAA,QACjB,OAAOxB,EAAK;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAhG,EAAC0I,MAAwB,aAAA1H,GAA0B;AAAA,UACnD,gBAAAhB;AAAA,YAACmJ;AAAA,YAAA;AAAA,cACC,cAAYnD,EAAK;AAAA,cACjB,SAAS;AAAA,cACT,WAAW;AAAA,cACX,MAAK;AAAA,cACL,UAAU,CAACoD,MAA2CF,EAAYE,EAAE,OAAO,KAAK;AAAA,cAChF,aAAapD,EAAK;AAAA,cAClB,MAAM;AAAA,cACN,IAAI,EAAE,IAAI,IAAI,OAAO,oBAAA;AAAA,cACrB,OAAOiD;AAAA,YAAA;AAAA,UAAA;AAAA,QACT;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GAEAI,KAAepH,EAAS+G,EAAU,GC9E5BM,KAAoC,CAAC;AAAA,EACzC,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,OAAAC;AACF,MAAM;AACJ,QAAM,EAAE,SAAAhE,EAAA,IAAYC,EAAA,GACd,EAAE,cAAcI,EAAA,IAASjG,EAAA,GAEzB,CAACN,GAAQ2C,CAAS,IAAInC,EAAM,SAAS,GAAG0J,EAAM,MAAM,EAAE,GACtD,CAACC,GAAsBC,CAAuB,IAAI5J,EAAM,SAAS,EAAK,GAEtE6J,IAAWP,MAAU,GAErBQ,IAAqB,CAACC,MAAkB;AAC5C,IAAK,MAAM,OAAOA,CAAK,CAAC,MACtB5H,EAAU4H,CAAK,GACfN,EAAeH,GAAO,OAAOS,CAAK,CAAC;AAAA,EAEvC;AAEA,SACE,gBAAA9J,EAACC,KAAI,SAAQ,oBAAmB,WAAU,4BAA2B,IAAI,GAAG,IAAI,GAC9E,UAAA;AAAA,IAAA,gBAAAD,EAAC+J,MAAK,YAAYH,IAAW,WAAW,SAAS,WAAW,IAC1D,UAAA;AAAA,MAAA,gBAAA9J,EAACiK,MAAK,MAAM,GACV,UAAA,gBAAA/J,EAACE,GAAA,EAAM,YAAW,SAChB,UAAA;AAAA,QAAA,gBAAAJ;AAAA,UAACO;AAAA,UAAA;AAAA,YACC,2BAAU2J,IAAA,EAAiB;AAAA,YAC3B,SAAS,MAAML,EAAwB,EAAI;AAAA,YAC3C,WAAW,gBAAA7J,EAAC+G,IAAA,EAAa,cAAc4C,EAAM,yBAAyB;AAAA,YACtE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAA;AAAA,YAEjB,UAAAA,EAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAET,gBAAA3J,EAACG,GAAA,EACE,UAAA,CAACwJ,EAAM,iBACN,gBAAAzJ,EAACE,GAAA,EAAM,OAAM,cAAa,WAAU,OAAM,KAAK,GAAG,GAAG,IACnD,UAAA;AAAA,UAAA,gBAAAJ,EAAC,QAAA,EAAK,cAAW,SAAQ,MAAK,OAC5B,UAAA,gBAAAA,EAACmK,IAAA,EAAW,IAAI,EAAE,UAAU,GAAA,EAAG,CAAG,GACpC;AAAA,UACA,gBAAAnK,EAACS,GAAA,EAAK,SAAQ,SAAS,YAAK,yCAAA,CAAyC;AAAA,QAAA,EAAA,CACvE,EAAA,CAEJ;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,MACA,gBAAAT,EAACiK,MAAK,MAAM,GACT,cACC,gBAAAjK,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA,gBAAAA,EAACS,KAAM,UAAAG,EAAe+I,EAAM,QAAQ,QAAQ,EAAA,CAAE,GAChD,IAEA,gBAAAzJ,EAACE,GAAA,EAAM,YAAW,SAChB,UAAA;AAAA,QAAA,gBAAAF,EAACE,KAAM,YAAW,SAAQ,WAAU,OAAM,KAAK,GAC7C,UAAA;AAAA,UAAA,gBAAAJ;AAAA,YAACoK;AAAA,YAAA;AAAA,cACC,QAAA3K;AAAA,cACA,WAAWuG,EAAK;AAAA,cAChB,OAAOA,EAAK;AAAA,cACZ,WAAW;AAAA,cACX,MAAK;AAAA,cACL,WAAW+D;AAAA,cACX,IAAI;AAAA,gBACF,2BAA2B,EAAE,GAAG,GAAA;AAAA,cAAG;AAAA,cAErC,MAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAEP,gBAAA/J;AAAA,YAACqK;AAAA,YAAA;AAAA,cACC,cAAYrE,EAAK;AAAA,cACjB,OAAM;AAAA,cACN,SAAS,MAAM;AACb,gBAAAL,EAAQmB,EAAgB,iCAAiC,GACzD0C,EAAYD,CAAK;AAAA,cACnB;AAAA,cACA,IAAI,EAAE,GAAG,IAAI,GAAG,GAAA;AAAA,cAEhB,4BAACvB,IAAA,CAAA,CAAmB;AAAA,YAAA;AAAA,UAAA;AAAA,QACtB,GACF;AAAA,QACC,CAACvI,KACA,gBAAAS,EAACE,GAAA,EAAM,OAAM,cAAa,WAAU,OAAM,KAAK,GAAG,IAAI,IACpD,UAAA;AAAA,UAAA,gBAAAJ,EAAC,QAAA,EAAK,cAAW,SAAQ,MAAK,OAC5B,UAAA,gBAAAA,EAACmK,IAAA,EAAW,IAAI,EAAE,UAAU,GAAA,EAAG,CAAG,GACpC;AAAA,UACA,gBAAAnK,EAACS,GAAA,EAAK,SAAQ,SAAS,YAAK,yCAAA,CAAyC;AAAA,QAAA,EAAA,CACvE;AAAA,MAAA,EAAA,CAEJ,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,IAEA,gBAAAT;AAAA,MAACiH;AAAA,MAAA;AAAA,QACC,iBAAiB0C,EAAM;AAAA,QACvB,SAAS,MAAME,EAAwB,EAAK;AAAA,QAC5C,UAAU,CAACpD,MAAiB;AAC1B,UAAAgD,EAAkBF,GAAO9C,CAAI,GAC7BoD,EAAwB,EAAK;AAAA,QAC/B;AAAA,QACA,YAAYD;AAAA,QACZ,OAAO5D,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EACd,GACF;AAEJ,GAEAsE,KAAerI,EAASqH,EAAQ,GC9G1BiB,KAA4C,CAAC;AAAA,EACjD,YAAAC;AAAA,EACA,mBAAAf;AAAA,EACA,eAAAgB;AAAA,EACA,gBAAAf;AAAA,EACA,QAAAgB;AAAA,EACA,aAAA1J;AACF,MAAM;AACJ,QAAM,EAAE,cAAcgF,EAAA,IAASjG,EAAA,GACzB,EAAE,SAAA4F,EAAA,IAAYC,EAAA,GAEd,CAAC+E,GAAOC,CAAQ,IAAI3K,EAAM,SAAS,EAAE,GACrC,EAAE,UAAAsD,GAAU,UAAAC,EAAA,IAAaC,GAAA;AAE/BxD,SAAAA,EAAM,UAAU,MAAM;AACpB,QAAIyK,EAAO,UAAU;AACnB,MAAAE,EAAS5E,EAAK,mCAAmC,GACjDzC,EAASyC,EAAK,mCAAmC;AAAA,aACxC0E,EAAO,CAAC,EAAE,SAAS,GAAG;AAC/B,YAAMG,IAAYhK;AAAA,QAChBmF,EAAK;AAAA,QACLpF,EAAeI,EAAY,QAAQ,QAAQ;AAAA,MAAA;AAE7C,MAAA4J,EAASC,CAAS,GAClBtH,EAASsH,CAAS;AAAA,IACpB;AACE,MAAAD,EAAS,EAAE,GACXrH,EAAS,EAAE;AAAA,EAEf,GAAG,CAACmH,CAAM,CAAC,GAGT,gBAAAxK,EAACC,GAAA,EAAI,WAAU,wBACZ,UAAA;AAAA,IAAAqD;AAAA,IACAkH,EAAO,IAAI,CAACf,GAAOJ,MAClB,gBAAAvJ;AAAA,MAACsJ;AAAAA,MAAA;AAAA,QACC,OAAAC;AAAA,QAEA,mBAAAE;AAAA,QACA,aAAagB;AAAA,QACb,gBAAAf;AAAA,QACA,OAAAC;AAAA,MAAA;AAAA,MAJKJ;AAAA,IAAA,CAMR;AAAA,IACAoB,KACC,gBAAAzK,EAACE,GAAA,EAAM,SAAQ,oBAAmB,OAAM,cAAa,WAAU,OAAM,KAAK,GAAG,GAAG,IAE9E,UAAA;AAAA,MAAA,gBAAAJ,EAAC,QAAA,EAAK,cAAW,SAAQ,MAAK,OAC5B,UAAA,gBAAAA,EAACmK,IAAA,EAAW,IAAI,EAAE,UAAU,GAAA,EAAG,CAAG,GACpC;AAAA,MACA,gBAAAnK,EAACS,GAAA,EAAK,SAAQ,SAAS,UAAAkK,EAAA,CAAM;AAAA,IAAA,GAC/B;AAAA,IAEF,gBAAA3K,EAACG,GAAA,EAAI,GAAG,IACN,UAAA,gBAAAH;AAAA,MAACO;AAAA,MAAA;AAAA,QACC,cAAYyF,EAAK;AAAA,QACjB,SAAS,MAAM;AACb,UAAAL,EAAQmB,EAAgB,8BAA8B,GACtD0D,EAAA;AAAA,QACF;AAAA,QAEC,UAAAxE,EAAK;AAAA,MAAA;AAAA,IAAA,EACR,CACF;AAAA,EAAA,GACF;AAEJ,GAEA8E,KAAe7I,EAASsI,EAAY,GC3D9BQ,KAA0C,CAAC,EAAE,aAAA/J,QAAkB;AACnE,QAAM,EAAE,SAAA2E,EAAA,IAAYC,EAAA,GACd,EAAE,UAAArC,GAAU,UAAAC,EAAA,IAAaC,GAAA,GACzB,EAAE,kBAAAuH,GAAkB,oBAAAC,GAAoB,sBAAAC,EAAA,IAAyB3J,EAAA,GACjE,EAAE,QAAQF,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAC7C,EAAE,8BAAA8F,EAAA,IAAiCE,GAAA,GACnC,EAAE,YAAAN,EAAA,IAAeC,GAAA,GACjBhD,IAAQC,EAAA,GACRwI,IAAgB;AAAA,IACpB,GAAGnK;AAAA,IACH,QAAQA,EAAY,SAAS;AAAA,IAC7B,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,aAAaA,EAAY;AAAA,EAAA,GAGrBoK,IAAc;AAAA,IAClB,GAAGpK;AAAA,IACH,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,UAAUgF,EAAK;AAAA,IACf,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,aAAahF,EAAY;AAAA,IACzB,yBAAyB;AAAA,EAAA,GAGrB,CAACqK,GAAmBC,CAAoB,IAAIrL,EAAM,SAAS,EAAK,GAChE,CAACsL,GAAmBC,CAAoB,IAAIvL,EAAM,SAAS,EAAK,GAChE,CAACyK,GAAQe,CAAS,IAAIxL,EAAM,SAAwB,CAAA,CAAE,GAEtDyL,IAAiB,MAAM;AAC3B,UAAMC,IAAgB,CAAC,GAAGjB,CAAM;AAEhC,IAAAiB,EAAc,KAAK,EAAE,GAAGP,GAAa,GACrCO,EAAc,CAAC,EAAE,UAAU,GAC3BF,EAAUE,CAAa,GAEvBpI;AAAA,MACE1C;AAAA,QACEmF,EAAK;AAAA,QACL2F,EAAc;AAAA,MAAA;AAAA,IAChB;AAAA,EAEJ,GAEMC,IAAoB,CAACrC,MAAkB;AAC3C,QAAIA,IAAQ,GAAG;AACb,YAAMsC,IAAMnB,EAAOnB,CAAK,GAClBoC,IAAgB,CAAC,GAAGjB,CAAM;AAEhC,MAAAiB,EAAc,OAAOpC,GAAO,CAAC,GAC7BoC,EAAc,CAAC,EAAE,UAAUE,EAAI,QAC/BJ,EAAUE,CAAa,GAEvBpI;AAAA,QACE1C,EAAiBmF,EAAK,6CAA6CuD,IAAQ,CAAC;AAAA,MAAA;AAAA,IAEhF;AAAA,EACF,GAEMuC,KAAqB,CAACvC,GAAe9J,MAAmB;AAC5D,UAAMkM,IAAgB,CAAC,GAAGjB,CAAM;AAEhC,IAAAiB,EAAcpC,CAAK,EAAE,SAAS9J,GAC9BkM,EAAc,CAAC,EAAE,SACf3K,EAAY,SACZ2K,EAAc;AAAA,MACZ,CAACI,GAAapC,GAAoBJ,MAAUwC,KAAOxC,MAAU,IAAII,EAAM,SAAS;AAAA,MAChF;AAAA,IAAA,GAEJ8B,EAAUE,CAAa;AAAA,EACzB,GAEMK,KAAwB,CAACzC,GAAe0C,MAAyB;AACrE,UAAMN,IAAgB,CAAC,GAAGjB,CAAM,GAC1BhE,IAAWjB,EAAW,KAAK,CAACoB,MAASA,EAAK,SAASoF,CAAY;AACrE,IAAIvF,MACFiF,EAAcpC,CAAK,IAAI;AAAA,MACrB,GAAGoC,EAAcpC,CAAK;AAAA,MACtB,eAAe0C;AAAA,MACf,UAAUvF,EAAS;AAAA,MACnB,yBAAyBA,EAAS,eAAeuF;AAAA,IAAA,GAEnDR,EAAUE,CAAa,GACvBpI;AAAA,MACE1C;AAAA,QACEmF,EAAK;AAAA,QACLU,EAAS;AAAA,QACT6C,IAAQ;AAAA,MAAA;AAAA,IACV;AAAA,EAGN,GAEMzF,KAAc,MAAM;AACxB,QAAI9C,EAAY,eAAeA,EAAY,gBAAgB;AACzD,MAAAwK,EAAqB,EAAI;AACzB;AAAA,IACF;AAEA,IAAAC,EAAU,CAAC,EAAE,GAAGN,EAAA,GAAiB,EAAE,GAAGC,EAAA,CAAa,CAAC,GAEpDzF,EAAQY,EAAiB,iCAAiC;AAAA,MACxD,kBAAkBvF,EAAY;AAAA,IAAA,CAC/B,GACDsK,EAAqB,EAAI;AAAA,EAC3B,GAEM9D,IAAa,YAAY;AAC7B,IAAA7B,EAAQmB,EAAgB,+BAA+B,GACvD,MAAMkE,EAAiB,EAAE,GAAGhK,GAAa,gBAAgB,GAAA,GAAQ0J,CAAM,GACvEY,EAAqB,EAAK;AAAA,EAC5B,GAEMY,IAAe,YAAY;AAC/B,IAAIhB,MAEJvF,EAAQmB,EAAgB,iCAAiC,GACzD2E,EAAU,CAAC,EAAE,GAAGN,EAAA,GAAiB,EAAE,GAAGC,EAAA,CAAa,CAAC,GACpDE,EAAqB,EAAK;AAAA,EAC5B,GAEMa,IAAgB,YAAY;AAChC,IAAAxG,EAAQY,EAAiB,mCAAmC;AAAA,MAC1D,kBAAkBvF,EAAY;AAAA,IAAA,CAC/B;AACD,UAAMyF,IAAOzF,EAAY,eAAeA,EAAY;AACpD,UAAMiK,EAAmBxE,CAAI;AAAA,EAC/B,GAEM2F,KAAWnM,EAAM,QAAQ,MAAM;AACnC,UAAMoM,IAAmB3B,EAAO,KAAK,CAACf,MAAU,CAACA,EAAM,aAAa,GAC9D2C,IAAiB5B,EAAO,KAAK,CAACf,MAAUA,EAAM,UAAU,CAAC;AAE/D,WAAO0C,KAAoBC;AAAA,EAC7B,GAAG,CAAC5B,CAAM,CAAC,GAELpH,IAAUZ,EAAM,QAAQ,SAAS,SAAS,aAAa;AAE7D,SACE,gBAAA1C,EAACC,EAAM,UAAN,EACE,UAAAe,uBACE6D,GAAA,EAAS,gBAAgB,IAAM,gBAAgB,IAC9C,UAAA;AAAA,IAAA,gBAAA3E,EAAC4E,GAAA,EAAe,SAAShB,IACvB,UAAA;AAAA,MAAA,gBAAA9D,EAAC+E,GAAA,EACC,4BAACC,GAAA,EAAO,IAAI,EAAE,SAAS1B,EAAA,GAAW,SAAQ,WACxC,4BAAC2B,GAAA,EAAK,MAAK,cAAa,IAAI,EAAE,OAAO,eAAA,GAAkB,GACzD,EAAA,CACF;AAAA,MACA,gBAAAjF;AAAA,QAACkF;AAAA,QAAA;AAAA,UACC,SACElE,EAAY,kBAAkBA,EAAY,cACtCgF,EAAK,kCACLA,EAAK;AAAA,UAEX,WACEhF,EAAY,kBAAkBA,EAAY,cACtCgF,EAAK,qCACLA,EAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAGb,gBAAAhG,EAACmF,KACE,UAAAnE,EAAY,kBAAkBA,EAAY,cACzC,gBAAAhB,EAACiF,KAAK,MAAK,SAAA,CAAS,IAEpB,gBAAAjF,EAACiF,GAAA,EAAK,MAAK,iBAAgB,IAAI,EAAE,OAAO,eAAA,GAAkB,EAAA,CAE9D;AAAA,IAAA,GACF;AAAA,IAEA,gBAAA/E;AAAA,MAAC0B;AAAA,MAAA;AAAA,QACC,gBAAgBP,EAAW;AAAA,QAC3B,QAAQgK;AAAA,QACR,mBAAmBe,MAAYlB;AAAA,QAC/B,SAASgB;AAAA,QACT,iBAAiB1E;AAAA,QACjB,aAAanG,EAAW;AAAA,QACxB,eAAeA,EAAW;AAAA,QAC1B,OAAO2E,EAAK;AAAA,QAEX,UAAA;AAAA,UAAAxC;AAAA,UACD,gBAAAxD,EAAC0I,MAAwB,aAAA1H,GAA0B;AAAA,UACnD,gBAAAhB;AAAA,YAACuK;AAAAA,YAAA;AAAA,cACC,YAAYmB;AAAA,cACZ,mBAAmBM;AAAA,cACnB,eAAeJ;AAAA,cACf,gBAAgBE;AAAA,cAChB,QAAApB;AAAA,cACA,aAAA1J;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAhB;AAAA,MAACkH;AAAA,MAAA;AAAA,QACC,MAAM,EAAE,OAAOlB,EAAK,gCAAA;AAAA,QACpB,QAAQuF;AAAA,QACR,SAAS,MAAM;AACb,UAAA1F,EAA6B,EAAK,GAClC2F,EAAqB,EAAK;AAAA,QAC5B;AAAA,QACA,iBAAiBW;AAAA,QACjB,mBAAmB,MAAM;AACvB,UAAAxG,EAAQmB,EAAgB,6BAA6B;AAAA,QACvD;AAAA,QACA,aAAazF,EAAW;AAAA,QACxB,eAAeA,EAAW;AAAA,QAE1B,UAAA,gBAAArB,EAACK,IAAA,EAAE,SAAQ,aAEP,UAAAQ;AAAA,UACEmF,EAAK;AAAA,UACLhF,EAAY;AAAA,QAAA,EACd,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CAEJ;AAEJ,GAEAuL,KAAetK,EAAS8I,EAAW,GCrP7ByB,KAAS,MAAM;AACnB,QAAM9J,IAAQC,EAAA,GAER,EAAE,SAAAgD,EAAA,IAAYC,EAAA,GACd,EAAE,QAAA6G,EAAA,IAAWlL,EAAA,GACb,EAAE,cAAcyE,EAAA,IAASjG,EAAA,GAEzB,CAAC2M,GAAUC,CAAW,IAAI1M,EAAM,SAAS,EAAK,GAC9C,CAAC2M,GAASC,CAAU,IAAI5M,EAAM,SAAS,EAAE,GACzC,CAAC6M,GAAcC,CAAe,IAAI9M,EAAM,SAAS,EAAE,GAEnD+M,IAAW/M,EAAM,OAAyB,IAAI;AAEpDA,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAIyM,KACFM,GAAU,SAAS,MAAA;AAAA,EAEvB,GAAG,CAACN,CAAQ,CAAC;AAEb,QAAMO,IAAe,MAAM;AACzB,IAAAtH;AAAA,MACE+G,IACI5F,EAAgB,2CAChBA,EAAgB;AAAA,IAAA,GAEjB4F,KACHG,EAAW,EAAE,GAEfF,EAAY,CAACD,CAAQ;AAAA,EACvB,GAEMQ,IAAe,YAAY;AAC/B,IAAAvH,EAAQmB,EAAgB,6BAA6B,GACrD,MAAM2F,EAAOG,CAAO,GACpBD,EAAY,EAAK;AAAA,EACnB;AAEA1M,SAAAA,EAAM,UAAU,MAAM;AACpB,IAAA8M,EAAgBH,EAAQ,SAAS,KAAK5G,EAAK,mCAAmC,EAAE;AAAA,EAClF,GAAG,CAAC4G,CAAO,CAAC,GAGV,gBAAA1M,EAACC,GAAA,EAAI,WAAU,6BACb,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,YAAW;AAAA,QACX,SAASsC,EAAM,QAAQ,WAAW;AAAA,QAClC,WAAU;AAAA,QACV,gBAAe;AAAA,QACf,IAAI;AAAA,QACJ,IAAI;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAA1C,EAACS,GAAA,EAAK,MAAM,IAAO,UAAAuF,EAAK,gBAAe;AAAA,UACvC,gBAAAhG;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,iBAAemM;AAAA,cACf,cAAY1G,EAAK;AAAA,cACjB,SAASiH;AAAA,cAER,UAAAjH,EAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAA9F;AAAA,MAACgH;AAAA,MAAA;AAAA,QACC,MAAM,EAAE,OAAOlB,EAAK,iBAAA;AAAA,QACpB,QAAQ0G;AAAA,QACR,SAAS,MAAMC,EAAY,EAAK;AAAA,QAChC,iBAAiBO;AAAA,QACjB,mBAAmB,MAAMP,EAAY,EAAK;AAAA,QAE1C,UAAA;AAAA,UAAA,gBAAA3M;AAAA,YAACmJ;AAAAA,YAAA;AAAA,cACC,cAAYnD,EAAK;AAAA,cACjB,MAAK;AAAA,cACL,UAAU,CAACoD,MAA2CyD,EAAWzD,EAAE,OAAO,KAAK;AAAA,cAC/E,aAAapD,EAAK;AAAA,cAClB,IAAI,EAAE,OAAO,OAAA;AAAA,cACb,OAAO4G;AAAA,YAAA;AAAA,UAAA;AAAA,UAET,gBAAA5M,EAACK,IAAA,EAAE,IAAG,iBAAgB,IAAI,EAAE,OAAO,aAAA,GAAgB,SAAQ,aACxD,UAAAyM,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GAEAK,KAAelL,EAASuK,EAAM,GClFxBY,KAAsC,CAAC,EAAE,sBAAAC,GAAsB,aAAAC,QAAkB;AACrF,QAAM,EAAE,QAAQjM,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAE7CwN,IACJ,gBAAAvN;AAAA,IAACqK;AAAA,IAAA;AAAA,MACC,cAAYrE,EAAK,sBAAsB;AAAA,MACvC,SAAS,MAAMqH,EAAqB,EAAE;AAAA,MAEtC,4BAACG,IAAA,CAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAItB,2BACGrN,GAAA,EAAI,WAAU,6BAA4B,IAAI,IAAI,IAAI,IACrD,UAAA,gBAAAH;AAAA,IAACmJ;AAAAA,IAAA;AAAA,MACC,cAAY9H,EAAW;AAAA,MACvB,MAAK;AAAA,MACL,UAAU,CAAC+H,MAA2CiE,EAAqBjE,EAAE,OAAO,KAAK;AAAA,MACzF,aAAa/H,EAAW;AAAA,MACxB,WAAW;AAAA,QACT,OAAO;AAAA,UACL,kCACGoM,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAAzN,EAAC0N,IAAA,EAAW,OAAM,WAAA,CAAW,EAAA,CAC/B;AAAA,UAEF,cACE,gBAAA1N,EAACyN,IAAA,EAAe,UAAS,OAAM,IAAI,EAAE,SAAS,EAAA,GAC3C,UAAAH,IAAcC,IAAe,KAAA,CAChC;AAAA,QAAA;AAAA,MAEJ;AAAA,MAGF,IAAI,EAAE,SAAS,oBAAoB,OAAO,OAAA;AAAA,MAC1C,OAAOD;AAAA,IAAA;AAAA,EAAA,GAEX;AAEJ,GAEAK,KAAe1L,EAASmL,EAAS,GC/B3BQ,KAAgC,CAAC,EAAE,cAAAC,GAAc,cAAAC,GAAc,KAAAC,QAAU;AAC7E,QAAM,EAAE,SAAApI,EAAA,IAAYC,EAAA,GACd,EAAE,WAAAoI,GAAW,WAAAC,EAAA,IAAc1M,EAAA,GAC3B,EAAE,QAAQF,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAE7C,CAACmO,GAAUC,CAAW,IAAIlO,EAAM,SAAS,EAAK,GAC9C,CAACmO,GAAYC,CAAa,IAAIpO,EAAM,SAAS,EAAK,GAElD,CAAC2M,GAASC,CAAU,IAAI5M,EAAM,SAAS,EAAE,GACzC,CAAC6M,GAAcC,CAAe,IAAI9M,EAAM,SAAS,EAAE,GAEnDqO,IAAgB,YAAY;AAChC,IAAA3I,EAAQmB,EAAgB,kCAAkC,GACtDiH,KACF,MAAME,EAAU,EAAE,GAAGF,GAAK,MAAMnB,GAAS,GAE3CuB,EAAY,EAAK;AAAA,EACnB,GAEMI,IAAkB,YAAY;AAClC,IAAA5I,EAAQmB,EAAgB,+BAA+B,GACvD,MAAMkH,EAAUD,EAAI,IAAI,GACxBM,EAAc,EAAK;AAAA,EACrB;AAEApO,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAA8M,EAAgBH,EAAQ,SAAS,KAAK5G,EAAK,mCAAmC,EAAE;AAAA,EAClF,GAAG,CAAC4G,CAAO,CAAC;AAEZ,QAAM4B,IAAkB,MAAM;AAC5B,IAAA7I,EAAQmB,EAAgB,kCAAkC,GAC1D+F,EAAWkB,EAAI,IAAI,GACnBI,EAAY,EAAI;AAAA,EAClB,GAEMM,IAAoB,MAAM;AAC9B,IAAA9I,EAAQmB,EAAgB,oCAAoC,GAC5DuH,EAAc,EAAI;AAAA,EACpB;AAEA,SACE,gBAAAnO;AAAA,IAAC2E;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,iBACE,CAACkJ,EAAI,kBACH,gBAAA7N,EAACE,GAAA,EAAM,WAAU,OACf,UAAA;AAAA,QAAA,gBAAAJ;AAAA,UAACqK;AAAA,UAAA;AAAA,YACC,cAAY,QAAQ0D,EAAI,IAAI;AAAA,YAC5B,OAAM;AAAA,YACN,SAASS;AAAA,YAET,UAAA,gBAAAxO,EAAC0O,IAAA,EAAS,OAAM,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAE9B,gBAAA1O;AAAA,UAACqK;AAAA,UAAA;AAAA,YACC,cAAY,UAAU0D,EAAI,IAAI;AAAA,YAC9B,OAAM;AAAA,YACN,SAASU;AAAA,YAET,UAAA,gBAAAzO,EAACgI,IAAA,EAAmB,OAAM,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACxC,GACF;AAAA,MAIJ,UAAA;AAAA,QAAA,gBAAA9H;AAAA,UAAC4E;AAAA,UAAA;AAAA,YACC,gBAAcgJ,EAAa,SAASC,EAAI,IAAI;AAAA,YAC5C,SAAS,MAAMF,EAAaE,EAAI,IAAI;AAAA,YACpC,MAAK;AAAA,YAEL,UAAA;AAAA,cAAA,gBAAA/N,EAACmF,GAAA,EAAa,IAAI,EAAE,IAAI,KACtB,UAAA,gBAAAnF;AAAA,gBAAC2O;AAAAA,gBAAA;AAAA,kBACC,eAAa;AAAA,kBACb,SAASb,EAAa,SAASC,EAAI,IAAI;AAAA,kBACvC,MAAK;AAAA,kBACL,UAAU;AAAA,gBAAA;AAAA,cAAA,GAEd;AAAA,cACA,gBAAA/N,EAACkF,GAAA,EAAc,UAAA6I,EAAI,KAAA,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAG1B,gBAAA7N;AAAA,UAACgH;AAAA,UAAA;AAAA,YACC,MAAM,EAAE,OAAO,kBAAA;AAAA,YACf,QAAQgH;AAAA,YACR,SAAS,MAAMC,EAAY,EAAK;AAAA,YAChC,iBAAiBG;AAAA,YACjB,mBAAmB,MAAMH,EAAY,EAAK;AAAA,YAE1C,UAAA;AAAA,cAAA,gBAAAnO;AAAA,gBAACmJ;AAAAA,gBAAA;AAAA,kBACC,oBAAkB2D,IAAe,qBAAqB;AAAA,kBACtD,cAAY9G,EAAK;AAAA,kBACjB,MAAK;AAAA,kBACL,UAAU,CAACoD,MAA2CyD,EAAWzD,EAAE,OAAO,KAAK;AAAA,kBAC/E,aAAY;AAAA,kBACZ,IAAI,EAAE,OAAO,OAAA;AAAA,kBACb,OAAOwD;AAAA,gBAAA;AAAA,cAAA;AAAA,cAET,gBAAA5M,EAACK,IAAA,EAAE,IAAG,oBAAmB,IAAI,EAAE,OAAO,aAAA,GAAgB,SAAQ,aAC3D,UAAAyM,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGF,gBAAA9M;AAAA,UAACkH;AAAA,UAAA;AAAA,YACC,MAAM,EAAE,OAAOlB,EAAK,kBAAA;AAAA,YACpB,QAAQoI;AAAA,YACR,SAAS,MAAMC,EAAc,EAAK;AAAA,YAClC,iBAAiBE;AAAA,YACjB,mBAAmB,MACjB5I,EAAQmB,EAAgB,2CAA2C;AAAA,YAErE,aAAazF,EAAW;AAAA,YACxB,eAAeA,EAAW;AAAA,YAE1B,UAAA,gBAAArB,EAACS,GAAA,EAAK,UAAU,IAAQ,YAAK,sCAAA,CAAsC;AAAA,UAAA;AAAA,QAAA;AAAA,MACrE;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAmO,KAAe3M,EAAS2L,EAAM,GCjIxBiB,KAAwC,CAAC,EAAE,cAAAf,GAAc,cAAAD,QAAmB;AAChF,QAAM,EAAE,MAAAiB,EAAA,IAASvN,EAAA,GAEX,CAAC+L,GAAayB,CAAc,IAAI9O,EAAM,SAAS,EAAE,GAEjD+O,IAAeF,EAAK;AAAA,IAAO,CAACf,MAChCA,EAAI,KAAK,cAAc,SAAST,EAAY,YAAA,CAAa;AAAA,EAAA;AAG3D,SACE,gBAAApN,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,IAAA,gBAAAF;AAAA,MAACoN;AAAAA,MAAA;AAAA,QACC,sBAAsB,CAACpD,MAAU+E,EAAe/E,CAAK;AAAA,QACrD,aAAAsD;AAAA,MAAA;AAAA,IAAA;AAAA,sBAGDd,IAAA,EAAO;AAAA,sBAEPyC,IAAA,EAAM,IAAI,EAAE,WAAW,UACtB,UAAA,gBAAAjP,EAACkP,IAAA,EACE,UAAAF,EAAa,IAAI,CAACjB,MACjB,gBAAA7N,EAACD,EAAM,UAAN,EACC,UAAA;AAAA,MAAA,gBAAAD,EAAC4N,IAAA,EAAO,cAAAC,GAA4B,cAAAC,GAA4B,KAAAC,EAAA,CAAU;AAAA,wBACzEoB,IAAA,EAAQ,IAAI,EAAE,IAAI,KAAG,CAAG;AAAA,IAAA,EAAA,GAFNpB,EAAI,IAGzB,CACD,EAAA,CACH,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GAEAqB,KAAenN,EAAS4M,EAAU,GCvB5BQ,KAAwC,CAAC,EAAE,aAAArO,QAAkB;AACjE,QAAM,EAAE,SAAA2E,EAAA,IAAYC,EAAA,GACd,EAAE,MAAAkJ,GAAM,gBAAAQ,GAAgB,mBAAA9J,EAAA,IAAsBjE,EAAA,GAC9C,EAAE,QAAQF,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAC7C,EAAE,yBAAA+F,EAAA,IAA4BC,GAAA,GAE9BrD,IAAQC,EAAA,GAER,CAACsD,GAAMC,CAAO,IAAIjG,EAAM,SAAS,EAAK,GACtC,CAAC6N,GAAcyB,CAAe,IAAItP,EAAM,SAAmBe,EAAY,IAAI;AAEjFf,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAAsP,EAAgBvO,EAAY,IAAI;AAAA,EAClC,GAAG,CAACiF,GAAMjF,CAAW,CAAC;AAEtB,QAAMwO,IAAmB,CAAC/I,MAAiB;AACzC,UAAMqI,IAAO,CAAC,GAAGhB,CAAY,GAEvBvE,IAAQuE,EAAa,QAAQrH,CAAI;AACvC,IAAI8C,KAAS,IACXuF,EAAK,OAAOvF,GAAO,CAAC,IAEpBuF,EAAK,KAAKrI,CAAI,GAEhB8I,EAAgBT,CAAI;AAAA,EACtB,GAEMtH,IAAa,YAAY;AAC7B,QAAIxG,EAAY,aAAa,CAACA,EAAY,MAAM;AAC9C,MAAA8E,EAAwB,EAAE,GAAG9E,GAAa,MAAM8M,GAAc,GAC9D5H,EAAQ,EAAK;AACb;AAAA,IACF;AAEA,UAAMoJ,EAAexB,GAAc9M,EAAY,IAAI,GACnD,MAAMwE,EAAkB,EAAE,GAAGxE,GAAa,MAAM8M,GAAc,GAC9DnI,EAAQY,EAAiB,gCAAgC,EAAE,kBAAkBvF,EAAY,MAAM,GAC/FkF,EAAQ,EAAK;AAAA,EACf,GAEMuJ,IAAWxP,EAAM;AAAA,IACrB,MACEe,EAAY,KAAK;AAAA,MACf,CAAC0O,GAASnG,GAAOuE,MACf,GAAGgB,EAAK,KAAK,CAACjI,MAASA,EAAK,SAAS6I,CAAO,GAAG,IAAI,GACjDnG,IAAQuE,EAAa,SAAS,IAAI,QAAQ,EAC5C;AAAA,IAAA;AAAA,IAEN,CAACgB,GAAM9N,CAAW;AAAA,EAAA,GAGdsC,IAAUZ,EAAM,QAAQ,SAAS,SAAS,aAAa;AAE7D,SACE,gBAAAxC,EAAC2E,GAAA,EAAS,gBAAgB,IAAM,gBAAgB,IAC9C,UAAA;AAAA,IAAA,gBAAA3E;AAAA,MAAC4E;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAAa,EAAQmB,EAAgB,yBAAyB,GACjDZ,EAAQ,EAAI;AAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAlG,EAAC+E,GAAA,EACC,4BAACC,GAAA,EAAO,IAAI,EAAE,SAAS1B,EAAA,GAAW,SAAQ,WACxC,4BAAC2B,GAAA,EAAK,MAAK,eAAc,IAAI,EAAE,OAAO,eAAA,GAAkB,GAC1D,EAAA,CACF;AAAA,UACA,gBAAAjF;AAAA,YAACkF;AAAA,YAAA;AAAA,cACC,SAASc,EAAK;AAAA,cACd,WACE,gBAAAhG,EAACS,GAAA,EAAK,MAAM,IAAM,IAAI,EAAE,OAAO,eAAA,GAAkB,SAAQ,SACtD,UAAAO,EAAY,MAAM,SAAS,IAAIyO,IAAWzJ,EAAK,WAClD;AAAA,cAEF,WAAW,EAAE,SAAS,EAAE,SAAS,WAAW,UAAU,IAAI,YAAY,SAAA,EAAS;AAAA,YAAE;AAAA,UAAA;AAAA,UAEnF,gBAAAhG,EAACmF,GAAA,EACC,UAAA,gBAAAnF,EAACiF,GAAA,EAAK,MAAK,iBAAgB,IAAI,EAAE,OAAO,eAAA,EAAe,CAAG,EAAA,CAC5D;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAjF;AAAA,MAAC4B;AAAA,MAAA;AAAA,QACC,gBAAgBP,EAAW;AAAA,QAC3B,QAAQ4E;AAAA,QACR,SAAS,MAAMC,EAAQ,EAAK;AAAA,QAC5B,iBAAiBsB;AAAA,QACjB,aAAanG,EAAW;AAAA,QACxB,eAAeA,EAAW;AAAA,QAC1B,OAAO2E,EAAK;AAAA,QAEZ,UAAA,gBAAAhG,EAAC6O,IAAA,EAAW,cAAcW,GAAkB,cAAA1B,EAAA,CAA4B;AAAA,MAAA;AAAA,IAAA;AAAA,EAC1E,GACF;AAEJ,GAEA6B,KAAe1N,EAASoN,EAAU,GC9F5BO,KAA0C,CAAC,EAAE,aAAA5O,GAAa,UAAA6O,IAAW,SAAY;AACrF,QAAM,EAAE,mBAAArK,EAAA,IAAsBjE,EAAA,GACxB,EAAE,QAAQF,GAAY,cAAc2E,EAAA,IAASjG,EAAA,GAC7C,EAAE,SAAA4F,EAAA,IAAYC,EAAA,GACd,EAAE,UAAArC,GAAU,UAAAC,EAAA,IAAaC,GAAA,GAEzB,CAACqM,GAAWC,CAAY,IAAI9P,EAAM,SAAS,EAAK,GAChD,CAAC0I,GAAaqH,CAAc,IAAI/P,EAAM,SAAS,EAAE,GAEjD+M,IAAW/M,EAAM,OAAyB,IAAI;AAEpDA,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAI6P,MACFE,EAAehP,EAAY,WAAW,GACtCgM,GAAU,SAAS,MAAA;AAAA,EAEvB,GAAG,CAAC8C,CAAS,CAAC;AAEd,QAAMG,IAAa,MAAM;AACvB,IAAAF,EAAa,EAAI,GACjBpK,EAAQmB,EAAgB,qCAAqC,GAC7D,WAAW,MAAM,SAAS,eAAe,+BAA+B,GAAG,MAAA,GAAS,CAAC;AAAA,EACvF,GAEMU,IAAa,YAAY;AAC7B,IAAA7B,EAAQY,EAAiB,uCAAuC;AAAA,MAC9D,kBAAkBvF,EAAY;AAAA,IAAA,CAC/B,GACD,MAAMwE,EAAkB,EAAE,GAAGxE,GAAa,aAAA2H,GAAa,GACvDoH,EAAa,EAAK,GAClBxM,EAAS,GAAGyC,EAAK,WAAW,KAAK2C,CAAW,EAAE,GAC9C,WAAW,MAAM,SAAS,eAAe,qCAAqC,GAAG,MAAA,GAAS,CAAC;AAAA,EAC7F;AAEA,SACE,gBAAAzI,EAACC,GAAA,EAAI,WAAU,kCACZ,UAAA;AAAA,IAAAqD;AAAA,IACAsM,IACC,gBAAA5P,EAACgQ,IAAA,EAAU,KAAK,IACd,UAAA;AAAA,MAAA,gBAAAlQ;AAAA,QAACmJ;AAAA,QAAA;AAAA,UACC,cAAYnD,EAAK;AAAA,UACjB,IAAI;AAAA,UACJ,OAAOA,EAAK;AAAA,UACZ,MAAMA,EAAK;AAAA,UACX,UAAU,CAACoD,MAA2C4G,EAAe5G,EAAE,OAAO,KAAK;AAAA,UACnF,KAAK4D;AAAA,UACL,WAAW,EAAE,WAAW,EAAE,WAAW,MAAI;AAAA,UACzC,IAAI;AAAA,YACF,iBAAiB;AAAA,YACjB,0BAA0B,EAAE,sBAAsB,GAAG,yBAAyB,EAAA;AAAA,YAC9E,2BAA2B,EAAE,GAAG,GAAA;AAAA,YAChC,OAAO;AAAA,UAAA;AAAA,UAET,OAAOrE;AAAA,QAAA;AAAA,MAAA;AAAA,MAET,gBAAA3I;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,UAAU,CAACoI;AAAA,UACX,SAASnB;AAAA,UACT,IAAI;AAAA,YACF,qBAAqB;AAAA,YACrB,wBAAwB;AAAA,UAAA;AAAA,UAE1B,SAAQ;AAAA,UAEP,UAAAnG,EAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IACd,EAAA,CACF,IAEA,gBAAAnB,EAACE,GAAA,EAAM,YAAW,UAAS,WAAU,OAAM,KAAK,GAAG,IAAI,EAAE,WAAW,MAClE,UAAA;AAAA,MAAA,gBAAAJ,EAACS,GAAA,EAAK,MAAM,IAAO,UAAAO,EAAY,aAAY;AAAA,MAC1C,CAAC6O,KACA,gBAAA7P;AAAA,QAACqK;AAAA,QAAA;AAAA,UACC,cAAYrE,EAAK;AAAA,UACjB,IAAI;AAAA,UACJ,SAASiK;AAAA,UACT,IAAI,EAAE,OAAO,gBAAA;AAAA,UAEb,UAAA,gBAAAjQ,EAACiF,IAAA,EAAK,MAAK,UAAS,MAAM,GAAA,CAAI;AAAA,QAAA;AAAA,MAAA;AAAA,IAChC,EAAA,CAEJ;AAAA,EAAA,GAEJ;AAEJ,GAEAkL,KAAelO,EAAS2N,EAAW,GC7F7BQ,KAAkD,CAAC,EAAE,aAAApP,QAAkB;AAC3E,QAAM,EAAE,mBAAAwE,EAAA,IAAsBjE,EAAA,GACxB,EAAE,cAAcyE,EAAA,IAASjG,EAAA,GACzB,EAAE,SAAA4F,EAAA,IAAYC,EAAA,GAEdlD,IAAQC,EAAA,GACR0N,IAAa3N,EAAM,QAAQ,SAAS,QAEpC4N,IAAwB,YAAY;AACxC,IAAA3K,EAAQY,EAAiB,gCAAgC,EAAE,kBAAkBvF,EAAY,MAAM,GAC/F,MAAMwE,EAAkB,EAAE,GAAGxE,GAAa,YAAY,CAACA,EAAY,YAAY;AAAA,EACjF;AAEA,SACE,gBAAAhB,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA,gBAAAA;AAAA,IAACuQ;AAAA,IAAA;AAAA,MACC,cAAYvK,EAAK;AAAA,MACjB,gBAAchF,EAAY;AAAA,MAC1B,OAAOqP,IAAa,YAAY;AAAA,MAChC,SAASC;AAAA,MACT,UAAUtP,EAAY;AAAA,MACtB,IAAI;AAAA,QACF,cAAc;AAAA,QACd,OAAOqP,IAAa,iBAAiB;AAAA,QACrC,kBAAkB;AAAA,UAChB,OAAOA,IAAa,iBAAiB;AAAA,UACrC,iBAAiBA,IAAaG,GAAM9N,EAAM,QAAQ,QAAQ,MAAM,IAAI,IAAI;AAAA,UACxE,UAAU;AAAA,YACR,OAAO2N,IAAa,iBAAiB;AAAA,YACrC,iBAAiBA,IAAaG,GAAM9N,EAAM,QAAQ,QAAQ,MAAM,GAAG,IAAI;AAAA,UAAA;AAAA,QACzE;AAAA,QAEF,UAAU;AAAA,UACR,OAAO2N,IAAa,iBAAiB;AAAA,UACrC,iBAAiBA,IAAaG,GAAM9N,EAAM,QAAQ,QAAQ,MAAM,GAAG,IAAI;AAAA,QAAA;AAAA,MACzE;AAAA,MAEF,OAAM;AAAA,MAEN,UAAA,gBAAA1C,EAACyQ,IAAA,EAAiB,OAAM,UAAA,CAAU;AAAA,IAAA;AAAA,EAAA,GAEtC;AAEJ,GACAC,KAAezO,EAASmO,EAAe,GC3CjCO,KAAa,CACjB9Q,GACA+Q,GACAC,GACAC,IAAgB,IAChBC,IAAwC,YAEnCD,IAEH,gBAAA5Q,EAACD,EAAM,UAAN,EACC,UAAA;AAAA,EAAA,gBAAAC,EAAC2E,GAAA,EAAS,gBAAgB,IAAM,gBAAgB,IAC9C,UAAA;AAAA,IAAA,gBAAA7E,EAAC+E,GAAA,EACC,UAAA,gBAAA/E,EAACgF,GAAA,EAAO,IAAI,EAAE,SAAS,gBAAA,GAAmB,SAAQ,WAC/C,UAAAnF,EAAA,CACH,GACF;AAAA,IACA,gBAAAG;AAAA,MAACkF;AAAA,MAAA;AAAA,QACC,SAAA0L;AAAA,QACA,WAAAC;AAAA,QACA,WAAW,EAAE,SAAS,EAAE,SAAS,WAAW,UAAU,IAAI,YAAY,SAAA,EAAS;AAAA,MAAE;AAAA,IAAA;AAAA,EACnF,GACF;AAAA,EACA,gBAAA7Q,EAACmP,IAAA,EAAQ,SAAS4B,EAAA,CAAgB;AAAA,GACpC,IAhBgB,MAoBdC,KAAyB,CAAC,EAAE,aAAAhQ,QAA+C;AAC/E,QAAM,EAAE,cAAcgF,EAAA,IAASjG,EAAA,GACzB,EAAE,MAAA+O,EAAA,IAASvN,EAAA,GAEXkO,IAAWxP,EAAM,QAAQ,MAAM;AACnC,UAAMgR,IAAS,IAAI,IAAInC,EAAK,IAAI,CAACf,MAAQ,CAACA,EAAI,MAAMA,EAAI,IAAI,CAAC,CAAC;AAE9D,WAAO/M,EAAY,KAChB,IAAI,CAAC0O,MAAYuB,EAAO,IAAIvB,CAAO,CAAC,EACpC,OAAO,OAAO,EACd,KAAK,KAAK;AAAA,EACf,GAAG,CAACZ,GAAM9N,EAAY,IAAI,CAAC;AAE3B,SACE,gBAAAd,EAACgP,IAAA,EAAK,IAAI,EAAE,uBAAuB,EAAE,IAAI,IAAI,IAAI,GAAA,EAAG,GACjD,UAAA;AAAA,IAAAyB;AAAA,MACC,gBAAA3Q;AAAA,QAAC+G;AAAA,QAAA;AAAA,UACC,cAAc/F,EAAY;AAAA,UAC1B,MAAM;AAAA,UACN,IAAI,EAAE,OAAO,eAAA;AAAA,UACb,SAASgG,GAAqB;AAAA,QAAA;AAAA,MAAA;AAAA,MAEhChB,EAAK;AAAA,MACL,gBAAAhG,EAACS,KAAK,MAAM,IAAM,SAAQ,SACvB,UAAAO,EAAY,YAAYgF,EAAK,0BAAA,CAChC;AAAA,IAAA;AAAA,IAGD2K;AAAA,MACC,gBAAA3Q,EAACiF,MAAK,MAAK,kBAAiB,IAAI,EAAE,OAAO,kBAAkB;AAAA,MAC3De,EAAK;AAAA,MACL,gBAAAhG,EAACS,GAAA,EAAK,MAAM,IAAM,SAAQ,SACvB,UAAAyQ,GAAWzJ,GAAazG,EAAY,IAAI,GAAG0G,GAAkB,cAAc,EAAA,CAC9E;AAAA,IAAA;AAAA,IAGDiJ;AAAA,MACC,gBAAA3Q,EAACiF,MAAK,MAAK,WAAU,IAAI,EAAE,OAAO,kBAAkB;AAAA,MACpDe,EAAK;AAAA,MACL,gBAAAhG,EAACS,KAAK,MAAM,IAAM,SAAQ,SACvB,UAAAO,EAAY,QAAQgF,EAAK,UAAA,CAC5B;AAAA,MACA,EAAQhF,EAAY;AAAA,MACpBA,EAAY,MAAM,SAAS,IAAI,UAAU;AAAA,IAAA;AAAA,IAG1C2P;AAAA,MACC,gBAAA3Q,EAACiF,MAAK,MAAK,eAAc,IAAI,EAAE,OAAO,kBAAkB;AAAA,MACxDe,EAAK;AAAA,MACL,gBAAAhG,EAACS,GAAA,EAAK,MAAM,IAAM,SAAQ,SACvB,UAAAO,EAAY,MAAM,SAASyO,IAAWzJ,EAAK,UAAA,CAC9C;AAAA,MACA,EAAQhF,EAAY,MAAM;AAAA,MAC1B;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GAEAmQ,KAAelP,EAAS+O,EAAsB,GC1FjCI,KAA4C,CAAC;AAAA,EACxD,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AACX,MAAM;AACJ,QAAM9O,IAAQC,EAAA,GAER8O,IAAY;AAAA,IAChB,QAAQ;AAAA,MACN;AAAA,QACE,MAAMJ,EAAK,IAAI,CAAC,EAAE,OAAArH,EAAA,MAAYA,CAAK;AAAA,QACnC,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,QACE,MAAMqH,EAAK,IAAI,CAAC,EAAE,OAAAK,EAAA,MAAYA,CAAK;AAAA,QACnC,WAAW;AAAA,QACX,kBAAkB;AAAA,MAAA;AAAA,IACpB;AAAA,EACF,GAGIC,IAAaN,EAAK;AAAA,IAAI,CAACO,GAAGrI,MAC9BA,MAAU8H,EAAK,SAAS,IAAIC,EAAM5O,CAAK,IAAI,GAAG4O,EAAM5O,CAAK,CAAC;AAAA,EAAA,GAGtDmP,IAAwB,CAACC,GAAWC,MAAc;AACtD,QAAID,KAAK,KAAKC,KAAK,EAAG,QAAO;AAC7B,UAAMC,IAAI,KAAK,IAAI,GAAGF,IAAI,GAAGC,IAAI,CAAC;AAClC,WAAO,IAAIC,CAAC,OAAOF,IAAIE,CAAC,OAAOF,CAAC,MAAMA,CAAC,IAAIE,CAAC,KAAKF,CAAC,IAAIC,CAAC,OAAOA,CAAC,OAAOC,CAAC,SAASA,CAAC;AAAA,EACnF;AAEA,SACE,gBAAAhS;AAAA,IAACI;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,OAAAmR;AAAA,QACA,QAAAC;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAxR;AAAA,QAACiS;AAAA,QAAA;AAAA,UACC,eAAe;AAAA,YACb,GAAG;AAAA,YACH,GAAG;AAAA,UAAA;AAAA,UAEL,QAAAT;AAAA,UACA,QAAQ;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO;AAAA,YACP,KAAK;AAAA,UAAA;AAAA,UAEP,QAAQC,EAAU;AAAA,UAClB,OAAO;AAAA,YACL,KAAK,CAAC,EAAE,YAAAS,GAAY,GAAGC,QAAY;AACjC,oBAAM,EAAE,WAAAC,EAAA,IAAcf,EAAKa,EAAW,SAAS;AAC/C,qBACE,gBAAAlS,EAAC,KAAA,EAAE,cAAYoS,GACb,UAAA,gBAAApS;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,GAAG6R,EAAsBM,EAAM,OAAOA,EAAM,MAAM;AAAA,kBAClD,MAAMR,EAAWO,EAAW,SAAS;AAAA,kBACrC,WAAW,aAAaC,EAAM,CAAC,KAAKA,EAAM,CAAC;AAAA,gBAAA;AAAA,cAAA,GAE/C;AAAA,YAEJ;AAAA,YACA,eAAe,CAAC,EAAE,MAAAE,GAAM,GAAGC,QAAgB;AACzC,oBAAMZ,IAAQL,EAAKA,EAAK,SAAS,CAAC,GAAG;AACrC,qBACE,gBAAArR;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACE,GAAGsS;AAAA,kBACJ,OACE;AAAA,oBACE,GAAGA,EAAU;AAAA,oBACb,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,YAAYZ,MAAUW,IAAO,SAAS;AAAA,kBAAA;AAAA,kBAIzC,UAAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAGP;AAAA,UAAA;AAAA,UAEF,IAAI;AAAA,YACF,0FACE;AAAA,cACE,SAAS;AAAA,YAAA;AAAA,UACX;AAAA,UAEJ,OAAAd;AAAA,UACA,OAAOE,EAAU;AAAA,UACjB,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,QAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IACxC;AAAA,EAAA;AAGN,GC5Gac,KAAgB;AAAA,EAC3B,0BAA0B;AAC5B,GAEaC,KAAyC,CAACxM,GAAkByM,MAAgB;AACvF,MAAIA;AACF,YAAQA,EAAK,UAAA;AAAA,MACX,KAAKF,GAAc,0BAA0B;AAC3C,cAAMG,IAAaD,EAAK,cACnBE,GAAgBF,EAAK,WAAW,IACjC,CAAA,GACEhB,IAAYmB,GAAeF,GAAYD,EAAK,SAAS,aAAa;AAExE,eAAO;AAAA,UACL,cACE,gBAAAzS;AAAA,YAACoR;AAAA,YAAA;AAAA,cACC,OAAO,CAAC1O,MACCA,EAAM,QAAQ,WAAW;AAAA,cAElC,MAAM+O,EAAU,MAAM,EAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAG5B,YAAAiB;AAAA,UACA,WAAAjB;AAAA,UACA,cAAczL,EAAK;AAAA,QAAA;AAAA,MAEvB;AAAA,MACA;AACE,eAAO;AAAA,IACT;AAGJ,SAAO;AACT,GCyBM6M,KAAwD,CAAC;AAAA,EAC7D,eAAAC,IAAgB1T;AAAA,EAChB,oBAAA2T,IAAqB;AAAA,EACrB,YAAAC,IAAa7T;AAAA,EACb,aAAA6B;AACF,MAAM;AACJ,QAAM,EAAE,SAAA2E,EAAA,IAAYC,EAAA,GACd,EAAE,cAAAqN,EAAA,IAAiBC,GAAA,GACnB,EAAE,cAAAC,EAAA,IAAiBC,GAAA,GACnB,EAAE,UAAUpN,GAAM,QAAQ3E,GAAY,eAAegS,EAAA,IAAiBtT,EAAA,GAEtE,EAAE,oBAAAuT,EAAA,IAAuB5N,GAAA,GACzB;AAAA,IACJ,OAAA1C;AAAA,IACA,iBAAAuQ;AAAA,IACA,sBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kCAAAC;AAAA,IACA,UAAAzQ;AAAA,EAAA,IACE1B,EAAA,GAEE,CAACoS,GAAgCC,CAAiC,IAAI3T,EAAM,SAAS,EAAK,GAE1F,CAAC4T,GAAWC,CAAY,IAAI7T,EAAM,SAAS,EAAK,GAChD,CAAC8T,GAAiBC,EAAkB,IAAI/T,EAAM,SAAS,EAAK,GAC5DyC,KAAQC,EAAA,GAERsR,KAAiBjT,GAAa,UAAUA,EAAY,OAAO,SAAS,GAEpEyR,IAAOxS,EAAM,QAAQ,MAClBsT,EAAgB,KAAK,CAACd,MAASA,EAAK,gCAAgCzR,EAAY,IAAI,GAC1F,CAACuS,GAAiBvS,CAAW,CAAC,GAE3BkT,IAAe1B,GAAuCnR,GAAYoR,CAAI,GAEtE,CAAC0B,GAAkBC,EAAmB,IAAInU,EAAM;AAAA,IACpDiU,IAAeA,EAAa,WAAW,SAAS,IAAI;AAAA,EAAA;AAGtDjU,EAAAA,EAAM;AAAA,IACJ,MACE0F,EAAQY,EAAiB,0BAA0B,EAAE,kBAAkBvF,EAAY,MAAM;AAAA,IAC3F,CAAA;AAAA,EAAC,GAGHf,EAAM,UAAU,MAAM;AACpB,QAAI,CAACiU,KAAgBA,EAAa,WAAW,WAAW,EAAG;AAE3D,UAAM,EAAE,MAAMG,EAAA,IAA2BH,EAAa,WAAWC,CAAgB,GAE3EG,IAAQ/P,GAAa8P,CAAsB;AAEjD,IAAIE,GAASD,GAAOb,CAAe,MACjCK,EAAa,EAAI,GACjBJ,EAAiCY,CAAK,EAAE,QAAQ,MAAM;AACpD,MAAAR,EAAa,EAAK;AAAA,IACpB,CAAC;AAAA,EAEL,GAAG,CAACK,GAAkBD,GAAcT,CAAe,CAAC;AAGpD,QAAMe,IACJ1B,EAAc,SAAS5T,GAAc,cAAc,KAAK,CAAC8B,GAAa,gBAClE8R,EAAc,OAAO,CAAC1N,MAAWA,MAAWlG,GAAc,cAAc,IACxE4T,GAEA2B,IAA2BC,GAAQ,MAAM;AAC7C,QAAIR,GAAc;AAChB,YAAMxN,IAAW4M,EAAmB;AAAA,QAClC,CAACqB,OAAQA,GAAI,SAAS3T,EAAY;AAAA,MAAA,GAE9B4T,IAAOnC,GAAM,SAAS,kBAAkB,GACxCoC,KAAgB7T,EAAY;AAElC,UAAI8T,KAAazB,EAAa,QAAQ;AACtC,MAAIwB,KAAgBD,IAAO,MACzBE,KAAazB,EAAa,QAAQ;AAEpC,YAAM0B,KACJH,MAAS,IAAI,IAAI,KAAK,MAAO,KAAK,IAAIC,KAAgBD,CAAI,IAAIA,IAAQ,GAAG;AAE3E,aAAO,EAAE,UAAAlO,GAAU,kBAAAqO,IAAkB,YAAAD,GAAA;AAAA,IACvC;AACA,WAAO;AAAA,EACT,GAAG,CAACZ,GAAcZ,CAAkB,CAAC,GAE/B0B,IAAuBN,GAAQ,MAAM;AACzC,QAAI,CAACR,GAAc,YAAY;AAC7B,aAAO,CAAA;AAGT,UAAM,EAAE,MAAMe,GAAwB,MAAMZ,MAC1CH,EAAa,WAAWC,CAAgB,GAEpCG,KAAQ/P,GAAa8P,CAAsB,GAC3Ca,KAAM1Q,GAAW6P,CAAsB;AAE7C,WAAOb,EAAqB,OAAO,CAAC9R,OAEhCA,GAAE,QAAQ6F,GAAY+M,EAAK,KAC3B5S,GAAE,QAAQ6F,GAAY2N,EAAG,KACzBxT,GAAE,SAASuT,CAEd;AAAA,EACH,GAAG,CAACd,GAAkBD,GAAcV,GAAsBK,CAAS,CAAC;AAEpE,MAAI,CAACZ;AACH,6BAAQkC,IAAA,EAAO;AAGjB,QAAMC,IAAyBC,GAAiBlC,GAAc,0BAA0B,GAElF7P,IAAUZ,GAAM,QAAQ,SAAS,SAAS,aAAa;AAE7D,SACE,gBAAAxC,EAACC,GAAA,EAAI,WAAU,8BAA6B,OAAM,QAC/C,UAAA;AAAA,IAAAa,uBACEZ,GAAA,EACC,UAAA;AAAA,MAAA,gBAAAF,EAACE,GAAA,EAAM,KAAK,IAAI,GAAG,IACjB,UAAA;AAAA,QAAA,gBAAAJ,EAACiP,MAAM,WAAW,GAAG,IAAI,EAAE,OAAO,MAChC,UAAA,gBAAAjP;AAAA,UAAC8B;AAAA,UAAA;AAAA,YACC,cAAcd,EAAY,2BAA2B;AAAA,YACrD,cAAcA,EAAY,iBAAiB;AAAA,YAC3C,MAAM;AAAA,UAAA;AAAA,QAAA,GAEV;AAAA,QAEA,gBAAAhB,EAAC4P,IAAA,EAAY,aAAA5O,GAA0B,UAAUoU,EAAA,CAAwB;AAAA,QAEzE,gBAAAlV,EAACE,GAAA,EAAM,WAAU,OAAM,gBAAe,iBAAgB,IAAI,EAAE,WAAW,GAAA,GACrE,UAAA;AAAA,UAAA,gBAAAF,EAACG,MAAE,OAAOW,EAAY,WAAW,iBAAiB,gBAAgB,SAAQ,MACvE,UAAA;AAAA,YAAAA,EAAY,WAAW,MAAM;AAAA,YAC7BJ,EAAeI,EAAY,QAAQ,QAAQ;AAAA,UAAA,GAC9C;AAAA,UACC,CAACoU,KAA0BrC,KAC1B,gBAAA/S,EAACoQ,MAAgB,aAAApP,EAAA,CAA0B;AAAA,QAAA,GAE/C;AAAA,QAECkT,GAAc,gBACb,gBAAAlU;AAAA,UAACsV;AAAA,UAAA;AAAA,YACC,cAAcpB,EAAa;AAAA,YAC3B,aACErT;AAAA,cACEwS,EAAa,QAAQ;AAAA,cACrBoB,EAA0B;AAAA,cAC1B,gBAAAzU,EAAC,UAAA,EAAQ,UAAAyU,EAA0B,iBAAA,CAAiB;AAAA,YAAA;AAAA,YAGxD,cAAcP,EAAa;AAAA,YAC3B,YAAY,MAAM;AAChB,cAAAN,EAAkC,EAAI;AAAA,YACxC;AAAA,YACA,OAAOnB,EAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAGjB,gBAAAvS,EAACE,GAAA,EAAM,IAAI,EAAE,SAASkD,GAAS,cAAc,OAAO,KAAK,GAAG,GAAG,EAAA,GAC7D,UAAA;AAAA,UAAA,gBAAAtD,EAACS,GAAA,EAAK,MAAM,IACT,UAAA,GAAGO,EAAY,OAAO;AAAA,kBAErBiT,KACIjT,EAAY,SACZ,IAAS,OAAO,CAAC,EAAE,OAAOA,EAAY,UAAU,EAAE,CACxD,GAAA,CACF;AAAA,UACA,gBAAAhB,EAACS,KAAK,MAAM,IAAM,UAAU,IAAM,SAAQ,QACvC,UAAAO,EAAY,iBAAA,CACf;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAEA,gBAAAhB,EAACiP,IAAA,EAAM,QAAQ,IAAM,IAAI,EAAE,WAAW,OAAA,GACnC,UAAAmG,IACC,gBAAApV,EAACgR,IAAA,EAAuB,aAAAhQ,GAA0B,IAElD,gBAAAhB,EAACkP,IAAA,EACE,UAAA8D,EAAW,IAAI,CAAC5N,GAAQmE,MACvB,gBAAArJ,EAACD,EAAM,UAAN,EACE,UAAA;AAAA,QAAAmF,MAAWnG,GAAW,YAAY,gBAAAe,EAACsF,IAAA,EAAe,aAAAtE,GAA0B;AAAA,QAC5EoE,MAAWnG,GAAW,QAAQ,gBAAAe,EAACmH,MAAW,aAAAnG,GAA0B;AAAA,QACpEoE,MAAWnG,GAAW,QAAQ,gBAAAe,EAACgJ,MAAW,aAAAhI,GAA0B;AAAA,QACpEoE,MAAWnG,GAAW,QAAQ,gBAAAe,EAACqP,MAAW,aAAArO,GAA0B;AAAA,QACrE,gBAAAhB;AAAA,UAACmP;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS5F,IAAQyJ,EAAW,SAAS,IAAI,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACrD,EAAA,GARmB5N,CASrB,CACD,EAAA,CACH,GAEJ;AAAA,MAEC,CAACgQ,KAA0BZ,EAAqB,SAAS,KACxD,gBAAAtU,EAACD,EAAM,UAAN,EACC,UAAA;AAAA,QAAA,gBAAAD,EAACS,GAAA,EAAK,MAAM,IAAM,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,SAAQ,SAC9C,UAAAuF,EAAK,SACR;AAAA,QAEA,gBAAAhG,EAACiP,IAAA,EAAM,QAAQ,IAAM,IAAI,EAAE,WAAW,OAAA,GACpC,UAAA,gBAAA/O,EAACgP,IAAA,EACE,UAAA;AAAA,UAAAsF,EAAqB,IAAI,CAACpP,GAAQmE,MACjC,gBAAArJ,EAACD,EAAM,UAAN,EACE,UAAA;AAAA,YAAAmF,MAAWlG,GAAc,kBACxB,gBAAAc,EAACkC,IAAA,EAAwB,aAAAlB,GAA0B;AAAA,YAEpDoE,MAAWlG,GAAc,oBACxB,gBAAAc,EAAC+K,MAAY,aAAA/J,GAA0B;AAAA,YAExCoE,MAAWlG,GAAc,mBACxB,gBAAAc,EAACqI,MAAc,aAAArH,GAA0B;AAAA,YAE1CoE,MAAWlG,GAAc,gBACxB,gBAAAc,EAACkI,MAAiB,aAAAlH,GAA0B;AAAA,YAE9C,gBAAAhB;AAAA,cAACmP;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS5F,IAAQiL,EAAqB,SAAS,IAAI,UAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UAC/D,EAAA,GAhBmBpP,CAiBrB,CACD;AAAA,UAUApE,EAAY,aACX,CAACA,EAAY,eACb,CAACA,EAAY,kBAAkB,gBAAAhB,EAAC6H,IAAA,EAAa,aAAA7G,EAAA,CAA0B;AAAA,QAAA,EAAA,CAC3E,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GAEJ;AAAA,IAEDyR,KAAQyB,KACP,gBAAAlU;AAAA,MAACuV;AAAAA,MAAA;AAAA,QACC,WAAWrE;AAAA,UACTgD,GAAc,WAAWC,CAAgB,GAAG;AAAA,UAC5CzM,GAAkB;AAAA,QAAA;AAAA,QAEpB,eAAe;AAAA,UACb,SAAS;AAAA,YACP,SAAS+K,EAAK,QAAQ;AAAA,YACtB,kBAAkB7R,EAAe6R,EAAK,QAAQ,gBAAgB,KAAK;AAAA,UAAA;AAAA,UAErE,OAAOgC,EAA0B,UAAU,SAAS;AAAA,UACpD,MAAMP,EAAa;AAAA,UACnB,QAAQ,EAAE,QAAQ,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,GAAA;AAAA,UAChD,oBAAoBb,EAAa,QAAQ;AAAA,UACzC,YAAY,CAAC9J,MAAU;AACrB,YAAA6K,GAAoB7K,CAAK;AAAA,UAC3B;AAAA,UACA,kBAAkB8J,EAAa,QAAQ;AAAA,UACvC,gBAAgB;AAAA,QAAA;AAAA,QAElB,MAAM;AAAA,UACJ,SAASZ,EAAK;AAAA,UACd,YAAY;AAAA,YACV,eAAezR,EAAY,iBAAiB;AAAA,YAC5C,eAAeA,EAAY,iBAAiB;AAAA,YAC5C,aAAaA,EAAY,eAAe;AAAA,UAAA;AAAA,QAC1C;AAAA,QAEF,MAAMkT,EAAa;AAAA,QACnB,sBAAsBC;AAAA,QACtB,MACE,gBAAAnU;AAAA,UAAC8B;AAAA,UAAA;AAAA,YACC,KAAKd,EAAY,eAAe;AAAA,YAChC,cAAcA,EAAY,iBAAiB;AAAA,YAC3C,cAAcA,EAAY,iBAAiB;AAAA,YAC3C,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAGV,QAAQ2S;AAAA,QACR,SAAS,MAAM;AACb,UAAAC,EAAkC,EAAK,GACvCQ,GAAoBF,EAAc,WAAW,SAAS,CAAC;AAAA,QACzD;AAAA,QACA,aAAa,CAAC3K,MAAkB;AAC9B,UAAA6K,GAAoB7K,CAAK;AAAA,QAC3B;AAAA,QACA,YACGwK,IASG,SARA;AAAA,UACE,SAASlT;AAAA,YACPwS,EAAa,QAAQ;AAAA,YACrB,gBAAArT,EAAC,UAAA,EAAQ,UAAAqT,EAAa,QAAQ,mBAAkB;AAAA,YAChD,gBAAArT,EAAC,UAAA,EAAQ,UAAAyS,EAAK,qBAAqB,YAAA,CAAY;AAAA,UAAA;AAAA,UAEjD,WAAW,MAAMuB,GAAmB,EAAI;AAAA,QAAA;AAAA,QAIhD,OAAOX,EAAa,QAAQ;AAAA,QAC5B,sBAAsB;AAAA,UACpB,YAAYQ;AAAA,UACZ,cAAc;AAAA,UACd,aAAamB;AAAA,QAAA;AAAA,MACf;AAAA,IAAA;AAAA,IAGJ,gBAAAhV;AAAA,MAACwV;AAAA,MAAA;AAAA,QACC,cAAc,EAAE,UAAU,UAAU,YAAY,QAAA;AAAA,QAChD,kBAAkB;AAAA,QAClB,SAAS,MAAMvS,EAAS,EAAE;AAAA,QAC1B,MAAM,EAAQD;AAAA,QAEd,UAAA,gBAAAhD,EAACyV,IAAA,EAAM,WAAU,IAAG,SAAS,MAAMxS,EAAS,EAAE,GAAG,UAAS,WAAU,SAAQ,UACzE,UAAAD,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GAEA0S,KAAezT,EAAS4Q,EAAkB;"}
|
|
1
|
+
{"version":3,"file":"TransactionDetails-DT-MQqOB.mjs","sources":["../src/transactions/constants/Actions.ts","../src/budgets/components/shared/BudgetDetailsTopSection.tsx","../src/budgets/components/MerchantBudgetDetailsDrawer.tsx","../src/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.tsx","../src/transactions/components/shared/transactiondetails/actions/CategoryAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DateAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DeleteAction.tsx","../src/transactions/components/shared/transactiondetails/actions/DeleteLogoAction.tsx","../src/transactions/components/shared/transactiondetails/actions/ExcludeAction.tsx","../src/transactions/components/shared/transactiondetails/TransactionAmountHeader.tsx","../src/transactions/components/shared/transactiondetails/actions/MemoAction.tsx","../src/transactions/components/splitmanager/SplitRow.tsx","../src/transactions/components/splitmanager/SplitManager.tsx","../src/transactions/components/shared/transactiondetails/actions/SplitAction.tsx","../src/transactions/components/tagmanager/Header.tsx","../src/transactions/components/tagmanager/SearchBox.tsx","../src/transactions/components/tagmanager/TagRow.tsx","../src/transactions/components/tagmanager/TagManager.tsx","../src/transactions/components/shared/transactiondetails/actions/TagsAction.tsx","../src/transactions/components/shared/transactiondetails/Description.tsx","../src/transactions/components/shared/transactiondetails/FlagTransaction.tsx","../src/transactions/components/shared/transactiondetails/TransactionDetailsView.tsx","../src/common/components/TinyBarChart.tsx","../src/transactions/components/shared/getEmbeddedInstanceSlotByBeatTemplates.tsx","../src/transactions/components/shared/TransactionDetails.tsx"],"sourcesContent":["export enum TopActions {\n Category,\n Date,\n Memo,\n Tags,\n}\n\nexport enum BottomActions {\n MerchantBudget,\n SplitTransaction,\n HideTransaction,\n MerchantLogo,\n}\n\nexport const DEFAULT_TOP_ACTIONS = [\n TopActions.Category,\n TopActions.Date,\n TopActions.Memo,\n TopActions.Tags,\n] as TopActions[]\n\nexport const DEFAULT_BOTTOM_ACTIONS = [\n BottomActions.SplitTransaction,\n BottomActions.HideTransaction,\n BottomActions.MerchantLogo,\n] as BottomActions[]\n\nexport const CHEVRON_ICON_SIZE = 20\nexport const ICON_SIZE = 28\n","import React from 'react'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { H2, P, Text } from '@mxenabled/mxui'\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../../common'\nimport { StatusIndicator } from '../../../insights'\nimport { fromTimestampToMonthYear } from '../../../core/utils/DateUtil'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface BudgetDetailsTopAndMiddleSectionProps {\n startDate: number\n onViewHistory?: () => void\n totalTransaction: number\n amount: number\n spentPercentage: number\n remainingAmount: number\n iconColor?: string\n icon: React.ReactNode\n}\n\nexport const BudgetDetailsTopSection = ({\n startDate,\n onViewHistory,\n totalTransaction,\n amount,\n spentPercentage,\n remainingAmount,\n iconColor,\n icon,\n}: BudgetDetailsTopAndMiddleSectionProps) => {\n const { budgets: budgetsCopy } = useGlobalCopyStore()\n\n return (\n <React.Fragment>\n <Box\n sx={{\n bgcolor: 'background.paper',\n borderBottomColor: 'divider',\n borderBottomStyle: 'solid',\n borderBottomWidth: 1,\n }}\n >\n <Stack\n sx={{\n alignItems: 'center',\n flexDirection: 'row',\n gap: 12,\n justifyContent: 'space-between',\n pt: 16,\n px: 24,\n }}\n >\n <P bold={true} variant=\"subtitle1\">\n {fromTimestampToMonthYear(startDate)}\n </P>\n {onViewHistory && (\n <Button endIcon={<ChevronRight />} onClick={onViewHistory} sx={{ height: 28 }}>\n <Text bold={true} variant=\"body2\">\n {budgetsCopy.spending_history}\n </Text>\n </Button>\n )}\n </Stack>\n <StatusIndicator\n amount={\n <Stack sx={{ alignItems: 'baseline', flexDirection: 'row', gap: 4 }}>\n <H2>{formatCurrency(totalTransaction, '0,0.00')}</H2>\n <P color=\"text.secondary\" variant=\"body2\">\n /\n </P>\n <P color=\"text.secondary\" variant=\"body2\">\n {formatCurrency(amount, '0,0.00')}\n </P>\n </Stack>\n }\n completeColor={`${iconColor}.main`}\n icon={icon}\n label={budgetsCopy.spent_label}\n leftLabel={\n buildDynamicCopy(budgetsCopy.percent_spent, spentPercentage.toFixed()) as string\n }\n percentComplete={spentPercentage}\n rightLabel={\n buildDynamicCopy(\n budgetsCopy.balance_left,\n formatCurrency(remainingAmount, '0,0.00'),\n ) as string\n }\n sx={{\n pb: 24,\n pt: 16,\n px: 24,\n }}\n />\n </Box>\n </React.Fragment>\n )\n}\n","import React from 'react'\n\nimport { MerchantLogo } from '@mxenabled/mxui'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { BudgetDetailsTopSection } from './shared/BudgetDetailsTopSection'\n\nimport { getRemainingAmountSpentPercentage } from '../../core/utils/BudgetUtil'\n\nimport { useGlobalCopyStore, useTransactionStore } from '../../common'\nimport { type Transaction } from '../../core'\nimport { Drawer } from '../../common/components'\nimport type { MerchantBudget } from '../../core/types/Budget'\nimport { TransactionList } from '../../transactions'\nimport { CurrencyDialogAction } from '../../transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\ninterface MerchantBudgetDetailsDrawerProps {\n merchantBudget: MerchantBudget\n transaction: Transaction\n onClose: () => void\n isOpen: boolean\n setCurrencyDialogAction: (action: CurrencyDialogAction) => void\n renderingToast?: () => React.ReactNode\n}\n\nexport const MerchantBudgetDetailsDrawer = ({\n merchantBudget,\n transaction,\n onClose,\n isOpen,\n setCurrencyDialogAction,\n renderingToast,\n}: MerchantBudgetDetailsDrawerProps) => {\n const { budgets: budgetsCopy, common: commonCopy } = useGlobalCopyStore()\n\n const { sortedTransactions } = useTransactionStore()\n\n const transactionTotal = React.useMemo(() => {\n return sortedTransactions.reduce((acc, t) => {\n if (!t.parent_guid) {\n return acc + t.amount\n }\n return acc\n }, 0)\n }, [sortedTransactions])\n\n const { remainingAmount, spentPercentage, iconColor } = getRemainingAmountSpentPercentage(\n transactionTotal,\n merchantBudget.amount ?? 0,\n )\n\n return (\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n footerStyles={{\n px: 24,\n py: 16,\n }}\n isOpen={isOpen}\n onClose={onClose}\n onPrimaryAction={() => setCurrencyDialogAction(CurrencyDialogAction.EDIT)}\n onSecondaryAction={() => {\n setCurrencyDialogAction(CurrencyDialogAction.DELETE)\n }}\n primaryText={budgetsCopy.details_edit_button}\n secondaryColor=\"error\"\n secondaryText={budgetsCopy.details_delete_button}\n sx={{\n '& .list-wrapper': {\n pr: 24,\n },\n }}\n title={\n buildDynamicCopy(budgetsCopy.details_type_title, merchantBudget.merchant_name) as string\n }\n >\n <BudgetDetailsTopSection\n amount={merchantBudget.amount}\n icon={\n <MerchantLogo\n categoryGuid={transaction.top_level_category_guid || ''}\n merchantGuid={transaction.merchant_guid || ''}\n />\n }\n iconColor={iconColor}\n remainingAmount={remainingAmount}\n spentPercentage={spentPercentage}\n startDate={transaction.date}\n totalTransaction={transactionTotal}\n />\n <TransactionList />\n {renderingToast?.()}\n </Drawer>\n )\n}\n\nexport default observer(MerchantBudgetDetailsDrawer)\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text, Toast } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport {\n CurrencyDialog,\n useAccountStore,\n useBudgetsStore,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../../common'\nimport { type Transaction } from '../../../../../core'\nimport { useAriaLive } from '../../../../../common/hooks/useAriaLive'\nimport MerchantBudgetDetailsDrawer from '../../../../../budgets/components/MerchantBudgetDetailsDrawer'\nimport { formatCurrency } from '../../../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../../../core/utils/Localization'\n\ninterface AddMerchantBudgetActionProps {\n transaction: Transaction\n}\n\nexport enum CurrencyDialogAction {\n CREATE = 'create',\n EDIT = 'edit',\n DELETE = 'delete',\n}\n\nexport const AddMerchantBudgetAction = observer(({ transaction }: AddMerchantBudgetActionProps) => {\n const [currencyDialogAction, setCurrencyDialogAction] =\n React.useState<CurrencyDialogAction | null>(null)\n\n const [amount, setAmount] = React.useState('')\n\n const [isError, setIsError] = React.useState(false)\n\n const inProgressRef = React.useRef(false)\n\n const [lastActionType, setLastActionType] = React.useState<CurrencyDialogAction | null>(null)\n\n const theme = useTheme()\n\n const {\n addMerchantBudget,\n updateMerchantBudget,\n deleteMerchantBudget,\n getMerchantBudgetByMerchantGuid,\n alert,\n setAlert,\n } = useBudgetsStore()\n const { setFilter } = useTransactionStore()\n const { accounts } = useAccountStore()\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n const { budgets: budgetsCopy, common: commonCopy } = useGlobalCopyStore()\n\n const { announce, ariaLive } = useAriaLive()\n\n const [merchantBudgetDetailsDrawerOpen, setMerchantBudgetDetailsDrawerOpen] =\n React.useState(false)\n\n const existingMerchantBudget = transaction?.merchant_guid\n ? getMerchantBudgetByMerchantGuid(transaction.merchant_guid)\n : undefined\n\n const handleModalClose = () => {\n setLastActionType(currencyDialogAction)\n setCurrencyDialogAction(null)\n setAmount('')\n }\n\n const handleClick = () => {\n if (!existingMerchantBudget) {\n setCurrencyDialogAction(CurrencyDialogAction.CREATE)\n } else {\n setMerchantBudgetDetailsDrawerOpen(true)\n }\n }\n\n // details needed for all the three states of the dialog - create, edit, delete\n const actionDetails = {\n [CurrencyDialogAction.CREATE]: {\n content: buildDynamicCopy(\n budgetsCopy.create_budget_content,\n <strong>{transaction.description}</strong>,\n `${formatCurrency(transaction.amount, '0,0.00')}`,\n ) as string,\n title: budgetsCopy.dialog_create_budget_title,\n primaryButtonText: budgetsCopy.dialog_primary_button_text,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.alert_merchant_budget_not_created,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.CREATE),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.alert_budget_created,\n transaction.description,\n ) as string,\n apiTrigger: async () => await addMerchantBudget(transaction.merchant_guid!, Number(amount)),\n },\n\n [CurrencyDialogAction.EDIT]: {\n content: buildDynamicCopy(\n budgetsCopy.edit_budget_content,\n <strong>{transaction.description}</strong>,\n ) as string,\n title: budgetsCopy.details_edit_title,\n primaryButtonText: budgetsCopy.add_save_button,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.error_alert_edit_merchant_budget,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.EDIT),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.success_alert_edit_merchant_budget,\n transaction.description,\n ) as string,\n apiTrigger: async () =>\n await updateMerchantBudget({\n ...existingMerchantBudget!,\n amount: Number(amount),\n }),\n },\n\n [CurrencyDialogAction.DELETE]: {\n content: buildDynamicCopy(\n budgetsCopy.delete_description,\n <strong>{transaction.description}</strong>,\n ) as string,\n title: budgetsCopy.delete_title,\n primaryButtonText: budgetsCopy.details_delete_button,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.error_alert_delete_merchant_budget,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.DELETE),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.success_alert_delete_merchant_budget,\n transaction.description,\n ) as string,\n apiTrigger: async () => await deleteMerchantBudget(existingMerchantBudget!.guid),\n },\n }\n\n const handlePrimaryAction = async () => {\n if (inProgressRef.current) return\n\n inProgressRef.current = true\n\n const { apiTrigger, successAlertMessage, errorAlertMessage } =\n actionDetails[currencyDialogAction as CurrencyDialogAction]\n\n const { isSuccess } = await apiTrigger()\n const alertMessage = isSuccess ? successAlertMessage : errorAlertMessage\n handleModalClose()\n setIsError(!isSuccess)\n setAlert(alertMessage)\n announce(alertMessage)\n\n if (isSuccess && currencyDialogAction === CurrencyDialogAction.DELETE) {\n setMerchantBudgetDetailsDrawerOpen(false)\n }\n inProgressRef.current = false\n }\n\n React.useEffect(() => {\n const dateRange = {\n start: startOfMonth(new Date(transaction.date * 1000)),\n end: endOfMonth(new Date(transaction.date * 1000)),\n }\n\n if (merchantBudgetDetailsDrawerOpen) {\n setFilter({\n accounts: accounts.map((account) => account.guid),\n custom: merchantBudgetDetailsDrawerOpen\n ? (trn) => trn.merchant_guid === transaction.merchant_guid\n : (trn) => trn.guid === transaction.guid,\n dateRange,\n })\n }\n }, [merchantBudgetDetailsDrawerOpen, transaction, accounts])\n\n const snackBar = () => (\n <Toast\n actionText={budgetsCopy.autogenerate_budgets_error_primary_button}\n autoHideDuration={3500}\n closeAriaLabel={commonCopy.close_aria}\n handleClose={() => setAlert('')}\n message={alert}\n onActionClick={actionDetails[lastActionType as CurrencyDialogAction]?.errorRetryAction}\n open={Boolean(alert)}\n severity={isError ? 'error' : 'success'}\n showAction={isError}\n showClose={true}\n />\n )\n return (\n <React.Fragment>\n {ariaLive}\n\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleClick}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"bubble_chart\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={budgetsCopy.add_merchant_budget_primary_text}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {existingMerchantBudget\n ? `${formatCurrency(existingMerchantBudget.amount, '0,0.00')} / ${commonCopy.month_text}`\n : budgetsCopy.add_merchant_budget_secondary_text}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n\n {!!existingMerchantBudget && (\n <MerchantBudgetDetailsDrawer\n isOpen={merchantBudgetDetailsDrawerOpen}\n merchantBudget={existingMerchantBudget}\n onClose={() => setMerchantBudgetDetailsDrawerOpen(false)}\n renderingToast={() => alert && snackBar()}\n setCurrencyDialogAction={(action) => {\n if (action === CurrencyDialogAction.EDIT) {\n setAmount(existingMerchantBudget?.amount.toString() || '')\n }\n setCurrencyDialogAction(action)\n }}\n transaction={transaction}\n />\n )}\n {currencyDialogAction && (\n <CurrencyDialog\n closeAriaLabel={commonCopy.close_aria}\n content={actionDetails[currencyDialogAction].content}\n handleInputChange={setAmount}\n handleModalClose={handleModalClose}\n handlePrimaryAction={handlePrimaryAction}\n handleSecondaryAction={handleModalClose}\n inputLabel={\n currencyDialogAction !== CurrencyDialogAction.DELETE ? commonCopy.amount_text : ''\n }\n inputValue={amount}\n isOpen={Boolean(currencyDialogAction)}\n primaryText={actionDetails[currencyDialogAction].primaryButtonText}\n secondaryText={commonCopy.cancel_button}\n title={actionDetails[currencyDialogAction].title}\n />\n )}\n\n {!!alert && snackBar()}\n </React.Fragment>\n )\n})\n","import React from 'react'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { CategoryIcon, CategoryIconVariants, P, Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\nimport { CategorySelectorDrawer } from '../../../../../categories'\n\nimport {\n ANALYTICS_EVENTS,\n Dialog,\n useCategoryStore,\n useGlobalCopyStore,\n} from '../../../../../common'\nimport type { Transaction } from '../../../../../core'\n\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { buildDynamicCopy } from '../../../../../core/utils/Localization'\n\ninterface CategoryActionProps {\n transaction: Transaction\n}\n\nconst CategoryAction: React.FC<CategoryActionProps> = ({ transaction }) => {\n const { addOrUpdateTransactionRule, updateTransaction } = useTransactionStore()\n const { categories } = useCategoryStore()\n const { onEvent } = useEvent()\n const { setShouldDisableDrawerScroll, updateManualTransaction } = useTransactionsUiStore()\n const { transactions: copy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n const [open, setOpen] = React.useState(false)\n const [selectedGuid, setSelectedGuid] = React.useState('')\n\n const handleCategoryChange = async (applyToAll: boolean) => {\n await updateTransaction({ ...transaction, category_guid: selectedGuid })\n if (applyToAll) {\n await addOrUpdateTransactionRule(selectedGuid, transaction)\n }\n setSelectedGuid('')\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_CATEGORY, {\n transaction_guid: transaction.guid,\n })\n }\n\n const handleSelected = (guid: string) => {\n if (transaction.is_manual && !transaction.guid) {\n const category = categories.find((c) => c.guid === guid)\n updateManualTransaction({\n ...transaction,\n category: category?.name,\n category_guid: guid,\n top_level_category_guid: category?.parent_guid || guid,\n })\n } else {\n setSelectedGuid(guid)\n }\n\n handleCloseDrawer()\n }\n\n const handleCloseDrawer = () => {\n setOpen(false)\n setShouldDisableDrawerScroll(false)\n }\n\n const category = React.useMemo(\n () => categories.find((item) => item.guid === selectedGuid),\n [selectedGuid],\n )\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_CATEGORY_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <CategoryIcon\n categoryGuid={transaction.top_level_category_guid}\n size={24}\n sx={{ color: 'text.primary' }}\n variant={CategoryIconVariants.Transparent}\n />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.category_title}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {transaction.category ?? copy.actions_select_a_category}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n\n <CategorySelectorDrawer\n initialSelected={transaction.category_guid}\n onClose={handleCloseDrawer}\n onSelect={handleSelected}\n showDrawer={open}\n title={copy.actions_select_a_category}\n />\n\n <Dialog\n copy={{\n title: buildDynamicCopy(\n copy.actions_apply_to_all_transaction_types,\n transaction.description,\n ) as string,\n }}\n isOpen={Boolean(selectedGuid)}\n onClose={() => setSelectedGuid('')}\n onPrimaryAction={() => handleCategoryChange(true)}\n onSecondaryAction={() => handleCategoryChange(false)}\n primaryText={copy.actions_apply_to_all}\n secondaryText={copy.actions_this_time_only}\n >\n <P variant=\"subtitle1\">\n {\n buildDynamicCopy(\n copy.actions_all_past_and_future,\n transaction.description,\n category?.name,\n ) as string\n }\n </P>\n </Dialog>\n </ListItem>\n )\n}\n\nexport default CategoryAction\n","import React from 'react'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Avatar from '@mui/material/Avatar'\nimport Stack from '@mui/material/Stack'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport {\n ANALYTICS_EVENTS,\n Calendar,\n CalendarSelectionTypes,\n Drawer,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../../common'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../../../../core/constants'\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DateActionProps {\n transaction: Transaction\n}\n\nconst DateAction: React.FC<DateActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const theme = useTheme()\n const [open, setOpen] = React.useState(false)\n const [date, setDate] = React.useState<number>(transaction.date)\n\n const handleDateSelected = (date: Date) => {\n setDate(getUnixTime(date))\n }\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, date })\n setOpen(false)\n return\n }\n\n await updateTransaction({ ...transaction, date })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DATE, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <ListItem className=\"mx-txn-date-action\" disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DATE_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"calendar_month\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.date_title}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {formatDate(fromUnixTime(transaction.date), DATE_FORMATS_INTL.YEAR_MONTH_DAY)}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.date_edit_title}\n >\n <Stack alignItems=\"center\" mt={40}>\n <Calendar\n beginDate={fromUnixTime(date)}\n copy={{\n nextAria: copy.date_next_aria,\n prevAria: copy.date_prev_aria,\n today: commonCopy.date_range_picker.today,\n }}\n onDateSelected={handleDateSelected}\n selectionType={CalendarSelectionTypes.Single}\n />\n </Stack>\n </Drawer>\n </ListItem>\n )\n}\n\nexport default DateAction\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport Box from '@mui/material/Box'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Delete as DeleteOutlinedIcon } from '@mxenabled/mx-icons'\n\nimport { Dialog, useEvent, useGlobalCopyStore, useTransactionStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DeleteActionProps {\n transaction: Transaction\n}\n\nconst DeleteAction: React.FC<DeleteActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { removeTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [open, setOpen] = React.useState(false)\n const handleDelete = async () => {\n await removeTransaction(transaction.guid)\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_DELETED)\n }\n\n return (\n <Box className=\"mx-txn-delete\">\n {transaction && (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_CLICK)\n setShouldDisableDrawerScroll(true)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar variant=\"rounded\">\n <DeleteOutlinedIcon color=\"secondary\" fontSize=\"small\" />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.manual_transaction_delete_title}\n secondary={copy.manual_transaction_delete_subtitle}\n />\n <ListItemIcon>\n <DeleteOutlinedIcon />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n )}\n <Dialog\n copy={{ title: copy.manual_transaction_delete_title }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={handleDelete}\n onSecondaryAction={() => onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_CANCEL)}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <Text variant=\"subtitle1\">{copy.manual_transaction_delete_description}</Text>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(DeleteAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { ANALYTICS_EVENTS, Dialog, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface DeleteLogoActionProps {\n transaction: Transaction\n}\n\nconst DeleteLogoAction: React.FC<DeleteLogoActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const theme = useTheme()\n const [open, setOpen] = React.useState(false)\n\n const handleDeleteLogo = async () => {\n await updateTransaction({ ...transaction, merchant_guid: '' })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DELETE_LOGO, {\n transaction_guid: transaction.guid,\n })\n }\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <React.Fragment>\n {transaction && (\n <ListItem className=\"mx-txn-delete-logo\" disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"delete\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary={copy.merchant_logo_title} secondary={copy.merchant_logo_desc} />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n <Dialog\n copy={{ title: copy.merchant_logo_modal_title }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={handleDeleteLogo}\n onSecondaryAction={() => onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DELETE_LOGO_CANCEL)}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.merchant_logo_modal_title}\n >\n <Text variant=\"subtitle1\">{copy.merchant_logo_modal_desc}</Text>\n <Text bold={true} variant=\"subtitle1\">\n {` ${copy.merchant_logo_modal_desc_bold}`}\n </Text>\n </Dialog>\n </ListItem>\n )}\n </React.Fragment>\n )\n}\n\nexport default observer(DeleteLogoAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Switch from '@mui/material/Switch'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { Dialog, useEvent, useGlobalCopyStore, useTransactionStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface ExcludeActionProps {\n transaction: Transaction\n}\n\nconst ExcludeAction: React.FC<ExcludeActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { setAlert, updateTransaction } = useTransactionStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const theme = useTheme()\n const [open, setOpen] = React.useState(false)\n\n const isExcluded = transaction.is_hidden\n\n const toggleExclude = async () => {\n try {\n await updateTransaction({ ...transaction, is_hidden: !transaction.is_hidden })\n onEvent(\n isExcluded\n ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDDEN\n : ON_CLICK_EVENTS.ON_TRANSACTION_HIDDEN,\n )\n setAlert(isExcluded ? copy.transaction_included : copy.transaction_excluded)\n } catch {\n setAlert(isExcluded ? copy.transaction_not_included : copy.transaction_not_excluded)\n }\n }\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <React.Fragment>\n {transaction && (\n <ListItem className=\"mx-txn-hide-transaction\" disableGutters={true} disablePadding={true}>\n <ListItemButton\n aria-checked={isExcluded}\n aria-labelledby=\"hide-transaction-text\"\n onClick={() => {\n onEvent(\n isExcluded\n ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDE_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_HIDE_CLICK,\n )\n onEvent(\n isExcluded\n ? 'transaction_details_click_unhide_transaction'\n : 'transaction_details_click_hide_transaction',\n {\n transaction_guid: transaction.guid,\n },\n )\n setOpen(true)\n }}\n role=\"switch\"\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n {isExcluded ? (\n <Icon name=\"visibility_off\" sx={{ color: 'text.primary' }} />\n ) : (\n <Icon name=\"visibility\" sx={{ color: 'text.primary' }} />\n )}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n id=\"hide-transaction-text\"\n primary={copy.exclude_transaction}\n secondary={copy.excluding_transaction}\n />\n <ListItemIcon aria-hidden=\"true\">\n <Switch\n checked={isExcluded}\n slotProps={{ input: { tabIndex: -1 } }}\n sx={{ pointerEvents: 'none' }}\n tabIndex={-1}\n />\n </ListItemIcon>\n </ListItemButton>\n\n <Dialog\n copy={{\n title: isExcluded ? copy.include_transaction : copy.exclude_transaction,\n }}\n isOpen={open}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setOpen(false)\n }}\n onPrimaryAction={toggleExclude}\n onSecondaryAction={() =>\n onEvent(\n isExcluded\n ? ON_CLICK_EVENTS.ON_TRANSACTION_UNHIDE_CANCEL_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_HIDE_CANCEL_CLICK,\n )\n }\n primaryText={isExcluded ? copy.include : copy.exclude}\n secondaryText={commonCopy.cancel_button}\n >\n <Text truncate={false} variant=\"subtitle1\">\n {isExcluded ? copy.including_transaction : copy.excluding_transaction}\n </Text>\n </Dialog>\n </ListItem>\n )}\n </React.Fragment>\n )\n}\n\nexport default observer(ExcludeAction)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { MerchantLogo, P, Text } from '@mxenabled/mxui'\n\nimport type { Transaction } from '../../../../core'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\ninterface TransactionAmountHeaderProps {\n transaction: Transaction\n}\n\nconst TransactionAmountHeader: React.FC<TransactionAmountHeaderProps> = ({ transaction }) => {\n const { amount, description, isIncome, merchant_guid, payee, top_level_category_guid } =\n transaction\n\n return (\n <Stack className=\"mx-txn-amount-header\" direction=\"row\" gap={12} px={16} py={24}>\n <MerchantLogo\n categoryGuid={top_level_category_guid || ''}\n merchantGuid={merchant_guid || ''}\n size={64}\n />\n <Stack overflow=\"hidden'\">\n <Text bold={true} mb={4} truncate={true} variant=\"body1\">\n {description || payee}\n </Text>\n <P color={isIncome ? 'success.main' : 'text.primary'} truncate={true} variant=\"h1\">\n {isIncome ? '+' : ''}\n {formatCurrency(amount, '0,0.00')}\n </P>\n </Stack>\n </Stack>\n )\n}\n\nexport default TransactionAmountHeader\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport TextField from '@mui/material/TextField'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { ANALYTICS_EVENTS, Drawer, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\nimport TransactionAmountHeader from '../TransactionAmountHeader'\n\ninterface MemoActionProps {\n transaction: Transaction\n}\n\nconst MemoAction: React.FC<MemoActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { updateTransaction } = useTransactionStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n const [open, setOpen] = React.useState(false)\n const [memoText, setMemoText] = React.useState('')\n\n React.useEffect(() => {\n if (open) {\n setMemoText(transaction.memo ? transaction.memo : '')\n }\n }, [open])\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, memo: memoText })\n setOpen(false)\n return\n }\n\n await updateTransaction({ ...transaction, memo: memoText })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_MEMO, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <ListItem className=\"mx-txn-memo-action\" disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_MEMO_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"article\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.memo_title}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {transaction.memo ? transaction.memo : copy.memo_desc}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n title={copy.memo_title}\n >\n <TransactionAmountHeader transaction={transaction} />\n <TextField\n aria-label={copy.memo_desc_aria}\n focused={true}\n multiline={true}\n name=\"memo\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setMemoText(e.target.value)}\n placeholder={copy.memo_desc}\n rows={4}\n sx={{ mx: 16, width: 'calc(100% - 32px)' }}\n value={memoText}\n />\n </Drawer>\n </ListItem>\n )\n}\n\nexport default observer(MemoAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Grid from '@mui/material/Grid'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\n\nimport { CategoryIcon, Text } from '@mxenabled/mxui'\nimport {\n Cancel as CancelIcon,\n ChevronRight as ChevronRightIcon,\n Delete as DeleteOutlinedIcon,\n} from '@mxenabled/mx-icons'\n\nimport { CategorySelectorDrawer } from '../../../categories'\n\nimport { CurrencyInput, useGlobalCopyStore } from '../../../common'\nimport type { Transaction } from '../../../core'\n\nimport { useEvent } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface SplitRowProps {\n index: number\n onCategoryChanged: (index: number, categoryGuid: string) => void\n onDeleteRow: (index: number) => void\n onUpdateAmount: (index: number, amount: number) => void\n split: Transaction\n}\n\nconst SplitRow: React.FC<SplitRowProps> = ({\n index,\n onDeleteRow,\n onCategoryChanged,\n onUpdateAmount,\n split,\n}) => {\n const { onEvent } = useEvent()\n const { transactions: copy } = useGlobalCopyStore()\n\n const [amount, setAmount] = React.useState(`${split.amount}`)\n const [categorySelectorOpen, setCategorySelectorOpen] = React.useState(false)\n\n const isTopRow = index === 0\n\n const handleChangeAmount = (value: string) => {\n if (!isNaN(Number(value))) {\n setAmount(value)\n onUpdateAmount(index, Number(value))\n }\n }\n\n return (\n <Box bgcolor=\"background.paper\" className=\"mx-txn-split-manager-row\" pb={4} px={8}>\n <Grid alignItems={isTopRow ? 'center' : 'start'} container={true}>\n <Grid size={7}>\n <Stack alignItems=\"start\">\n <Button\n endIcon={<ChevronRightIcon />}\n onClick={() => setCategorySelectorOpen(true)}\n startIcon={<CategoryIcon categoryGuid={split.top_level_category_guid} />}\n sx={{ px: 12, py: 8 }}\n >\n {split.category}\n </Button>\n <Box>\n {!split.category_guid && (\n <Stack color=\"error.main\" direction=\"row\" gap={8} p={12}>\n <span aria-label=\"error\" role=\"img\">\n <CancelIcon sx={{ fontSize: 15 }} />\n </span>\n <Text variant=\"body2\">{copy.split_transaction_errors_select_category}</Text>\n </Stack>\n )}\n </Box>\n </Stack>\n </Grid>\n <Grid size={5}>\n {isTopRow ? (\n <div className=\"mx-txn-split-manager-row-top-container\">\n <Text>{formatCurrency(split.amount, '0,0.00')}</Text>\n </div>\n ) : (\n <Stack alignItems=\"start\">\n <Stack alignItems=\"start\" direction=\"row\" gap={8}>\n <CurrencyInput\n amount={amount}\n ariaLabel={copy.split_transaction_edit_split_amount}\n label={copy.split_transaction_edit_split_amount}\n minAmount={0.01}\n name=\"split-amount-input\"\n setAmount={handleChangeAmount}\n sx={{\n '.MuiOutlinedInput-input': { p: 12 },\n }}\n type=\"number\"\n />\n <IconButton\n aria-label={copy.split_transaction_delete_split_btn}\n color=\"secondary\"\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_DELETE_CLICK)\n onDeleteRow(index)\n }}\n sx={{ w: 44, h: 44 }}\n >\n <DeleteOutlinedIcon />\n </IconButton>\n </Stack>\n {!amount && (\n <Stack color=\"error.main\" direction=\"row\" gap={8} py={12}>\n <span aria-label=\"error\" role=\"img\">\n <CancelIcon sx={{ fontSize: 15 }} />\n </span>\n <Text variant=\"body2\">{copy.split_transaction_errors_enter_an_amount}</Text>\n </Stack>\n )}\n </Stack>\n )}\n </Grid>\n </Grid>\n\n <CategorySelectorDrawer\n initialSelected={split.category_guid}\n onClose={() => setCategorySelectorOpen(false)}\n onSelect={(guid: string) => {\n onCategoryChanged(index, guid)\n setCategorySelectorOpen(false)\n }}\n showDrawer={categorySelectorOpen}\n title={copy.actions_select_a_category}\n />\n </Box>\n )\n}\n\nexport default observer(SplitRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Cancel as CancelIcon } from '@mxenabled/mx-icons'\n\nimport { useEvent, useGlobalCopyStore } from '../../../common'\nimport type { Transaction } from '../../../core'\nimport { useAriaLive } from '../../../common/hooks/useAriaLive'\n\nimport SplitRow from './SplitRow'\n\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface SplitManagerProps {\n onAddSplit: () => void\n onCategoryChanged: (index: number, categoryGuid: string) => void\n onDeleteSplit: (index: number) => void\n onUpdateAmount: (index: number, amount: number) => void\n splits: Transaction[]\n transaction: Transaction\n}\n\nconst SplitManager: React.FC<SplitManagerProps> = ({\n onAddSplit,\n onCategoryChanged,\n onDeleteSplit,\n onUpdateAmount,\n splits,\n transaction,\n}) => {\n const { transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const [error, setError] = React.useState('')\n const { announce, ariaLive } = useAriaLive()\n\n React.useEffect(() => {\n if (splits.length <= 1) {\n setError(copy.split_transaction_errors_min_splits)\n announce(copy.split_transaction_errors_min_splits)\n } else if (splits[0].amount < 0) {\n const errorCopy = buildDynamicCopy(\n copy.split_transaction_errors_totals_must_equal_amount,\n formatCurrency(transaction.amount, '0,0.00'),\n ) as string\n setError(errorCopy)\n announce(errorCopy)\n } else {\n setError('')\n announce('')\n }\n }, [splits])\n\n return (\n <Box className=\"mx-txn-split-manager\">\n {ariaLive}\n {splits.map((split, index) => (\n <SplitRow\n index={index}\n key={index}\n onCategoryChanged={onCategoryChanged}\n onDeleteRow={onDeleteSplit}\n onUpdateAmount={onUpdateAmount}\n split={split}\n />\n ))}\n {error && (\n <Stack bgcolor=\"background.paper\" color=\"error.main\" direction=\"row\" gap={8} p={16}>\n {/* TODO: Move span with aria-label and role into @mxenabled/mx-icons */}\n <span aria-label=\"error\" role=\"img\">\n <CancelIcon sx={{ fontSize: 15 }} />\n </span>\n <Text variant=\"body2\">{error}</Text>\n </Stack>\n )}\n <Box p={16}>\n <Button\n aria-label={copy.split_transaction_add_split_btn}\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_ADD_CLICK)\n onAddSplit()\n }}\n >\n {copy.split_transaction_add_split_btn}\n </Button>\n </Box>\n </Box>\n )\n}\n\nexport default observer(SplitManager)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { P } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport {\n Dialog,\n Drawer,\n useCategoryStore,\n useGlobalCopyStore,\n useEvent,\n useTransactionStore,\n ANALYTICS_EVENTS,\n} from '../../../../../common'\nimport type { Transaction } from '../../../../../core'\n\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\nimport { SplitManager } from '../../../splitmanager'\n\nimport TransactionAmountHeader from '../TransactionAmountHeader'\nimport { useAriaLive } from '../../../../../common/hooks/useAriaLive'\nimport { buildDynamicCopy } from '../../../../../core/utils/Localization'\n\ninterface SplitActionProps {\n transaction: Transaction\n}\n\nconst SplitAction: React.FC<SplitActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { announce, ariaLive } = useAriaLive()\n const { splitTransaction, unSplitTransaction, transactionSplitting } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { setShouldDisableDrawerScroll } = useTransactionsUiStore()\n const { categories } = useCategoryStore()\n const theme = useTheme()\n const INITIAL_SPLIT = {\n ...transaction,\n amount: transaction.amount - 1,\n guid: '',\n has_been_split: false,\n parent_guid: transaction.guid,\n }\n\n const EMPTY_SPLIT = {\n ...transaction,\n amount: 1,\n category_guid: undefined,\n category: copy.split_transaction_select_category_btn,\n guid: '',\n has_been_split: false,\n parent_guid: transaction.guid,\n top_level_category_guid: undefined,\n }\n\n const [isSplitDrawerOpen, setIsSplitDrawerOpen] = React.useState(false)\n const [isDeleteSplitOpen, setIsDeleteSplitOpen] = React.useState(false)\n const [splits, setSplits] = React.useState<Transaction[]>([])\n\n const handleAddSplit = () => {\n const updatedSplits = [...splits]\n\n updatedSplits.push({ ...EMPTY_SPLIT })\n updatedSplits[0].amount -= 1\n setSplits(updatedSplits)\n\n announce(\n buildDynamicCopy(\n copy.split_transaction_add_split_announcement,\n updatedSplits.length,\n ) as string,\n )\n }\n\n const handleDeleteSplit = (index: number) => {\n if (index > 0) {\n const row = splits[index]\n const updatedSplits = [...splits]\n\n updatedSplits.splice(index, 1)\n updatedSplits[0].amount += row.amount\n setSplits(updatedSplits)\n\n announce(\n buildDynamicCopy(copy.split_transaction_delete_split_announcement, index + 1) as string,\n )\n }\n }\n\n const handleUpdateAmount = (index: number, amount: number) => {\n const updatedSplits = [...splits]\n\n updatedSplits[index].amount = amount\n updatedSplits[0].amount =\n transaction.amount -\n updatedSplits.reduce(\n (sum: number, split: Transaction, index) => sum + (index !== 0 ? split.amount : 0),\n 0,\n )\n setSplits(updatedSplits)\n }\n\n const handleCategoryChanged = (index: number, categoryGuid: string) => {\n const updatedSplits = [...splits]\n const category = categories.find((item) => item.guid === categoryGuid)\n if (category) {\n updatedSplits[index] = {\n ...updatedSplits[index],\n category_guid: categoryGuid,\n category: category.name,\n top_level_category_guid: category.parent_guid || categoryGuid,\n }\n setSplits(updatedSplits)\n announce(\n buildDynamicCopy(\n copy.split_transaction_select_category_announcement,\n category.name,\n index + 1,\n ) as string,\n )\n }\n }\n\n const handleClick = () => {\n if (transaction.parent_guid || transaction.has_been_split) {\n setIsDeleteSplitOpen(true)\n return\n }\n\n setSplits([{ ...INITIAL_SPLIT }, { ...EMPTY_SPLIT }])\n\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_SPLIT, {\n transaction_guid: transaction.guid,\n })\n setIsSplitDrawerOpen(true)\n }\n\n const handleSave = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_SAVE_CLICK)\n await splitTransaction({ ...transaction, has_been_split: true }, splits)\n setIsSplitDrawerOpen(false)\n }\n\n const handleCancel = async () => {\n if (transactionSplitting) return\n\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_SPLIT_CANCEL_CLICK)\n setSplits([{ ...INITIAL_SPLIT }, { ...EMPTY_SPLIT }])\n setIsSplitDrawerOpen(false)\n }\n\n const handleUnSplit = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_UNSPLIT, {\n transaction_guid: transaction.guid,\n })\n const guid = transaction.parent_guid ?? transaction.guid\n await unSplitTransaction(guid)\n }\n\n const hasError = React.useMemo(() => {\n const hasCategoryError = splits.some((split) => !split.category_guid)\n const hasAmountError = splits.some((split) => split.amount <= 0)\n\n return hasCategoryError || hasAmountError\n }, [splits])\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <React.Fragment>\n {transaction && (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleClick}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"call_split\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={\n transaction.has_been_split || transaction.parent_guid\n ? copy.split_transaction_unsplit_title\n : copy.split_transaction_title\n }\n secondary={\n transaction.has_been_split || transaction.parent_guid\n ? copy.split_transaction_unsplit_subtitle\n : copy.split_transaction_desc\n }\n />\n <ListItemIcon>\n {transaction.has_been_split || transaction.parent_guid ? (\n <Icon name=\"delete\" />\n ) : (\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n )}\n </ListItemIcon>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isSplitDrawerOpen}\n isPrimaryDisabled={hasError || transactionSplitting}\n onClose={handleCancel}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.split_transaction_title}\n >\n {ariaLive}\n <TransactionAmountHeader transaction={transaction} />\n <SplitManager\n onAddSplit={handleAddSplit}\n onCategoryChanged={handleCategoryChanged}\n onDeleteSplit={handleDeleteSplit}\n onUpdateAmount={handleUpdateAmount}\n splits={splits}\n transaction={transaction}\n />\n </Drawer>\n\n <Dialog\n copy={{ title: copy.split_transaction_unsplit_title }}\n isOpen={isDeleteSplitOpen}\n onClose={() => {\n setShouldDisableDrawerScroll(false)\n setIsDeleteSplitOpen(false)\n }}\n onPrimaryAction={handleUnSplit}\n onSecondaryAction={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_UNSPLIT_CANCEL)\n }}\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <P variant=\"subtitle1\">\n {\n buildDynamicCopy(\n copy.split_transaction_unsplit_description,\n transaction.description,\n ) as string\n }\n </P>\n </Dialog>\n </ListItem>\n )}\n </React.Fragment>\n )\n}\n\nexport default observer(SplitAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { P, Text, TextField } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\nimport { useEvent, useTransactionStore } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\nconst Header = () => {\n const theme = useTheme()\n\n const { onEvent } = useEvent()\n const { addTag } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n\n const [isAdding, setIsAdding] = React.useState(false)\n const [tagName, setTagName] = React.useState('')\n const [tagNameError, setTagNameError] = React.useState('')\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (isAdding) {\n inputRef?.current?.focus()\n }\n }, [isAdding])\n\n const handleAdding = () => {\n onEvent(\n isAdding\n ? ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADD_CANCEL_CLICK\n : ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADD_CLICK,\n )\n if (!isAdding) {\n setTagName('')\n }\n setIsAdding(!isAdding)\n }\n\n const handleAddTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_ADDED)\n await addTag(tagName)\n setIsAdding(false)\n }\n\n React.useEffect(() => {\n setTagNameError(tagName.length > 40 ? copy.tags_error_name_must_be_40_chars : '')\n }, [tagName])\n\n return (\n <Box className=\"mx-txn-tag-manager-header\">\n <Stack\n alignItems=\"center\"\n bgcolor={theme.palette.background.default}\n direction=\"row\"\n justifyContent=\"space-between\"\n px={24}\n py={16}\n >\n <Text bold={true}>{copy.tags_your_tags}</Text>\n <Button\n aria-expanded={isAdding}\n aria-label={copy.tags_add_tag_btn_aria}\n onClick={handleAdding}\n >\n {copy.tags_add_tag_btn}\n </Button>\n </Stack>\n\n <Dialog\n copy={{ title: copy.tags_add_tag_btn }}\n isOpen={isAdding}\n onClose={() => setIsAdding(false)}\n onPrimaryAction={handleAddTag}\n onSecondaryAction={() => setIsAdding(false)}\n >\n <TextField\n aria-label={copy.tags_placeholder}\n name=\"add-tag\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setTagName(e.target.value)}\n placeholder={copy.tags_placeholder}\n sx={{ width: '100%' }}\n value={tagName}\n />\n <P id=\"add-tag-error\" sx={{ color: 'error.main' }} variant=\"subtitle2\">\n {tagNameError}\n </P>\n </Dialog>\n </Box>\n )\n}\n\nexport default observer(Header)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport IconButton from '@mui/material/IconButton'\nimport InputAdornment from '@mui/material/InputAdornment'\n\nimport { TextField } from '@mxenabled/mxui'\nimport { Cancel as HighlightOffIcon, Search as SearchIcon } from '@mxenabled/mx-icons'\n\nimport { useGlobalCopyStore } from '../../../common'\n\ninterface SearchBoxProps {\n onSearchValueChanged: (value: string) => void\n searchValue: string\n}\n\nconst SearchBox: React.FC<SearchBoxProps> = ({ onSearchValueChanged, searchValue }) => {\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const cancelButton = (\n <IconButton\n aria-label={copy.tags_cancel_search || 'Search'}\n onClick={() => onSearchValueChanged('')}\n >\n <HighlightOffIcon />\n </IconButton>\n )\n\n return (\n <Box className=\"mx-txn-tag-manager-search\" px={24} py={16}>\n <TextField\n aria-label={commonCopy.search_aria}\n name=\"search\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => onSearchValueChanged(e.target.value)}\n placeholder={commonCopy.search_placeholder}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\" sx={{ padding: 0 }}>\n {searchValue ? cancelButton : null}\n </InputAdornment>\n ),\n },\n }}\n // TODO: Theme needs to have the background color defaulted to paper for TextField\n sx={{ bgcolor: 'background.paper', width: '100%' }}\n value={searchValue}\n />\n </Box>\n )\n}\n\nexport default observer(SearchBox)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Checkbox from '@mui/material/Checkbox'\nimport IconButton from '@mui/material/IconButton'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { P, Text, TextField } from '@mxenabled/mxui'\nimport { Delete as DeleteOutlinedIcon, Edit as EditIcon } from '@mxenabled/mx-icons'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\nimport type { Tag } from '../../../core'\n\nimport { useEvent, useTransactionStore } from '../../../common'\nimport { ON_CLICK_EVENTS } from '../../constants/OnClickEvents'\n\ninterface TagRowProps {\n tag: Tag\n selectedTags: string[]\n onTagChecked: (guid: string) => void\n}\n\nconst TagRow: React.FC<TagRowProps> = ({ onTagChecked, selectedTags, tag }) => {\n const { onEvent } = useEvent()\n const { removeTag, updateTag } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n\n const [editOpen, setEditOpen] = React.useState(false)\n const [deleteOpen, setDeleteOpen] = React.useState(false)\n\n const [tagName, setTagName] = React.useState('')\n const [tagNameError, setTagNameError] = React.useState('')\n\n const handleSaveTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_EDIT_SAVED)\n if (tag) {\n await updateTag({ ...tag, name: tagName })\n }\n setEditOpen(false)\n }\n\n const handleDeleteTag = async () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETED)\n await removeTag(tag.guid)\n setDeleteOpen(false)\n }\n\n React.useEffect(() => {\n setTagNameError(tagName.length > 40 ? copy.tags_error_name_must_be_40_chars : '')\n }, [tagName])\n\n const handleEditClick = () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_EDIT_CLICK)\n setTagName(tag.name)\n setEditOpen(true)\n }\n\n const handleDeleteClick = () => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETE_CLICK)\n setDeleteOpen(true)\n }\n\n return (\n <ListItem\n className=\"mx-txn-transaction-manager-row\"\n disableGutters={true}\n disablePadding={true}\n secondaryAction={\n !tag.is_default_tag && (\n <Stack direction=\"row\">\n <IconButton\n aria-label={`Edit ${tag.name} tag`}\n color=\"secondary\"\n onClick={handleEditClick}\n >\n <EditIcon color=\"secondary\" />\n </IconButton>\n <IconButton\n aria-label={`Delete ${tag.name} tag`}\n color=\"secondary\"\n onClick={handleDeleteClick}\n >\n <DeleteOutlinedIcon color=\"secondary\" />\n </IconButton>\n </Stack>\n )\n }\n >\n <ListItemButton\n aria-checked={selectedTags.includes(tag.guid)}\n onClick={() => onTagChecked(tag.guid)}\n role=\"checkbox\"\n >\n <ListItemIcon sx={{ ml: 0 }}>\n <Checkbox\n aria-hidden={true}\n checked={selectedTags.includes(tag.guid)}\n edge=\"start\"\n tabIndex={-1}\n />\n </ListItemIcon>\n <ListItemText>{tag.name}</ListItemText>\n </ListItemButton>\n\n <Dialog\n copy={{ title: 'Update tag name' }} // TODO: Need copy\n isOpen={editOpen}\n onClose={() => setEditOpen(false)}\n onPrimaryAction={handleSaveTag}\n onSecondaryAction={() => setEditOpen(false)}\n >\n <TextField\n aria-describedby={tagNameError ? 'update-tag-error' : undefined}\n aria-label={copy.tags_update_the_tag_name}\n name=\"update-tag\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setTagName(e.target.value)}\n placeholder=\"Tag name\" // TODO: Need copy\n sx={{ width: '100%' }}\n value={tagName}\n />\n <P id=\"update-tag-error\" sx={{ color: 'error.main' }} variant=\"subtitle2\">\n {tagNameError}\n </P>\n </Dialog>\n\n <Dialog\n copy={{ title: copy.tags_delete_title }}\n isOpen={deleteOpen}\n onClose={() => setDeleteOpen(false)}\n onPrimaryAction={handleDeleteTag}\n onSecondaryAction={() =>\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_TAG_DELETE_CANCEL_CLICK)\n }\n primaryText={commonCopy.delete_button}\n secondaryText={commonCopy.cancel_button}\n >\n <Text truncate={false}>{copy.tags_deleting_this_tag_will_remove_it}</Text>\n </Dialog>\n </ListItem>\n )\n}\n\nexport default observer(TagRow)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Paper from '@mui/material/Paper'\n\nimport { useTransactionStore } from '../../../common'\n\nimport Header from './Header'\nimport SearchBox from './SearchBox'\nimport TagRow from './TagRow'\n\ninterface TagManagerProps {\n selectedTags: string[]\n onTagChecked: (guid: string) => void\n}\n\nconst TagManager: React.FC<TagManagerProps> = ({ selectedTags, onTagChecked }) => {\n const { tags } = useTransactionStore()\n\n const [searchValue, setSearchValue] = React.useState('')\n\n const filteredTags = tags.filter((tag) =>\n tag.name.toLowerCase().includes(searchValue.toLowerCase()),\n )\n\n return (\n <div className=\"mx-txn-tag-manager\">\n <SearchBox\n onSearchValueChanged={(value) => setSearchValue(value)}\n searchValue={searchValue}\n />\n\n <Header />\n\n <Paper sx={{ boxShadow: 'none' }}>\n <List>\n {filteredTags.map((tag) => (\n <React.Fragment key={tag.guid}>\n <TagRow onTagChecked={onTagChecked} selectedTags={selectedTags} tag={tag} />\n <Divider sx={{ ml: 24 }} />\n </React.Fragment>\n ))}\n </List>\n </Paper>\n </div>\n )\n}\n\nexport default observer(TagManager)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { ANALYTICS_EVENTS, Drawer, useGlobalCopyStore } from '../../../../../common'\n\nimport type { Transaction } from '../../../../../core'\n\nimport { TagManager } from '../../../tagmanager'\nimport { useTransactionsUiStore } from '../../../../context/hooks'\nimport { useEvent, useTransactionStore } from '../../../../../common'\nimport { ON_CLICK_EVENTS } from '../../../../constants/OnClickEvents'\n\ninterface TagsActionProps {\n transaction: Transaction\n}\n\nconst TagsAction: React.FC<TagsActionProps> = ({ transaction }) => {\n const { onEvent } = useEvent()\n const { tags, updateTaggings, updateTransaction } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { updateManualTransaction } = useTransactionsUiStore()\n\n const theme = useTheme()\n\n const [open, setOpen] = React.useState(false)\n const [selectedTags, setSelectedTags] = React.useState<string[]>(transaction.tags)\n\n React.useEffect(() => {\n setSelectedTags(transaction.tags)\n }, [open, transaction])\n\n const handleTagChecked = (guid: string) => {\n const tags = [...selectedTags]\n\n const index = selectedTags.indexOf(guid)\n if (index >= 0) {\n tags.splice(index, 1)\n } else {\n tags.push(guid)\n }\n setSelectedTags(tags)\n }\n\n const handleSave = async () => {\n if (transaction.is_manual && !transaction.guid) {\n updateManualTransaction({ ...transaction, tags: selectedTags })\n setOpen(false)\n return\n }\n\n await updateTaggings(selectedTags, transaction.guid)\n await updateTransaction({ ...transaction, tags: selectedTags })\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_TAGS, { transaction_guid: transaction.guid })\n setOpen(false)\n }\n\n const tagNames = React.useMemo(\n () =>\n transaction.tags.map(\n (tagGuid, index, selectedTags) =>\n `${tags.find((item) => item.guid === tagGuid)?.name}${\n index < selectedTags.length - 1 ? ' / ' : ''\n }`,\n ),\n [tags, transaction],\n )\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton\n onClick={() => {\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_TAGS_CLICK)\n setOpen(true)\n }}\n >\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"local_offer\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={copy.tags_title}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {transaction.tags?.length > 0 ? tagNames : copy.tags_desc}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={open}\n onClose={() => setOpen(false)}\n onPrimaryAction={handleSave}\n primaryText={commonCopy.save_button}\n secondaryText={commonCopy.cancel_button}\n title={copy.tags_title}\n >\n <TagManager onTagChecked={handleTagChecked} selectedTags={selectedTags} />\n </Drawer>\n </ListItem>\n )\n}\n\nexport default observer(TagsAction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport FormGroup from '@mui/material/FormGroup'\nimport IconButton from '@mui/material/IconButton'\nimport Stack from '@mui/material/Stack'\nimport TextField from '@mui/material/TextField'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport type { Transaction } from '../../../../core'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\nimport { useAriaLive } from '../../../../common/hooks/useAriaLive'\nimport { ON_CLICK_EVENTS } from '../../../constants/OnClickEvents'\n\ninterface DescriptionProps {\n transaction: Transaction\n viewOnly?: boolean\n}\n\nconst Description: React.FC<DescriptionProps> = ({ transaction, viewOnly = false }) => {\n const { updateTransaction } = useTransactionStore()\n const { common: commonCopy, transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const { announce, ariaLive } = useAriaLive()\n\n const [isEditing, setIsEditing] = React.useState(false)\n const [description, setDescription] = React.useState('')\n\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (isEditing) {\n setDescription(transaction.description)\n inputRef?.current?.focus()\n }\n }, [isEditing])\n\n const handleEdit = () => {\n setIsEditing(true)\n onEvent(ON_CLICK_EVENTS.ON_TRANSACTION_DESCRIPTION_EDIT_CLICK)\n setTimeout(() => document.getElementById(`transaction-description-input`)?.focus(), 0)\n }\n\n const handleSave = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_DESCRIPTION, {\n transaction_guid: transaction.guid,\n })\n await updateTransaction({ ...transaction, description })\n setIsEditing(false)\n announce(`${copy.payee_title}: ${description}`)\n setTimeout(() => document.getElementById(`transaction-description-edit-button`)?.focus(), 0)\n }\n\n return (\n <Box className=\"mx-txn-transaction-description\">\n {ariaLive}\n {isEditing ? (\n <FormGroup row={true}>\n <TextField\n aria-label={copy.payee_title}\n id={`transaction-description-input`}\n label={copy.payee_title}\n name={copy.payee_title}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setDescription(e.target.value)}\n ref={inputRef}\n slotProps={{ htmlInput: { maxLength: 140 } }}\n sx={{\n backgroundColor: 'background.paper',\n '.MuiOutlinedInput-root': { borderTopRightRadius: 0, borderBottomRightRadius: 0 },\n '.MuiOutlinedInput-input': { p: 11 },\n width: 250,\n }}\n value={description}\n />\n <Button\n disabled={!description}\n onClick={handleSave}\n sx={{\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }}\n variant=\"outlined\"\n >\n {commonCopy.save_button}\n </Button>\n </FormGroup>\n ) : (\n <Stack alignItems=\"center\" direction=\"row\" gap={4} sx={{ minHeight: 44 }}>\n <Text bold={true}>{transaction.description}</Text>\n {!viewOnly && (\n <IconButton\n aria-label={copy.payee_edit}\n id={`transaction-description-edit-button`}\n onClick={handleEdit}\n sx={{ color: 'action.active' }}\n >\n <Icon name=\"create\" size={22} />\n </IconButton>\n )}\n </Stack>\n )}\n </Box>\n )\n}\n\nexport default observer(Description)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ToggleButton from '@mui/material/ToggleButton'\nimport { alpha, useTheme } from '@mui/material/styles'\n\nimport { Flag as FlagOutlinedIcon } from '@mxenabled/mx-icons'\n\nimport type { Transaction } from '../../../../core'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\n\ninterface FlagTransactionProps {\n transaction: Transaction\n}\n\nconst FlagTransaction: React.FC<FlagTransactionProps> = ({ transaction }) => {\n const { updateTransaction } = useTransactionStore()\n const { transactions: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const theme = useTheme()\n const isDarkMode = theme.palette.mode === 'dark'\n\n const handleFlagTransaction = async () => {\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_CLICK_FLAG, { transaction_guid: transaction.guid })\n await updateTransaction({ ...transaction, is_flagged: !transaction.is_flagged })\n }\n\n return (\n <div className=\"mx-txn-transaction-flag\">\n <ToggleButton\n aria-label={copy.flag_btn_aria}\n aria-pressed={transaction.is_flagged}\n color={isDarkMode ? 'primary' : 'warning'}\n onClick={handleFlagTransaction}\n selected={transaction.is_flagged}\n sx={{\n borderRadius: 6,\n color: isDarkMode ? 'common.white' : 'secondary.main',\n '&.Mui-selected': {\n color: isDarkMode ? 'primary.main' : 'common.white',\n backgroundColor: isDarkMode ? alpha(theme.palette.primary.main, 0.25) : 'warning.dark',\n ':hover': {\n color: isDarkMode ? 'primary.main' : 'common.white',\n backgroundColor: isDarkMode ? alpha(theme.palette.primary.main, 0.2) : 'warning.main',\n },\n },\n ':hover': {\n color: isDarkMode ? 'common.white' : 'warning.contrastText',\n backgroundColor: isDarkMode ? alpha(theme.palette.primary.main, 0.2) : 'warning.light',\n },\n }}\n value=\"flagged\"\n >\n <FlagOutlinedIcon color=\"inherit\" />\n </ToggleButton>\n </div>\n )\n}\nexport default observer(FlagTransaction)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport Avatar from '@mui/material/Avatar'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { CategoryIcon, CategoryIconVariants, Icon, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useTransactionStore } from '../../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../../core/constants'\nimport { type Transaction } from '../../../../core'\n\ninterface TransactionDetailsViewProps {\n transaction: Transaction\n}\n\nconst renderItem = (\n icon: React.ReactNode,\n primary: string,\n secondary: React.ReactNode,\n show: boolean = true,\n dividerVariant: 'inset' | 'fullWidth' = 'inset',\n) => {\n if (!show) return null\n return (\n <React.Fragment>\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: 'neutral.light' }} variant=\"rounded\">\n {icon}\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={primary}\n secondary={secondary}\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n </ListItem>\n <Divider variant={dividerVariant} />\n </React.Fragment>\n )\n}\n\nconst TransactionDetailsView = ({ transaction }: TransactionDetailsViewProps) => {\n const { transactions: copy } = useGlobalCopyStore()\n const { tags } = useTransactionStore()\n\n const tagNames = React.useMemo(() => {\n const tagMap = new Map(tags.map((tag) => [tag.guid, tag.name]))\n\n return transaction.tags\n .map((tagGuid) => tagMap.get(tagGuid))\n .filter(Boolean)\n .join(' / ')\n }, [tags, transaction.tags])\n\n return (\n <List sx={{ '& .MuiListItem-root': { px: 24, py: 12 } }}>\n {renderItem(\n <CategoryIcon\n categoryGuid={transaction.top_level_category_guid}\n size={24}\n sx={{ color: 'text.primary' }}\n variant={CategoryIconVariants.Transparent}\n />,\n copy.category_title,\n <Text bold={true} variant=\"body1\">\n {transaction.category ?? copy.actions_select_a_category}\n </Text>,\n )}\n\n {renderItem(\n <Icon name=\"calendar_month\" sx={{ color: 'text.primary' }} />,\n copy.date_title,\n <Text bold={true} variant=\"body1\">\n {formatDate(fromUnixTime(transaction.date), DATE_FORMATS_INTL.YEAR_MONTH_DAY)}\n </Text>,\n )}\n\n {renderItem(\n <Icon name=\"article\" sx={{ color: 'text.primary' }} />,\n copy.memo_title,\n <Text bold={true} variant=\"body1\">\n {transaction.memo ?? copy.memo_desc}\n </Text>,\n Boolean(transaction.memo),\n transaction.tags?.length > 0 ? 'inset' : 'fullWidth',\n )}\n\n {renderItem(\n <Icon name=\"local_offer\" sx={{ color: 'text.primary' }} />,\n copy.tags_title,\n <Text bold={true} variant=\"body1\">\n {transaction.tags?.length ? tagNames : copy.tags_desc}\n </Text>,\n Boolean(transaction.tags?.length),\n 'fullWidth',\n )}\n </List>\n )\n}\n\nexport default observer(TransactionDetailsView)\n","import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { useTheme } from '@mui/material/styles'\nimport type { Theme } from '@mui/material/styles'\n\nimport { type BarSeriesType, BarChart } from '@mui/x-charts'\n\nimport type { BarDataProps } from '../../insights/types/Charts/BarChart'\n\nexport interface TinyBarChartProps {\n data: BarDataProps[]\n color: (theme: Theme) => string | undefined\n width?: number\n height?: number\n}\n\nexport const TinyBarChart: React.FC<TinyBarChartProps> = ({\n data,\n color,\n width = 85,\n height = 65,\n}) => {\n const theme = useTheme()\n\n const chartData = {\n series: [\n {\n data: data.map(({ value }) => value),\n type: 'bar',\n },\n ] as BarSeriesType[],\n xAxis: [\n {\n data: data.map(({ label }) => label),\n scaleType: 'band' as const,\n categoryGapRatio: 0.3,\n },\n ],\n }\n\n const colorRange = data.map((_, index) =>\n index === data.length - 1 ? color(theme) : `${color(theme)}80`,\n )\n\n const createRoundedRectPath = (w: number, h: number) => {\n if (w <= 0 || h <= 0) return ''\n const r = Math.min(6, w / 2, h / 2)\n return `M${r},0 L${w - r},0 Q${w},0 ${w},${r} L${w},${h} L0,${h} L0,${r} Q0,0 ${r},0 Z`\n }\n\n return (\n <Stack\n sx={{\n width,\n height,\n }}\n >\n <BarChart\n axisHighlight={{\n x: 'none',\n y: 'none',\n }}\n height={height}\n margin={{\n bottom: -10,\n left: 0,\n right: 0,\n top: 10,\n }}\n series={chartData.series}\n slots={{\n bar: ({ ownerState, ...props }) => {\n const { ariaLabel } = data[ownerState.dataIndex]\n return (\n <g aria-label={ariaLabel}>\n <path\n d={createRoundedRectPath(props.width, props.height)}\n fill={colorRange[ownerState.dataIndex]}\n transform={`translate(${props.x}, ${props.y})`}\n />\n </g>\n )\n },\n axisTickLabel: ({ text, ...restProps }) => {\n const label = data[data.length - 1]?.label\n return (\n <text\n {...restProps}\n style={\n {\n ...restProps.style,\n fontSize: 6.75,\n lineHeight: '9px',\n fontWeight: label === text ? 'bold' : 400,\n } as React.CSSProperties\n }\n >\n {text}\n </text>\n )\n },\n }}\n sx={{\n '& .MuiChartsAxis-bottom .MuiChartsAxis-tickContainer:first-of-type .MuiChartsAxis-tick':\n {\n display: 'none',\n },\n }}\n width={width}\n xAxis={chartData.xAxis}\n yAxis={[{ width: 0, position: 'none' }]}\n />\n </Stack>\n )\n}\n","import type { Theme } from '@mui/material/styles'\n\nimport { TinyBarChart } from '../../../common/components/TinyBarChart'\nimport type { CommonCopy } from '../../../core/types/localization/CommonCopy'\nimport { type Beat } from '../../../insights/types/CommonBeat'\n\nimport { buildChartData, buildDataSeries, type ChartDataProps } from '../../utils/Transactions'\n\nexport const BeatTemplates = {\n BILL_AMOUNT_NOT_STANDARD: 'BillAmountNotStandard',\n}\n\nexport const getEmbeddedInstanceSlotByBeatTemplates = (copy: CommonCopy, beat?: Beat) => {\n if (beat) {\n switch (beat.template) {\n case BeatTemplates.BILL_AMOUNT_NOT_STANDARD: {\n const dataSeries = beat.data_series\n ? (buildDataSeries(beat.data_series) as ChartDataProps[])\n : []\n const chartData = buildChartData(dataSeries, beat.payload?.merchant_name)\n\n return {\n instanceSlot: (\n <TinyBarChart\n color={(theme: Theme) => {\n return theme.palette.categories.billsUtilities\n }}\n data={chartData.slice(-3)}\n />\n ),\n dataSeries,\n chartData,\n callToAction: copy.view_history,\n }\n }\n default: {\n return null\n }\n }\n }\n return null\n}\n","import React, { useMemo } from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Paper from '@mui/material/Paper'\nimport Snackbar from '@mui/material/Snackbar'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { MerchantLogo, P, Text } from '@mxenabled/mxui'\n\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { isBefore } from 'date-fns/isBefore'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n useCategoryStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n useUserStore,\n} from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { Transaction } from '../../../core'\nimport { isFeatureEnabled } from '../../../core/utils/UserUtils'\nimport { ChartTransactionWithDrillDown, EmbeddedCard } from '../../../insights'\n\nimport {\n BottomActions,\n DEFAULT_BOTTOM_ACTIONS,\n DEFAULT_TOP_ACTIONS,\n TopActions,\n} from '../../constants/Actions'\n\nimport {\n AddMerchantBudgetAction,\n CategoryAction,\n DateAction,\n DeleteAction,\n DeleteLogoAction,\n ExcludeAction,\n MemoAction,\n SplitAction,\n TagsAction,\n} from './transactiondetails/actions'\nimport Description from './transactiondetails/Description'\nimport FlagTransaction from './transactiondetails/FlagTransaction'\nimport TransactionDetailsView from './transactiondetails/TransactionDetailsView'\nimport { getEmbeddedInstanceSlotByBeatTemplates } from './getEmbeddedInstanceSlotByBeatTemplates'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\nexport interface TransactionDetailsProps {\n bottomActions?: BottomActions[]\n canFlagTransaction?: boolean\n topActions?: TopActions[]\n transaction: Transaction\n}\n\nconst TransactionDetails: React.FC<TransactionDetailsProps> = ({\n bottomActions = DEFAULT_BOTTOM_ACTIONS,\n canFlagTransaction = true,\n topActions = DEFAULT_TOP_ACTIONS,\n transaction,\n}) => {\n const { onEvent } = useEvent()\n const { isCopyLoaded } = useGlobalUiStore()\n const { userFeatures } = useUserStore()\n const { accounts: copy, common: commonCopy, insights_feed: insightsCopy } = useGlobalCopyStore()\n\n const { detailedCategories } = useCategoryStore()\n const {\n alert,\n associatedBeats,\n detailedTransactions,\n cachedStartDate,\n loadEmbeddedInstanceTransactions,\n setAlert,\n } = useTransactionStore()\n\n const [showTranscationDrilldownDrawer, setShowTransactionDrillDownDrawer] = React.useState(false)\n\n const [isLoading, setIsLoading] = React.useState(false)\n const [closeTipSection, setCloseTipSection] = React.useState(false)\n const theme = useTheme()\n\n const showFullNumber = transaction?.number && transaction.number.length > 4\n\n const beat = React.useMemo(() => {\n return associatedBeats.find((beat) => beat.associated_transaction_guid === transaction.guid)\n }, [associatedBeats, transaction])\n\n const embeddedData = getEmbeddedInstanceSlotByBeatTemplates(commonCopy, beat)\n\n const [selectedTabIndex, setSelectedTabIndex] = React.useState(\n embeddedData ? embeddedData.dataSeries.length - 1 : 0,\n )\n\n React.useEffect(\n () =>\n onEvent(ANALYTICS_EVENTS.TRANSACTION_DETAILS_VIEW, { transaction_guid: transaction.guid }),\n [],\n )\n\n React.useEffect(() => {\n if (!embeddedData || embeddedData.dataSeries.length === 0) return\n\n const { date: selectedSeriesItemDate } = embeddedData.dataSeries[selectedTabIndex]\n\n const start = startOfMonth(selectedSeriesItemDate)\n\n if (isBefore(start, cachedStartDate)) {\n setIsLoading(true)\n loadEmbeddedInstanceTransactions(start).finally(() => {\n setIsLoading(false)\n })\n }\n }, [selectedTabIndex, embeddedData, cachedStartDate])\n\n //if merchant_guid is null then no need to show the MerchantBudget action.\n const updatedBottomActions =\n bottomActions.includes(BottomActions.MerchantBudget) && !transaction?.merchant_guid\n ? bottomActions.filter((action) => action !== BottomActions.MerchantBudget)\n : bottomActions\n\n const embeddedCardDataCategory = useMemo(() => {\n if (embeddedData) {\n const category = detailedCategories.find(\n (cat) => cat.guid === transaction.top_level_category_guid,\n )\n const mean = beat?.payload?.average_amount ?? 0\n const currentAmount = transaction.amount\n\n let changetype = insightsCopy.general.increased_text\n if (currentAmount - mean < 0) {\n changetype = insightsCopy.general.decreased_text\n }\n const percentageAmount =\n mean === 0 ? 0 : Math.round((Math.abs(currentAmount - mean) / mean) * 100)\n\n return { category, percentageAmount, changetype }\n }\n return null\n }, [embeddedData, detailedCategories])\n\n const filteredTransactions = useMemo(() => {\n if (!embeddedData?.dataSeries?.length) {\n return []\n }\n\n const { guid: selectedSeriesItemGuid, date: selectedSeriesItemDate } =\n embeddedData.dataSeries[selectedTabIndex]\n\n const start = startOfMonth(selectedSeriesItemDate)\n const end = endOfMonth(selectedSeriesItemDate)\n\n return detailedTransactions.filter((t) => {\n return (\n t.date >= getUnixTime(start) &&\n t.date <= getUnixTime(end) &&\n t.guid === selectedSeriesItemGuid\n )\n })\n }, [selectedTabIndex, embeddedData, detailedTransactions, isLoading])\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n const shouldShowViewOnlyMode = isFeatureEnabled(userFeatures, 'MX_TXN_DETAILS_VIEW_ONLY')\n\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n return (\n <Box className=\"mx-txn-transaction-details\" width=\"100%\">\n {transaction && (\n <Stack>\n <Stack gap={12} p={24}>\n <Paper elevation={2} sx={{ width: 64 }}>\n <MerchantLogo\n categoryGuid={transaction.top_level_category_guid || ''}\n merchantGuid={transaction.merchant_guid || ''}\n size={64}\n />\n </Paper>\n\n <Description transaction={transaction} viewOnly={shouldShowViewOnlyMode} />\n\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ minHeight: 44 }}>\n <P color={transaction.isIncome ? 'success.main' : 'text.primary'} variant=\"h1\">\n {transaction.isIncome ? '+' : ''}\n {formatCurrency(transaction.amount, '0,0.00')}\n </P>\n {!shouldShowViewOnlyMode && canFlagTransaction && (\n <FlagTransaction transaction={transaction} />\n )}\n </Stack>\n\n {embeddedData?.instanceSlot && (\n <EmbeddedCard\n callToAction={embeddedData.callToAction}\n description={\n buildDynamicCopy(\n insightsCopy.general.embedded_description,\n embeddedCardDataCategory!.changetype,\n <strong>{embeddedCardDataCategory!.percentageAmount}</strong>,\n ) as string\n }\n instanceSlot={embeddedData.instanceSlot}\n onCtaClick={() => {\n setShowTransactionDrillDownDrawer(true)\n }}\n title={beat!.html_micro_title!}\n />\n )}\n <Stack sx={{ bgcolor: bgColor, borderRadius: '4px', gap: 4, p: 8 }}>\n <Text bold={true}>\n {`${transaction.account}\n ${\n showFullNumber\n ? transaction.number\n : '\\u2022'.repeat(4).concat(transaction.number ?? '')\n }`}\n </Text>\n <Text bold={true} truncate={true} variant=\"tiny\">\n {transaction.feed_description}\n </Text>\n </Stack>\n </Stack>\n\n <Paper square={true} sx={{ boxShadow: 'none' }}>\n {shouldShowViewOnlyMode ? (\n <TransactionDetailsView transaction={transaction} />\n ) : (\n <List>\n {topActions.map((action, index) => (\n <React.Fragment key={action}>\n {action === TopActions.Category && <CategoryAction transaction={transaction} />}\n {action === TopActions.Date && <DateAction transaction={transaction} />}\n {action === TopActions.Memo && <MemoAction transaction={transaction} />}\n {action === TopActions.Tags && <TagsAction transaction={transaction} />}\n <Divider\n component=\"li\"\n variant={index < topActions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n </List>\n )}\n </Paper>\n\n {!shouldShowViewOnlyMode && updatedBottomActions.length > 0 && (\n <React.Fragment>\n <Text bold={true} mb={8} ml={26} mt={16} variant=\"body1\">\n {copy.actions}\n </Text>\n\n <Paper square={true} sx={{ boxShadow: 'none' }}>\n <List>\n {updatedBottomActions.map((action, index) => (\n <React.Fragment key={action}>\n {action === BottomActions.MerchantBudget && (\n <AddMerchantBudgetAction transaction={transaction} />\n )}\n {action === BottomActions.SplitTransaction && (\n <SplitAction transaction={transaction} />\n )}\n {action === BottomActions.HideTransaction && (\n <ExcludeAction transaction={transaction} />\n )}\n {action === BottomActions.MerchantLogo && (\n <DeleteLogoAction transaction={transaction} />\n )}\n <Divider\n component=\"li\"\n variant={index < updatedBottomActions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n\n {/* \n Show DeleteAction only if:\n - The transaction is manual\n - The transaction is NOT a parent transaction (no parent_guid)\n - The transaction has NOT been split (has_been_split is false)\n \n This ensures delete is hidden for parent or split transactions.\n */}\n {transaction.is_manual &&\n !transaction.parent_guid &&\n !transaction.has_been_split && <DeleteAction transaction={transaction} />}\n </List>\n </Paper>\n </React.Fragment>\n )}\n </Stack>\n )}\n {beat && embeddedData && (\n <ChartTransactionWithDrillDown\n ariaLabel={formatDate(\n embeddedData?.dataSeries[selectedTabIndex]?.date,\n DATE_FORMATS_INTL.MONTH,\n )}\n barChartProps={{\n amounts: {\n average: beat.payload.average_amount,\n formattedAverage: formatCurrency(beat.payload.average_amount, '0,0'),\n },\n color: embeddedCardDataCategory!.category?.color || '',\n data: embeddedData.chartData,\n margin: { bottom: 10, left: 24, right: 24, top: 20 },\n monthlyAmountLabel: insightsCopy.general.monthly_amount,\n onBarClick: (index) => {\n setSelectedTabIndex(index)\n },\n trendAmountLabel: insightsCopy.general.trend,\n legendPosition: 'top',\n }}\n beat={{\n heading: beat.html_title,\n subHeading: {\n category_guid: transaction.category_guid ?? '',\n merchant_guid: transaction.merchant_guid ?? '',\n description: transaction.description ?? '',\n },\n }}\n data={embeddedData.chartData}\n defaultSelectedIndex={selectedTabIndex}\n icon={\n <MerchantLogo\n alt={transaction.description ?? ''}\n categoryGuid={transaction.category_guid ?? ''}\n merchantGuid={transaction.merchant_guid ?? ''}\n size={16}\n />\n }\n isOpen={showTranscationDrilldownDrawer}\n onClose={() => {\n setShowTransactionDrillDownDrawer(false)\n setSelectedTabIndex(embeddedData!.dataSeries.length - 1)\n }}\n onTabChange={(index: number) => {\n setSelectedTabIndex(index)\n }}\n tipSection={\n !closeTipSection\n ? {\n message: buildDynamicCopy(\n insightsCopy.general.tip_section_message,\n <strong>{insightsCopy.general.tip_section_title}</strong>,\n <strong>{beat.primary_transaction?.description}</strong>,\n ) as string,\n onDismiss: () => setCloseTipSection(true),\n }\n : undefined\n }\n title={insightsCopy.general.transaction_history_title}\n transactionListProps={{\n showLoader: isLoading,\n showInsights: true,\n transaction: filteredTransactions,\n }}\n />\n )}\n <Snackbar\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n autoHideDuration={3500}\n onClose={() => setAlert('')}\n open={Boolean(alert)}\n >\n <Alert closeText=\"\" onClose={() => setAlert('')} severity=\"success\" variant=\"filled\">\n {alert}\n </Alert>\n </Snackbar>\n </Box>\n )\n}\n\nexport default observer(TransactionDetails)\n"],"names":["TopActions","BottomActions","DEFAULT_TOP_ACTIONS","DEFAULT_BOTTOM_ACTIONS","BudgetDetailsTopSection","startDate","onViewHistory","totalTransaction","amount","spentPercentage","remainingAmount","iconColor","icon","budgetsCopy","useGlobalCopyStore","jsx","React","jsxs","Box","Stack","P","fromTimestampToMonthYear","Button","ChevronRight","Text","StatusIndicator","H2","formatCurrency","buildDynamicCopy","MerchantBudgetDetailsDrawer","merchantBudget","transaction","onClose","isOpen","setCurrencyDialogAction","renderingToast","commonCopy","sortedTransactions","useTransactionStore","transactionTotal","acc","t","getRemainingAmountSpentPercentage","Drawer","CurrencyDialogAction","MerchantLogo","TransactionList","MerchantBudgetDetailsDrawer$1","observer","AddMerchantBudgetAction","currencyDialogAction","setAmount","isError","setIsError","inProgressRef","lastActionType","setLastActionType","theme","useTheme","addMerchantBudget","updateMerchantBudget","deleteMerchantBudget","getMerchantBudgetByMerchantGuid","alert","setAlert","useBudgetsStore","setFilter","accounts","useAccountStore","bgColor","announce","ariaLive","useAriaLive","merchantBudgetDetailsDrawerOpen","setMerchantBudgetDetailsDrawerOpen","existingMerchantBudget","handleModalClose","handleClick","actionDetails","handlePrimaryAction","apiTrigger","successAlertMessage","errorAlertMessage","isSuccess","alertMessage","dateRange","startOfMonth","endOfMonth","account","trn","snackBar","Toast","ListItem","ListItemButton","ListItemAvatar","Avatar","Icon","ListItemText","ListItemIcon","action","CurrencyDialog","CategoryAction","addOrUpdateTransactionRule","updateTransaction","categories","useCategoryStore","onEvent","useEvent","setShouldDisableDrawerScroll","updateManualTransaction","useTransactionsUiStore","copy","open","setOpen","selectedGuid","setSelectedGuid","handleCategoryChange","applyToAll","ANALYTICS_EVENTS","handleSelected","guid","category","c","handleCloseDrawer","item","ON_CLICK_EVENTS","CategoryIcon","CategoryIconVariants","CategorySelectorDrawer","Dialog","DateAction","date","setDate","handleDateSelected","getUnixTime","handleSave","fromUnixTime","DATE_FORMATS_INTL","Calendar","CalendarSelectionTypes","DeleteAction","removeTransaction","handleDelete","DeleteOutlinedIcon","DeleteAction$1","DeleteLogoAction","handleDeleteLogo","DeleteLogoAction$1","ExcludeAction","isExcluded","toggleExclude","Switch","ExcludeAction$1","TransactionAmountHeader","description","isIncome","merchant_guid","payee","top_level_category_guid","MemoAction","memoText","setMemoText","TextField","e","MemoAction$1","SplitRow","index","onDeleteRow","onCategoryChanged","onUpdateAmount","split","categorySelectorOpen","setCategorySelectorOpen","isTopRow","handleChangeAmount","value","Grid","ChevronRightIcon","CancelIcon","CurrencyInput","IconButton","SplitRow$1","SplitManager","onAddSplit","onDeleteSplit","splits","error","setError","errorCopy","SplitManager$1","SplitAction","splitTransaction","unSplitTransaction","transactionSplitting","INITIAL_SPLIT","EMPTY_SPLIT","isSplitDrawerOpen","setIsSplitDrawerOpen","isDeleteSplitOpen","setIsDeleteSplitOpen","setSplits","handleAddSplit","updatedSplits","handleDeleteSplit","row","handleUpdateAmount","sum","handleCategoryChanged","categoryGuid","handleCancel","handleUnSplit","hasError","hasCategoryError","hasAmountError","SplitAction$1","Header","addTag","isAdding","setIsAdding","tagName","setTagName","tagNameError","setTagNameError","inputRef","handleAdding","handleAddTag","Header$1","SearchBox","onSearchValueChanged","searchValue","cancelButton","HighlightOffIcon","InputAdornment","SearchIcon","SearchBox$1","TagRow","onTagChecked","selectedTags","tag","removeTag","updateTag","editOpen","setEditOpen","deleteOpen","setDeleteOpen","handleSaveTag","handleDeleteTag","handleEditClick","handleDeleteClick","EditIcon","Checkbox","TagRow$1","TagManager","tags","setSearchValue","filteredTags","Paper","List","Divider","TagManager$1","TagsAction","updateTaggings","setSelectedTags","handleTagChecked","tagNames","tagGuid","TagsAction$1","Description","viewOnly","isEditing","setIsEditing","setDescription","handleEdit","FormGroup","Description$1","FlagTransaction","isDarkMode","handleFlagTransaction","ToggleButton","alpha","FlagOutlinedIcon","FlagTransaction$1","renderItem","primary","secondary","show","dividerVariant","TransactionDetailsView","tagMap","formatDate","TransactionDetailsView$1","TinyBarChart","data","color","width","height","chartData","label","colorRange","_","createRoundedRectPath","w","h","r","BarChart","ownerState","props","ariaLabel","text","restProps","BeatTemplates","getEmbeddedInstanceSlotByBeatTemplates","beat","dataSeries","buildDataSeries","buildChartData","TransactionDetails","bottomActions","canFlagTransaction","topActions","isCopyLoaded","useGlobalUiStore","userFeatures","useUserStore","insightsCopy","detailedCategories","associatedBeats","detailedTransactions","cachedStartDate","loadEmbeddedInstanceTransactions","showTranscationDrilldownDrawer","setShowTransactionDrillDownDrawer","isLoading","setIsLoading","closeTipSection","setCloseTipSection","showFullNumber","embeddedData","selectedTabIndex","setSelectedTabIndex","selectedSeriesItemDate","start","isBefore","updatedBottomActions","embeddedCardDataCategory","useMemo","cat","mean","currentAmount","changetype","percentageAmount","filteredTransactions","selectedSeriesItemGuid","end","Loader","shouldShowViewOnlyMode","isFeatureEnabled","EmbeddedCard","ChartTransactionWithDrillDown","Snackbar","Alert","TransactionDetails$1"],"mappings":"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"}
|