@actual-app/web 23.8.1 → 23.10.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.
- package/README.md +42 -1
- package/build/apple-touch-icon.png +0 -0
- package/build/asset-manifest.json +25 -25
- package/build/index.html +1 -1
- package/build/kcab/kcab.worker.b835d2cdcf8004c363da.js +250 -0
- package/build/kcab/kcab.worker.b835d2cdcf8004c363da.js.map +1 -0
- package/build/kcab/xfo.xfo.kcab.worker.2ee5d7175d50b7896f28.js +1 -0
- package/build/static/css/main.476f35a5.css +359 -0
- package/build/static/css/main.476f35a5.css.map +1 -0
- package/build/static/js/231.370f17f8.chunk.js +2 -0
- package/build/static/js/231.370f17f8.chunk.js.map +1 -0
- package/build/static/js/389.c8f94185.chunk.js +2 -0
- package/build/static/js/389.c8f94185.chunk.js.map +1 -0
- package/build/static/js/473.02c273e8.chunk.js +2 -0
- package/build/static/js/473.02c273e8.chunk.js.map +1 -0
- package/build/static/js/678.bf349f5d.chunk.js +2 -0
- package/build/static/js/678.bf349f5d.chunk.js.map +1 -0
- package/build/static/js/713.1731d555.chunk.js +15 -0
- package/build/static/js/713.1731d555.chunk.js.map +1 -0
- package/build/static/js/main.7e6eedd0.js +188 -0
- package/build/static/js/main.7e6eedd0.js.map +1 -0
- package/build/static/js/narrow-components.11cf3591.chunk.js +2 -0
- package/build/static/js/narrow-components.11cf3591.chunk.js.map +1 -0
- package/build/static/js/reports.39b7254a.chunk.js +2 -0
- package/build/static/js/reports.39b7254a.chunk.js.map +1 -0
- package/build/static/js/resize-observer-polyfill.98a18736.chunk.js +2 -0
- package/build/static/js/resize-observer-polyfill.98a18736.chunk.js.map +1 -0
- package/build/static/js/wide-components.fd8595f4.chunk.js +2 -0
- package/build/static/js/wide-components.fd8595f4.chunk.js.map +1 -0
- package/build/static/media/browser-server.20abc230cfc504c53fa0.js +1 -0
- package/package.json +25 -19
- package/build/kcab/kcab.worker.61dd77d50c3de3a5c965.js +0 -3
- package/build/kcab/kcab.worker.61dd77d50c3de3a5c965.js.LICENSE.txt +0 -24
- package/build/kcab/kcab.worker.61dd77d50c3de3a5c965.js.map +0 -1
- package/build/kcab/xfo.xfo.kcab.worker.e800a4a41b9557f2726d.js +0 -1
- package/build/static/css/main.90cc2688.css +0 -7
- package/build/static/css/main.90cc2688.css.map +0 -1
- package/build/static/js/281.6bb03bd1.chunk.js +0 -2
- package/build/static/js/281.6bb03bd1.chunk.js.map +0 -1
- package/build/static/js/383.1b04bac1.chunk.js +0 -2
- package/build/static/js/383.1b04bac1.chunk.js.map +0 -1
- package/build/static/js/457.4c255aed.chunk.js +0 -2
- package/build/static/js/457.4c255aed.chunk.js.map +0 -1
- package/build/static/js/876.00fe0e63.chunk.js +0 -2
- package/build/static/js/876.00fe0e63.chunk.js.map +0 -1
- package/build/static/js/969.b56f4e53.chunk.js +0 -2
- package/build/static/js/969.b56f4e53.chunk.js.map +0 -1
- package/build/static/js/main.b9496410.js +0 -3
- package/build/static/js/main.b9496410.js.LICENSE.txt +0 -178
- package/build/static/js/main.b9496410.js.map +0 -1
- package/build/static/js/narrow-components.55a3b7fd.chunk.js +0 -2
- package/build/static/js/narrow-components.55a3b7fd.chunk.js.map +0 -1
- package/build/static/js/reports.689f3940.chunk.js +0 -2
- package/build/static/js/reports.689f3940.chunk.js.map +0 -1
- package/build/static/js/resize-observer-polyfill.68c3249b.chunk.js +0 -2
- package/build/static/js/resize-observer-polyfill.68c3249b.chunk.js.map +0 -1
- package/build/static/js/wide-components.e3cfa9ca.chunk.js +0 -2
- package/build/static/js/wide-components.e3cfa9ca.chunk.js.map +0 -1
- package/build/static/media/browser-server.14ed34b8682d7b10163f.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/reports.689f3940.chunk.js","mappings":"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","sources":["components/common/MenuTooltip.tsx","icons/v2/SettingsSliderAlternate.js","components/filters/FiltersMenu.js","components/filters/SavedFilters.js","hooks/useFilters.ts","components/reports/Change.js","components/reports/util.js","components/reports/graphs/cash-flow-spreadsheet.tsx","components/reports/chart-theme.js","components/reports/Container.tsx","components/reports/Tooltip.js","components/reports/graphs/CashFlowGraph.tsx","components/reports/Header.js","components/reports/useReport.js","components/reports/CashFlow.js","components/reports/graphs/net-worth-spreadsheet.tsx","components/reports/graphs/NetWorthGraph.tsx","components/reports/NetWorth.js","components/reports/DateRange.js","components/reports/Overview.js","components/reports/ReportRouter.js"],"sourcesContent":["import React from 'react';\n\nimport { Tooltip } from '../tooltips';\n\nexport default function MenuTooltip({ width, onClose, children }) {\n return (\n <Tooltip\n position=\"bottom-right\"\n width={width}\n style={{ padding: 0 }}\n onClose={onClose}\n >\n {children}\n </Tooltip>\n );\n}\n","import * as React from 'react';\nconst SvgSettingsSliderAlternate = props => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n fill=\"currentColor\"\n d=\"M4.5 17.5h6.646a3.5 3.5 0 0 0 6.708 0H19.5a1 1 0 0 0 0-2h-1.646a3.5 3.5 0 0 0-6.708 0H4.5a1 1 0 0 0 0 2Zm10-2.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM19.5 6.5h-6.646a3.5 3.5 0 0 0-6.708 0H4.5a1 1 0 0 0 0 2h1.646a3.5 3.5 0 0 0 6.708 0H19.5a1 1 0 1 0 0-2ZM9.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Z\"\n />\n </svg>\n);\nexport default SvgSettingsSliderAlternate;\n","import React, { useState, useRef, useEffect, useReducer } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { FocusScope } from '@react-aria/focus';\nimport {\n parse as parseDate,\n format as formatDate,\n isValid as isDateValid,\n} from 'date-fns';\n\nimport { useFilters } from 'loot-core/src/client/data-hooks/filters';\nimport { send } from 'loot-core/src/platform/client/fetch';\nimport { getMonthYearFormat } from 'loot-core/src/shared/months';\nimport {\n mapField,\n friendlyOp,\n deserializeField,\n getFieldError,\n unparse,\n makeValue,\n FIELD_TYPES,\n TYPE_INFO,\n} from 'loot-core/src/shared/rules';\nimport { titleFirst } from 'loot-core/src/shared/util';\n\nimport DeleteIcon from '../../icons/v0/Delete';\nimport SettingsSliderAlternate from '../../icons/v2/SettingsSliderAlternate';\nimport { colors } from '../../style';\nimport Button from '../common/Button';\nimport Menu from '../common/Menu';\nimport Select from '../common/Select';\nimport Stack from '../common/Stack';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport { Value } from '../ManageRules';\nimport { Tooltip } from '../tooltips';\nimport GenericInput from '../util/GenericInput';\n\nimport { CondOpMenu } from './SavedFilters';\n\nlet filterFields = [\n 'date',\n 'account',\n 'payee',\n 'notes',\n 'category',\n 'amount',\n 'cleared',\n 'saved',\n].map(field => [field, mapField(field)]);\n\nfunction subfieldFromFilter({ field, options, value }) {\n if (field === 'date') {\n if (value.length === 7) {\n return 'month';\n } else if (value.length === 4) {\n return 'year';\n }\n } else if (field === 'amount') {\n if (options && options.inflow) {\n return 'amount-inflow';\n } else if (options && options.outflow) {\n return 'amount-outflow';\n }\n }\n return field;\n}\n\nfunction subfieldToOptions(field, subfield) {\n switch (field) {\n case 'amount':\n switch (subfield) {\n case 'amount-inflow':\n return { inflow: true };\n case 'amount-outflow':\n return { outflow: true };\n default:\n return null;\n }\n case 'date':\n switch (subfield) {\n case 'month':\n return { month: true };\n case 'year':\n return { year: true };\n default:\n return null;\n }\n default:\n return null;\n }\n}\n\nfunction OpButton({ op, selected, style, onClick }) {\n return (\n <Button\n type=\"bare\"\n style={[\n { backgroundColor: colors.n10, marginBottom: 5 },\n style,\n selected && {\n color: 'white',\n '&,:hover,:active': { backgroundColor: colors.b4 },\n },\n ]}\n onClick={onClick}\n >\n {friendlyOp(op)}\n </Button>\n );\n}\n\nfunction updateFilterReducer(state, action) {\n switch (action.type) {\n case 'set-op': {\n let type = FIELD_TYPES.get(state.field);\n let value = state.value;\n if (\n (type === 'id' || type === 'string') &&\n (action.op === 'contains' ||\n action.op === 'is' ||\n action.op === 'doesNotContain' ||\n action.op === 'isNot')\n ) {\n // Clear out the value if switching between contains or\n // is/oneof for the id or string type\n value = null;\n }\n return { ...state, op: action.op, value };\n }\n case 'set-value': {\n let { value } = makeValue(action.value, {\n type: FIELD_TYPES.get(state.field),\n });\n return { ...state, value: value };\n }\n default:\n throw new Error(`Unhandled action type: ${action.type}`);\n }\n}\n\nfunction ConfigureField({\n field,\n initialSubfield = field,\n op,\n value,\n dispatch,\n onApply,\n}) {\n let [subfield, setSubfield] = useState(initialSubfield);\n let inputRef = useRef();\n let prevOp = useRef(null);\n\n useEffect(() => {\n if (prevOp.current !== op && inputRef.current) {\n inputRef.current.focus();\n }\n prevOp.current = op;\n }, [op]);\n\n let type = FIELD_TYPES.get(field);\n let ops = TYPE_INFO[type].ops.filter(op => op !== 'isbetween');\n\n // Month and year fields are quite hacky right now! Figure out how\n // to clean this up later\n if (subfield === 'month' || subfield === 'year') {\n ops = ['is'];\n }\n\n return (\n <Tooltip\n position=\"bottom-left\"\n style={{ padding: 15 }}\n width={275}\n onClose={() => dispatch({ type: 'close' })}\n >\n <FocusScope>\n <View style={{ marginBottom: 10 }}>\n {field === 'amount' || field === 'date' ? (\n <Select\n options={\n field === 'amount'\n ? [\n ['amount', 'Amount'],\n ['amount-inflow', 'Amount (inflow)'],\n ['amount-outflow', 'Amount (outflow)'],\n ]\n : field === 'date'\n ? [\n ['date', 'Date'],\n ['month', 'Month'],\n ['year', 'Year'],\n ]\n : null\n }\n value={subfield}\n onChange={sub => {\n setSubfield(sub);\n\n if (sub === 'month' || sub === 'year') {\n dispatch({ type: 'set-op', op: 'is' });\n }\n }}\n style={{ borderWidth: 1 }}\n />\n ) : (\n titleFirst(mapField(field))\n )}\n </View>\n\n <View\n style={{\n color: colors.n4,\n marginBottom: 10,\n }}\n >\n {field === 'saved' && 'Existing filters will be cleared'}\n </View>\n\n <Stack\n direction=\"row\"\n align=\"flex-start\"\n spacing={1}\n style={{ flexWrap: 'wrap' }}\n >\n {type === 'boolean'\n ? [\n <OpButton\n key=\"true\"\n op=\"true\"\n selected={value === true}\n onClick={() => {\n dispatch({ type: 'set-op', op: 'is' });\n dispatch({ type: 'set-value', value: true });\n }}\n />,\n <OpButton\n key=\"false\"\n op=\"false\"\n selected={value === false}\n onClick={() => {\n dispatch({ type: 'set-op', op: 'is' });\n dispatch({ type: 'set-value', value: false });\n }}\n />,\n ]\n : [\n <Stack\n direction=\"row\"\n align=\"flex-start\"\n spacing={1}\n style={{ flexWrap: 'wrap' }}\n >\n {ops.slice(0, 3).map(currOp => (\n <OpButton\n key={currOp}\n op={currOp}\n selected={currOp === op}\n onClick={() => dispatch({ type: 'set-op', op: currOp })}\n />\n ))}\n </Stack>,\n <Stack\n direction=\"row\"\n align=\"flex-start\"\n spacing={1}\n style={{ flexWrap: 'wrap' }}\n >\n {ops.slice(3, ops.length).map(currOp => (\n <View>\n <OpButton\n key={currOp}\n op={currOp}\n selected={currOp === op}\n onClick={() => dispatch({ type: 'set-op', op: currOp })}\n />\n </View>\n ))}\n </Stack>,\n ]}\n </Stack>\n\n <form action=\"#\">\n {type !== 'boolean' && (\n <GenericInput\n inputRef={inputRef}\n field={field}\n subfield={subfield}\n type={\n type === 'id' && (op === 'contains' || op === 'doesNotContain')\n ? 'string'\n : type\n }\n value={value}\n multi={op === 'oneOf' || op === 'notOneOf'}\n style={{ marginTop: 10 }}\n onChange={v => dispatch({ type: 'set-value', value: v })}\n />\n )}\n\n <Stack\n direction=\"row\"\n justify=\"flex-end\"\n align=\"center\"\n style={{ marginTop: 15 }}\n >\n <View style={{ flex: 1 }} />\n <Button\n type=\"primary\"\n onClick={e => {\n e.preventDefault();\n onApply({\n field,\n op,\n value,\n options: subfieldToOptions(field, subfield),\n });\n }}\n >\n Apply\n </Button>\n </Stack>\n </form>\n </FocusScope>\n </Tooltip>\n );\n}\n\nexport function FilterButton({ onApply }) {\n let filters = useFilters();\n\n let { dateFormat } = useSelector(state => {\n return {\n dateFormat: state.prefs.local.dateFormat || 'MM/dd/yyyy',\n };\n });\n\n let [state, dispatch] = useReducer(\n (state, action) => {\n switch (action.type) {\n case 'select-field':\n return { ...state, fieldsOpen: true, condOpen: false };\n case 'configure': {\n let { field } = deserializeField(action.field);\n let type = FIELD_TYPES.get(field);\n let ops = TYPE_INFO[type].ops;\n return {\n ...state,\n fieldsOpen: false,\n condOpen: true,\n field: action.field,\n op: ops[0],\n value: type === 'boolean' ? true : null,\n };\n }\n case 'close':\n return { fieldsOpen: false, condOpen: false, value: null };\n default:\n return updateFilterReducer(state, action);\n }\n },\n { fieldsOpen: false, condOpen: false, field: null, value: null },\n );\n\n async function onValidateAndApply(cond) {\n cond = unparse({ ...cond, type: FIELD_TYPES.get(cond.field) });\n\n if (cond.type === 'date' && cond.options) {\n if (cond.options.month) {\n let date = parseDate(\n cond.value,\n getMonthYearFormat(dateFormat),\n new Date(),\n );\n if (isDateValid(date)) {\n cond.value = formatDate(date, 'yyyy-MM');\n } else {\n alert('Invalid date format');\n return;\n }\n } else if (cond.options.year) {\n let date = parseDate(cond.value, 'yyyy', new Date());\n if (isDateValid(date)) {\n cond.value = formatDate(date, 'yyyy');\n } else {\n alert('Invalid date format');\n return;\n }\n }\n }\n\n let { error } =\n cond.field !== 'saved' &&\n (await send('rule-validate', {\n conditions: [cond],\n actions: [],\n }));\n\n let saved = filters.find(f => cond.value === f.id);\n\n if (error && error.conditionErrors.length > 0) {\n let field = titleFirst(mapField(cond.field));\n alert(field + ': ' + getFieldError(error.conditionErrors[0]));\n } else {\n onApply(saved ? saved : cond);\n dispatch({ type: 'close' });\n }\n }\n\n return (\n <View>\n <Button type=\"bare\" onClick={() => dispatch({ type: 'select-field' })}>\n <SettingsSliderAlternate\n style={{ width: 16, height: 16, marginRight: 5 }}\n />{' '}\n Filter\n </Button>\n {state.fieldsOpen && (\n <Tooltip\n position=\"bottom-left\"\n style={{ padding: 0 }}\n onClose={() => dispatch({ type: 'close' })}\n >\n <Menu\n onMenuSelect={name => {\n dispatch({ type: 'configure', field: name });\n }}\n items={filterFields.map(([name, text]) => ({\n name: name,\n text: titleFirst(text),\n }))}\n />\n </Tooltip>\n )}\n {state.condOpen && (\n <ConfigureField\n field={state.field}\n op={state.op}\n value={state.value}\n dispatch={dispatch}\n onApply={onValidateAndApply}\n />\n )}\n </View>\n );\n}\n\nfunction FilterEditor({ field, op, value, options, onSave, onClose }) {\n let [state, dispatch] = useReducer(\n (state, action) => {\n switch (action.type) {\n case 'close':\n onClose();\n return state;\n default:\n return updateFilterReducer(state, action);\n }\n },\n { field, op, value, options },\n );\n\n return (\n <ConfigureField\n field={state.field}\n initialSubfield={subfieldFromFilter({ field, options, value })}\n op={state.op}\n value={state.value}\n options={state.options}\n dispatch={dispatch}\n onApply={cond => {\n onSave(cond);\n onClose();\n }}\n />\n );\n}\n\nfunction FilterExpression({\n field: originalField,\n customName,\n op,\n value,\n options,\n stage,\n style,\n onChange,\n onDelete,\n}) {\n let [editing, setEditing] = useState(false);\n\n let field = subfieldFromFilter({ field: originalField, value });\n\n return (\n <View\n style={[\n {\n backgroundColor: colors.n9,\n borderRadius: 4,\n flexDirection: 'row',\n alignItems: 'center',\n marginRight: 10,\n marginTop: 10,\n },\n style,\n ]}\n >\n <Button\n type=\"bare\"\n disabled={customName != null}\n onClick={() => setEditing(true)}\n style={{ marginRight: -7 }}\n >\n <div style={{ paddingBlock: 1, paddingLeft: 5, paddingRight: 2 }}>\n {customName ? (\n <Text style={{ color: colors.p4 }}>{customName}</Text>\n ) : (\n <>\n <Text style={{ color: colors.p4 }}>\n {mapField(field, options)}\n </Text>{' '}\n <Text style={{ color: colors.n3 }}>{friendlyOp(op, null)}</Text>{' '}\n <Value\n value={value}\n field={field}\n inline={true}\n valueIsRaw={op === 'contains' || op === 'doesNotContain'}\n />\n </>\n )}\n </div>\n </Button>\n <Button type=\"bare\" onClick={onDelete}>\n <DeleteIcon\n style={{\n width: 8,\n height: 8,\n margin: 5,\n marginLeft: 3,\n }}\n />\n </Button>\n {editing && (\n <FilterEditor\n field={originalField}\n customName={customName}\n op={op}\n value={value}\n options={options}\n stage={stage}\n onSave={onChange}\n onClose={() => setEditing(false)}\n />\n )}\n </View>\n );\n}\n\nexport function AppliedFilters({\n filters,\n editingFilter,\n onUpdate,\n onDelete,\n conditionsOp,\n onCondOpChange,\n}) {\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'flex-start',\n flexWrap: 'wrap',\n }}\n >\n <CondOpMenu\n conditionsOp={conditionsOp}\n onCondOpChange={onCondOpChange}\n filters={filters}\n />\n {filters.map((filter, i) => (\n <FilterExpression\n key={i}\n customName={filter.customName}\n field={filter.field}\n op={filter.op}\n value={filter.value}\n options={filter.options}\n editing={editingFilter === filter}\n onChange={newFilter => onUpdate(filter, newFilter)}\n onDelete={() => onDelete(filter)}\n />\n ))}\n </View>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\n\nimport { send, sendCatch } from 'loot-core/src/platform/client/fetch';\n\nimport ExpandArrow from '../../icons/v0/ExpandArrow';\nimport { colors } from '../../style';\nimport Button from '../common/Button';\nimport Menu from '../common/Menu';\nimport MenuTooltip from '../common/MenuTooltip';\nimport Stack from '../common/Stack';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport { FormField, FormLabel } from '../forms';\nimport { FieldSelect } from '../modals/EditRule';\nimport GenericInput from '../util/GenericInput';\n\nimport { AppliedFilters } from './FiltersMenu';\n\nfunction SavedFilterMenuButton({\n filters,\n conditionsOp,\n filterId,\n onClearFilters,\n onReloadSavedFilter,\n filtersList,\n}) {\n let [nameOpen, setNameOpen] = useState(false);\n let [adding, setAdding] = useState(false);\n let [menuOpen, setMenuOpen] = useState(false);\n let [err, setErr] = useState(null);\n let [menuItem, setMenuItem] = useState(null);\n let inputRef = useRef();\n let name = filterId.name;\n let id = filterId.id;\n let res;\n let savedFilter;\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }, [NameFilter]);\n\n const onFilterMenuSelect = async item => {\n setMenuItem(item);\n switch (item) {\n case 'rename-filter':\n setErr(null);\n setAdding(false);\n setMenuOpen(false);\n setNameOpen(true);\n break;\n case 'delete-filter':\n setMenuOpen(false);\n await send('filter-delete', id);\n onClearFilters();\n break;\n case 'update-filter':\n setErr(null);\n setAdding(false);\n setMenuOpen(false);\n savedFilter = {\n conditions: filters,\n conditionsOp: conditionsOp,\n id: filterId.id,\n name: filterId.name,\n status: 'saved',\n };\n res = await sendCatch('filter-update', {\n state: savedFilter,\n filters: [...filtersList],\n });\n if (res.error) {\n setErr(res.error.message);\n setNameOpen(true);\n } else {\n onReloadSavedFilter(savedFilter, 'update');\n }\n break;\n case 'save-filter':\n setErr(null);\n setAdding(true);\n setMenuOpen(false);\n setNameOpen(true);\n break;\n case 'reload-filter':\n setMenuOpen(false);\n savedFilter = {\n status: 'saved',\n };\n onReloadSavedFilter(savedFilter, 'reload');\n break;\n case 'clear-filter':\n setMenuOpen(false);\n onClearFilters();\n break;\n default:\n }\n };\n\n function FilterMenu({ onClose, filterId }) {\n return (\n <MenuTooltip width={200} onClose={onClose}>\n <Menu\n onMenuSelect={item => {\n onFilterMenuSelect(item);\n }}\n items={[\n ...(!filterId.id\n ? [\n { name: 'save-filter', text: 'Save new filter' },\n { name: 'clear-filter', text: 'Clear all conditions' },\n ]\n : [\n ...(filterId.id !== null && filterId.status === 'saved'\n ? [\n { name: 'rename-filter', text: 'Rename' },\n { name: 'delete-filter', text: 'Delete' },\n Menu.line,\n {\n name: 'save-filter',\n text: 'Save new filter',\n disabled: true,\n },\n { name: 'clear-filter', text: 'Clear all conditions' },\n ]\n : [\n { name: 'rename-filter', text: 'Rename' },\n { name: 'update-filter', text: 'Update condtions' },\n { name: 'reload-filter', text: 'Revert changes' },\n { name: 'delete-filter', text: 'Delete' },\n Menu.line,\n { name: 'save-filter', text: 'Save new filter' },\n { name: 'clear-filter', text: 'Clear all conditions' },\n ]),\n ]),\n ]}\n />\n </MenuTooltip>\n );\n }\n\n async function onAddUpdate() {\n if (adding) {\n //create new flow\n savedFilter = {\n conditions: filters,\n conditionsOp: conditionsOp,\n name: name,\n status: 'saved',\n };\n res = await sendCatch('filter-create', {\n state: savedFilter,\n filters: [...filtersList],\n });\n savedFilter = {\n ...savedFilter,\n id: res.data,\n };\n } else {\n //rename flow\n savedFilter = {\n conditions: filterId.conditions,\n conditionsOp: filterId.conditionsOp,\n id: filterId.id,\n name: name,\n };\n res = await sendCatch('filter-update', {\n state: savedFilter,\n filters: [...filtersList],\n });\n }\n if (res.error) {\n setErr(res.error.message);\n } else {\n setNameOpen(false);\n onReloadSavedFilter(savedFilter);\n }\n }\n\n function NameFilter({ onClose }) {\n return (\n <MenuTooltip width={325} onClose={onClose}>\n {menuItem !== 'update-filter' && (\n <form>\n <Stack\n direction=\"row\"\n justify=\"flex-end\"\n align=\"center\"\n style={{ padding: 10 }}\n >\n <FormField style={{ flex: 1 }}>\n <FormLabel\n title=\"Filter Name\"\n htmlFor=\"name-field\"\n style={{ userSelect: 'none' }}\n />\n <GenericInput\n inputRef={inputRef}\n id=\"name-field\"\n field=\"string\"\n type=\"string\"\n value={name}\n onChange={e => (name = e)}\n />\n </FormField>\n <Button\n type=\"primary\"\n style={{ marginTop: 18 }}\n onClick={e => {\n e.preventDefault();\n onAddUpdate();\n }}\n >\n {adding ? 'Add' : 'Update'}\n </Button>\n </Stack>\n </form>\n )}\n {err && (\n <Stack direction=\"row\" align=\"center\" style={{ padding: 10 }}>\n <Text style={{ color: colors.r4 }}>{err}</Text>\n </Stack>\n )}\n </MenuTooltip>\n );\n }\n\n return (\n <View>\n {filters.length > 0 && (\n <Button\n type=\"bare\"\n style={{ marginTop: 10 }}\n onClick={() => {\n setMenuOpen(true);\n }}\n >\n <Text\n style={{\n maxWidth: 150,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flexShrink: 0,\n }}\n >\n {!filterId.id ? 'Unsaved filter' : filterId.name} \n </Text>\n {filterId.id && filterId.status !== 'saved' && (\n <Text>(modified) </Text>\n )}\n <ExpandArrow width={8} height={8} style={{ marginRight: 5 }} />\n </Button>\n )}\n {menuOpen && (\n <FilterMenu onClose={() => setMenuOpen(false)} filterId={filterId} />\n )}\n {nameOpen && <NameFilter onClose={() => setNameOpen(false)} />}\n </View>\n );\n}\n\nexport function CondOpMenu({ conditionsOp, onCondOpChange, filters }) {\n return (\n filters.length > 1 && (\n <Text style={{ color: colors.n4, marginTop: 11, marginRight: 5 }}>\n <FieldSelect\n style={{ display: 'inline-flex' }}\n fields={[\n ['and', 'all'],\n ['or', 'any'],\n ]}\n value={conditionsOp}\n onChange={(name, value) => onCondOpChange(value, filters)}\n />\n of:\n </Text>\n )\n );\n}\n\nexport function FiltersStack({\n filters,\n conditionsOp,\n onUpdateFilter,\n onDeleteFilter,\n onClearFilters,\n onReloadSavedFilter,\n filterId,\n filtersList,\n onCondOpChange,\n}) {\n return (\n <View>\n <Stack\n spacing={2}\n direction=\"row\"\n justify=\"flex-start\"\n align=\"flex-start\"\n >\n <AppliedFilters\n filters={filters}\n conditionsOp={conditionsOp}\n onCondOpChange={onCondOpChange}\n onUpdate={onUpdateFilter}\n onDelete={onDeleteFilter}\n />\n <View style={{ flex: 1 }} />\n <SavedFilterMenuButton\n filters={filters}\n conditionsOp={conditionsOp}\n filterId={filterId}\n onClearFilters={onClearFilters}\n onReloadSavedFilter={onReloadSavedFilter}\n filtersList={filtersList}\n />\n </Stack>\n </View>\n );\n}\n","import { useCallback, useMemo, useState } from 'react';\n\nexport default function useFilters<T>(initialFilters: T[] = []) {\n const [filters, setFilters] = useState<T[]>(initialFilters);\n const [conditionsOp, setConditionsOp] = useState('and');\n const [saved, setSaved] = useState<T[]>(null);\n\n const onApply = useCallback(\n newFilter => {\n if (newFilter.conditions) {\n setFilters([...newFilter.conditions]);\n setConditionsOp(newFilter.conditionsOp);\n setSaved(newFilter.id);\n } else {\n setFilters(state => [...state, newFilter]);\n setSaved(null);\n }\n },\n [setFilters],\n );\n\n const onUpdate = useCallback(\n (oldFilter: T, updatedFilter: T) => {\n setFilters(state =>\n state.map(f => (f === oldFilter ? updatedFilter : f)),\n );\n setSaved(null);\n },\n [setFilters],\n );\n\n const onDelete = useCallback(\n (deletedFilter: T) => {\n setFilters(state => state.filter(f => f !== deletedFilter));\n setSaved(null);\n },\n [setFilters],\n );\n\n const onCondOpChange = useCallback(\n condOp => {\n setConditionsOp(condOp);\n },\n [setConditionsOp],\n );\n\n return useMemo(\n () => ({\n filters,\n saved,\n conditionsOp,\n onApply,\n onUpdate,\n onDelete,\n onCondOpChange,\n }),\n [filters, saved, onApply, onUpdate, onDelete, onCondOpChange, conditionsOp],\n );\n}\n","import React from 'react';\n\nimport { integerToCurrency } from 'loot-core/src/shared/util';\n\nimport { colors, styles } from '../../style';\nimport Block from '../common/Block';\n\nfunction Change({ amount }) {\n return (\n <Block\n style={[styles.smallText, { color: amount < 0 ? colors.r5 : colors.g5 }]}\n >\n {amount >= 0 ? '+' : ''}\n {integerToCurrency(amount)}\n </Block>\n );\n}\n\nexport default Change;\n","import { runQuery } from 'loot-core/src/client/query-helpers';\n\nexport function fromDateRepr(date) {\n return date.slice(0, 7);\n}\n\nexport async function runAll(queries, cb) {\n let data = await Promise.all(\n queries.map(q => {\n return runQuery(q).then(({ data }) => data);\n }),\n );\n cb(data);\n}\n\nexport function index(data, field, mapper) {\n const result = {};\n data.forEach(item => {\n result[mapper ? mapper(item[field]) : item[field]] = item;\n });\n return result;\n}\n\nexport function indexCashFlow(data, date, isTransfer) {\n const results = {};\n data.forEach(item => {\n let findExisting = results[item.date]\n ? results[item.date][item.xfer]\n ? results[item.date][item.xfer]\n : 0\n : 0;\n let result = { [item[isTransfer]]: item.amount + findExisting };\n results[item[date]] = { ...results[item[date]], ...result };\n });\n return results;\n}\n","import React from 'react';\n\nimport * as d from 'date-fns';\n\nimport q from 'loot-core/src/client/query-helpers';\nimport { send } from 'loot-core/src/platform/client/fetch';\nimport * as monthUtils from 'loot-core/src/shared/months';\nimport { integerToCurrency, integerToAmount } from 'loot-core/src/shared/util';\n\nimport AlignedText from '../../common/AlignedText';\nimport { runAll, indexCashFlow } from '../util';\n\nexport function simpleCashFlow(start, end) {\n return async (spreadsheet, setData) => {\n function makeQuery() {\n return q('transactions')\n .filter({\n $and: [{ date: { $gte: start } }, { date: { $lte: end } }],\n 'account.offbudget': false,\n $or: [\n {\n 'payee.transfer_acct.offbudget': true,\n 'payee.transfer_acct': null,\n },\n ],\n })\n .calculate({ $sum: '$amount' });\n }\n\n return runAll(\n [\n makeQuery().filter({ amount: { $gt: 0 } }),\n makeQuery().filter({ amount: { $lt: 0 } }),\n ],\n data => {\n setData({\n graphData: {\n income: data[0],\n expense: data[1],\n },\n });\n },\n );\n };\n}\n\nexport function cashFlowByDate(\n start,\n end,\n isConcise,\n conditions = [],\n conditionsOp,\n) {\n return async (spreadsheet, setData) => {\n let { filters } = await send('make-filters-from-conditions', {\n conditions: conditions.filter(cond => !cond.customName),\n });\n const conditionsOpKey = conditionsOp === 'or' ? '$or' : '$and';\n\n function makeQuery(where) {\n let query = q('transactions')\n .filter({\n [conditionsOpKey]: [...filters],\n })\n .filter({\n $and: [\n { date: { $transform: '$month', $gte: start } },\n { date: { $transform: '$month', $lte: end } },\n ],\n 'account.offbudget': false,\n });\n\n if (isConcise) {\n return query\n .groupBy([{ $month: '$date' }, 'payee.transfer_acct'])\n .select([\n { date: { $month: '$date' } },\n { isTransfer: 'payee.transfer_acct' },\n { amount: { $sum: '$amount' } },\n ]);\n }\n\n return query\n .groupBy(['date', 'payee.transfer_acct'])\n .select([\n 'date',\n { isTransfer: 'payee.transfer_acct' },\n { amount: { $sum: '$amount' } },\n ]);\n }\n\n return runAll(\n [\n q('transactions')\n .filter({\n [conditionsOpKey]: filters,\n date: { $transform: '$month', $lt: start },\n 'account.offbudget': false,\n })\n .calculate({ $sum: '$amount' }),\n makeQuery('amount > 0').filter({ amount: { $gt: 0 } }),\n makeQuery('amount < 0').filter({ amount: { $lt: 0 } }),\n ],\n data => {\n setData(recalculate(data, start, end, isConcise));\n },\n );\n };\n}\n\nfunction recalculate(data, start, end, isConcise) {\n let [startingBalance, income, expense] = data;\n let convIncome = income.map(t => {\n return { ...t, isTransfer: t.isTransfer !== null };\n });\n let convExpense = expense.map(t => {\n return { ...t, isTransfer: t.isTransfer !== null };\n });\n const dates = isConcise\n ? monthUtils.rangeInclusive(\n monthUtils.getMonth(start),\n monthUtils.getMonth(end),\n )\n : monthUtils.dayRangeInclusive(start, end);\n const incomes = indexCashFlow(convIncome, 'date', 'isTransfer');\n const expenses = indexCashFlow(convExpense, 'date', 'isTransfer');\n\n let balance = startingBalance;\n let totalExpenses = 0;\n let totalIncome = 0;\n let totalTransfers = 0;\n\n const graphData = dates.reduce(\n (res, date) => {\n let income = 0;\n let expense = 0;\n let creditTransfers = 0;\n let debitTransfers = 0;\n\n if (incomes[date]) {\n income = !incomes[date].false ? 0 : incomes[date].false;\n creditTransfers = !incomes[date].true ? 0 : incomes[date].true;\n }\n if (expenses[date]) {\n expense = !expenses[date].false ? 0 : expenses[date].false;\n debitTransfers = !expenses[date].true ? 0 : expenses[date].true;\n }\n\n totalExpenses += expense;\n totalIncome += income;\n balance += income + expense + creditTransfers + debitTransfers;\n totalTransfers += creditTransfers + debitTransfers;\n const x = d.parseISO(date);\n\n const label = (\n <div>\n <div style={{ marginBottom: 10 }}>\n <strong>\n {d.format(x, isConcise ? 'MMMM yyyy' : 'MMMM d, yyyy')}\n </strong>\n </div>\n <div style={{ lineHeight: 1.5 }}>\n <AlignedText left=\"Income:\" right={integerToCurrency(income)} />\n <AlignedText left=\"Expenses:\" right={integerToCurrency(expense)} />\n <AlignedText\n left=\"Change:\"\n right={<strong>{integerToCurrency(income + expense)}</strong>}\n />\n {creditTransfers + debitTransfers !== 0 && (\n <AlignedText\n left=\"Transfers:\"\n right={integerToCurrency(creditTransfers + debitTransfers)}\n />\n )}\n <AlignedText left=\"Balance:\" right={integerToCurrency(balance)} />\n </div>\n </div>\n );\n\n res.income.push({ x, y: integerToAmount(income) });\n res.expenses.push({ x, y: integerToAmount(expense) });\n res.balances.push({\n x,\n y: integerToAmount(balance),\n premadeLabel: label,\n amount: balance,\n });\n return res;\n },\n { expenses: [], income: [], balances: [] },\n );\n\n const { balances } = graphData;\n\n return {\n graphData,\n balance: balances[balances.length - 1].amount,\n totalExpenses,\n totalIncome,\n totalTransfers,\n totalChange: balances[balances.length - 1].amount - balances[0].amount,\n };\n}\n","import { colors } from '../../style';\n\nlet colorFades = {\n blueFadeStart: 'rgba(229, 245, 255, 1)',\n blueFadeEnd: 'rgba(229, 245, 255, 0)',\n redFadeStart: 'rgba(255, 243, 242, 1)',\n redFadeEnd: 'rgba(255, 243, 242, 0)',\n};\n\n// Typography\nconst sansSerif =\n 'Inter var, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, Helvetica, Arial, sans-serif';\nconst letterSpacing = 'normal';\nconst fontSize = 13;\n\n// Labels\nconst baseLabelStyles = {\n fontFamily: sansSerif,\n fontSize,\n letterSpacing,\n fill: colors.n1,\n stroke: 'transparent',\n};\n\nconst axisBaseStyles = {\n axis: {\n fill: 'transparent',\n stroke: 'none',\n },\n grid: {\n fill: 'none',\n stroke: 'none',\n pointerEvents: 'none',\n },\n ticks: {\n fill: 'transparent',\n size: 1,\n stroke: 'none',\n },\n axisLabel: baseLabelStyles,\n tickLabels: baseLabelStyles,\n};\n\nconst theme = {\n colors: {\n ...colorFades,\n red: colors.r7,\n blue: colors.b6,\n },\n area: {\n style: {\n labels: baseLabelStyles,\n data: {\n stroke: colors.b6,\n strokeWidth: 2,\n strokeLinejoin: 'round',\n strokeLinecap: 'round',\n },\n },\n },\n axis: {\n style: axisBaseStyles,\n },\n dependentAxis: {\n style: {\n ...axisBaseStyles,\n grid: {\n ...axisBaseStyles.grid,\n stroke: 'rgba(0,0,0,.2)',\n strokeDasharray: '1,1',\n },\n tickLabels: { ...baseLabelStyles, padding: 5 },\n },\n },\n independentAxis: {\n style: {\n ...axisBaseStyles,\n axis: { ...axisBaseStyles.axis, stroke: 'rgba(0,0,0,.2)' },\n tickLabels: { ...baseLabelStyles, padding: 10 },\n },\n },\n bar: {\n style: {\n labels: baseLabelStyles,\n data: { fill: colors.b6, stroke: 'none' },\n },\n },\n line: {\n style: {\n labels: baseLabelStyles,\n data: {\n fill: 'none',\n stroke: colors.b6,\n strokeWidth: 2,\n strokeLinejoin: 'round',\n strokeLinecap: 'round',\n },\n },\n },\n voronoi: {\n style: {\n labels: baseLabelStyles,\n },\n },\n chart: {\n padding: {\n top: 20,\n left: 65,\n right: 20,\n bottom: 50,\n },\n },\n};\nexport default theme;\n","import React, { type ReactNode, useRef } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { type CSSProperties } from 'glamor';\n\nimport View from '../common/View';\n\ntype ContainerProps = {\n style?: CSSProperties;\n children: (width: number, height: number, host: HTMLDivElement) => ReactNode;\n};\nexport default function Container({ style, children }: ContainerProps) {\n const portalHost = useRef<HTMLDivElement>(null);\n\n return (\n <View style={[{ height: 300, position: 'relative', flexShrink: 0 }, style]}>\n <div ref={portalHost} />\n <AutoSizer>\n {({ width, height }) => (\n <div style={{ width, height }}>\n {children(width, height, portalHost.current)}\n </div>\n )}\n </AutoSizer>\n </View>\n );\n}\n","import React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { css, before } from 'glamor';\nimport { VictoryTooltip } from 'victory';\n\nimport { colors } from '../../style';\n\nclass Tooltip extends Component {\n static defaultEvents = VictoryTooltip.defaultEvents;\n\n render() {\n let {\n active,\n x,\n y,\n scale,\n datum,\n portalHost,\n offsetX = 0,\n offsetY,\n position,\n light,\n forceActive,\n style,\n } = this.props;\n const xRange = scale.x.range();\n const xPos = x - xRange[0];\n\n if (!position) {\n if (datum.labelPosition) {\n position = datum.labelPosition;\n } else {\n position = xPos < 150 ? 'right' : 'left';\n }\n }\n\n if (!portalHost || (!active && !forceActive)) {\n return null;\n }\n\n y = offsetY ? offsetY(y) : y;\n\n return ReactDOM.createPortal(\n <div\n {...css(\n {\n position: 'absolute',\n top: 0,\n left: offsetX,\n // prettier-ignore\n transform: position === 'right' ?\n `translate(calc(${x}px + 15px), calc(${y}px ${light ? '' : '- 50%'}))` :\n `translate(calc(${x}px - 100% - 15px), calc(${y}px ${light ? '' : '- 50%'}))`,\n zIndex: 1000,\n pointerEvents: 'none',\n borderRadius: 2,\n boxShadow: light ? 'none' : '0 1px 6px rgba(0, 0, 0, .20)',\n // TODO: Transparent background\n backgroundColor: light ? 'transparent' : colors.n1,\n color: light ? 'inherit' : 'white',\n padding: 10,\n },\n !light &&\n before({\n position: 'absolute',\n display: 'inline-block',\n borderTop: '7px solid transparent',\n borderBottom: '7px solid transparent',\n [position === 'right' ? 'borderRight' : 'borderLeft']:\n '7px solid ' + colors.n1,\n [position === 'right' ? 'left' : 'right']: -6,\n top: 'calc(50% - 7px)',\n // eslint-disable-next-line rulesdir/typography\n content: '\" \"',\n }),\n style,\n )}\n >\n {datum.premadeLabel}\n </div>,\n portalHost,\n );\n }\n}\n\nexport default Tooltip;\n","import React from 'react';\n\nimport * as d from 'date-fns';\nimport {\n VictoryChart,\n VictoryBar,\n VictoryLine,\n VictoryAxis,\n VictoryVoronoiContainer,\n VictoryGroup,\n} from 'victory';\n\nimport { colors } from '../../../style';\nimport theme from '../chart-theme';\nimport Container from '../Container';\nimport Tooltip from '../Tooltip';\n\ntype CashFlowGraphProps = {\n graphData: { expenses; income; balances };\n isConcise: boolean;\n};\nfunction CashFlowGraph({ graphData, isConcise }: CashFlowGraphProps) {\n return (\n <Container>\n {(width, height, portalHost) =>\n graphData && (\n <VictoryChart\n scale={{ x: 'time', y: 'linear' }}\n theme={theme}\n domainPadding={10}\n width={width}\n height={height}\n containerComponent={\n <VictoryVoronoiContainer voronoiDimension=\"x\" />\n }\n >\n <VictoryGroup>\n <VictoryBar\n data={graphData.expenses}\n style={{ data: { fill: theme.colors.red } }}\n />\n <VictoryBar data={graphData.income} />\n </VictoryGroup>\n <VictoryLine\n data={graphData.balances}\n labelComponent={<Tooltip portalHost={portalHost} />}\n labels={x => x.premadeLabel}\n style={{\n data: { stroke: colors.n5 },\n }}\n />\n <VictoryAxis\n // eslint-disable-next-line rulesdir/typography\n tickFormat={x => d.format(x, isConcise ? \"MMM ''yy\" : 'MMM d')}\n tickValues={graphData.balances.map(item => item.x)}\n tickCount={Math.min(5, graphData.balances.length)}\n offsetY={50}\n />\n <VictoryAxis dependentAxis crossAxis={false} />\n </VictoryChart>\n )\n }\n </Container>\n );\n}\n\nexport default CashFlowGraph;\n","import * as monthUtils from 'loot-core/src/shared/months';\n\nimport ArrowLeft from '../../icons/v1/ArrowLeft';\nimport { styles } from '../../style';\nimport Button from '../common/Button';\nimport ButtonLink from '../common/ButtonLink';\nimport Select from '../common/Select';\nimport View from '../common/View';\nimport { FilterButton, AppliedFilters } from '../filters/FiltersMenu';\n\nfunction validateStart(allMonths, start, end) {\n const earliest = allMonths[allMonths.length - 1].name;\n if (end < start) {\n end = monthUtils.addMonths(start, 6);\n }\n return boundedRange(earliest, start, end);\n}\n\nfunction validateEnd(allMonths, start, end) {\n const earliest = allMonths[allMonths.length - 1].name;\n if (start > end) {\n start = monthUtils.subMonths(end, 6);\n }\n return boundedRange(earliest, start, end);\n}\n\nfunction boundedRange(earliest, start, end) {\n const latest = monthUtils.currentMonth();\n if (end > latest) {\n end = latest;\n }\n if (start < earliest) {\n start = earliest;\n }\n return [start, end];\n}\n\nfunction getLatestRange(offset) {\n const end = monthUtils.currentMonth();\n const start = monthUtils.subMonths(end, offset);\n return [start, end];\n}\n\nfunction getFullRange(allMonths) {\n const start = allMonths[allMonths.length - 1].name;\n const end = monthUtils.currentMonth();\n return [start, end];\n}\n\nfunction Header({\n title,\n start,\n end,\n show1Month,\n allMonths,\n onChangeDates,\n filters,\n conditionsOp,\n onApply,\n onUpdateFilter,\n onDeleteFilter,\n onCondOpChange,\n}) {\n return (\n <View\n style={{\n padding: 10,\n paddingTop: 0,\n flexShrink: 0,\n }}\n >\n <ButtonLink\n type=\"bare\"\n to=\"/reports\"\n style={{ marginBottom: '15', alignSelf: 'flex-start' }}\n >\n <ArrowLeft width={10} height={10} style={{ marginRight: 5 }} /> Back\n </ButtonLink>\n <View style={styles.veryLargeText}>{title}</View>\n\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n marginTop: 15,\n gap: 15,\n }}\n >\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 5,\n }}\n >\n <Select\n style={{ backgroundColor: 'white' }}\n onChange={newValue =>\n onChangeDates(...validateStart(allMonths, newValue, end))\n }\n value={start}\n defaultLabel={monthUtils.format(start, 'MMMM, yyyy')}\n options={allMonths.map(({ name, pretty }) => [name, pretty])}\n />\n <View>to</View>\n <Select\n style={{ backgroundColor: 'white' }}\n onChange={newValue =>\n onChangeDates(...validateEnd(allMonths, start, newValue))\n }\n value={end}\n options={allMonths.map(({ name, pretty }) => [name, pretty])}\n />\n </View>\n\n <FilterButton onApply={onApply} />\n\n {show1Month && (\n <Button\n type=\"bare\"\n onClick={() => onChangeDates(...getLatestRange(1))}\n >\n 1 month\n </Button>\n )}\n <Button type=\"bare\" onClick={() => onChangeDates(...getLatestRange(2))}>\n 3 months\n </Button>\n <Button type=\"bare\" onClick={() => onChangeDates(...getLatestRange(5))}>\n 6 months\n </Button>\n <Button\n type=\"bare\"\n onClick={() => onChangeDates(...getLatestRange(11))}\n >\n 1 Year\n </Button>\n <Button\n type=\"bare\"\n onClick={() => onChangeDates(...getFullRange(allMonths))}\n >\n All Time\n </Button>\n </View>\n {filters.length > 0 && (\n <View\n style={{ marginTop: 5 }}\n spacing={2}\n direction=\"row\"\n justify=\"flex-start\"\n align=\"flex-start\"\n >\n <AppliedFilters\n filters={filters}\n onUpdate={onUpdateFilter}\n onDelete={onDeleteFilter}\n conditionsOp={conditionsOp}\n onCondOpChange={onCondOpChange}\n />\n </View>\n )}\n </View>\n );\n}\n\nexport default Header;\n","import { useState, useEffect } from 'react';\n\nimport { useSpreadsheet } from 'loot-core/src/client/SpreadsheetProvider';\n\nfunction useReport(sheetName, getData) {\n const spreadsheet = useSpreadsheet();\n const [results, setResults] = useState(null);\n\n useEffect(() => {\n let cleanup;\n getData(spreadsheet, results => setResults(results)).then(c => {\n cleanup = c;\n });\n return () => {\n cleanup?.();\n };\n }, [getData]);\n\n return results;\n}\n\nexport default useReport;\n","import React, { useState, useEffect, useMemo } from 'react';\n\nimport * as d from 'date-fns';\n\nimport { send } from 'loot-core/src/platform/client/fetch';\nimport * as monthUtils from 'loot-core/src/shared/months';\nimport { integerToCurrency } from 'loot-core/src/shared/util';\n\nimport useFilters from '../../hooks/useFilters';\nimport { colors, styles } from '../../style';\nimport AlignedText from '../common/AlignedText';\nimport Block from '../common/Block';\nimport Paragraph from '../common/Paragraph';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport PrivacyFilter from '../PrivacyFilter';\n\nimport Change from './Change';\nimport { cashFlowByDate } from './graphs/cash-flow-spreadsheet';\nimport CashFlowGraph from './graphs/CashFlowGraph';\nimport Header from './Header';\nimport useReport from './useReport';\n\nfunction CashFlow() {\n const {\n filters,\n conditionsOp,\n onApply: onApplyFilter,\n onDelete: onDeleteFilter,\n onUpdate: onUpdateFilter,\n onCondOpChange,\n } = useFilters();\n\n const [allMonths, setAllMonths] = useState(null);\n const [start, setStart] = useState(\n monthUtils.subMonths(monthUtils.currentMonth(), 30),\n );\n const [end, setEnd] = useState(monthUtils.currentDay());\n\n const [isConcise, setIsConcise] = useState(() => {\n const numDays = d.differenceInCalendarDays(\n d.parseISO(end),\n d.parseISO(start),\n );\n return numDays > 31 * 3;\n });\n\n const params = useMemo(\n () => cashFlowByDate(start, end, isConcise, filters, conditionsOp),\n [start, end, isConcise, filters, conditionsOp],\n );\n const data = useReport('cash_flow', params);\n\n useEffect(() => {\n async function run() {\n const trans = await send('get-earliest-transaction');\n const earliestMonth = trans\n ? monthUtils.monthFromDate(d.parseISO(trans.date))\n : monthUtils.currentMonth();\n\n const allMonths = monthUtils\n .rangeInclusive(earliestMonth, monthUtils.currentMonth())\n .map(month => ({\n name: month,\n pretty: monthUtils.format(month, 'MMMM, yyyy'),\n }))\n .reverse();\n\n setAllMonths(allMonths);\n }\n run();\n }, []);\n\n function onChangeDates(start, end) {\n const numDays = d.differenceInCalendarDays(\n d.parseISO(end),\n d.parseISO(start),\n );\n const isConcise = numDays > 31 * 3;\n\n let endDay = end + '-31';\n if (endDay > monthUtils.currentDay()) {\n endDay = monthUtils.currentDay();\n }\n\n setStart(start + '-01');\n setEnd(endDay);\n setIsConcise(isConcise);\n }\n\n if (!allMonths || !data) {\n return null;\n }\n\n const { graphData, totalExpenses, totalIncome, totalTransfers } = data;\n\n return (\n <View style={[styles.page, { minWidth: 650, overflow: 'hidden' }]}>\n <Header\n title=\"Cash Flow\"\n allMonths={allMonths}\n start={monthUtils.getMonth(start)}\n end={monthUtils.getMonth(end)}\n show1Month\n onChangeDates={onChangeDates}\n onApply={onApplyFilter}\n filters={filters}\n onUpdateFilter={onUpdateFilter}\n onDeleteFilter={onDeleteFilter}\n conditionsOp={conditionsOp}\n onCondOpChange={onCondOpChange}\n />\n\n <View\n style={{\n backgroundColor: 'white',\n padding: 30,\n paddingTop: 0,\n overflow: 'auto',\n }}\n >\n <View\n style={{\n paddingTop: 20,\n paddingRight: 20,\n flexShrink: 0,\n alignItems: 'flex-end',\n color: colors.n3,\n }}\n >\n <AlignedText\n style={{ marginBottom: 5, minWidth: 160 }}\n left={<Block>Income:</Block>}\n right={\n <Text style={{ fontWeight: 600 }}>\n <PrivacyFilter>{integerToCurrency(totalIncome)}</PrivacyFilter>\n </Text>\n }\n />\n\n <AlignedText\n style={{ marginBottom: 5, minWidth: 160 }}\n left={<Block>Expenses:</Block>}\n right={\n <Text style={{ fontWeight: 600 }}>\n <PrivacyFilter>\n {integerToCurrency(totalExpenses)}\n </PrivacyFilter>\n </Text>\n }\n />\n\n <AlignedText\n style={{ marginBottom: 5, minWidth: 160 }}\n left={<Block>Transfers:</Block>}\n right={\n <Text style={{ fontWeight: 600 }}>\n <PrivacyFilter>\n {integerToCurrency(totalTransfers)}\n </PrivacyFilter>\n </Text>\n }\n />\n <Text style={{ fontWeight: 600 }}>\n <PrivacyFilter>\n <Change amount={totalIncome + totalExpenses + totalTransfers} />\n </PrivacyFilter>\n </Text>\n </View>\n\n <CashFlowGraph\n start={start}\n end={end}\n graphData={graphData}\n isConcise={isConcise}\n />\n\n <View style={{ marginTop: 30 }}>\n <Paragraph>\n <strong>How is cash flow calculated?</strong>\n </Paragraph>\n <Paragraph>\n Cash flow shows the balance of your budgeted accounts over time, and\n the amount of expenses/income each day or month. Your budgeted\n accounts are considered to be “cash on hand,” so this gives you a\n picture of how available money fluctuates.\n </Paragraph>\n </View>\n </View>\n </View>\n );\n}\n\nexport default CashFlow;\n","import React from 'react';\n\nimport * as d from 'date-fns';\n\nimport q, { runQuery } from 'loot-core/src/client/query-helpers';\nimport { send } from 'loot-core/src/platform/client/fetch';\nimport * as monthUtils from 'loot-core/src/shared/months';\nimport {\n integerToCurrency,\n integerToAmount,\n amountToInteger,\n} from 'loot-core/src/shared/util';\n\nimport AlignedText from '../../common/AlignedText';\nimport { index } from '../util';\n\nexport default function createSpreadsheet(\n start,\n end,\n accounts,\n conditions = [],\n conditionsOp,\n) {\n return async (spreadsheet, setData) => {\n if (accounts.length === 0) {\n return null;\n }\n\n let { filters } = await send('make-filters-from-conditions', {\n conditions: conditions.filter(cond => !cond.customName),\n });\n const conditionsOpKey = conditionsOp === 'or' ? '$or' : '$and';\n\n const data = await Promise.all(\n accounts.map(async acct => {\n let [starting, balances] = await Promise.all([\n runQuery(\n q('transactions')\n .filter({\n [conditionsOpKey]: filters,\n account: acct.id,\n date: { $lt: start + '-01' },\n })\n .calculate({ $sum: '$amount' }),\n ).then(({ data }) => data),\n\n runQuery(\n q('transactions')\n .filter({\n [conditionsOpKey]: [...filters],\n })\n .filter({\n account: acct.id,\n $and: [\n { date: { $gte: start + '-01' } },\n { date: { $lte: end + '-31' } },\n ],\n })\n .groupBy({ $month: '$date' })\n .select([\n { date: { $month: '$date' } },\n { amount: { $sum: '$amount' } },\n ]),\n ).then(({ data }) => data),\n ]);\n\n return {\n id: acct.id,\n balances: index(balances, 'date'),\n starting,\n };\n }),\n );\n\n setData(recalculate(data, start, end));\n };\n}\n\nfunction recalculate(data, start, end) {\n const months = monthUtils.rangeInclusive(start, end);\n\n const accountBalances = data.map(account => {\n // Start off with the balance at that point in time\n let balance = account.starting;\n return months.map(month => {\n if (account.balances[month]) {\n balance += account.balances[month].amount;\n }\n return balance;\n });\n });\n\n let hasNegative = false;\n let startNetWorth = 0;\n let endNetWorth = 0;\n\n const graphData = months.reduce((arr, month, idx) => {\n let debt = 0;\n let assets = 0;\n let total = 0;\n const last = arr.length === 0 ? null : arr[arr.length - 1];\n\n accountBalances.forEach(balances => {\n const balance = balances[idx];\n if (balance < 0) {\n debt += -balance;\n } else {\n assets += balance;\n }\n total += balance;\n });\n\n if (total < 0) {\n hasNegative = true;\n }\n\n const x = d.parseISO(month + '-01');\n const change = last ? total - amountToInteger(last.y) : 0;\n\n const label = (\n <div>\n <div style={{ marginBottom: 10 }}>\n <strong>{d.format(x, 'MMMM yyyy')}</strong>\n </div>\n <div style={{ lineHeight: 1.5 }}>\n <AlignedText left=\"Assets:\" right={integerToCurrency(assets)} />\n <AlignedText left=\"Debt:\" right={`-${integerToCurrency(debt)}`} />\n <AlignedText\n left=\"Net worth:\"\n right={<strong>{integerToCurrency(total)}</strong>}\n />\n <AlignedText left=\"Change:\" right={integerToCurrency(change)} />\n </div>\n </div>\n );\n\n if (arr.length === 0) {\n startNetWorth = total;\n }\n endNetWorth = total;\n\n arr.push({ x, y: integerToAmount(total), premadeLabel: label });\n return arr;\n }, []);\n\n return {\n graphData: {\n data: graphData,\n hasNegative,\n start,\n end,\n },\n netWorth: endNetWorth,\n totalChange: endNetWorth - startNetWorth,\n };\n}\n","import React, { createElement } from 'react';\n\nimport * as d from 'date-fns';\nimport { type CSSProperties } from 'glamor';\nimport {\n VictoryChart,\n VictoryBar,\n VictoryArea,\n VictoryAxis,\n VictoryVoronoiContainer,\n VictoryGroup,\n} from 'victory';\n\nimport theme from '../chart-theme';\nimport Container from '../Container';\nimport Tooltip from '../Tooltip';\n\ntype AreaProps = {\n start: string;\n end: string;\n scale?;\n range?;\n};\nfunction Area({ start, end, scale, range }: AreaProps) {\n const zero = scale.y(0);\n\n const startX = scale.x(d.parseISO(start + '-01'));\n const endX = scale.x(d.parseISO(end + '-01'));\n\n if (startX < 0 || endX < 0) {\n return null;\n }\n\n return (\n <svg>\n <defs>\n <clipPath id=\"positive\">\n <rect\n x={startX}\n y={range.y[1]}\n width={endX - startX}\n height={zero - range.y[1] + 1}\n fill=\"#ffffff\"\n />\n </clipPath>\n <clipPath id=\"negative\">\n <rect\n x={startX}\n y={zero + 1}\n width={endX - startX}\n height={Math.max(range.y[0] - zero - 1, 0)}\n fill=\"#ffffff\"\n />\n </clipPath>\n <linearGradient\n id=\"positive-gradient\"\n gradientUnits=\"userSpaceOnUse\"\n x1={0}\n y1={range.y[1]}\n x2={0}\n y2={zero}\n >\n <stop offset=\"0%\" stopColor={theme.colors.blueFadeStart} />\n <stop offset=\"100%\" stopColor={theme.colors.blueFadeEnd} />\n </linearGradient>\n <linearGradient\n id=\"negative-gradient\"\n gradientUnits=\"userSpaceOnUse\"\n x1={0}\n y1={zero}\n x2={0}\n y2={range.y[0]}\n >\n <stop offset=\"0%\" stopColor={theme.colors.redFadeEnd} />\n <stop offset=\"100%\" stopColor={theme.colors.redFadeStart} />\n </linearGradient>\n </defs>\n </svg>\n );\n}\n\ntype NetWorthGraphProps = {\n style?: CSSProperties;\n graphData;\n compact: boolean;\n};\nfunction NetWorthGraph({ style, graphData, compact }: NetWorthGraphProps) {\n const Chart = compact ? VictoryGroup : VictoryChart;\n\n return (\n <Container style={[style, compact && { height: 'auto' }]}>\n {(width, height, portalHost) =>\n graphData && (\n <Chart\n scale={{ x: 'time', y: 'linear' }}\n theme={theme}\n domainPadding={{ x: 0, y: 10 }}\n width={width}\n height={height}\n containerComponent={\n <VictoryVoronoiContainer voronoiDimension=\"x\" />\n }\n padding={\n compact && {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }\n }\n >\n <Area start={graphData.start} end={graphData.end} />\n {createElement(\n // @ts-expect-error defaultProps mismatch causing issue\n graphData.data.length === 1 ? VictoryBar : VictoryArea,\n {\n data: graphData.data,\n labelComponent: <Tooltip portalHost={portalHost} />,\n labels: x => x.premadeLabel,\n style: {\n data:\n graphData.data.length === 1\n ? { width: 50 }\n : {\n clipPath: 'url(#positive)',\n fill: 'url(#positive-gradient)',\n },\n },\n },\n )}\n {graphData.data.length > 1 && (\n <VictoryArea\n data={graphData.data}\n style={{\n data: {\n clipPath: 'url(#negative)',\n fill: 'url(#negative-gradient)',\n stroke: theme.colors.red,\n strokeLinejoin: 'round',\n },\n }}\n />\n )}\n {/* Somehow the path `d` attributes are stripped from second\n `<VictoryArea />` above if this is removed. I’m just as\n confused as you are! */}\n <VictoryArea\n data={graphData.data}\n style={{ data: { fill: 'none', stroke: 'none' } }}\n />\n {!compact && (\n <VictoryAxis\n style={{ ticks: { stroke: 'red' } }}\n // eslint-disable-next-line rulesdir/typography\n tickFormat={x => d.format(x, \"MMM ''yy\")}\n tickValues={graphData.data.map(item => item.x)}\n tickCount={Math.min(5, graphData.data.length)}\n offsetY={50}\n />\n )}\n {!compact && (\n <VictoryAxis dependentAxis crossAxis={!graphData.hasNegative} />\n )}\n </Chart>\n )\n }\n </Container>\n );\n}\n\nexport default NetWorthGraph;\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport * as d from 'date-fns';\n\nimport { send } from 'loot-core/src/platform/client/fetch';\nimport * as monthUtils from 'loot-core/src/shared/months';\nimport { integerToCurrency } from 'loot-core/src/shared/util';\n\nimport useFilters from '../../hooks/useFilters';\nimport { styles } from '../../style';\nimport Paragraph from '../common/Paragraph';\nimport View from '../common/View';\nimport PrivacyFilter from '../PrivacyFilter';\n\nimport Change from './Change';\nimport netWorthSpreadsheet from './graphs/net-worth-spreadsheet';\nimport NetWorthGraph from './graphs/NetWorthGraph';\nimport Header from './Header';\nimport useReport from './useReport';\nimport { fromDateRepr } from './util';\n\nexport default function NetWorth() {\n let accounts = useSelector(state => state.queries.accounts);\n const {\n filters,\n saved,\n conditionsOp,\n onApply: onApplyFilter,\n onDelete: onDeleteFilter,\n onUpdate: onUpdateFilter,\n onCondOpChange,\n } = useFilters();\n\n const [allMonths, setAllMonths] = useState(null);\n const [start, setStart] = useState(\n monthUtils.subMonths(monthUtils.currentMonth(), 5),\n );\n const [end, setEnd] = useState(monthUtils.currentMonth());\n\n const params = useMemo(\n () => netWorthSpreadsheet(start, end, accounts, filters, conditionsOp),\n [start, end, accounts, filters, conditionsOp],\n );\n const data = useReport('net_worth', params);\n\n useEffect(() => {\n async function run() {\n const trans = await send('get-earliest-transaction');\n const currentMonth = monthUtils.currentMonth();\n let earliestMonth = trans\n ? monthUtils.monthFromDate(d.parseISO(fromDateRepr(trans.date)))\n : currentMonth;\n\n // Make sure the month selects are at least populates with a\n // year's worth of months. We can undo this when we have fancier\n // date selects.\n const yearAgo = monthUtils.subMonths(monthUtils.currentMonth(), 12);\n if (earliestMonth > yearAgo) {\n earliestMonth = yearAgo;\n }\n\n const allMonths = monthUtils\n .rangeInclusive(earliestMonth, monthUtils.currentMonth())\n .map(month => ({\n name: month,\n pretty: monthUtils.format(month, 'MMMM, yyyy'),\n }))\n .reverse();\n\n setAllMonths(allMonths);\n }\n run();\n }, []);\n\n function onChangeDates(start, end) {\n setStart(start);\n setEnd(end);\n }\n\n if (!allMonths || !data) {\n return null;\n }\n\n return (\n <View style={[styles.page, { minWidth: 650, overflow: 'hidden' }]}>\n <Header\n title=\"Net Worth\"\n allMonths={allMonths}\n start={start}\n end={end}\n onChangeDates={onChangeDates}\n filters={filters}\n saved={saved}\n onApply={onApplyFilter}\n onUpdateFilter={onUpdateFilter}\n onDeleteFilter={onDeleteFilter}\n conditionsOp={conditionsOp}\n onCondOpChange={onCondOpChange}\n />\n\n <View\n style={{\n backgroundColor: 'white',\n padding: 30,\n paddingTop: 0,\n overflow: 'auto',\n }}\n >\n <View\n style={{\n textAlign: 'right',\n paddingTop: 20,\n paddingRight: 20,\n flexShrink: 0,\n }}\n >\n <View\n style={[styles.largeText, { fontWeight: 400, marginBottom: 5 }]}\n >\n <PrivacyFilter blurIntensity={5}>\n {integerToCurrency(data.netWorth)}\n </PrivacyFilter>\n </View>\n <PrivacyFilter>\n <Change amount={data.totalChange} />\n </PrivacyFilter>\n </View>\n\n <NetWorthGraph start={start} end={end} graphData={data.graphData} />\n\n <View style={{ marginTop: 30 }}>\n <Paragraph>\n <strong>How is net worth calculated?</strong>\n </Paragraph>\n <Paragraph>\n Net worth shows the balance of all accounts over time, including all\n of your investments. Your “net worth” is considered to be the amount\n you’d have if you sold all your assets and paid off as much debt as\n possible. If you hover over the graph, you can also see the amount\n of assets and debt individually.\n </Paragraph>\n </View>\n </View>\n </View>\n );\n}\n","import React from 'react';\n\nimport * as d from 'date-fns';\n\nimport { colors } from '../../style';\nimport Block from '../common/Block';\n\nfunction DateRange({ start, end }) {\n start = d.parseISO(start);\n end = d.parseISO(end);\n\n let content;\n if (start.getYear() !== end.getYear()) {\n content = (\n <div>\n {d.format(start, 'MMM yyyy')} - {d.format(end, 'MMM yyyy')}\n </div>\n );\n } else if (start.getMonth() !== end.getMonth()) {\n content = (\n <div>\n {d.format(start, 'MMM')} - {d.format(end, 'MMM yyyy')}\n </div>\n );\n } else {\n content = d.format(end, 'MMMM yyyy');\n }\n\n return <Block style={{ color: colors.n6 }}>{content}</Block>;\n}\n\nexport default DateRange;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { VictoryBar, VictoryGroup, VictoryVoronoiContainer } from 'victory';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\nimport { integerToCurrency } from 'loot-core/src/shared/util';\n\nimport { colors, styles } from '../../style';\nimport AnchorLink from '../common/AnchorLink';\nimport Block from '../common/Block';\nimport View from '../common/View';\nimport PrivacyFilter from '../PrivacyFilter';\n\nimport Change from './Change';\nimport theme from './chart-theme';\nimport Container from './Container';\nimport DateRange from './DateRange';\nimport { simpleCashFlow } from './graphs/cash-flow-spreadsheet';\nimport netWorthSpreadsheet from './graphs/net-worth-spreadsheet';\nimport NetWorthGraph from './graphs/NetWorthGraph';\nimport Tooltip from './Tooltip';\nimport useReport from './useReport';\n\nfunction Card({ flex, to, style, children }) {\n const containerProps = { flex, margin: 15 };\n\n const content = (\n <View\n style={[\n {\n backgroundColor: 'white',\n borderRadius: 2,\n height: 200,\n boxShadow: '0 2px 6px rgba(0, 0, 0, .15)',\n transition: 'box-shadow .25s',\n ':hover': to && {\n boxShadow: '0 4px 6px rgba(0, 0, 0, .15)',\n },\n },\n to ? null : containerProps,\n style,\n ]}\n >\n {children}\n </View>\n );\n\n if (to) {\n return (\n <AnchorLink\n to={to}\n style={[{ textDecoration: 'none', flex }, containerProps]}\n >\n {content}\n </AnchorLink>\n );\n }\n return content;\n}\n\nfunction NetWorthCard({ accounts }) {\n const end = monthUtils.currentMonth();\n const start = monthUtils.subMonths(end, 5);\n const [isCardHovered, setIsCardHovered] = useState(false);\n const onCardHover = useCallback(() => setIsCardHovered(true));\n const onCardHoverEnd = useCallback(() => setIsCardHovered(false));\n\n const params = useMemo(\n () => netWorthSpreadsheet(start, end, accounts),\n [start, end, accounts],\n );\n const data = useReport('net_worth', params);\n\n if (!data) {\n return null;\n }\n\n return (\n <Card flex={2} to=\"/reports/net-worth\">\n <View\n style={{ flex: 1 }}\n onPointerEnter={onCardHover}\n onPointerLeave={onCardHoverEnd}\n >\n <View style={{ flexDirection: 'row', padding: 20 }}>\n <View style={{ flex: 1 }}>\n <Block\n style={[styles.mediumText, { fontWeight: 500, marginBottom: 5 }]}\n role=\"heading\"\n >\n Net Worth\n </Block>\n <DateRange start={start} end={end} />\n </View>\n <View style={{ textAlign: 'right' }}>\n <Block\n style={[styles.mediumText, { fontWeight: 500, marginBottom: 5 }]}\n >\n <PrivacyFilter activationFilters={[!isCardHovered]}>\n {integerToCurrency(data.netWorth)}\n </PrivacyFilter>\n </Block>\n <PrivacyFilter activationFilters={[!isCardHovered]}>\n <Change\n amount={data.totalChange}\n style={{ color: colors.n6, fontWeight: 300 }}\n />\n </PrivacyFilter>\n </View>\n </View>\n\n <NetWorthGraph\n start={start}\n end={end}\n graphData={data.graphData}\n compact={true}\n style={{ height: 'auto', flex: 1 }}\n />\n </View>\n </Card>\n );\n}\n\nfunction CashFlowCard() {\n const end = monthUtils.currentDay();\n const start = monthUtils.currentMonth() + '-01';\n\n const params = useMemo(() => simpleCashFlow(start, end), [start, end]);\n const data = useReport('cash_flow_simple', params);\n const [isCardHovered, setIsCardHovered] = useState(false);\n const onCardHover = useCallback(() => setIsCardHovered(true));\n const onCardHoverEnd = useCallback(() => setIsCardHovered(false));\n\n if (!data) {\n return null;\n }\n\n const { graphData } = data;\n const expense = -(graphData.expense || 0);\n const income = graphData.income || 0;\n\n return (\n <Card flex={1} to=\"/reports/cash-flow\">\n <View\n style={{ flex: 1 }}\n onPointerEnter={onCardHover}\n onPointerLeave={onCardHoverEnd}\n >\n <View style={{ flexDirection: 'row', padding: 20 }}>\n <View style={{ flex: 1 }}>\n <Block\n style={[styles.mediumText, { fontWeight: 500, marginBottom: 5 }]}\n role=\"heading\"\n >\n Cash Flow\n </Block>\n <DateRange start={start} end={end} />\n </View>\n <View style={{ textAlign: 'right' }}>\n <PrivacyFilter activationFilters={[!isCardHovered]}>\n <Change\n amount={income - expense}\n style={{ color: colors.n6, fontWeight: 300 }}\n />\n </PrivacyFilter>\n </View>\n </View>\n\n <Container style={{ height: 'auto', flex: 1 }}>\n {(width, height, portalHost) => (\n <VictoryGroup\n colorScale={[theme.colors.blue, theme.colors.red]}\n width={100}\n height={height}\n theme={theme}\n domain={{\n x: [0, 100],\n y: [0, Math.max(income, expense, 100)],\n }}\n containerComponent={\n <VictoryVoronoiContainer voronoiDimension=\"x\" />\n }\n labelComponent={\n <Tooltip\n portalHost={portalHost}\n offsetX={(width - 100) / 2}\n offsetY={y => (y + 40 > height ? height - 40 : y)}\n light={true}\n forceActive={true}\n style={{\n padding: 0,\n }}\n />\n }\n padding={{\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }}\n >\n <VictoryBar\n barWidth={13}\n data={[\n {\n x: 30,\n y: Math.max(income, 5),\n premadeLabel: (\n <View style={{ textAlign: 'right' }}>\n Income\n <View>\n <PrivacyFilter activationFilters={[!isCardHovered]}>\n {integerToCurrency(income)}\n </PrivacyFilter>\n </View>\n </View>\n ),\n labelPosition: 'left',\n },\n ]}\n labels={d => d.premadeLabel}\n />\n <VictoryBar\n barWidth={13}\n data={[\n {\n x: 60,\n y: Math.max(expense, 5),\n premadeLabel: (\n <View>\n Expenses\n <View>\n <PrivacyFilter activationFilters={[!isCardHovered]}>\n {integerToCurrency(expense)}\n </PrivacyFilter>\n </View>\n </View>\n ),\n labelPosition: 'right',\n fill: theme.colors.red,\n },\n ]}\n labels={d => d.premadeLabel}\n />\n </VictoryGroup>\n )}\n </Container>\n </View>\n </Card>\n );\n}\n\nexport default function Overview() {\n let accounts = useSelector(state => state.queries.accounts);\n return (\n <View\n style={[\n styles.page,\n { paddingLeft: 40, paddingRight: 40, minWidth: 700 },\n ]}\n >\n <View\n style={{\n flexDirection: 'row',\n flex: '0 0 auto',\n }}\n >\n <NetWorthCard accounts={accounts} />\n <CashFlowCard />\n </View>\n\n <View\n style={{\n flex: '0 0 auto',\n flexDirection: 'row',\n }}\n >\n <Card\n style={[\n {\n color: '#a0a0a0',\n justifyContent: 'center',\n alignItems: 'center',\n width: 200,\n },\n styles.mediumText,\n ]}\n >\n More reports\n <br /> coming soon!\n </Card>\n </View>\n </View>\n );\n}\n","import React from 'react';\nimport { Route, Routes } from 'react-router-dom';\n\nimport CashFlow from './CashFlow';\nimport NetWorth from './NetWorth';\nimport Overview from './Overview';\n\nexport function ReportRouter() {\n return (\n <Routes>\n <Route path=\"/\" element={<Overview />} />\n <Route path=\"/net-worth\" element={<NetWorth />} />\n <Route path=\"/cash-flow\" element={<CashFlow />} />\n </Routes>\n );\n}\n"],"names":["MenuTooltip","_ref","width","onClose","children","_jsx","Tooltip","position","style","padding","props","xmlns","viewBox","color","fill","d","filterFields","map","field","mapField","subfieldFromFilter","options","value","length","inflow","outflow","subfieldToOptions","subfield","month","year","OpButton","_ref2","op","selected","onClick","Button","type","backgroundColor","colors","marginBottom","friendlyOp","updateFilterReducer","state","action","FIELD_TYPES","makeValue","Error","ConfigureField","_ref3","initialSubfield","dispatch","onApply","setSubfield","useState","inputRef","useRef","prevOp","useEffect","current","focus","ops","TYPE_INFO","filter","_jsxs","FocusScope","View","Select","onChange","sub","borderWidth","titleFirst","Stack","direction","align","spacing","flexWrap","slice","currOp","GenericInput","multi","marginTop","v","justify","flex","e","preventDefault","FilterButton","_ref4","filters","useFilters","dateFormat","useSelector","prefs","local","useReducer","fieldsOpen","condOpen","deserializeField","SettingsSliderAlternate","height","marginRight","Menu","onMenuSelect","name","items","_ref5","text","async","cond","unparse","date","parseDate","getMonthYearFormat","Date","isDateValid","alert","formatDate","error","send","conditions","actions","saved","find","f","id","conditionErrors","getFieldError","FilterEditor","_ref6","onSave","FilterExpression","_ref7","originalField","customName","stage","onDelete","editing","setEditing","borderRadius","flexDirection","alignItems","disabled","paddingBlock","paddingLeft","paddingRight","Text","_Fragment","Value","inline","valueIsRaw","DeleteIcon","margin","marginLeft","AppliedFilters","_ref8","editingFilter","onUpdate","conditionsOp","onCondOpChange","CondOpMenu","i","newFilter","SavedFilterMenuButton","res","savedFilter","filterId","onClearFilters","onReloadSavedFilter","filtersList","nameOpen","setNameOpen","adding","setAdding","menuOpen","setMenuOpen","err","setErr","menuItem","setMenuItem","NameFilter","onFilterMenuSelect","item","status","sendCatch","message","FilterMenu","FormField","FormLabel","title","htmlFor","userSelect","data","onAddUpdate","maxWidth","whiteSpace","overflow","textOverflow","flexShrink","ExpandArrow","FieldSelect","display","fields","FiltersStack","onUpdateFilter","onDeleteFilter","initialFilters","arguments","undefined","setFilters","setConditionsOp","setSaved","useCallback","oldFilter","updatedFilter","deletedFilter","condOp","useMemo","amount","Block","styles","integerToCurrency","runAll","queries","cb","Promise","all","q","runQuery","then","index","mapper","result","forEach","indexCashFlow","isTransfer","results","findExisting","xfer","cashFlowByDate","start","end","isConcise","spreadsheet","setData","conditionsOpKey","makeQuery","where","query","$and","$transform","$gte","$lte","groupBy","$month","select","$sum","$lt","calculate","$gt","startingBalance","income","expense","convIncome","t","convExpense","dates","monthUtils","incomes","expenses","balance","totalExpenses","totalIncome","totalTransfers","graphData","reduce","creditTransfers","debitTransfers","false","true","x","label","lineHeight","AlignedText","left","right","push","y","integerToAmount","balances","premadeLabel","totalChange","recalculate","baseLabelStyles","fontFamily","fontSize","letterSpacing","stroke","axisBaseStyles","axis","grid","pointerEvents","ticks","size","axisLabel","tickLabels","blueFadeStart","blueFadeEnd","redFadeStart","redFadeEnd","red","blue","area","labels","strokeWidth","strokeLinejoin","strokeLinecap","dependentAxis","strokeDasharray","independentAxis","bar","line","voronoi","chart","top","bottom","Container","portalHost","ref","AutoSizer","Component","render","active","scale","datum","offsetX","offsetY","light","forceActive","this","xPos","range","labelPosition","ReactDOM","css","transform","zIndex","boxShadow","before","borderTop","borderBottom","content","defaultEvents","VictoryTooltip","VictoryChart","theme","domainPadding","containerComponent","VictoryVoronoiContainer","voronoiDimension","VictoryGroup","VictoryBar","VictoryLine","labelComponent","VictoryAxis","tickFormat","tickValues","tickCount","Math","min","crossAxis","boundedRange","earliest","latest","getLatestRange","offset","show1Month","allMonths","onChangeDates","paddingTop","ButtonLink","to","alignSelf","ArrowLeft","gap","newValue","validateStart","defaultLabel","pretty","validateEnd","getFullRange","sheetName","getData","useSpreadsheet","setResults","cleanup","c","_cleanup","onApplyFilter","setAllMonths","setStart","setEnd","setIsConcise","params","useReport","trans","earliestMonth","reverse","run","minWidth","Header","endDay","fontWeight","PrivacyFilter","Change","CashFlowGraph","Paragraph","createSpreadsheet","accounts","months","accountBalances","account","starting","hasNegative","startNetWorth","endNetWorth","arr","idx","debt","assets","total","last","change","amountToInteger","netWorth","acct","Area","zero","startX","endX","max","gradientUnits","x1","y1","x2","y2","stopColor","compact","Chart","createElement","VictoryArea","clipPath","NetWorth","netWorthSpreadsheet","currentMonth","yearAgo","textAlign","blurIntensity","NetWorthGraph","getYear","getMonth","Card","containerProps","transition","AnchorLink","textDecoration","NetWorthCard","isCardHovered","setIsCardHovered","onCardHover","onCardHoverEnd","onPointerEnter","onPointerLeave","role","DateRange","activationFilters","CashFlowCard","$or","simpleCashFlow","colorScale","domain","barWidth","Overview","justifyContent","ReportRouter","Routes","Route","path","element","CashFlow"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_actual_app_web=self.webpackChunk_actual_app_web||[]).push([[737],{79145:function(e,t,n){n.r(t),n.d(t,{ResizeObserver:function(){return V},ResizeObserverEntry:function(){return z},ResizeObserverSize:function(){return c}});var r,i=[],o="ResizeObserver loop completed with undelivered notifications.";!function(e){e.BORDER_BOX="border-box",e.CONTENT_BOX="content-box",e.DEVICE_PIXEL_CONTENT_BOX="device-pixel-content-box"}(r||(r={}));var s,a=function(e){return Object.freeze(e)},c=function(e,t){this.inlineSize=e,this.blockSize=t,a(this)},u=function(){function e(e,t,n,r){return this.x=e,this.y=t,this.width=n,this.height=r,this.top=this.y,this.left=this.x,this.bottom=this.top+this.height,this.right=this.left+this.width,a(this)}return e.prototype.toJSON=function(){var e=this;return{x:e.x,y:e.y,top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.width,height:e.height}},e.fromRect=function(t){return new e(t.x,t.y,t.width,t.height)},e}(),h=function(e){return e instanceof SVGElement&&"getBBox"in e},f=function(e){if(h(e)){var t=e.getBBox(),n=t.width,r=t.height;return!n&&!r}var i=e,o=i.offsetWidth,s=i.offsetHeight;return!(o||s||e.getClientRects().length)},d=function(e){var t;if(e instanceof Element)return!0;var n=null===(t=null===e||void 0===e?void 0:e.ownerDocument)||void 0===t?void 0:t.defaultView;return!!(n&&e instanceof n.Element)},v="undefined"!==typeof window?window:{},p=new WeakMap,l=/auto|scroll/,g=/^tb|vertical/,b=/msie|trident/i.test(v.navigator&&v.navigator.userAgent),w=function(e){return parseFloat(e||"0")},E=function(e,t,n){return void 0===e&&(e=0),void 0===t&&(t=0),void 0===n&&(n=!1),new c((n?t:e)||0,(n?e:t)||0)},x=a({devicePixelContentBoxSize:E(),borderBoxSize:E(),contentBoxSize:E(),contentRect:new u(0,0,0,0)}),T=function(e,t){if(void 0===t&&(t=!1),p.has(e)&&!t)return p.get(e);if(f(e))return p.set(e,x),x;var n=getComputedStyle(e),r=h(e)&&e.ownerSVGElement&&e.getBBox(),i=!b&&"border-box"===n.boxSizing,o=g.test(n.writingMode||""),s=!r&&l.test(n.overflowY||""),c=!r&&l.test(n.overflowX||""),d=r?0:w(n.paddingTop),v=r?0:w(n.paddingRight),T=r?0:w(n.paddingBottom),m=r?0:w(n.paddingLeft),z=r?0:w(n.borderTopWidth),y=r?0:w(n.borderRightWidth),S=r?0:w(n.borderBottomWidth),B=m+v,O=d+T,R=(r?0:w(n.borderLeftWidth))+y,k=z+S,C=c?e.offsetHeight-k-e.clientHeight:0,_=s?e.offsetWidth-R-e.clientWidth:0,N=i?B+R:0,D=i?O+k:0,M=r?r.width:w(n.width)-N-_,P=r?r.height:w(n.height)-D-C,F=M+B+_+R,I=P+O+C+k,L=a({devicePixelContentBoxSize:E(Math.round(M*devicePixelRatio),Math.round(P*devicePixelRatio),o),borderBoxSize:E(F,I,o),contentBoxSize:E(M,P,o),contentRect:new u(m,d,M,P)});return p.set(e,L),L},m=function(e,t,n){var i=T(e,n),o=i.borderBoxSize,s=i.contentBoxSize,a=i.devicePixelContentBoxSize;switch(t){case r.DEVICE_PIXEL_CONTENT_BOX:return a;case r.BORDER_BOX:return o;default:return s}},z=function(e){var t=T(e);this.target=e,this.contentRect=t.contentRect,this.borderBoxSize=a([t.borderBoxSize]),this.contentBoxSize=a([t.contentBoxSize]),this.devicePixelContentBoxSize=a([t.devicePixelContentBoxSize])},y=function(e){if(f(e))return 1/0;for(var t=0,n=e.parentNode;n;)t+=1,n=n.parentNode;return t},S=function(){var e=1/0,t=[];i.forEach((function(n){if(0!==n.activeTargets.length){var r=[];n.activeTargets.forEach((function(t){var n=new z(t.target),i=y(t.target);r.push(n),t.lastReportedSize=m(t.target,t.observedBox),i<e&&(e=i)})),t.push((function(){n.callback.call(n.observer,r,n.observer)})),n.activeTargets.splice(0,n.activeTargets.length)}}));for(var n=0,r=t;n<r.length;n++){(0,r[n])()}return e},B=function(e){i.forEach((function(t){t.activeTargets.splice(0,t.activeTargets.length),t.skippedTargets.splice(0,t.skippedTargets.length),t.observationTargets.forEach((function(n){n.isActive()&&(y(n.target)>e?t.activeTargets.push(n):t.skippedTargets.push(n))}))}))},O=function(){var e=0;for(B(e);i.some((function(e){return e.activeTargets.length>0}));)e=S(),B(e);return i.some((function(e){return e.skippedTargets.length>0}))&&function(){var e;"function"===typeof ErrorEvent?e=new ErrorEvent("error",{message:o}):((e=document.createEvent("Event")).initEvent("error",!1,!1),e.message=o),window.dispatchEvent(e)}(),e>0},R=[],k=function(e){if(!s){var t=0,n=document.createTextNode("");new MutationObserver((function(){return R.splice(0).forEach((function(e){return e()}))})).observe(n,{characterData:!0}),s=function(){n.textContent="".concat(t?t--:t++)}}R.push(e),s()},C=0,_={attributes:!0,characterData:!0,childList:!0,subtree:!0},N=["resize","load","transitionend","animationend","animationstart","animationiteration","keyup","keydown","mouseup","mousedown","mouseover","mouseout","blur","focus"],D=function(e){return void 0===e&&(e=0),Date.now()+e},M=!1,P=new(function(){function e(){var e=this;this.stopped=!0,this.listener=function(){return e.schedule()}}return e.prototype.run=function(e){var t=this;if(void 0===e&&(e=250),!M){M=!0;var n,r=D(e);n=function(){var n=!1;try{n=O()}finally{if(M=!1,e=r-D(),!C)return;n?t.run(1e3):e>0?t.run(e):t.start()}},k((function(){requestAnimationFrame(n)}))}},e.prototype.schedule=function(){this.stop(),this.run()},e.prototype.observe=function(){var e=this,t=function(){return e.observer&&e.observer.observe(document.body,_)};document.body?t():v.addEventListener("DOMContentLoaded",t)},e.prototype.start=function(){var e=this;this.stopped&&(this.stopped=!1,this.observer=new MutationObserver(this.listener),this.observe(),N.forEach((function(t){return v.addEventListener(t,e.listener,!0)})))},e.prototype.stop=function(){var e=this;this.stopped||(this.observer&&this.observer.disconnect(),N.forEach((function(t){return v.removeEventListener(t,e.listener,!0)})),this.stopped=!0)},e}()),F=function(e){!C&&e>0&&P.start(),!(C+=e)&&P.stop()},I=function(){function e(e,t){this.target=e,this.observedBox=t||r.CONTENT_BOX,this.lastReportedSize={inlineSize:0,blockSize:0}}return e.prototype.isActive=function(){var e,t=m(this.target,this.observedBox,!0);return e=this.target,h(e)||function(e){switch(e.tagName){case"INPUT":if("image"!==e.type)break;case"VIDEO":case"AUDIO":case"EMBED":case"OBJECT":case"CANVAS":case"IFRAME":case"IMG":return!0}return!1}(e)||"inline"!==getComputedStyle(e).display||(this.lastReportedSize=t),this.lastReportedSize.inlineSize!==t.inlineSize||this.lastReportedSize.blockSize!==t.blockSize},e}(),L=function(e,t){this.activeTargets=[],this.skippedTargets=[],this.observationTargets=[],this.observer=e,this.callback=t},W=new WeakMap,X=function(e,t){for(var n=0;n<e.length;n+=1)if(e[n].target===t)return n;return-1},A=function(){function e(){}return e.connect=function(e,t){var n=new L(e,t);W.set(e,n)},e.observe=function(e,t,n){var r=W.get(e),o=0===r.observationTargets.length;X(r.observationTargets,t)<0&&(o&&i.push(r),r.observationTargets.push(new I(t,n&&n.box)),F(1),P.schedule())},e.unobserve=function(e,t){var n=W.get(e),r=X(n.observationTargets,t),o=1===n.observationTargets.length;r>=0&&(o&&i.splice(i.indexOf(n),1),n.observationTargets.splice(r,1),F(-1))},e.disconnect=function(e){var t=this,n=W.get(e);n.observationTargets.slice().forEach((function(n){return t.unobserve(e,n.target)})),n.activeTargets.splice(0,n.activeTargets.length)},e}(),V=function(){function e(e){if(0===arguments.length)throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");if("function"!==typeof e)throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");A.connect(this,e)}return e.prototype.observe=function(e,t){if(0===arguments.length)throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!d(e))throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");A.observe(this,e,t)},e.prototype.unobserve=function(e){if(0===arguments.length)throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!d(e))throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");A.unobserve(this,e)},e.prototype.disconnect=function(){A.disconnect(this)},e.toString=function(){return"function ResizeObserver () { [polyfill code] }"},e}()}}]);
|
|
2
|
-
//# sourceMappingURL=resize-observer-polyfill.68c3249b.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/resize-observer-polyfill.68c3249b.chunk.js","mappings":"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","sources":["../../../node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../../../node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../../../node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../../../node_modules/@juggle/resize-observer/lib/utils/freeze.js","../../../node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../../../node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../../../node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../../../node_modules/@juggle/resize-observer/lib/utils/element.js","../../../node_modules/@juggle/resize-observer/lib/utils/global.js","../../../node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../../../node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../../../node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../../../node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../../../node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../../../node_modules/@juggle/resize-observer/lib/utils/process.js","../../../node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../../../node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../../../node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../../../node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../../../node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../../../node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../../../node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../../../node_modules/@juggle/resize-observer/lib/ResizeObserver.js"],"sourcesContent":["var resizeObservers = [];\nexport { resizeObservers };\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","var msg = 'ResizeObserver loop completed with undelivered notifications.';\nvar deliverResizeLoopError = function () {\n var event;\n if (typeof ErrorEvent === 'function') {\n event = new ErrorEvent('error', {\n message: msg\n });\n }\n else {\n event = document.createEvent('Event');\n event.initEvent('error', false, false);\n event.message = msg;\n }\n window.dispatchEvent(event);\n};\nexport { deliverResizeLoopError };\n","export var freeze = function (obj) { return Object.freeze(obj); };\n","var trigger;\nvar callbacks = [];\nvar notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };\nvar queueMicroTask = function (callback) {\n if (!trigger) {\n var toggle_1 = 0;\n var el_1 = document.createTextNode('');\n var config = { characterData: true };\n new MutationObserver(function () { return notify(); }).observe(el_1, config);\n trigger = function () { el_1.textContent = \"\".concat(toggle_1 ? toggle_1-- : toggle_1++); };\n }\n callbacks.push(callback);\n trigger();\n};\nexport { queueMicroTask };\n","import { freeze } from './utils/freeze';\nvar ResizeObserverSize = (function () {\n function ResizeObserverSize(inlineSize, blockSize) {\n this.inlineSize = inlineSize;\n this.blockSize = blockSize;\n freeze(this);\n }\n return ResizeObserverSize;\n}());\nexport { ResizeObserverSize };\n","import { freeze } from './utils/freeze';\nvar DOMRectReadOnly = (function () {\n function DOMRectReadOnly(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.top = this.y;\n this.left = this.x;\n this.bottom = this.top + this.height;\n this.right = this.left + this.width;\n return freeze(this);\n }\n DOMRectReadOnly.prototype.toJSON = function () {\n var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n };\n DOMRectReadOnly.fromRect = function (rectangle) {\n return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n };\n return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };\nvar isHidden = function (target) {\n if (isSVG(target)) {\n var _a = target.getBBox(), width = _a.width, height = _a.height;\n return !width && !height;\n }\n var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\n return !(offsetWidth || offsetHeight || target.getClientRects().length);\n};\nvar isElement = function (obj) {\n var _a;\n if (obj instanceof Element) {\n return true;\n }\n var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;\n return !!(scope && obj instanceof scope.Element);\n};\nvar isReplacedElement = function (target) {\n switch (target.tagName) {\n case 'INPUT':\n if (target.type !== 'image') {\n break;\n }\n case 'VIDEO':\n case 'AUDIO':\n case 'EMBED':\n case 'OBJECT':\n case 'CANVAS':\n case 'IFRAME':\n case 'IMG':\n return true;\n }\n return false;\n};\nexport { isSVG, isHidden, isElement, isReplacedElement };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { ResizeObserverSize } from '../ResizeObserverSize';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { freeze } from '../utils/freeze';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n if (inlineSize === void 0) { inlineSize = 0; }\n if (blockSize === void 0) { blockSize = 0; }\n if (switchSizes === void 0) { switchSizes = false; }\n return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);\n};\nvar zeroBoxes = freeze({\n devicePixelContentBoxSize: size(),\n borderBoxSize: size(),\n contentBoxSize: size(),\n contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n if (forceRecalculation === void 0) { forceRecalculation = false; }\n if (cache.has(target) && !forceRecalculation) {\n return cache.get(target);\n }\n if (isHidden(target)) {\n cache.set(target, zeroBoxes);\n return zeroBoxes;\n }\n var cs = getComputedStyle(target);\n var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n var removePadding = !IE && cs.boxSizing === 'border-box';\n var switchSizes = verticalRegexp.test(cs.writingMode || '');\n var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n var horizontalPadding = paddingLeft + paddingRight;\n var verticalPadding = paddingTop + paddingBottom;\n var horizontalBorderArea = borderLeft + borderRight;\n var verticalBorderArea = borderTop + borderBottom;\n var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n var boxes = freeze({\n devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n });\n cache.set(target, boxes);\n return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n switch (observedBox) {\n case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n return devicePixelContentBoxSize;\n case ResizeObserverBoxOptions.BORDER_BOX:\n return borderBoxSize;\n default:\n return contentBoxSize;\n }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { calculateBoxSizes } from './algorithms/calculateBoxSize';\nimport { freeze } from './utils/freeze';\nvar ResizeObserverEntry = (function () {\n function ResizeObserverEntry(target) {\n var boxes = calculateBoxSizes(target);\n this.target = target;\n this.contentRect = boxes.contentRect;\n this.borderBoxSize = freeze([boxes.borderBoxSize]);\n this.contentBoxSize = freeze([boxes.contentBoxSize]);\n this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);\n }\n return ResizeObserverEntry;\n}());\nexport { ResizeObserverEntry };\n","import { isHidden } from '../utils/element';\nvar calculateDepthForNode = function (node) {\n if (isHidden(node)) {\n return Infinity;\n }\n var depth = 0;\n var parent = node.parentNode;\n while (parent) {\n depth += 1;\n parent = parent.parentNode;\n }\n return depth;\n};\nexport { calculateDepthForNode };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { ResizeObserverEntry } from '../ResizeObserverEntry';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nimport { calculateBoxSize } from './calculateBoxSize';\nvar broadcastActiveObservations = function () {\n var shallowestDepth = Infinity;\n var callbacks = [];\n resizeObservers.forEach(function processObserver(ro) {\n if (ro.activeTargets.length === 0) {\n return;\n }\n var entries = [];\n ro.activeTargets.forEach(function processTarget(ot) {\n var entry = new ResizeObserverEntry(ot.target);\n var targetDepth = calculateDepthForNode(ot.target);\n entries.push(entry);\n ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);\n if (targetDepth < shallowestDepth) {\n shallowestDepth = targetDepth;\n }\n });\n callbacks.push(function resizeObserverCallback() {\n ro.callback.call(ro.observer, entries, ro.observer);\n });\n ro.activeTargets.splice(0, ro.activeTargets.length);\n });\n for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {\n var callback = callbacks_1[_i];\n callback();\n }\n return shallowestDepth;\n};\nexport { broadcastActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nvar gatherActiveObservationsAtDepth = function (depth) {\n resizeObservers.forEach(function processObserver(ro) {\n ro.activeTargets.splice(0, ro.activeTargets.length);\n ro.skippedTargets.splice(0, ro.skippedTargets.length);\n ro.observationTargets.forEach(function processTarget(ot) {\n if (ot.isActive()) {\n if (calculateDepthForNode(ot.target) > depth) {\n ro.activeTargets.push(ot);\n }\n else {\n ro.skippedTargets.push(ot);\n }\n }\n });\n });\n};\nexport { gatherActiveObservationsAtDepth };\n","import { hasActiveObservations } from '../algorithms/hasActiveObservations';\nimport { hasSkippedObservations } from '../algorithms/hasSkippedObservations';\nimport { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';\nimport { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';\nimport { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';\nvar process = function () {\n var depth = 0;\n gatherActiveObservationsAtDepth(depth);\n while (hasActiveObservations()) {\n depth = broadcastActiveObservations();\n gatherActiveObservationsAtDepth(depth);\n }\n if (hasSkippedObservations()) {\n deliverResizeLoopError();\n }\n return depth > 0;\n};\nexport { process };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasActiveObservations = function () {\n return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });\n};\nexport { hasActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasSkippedObservations = function () {\n return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });\n};\nexport { hasSkippedObservations };\n","import { process } from './process';\nimport { global } from './global';\nimport { queueResizeObserver } from './queueResizeObserver';\nvar watching = 0;\nvar isWatching = function () { return !!watching; };\nvar CATCH_PERIOD = 250;\nvar observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };\nvar events = [\n 'resize',\n 'load',\n 'transitionend',\n 'animationend',\n 'animationstart',\n 'animationiteration',\n 'keyup',\n 'keydown',\n 'mouseup',\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'blur',\n 'focus'\n];\nvar time = function (timeout) {\n if (timeout === void 0) { timeout = 0; }\n return Date.now() + timeout;\n};\nvar scheduled = false;\nvar Scheduler = (function () {\n function Scheduler() {\n var _this = this;\n this.stopped = true;\n this.listener = function () { return _this.schedule(); };\n }\n Scheduler.prototype.run = function (timeout) {\n var _this = this;\n if (timeout === void 0) { timeout = CATCH_PERIOD; }\n if (scheduled) {\n return;\n }\n scheduled = true;\n var until = time(timeout);\n queueResizeObserver(function () {\n var elementsHaveResized = false;\n try {\n elementsHaveResized = process();\n }\n finally {\n scheduled = false;\n timeout = until - time();\n if (!isWatching()) {\n return;\n }\n if (elementsHaveResized) {\n _this.run(1000);\n }\n else if (timeout > 0) {\n _this.run(timeout);\n }\n else {\n _this.start();\n }\n }\n });\n };\n Scheduler.prototype.schedule = function () {\n this.stop();\n this.run();\n };\n Scheduler.prototype.observe = function () {\n var _this = this;\n var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };\n document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);\n };\n Scheduler.prototype.start = function () {\n var _this = this;\n if (this.stopped) {\n this.stopped = false;\n this.observer = new MutationObserver(this.listener);\n this.observe();\n events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });\n }\n };\n Scheduler.prototype.stop = function () {\n var _this = this;\n if (!this.stopped) {\n this.observer && this.observer.disconnect();\n events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });\n this.stopped = true;\n }\n };\n return Scheduler;\n}());\nvar scheduler = new Scheduler();\nvar updateCount = function (n) {\n !watching && n > 0 && scheduler.start();\n watching += n;\n !watching && scheduler.stop();\n};\nexport { scheduler, updateCount };\n","import { queueMicroTask } from './queueMicroTask';\nvar queueResizeObserver = function (cb) {\n queueMicroTask(function ResizeObserver() {\n requestAnimationFrame(cb);\n });\n};\nexport { queueResizeObserver };\n","import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';\nimport { calculateBoxSize } from './algorithms/calculateBoxSize';\nimport { isSVG, isReplacedElement } from './utils/element';\nvar skipNotifyOnElement = function (target) {\n return !isSVG(target)\n && !isReplacedElement(target)\n && getComputedStyle(target).display === 'inline';\n};\nvar ResizeObservation = (function () {\n function ResizeObservation(target, observedBox) {\n this.target = target;\n this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;\n this.lastReportedSize = {\n inlineSize: 0,\n blockSize: 0\n };\n }\n ResizeObservation.prototype.isActive = function () {\n var size = calculateBoxSize(this.target, this.observedBox, true);\n if (skipNotifyOnElement(this.target)) {\n this.lastReportedSize = size;\n }\n if (this.lastReportedSize.inlineSize !== size.inlineSize\n || this.lastReportedSize.blockSize !== size.blockSize) {\n return true;\n }\n return false;\n };\n return ResizeObservation;\n}());\nexport { ResizeObservation };\n","var ResizeObserverDetail = (function () {\n function ResizeObserverDetail(resizeObserver, callback) {\n this.activeTargets = [];\n this.skippedTargets = [];\n this.observationTargets = [];\n this.observer = resizeObserver;\n this.callback = callback;\n }\n return ResizeObserverDetail;\n}());\nexport { ResizeObserverDetail };\n","import { scheduler, updateCount } from './utils/scheduler';\nimport { ResizeObservation } from './ResizeObservation';\nimport { ResizeObserverDetail } from './ResizeObserverDetail';\nimport { resizeObservers } from './utils/resizeObservers';\nvar observerMap = new WeakMap();\nvar getObservationIndex = function (observationTargets, target) {\n for (var i = 0; i < observationTargets.length; i += 1) {\n if (observationTargets[i].target === target) {\n return i;\n }\n }\n return -1;\n};\nvar ResizeObserverController = (function () {\n function ResizeObserverController() {\n }\n ResizeObserverController.connect = function (resizeObserver, callback) {\n var detail = new ResizeObserverDetail(resizeObserver, callback);\n observerMap.set(resizeObserver, detail);\n };\n ResizeObserverController.observe = function (resizeObserver, target, options) {\n var detail = observerMap.get(resizeObserver);\n var firstObservation = detail.observationTargets.length === 0;\n if (getObservationIndex(detail.observationTargets, target) < 0) {\n firstObservation && resizeObservers.push(detail);\n detail.observationTargets.push(new ResizeObservation(target, options && options.box));\n updateCount(1);\n scheduler.schedule();\n }\n };\n ResizeObserverController.unobserve = function (resizeObserver, target) {\n var detail = observerMap.get(resizeObserver);\n var index = getObservationIndex(detail.observationTargets, target);\n var lastObservation = detail.observationTargets.length === 1;\n if (index >= 0) {\n lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);\n detail.observationTargets.splice(index, 1);\n updateCount(-1);\n }\n };\n ResizeObserverController.disconnect = function (resizeObserver) {\n var _this = this;\n var detail = observerMap.get(resizeObserver);\n detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });\n detail.activeTargets.splice(0, detail.activeTargets.length);\n };\n return ResizeObserverController;\n}());\nexport { ResizeObserverController };\n","import { ResizeObserverController } from './ResizeObserverController';\nimport { isElement } from './utils/element';\nvar ResizeObserver = (function () {\n function ResizeObserver(callback) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (typeof callback !== 'function') {\n throw new TypeError(\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\");\n }\n ResizeObserverController.connect(this, callback);\n }\n ResizeObserver.prototype.observe = function (target, options) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.observe(this, target, options);\n };\n ResizeObserver.prototype.unobserve = function (target) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.unobserve(this, target);\n };\n ResizeObserver.prototype.disconnect = function () {\n ResizeObserverController.disconnect(this);\n };\n ResizeObserver.toString = function () {\n return 'function ResizeObserver () { [polyfill code] }';\n };\n return ResizeObserver;\n}());\nexport { ResizeObserver };\n"],"names":["ResizeObserverBoxOptions","resizeObservers","msg","trigger","freeze","obj","Object","ResizeObserverSize","inlineSize","blockSize","this","DOMRectReadOnly","x","y","width","height","top","left","bottom","right","prototype","toJSON","_a","fromRect","rectangle","isSVG","target","SVGElement","isHidden","getBBox","_b","offsetWidth","offsetHeight","getClientRects","length","isElement","Element","scope","ownerDocument","defaultView","global","window","cache","WeakMap","scrollRegexp","verticalRegexp","IE","test","navigator","userAgent","parseDimension","pixel","parseFloat","size","switchSizes","zeroBoxes","devicePixelContentBoxSize","borderBoxSize","contentBoxSize","contentRect","calculateBoxSizes","forceRecalculation","has","get","set","cs","getComputedStyle","svg","ownerSVGElement","removePadding","boxSizing","writingMode","canScrollVertically","overflowY","canScrollHorizontally","overflowX","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTop","borderTopWidth","borderRight","borderRightWidth","borderBottom","borderBottomWidth","horizontalPadding","verticalPadding","horizontalBorderArea","borderLeftWidth","verticalBorderArea","horizontalScrollbarThickness","clientHeight","verticalScrollbarThickness","clientWidth","widthReduction","heightReduction","contentWidth","contentHeight","borderBoxWidth","borderBoxHeight","boxes","Math","round","devicePixelRatio","calculateBoxSize","observedBox","DEVICE_PIXEL_CONTENT_BOX","BORDER_BOX","ResizeObserverEntry","calculateDepthForNode","node","Infinity","depth","parent","parentNode","broadcastActiveObservations","shallowestDepth","callbacks","forEach","ro","activeTargets","entries","ot","entry","targetDepth","push","lastReportedSize","callback","call","observer","splice","_i","callbacks_1","gatherActiveObservationsAtDepth","skippedTargets","observationTargets","isActive","process","some","event","ErrorEvent","message","document","createEvent","initEvent","dispatchEvent","deliverResizeLoopError","queueMicroTask","toggle_1","el_1","createTextNode","MutationObserver","cb","observe","characterData","textContent","concat","watching","observerConfig","attributes","childList","subtree","events","time","timeout","Date","now","scheduled","scheduler","Scheduler","_this","stopped","listener","schedule","run","until","elementsHaveResized","start","requestAnimationFrame","stop","body","addEventListener","name","disconnect","removeEventListener","updateCount","n","ResizeObservation","CONTENT_BOX","tagName","type","isReplacedElement","display","ResizeObserverDetail","resizeObserver","observerMap","getObservationIndex","i","ResizeObserverController","connect","detail","options","firstObservation","box","unobserve","index","lastObservation","indexOf","slice","ResizeObserver","arguments","TypeError","toString"],"sourceRoot":""}
|