@actual-app/web 23.12.0 → 24.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/build/asset-manifest.json +13 -15
  2. package/build/data/migrations/1632571489012_remove_cache.js +18 -17
  3. package/build/index.html +1 -1
  4. package/build/kcab/{kcab.worker.676aa69de34599d64b7b.js → kcab.worker.26846256cb1531298b26.js} +61 -56
  5. package/build/kcab/kcab.worker.26846256cb1531298b26.js.map +1 -0
  6. package/build/static/js/231.e37c027b.chunk.js +2 -0
  7. package/build/static/js/231.e37c027b.chunk.js.map +1 -0
  8. package/build/static/js/553.e06509f6.chunk.js +2 -0
  9. package/build/static/js/553.e06509f6.chunk.js.map +1 -0
  10. package/build/static/js/main.eea3298c.js +201 -0
  11. package/build/static/js/main.eea3298c.js.map +1 -0
  12. package/build/static/js/narrow-components.574c7b46.chunk.js +2 -0
  13. package/build/static/js/narrow-components.574c7b46.chunk.js.map +1 -0
  14. package/build/static/js/reports.892e778c.chunk.js +2 -0
  15. package/build/static/js/reports.892e778c.chunk.js.map +1 -0
  16. package/build/static/js/wide-components.8ded5c13.chunk.js +2 -0
  17. package/build/static/js/wide-components.8ded5c13.chunk.js.map +1 -0
  18. package/package.json +1 -2
  19. package/build/kcab/kcab.worker.676aa69de34599d64b7b.js.map +0 -1
  20. package/build/static/js/226.8132a539.chunk.js +0 -2
  21. package/build/static/js/226.8132a539.chunk.js.map +0 -1
  22. package/build/static/js/231.370f17f8.chunk.js +0 -2
  23. package/build/static/js/231.370f17f8.chunk.js.map +0 -1
  24. package/build/static/js/444.301f7ece.chunk.js +0 -15
  25. package/build/static/js/444.301f7ece.chunk.js.map +0 -1
  26. package/build/static/js/main.39d3269d.js +0 -188
  27. package/build/static/js/main.39d3269d.js.map +0 -1
  28. package/build/static/js/narrow-components.b0c96dd8.chunk.js +0 -2
  29. package/build/static/js/narrow-components.b0c96dd8.chunk.js.map +0 -1
  30. package/build/static/js/reports.dec86016.chunk.js +0 -2
  31. package/build/static/js/reports.dec86016.chunk.js.map +0 -1
  32. package/build/static/js/wide-components.eb0a5f91.chunk.js +0 -2
  33. package/build/static/js/wide-components.eb0a5f91.chunk.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/narrow-components.b0c96dd8.chunk.js","mappings":"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","sources":["components/budget/BalanceWithCarryover.tsx","components/budget/report/BalanceTooltip.tsx","components/budget/rollover/CoverTooltip.tsx","components/budget/rollover/BalanceTooltip.tsx","components/common/ButtonLink.tsx","components/SyncRefresh.tsx","components/common/Card.tsx","components/common/Label.tsx","../../../node_modules/react-simple-pull-to-refresh/build/index.esm.js","components/responsive/PullToRefresh.tsx","components/budget/MobileTable.tsx","components/budget/MobileBudgetTable.js","components/budget/MobileBudget.js","components/accounts/MobileAccounts.js","components/accounts/MobileAccountDetails.js","components/accounts/MobileAccount.js","../../loot-core/src/shared/categories.ts"],"sourcesContent":["import React, { type ComponentProps } from 'react';\n\nimport useFeatureFlag from '../../hooks/useFeatureFlag';\nimport ArrowThinRight from '../../icons/v1/ArrowThinRight';\nimport { type CSSProperties } from '../../style';\nimport View from '../common/View';\nimport CellValue from '../spreadsheet/CellValue';\nimport useSheetValue from '../spreadsheet/useSheetValue';\n\nimport { makeAmountStyle } from './util';\n\ntype BalanceWithCarryoverProps = {\n carryover: ComponentProps<typeof CellValue>['binding'];\n balance: ComponentProps<typeof CellValue>['binding'];\n goal?: ComponentProps<typeof CellValue>['binding'];\n budgeted?: ComponentProps<typeof CellValue>['binding'];\n disabled?: boolean;\n style?: CSSProperties;\n balanceStyle?: CSSProperties;\n carryoverStyle?: CSSProperties;\n};\nexport default function BalanceWithCarryover({\n carryover,\n balance,\n goal,\n budgeted,\n disabled,\n style,\n balanceStyle,\n carryoverStyle,\n}: BalanceWithCarryoverProps) {\n let carryoverValue = useSheetValue(carryover);\n let balanceValue = useSheetValue(balance);\n let goalValue = useSheetValue(goal);\n let budgetedValue = useSheetValue(budgeted);\n let isGoalTemplatesEnabled = useFeatureFlag('goalTemplatesEnabled');\n return (\n <View style={style}>\n <CellValue\n binding={balance}\n type=\"financial\"\n getStyle={value =>\n makeAmountStyle(\n value,\n isGoalTemplatesEnabled ? goalValue : null,\n budgetedValue,\n )\n }\n style={{\n textAlign: 'right',\n ...(!disabled && {\n cursor: 'pointer',\n ':hover': { textDecoration: 'underline' },\n }),\n ...balanceStyle,\n }}\n />\n {carryoverValue && (\n <View\n style={{\n alignSelf: 'center',\n marginLeft: 2,\n position: 'absolute',\n right: -8,\n top: 0,\n bottom: 0,\n justifyContent: 'center',\n ...carryoverStyle,\n }}\n >\n <ArrowThinRight\n width={7}\n height={7}\n style={makeAmountStyle(balanceValue, goalValue, budgetedValue)}\n />\n </View>\n )}\n </View>\n );\n}\n","import React from 'react';\n\nimport { reportBudget } from 'loot-core/src/client/queries';\n\nimport Menu from '../../common/Menu';\nimport useSheetValue from '../../spreadsheet/useSheetValue';\nimport { Tooltip } from '../../tooltips';\n\ntype BalanceTooltipProps = {\n categoryId: string;\n tooltip: { close: () => void };\n monthIndex: number;\n onBudgetAction: (idx: number, action: string, arg: unknown) => void;\n onClose?: () => void;\n};\n\nexport default function BalanceTooltip({\n categoryId,\n tooltip,\n monthIndex,\n onBudgetAction,\n onClose,\n ...tooltipProps\n}: BalanceTooltipProps) {\n let carryover = useSheetValue(reportBudget.catCarryover(categoryId));\n\n let _onClose = () => {\n tooltip.close();\n onClose?.();\n };\n\n return (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={_onClose}\n {...tooltipProps}\n >\n <Menu\n onMenuSelect={type => {\n onBudgetAction(monthIndex, 'carryover', {\n category: categoryId,\n flag: !carryover,\n });\n _onClose();\n }}\n items={[\n {\n name: 'carryover',\n text: carryover\n ? 'Remove overspending rollover'\n : 'Rollover overspending',\n },\n ]}\n />\n </Tooltip>\n );\n}\n","import React, { type ComponentProps, useState } from 'react';\n\nimport useCategories from '../../../hooks/useCategories';\nimport CategoryAutocomplete from '../../autocomplete/CategoryAutocomplete';\nimport Button from '../../common/Button';\nimport InitialFocus from '../../common/InitialFocus';\nimport View from '../../common/View';\nimport { Tooltip } from '../../tooltips';\nimport { addToBeBudgetedGroup } from '../util';\n\ntype CoverTooltipProps = {\n tooltipProps?: ComponentProps<typeof Tooltip>;\n onSubmit: (category: unknown) => void;\n onClose: () => void;\n};\nexport default function CoverTooltip({\n tooltipProps,\n onSubmit,\n onClose,\n}: CoverTooltipProps) {\n let { grouped: categoryGroups } = useCategories();\n categoryGroups = addToBeBudgetedGroup(\n categoryGroups.filter(g => !g.is_income),\n );\n let [category, setCategory] = useState(null);\n\n function submit() {\n if (category) {\n onSubmit(category);\n onClose();\n }\n }\n\n return (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 10 }}\n {...tooltipProps}\n onClose={onClose}\n >\n <View style={{ marginBottom: 5 }}>Cover from category:</View>\n\n <InitialFocus>\n {node => (\n <CategoryAutocomplete\n categoryGroups={categoryGroups}\n value={null}\n openOnFocus={true}\n onUpdate={id => {}}\n onSelect={id => setCategory(id)}\n inputProps={{\n inputRef: node,\n onKeyDown: e => {\n if (e.key === 'Enter') {\n submit();\n }\n },\n }}\n />\n )}\n </InitialFocus>\n\n <View\n style={{\n alignItems: 'flex-end',\n marginTop: 10,\n }}\n >\n <Button\n type=\"primary\"\n style={{\n fontSize: 12,\n paddingTop: 3,\n }}\n onClick={submit}\n >\n Transfer\n </Button>\n </View>\n </Tooltip>\n );\n}\n","import React, { useState } from 'react';\n\nimport { rolloverBudget } from 'loot-core/src/client/queries';\n\nimport Menu from '../../common/Menu';\nimport useSheetValue from '../../spreadsheet/useSheetValue';\nimport { Tooltip } from '../../tooltips';\n\nimport CoverTooltip from './CoverTooltip';\nimport TransferTooltip from './TransferTooltip';\n\ntype BalanceTooltipProps = {\n categoryId: string;\n tooltip: { close: () => void };\n monthIndex: number;\n onBudgetAction: (idx: number, action: string, arg?: unknown) => void;\n onClose?: () => void;\n};\nexport default function BalanceTooltip({\n categoryId,\n tooltip,\n monthIndex,\n onBudgetAction,\n onClose,\n ...tooltipProps\n}: BalanceTooltipProps) {\n let carryover = useSheetValue(rolloverBudget.catCarryover(categoryId));\n let balance = useSheetValue(rolloverBudget.catBalance(categoryId));\n let [menu, setMenu] = useState('menu');\n\n let _onClose = () => {\n tooltip.close();\n onClose?.();\n };\n\n return (\n <>\n {menu === 'menu' && (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={_onClose}\n {...tooltipProps}\n >\n <Menu\n onMenuSelect={type => {\n if (type === 'carryover') {\n onBudgetAction(monthIndex, 'carryover', {\n category: categoryId,\n flag: !carryover,\n });\n _onClose();\n } else {\n setMenu(type);\n }\n }}\n items={[\n {\n name: 'transfer',\n text: 'Transfer to another category',\n },\n {\n name: 'carryover',\n text: carryover\n ? 'Remove overspending rollover'\n : 'Rollover overspending',\n },\n balance < 0 && {\n name: 'cover',\n text: 'Cover overspending',\n },\n ].filter(x => x)}\n />\n </Tooltip>\n )}\n\n {menu === 'transfer' && (\n <TransferTooltip\n initialAmountName={rolloverBudget.catBalance(categoryId)}\n showToBeBudgeted={true}\n onClose={_onClose}\n onSubmit={(amount, toCategory) => {\n onBudgetAction(monthIndex, 'transfer-category', {\n amount,\n from: categoryId,\n to: toCategory,\n });\n }}\n />\n )}\n\n {menu === 'cover' && (\n <CoverTooltip\n onClose={_onClose}\n onSubmit={fromCategory => {\n onBudgetAction(monthIndex, 'cover', {\n to: categoryId,\n from: fromCategory,\n });\n }}\n />\n )}\n </>\n );\n}\n","import React, { type ComponentProps } from 'react';\nimport { useMatch } from 'react-router-dom';\n\nimport useNavigate from '../../hooks/useNavigate';\nimport { type CSSProperties } from '../../style';\n\nimport Button from './Button';\n\ntype ButtonLinkProps = ComponentProps<typeof Button> & {\n to: string;\n activeStyle?: CSSProperties;\n};\nexport default function ButtonLink({\n to,\n style,\n activeStyle,\n ...props\n}: ButtonLinkProps) {\n const navigate = useNavigate();\n const match = useMatch({ path: to });\n return (\n <Button\n style={{\n ...style,\n ...(match ? activeStyle : {}),\n }}\n activeStyle={activeStyle}\n {...props}\n onClick={e => {\n props.onClick?.(e);\n navigate(to);\n }}\n />\n );\n}\n","import { type ReactNode, useState } from 'react';\n\ntype ChildrenProps = {\n refreshing: boolean;\n onRefresh: () => Promise<void>;\n};\ntype SyncRefreshProps = {\n onSync: () => Promise<void>;\n children: (props: ChildrenProps) => ReactNode;\n};\nexport default function SyncRefresh({ onSync, children }: SyncRefreshProps) {\n let [syncing, setSyncing] = useState(false);\n\n async function onSync_() {\n setSyncing(true);\n await onSync();\n setSyncing(false);\n }\n\n return children({ refreshing: syncing, onRefresh: onSync_ });\n}\n","import { type ComponentProps, forwardRef } from 'react';\n\nimport { theme } from '../../style';\n\nimport View from './View';\n\ntype CardProps = ComponentProps<typeof View>;\n\nconst Card = forwardRef<HTMLDivElement, CardProps>(\n ({ children, ...props }, ref) => {\n return (\n <View\n {...props}\n ref={ref}\n style={{\n marginTop: 15,\n marginLeft: 5,\n marginRight: 5,\n borderRadius: 6,\n backgroundColor: theme.cardBackground,\n borderColor: theme.cardBorder,\n boxShadow: '0 1px 2px #9594A8',\n ...props.style,\n }}\n >\n <View\n style={{\n borderRadius: 6,\n overflow: 'hidden',\n }}\n >\n {children}\n </View>\n </View>\n );\n },\n);\n\nexport default Card;\n","import { type ReactNode } from 'react';\n\nimport { type CSSProperties, theme, styles } from '../../style';\n\nimport Text from './Text';\n\ntype LabelProps = {\n title: ReactNode;\n style?: CSSProperties;\n};\n\nexport default function Label({ title, style }: LabelProps) {\n return (\n <Text\n style={{\n ...styles.text,\n color: theme.tableRowHeaderText,\n textAlign: 'right',\n fontSize: 12,\n marginBottom: 2,\n ...style,\n }}\n >\n {title}\n </Text>\n );\n}\n","import React, { useRef, useEffect } from 'react';\n\nvar DIRECTION;\r\n(function (DIRECTION) {\r\n DIRECTION[DIRECTION[\"UP\"] = -1] = \"UP\";\r\n DIRECTION[DIRECTION[\"DOWN\"] = 1] = \"DOWN\";\r\n})(DIRECTION || (DIRECTION = {}));\n\nfunction isOverflowScrollable(element) {\r\n var overflowType = getComputedStyle(element).overflowY;\r\n if (element === document.scrollingElement && overflowType === 'visible') {\r\n return true;\r\n }\r\n if (overflowType !== 'scroll' && overflowType !== 'auto') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isScrollable(element, direction) {\r\n if (!isOverflowScrollable(element)) {\r\n return false;\r\n }\r\n if (direction === DIRECTION.DOWN) {\r\n var bottomScroll = element.scrollTop + element.clientHeight;\r\n return bottomScroll < element.scrollHeight;\r\n }\r\n if (direction === DIRECTION.UP) {\r\n return element.scrollTop > 0;\r\n }\r\n throw new Error('unsupported direction');\r\n}\r\n/**\r\n * Returns whether a given element or any of its ancestors (up to rootElement) is scrollable in a given direction.\r\n */\r\nfunction isTreeScrollable(element, direction) {\r\n if (isScrollable(element, direction)) {\r\n return true;\r\n }\r\n if (element.parentElement == null) {\r\n return false;\r\n }\r\n return isTreeScrollable(element.parentElement, direction);\r\n}\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css = \".lds-ellipsis {\\n display: inline-block;\\n position: relative;\\n width: 64px;\\n height: 64px; }\\n\\n.lds-ellipsis div {\\n position: absolute;\\n top: 27px;\\n width: 11px;\\n height: 11px;\\n border-radius: 50%;\\n background: #363636;\\n animation-timing-function: cubic-bezier(0, 1, 1, 0); }\\n\\n.lds-ellipsis div:nth-child(1) {\\n left: 6px;\\n animation: lds-ellipsis1 0.6s infinite; }\\n\\n.lds-ellipsis div:nth-child(2) {\\n left: 6px;\\n animation: lds-ellipsis2 0.6s infinite; }\\n\\n.lds-ellipsis div:nth-child(3) {\\n left: 26px;\\n animation: lds-ellipsis2 0.6s infinite; }\\n\\n.lds-ellipsis div:nth-child(4) {\\n left: 45px;\\n animation: lds-ellipsis3 0.6s infinite; }\\n\\n@keyframes lds-ellipsis1 {\\n 0% {\\n transform: scale(0); }\\n 100% {\\n transform: scale(1); } }\\n\\n@keyframes lds-ellipsis3 {\\n 0% {\\n transform: scale(1); }\\n 100% {\\n transform: scale(0); } }\\n\\n@keyframes lds-ellipsis2 {\\n 0% {\\n transform: translate(0, 0); }\\n 100% {\\n transform: translate(19px, 0); } }\\n\";\nstyleInject(css);\n\n// Source: https://loading.io/css/\r\nvar RefreshingContent = function () {\r\n return (React.createElement(\"div\", { className: \"lds-ellipsis\" },\r\n React.createElement(\"div\", null),\r\n React.createElement(\"div\", null),\r\n React.createElement(\"div\", null),\r\n React.createElement(\"div\", null)));\r\n};\n\nvar PullingContent = function () {\r\n return (React.createElement(\"div\", null,\r\n React.createElement(\"p\", null, \"\\u21A7\\u00A0\\u00A0pull to refresh\\u00A0\\u00A0\\u21A7\")));\r\n};\n\nvar css$1 = \".ptr,\\n.ptr__children {\\n height: 100%;\\n width: 100%;\\n overflow: hidden;\\n -webkit-overflow-scrolling: touch;\\n position: relative; }\\n\\n.ptr.ptr--fetch-more-treshold-breached .ptr__fetch-more {\\n display: block; }\\n\\n.ptr__fetch-more {\\n display: none; }\\n\\n/**\\n * Pull down transition \\n */\\n.ptr__children,\\n.ptr__pull-down {\\n transition: transform 0.2s cubic-bezier(0, 0, 0.31, 1); }\\n\\n.ptr__pull-down {\\n position: absolute;\\n overflow: hidden;\\n left: 0;\\n right: 0;\\n top: 0;\\n visibility: hidden; }\\n .ptr__pull-down > div {\\n display: none; }\\n\\n.ptr--dragging {\\n /**\\n * Hide PullMore content is treshold breached\\n */\\n /**\\n * Otherwize, display content\\n */ }\\n .ptr--dragging.ptr--pull-down-treshold-breached .ptr__pull-down--pull-more {\\n display: none; }\\n .ptr--dragging .ptr__pull-down--pull-more {\\n display: block; }\\n\\n.ptr--pull-down-treshold-breached {\\n /**\\n * Force opacity to 1 is pull down trashold breached\\n */\\n /**\\n * And display loader\\n */ }\\n .ptr--pull-down-treshold-breached .ptr__pull-down {\\n opacity: 1 !important; }\\n .ptr--pull-down-treshold-breached .ptr__pull-down--loading {\\n display: block; }\\n\\n.ptr__loader {\\n margin: 0 auto;\\n text-align: center; }\\n\";\nstyleInject(css$1);\n\nvar PullToRefresh = function (_a) {\r\n var _b = _a.isPullable, isPullable = _b === void 0 ? true : _b, _c = _a.canFetchMore, canFetchMore = _c === void 0 ? false : _c, onRefresh = _a.onRefresh, onFetchMore = _a.onFetchMore, _d = _a.refreshingContent, refreshingContent = _d === void 0 ? React.createElement(RefreshingContent, null) : _d, _e = _a.pullingContent, pullingContent = _e === void 0 ? React.createElement(PullingContent, null) : _e, children = _a.children, _f = _a.pullDownThreshold, pullDownThreshold = _f === void 0 ? 67 : _f, _g = _a.fetchMoreThreshold, fetchMoreThreshold = _g === void 0 ? 100 : _g, _h = _a.maxPullDownDistance, maxPullDownDistance = _h === void 0 ? 95 : _h, // max distance to scroll to trigger refresh\r\n _j = _a.resistance, // max distance to scroll to trigger refresh\r\n resistance = _j === void 0 ? 1 : _j, backgroundColor = _a.backgroundColor, _k = _a.className, className = _k === void 0 ? '' : _k;\r\n var containerRef = useRef(null);\r\n var childrenRef = useRef(null);\r\n var pullDownRef = useRef(null);\r\n var fetchMoreRef = useRef(null);\r\n var pullToRefreshThresholdBreached = false;\r\n var fetchMoreTresholdBreached = false; // if true, fetchMore loader is displayed\r\n var isDragging = false;\r\n var startY = 0;\r\n var currentY = 0;\r\n useEffect(function () {\r\n if (!isPullable || !childrenRef || !childrenRef.current)\r\n return;\r\n var childrenEl = childrenRef.current;\r\n childrenEl.addEventListener('touchstart', onTouchStart, { passive: true });\r\n childrenEl.addEventListener('mousedown', onTouchStart);\r\n childrenEl.addEventListener('touchmove', onTouchMove, { passive: false });\r\n childrenEl.addEventListener('mousemove', onTouchMove);\r\n window.addEventListener('scroll', onScroll);\r\n childrenEl.addEventListener('touchend', onEnd);\r\n childrenEl.addEventListener('mouseup', onEnd);\r\n document.body.addEventListener('mouseleave', onEnd);\r\n return function () {\r\n childrenEl.removeEventListener('touchstart', onTouchStart);\r\n childrenEl.removeEventListener('mousedown', onTouchStart);\r\n childrenEl.removeEventListener('touchmove', onTouchMove);\r\n childrenEl.removeEventListener('mousemove', onTouchMove);\r\n window.removeEventListener('scroll', onScroll);\r\n childrenEl.removeEventListener('touchend', onEnd);\r\n childrenEl.removeEventListener('mouseup', onEnd);\r\n document.body.removeEventListener('mouseleave', onEnd);\r\n };\r\n }, [\r\n children,\r\n isPullable,\r\n onRefresh,\r\n pullDownThreshold,\r\n maxPullDownDistance,\r\n canFetchMore,\r\n fetchMoreThreshold,\r\n ]);\r\n /**\r\n * Check onMount / canFetchMore becomes true\r\n * if fetchMoreThreshold is already breached\r\n */\r\n useEffect(function () {\r\n var _a;\r\n /**\r\n * Check if it is already in fetching more state\r\n */\r\n if (!((_a = containerRef) === null || _a === void 0 ? void 0 : _a.current))\r\n return;\r\n var isAlreadyFetchingMore = containerRef.current.classList.contains('ptr--fetch-more-treshold-breached');\r\n if (isAlreadyFetchingMore)\r\n return;\r\n /**\r\n * Proceed\r\n */\r\n if (canFetchMore && getScrollToBottomValue() < fetchMoreThreshold && onFetchMore) {\r\n containerRef.current.classList.add('ptr--fetch-more-treshold-breached');\r\n fetchMoreTresholdBreached = true;\r\n onFetchMore().then(initContainer).catch(initContainer);\r\n }\r\n }, [canFetchMore, children]);\r\n /**\r\n * Returns distance to bottom of the container\r\n */\r\n var getScrollToBottomValue = function () {\r\n if (!childrenRef || !childrenRef.current)\r\n return -1;\r\n var scrollTop = window.scrollY; // is the pixels hidden in top due to the scroll. With no scroll its value is 0.\r\n var scrollHeight = childrenRef.current.scrollHeight; // is the pixels of the whole container\r\n return scrollHeight - scrollTop - window.innerHeight;\r\n };\r\n var initContainer = function () {\r\n requestAnimationFrame(function () {\r\n /**\r\n * Reset Styles\r\n */\r\n if (childrenRef.current) {\r\n childrenRef.current.style.overflowX = 'hidden';\r\n childrenRef.current.style.overflowY = 'auto';\r\n childrenRef.current.style.transform = \"unset\";\r\n }\r\n if (pullDownRef.current) {\r\n pullDownRef.current.style.opacity = '0';\r\n }\r\n if (containerRef.current) {\r\n containerRef.current.classList.remove('ptr--pull-down-treshold-breached');\r\n containerRef.current.classList.remove('ptr--dragging');\r\n containerRef.current.classList.remove('ptr--fetch-more-treshold-breached');\r\n }\r\n if (pullToRefreshThresholdBreached)\r\n pullToRefreshThresholdBreached = false;\r\n if (fetchMoreTresholdBreached)\r\n fetchMoreTresholdBreached = false;\r\n });\r\n };\r\n var onTouchStart = function (e) {\r\n isDragging = false;\r\n if (e instanceof MouseEvent) {\r\n startY = e.pageY;\r\n }\r\n if (window.TouchEvent && e instanceof TouchEvent) {\r\n startY = e.touches[0].pageY;\r\n }\r\n currentY = startY;\r\n // Check if element can be scrolled\r\n if (e.type === 'touchstart' && isTreeScrollable(e.target, DIRECTION.UP)) {\r\n return;\r\n }\r\n // Top non visible so cancel\r\n if (childrenRef.current.getBoundingClientRect().top < 0) {\r\n return;\r\n }\r\n isDragging = true;\r\n };\r\n var onTouchMove = function (e) {\r\n if (!isDragging) {\r\n return;\r\n }\r\n if (window.TouchEvent && e instanceof TouchEvent) {\r\n currentY = e.touches[0].pageY;\r\n }\r\n else {\r\n currentY = e.pageY;\r\n }\r\n containerRef.current.classList.add('ptr--dragging');\r\n if (currentY < startY) {\r\n isDragging = false;\r\n return;\r\n }\r\n if (e.cancelable) {\r\n e.preventDefault();\r\n }\r\n var yDistanceMoved = Math.min((currentY - startY) / resistance, maxPullDownDistance);\r\n // Limit to trigger refresh has been breached\r\n if (yDistanceMoved >= pullDownThreshold) {\r\n isDragging = true;\r\n pullToRefreshThresholdBreached = true;\r\n containerRef.current.classList.remove('ptr--dragging');\r\n containerRef.current.classList.add('ptr--pull-down-treshold-breached');\r\n }\r\n // maxPullDownDistance breached, stop the animation\r\n if (yDistanceMoved >= maxPullDownDistance) {\r\n return;\r\n }\r\n pullDownRef.current.style.opacity = ((yDistanceMoved) / 65).toString();\r\n childrenRef.current.style.overflow = 'visible';\r\n childrenRef.current.style.transform = \"translate(0px, \" + yDistanceMoved + \"px)\";\r\n pullDownRef.current.style.visibility = 'visible';\r\n };\r\n var onScroll = function (e) {\r\n /**\r\n * Check if component has already called onFetchMore\r\n */\r\n if (fetchMoreTresholdBreached)\r\n return;\r\n /**\r\n * Check if user breached fetchMoreThreshold\r\n */\r\n if (canFetchMore && getScrollToBottomValue() < fetchMoreThreshold && onFetchMore) {\r\n fetchMoreTresholdBreached = true;\r\n containerRef.current.classList.add('ptr--fetch-more-treshold-breached');\r\n onFetchMore().then(initContainer).catch(initContainer);\r\n }\r\n };\r\n var onEnd = function () {\r\n isDragging = false;\r\n startY = 0;\r\n currentY = 0;\r\n // Container has not been dragged enough, put it back to it's initial state\r\n if (!pullToRefreshThresholdBreached) {\r\n if (pullDownRef.current)\r\n pullDownRef.current.style.visibility = 'hidden';\r\n initContainer();\r\n return;\r\n }\r\n if (childrenRef.current) {\r\n childrenRef.current.style.overflow = 'visible';\r\n childrenRef.current.style.transform = \"translate(0px, \" + pullDownThreshold + \"px)\";\r\n }\r\n onRefresh().then(initContainer).catch(initContainer);\r\n };\r\n return (React.createElement(\"div\", { className: \"ptr \" + className, style: { backgroundColor: backgroundColor }, ref: containerRef },\r\n React.createElement(\"div\", { className: \"ptr__pull-down\", ref: pullDownRef },\r\n React.createElement(\"div\", { className: \"ptr__loader ptr__pull-down--loading\" }, refreshingContent),\r\n React.createElement(\"div\", { className: \"ptr__pull-down--pull-more\" }, pullingContent)),\r\n React.createElement(\"div\", { className: \"ptr__children\", ref: childrenRef },\r\n children,\r\n React.createElement(\"div\", { className: \"ptr__fetch-more\", ref: fetchMoreRef },\r\n React.createElement(\"div\", { className: \"ptr__loader ptr__fetch-more--loading\" }, refreshingContent)))));\r\n};\n\nexport default PullToRefresh;\n","import React, { type ComponentProps } from 'react';\nimport BasePullToRefresh from 'react-simple-pull-to-refresh';\n\nimport { css } from 'glamor';\n\ntype PullToRefreshProps = ComponentProps<typeof BasePullToRefresh>;\n\nexport default function PullToRefresh(props: PullToRefreshProps) {\n return (\n <div style={{ overflow: 'auto' }}>\n <BasePullToRefresh\n pullDownThreshold={80}\n resistance={2}\n className={String(\n css({\n '& .ptr__pull-down': {\n textAlign: 'center',\n },\n '& .ptr__children': {\n overflow: 'hidden auto',\n },\n }),\n )}\n {...props}\n />\n </div>\n );\n}\n","import React, { type ComponentProps, type ReactNode } from 'react';\n\nimport { type CSSProperties, theme } from '../../style';\nimport View from '../common/View';\n\nexport const ROW_HEIGHT = 50;\n\ntype ListItemProps = ComponentProps<typeof View> & {\n children?: ReactNode;\n style: CSSProperties;\n};\n\nexport const ListItem = ({ children, style, ...props }: ListItemProps) => {\n return (\n <View\n style={{\n height: ROW_HEIGHT,\n borderBottomWidth: 1,\n borderColor: theme.tableBorder,\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 10,\n paddingRight: 10,\n zIndex: 1,\n ...style,\n }}\n {...props}\n >\n {children}\n </View>\n );\n};\n","import React, { memo, useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport memoizeOne from 'memoize-one';\n\nimport { rolloverBudget, reportBudget } from 'loot-core/src/client/queries';\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport useFeatureFlag from '../../hooks/useFeatureFlag';\nimport ArrowThinLeft from '../../icons/v1/ArrowThinLeft';\nimport ArrowThinRight from '../../icons/v1/ArrowThinRight';\nimport DotsHorizontalTriple from '../../icons/v1/DotsHorizontalTriple';\nimport { useResponsive } from '../../ResponsiveProvider';\nimport { theme, styles } from '../../style';\nimport Button from '../common/Button';\nimport Card from '../common/Card';\nimport InputWithContent from '../common/InputWithContent';\nimport Label from '../common/Label';\nimport Menu from '../common/Menu';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport PullToRefresh from '../responsive/PullToRefresh';\nimport { useServerURL } from '../ServerContext';\nimport CellValue from '../spreadsheet/CellValue';\nimport NamespaceContext from '../spreadsheet/NamespaceContext';\nimport useFormat from '../spreadsheet/useFormat';\nimport useSheetValue from '../spreadsheet/useSheetValue';\nimport { SyncButton } from '../Titlebar';\nimport { Tooltip, useTooltip } from '../tooltips';\nimport { AmountInput } from '../util/AmountInput';\n// import {\n// AmountAccessoryContext,\n// MathOperations\n// } from '../mobile/AmountInput';\n\n// import { DragDrop, Draggable, Droppable, DragDropHighlight } from './dragdrop';\nimport BalanceWithCarryover from './BalanceWithCarryover';\nimport { ListItem, ROW_HEIGHT } from './MobileTable';\nimport ReportBudgetBalanceTooltip from './report/BalanceTooltip';\nimport RolloverBudgetBalanceTooltip from './rollover/BalanceTooltip';\nimport { makeAmountGrey } from './util';\n\nfunction ToBudget({ toBudget, onClick }) {\n let amount = useSheetValue(toBudget);\n return (\n <Button\n type=\"bare\"\n style={{ flexDirection: 'column', alignItems: 'flex-start' }}\n onClick={onClick}\n >\n <Label\n title={amount < 0 ? 'OVERBUDGETED' : 'TO BUDGET'}\n style={{\n ...styles.underlinedText,\n color: theme.formInputText,\n flexShrink: 0,\n textAlign: 'left',\n }}\n />\n <CellValue\n binding={toBudget}\n type=\"financial\"\n style={{\n ...styles.smallText,\n fontWeight: '500',\n color: amount < 0 ? theme.errorText : theme.formInputText,\n }}\n />\n </Button>\n );\n}\n\nfunction Saved({ projected, onClick }) {\n let binding = projected\n ? reportBudget.totalBudgetedSaved\n : reportBudget.totalSaved;\n\n let saved = useSheetValue(binding) || 0;\n let isNegative = saved < 0;\n\n return (\n <Button\n type=\"bare\"\n style={{\n flexDirection: 'column',\n alignItems: 'flex-start',\n }}\n onClick={onClick}\n >\n {projected ? (\n <Label\n title=\"PROJECTED SAVINGS\"\n style={{\n ...styles.underlinedText,\n color: theme.formInputText,\n textAlign: 'left',\n fontSize: 9,\n }}\n />\n ) : (\n <Label\n title={isNegative ? 'OVERSPENT' : 'SAVED'}\n style={{\n ...styles.underlinedText,\n color: theme.formInputText,\n textAlign: 'left',\n }}\n />\n )}\n\n <CellValue\n binding={binding}\n type=\"financial\"\n style={{\n ...styles.smallText,\n fontWeight: '500',\n color: projected\n ? theme.warningText\n : isNegative\n ? theme.errorTextDark\n : theme.formInputText,\n }}\n />\n </Button>\n );\n}\n\nfunction BudgetCell({\n name,\n binding,\n style,\n textStyle,\n categoryId,\n month,\n onBudgetAction,\n onEdit,\n isEditing,\n}) {\n let sheetValue = useSheetValue(binding);\n\n function updateBudgetAmount(amount) {\n onBudgetAction?.(month, 'budget-amount', {\n category: categoryId,\n amount,\n });\n }\n\n function onAmountClick(e) {\n onEdit?.(categoryId);\n }\n\n return (\n <View style={style}>\n <AmountInput\n initialValue={sheetValue}\n zeroSign=\"+\"\n style={{\n ...(!isEditing && { display: 'none' }),\n height: ROW_HEIGHT,\n transform: 'translateX(6px)',\n }}\n focused={isEditing}\n textStyle={{ ...styles.smallText, ...textStyle }}\n onChange={updateBudgetAmount}\n onBlur={() => onEdit?.(null)}\n />\n <View\n role=\"button\"\n style={{\n ...(isEditing && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'flex-end',\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n binding={binding}\n type=\"financial\"\n style={{\n ...styles.smallText,\n ...textStyle,\n ...styles.underlinedText,\n }}\n getStyle={makeAmountGrey}\n data-testid={name}\n onPointerUp={onAmountClick}\n onPointerDown={e => e.preventDefault()}\n />\n </View>\n </View>\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction ExpenseGroupPreview({ group, pending, style }) {\n return (\n <Card\n style={{\n marginTop: 7,\n marginBottom: 7,\n opacity: pending ? 1 : 0.4,\n }}\n >\n <ExpenseGroupTotals group={group} blank={true} />\n\n {group.categories.map((cat, index) => (\n <ExpenseCategory\n key={cat.id}\n category={cat}\n blank={true}\n index={index}\n />\n ))}\n </Card>\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction ExpenseCategoryPreview({ name, pending, style }) {\n return (\n <ListItem\n style={{\n flex: 1,\n borderColor: 'transparent',\n borderRadius: 4,\n }}\n >\n <Text style={styles.smallText}>{name}</Text>\n </ListItem>\n );\n}\n\nconst ExpenseCategory = memo(function ExpenseCategory({\n type,\n category,\n goal,\n budgeted,\n spent,\n balance,\n carryover,\n index,\n // gestures,\n blank,\n style,\n month,\n editMode,\n isEditing,\n onEdit,\n isEditingBudget,\n onEditBudget,\n onSave,\n onDelete,\n isBudgetActionMenuOpen,\n onOpenBudgetActionMenu,\n onBudgetAction,\n show3Cols,\n showBudgetedCol,\n}) {\n let opacity = blank ? 0 : 1;\n let showEditables = editMode || isEditing;\n\n let [categoryName, setCategoryName] = useState(category.name);\n let [isHidden, setIsHidden] = useState(category.hidden);\n\n let tooltip = useTooltip();\n let balanceTooltip = useTooltip();\n\n useEffect(() => {\n if (isBudgetActionMenuOpen) {\n balanceTooltip.open();\n }\n }, [isBudgetActionMenuOpen, balanceTooltip]);\n\n useEffect(() => {\n if (!isEditing && tooltip.isOpen) {\n tooltip.close();\n }\n }, [isEditing, tooltip]);\n\n let onSubmit = () => {\n if (categoryName) {\n onSave?.({\n ...category,\n name: categoryName,\n });\n } else {\n setCategoryName(category.name);\n }\n onEdit?.(null);\n };\n\n let onMenuSelect = type => {\n onEdit?.(null);\n switch (type) {\n case 'toggle-visibility':\n setIsHidden(!isHidden);\n onSave?.({\n ...category,\n hidden: !isHidden,\n });\n break;\n case 'delete':\n onDelete?.(category.id);\n break;\n default:\n throw new Error(`Unrecognized category menu type: ${type}`);\n }\n };\n\n let listItemRef = useRef();\n let inputRef = useRef();\n\n let _onBudgetAction = (monthIndex, action, arg) => {\n onBudgetAction?.(\n monthUtils.getMonthFromIndex(monthUtils.getYear(month), monthIndex),\n action,\n arg,\n );\n };\n\n let content = (\n <ListItem\n style={{\n backgroundColor: isEditingBudget\n ? theme.tableTextEditing\n : 'transparent',\n borderBottomWidth: 0,\n borderTopWidth: index > 0 ? 1 : 0,\n opacity: isHidden ? 0.5 : undefined,\n ...style,\n }}\n data-testid=\"row\"\n innerRef={listItemRef}\n >\n <View\n style={{\n ...(!showEditables && { display: 'none' }),\n flexDirection: 'row',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n height: ROW_HEIGHT,\n }}\n >\n <InputWithContent\n focused={isEditing}\n inputRef={inputRef}\n rightContent={\n <>\n <Button\n type=\"bare\"\n style={{ padding: 10 }}\n {...tooltip.getOpenEvents()}\n >\n <DotsHorizontalTriple width={12} height={12} />\n </Button>\n {tooltip.isOpen && (\n <Tooltip\n position=\"bottom-stretch\"\n offset={1}\n style={{ padding: 0 }}\n onClose={() => {\n tooltip.close();\n inputRef.current?.focus();\n }}\n >\n <Menu\n onMenuSelect={onMenuSelect}\n items={[\n {\n name: 'toggle-visibility',\n text: isHidden ? 'Show' : 'Hide',\n },\n {\n name: 'delete',\n text: 'Delete',\n },\n ]}\n />\n </Tooltip>\n )}\n </>\n }\n style={{ width: '100%' }}\n placeholder=\"Category Name\"\n value={categoryName}\n onUpdate={setCategoryName}\n onEnter={onSubmit}\n onBlur={e => {\n if (!listItemRef.current?.contains(e.relatedTarget)) {\n onSubmit();\n }\n }}\n />\n </View>\n <View\n role=\"button\"\n style={{ ...(showEditables && { display: 'none' }), flex: 1 }}\n >\n <Text\n style={{\n ...styles.smallText,\n ...styles.underlinedText,\n ...styles.lineClamp(2),\n }}\n onPointerUp={() => onEdit?.(category.id)}\n data-testid=\"category-name\"\n >\n {category.name}\n </Text>\n </View>\n <View\n style={{\n ...(showEditables && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n opacity,\n }}\n >\n <BudgetCell\n name=\"budgeted\"\n binding={budgeted}\n style={{\n ...(!show3Cols && !showBudgetedCol && { display: 'none' }),\n width: 90,\n }}\n textStyle={{ ...styles.smallText, textAlign: 'right' }}\n categoryId={category.id}\n month={month}\n onBudgetAction={onBudgetAction}\n isEditing={isEditingBudget}\n onEdit={onEditBudget}\n />\n <View\n style={{\n ...(!show3Cols && showBudgetedCol && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n name=\"spent\"\n binding={spent}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n }}\n getStyle={makeAmountGrey}\n type=\"financial\"\n />\n </View>\n <View\n style={{\n ...styles.noTapHighlight,\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <span\n role=\"button\"\n onPointerUp={() => onOpenBudgetActionMenu?.(category.id)}\n onPointerDown={e => e.preventDefault()}\n >\n <BalanceWithCarryover\n carryover={carryover}\n balance={balance}\n goal={goal}\n budgeted={budgeted}\n balanceStyle={{\n ...styles.smallText,\n ...styles.underlinedText,\n }}\n />\n {balanceTooltip.isOpen &&\n (type === 'report' ? (\n <ReportBudgetBalanceTooltip\n offset={5}\n categoryId={category.id}\n tooltip={balanceTooltip}\n monthIndex={monthUtils.getMonthIndex(month)}\n onBudgetAction={_onBudgetAction}\n onClose={() => {\n onOpenBudgetActionMenu?.(null);\n }}\n />\n ) : (\n <RolloverBudgetBalanceTooltip\n offset={5}\n categoryId={category.id}\n tooltip={balanceTooltip}\n monthIndex={monthUtils.getMonthIndex(month)}\n onBudgetAction={_onBudgetAction}\n onClose={() => {\n onOpenBudgetActionMenu?.(null);\n }}\n />\n ))}\n </span>\n </View>\n </View>\n </ListItem>\n );\n\n return <View>{content}</View>;\n\n // <Draggable\n // id={category.id}\n // type=\"category\"\n // preview={({ pending, style }) => (\n // <BudgetCategoryPreview\n // name={category.name}\n // pending={pending}\n // style={style}\n // />\n // )}\n // gestures={gestures}\n // >\n // <Droppable\n // type=\"category\"\n // getActiveStatus={(x, y, { layout }, { id }) => {\n // let pos = (y - layout.y) / layout.height;\n // return pos < 0.5 ? 'top' : 'bottom';\n // }}\n // onDrop={(id, type, droppable, status) =>\n // props.onReorder(id.replace('category:', ''), {\n // aroundCategory: {\n // id: category.id,\n // position: status\n // }\n // })\n // }\n // >\n // {() => content}\n // </Droppable>\n // </Draggable>\n});\n\nconst ExpenseGroupTotals = memo(function ExpenseGroupTotals({\n group,\n budgeted,\n spent,\n balance,\n editMode,\n isEditing,\n onEdit,\n blank,\n onAddCategory,\n onSave,\n onDelete,\n show3Cols,\n showBudgetedCol,\n}) {\n let opacity = blank ? 0 : 1;\n let showEditables = editMode || isEditing;\n\n let [groupName, setGroupName] = useState(group.name);\n let [isHidden, setIsHidden] = useState(group.hidden);\n\n let tooltip = useTooltip();\n\n useEffect(() => {\n if (!isEditing && tooltip.isOpen) {\n tooltip.close();\n }\n }, [isEditing]);\n\n let onSubmit = () => {\n if (groupName) {\n onSave?.({\n ...group,\n name: groupName,\n });\n } else {\n setGroupName(group.name);\n }\n onEdit?.(null);\n };\n\n let onMenuSelect = type => {\n onEdit?.(null);\n switch (type) {\n case 'add-category':\n onAddCategory?.(group.id, group.is_income);\n break;\n case 'toggle-visibility':\n setIsHidden(!isHidden);\n onSave?.({\n ...group,\n hidden: !isHidden,\n });\n break;\n case 'delete':\n onDelete?.(group.id);\n break;\n default:\n throw new Error(`Unrecognized group menu type: ${type}`);\n }\n };\n\n let listItemRef = useRef();\n let inputRef = useRef();\n\n let content = (\n <ListItem\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: theme.tableRowHeaderBackground,\n opacity: isHidden ? 0.5 : undefined,\n }}\n data-testid=\"totals\"\n innerRef={listItemRef}\n >\n <View\n style={{\n ...(!showEditables && { display: 'none' }),\n flexDirection: 'row',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n height: ROW_HEIGHT,\n }}\n >\n <InputWithContent\n focused={isEditing}\n inputRef={inputRef}\n rightContent={\n <>\n <Button\n type=\"bare\"\n style={{ padding: 10 }}\n {...tooltip.getOpenEvents()}\n >\n <DotsHorizontalTriple width={12} height={12} />\n </Button>\n {tooltip.isOpen && (\n <Tooltip\n position=\"bottom-stretch\"\n offset={1}\n style={{ padding: 0 }}\n onClose={() => {\n tooltip.close();\n inputRef.current?.focus();\n }}\n >\n <Menu\n onMenuSelect={onMenuSelect}\n items={[\n {\n name: 'add-category',\n text: 'Add category',\n },\n {\n name: 'toggle-visibility',\n text: isHidden ? 'Show' : 'Hide',\n },\n {\n name: 'delete',\n text: 'Delete',\n },\n ]}\n />\n </Tooltip>\n )}\n </>\n }\n style={{ width: '100%' }}\n placeholder=\"Category Group Name\"\n value={groupName}\n onUpdate={setGroupName}\n onEnter={onSubmit}\n onBlur={e => {\n if (!listItemRef.current?.contains(e.relatedTarget)) {\n onSubmit();\n }\n }}\n />\n </View>\n <View\n role=\"button\"\n style={{ ...(showEditables && { display: 'none' }), flex: 1 }}\n >\n <Text\n tabIndex={-1}\n style={{\n ...styles.smallText,\n ...styles.underlinedText,\n ...styles.lineClamp(2),\n fontWeight: '500',\n }}\n onPointerUp={() => onEdit?.(group.id)}\n data-testid=\"name\"\n >\n {group.name}\n </Text>\n </View>\n <View\n style={{\n ...(showEditables && { display: 'none' }),\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n height: ROW_HEIGHT,\n opacity,\n }}\n >\n <View\n style={{\n ...(!show3Cols && !showBudgetedCol && { display: 'none' }),\n width: 90,\n height: ROW_HEIGHT,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <CellValue\n binding={budgeted}\n style={{\n ...styles.smallText,\n fontWeight: '500',\n textAlign: 'right',\n }}\n type=\"financial\"\n />\n </View>\n <View\n style={{\n ...(!show3Cols && showBudgetedCol && { display: 'none' }),\n width: 90,\n height: ROW_HEIGHT,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <CellValue\n binding={spent}\n style={{\n ...styles.smallText,\n fontWeight: '500',\n textAlign: 'right',\n }}\n type=\"financial\"\n />\n </View>\n <View\n style={{\n width: 90,\n height: ROW_HEIGHT,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <CellValue\n binding={balance}\n style={{\n ...styles.smallText,\n fontWeight: '500',\n textAlign: 'right',\n }}\n type=\"financial\"\n />\n </View>\n </View>\n\n {/* {editMode && (\n <View>\n <Button\n onClick={() => onAddCategory(group.id, group.is_income)}\n style={{ padding: 10 }}\n >\n <Add width={15} height={15} />\n </Button>\n </View>\n )} */}\n </ListItem>\n );\n\n if (!editMode) {\n return content;\n }\n\n return content;\n // <Droppable\n // type=\"category\"\n // getActiveStatus={(x, y, { layout }, { id }) => {\n // return 'bottom';\n // }}\n // onDrop={(id, type, droppable, status) =>\n // props.onReorderCategory(id, { inGroup: group.id })\n // }\n // >\n // {() => content}\n // </Droppable>\n});\n\nconst IncomeGroupTotals = memo(function IncomeGroupTotals({\n group,\n budgeted,\n balance,\n style,\n onAddCategory,\n onSave,\n onDelete,\n editMode,\n isEditing,\n onEdit,\n}) {\n let [groupName, setGroupName] = useState(group.name);\n let [isHidden, setIsHidden] = useState(group.hidden);\n let showEditables = editMode || isEditing;\n\n let tooltip = useTooltip();\n\n useEffect(() => {\n if (!isEditing && tooltip.isOpen) {\n tooltip.close();\n }\n }, [isEditing]);\n\n let onSubmit = () => {\n if (groupName) {\n onSave?.({\n ...group,\n name: groupName,\n });\n } else {\n setGroupName(group.name);\n }\n onEdit?.(null);\n };\n\n let onMenuSelect = type => {\n onEdit?.(null);\n switch (type) {\n case 'add-category':\n onAddCategory?.(group.id, group.is_income);\n break;\n case 'toggle-visibility':\n setIsHidden(!isHidden);\n onSave?.({\n ...group,\n hidden: !isHidden,\n });\n break;\n case 'delete':\n onDelete?.(group.id);\n break;\n default:\n throw new Error(`Unrecognized group menu type: ${type}`);\n }\n };\n\n let listItemRef = useRef();\n let inputRef = useRef();\n\n return (\n <ListItem\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: 10,\n backgroundColor: theme.tableRowHeaderBackground,\n opacity: isHidden ? 0.5 : undefined,\n ...style,\n }}\n innerRef={listItemRef}\n >\n <View\n style={{\n ...(!showEditables && { display: 'none' }),\n flexDirection: 'row',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n height: ROW_HEIGHT,\n }}\n >\n <InputWithContent\n focused={isEditing}\n inputRef={inputRef}\n rightContent={\n <>\n <Button\n type=\"bare\"\n style={{ padding: 10 }}\n {...tooltip.getOpenEvents()}\n >\n <DotsHorizontalTriple width={12} height={12} />\n </Button>\n {tooltip.isOpen && (\n <Tooltip\n position=\"bottom-stretch\"\n offset={1}\n style={{ padding: 0 }}\n onClose={() => {\n tooltip.close();\n inputRef.current?.focus();\n }}\n >\n <Menu\n onMenuSelect={onMenuSelect}\n items={[\n {\n name: 'add-category',\n text: 'Add category',\n },\n {\n name: 'toggle-visibility',\n text: isHidden ? 'Show' : 'Hide',\n },\n {\n name: 'delete',\n text: 'Delete',\n },\n ]}\n />\n </Tooltip>\n )}\n </>\n }\n style={{ width: '100%' }}\n placeholder=\"Category Group Name\"\n value={groupName}\n onUpdate={setGroupName}\n onEnter={onSubmit}\n onBlur={e => {\n if (!listItemRef.current?.contains(e.relatedTarget)) {\n onSubmit();\n }\n }}\n />\n </View>\n <View\n role=\"button\"\n style={{\n ...(showEditables && { display: 'none' }),\n flex: 1,\n justifyContent: 'center',\n alignItems: 'flex-start',\n height: ROW_HEIGHT,\n }}\n >\n <Text\n style={{\n ...styles.smallText,\n ...styles.underlinedText,\n ...styles.lineClamp(2),\n fontWeight: '500',\n }}\n onPointerUp={() => onEdit?.(group.id)}\n data-testid=\"name\"\n >\n {group.name}\n </Text>\n </View>\n {budgeted && (\n <View\n style={{\n ...(showEditables && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n binding={budgeted}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n type=\"financial\"\n />\n </View>\n )}\n <View\n style={{\n ...(showEditables && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n binding={balance}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n type=\"financial\"\n />\n </View>\n </ListItem>\n );\n});\n\nconst IncomeCategory = memo(function IncomeCategory({\n category,\n budgeted,\n balance,\n month,\n style,\n onSave,\n onDelete,\n editMode,\n isEditing,\n onEdit,\n onBudgetAction,\n isEditingBudget,\n onEditBudget,\n}) {\n let [categoryName, setCategoryName] = useState(category.name);\n let [isHidden, setIsHidden] = useState(category.hidden);\n let showEditables = editMode || isEditing;\n\n let tooltip = useTooltip();\n\n useEffect(() => {\n if (!isEditing && tooltip.isOpen) {\n tooltip.close();\n }\n }, [isEditing]);\n\n let onSubmit = () => {\n if (categoryName) {\n onSave?.({\n ...category,\n name: categoryName,\n });\n } else {\n setCategoryName(category.name);\n }\n onEdit?.(null);\n };\n\n let onMenuSelect = type => {\n onEdit?.(null);\n switch (type) {\n case 'toggle-visibility':\n setIsHidden(!isHidden);\n onSave?.({\n ...category,\n hidden: !isHidden,\n });\n break;\n case 'delete':\n onDelete?.(category.id);\n break;\n default:\n throw new Error(`Unrecognized category menu type: ${type}`);\n }\n };\n\n let listItemRef = useRef();\n let inputRef = useRef();\n\n return (\n <ListItem\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: 10,\n backgroundColor: 'transparent',\n opacity: isHidden ? 0.5 : undefined,\n ...style,\n }}\n innerRef={listItemRef}\n >\n <View\n style={{\n ...(!showEditables && { display: 'none' }),\n flexDirection: 'row',\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n height: ROW_HEIGHT,\n }}\n >\n <InputWithContent\n focused={isEditing}\n inputRef={inputRef}\n rightContent={\n <>\n <Button\n type=\"bare\"\n style={{ padding: 10 }}\n {...tooltip.getOpenEvents()}\n >\n <DotsHorizontalTriple width={12} height={12} />\n </Button>\n {tooltip.isOpen && (\n <Tooltip\n position=\"bottom-stretch\"\n offset={1}\n style={{ padding: 0 }}\n onClose={() => {\n tooltip.close();\n inputRef.current?.focus();\n }}\n >\n <Menu\n onMenuSelect={onMenuSelect}\n items={[\n {\n name: 'toggle-visibility',\n text: isHidden ? 'Show' : 'Hide',\n },\n {\n name: 'delete',\n text: 'Delete',\n },\n ]}\n />\n </Tooltip>\n )}\n </>\n }\n style={{ width: '100%' }}\n placeholder=\"Category Name\"\n value={categoryName}\n onUpdate={setCategoryName}\n onEnter={onSubmit}\n onBlur={e => {\n if (!listItemRef.current?.contains(e.relatedTarget)) {\n onSubmit();\n }\n }}\n />\n </View>\n <View\n role=\"button\"\n style={{\n ...(showEditables && { display: 'none' }),\n flex: 1,\n justifyContent: 'center',\n alignItems: 'flex-start',\n height: ROW_HEIGHT,\n }}\n >\n <Text\n tabIndex={-1}\n style={{\n ...styles.smallText,\n ...styles.underlinedText,\n ...styles.lineClamp(2),\n }}\n onPointerUp={() => onEdit?.(category.id)}\n data-testid=\"name\"\n >\n {category.name}\n </Text>\n </View>\n {budgeted && (\n <View\n style={{\n ...(showEditables && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <BudgetCell\n name=\"budgeted\"\n binding={budgeted}\n style={{\n width: 90,\n }}\n textStyle={{ ...styles.smallText, textAlign: 'right' }}\n categoryId={category.id}\n month={month}\n onBudgetAction={onBudgetAction}\n isEditing={isEditingBudget}\n onEdit={onEditBudget}\n />\n {/* <CellValue\n binding={budget}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n }}\n type=\"financial\"\n /> */}\n </View>\n )}\n <View\n style={{\n ...(showEditables && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n binding={balance}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n }}\n type=\"financial\"\n />\n </View>\n </ListItem>\n );\n});\n\n// export function BudgetAccessoryView() {\n// let emitter = useContext(AmountAccessoryContext);\n\n// return (\n// <View>\n// <View\n// style={{\n// flexDirection: 'row',\n// justifyContent: 'flex-end',\n// alignItems: 'stretch',\n// backgroundColor: colorsm.tableBackground,\n// padding: 5,\n// height: 45\n// }}\n// >\n// <MathOperations emitter={emitter} />\n// <View style={{ flex: 1 }} />\n// <Button\n// onClick={() => emitter.emit('moveUp')}\n// style={{ marginRight: 5 }}\n// data-testid=\"up\"\n// >\n// <ArrowThinUp width={13} height={13} />\n// </Button>\n// <Button\n// onClick={() => emitter.emit('moveDown')}\n// style={{ marginRight: 5 }}\n// data-testid=\"down\"\n// >\n// <ArrowThinDown width={13} height={13} />\n// </Button>\n// <Button onClick={() => emitter.emit('done')} data-testid=\"done\">\n// Done\n// </Button>\n// </View>\n// </View>\n// );\n// }\n\nconst ExpenseGroup = memo(function ExpenseGroup({\n type,\n group,\n editMode,\n editingGroupId,\n onEditGroup,\n editingCategoryId,\n onEditCategory,\n editingBudgetCategoryId,\n onEditCategoryBudget,\n openBudgetActionMenuId,\n onOpenBudgetActionMenu,\n // gestures,\n month,\n onSaveCategory,\n onDeleteCategory,\n // onReorderCategory,\n // onReorderGroup,\n onAddCategory,\n onSave,\n onDelete,\n onBudgetAction,\n showBudgetedCol,\n show3Cols,\n showHiddenCategories,\n}) {\n function editable(content) {\n if (!editMode) {\n return content;\n }\n\n return content;\n // <Draggable\n // id={group.id}\n // type=\"group\"\n // preview={({ pending, style }) => (\n // <BudgetGroupPreview group={group} pending={pending} style={style} />\n // )}\n // gestures={gestures}\n // >\n // <Droppable\n // type=\"group\"\n // getActiveStatus={(x, y, { layout }, { id }) => {\n // let pos = (y - layout.y) / layout.height;\n // return pos < 0.5 ? 'top' : 'bottom';\n // }}\n // onDrop={(id, type, droppable, status) => {\n // onReorderGroup(id, group.id, status);\n // }}\n // >\n // {() => content}\n // </Droppable>\n // </Draggable>\n }\n\n return editable(\n <Card\n style={{\n marginTop: 7,\n marginBottom: 7,\n }}\n >\n <ExpenseGroupTotals\n group={group}\n showBudgetedCol={showBudgetedCol}\n budgeted={\n type === 'report'\n ? reportBudget.groupBudgeted(group.id)\n : rolloverBudget.groupBudgeted(group.id)\n }\n spent={\n type === 'report'\n ? reportBudget.groupSumAmount(group.id)\n : rolloverBudget.groupSumAmount(group.id)\n }\n balance={\n type === 'report'\n ? reportBudget.groupBalance(group.id)\n : rolloverBudget.groupBalance(group.id)\n }\n show3Cols={show3Cols}\n editMode={editMode}\n onAddCategory={onAddCategory}\n onSave={onSave}\n onDelete={onDelete}\n isEditing={editingGroupId === group.id}\n onEdit={onEditGroup}\n // onReorderCategory={onReorderCategory}\n />\n\n {group.categories\n .filter(category => !category.hidden || showHiddenCategories)\n .map((category, index) => {\n const isEditingCategory = editingCategoryId === category.id;\n const isEditingCategoryBudget =\n editingBudgetCategoryId === category.id;\n const isBudgetActionMenuOpen = openBudgetActionMenuId === category.id;\n return (\n <ExpenseCategory\n key={category.id}\n show3Cols={show3Cols}\n type={type}\n index={index}\n category={category}\n goal={\n type === 'report'\n ? reportBudget.catGoal(category.id)\n : rolloverBudget.catGoal(category.id)\n }\n budgeted={\n type === 'report'\n ? reportBudget.catBudgeted(category.id)\n : rolloverBudget.catBudgeted(category.id)\n }\n spent={\n type === 'report'\n ? reportBudget.catSumAmount(category.id)\n : rolloverBudget.catSumAmount(category.id)\n }\n balance={\n type === 'report'\n ? reportBudget.catBalance(category.id)\n : rolloverBudget.catBalance(category.id)\n }\n carryover={\n type === 'report'\n ? reportBudget.catCarryover(category.id)\n : rolloverBudget.catCarryover(category.id)\n }\n showBudgetedCol={showBudgetedCol}\n editMode={editMode}\n isEditing={isEditingCategory}\n onEdit={onEditCategory}\n isEditingBudget={isEditingCategoryBudget}\n onEditBudget={onEditCategoryBudget}\n isBudgetActionMenuOpen={isBudgetActionMenuOpen}\n onOpenBudgetActionMenu={onOpenBudgetActionMenu}\n // gestures={gestures}\n month={month}\n onSave={onSaveCategory}\n onDelete={onDeleteCategory}\n // onReorder={onReorderCategory}\n onBudgetAction={onBudgetAction}\n style={{\n backgroundColor: theme.tableBackground,\n }}\n />\n );\n })}\n </Card>,\n );\n});\n\nfunction IncomeGroup({\n type,\n group,\n month,\n onSave,\n onDelete,\n onAddCategory,\n onSaveCategory,\n onDeleteCategory,\n showHiddenCategories,\n editMode,\n editingGroupId,\n onEditGroup,\n editingCategoryId,\n onEditCategory,\n editingBudgetCategoryId,\n onEditCategoryBudget,\n onBudgetAction,\n}) {\n return (\n <View>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginTop: 50,\n marginBottom: 5,\n marginRight: 14,\n }}\n >\n {type === 'report' && <Label title=\"BUDGETED\" style={{ width: 90 }} />}\n <Label title=\"RECEIVED\" style={{ width: 90 }} />\n </View>\n\n <Card style={{ marginTop: 0 }}>\n <IncomeGroupTotals\n group={group}\n budgeted={\n type === 'report' ? reportBudget.groupBudgeted(group.id) : null\n }\n balance={\n type === 'report'\n ? reportBudget.groupSumAmount(group.id)\n : rolloverBudget.groupSumAmount(group.id)\n }\n style={{\n backgroundColor: theme.tableRowHeaderBackground,\n }}\n onAddCategory={onAddCategory}\n onSave={onSave}\n onDelete={onDelete}\n editMode={editMode}\n isEditing={editingGroupId === group.id}\n onEdit={onEditGroup}\n />\n\n {group.categories\n .filter(category => !category.hidden || showHiddenCategories)\n .map((category, index) => {\n return (\n <IncomeCategory\n key={category.id}\n category={category}\n month={month}\n type={type}\n budgeted={\n type === 'report'\n ? reportBudget.catBudgeted(category.id)\n : null\n }\n balance={\n type === 'report'\n ? reportBudget.catSumAmount(category.id)\n : rolloverBudget.catSumAmount(category.id)\n }\n index={index}\n onSave={onSaveCategory}\n onDelete={onDeleteCategory}\n editMode={editMode}\n isEditing={editingCategoryId === category.id}\n onEdit={onEditCategory}\n style={{\n backgroundColor: theme.tableBackground,\n }}\n onBudgetAction={onBudgetAction}\n isEditingBudget={editingBudgetCategoryId === category.id}\n onEditBudget={onEditCategoryBudget}\n />\n );\n })}\n </Card>\n </View>\n );\n}\n\nfunction BudgetGroups({\n type,\n categoryGroups,\n editingGroupId,\n onEditGroup,\n editingCategoryId,\n onEditCategory,\n editingBudgetCategoryId,\n onEditCategoryBudget,\n openBudgetActionMenuId,\n onOpenBudgetActionMenu,\n editMode,\n gestures,\n month,\n onSaveCategory,\n onDeleteCategory,\n onAddCategory,\n onAddGroup,\n onSaveGroup,\n onDeleteGroup,\n onReorderCategory,\n onReorderGroup,\n onBudgetAction,\n showBudgetedCol,\n show3Cols,\n showHiddenCategories,\n}) {\n const separateGroups = memoizeOne(groups => {\n return {\n incomeGroup: groups.find(group => group.is_income),\n expenseGroups: groups.filter(group => !group.is_income),\n };\n });\n\n const { incomeGroup, expenseGroups } = separateGroups(categoryGroups);\n\n return (\n <View\n data-testid=\"budget-groups\"\n style={{ flex: '1 0 auto', overflowY: 'auto', paddingBottom: 15 }}\n >\n {expenseGroups\n .filter(group => !group.hidden || showHiddenCategories)\n .map(group => {\n return (\n <ExpenseGroup\n key={group.id}\n type={type}\n group={group}\n showBudgetedCol={showBudgetedCol}\n gestures={gestures}\n month={month}\n editMode={editMode}\n editingGroupId={editingGroupId}\n onEditGroup={onEditGroup}\n editingCategoryId={editingCategoryId}\n onEditCategory={onEditCategory}\n editingBudgetCategoryId={editingBudgetCategoryId}\n onEditCategoryBudget={onEditCategoryBudget}\n openBudgetActionMenuId={openBudgetActionMenuId}\n onOpenBudgetActionMenu={onOpenBudgetActionMenu}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n onAddCategory={onAddCategory}\n onSave={onSaveGroup}\n onDelete={onDeleteGroup}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n onBudgetAction={onBudgetAction}\n show3Cols={show3Cols}\n showHiddenCategories={showHiddenCategories}\n />\n );\n })}\n\n <View\n style={{\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n }}\n >\n <Button onPointerUp={onAddGroup} style={{ fontSize: 12, margin: 10 }}>\n Add Group\n </Button>\n </View>\n\n {incomeGroup && (\n <IncomeGroup\n type={type}\n group={incomeGroup}\n month={month}\n onSave={onSaveGroup}\n onDelete={onDeleteGroup}\n onAddCategory={onAddCategory}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n showHiddenCategories={showHiddenCategories}\n editMode={editMode}\n editingGroupId={editingGroupId}\n onEditGroup={onEditGroup}\n editingCategoryId={editingCategoryId}\n onEditCategory={onEditCategory}\n editingBudgetCategoryId={editingBudgetCategoryId}\n onEditCategoryBudget={onEditCategoryBudget}\n onBudgetAction={onBudgetAction}\n />\n )}\n </View>\n );\n}\n\nexport function BudgetTable(props) {\n const {\n type,\n categoryGroups,\n month,\n monthBounds,\n editMode,\n // refreshControl,\n onPrevMonth,\n onNextMonth,\n onSaveGroup,\n onDeleteGroup,\n onAddGroup,\n onAddCategory,\n onSaveCategory,\n onDeleteCategory,\n onEditMode,\n onReorderCategory,\n onReorderGroup,\n onShowBudgetSummary,\n // onOpenActionSheet,\n onBudgetAction,\n onRefresh,\n onSwitchBudgetType,\n savePrefs,\n pushModal,\n } = props;\n\n const GROUP_EDIT_ACTION = 'group';\n const [editingGroupId, setEditingGroupId] = useState(null);\n function onEditGroup(id) {\n onEdit(GROUP_EDIT_ACTION, id);\n }\n\n const CATEGORY_EDIT_ACTION = 'category';\n const [editingCategoryId, setEditingCategoryId] = useState(null);\n function onEditCategory(id) {\n onEdit(CATEGORY_EDIT_ACTION, id);\n }\n\n const CATEGORY_BUDGET_EDIT_ACTION = 'category-budget';\n const [editingBudgetCategoryId, setEditingBudgetCategoryId] = useState(null);\n function onEditCategoryBudget(id) {\n onEdit(CATEGORY_BUDGET_EDIT_ACTION, id);\n }\n\n const BUDGET_MENU_OPEN_ACTION = 'budget-menu';\n const [openBudgetActionMenuId, setOpenBudgetActionMenuId] = useState(null);\n function onOpenBudgetActionMenu(id) {\n onEdit(BUDGET_MENU_OPEN_ACTION, id);\n }\n\n function onEdit(action, id) {\n // Do not allow editing if another field is currently being edited.\n // Cancel the currently editing field in that case.\n const currentlyEditing =\n editingGroupId ||\n editingCategoryId ||\n editingBudgetCategoryId ||\n openBudgetActionMenuId;\n\n setEditingGroupId(\n action === GROUP_EDIT_ACTION && !currentlyEditing ? id : null,\n );\n setEditingCategoryId(\n action === CATEGORY_EDIT_ACTION && !currentlyEditing ? id : null,\n );\n setEditingBudgetCategoryId(\n action === CATEGORY_BUDGET_EDIT_ACTION && !currentlyEditing ? id : null,\n );\n setOpenBudgetActionMenuId(\n action === BUDGET_MENU_OPEN_ACTION && !currentlyEditing ? id : null,\n );\n }\n\n const { width } = useResponsive();\n const show3Cols = width >= 360;\n\n // let editMode = false; // neuter editMode -- sorry, not rewriting drag-n-drop right now\n let currentMonth = monthUtils.currentMonth();\n let format = useFormat();\n\n const mobileShowBudgetedColPref = useSelector(state => {\n return state.prefs?.local?.toggleMobileDisplayPref || true;\n });\n\n const showHiddenCategories = useSelector(state => {\n return state.prefs?.local?.['budget.showHiddenCategories'] || false;\n });\n\n let [showBudgetedCol, setShowBudgetedCol] = useState(\n !mobileShowBudgetedColPref &&\n !document.cookie.match(/mobileShowBudgetedColPref=true/),\n );\n\n function toggleDisplay() {\n setShowBudgetedCol(!showBudgetedCol);\n if (!showBudgetedCol) {\n savePrefs({ mobileShowBudgetedColPref: true });\n }\n }\n\n let buttonStyle = {\n padding: 0,\n backgroundColor: 'transparent',\n borderRadius: 'unset',\n };\n\n return (\n <NamespaceContext.Provider value={monthUtils.sheetForMonth(month, type)}>\n <View style={{ flex: 1, overflowY: 'hidden' }} data-testid=\"budget-table\">\n <BudgetHeader\n currentMonth={month}\n toggleDisplay={toggleDisplay}\n monthBounds={monthBounds}\n editMode={editMode}\n onEditMode={onEditMode}\n // onOpenActionSheet={onOpenActionSheet}\n onPrevMonth={onPrevMonth}\n onNextMonth={onNextMonth}\n showHiddenCategories={showHiddenCategories}\n savePrefs={savePrefs}\n pushModal={pushModal}\n onSwitchBudgetType={onSwitchBudgetType}\n />\n <View\n style={{\n flexDirection: 'row',\n flex: '0 0 auto',\n padding: 10,\n paddingRight: 14,\n backgroundColor: theme.tableRowHeaderBackground,\n borderBottomWidth: 1,\n borderColor: theme.tableBorder,\n }}\n >\n {type === 'report' ? (\n <Saved\n projected={month >= currentMonth}\n onClick={onShowBudgetSummary}\n />\n ) : (\n <ToBudget\n toBudget={rolloverBudget.toBudget}\n onClick={onShowBudgetSummary}\n />\n )}\n <View style={{ flex: 1 }} />\n {(show3Cols || showBudgetedCol) && (\n <Button\n type=\"bare\"\n disabled={show3Cols}\n onClick={toggleDisplay}\n style={{\n ...buttonStyle,\n padding: '0 8px',\n margin: '0 -8px',\n background:\n showBudgetedCol && !show3Cols\n ? `linear-gradient(-45deg, ${theme.formInputBackgroundSelection} 8px, transparent 0)`\n : null,\n }}\n >\n <View\n style={{\n flexBasis: 90,\n width: 90,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <Label\n title=\"BUDGETED\"\n style={{ color: theme.buttonNormalText }}\n />\n <CellValue\n binding={\n type === 'report'\n ? reportBudget.totalBudgetedExpense\n : rolloverBudget.totalBudgeted\n }\n type=\"financial\"\n style={{\n ...styles.smallText,\n color: theme.buttonNormalText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n formatter={value => {\n return format(-parseFloat(value || '0'), 'financial');\n }}\n />\n </View>\n </Button>\n )}\n {(show3Cols || !showBudgetedCol) && (\n <Button\n type=\"bare\"\n disabled={show3Cols}\n onClick={toggleDisplay}\n style={{\n ...buttonStyle,\n background:\n !showBudgetedCol && !show3Cols\n ? `linear-gradient(45deg, ${theme.formInputBackgroundSelection} 8px, transparent 0)`\n : null,\n }}\n >\n <View\n style={{\n width: 90,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <Label title=\"SPENT\" style={{ color: theme.formInputText }} />\n <CellValue\n binding={\n type === 'report'\n ? reportBudget.totalSpent\n : rolloverBudget.totalSpent\n }\n type=\"financial\"\n style={{\n ...styles.smallText,\n color: theme.formInputText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n />\n </View>\n </Button>\n )}\n <View\n style={{\n width: 90,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <Label title=\"BALANCE\" style={{ color: theme.formInputText }} />\n <CellValue\n binding={\n type === 'report'\n ? reportBudget.totalLeftover\n : rolloverBudget.totalBalance\n }\n type=\"financial\"\n style={{\n ...styles.smallText,\n color: theme.formInputText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n />\n </View>\n </View>\n <View style={{ overflowY: 'auto' }}>\n <PullToRefresh onRefresh={onRefresh}>\n {!editMode ? (\n // <ScrollView\n // ref={el => (this.list = el)}\n // keyboardShouldPersistTaps=\"always\"\n // refreshControl={refreshControl}\n // style={{ backgroundColor: colors.n10 }}\n // automaticallyAdjustContentInsets={false}\n // >\n <View>\n <BudgetGroups\n type={type}\n categoryGroups={categoryGroups}\n showBudgetedCol={showBudgetedCol}\n show3Cols={show3Cols}\n showHiddenCategories={showHiddenCategories}\n // gestures={gestures}\n month={month}\n editMode={editMode}\n editingGroupId={editingGroupId}\n onEditGroup={onEditGroup}\n editingCategoryId={editingCategoryId}\n onEditCategory={onEditCategory}\n editingBudgetCategoryId={editingBudgetCategoryId}\n onEditCategoryBudget={onEditCategoryBudget}\n openBudgetActionMenuId={openBudgetActionMenuId}\n onOpenBudgetActionMenu={onOpenBudgetActionMenu}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n onAddCategory={onAddCategory}\n onAddGroup={onAddGroup}\n onSaveGroup={onSaveGroup}\n onDeleteGroup={onDeleteGroup}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n onBudgetAction={onBudgetAction}\n />\n </View>\n ) : (\n // </ScrollView>\n // <DragDrop>\n // {({\n // dragging,\n // onGestureEvent,\n // onHandlerStateChange,\n // scrollRef,\n // onScroll\n // }) => (\n <View>\n <BudgetGroups\n type={type}\n categoryGroups={categoryGroups}\n showBudgetedCol={showBudgetedCol}\n show3Cols={show3Cols}\n showHiddenCategories={showHiddenCategories}\n // gestures={gestures}\n editMode={editMode}\n editingGroupId={editingGroupId}\n onEditGroup={onEditGroup}\n editingCategoryId={editingCategoryId}\n onEditCategory={onEditCategory}\n editingBudgetCategoryId={editingBudgetCategoryId}\n onEditCategoryBudget={onEditCategoryBudget}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n onAddCategory={onAddCategory}\n onAddGroup={onAddGroup}\n onSaveGroup={onSaveGroup}\n onDeleteGroup={onDeleteGroup}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n onBudgetAction={onBudgetAction}\n />\n </View>\n\n // <DragDropHighlight />\n // </DragDrop>\n )}\n </PullToRefresh>\n </View>\n </View>\n </NamespaceContext.Provider>\n );\n}\n\nconst LEFT_RIGHT_FLEX_WIDTH = 80;\nconst BUDGET_HEADER_HEIGHT = 50;\n\nfunction BudgetHeader({\n currentMonth,\n monthBounds,\n onPrevMonth,\n onNextMonth,\n editMode,\n onEditMode,\n showHiddenCategories,\n savePrefs,\n pushModal,\n onSwitchBudgetType,\n}) {\n let serverURL = useServerURL();\n\n let prevEnabled = currentMonth > monthBounds.start;\n let nextEnabled = currentMonth < monthUtils.subMonths(monthBounds.end, 1);\n\n let buttonStyle = {\n padding: 10,\n margin: 2,\n };\n\n let toggleHiddenCategories = () => {\n savePrefs({\n 'budget.showHiddenCategories': !showHiddenCategories,\n });\n };\n\n let tooltip = useTooltip();\n let isReportBudgetEnabled = useFeatureFlag('reportBudget');\n\n let onMenuSelect = name => {\n tooltip.close();\n switch (name) {\n case 'edit-mode':\n onEditMode?.(true);\n break;\n case 'toggle-hidden-categories':\n toggleHiddenCategories();\n break;\n case 'switch-budget-type':\n pushModal('switch-budget-type', {\n onSwitch: onSwitchBudgetType,\n });\n break;\n default:\n throw new Error(`Unrecognized menu option: ${name}`);\n }\n };\n\n return (\n <View\n style={{\n flexDirection: 'row',\n flexShrink: 0,\n height: BUDGET_HEADER_HEIGHT,\n backgroundColor: theme.mobileHeaderBackground,\n }}\n >\n <View\n style={{\n width: LEFT_RIGHT_FLEX_WIDTH,\n flexDirection: 'row',\n }}\n >\n {serverURL && (\n <SyncButton\n isMobile\n style={{\n color: theme.mobileHeaderText,\n paddingLeft: 12,\n paddingRight: 12,\n }}\n />\n )}\n <View\n style={{\n flex: 1,\n }}\n />\n </View>\n <View\n style={{\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n }}\n >\n <Button\n type=\"bare\"\n // hitSlop={{ top: 5, bottom: 5, left: 0, right: 30 }}\n onClick={prevEnabled && onPrevMonth}\n style={{\n ...buttonStyle,\n opacity: prevEnabled ? 1 : 0.6,\n color: theme.mobileHeaderText,\n }}\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n >\n <ArrowThinLeft width=\"15\" height=\"15\" style={{ margin: -5 }} />\n </Button>\n <Text\n style={{\n color: theme.mobileHeaderText,\n textAlign: 'center',\n fontSize: 16,\n fontWeight: 500,\n // zIndex: -1\n }}\n >\n {/* eslint-disable-next-line rulesdir/typography */}\n {monthUtils.format(currentMonth, \"MMMM ''yy\")}\n </Text>\n <Button\n type=\"bare\"\n onClick={nextEnabled && onNextMonth}\n // hitSlop={{ top: 5, bottom: 5, left: 30, right: 5 }}\n style={{\n ...buttonStyle,\n opacity: nextEnabled ? 1 : 0.6,\n color: theme.mobileHeaderText,\n }}\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n >\n <ArrowThinRight width=\"15\" height=\"15\" style={{ margin: -5 }} />\n </Button>\n </View>\n <View\n style={{\n width: LEFT_RIGHT_FLEX_WIDTH,\n flexDirection: 'row',\n }}\n >\n <View\n style={{\n flex: 1,\n }}\n />\n {!editMode ? (\n <>\n <Button\n type=\"bare\"\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n style={{\n paddingTop: 15,\n paddingBottom: 15,\n margin: 10,\n }}\n {...tooltip.getOpenEvents()}\n >\n <DotsHorizontalTriple\n width=\"20\"\n height=\"20\"\n style={{ color: theme.mobileHeaderText }}\n />\n </Button>\n {tooltip.isOpen && (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={tooltip.close}\n >\n <Menu\n onMenuSelect={onMenuSelect}\n items={[\n { name: 'edit-mode', text: 'Edit mode' },\n {\n name: 'toggle-hidden-categories',\n text: 'Toggle hidden categories',\n },\n isReportBudgetEnabled && {\n name: 'switch-budget-type',\n text: 'Switch budget type',\n },\n ]}\n />\n </Tooltip>\n )}\n </>\n ) : (\n <Button\n type=\"bare\"\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n style={{\n backgroundColor: 'transparent',\n padding: 10,\n paddingTop: 15,\n paddingBottom: 15,\n margin: 10,\n ...styles.text,\n color: theme.mobileHeaderText,\n }}\n onClick={() => onEditMode?.(false)}\n >\n Done\n </Button>\n )}\n </View>\n </View>\n );\n}\n","import React, { Component } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { useSpreadsheet } from 'loot-core/src/client/SpreadsheetProvider';\nimport { send, listen } from 'loot-core/src/platform/client/fetch';\nimport {\n addCategory,\n addGroup,\n deleteCategory,\n deleteGroup,\n moveCategory,\n moveCategoryGroup,\n updateCategory,\n updateGroup,\n} from 'loot-core/src/shared/categories';\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport { useActions } from '../../hooks/useActions';\nimport useCategories from '../../hooks/useCategories';\nimport { useSetThemeColor } from '../../hooks/useSetThemeColor';\nimport AnimatedLoading from '../../icons/AnimatedLoading';\nimport { theme } from '../../style';\nimport View from '../common/View';\nimport SyncRefresh from '../SyncRefresh';\n\nimport { BudgetTable } from './MobileBudgetTable';\nimport { prewarmMonth, switchBudgetType } from './util';\n\nclass Budget extends Component {\n constructor(props) {\n super(props);\n\n const currentMonth = monthUtils.currentMonth();\n this.state = {\n bounds: { start: currentMonth, end: currentMonth },\n currentMonth,\n initialized: false,\n editMode: false,\n categoryGroups: [],\n };\n }\n\n async loadCategories() {\n let result = await this.props.getCategories();\n this.setState({ categoryGroups: result.grouped });\n }\n\n async componentDidMount() {\n // let removeBlur = this.props.navigation.addListener('didBlur', () => {\n // this.setState({ editMode: false });\n // });\n\n this.loadCategories();\n\n const { start, end } = await send('get-budget-bounds');\n this.setState({ bounds: { start, end } });\n\n await prewarmMonth(\n this.props.budgetType,\n this.props.spreadsheet,\n this.state.currentMonth,\n );\n\n this.setState({ initialized: true });\n\n let unlisten = listen('sync-event', ({ type, tables }) => {\n if (\n type === 'success' &&\n (tables.includes('categories') ||\n tables.includes('category_mapping') ||\n tables.includes('category_groups'))\n ) {\n // TODO: is this loading every time?\n this.loadCategories();\n }\n });\n\n this.cleanup = () => {\n // removeBlur();\n unlisten();\n };\n }\n\n componentWillUnmount() {\n this.cleanup?.();\n }\n\n onShowBudgetSummary = () => {\n if (this.props.budgetType === 'report') {\n this.props.pushModal('report-budget-summary', {\n month: this.state.currentMonth,\n });\n } else {\n this.props.pushModal('rollover-budget-summary', {\n month: this.state.currentMonth,\n onBudgetAction: this.props.applyBudgetAction,\n });\n }\n };\n\n onBudgetAction = type => {\n const { currentMonth } = this.state;\n this.props.applyBudgetAction(currentMonth, type, this.state.bounds);\n };\n\n onAddGroup = () => {\n this.props.pushModal('new-category-group', {\n onValidate: name => (!name ? 'Name is required.' : null),\n onSubmit: async name => {\n const id = await this.props.createGroup(name);\n this.setState(state => ({\n categoryGroups: addGroup(state.categoryGroups, {\n id,\n name,\n categories: [],\n is_income: 0,\n }),\n }));\n },\n });\n };\n\n onAddCategory = (groupId, isIncome) => {\n this.props.pushModal('new-category', {\n onValidate: name => (!name ? 'Name is required.' : null),\n onSubmit: async name => {\n const id = await this.props.createCategory(name, groupId, isIncome);\n this.setState(state => ({\n categoryGroups: addCategory(state.categoryGroups, {\n id,\n name,\n cat_group: groupId,\n is_income: isIncome ? 1 : 0,\n }),\n }));\n },\n });\n };\n\n onSaveGroup = group => {\n this.props.updateGroup(group);\n this.setState(state => ({\n categoryGroups: updateGroup(state.categoryGroups, group),\n }));\n };\n\n onDeleteGroup = async groupId => {\n let group = this.state.categoryGroups?.find(g => g.id === groupId);\n\n if (!group) {\n return;\n }\n\n let mustTransfer = false;\n for (let category of group.categories) {\n if (await send('must-category-transfer', { id: category.id })) {\n mustTransfer = true;\n break;\n }\n }\n\n if (mustTransfer) {\n this.props.pushModal('confirm-category-delete', {\n group: groupId,\n onDelete: transferCategory => {\n this.props.deleteGroup(groupId, transferCategory);\n this.setState(state => ({\n categoryGroups: deleteGroup(state.categoryGroups, groupId),\n }));\n },\n });\n } else {\n this.props.deleteGroup(groupId);\n this.setState(state => ({\n categoryGroups: deleteGroup(state.categoryGroups, groupId),\n }));\n }\n };\n\n onSaveCategory = category => {\n this.props.updateCategory(category);\n this.setState(state => ({\n categoryGroups: updateCategory(state.categoryGroups, category),\n }));\n };\n\n onDeleteCategory = async categoryId => {\n const mustTransfer = await send('must-category-transfer', {\n id: categoryId,\n });\n\n if (mustTransfer) {\n this.props.pushModal('confirm-category-delete', {\n category: categoryId,\n onDelete: transferCategory => {\n if (categoryId !== transferCategory) {\n this.props.deleteCategory(categoryId, transferCategory);\n this.setState(state => ({\n categoryGroups: deleteCategory(state.categoryGroups, categoryId),\n }));\n }\n },\n });\n } else {\n this.props.deleteCategory(categoryId);\n this.setState(state => ({\n categoryGroups: deleteCategory(state.categoryGroups, categoryId),\n }));\n }\n };\n\n onReorderCategory = (id, { inGroup, aroundCategory }) => {\n let { categoryGroups } = this.state;\n let groupId, targetId;\n\n if (inGroup) {\n groupId = inGroup;\n } else if (aroundCategory) {\n let { id: catId, position } = aroundCategory;\n\n let group = categoryGroups.find(group =>\n group.categories.find(cat => cat.id === catId),\n );\n\n if (position === 'bottom') {\n let { categories } = group;\n let idx = categories.findIndex(cat => cat.id === catId);\n catId = idx < categories.length - 1 ? categories[idx + 1].id : null;\n }\n\n groupId = group.id;\n targetId = catId;\n }\n\n this.props.moveCategory(id, groupId, targetId);\n\n this.setState({\n categoryGroups: moveCategory(categoryGroups, id, groupId, targetId),\n });\n };\n\n onReorderGroup = (id, targetId, position) => {\n let { categoryGroups } = this.state;\n\n if (position === 'bottom') {\n let idx = categoryGroups.findIndex(group => group.id === targetId);\n targetId =\n idx < categoryGroups.length - 1 ? categoryGroups[idx + 1].id : null;\n }\n\n this.props.moveCategoryGroup(id, targetId);\n\n this.setState({\n categoryGroups: moveCategoryGroup(categoryGroups, id, targetId),\n });\n };\n\n sync = async () => {\n const { updated, error } = await this.props.sync();\n if (error) {\n return 'error';\n } else if (updated) {\n return 'updated';\n }\n return null;\n };\n\n onPrevMonth = async () => {\n let { spreadsheet, budgetType } = this.props;\n let month = monthUtils.subMonths(this.state.currentMonth, 1);\n await prewarmMonth(budgetType, spreadsheet, month);\n this.setState({ currentMonth: month, initialized: true });\n };\n\n onNextMonth = async () => {\n let { spreadsheet, budgetType } = this.props;\n let month = monthUtils.addMonths(this.state.currentMonth, 1);\n await prewarmMonth(budgetType, spreadsheet, month);\n this.setState({ currentMonth: month, initialized: true });\n };\n\n onOpenActionSheet = () => {\n let { budgetType } = this.props;\n\n let options = [\n 'Edit Categories',\n 'Copy last month’s budget',\n 'Set budgets to zero',\n 'Set budgets to 3 month average',\n budgetType === 'report' && 'Apply to all future budgets',\n 'Cancel',\n ].filter(Boolean);\n\n this.props.showActionSheetWithOptions(\n {\n options,\n cancelButtonIndex: options.length - 1,\n title: 'Actions',\n },\n idx => {\n switch (idx) {\n case 0:\n this.setState({ editMode: true });\n break;\n case 1:\n this.onBudgetAction('copy-last');\n break;\n case 2:\n this.onBudgetAction('set-zero');\n break;\n case 3:\n this.onBudgetAction('set-3-avg');\n break;\n case 4:\n if (budgetType === 'report') {\n this.onBudgetAction('set-all-future');\n }\n break;\n default:\n }\n },\n );\n };\n\n onSwitchBudgetType = async () => {\n const { spreadsheet, budgetType, loadPrefs } = this.props;\n const { bounds, currentMonth } = this.state;\n\n this.setState({ initialized: false });\n\n const newBudgetType = budgetType === 'rollover' ? 'report' : 'rollover';\n await switchBudgetType(\n newBudgetType,\n spreadsheet,\n bounds,\n currentMonth,\n () => loadPrefs(),\n );\n\n this.setState({ initialized: true });\n };\n\n render() {\n const { currentMonth, bounds, editMode, initialized } = this.state;\n const {\n categories,\n categoryGroups,\n prefs,\n savePrefs,\n budgetType,\n navigation,\n applyBudgetAction,\n pushModal,\n } = this.props;\n let numberFormat = prefs.numberFormat || 'comma-dot';\n let hideFraction = prefs.hideFraction || false;\n\n if (!categoryGroups || !initialized) {\n return (\n <View\n style={{\n flex: 1,\n backgroundColor: theme.mobilePageBackground,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: 25,\n }}\n >\n <AnimatedLoading width={25} height={25} />\n </View>\n );\n }\n\n return (\n <SyncRefresh onSync={this.sync}>\n {({ refreshing, onRefresh }) => (\n <BudgetTable\n // This key forces the whole table rerender when the number\n // format changes\n key={numberFormat + hideFraction}\n categories={categories}\n categoryGroups={categoryGroups}\n type={budgetType}\n month={currentMonth}\n monthBounds={bounds}\n navigation={navigation}\n // refreshControl={\n // <RefreshControl refreshing={refreshing} onRefresh={onRefresh} />\n // }\n editMode={editMode}\n onEditMode={flag => this.setState({ editMode: flag })}\n onShowBudgetSummary={this.onShowBudgetSummary}\n onPrevMonth={this.onPrevMonth}\n onNextMonth={this.onNextMonth}\n onSaveGroup={this.onSaveGroup}\n onDeleteGroup={this.onDeleteGroup}\n onAddGroup={this.onAddGroup}\n onAddCategory={this.onAddCategory}\n onSaveCategory={this.onSaveCategory}\n onDeleteCategory={this.onDeleteCategory}\n onReorderCategory={this.onReorderCategory}\n onReorderGroup={this.onReorderGroup}\n onOpenActionSheet={() => {}} //this.onOpenActionSheet}\n onBudgetAction={applyBudgetAction}\n onRefresh={onRefresh}\n onSwitchBudgetType={this.onSwitchBudgetType}\n savePrefs={savePrefs}\n pushModal={pushModal}\n />\n )}\n </SyncRefresh>\n );\n }\n}\n\nexport default function BudgetWrapper() {\n let { list: categories, grouped: categoryGroups } = useCategories();\n let budgetType = useSelector(\n state => state.prefs.local.budgetType || 'rollover',\n );\n let prefs = useSelector(state => state.prefs.local);\n\n let actions = useActions();\n let spreadsheet = useSpreadsheet();\n useSetThemeColor(theme.mobileViewTheme);\n return (\n <Budget\n categoryGroups={categoryGroups}\n categories={categories}\n budgetType={budgetType}\n prefs={prefs}\n {...actions}\n spreadsheet={spreadsheet}\n />\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport * as queries from 'loot-core/src/client/queries';\n\nimport { useActions } from '../../hooks/useActions';\nimport useCategories from '../../hooks/useCategories';\nimport useNavigate from '../../hooks/useNavigate';\nimport { useSetThemeColor } from '../../hooks/useSetThemeColor';\nimport Add from '../../icons/v1/Add';\nimport { theme, styles } from '../../style';\nimport Button from '../common/Button';\nimport Text from '../common/Text';\nimport TextOneLine from '../common/TextOneLine';\nimport View from '../common/View';\nimport { Page } from '../Page';\nimport PullToRefresh from '../responsive/PullToRefresh';\nimport CellValue from '../spreadsheet/CellValue';\n\nfunction AccountHeader({ name, amount, style = {} }) {\n return (\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n marginTop: 10,\n marginRight: 10,\n color: theme.pageTextLight,\n width: '100%',\n ...style,\n }}\n >\n <View style={{ flex: 1 }}>\n <Text\n style={{\n ...styles.text,\n textTransform: 'uppercase',\n fontSize: 13,\n }}\n data-testid=\"name\"\n >\n {name}\n </Text>\n </View>\n <CellValue\n binding={amount}\n style={{ ...styles.text, fontSize: 13 }}\n type=\"financial\"\n />\n </View>\n );\n}\n\nfunction AccountCard({ account, updated, getBalanceQuery, onSelect }) {\n return (\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n backgroundColor: theme.tableBackground,\n boxShadow: `0 1px 1px ${theme.mobileAccountShadow}`,\n borderRadius: 6,\n marginTop: 10,\n marginRight: 10,\n width: '100%',\n }}\n data-testid=\"account\"\n >\n <Button\n onMouseDown={() => onSelect(account.id)}\n style={{\n flexDirection: 'row',\n border: '1px solid ' + theme.pillBorder,\n flex: 1,\n alignItems: 'center',\n borderRadius: 6,\n '&:active': {\n opacity: 0.1,\n },\n }}\n >\n <View\n style={{\n flex: 1,\n margin: '10px 0',\n }}\n >\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <TextOneLine\n style={{\n ...styles.text,\n fontSize: 17,\n fontWeight: 600,\n color: updated ? theme.mobileAccountText : theme.pillText,\n paddingRight: 30,\n }}\n data-testid=\"account-name\"\n >\n {account.name}\n </TextOneLine>\n {account.bankId && (\n <View\n style={{\n backgroundColor: theme.noticeBackgroundDark,\n marginLeft: '-23px',\n width: 8,\n height: 8,\n borderRadius: 8,\n }}\n />\n )}\n </View>\n </View>\n <CellValue\n binding={getBalanceQuery(account)}\n type=\"financial\"\n style={{ fontSize: 16, color: 'inherit' }}\n getStyle={value => value < 0 && { color: 'inherit' }}\n data-testid=\"account-balance\"\n />\n </Button>\n </View>\n );\n}\n\nfunction EmptyMessage() {\n return (\n <View style={{ flex: 1, padding: 30 }}>\n <Text style={styles.text}>\n For Actual to be useful, you need to add an account. You can link an\n account to automatically download transactions, or manage it locally\n yourself.\n </Text>\n </View>\n );\n}\n\nfunction AccountList({\n accounts,\n updatedAccounts,\n getBalanceQuery,\n getOnBudgetBalance,\n getOffBudgetBalance,\n onAddAccount,\n onSelectAccount,\n onSync,\n}) {\n const budgetedAccounts = accounts.filter(account => account.offbudget === 0);\n const offbudgetAccounts = accounts.filter(account => account.offbudget === 1);\n const noBackgroundColorStyle = {\n backgroundColor: 'transparent',\n color: 'white',\n };\n\n return (\n <View style={{ flex: 1, backgroundColor: theme.mobilePageBackground }}>\n <Page\n title=\"Accounts\"\n titleStyle={{\n backgroundColor: theme.mobileHeaderBackground,\n color: theme.mobileHeaderText,\n fontSize: 16,\n }}\n headerRightContent={\n <Button\n type=\"bare\"\n style={{\n paddingLeft: 12,\n paddingRight: 12,\n ...noBackgroundColorStyle,\n }}\n activeStyle={noBackgroundColorStyle}\n hoveredStyle={noBackgroundColorStyle}\n onClick={onAddAccount}\n >\n <Add width={20} height={20} />\n </Button>\n }\n >\n {accounts.length === 0 && <EmptyMessage />}\n <PullToRefresh onRefresh={onSync}>\n {budgetedAccounts.length > 0 && (\n <AccountHeader name=\"For Budget\" amount={getOnBudgetBalance()} />\n )}\n {budgetedAccounts.map(acct => (\n <AccountCard\n account={acct}\n key={acct.id}\n updated={updatedAccounts.includes(acct.id)}\n getBalanceQuery={getBalanceQuery}\n onSelect={onSelectAccount}\n />\n ))}\n\n {offbudgetAccounts.length > 0 && (\n <AccountHeader\n name=\"Off budget\"\n amount={getOffBudgetBalance()}\n style={{ marginTop: 30 }}\n />\n )}\n {offbudgetAccounts.map(acct => (\n <AccountCard\n account={acct}\n key={acct.id}\n updated={updatedAccounts.includes(acct.id)}\n getBalanceQuery={getBalanceQuery}\n onSelect={onSelectAccount}\n />\n ))}\n </PullToRefresh>\n </Page>\n </View>\n );\n}\n\nexport default function Accounts() {\n let accounts = useSelector(state => state.queries.accounts);\n let newTransactions = useSelector(state => state.queries.newTransactions);\n let updatedAccounts = useSelector(state => state.queries.updatedAccounts);\n let numberFormat = useSelector(\n state => state.prefs.local.numberFormat || 'comma-dot',\n );\n let hideFraction = useSelector(\n state => state.prefs.local.hideFraction || false,\n );\n\n const { list: categories } = useCategories();\n let { getAccounts, replaceModal, syncAndDownload } = useActions();\n\n const transactions = useState({});\n const navigate = useNavigate();\n\n useEffect(() => {\n (async () => getAccounts())();\n }, []);\n\n const onSelectAccount = id => {\n navigate(`/accounts/${id}`);\n };\n\n const onSelectTransaction = transaction => {\n navigate(`/transaction/${transaction}`);\n };\n\n useSetThemeColor(theme.mobileViewTheme);\n\n return (\n <View style={{ flex: 1 }}>\n <AccountList\n // This key forces the whole table rerender when the number\n // format changes\n key={numberFormat + hideFraction}\n accounts={accounts.filter(account => !account.closed)}\n categories={categories}\n transactions={transactions || []}\n updatedAccounts={updatedAccounts}\n newTransactions={newTransactions}\n getBalanceQuery={queries.accountBalance}\n getOnBudgetBalance={queries.budgetedAccountBalance}\n getOffBudgetBalance={queries.offbudgetAccountBalance}\n onAddAccount={() => replaceModal('add-account')}\n onSelectAccount={onSelectAccount}\n onSelectTransaction={onSelectTransaction}\n onSync={syncAndDownload}\n />\n </View>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { useActions } from '../../hooks/useActions';\nimport Add from '../../icons/v1/Add';\nimport CheveronLeft from '../../icons/v1/CheveronLeft';\nimport SearchAlternate from '../../icons/v2/SearchAlternate';\nimport { theme, styles } from '../../style';\nimport Button from '../common/Button';\nimport ButtonLink from '../common/ButtonLink';\nimport InputWithContent from '../common/InputWithContent';\nimport Label from '../common/Label';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport PullToRefresh from '../responsive/PullToRefresh';\nimport CellValue from '../spreadsheet/CellValue';\nimport { TransactionList } from '../transactions/MobileTransaction';\n\nfunction TransactionSearchInput({ accountName, onSearch }) {\n const [text, setText] = useState('');\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: theme.mobilePageBackground,\n margin: '11px auto 4px',\n padding: 10,\n width: '100%',\n }}\n >\n <InputWithContent\n leftContent={\n <SearchAlternate\n style={{\n width: 13,\n height: 13,\n flexShrink: 0,\n color: text ? theme.formInputTextHighlight : 'inherit',\n margin: 5,\n marginRight: 0,\n }}\n />\n }\n value={text}\n onUpdate={text => {\n setText(text);\n onSearch(text);\n }}\n placeholder={`Search ${accountName}`}\n style={{\n backgroundColor: theme.tableBackground,\n border: `1px solid ${theme.formInputBorder}`,\n fontSize: 15,\n flex: 1,\n height: 32,\n marginLeft: 4,\n padding: 8,\n }}\n />\n </View>\n );\n}\n\nconst LEFT_RIGHT_FLEX_WIDTH = 70;\nconst BUDGET_HEADER_HEIGHT = 50;\n\nexport default function AccountDetails({\n account,\n prependTransactions,\n transactions,\n accounts,\n categories,\n payees,\n balance,\n isNewTransaction,\n onLoadMore,\n onSearch,\n onSelectTransaction,\n pushModal,\n}) {\n let allTransactions = useMemo(() => {\n return prependTransactions.concat(transactions);\n }, [prependTransactions, transactions]);\n\n const { syncAndDownload } = useActions();\n const onRefresh = async () => {\n await syncAndDownload(account.id);\n };\n\n return (\n <View\n style={{\n flex: 1,\n backgroundColor: theme.mobilePageBackground,\n overflowY: 'hidden',\n flexGrow: 1,\n }}\n >\n <View\n style={{\n alignItems: 'center',\n flexShrink: 0,\n overflowY: 'hidden',\n top: 0,\n }}\n >\n <AccountDetailsHeader account={account} />\n <Label title=\"BALANCE\" style={{ marginTop: 10 }} />\n <CellValue\n binding={balance}\n type=\"financial\"\n style={{\n fontSize: 18,\n fontWeight: '500',\n }}\n getStyle={value => ({\n color: value < 0 ? theme.errorText : theme.pillTextHighlighted,\n })}\n data-testid=\"account-balance\"\n />\n <TransactionSearchInput\n accountName={account.name}\n onSearch={onSearch}\n />\n </View>\n\n <PullToRefresh onRefresh={onRefresh}>\n <TransactionList\n transactions={allTransactions}\n categories={categories}\n accounts={accounts}\n payees={payees}\n showCategory={!account.offbudget}\n isNew={isNewTransaction}\n onLoadMore={onLoadMore}\n onSelect={onSelectTransaction}\n pushModal={pushModal}\n />\n </PullToRefresh>\n </View>\n );\n}\n\nfunction AccountDetailsHeader({ account }) {\n return (\n <View\n style={{\n flexDirection: 'row',\n flexShrink: 0,\n height: BUDGET_HEADER_HEIGHT,\n width: '100%',\n backgroundColor: theme.mobileHeaderBackground,\n }}\n >\n <View\n style={{\n width: LEFT_RIGHT_FLEX_WIDTH,\n flexDirection: 'row',\n }}\n >\n <Button\n type=\"bare\"\n style={{\n color: theme.mobileHeaderText,\n justifyContent: 'center',\n margin: 10,\n paddingLeft: 5,\n paddingRight: 3,\n }}\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n >\n <Link\n to={-1}\n style={{\n ...styles.noTapHighlight,\n alignItems: 'center',\n display: 'flex',\n textDecoration: 'none',\n }}\n >\n <CheveronLeft\n style={{ width: 30, height: 30, margin: -10, marginLeft: -5 }}\n />\n <Text\n style={{\n ...styles.text,\n fontWeight: 500,\n marginLeft: 5,\n marginRight: 5,\n }}\n >\n Back\n </Text>\n </Link>\n </Button>\n <View\n style={{\n flex: 1,\n }}\n />\n </View>\n <View\n style={{\n flex: 1,\n fontSize: 16,\n fontWeight: 500,\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.mobileHeaderText,\n }}\n role=\"heading\"\n >\n {account.name}\n </View>\n\n <View\n style={{\n width: LEFT_RIGHT_FLEX_WIDTH,\n flexDirection: 'row',\n }}\n >\n <View\n style={{\n flex: 1,\n }}\n />\n <ButtonLink\n to=\"transactions/new\"\n type=\"bare\"\n aria-label=\"Add Transaction\"\n style={{\n justifyContent: 'center',\n padding: 10,\n margin: 10,\n color: theme.mobileHeaderText,\n }}\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n activeStyle={{ background: 'transparent' }}\n >\n <Add width={20} height={20} style={{ margin: -5 }} />\n </ButtonLink>\n </View>\n </View>\n );\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport debounce from 'debounce';\nimport memoizeOne from 'memoize-one';\nimport { bindActionCreators } from 'redux';\n\nimport * as actions from 'loot-core/src/client/actions';\nimport {\n SchedulesProvider,\n useCachedSchedules,\n} from 'loot-core/src/client/data-hooks/schedules';\nimport * as queries from 'loot-core/src/client/queries';\nimport { pagedQuery } from 'loot-core/src/client/query-helpers';\nimport { listen } from 'loot-core/src/platform/client/fetch';\nimport {\n isPreviewId,\n ungroupTransactions,\n} from 'loot-core/src/shared/transactions';\n\nimport useCategories from '../../hooks/useCategories';\nimport useNavigate from '../../hooks/useNavigate';\nimport { useSetThemeColor } from '../../hooks/useSetThemeColor';\nimport { theme } from '../../style';\n\nimport AccountDetails from './MobileAccountDetails';\n\nconst getSchedulesTransform = memoizeOne((id, hasSearch) => {\n let filter = queries.getAccountFilter(id, '_account');\n\n // Never show schedules on these pages\n if (hasSearch) {\n filter = { id: null };\n }\n\n return q => {\n q = q.filter({ $and: [filter, { '_account.closed': false }] });\n return q.orderBy({ next_date: 'desc' });\n };\n});\n\nfunction PreviewTransactions({ accountId, children }) {\n let scheduleData = useCachedSchedules();\n\n if (scheduleData == null) {\n return children(null);\n }\n\n let schedules = scheduleData.schedules.filter(\n s =>\n !s.completed &&\n ['due', 'upcoming', 'missed'].includes(scheduleData.statuses.get(s.id)),\n );\n\n return children(\n schedules.map(schedule => ({\n id: 'preview/' + schedule.id,\n payee: schedule._payee,\n account: schedule._account,\n amount: schedule._amount,\n date: schedule.next_date,\n notes: scheduleData.statuses.get(schedule.id),\n schedule: schedule.id,\n })),\n );\n}\n\nlet paged;\n\nexport default function Account(props) {\n const accounts = useSelector(state => state.queries.accounts);\n\n const navigate = useNavigate();\n const [transactions, setTransactions] = useState([]);\n const [searchText, setSearchText] = useState('');\n const [currentQuery, setCurrentQuery] = useState();\n\n let state = useSelector(state => ({\n payees: state.queries.payees,\n newTransactions: state.queries.newTransactions,\n prefs: state.prefs.local,\n dateFormat: state.prefs.local.dateFormat || 'MM/dd/yyyy',\n }));\n\n let dispatch = useDispatch();\n let actionCreators = useMemo(\n () => bindActionCreators(actions, dispatch),\n [dispatch],\n );\n\n const { id: accountId } = useParams();\n\n const makeRootQuery = () => queries.makeTransactionsQuery(accountId);\n\n const updateQuery = query => {\n if (paged) {\n paged.unsubscribe();\n }\n\n paged = pagedQuery(\n query.options({ splits: 'grouped' }).select('*'),\n data => setTransactions(data),\n { pageCount: 150, mapper: ungroupTransactions },\n );\n };\n\n const fetchTransactions = async () => {\n let query = makeRootQuery();\n setCurrentQuery(query);\n updateQuery(query);\n };\n\n useEffect(() => {\n let unlisten;\n\n async function setUpAccount() {\n unlisten = listen('sync-event', ({ type, tables }) => {\n if (type === 'applied') {\n if (\n tables.includes('transactions') ||\n tables.includes('category_mapping') ||\n tables.includes('payee_mapping')\n ) {\n paged?.run();\n }\n\n if (tables.includes('payees') || tables.includes('payee_mapping')) {\n actionCreators.getPayees();\n }\n }\n });\n\n if (accounts.length === 0) {\n await actionCreators.getAccounts();\n }\n\n await actionCreators.initiallyLoadPayees();\n await fetchTransactions();\n\n actionCreators.markAccountRead(accountId);\n }\n\n setUpAccount();\n\n return () => unlisten();\n }, []);\n\n // Load categories if necessary.\n const categories = useCategories();\n\n const updateSearchQuery = debounce(() => {\n if (searchText === '' && currentQuery) {\n updateQuery(currentQuery);\n } else if (searchText && currentQuery) {\n updateQuery(\n queries.makeTransactionSearchQuery(\n currentQuery,\n searchText,\n state.dateFormat,\n ),\n );\n }\n }, 150);\n\n useEffect(updateSearchQuery, [searchText, currentQuery, state.dateFormat]);\n\n useSetThemeColor(theme.mobileViewTheme);\n\n if (!accounts || !accounts.length) {\n return null;\n }\n\n const account = accounts.find(acct => acct.id === accountId);\n\n const isNewTransaction = id => {\n return state.newTransactions.includes(id);\n };\n\n const onSearch = async text => {\n paged.unsubscribe();\n setSearchText(text);\n };\n\n const onSelectTransaction = transaction => {\n // details of how the native app used to handle preview transactions here can be found at commit 05e58279\n if (!isPreviewId(transaction.id)) {\n navigate(`transactions/${transaction.id}`);\n }\n };\n\n let balance = queries.accountBalance(account);\n let numberFormat = state.prefs.numberFormat || 'comma-dot';\n let hideFraction = state.prefs.hideFraction || false;\n\n return (\n <SchedulesProvider\n transform={getSchedulesTransform(accountId, searchText !== '')}\n >\n <PreviewTransactions accountId={props.accountId}>\n {prependTransactions =>\n prependTransactions == null ? null : (\n <AccountDetails\n // This key forces the whole table rerender when the number\n // format changes\n {...state}\n {...actionCreators}\n key={numberFormat + hideFraction}\n account={account}\n accounts={accounts}\n categories={categories.list}\n payees={state.payees}\n transactions={transactions}\n prependTransactions={prependTransactions || []}\n balance={balance}\n isNewTransaction={isNewTransaction}\n onLoadMore={() => {\n paged?.fetchNext();\n }}\n onSearch={onSearch}\n onSelectTransaction={onSelectTransaction}\n />\n )\n }\n </PreviewTransactions>\n </SchedulesProvider>\n );\n}\n","export function addCategory(categoryGroups, cat) {\n return categoryGroups.map(group => {\n if (group.id === cat.cat_group) {\n group.categories = [cat, ...group.categories];\n }\n return { ...group };\n });\n}\n\nexport function updateCategory(categoryGroups, category) {\n return categoryGroups.map(group => {\n if (group.id === category.cat_group) {\n group.categories = group.categories.map(c => {\n if (c.id === category.id) {\n return { ...c, ...category };\n }\n return c;\n });\n }\n return group;\n });\n}\n\nexport function moveCategory(categoryGroups, id, groupId, targetId) {\n if (id === targetId) {\n return categoryGroups;\n }\n\n let moveCat = categoryGroups.reduce((value, group) => {\n return value || group.categories.find(cat => cat.id === id);\n }, null);\n\n // Update the group id on the category\n moveCat = { ...moveCat, cat_group: groupId };\n\n return categoryGroups.map(group => {\n if (group.id === groupId) {\n group.categories = group.categories.reduce((cats, cat) => {\n if (cat.id === targetId) {\n cats.push(moveCat);\n cats.push(cat);\n } else if (cat.id !== id) {\n cats.push(cat);\n }\n return cats;\n }, []);\n\n if (!targetId) {\n group.categories.push(moveCat);\n }\n } else {\n group.categories = group.categories.filter(cat => cat.id !== id);\n }\n\n return { ...group };\n });\n}\n\nexport function moveCategoryGroup(categoryGroups, id, targetId) {\n if (id === targetId) {\n return categoryGroups;\n }\n\n const moveGroup = categoryGroups.find(g => g.id === id);\n\n categoryGroups = categoryGroups.reduce((groups, group) => {\n if (group.id === targetId) {\n groups.push(moveGroup);\n groups.push(group);\n } else if (group.id !== id) {\n groups.push(group);\n }\n return groups;\n }, []);\n\n if (!targetId) {\n categoryGroups.push(moveGroup);\n }\n\n return categoryGroups;\n}\n\nexport function deleteCategory(categoryGroups, id) {\n return categoryGroups.map(group => {\n group.categories = group.categories.filter(c => c.id !== id);\n return group;\n });\n}\n\nexport function addGroup(categoryGroups, group) {\n return [...categoryGroups, group];\n}\n\nexport function updateGroup(categoryGroups, group) {\n return categoryGroups.map(g => {\n if (g.id === group.id) {\n return { ...g, ...group };\n }\n return g;\n });\n}\n\nexport function deleteGroup(categoryGroups, id) {\n return categoryGroups.filter(g => g.id !== id);\n}\n"],"names":["BalanceWithCarryover","carryover","balance","goal","budgeted","disabled","style","balanceStyle","carryoverStyle","carryoverValue","useSheetValue","balanceValue","goalValue","budgetedValue","isGoalTemplatesEnabled","useFeatureFlag","View","CellValue","binding","type","getStyle","value","makeAmountStyle","textAlign","cursor","textDecoration","alignSelf","marginLeft","position","right","top","bottom","justifyContent","ArrowThinRight","width","height","BalanceTooltip","categoryId","tooltip","monthIndex","onBudgetAction","onClose","tooltipProps","reportBudget","catCarryover","_onClose","close","Tooltip","padding","Menu","onMenuSelect","category","flag","items","name","text","CoverTooltip","onSubmit","grouped","categoryGroups","useCategories","addToBeBudgetedGroup","filter","g","is_income","setCategory","useState","submit","marginBottom","InitialFocus","node","CategoryAutocomplete","openOnFocus","onUpdate","id","onSelect","inputProps","inputRef","onKeyDown","e","key","alignItems","marginTop","Button","fontSize","paddingTop","onClick","rolloverBudget","catBalance","menu","setMenu","x","TransferTooltip","initialAmountName","showToBeBudgeted","amount","toCategory","from","to","fromCategory","ButtonLink","activeStyle","props","navigate","useNavigate","match","useMatch","path","SyncRefresh","onSync","children","syncing","setSyncing","onSync_","refreshing","onRefresh","Card","forwardRef","ref","marginRight","borderRadius","backgroundColor","theme","cardBackground","borderColor","cardBorder","boxShadow","overflow","Label","title","Text","styles","color","tableRowHeaderText","DIRECTION","isOverflowScrollable","element","overflowType","getComputedStyle","overflowY","document","scrollingElement","isScrollable","direction","DOWN","bottomScroll","scrollTop","clientHeight","scrollHeight","UP","Error","isTreeScrollable","parentElement","styleInject","css","insertAt","head","getElementsByTagName","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","RefreshingContent","className","PullingContent","css$1","PullToRefresh","_a","_b","isPullable","_c","canFetchMore","onFetchMore","_d","refreshingContent","_e","pullingContent","_f","pullDownThreshold","_g","fetchMoreThreshold","_h","maxPullDownDistance","_j","resistance","_k","containerRef","useRef","childrenRef","pullDownRef","fetchMoreRef","pullToRefreshThresholdBreached","fetchMoreTresholdBreached","isDragging","startY","currentY","useEffect","current","childrenEl","addEventListener","onTouchStart","passive","onTouchMove","window","onScroll","onEnd","body","removeEventListener","isAlreadyFetchingMore","classList","contains","getScrollToBottomValue","add","then","initContainer","catch","scrollY","innerHeight","requestAnimationFrame","overflowX","transform","opacity","remove","MouseEvent","pageY","TouchEvent","touches","target","getBoundingClientRect","cancelable","preventDefault","yDistanceMoved","Math","min","toString","visibility","div","BasePullToRefresh","String","ROW_HEIGHT","ListItem","borderBottomWidth","tableBorder","flexDirection","paddingLeft","paddingRight","zIndex","ToBudget","toBudget","underlinedText","formInputText","flexShrink","smallText","fontWeight","errorText","Saved","projected","totalBudgetedSaved","totalSaved","saved","isNegative","warningText","errorTextDark","BudgetCell","textStyle","month","onEdit","isEditing","sheetValue","updateBudgetAmount","onAmountClick","AmountInput","initialValue","zeroSign","display","focused","onChange","onBlur","role","makeAmountGrey","data-testid","onPointerUp","onPointerDown","ExpenseGroupPreview","group","pending","ExpenseGroupTotals","blank","categories","map","cat","index","ExpenseCategory","ExpenseCategoryPreview","flex","memo","spent","editMode","isEditingBudget","onEditBudget","onSave","onDelete","isBudgetActionMenuOpen","onOpenBudgetActionMenu","show3Cols","showBudgetedCol","showEditables","categoryName","setCategoryName","isHidden","setIsHidden","hidden","useTooltip","balanceTooltip","open","isOpen","listItemRef","_onBudgetAction","action","arg","monthUtils","content","tableTextEditing","borderTopWidth","undefined","innerRef","InputWithContent","rightContent","getOpenEvents","DotsHorizontalTriple","offset","focus","placeholder","onEnter","relatedTarget","lineClamp","noTapHighlight","span","ReportBudgetBalanceTooltip","RolloverBudgetBalanceTooltip","onAddCategory","groupName","setGroupName","tableRowHeaderBackground","tabIndex","IncomeGroupTotals","IncomeCategory","ExpenseGroup","editingGroupId","onEditGroup","editingCategoryId","onEditCategory","editingBudgetCategoryId","onEditCategoryBudget","openBudgetActionMenuId","onSaveCategory","onDeleteCategory","showHiddenCategories","editable","groupBudgeted","groupSumAmount","groupBalance","isEditingCategory","isEditingCategoryBudget","catGoal","catBudgeted","catSumAmount","tableBackground","IncomeGroup","BudgetGroups","gestures","onAddGroup","onSaveGroup","onDeleteGroup","onReorderCategory","onReorderGroup","separateGroups","memoizeOne","groups","incomeGroup","find","expenseGroups","paddingBottom","margin","BudgetTable","monthBounds","onPrevMonth","onNextMonth","onEditMode","onShowBudgetSummary","onSwitchBudgetType","savePrefs","pushModal","GROUP_EDIT_ACTION","setEditingGroupId","CATEGORY_EDIT_ACTION","setEditingCategoryId","CATEGORY_BUDGET_EDIT_ACTION","setEditingBudgetCategoryId","BUDGET_MENU_OPEN_ACTION","setOpenBudgetActionMenuId","currentlyEditing","useResponsive","currentMonth","format","useFormat","mobileShowBudgetedColPref","useSelector","state","prefs","local","toggleMobileDisplayPref","setShowBudgetedCol","cookie","toggleDisplay","buttonStyle","NamespaceContext","Provider","BudgetHeader","background","formInputBackgroundSelection","flexBasis","buttonNormalText","totalBudgetedExpense","totalBudgeted","formatter","parseFloat","totalSpent","totalLeftover","totalBalance","LEFT_RIGHT_FLEX_WIDTH","BUDGET_HEADER_HEIGHT","serverURL","useServerURL","prevEnabled","start","nextEnabled","end","toggleHiddenCategories","isReportBudgetEnabled","onSwitch","mobileHeaderBackground","SyncButton","isMobile","mobileHeaderText","hoveredStyle","mobileHeaderTextHover","ArrowThinLeft","Budget","Component","constructor","bounds","initialized","loadCategories","result","getCategories","setState","componentDidMount","send","prewarmMonth","budgetType","spreadsheet","unlisten","listen","tables","includes","cleanup","componentWillUnmount","applyBudgetAction","onValidate","createGroup","addGroup","groupId","isIncome","createCategory","addCategory","cat_group","updateGroup","mustTransfer","transferCategory","deleteGroup","updateCategory","deleteCategory","inGroup","aroundCategory","targetId","catId","idx","findIndex","length","moveCategory","moveCategoryGroup","sync","updated","error","onOpenActionSheet","options","Boolean","showActionSheetWithOptions","cancelButtonIndex","loadPrefs","newBudgetType","switchBudgetType","render","navigation","numberFormat","hideFraction","mobilePageBackground","AnimatedLoading","BudgetWrapper","list","actions","useActions","useSpreadsheet","useSetThemeColor","mobileViewTheme","AccountHeader","pageTextLight","textTransform","AccountCard","account","getBalanceQuery","mobileAccountShadow","onMouseDown","border","pillBorder","TextOneLine","mobileAccountText","pillText","bankId","noticeBackgroundDark","EmptyMessage","AccountList","accounts","updatedAccounts","getOnBudgetBalance","getOffBudgetBalance","onAddAccount","onSelectAccount","budgetedAccounts","offbudget","offbudgetAccounts","noBackgroundColorStyle","Page","titleStyle","headerRightContent","Add","acct","Accounts","queries","newTransactions","getAccounts","replaceModal","syncAndDownload","transactions","onSelectTransaction","transaction","closed","TransactionSearchInput","accountName","onSearch","setText","leftContent","SearchAlternate","formInputTextHighlight","formInputBorder","AccountDetails","prependTransactions","payees","isNewTransaction","onLoadMore","allTransactions","useMemo","concat","flexGrow","AccountDetailsHeader","pillTextHighlighted","TransactionList","showCategory","isNew","Link","CheveronLeft","aria-label","getSchedulesTransform","hasSearch","q","$and","orderBy","next_date","PreviewTransactions","accountId","scheduleData","useCachedSchedules","schedules","s","completed","statuses","get","schedule","payee","_payee","_account","_amount","date","notes","paged","Account","setTransactions","searchText","setSearchText","currentQuery","setCurrentQuery","dateFormat","dispatch","useDispatch","actionCreators","bindActionCreators","useParams","makeRootQuery","updateQuery","query","unsubscribe","pagedQuery","splits","select","data","pageCount","mapper","ungroupTransactions","fetchTransactions","setUpAccount","run","getPayees","initiallyLoadPayees","markAccountRead","updateSearchQuery","debounce","isPreviewId","SchedulesProvider","fetchNext","c","moveCat","reduce","cats","push","moveGroup"],"sourceRoot":""}