rustfava 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. rustfava/__init__.py +30 -0
  2. rustfava/_ctx_globals_class.py +55 -0
  3. rustfava/api_models.py +36 -0
  4. rustfava/application.py +534 -0
  5. rustfava/beans/__init__.py +6 -0
  6. rustfava/beans/abc.py +327 -0
  7. rustfava/beans/account.py +79 -0
  8. rustfava/beans/create.py +377 -0
  9. rustfava/beans/flags.py +20 -0
  10. rustfava/beans/funcs.py +38 -0
  11. rustfava/beans/helpers.py +52 -0
  12. rustfava/beans/ingest.py +75 -0
  13. rustfava/beans/load.py +31 -0
  14. rustfava/beans/prices.py +151 -0
  15. rustfava/beans/protocols.py +82 -0
  16. rustfava/beans/str.py +454 -0
  17. rustfava/beans/types.py +63 -0
  18. rustfava/cli.py +187 -0
  19. rustfava/context.py +13 -0
  20. rustfava/core/__init__.py +729 -0
  21. rustfava/core/accounts.py +161 -0
  22. rustfava/core/attributes.py +145 -0
  23. rustfava/core/budgets.py +207 -0
  24. rustfava/core/charts.py +301 -0
  25. rustfava/core/commodities.py +37 -0
  26. rustfava/core/conversion.py +229 -0
  27. rustfava/core/documents.py +87 -0
  28. rustfava/core/extensions.py +132 -0
  29. rustfava/core/fava_options.py +255 -0
  30. rustfava/core/file.py +542 -0
  31. rustfava/core/filters.py +484 -0
  32. rustfava/core/group_entries.py +97 -0
  33. rustfava/core/ingest.py +509 -0
  34. rustfava/core/inventory.py +167 -0
  35. rustfava/core/misc.py +105 -0
  36. rustfava/core/module_base.py +18 -0
  37. rustfava/core/number.py +106 -0
  38. rustfava/core/query.py +180 -0
  39. rustfava/core/query_shell.py +301 -0
  40. rustfava/core/tree.py +265 -0
  41. rustfava/core/watcher.py +219 -0
  42. rustfava/ext/__init__.py +232 -0
  43. rustfava/ext/auto_commit.py +61 -0
  44. rustfava/ext/portfolio_list/PortfolioList.js +34 -0
  45. rustfava/ext/portfolio_list/__init__.py +29 -0
  46. rustfava/ext/portfolio_list/templates/PortfolioList.html +15 -0
  47. rustfava/ext/rustfava_ext_test/RustfavaExtTest.js +42 -0
  48. rustfava/ext/rustfava_ext_test/__init__.py +207 -0
  49. rustfava/ext/rustfava_ext_test/templates/RustfavaExtTest.html +45 -0
  50. rustfava/ext/rustfava_ext_test/templates/RustfavaExtTestInclude.html +1 -0
  51. rustfava/help/__init__.py +15 -0
  52. rustfava/help/_index.md +29 -0
  53. rustfava/help/beancount_syntax.md +156 -0
  54. rustfava/help/budgets.md +31 -0
  55. rustfava/help/conversion.md +29 -0
  56. rustfava/help/extensions.md +111 -0
  57. rustfava/help/features.md +179 -0
  58. rustfava/help/filters.md +103 -0
  59. rustfava/help/import.md +27 -0
  60. rustfava/help/options.md +289 -0
  61. rustfava/helpers.py +30 -0
  62. rustfava/internal_api.py +221 -0
  63. rustfava/json_api.py +952 -0
  64. rustfava/plugins/__init__.py +3 -0
  65. rustfava/plugins/link_documents.py +107 -0
  66. rustfava/plugins/tag_discovered_documents.py +44 -0
  67. rustfava/py.typed +0 -0
  68. rustfava/rustledger/__init__.py +31 -0
  69. rustfava/rustledger/constants.py +76 -0
  70. rustfava/rustledger/engine.py +485 -0
  71. rustfava/rustledger/loader.py +273 -0
  72. rustfava/rustledger/options.py +202 -0
  73. rustfava/rustledger/query.py +331 -0
  74. rustfava/rustledger/types.py +830 -0
  75. rustfava/serialisation.py +220 -0
  76. rustfava/static/app.css +2988 -0
  77. rustfava/static/app.css.map +7 -0
  78. rustfava/static/app.js +12854 -0
  79. rustfava/static/app.js.map +7 -0
  80. rustfava/static/beancount-JFV44ZVZ.css +5 -0
  81. rustfava/static/beancount-JFV44ZVZ.css.map +7 -0
  82. rustfava/static/beancount-VTTKRGSK.js +4642 -0
  83. rustfava/static/beancount-VTTKRGSK.js.map +7 -0
  84. rustfava/static/bql-MGFRUMBP.js +333 -0
  85. rustfava/static/bql-MGFRUMBP.js.map +7 -0
  86. rustfava/static/chunk-E7ZF4ASL.js +23061 -0
  87. rustfava/static/chunk-E7ZF4ASL.js.map +7 -0
  88. rustfava/static/chunk-V24TLQHT.js +12673 -0
  89. rustfava/static/chunk-V24TLQHT.js.map +7 -0
  90. rustfava/static/favicon.ico +0 -0
  91. rustfava/static/fira-mono-cyrillic-400-normal-BLAGXRCE.woff2 +0 -0
  92. rustfava/static/fira-mono-cyrillic-500-normal-EN7JUAAW.woff2 +0 -0
  93. rustfava/static/fira-mono-cyrillic-ext-400-normal-EX7VARTS.woff2 +0 -0
  94. rustfava/static/fira-mono-cyrillic-ext-500-normal-ZDPTUPRR.woff2 +0 -0
  95. rustfava/static/fira-mono-greek-400-normal-COGHKMOA.woff2 +0 -0
  96. rustfava/static/fira-mono-greek-500-normal-4EN2PKZT.woff2 +0 -0
  97. rustfava/static/fira-mono-greek-ext-400-normal-DYEQIJH7.woff2 +0 -0
  98. rustfava/static/fira-mono-greek-ext-500-normal-SG73CVKQ.woff2 +0 -0
  99. rustfava/static/fira-mono-latin-400-normal-NA3VLV7E.woff2 +0 -0
  100. rustfava/static/fira-mono-latin-500-normal-YC77GFWD.woff2 +0 -0
  101. rustfava/static/fira-mono-latin-ext-400-normal-DIKTZ5PW.woff2 +0 -0
  102. rustfava/static/fira-mono-latin-ext-500-normal-ZWY4UO4V.woff2 +0 -0
  103. rustfava/static/fira-mono-symbols2-400-normal-UITXT77Q.woff2 +0 -0
  104. rustfava/static/fira-mono-symbols2-500-normal-VWPC2EFN.woff2 +0 -0
  105. rustfava/static/fira-sans-cyrillic-400-normal-KLQMBCA6.woff2 +0 -0
  106. rustfava/static/fira-sans-cyrillic-500-normal-NFG7UD6J.woff2 +0 -0
  107. rustfava/static/fira-sans-cyrillic-ext-400-normal-GWO44OPC.woff2 +0 -0
  108. rustfava/static/fira-sans-cyrillic-ext-500-normal-SP47E5SC.woff2 +0 -0
  109. rustfava/static/fira-sans-greek-400-normal-UMQBTLC3.woff2 +0 -0
  110. rustfava/static/fira-sans-greek-500-normal-4ZKHN4FQ.woff2 +0 -0
  111. rustfava/static/fira-sans-greek-ext-400-normal-O2DVJAJZ.woff2 +0 -0
  112. rustfava/static/fira-sans-greek-ext-500-normal-SK6GNWGO.woff2 +0 -0
  113. rustfava/static/fira-sans-latin-400-normal-OYYTPMAV.woff2 +0 -0
  114. rustfava/static/fira-sans-latin-500-normal-SMQPZW5A.woff2 +0 -0
  115. rustfava/static/fira-sans-latin-ext-400-normal-OAUP3WK5.woff2 +0 -0
  116. rustfava/static/fira-sans-latin-ext-500-normal-LY3YDR5Y.woff2 +0 -0
  117. rustfava/static/fira-sans-vietnamese-400-normal-OBMQ72MR.woff2 +0 -0
  118. rustfava/static/fira-sans-vietnamese-500-normal-Y4NZR5EU.woff2 +0 -0
  119. rustfava/static/source-code-pro-cyrillic-400-normal-TO22V6M3.woff2 +0 -0
  120. rustfava/static/source-code-pro-cyrillic-500-normal-OGBWWWYW.woff2 +0 -0
  121. rustfava/static/source-code-pro-cyrillic-ext-400-normal-XH44UCIA.woff2 +0 -0
  122. rustfava/static/source-code-pro-cyrillic-ext-500-normal-3Z6MMVM6.woff2 +0 -0
  123. rustfava/static/source-code-pro-greek-400-normal-OUXXUQWK.woff2 +0 -0
  124. rustfava/static/source-code-pro-greek-500-normal-JA2Z5UXO.woff2 +0 -0
  125. rustfava/static/source-code-pro-greek-ext-400-normal-WCDKMX7U.woff2 +0 -0
  126. rustfava/static/source-code-pro-greek-ext-500-normal-ZHVI4VKW.woff2 +0 -0
  127. rustfava/static/source-code-pro-latin-400-normal-QOGTXED5.woff2 +0 -0
  128. rustfava/static/source-code-pro-latin-500-normal-X57QEOLQ.woff2 +0 -0
  129. rustfava/static/source-code-pro-latin-ext-400-normal-QXC74NBF.woff2 +0 -0
  130. rustfava/static/source-code-pro-latin-ext-500-normal-QGOY7MTT.woff2 +0 -0
  131. rustfava/static/source-code-pro-vietnamese-400-normal-NPDCDTBA.woff2 +0 -0
  132. rustfava/static/source-code-pro-vietnamese-500-normal-M6PJKTR5.woff2 +0 -0
  133. rustfava/static/tree-sitter-beancount-MLXFQBZ5.wasm +0 -0
  134. rustfava/static/web-tree-sitter-RNOQ6E74.wasm +0 -0
  135. rustfava/template_filters.py +64 -0
  136. rustfava/templates/_journal_table.html +156 -0
  137. rustfava/templates/_layout.html +26 -0
  138. rustfava/templates/_query_table.html +88 -0
  139. rustfava/templates/beancount_file +18 -0
  140. rustfava/templates/help.html +23 -0
  141. rustfava/templates/macros/_account_macros.html +5 -0
  142. rustfava/templates/macros/_commodity_macros.html +13 -0
  143. rustfava/translations/bg/LC_MESSAGES/messages.mo +0 -0
  144. rustfava/translations/bg/LC_MESSAGES/messages.po +618 -0
  145. rustfava/translations/ca/LC_MESSAGES/messages.mo +0 -0
  146. rustfava/translations/ca/LC_MESSAGES/messages.po +618 -0
  147. rustfava/translations/de/LC_MESSAGES/messages.mo +0 -0
  148. rustfava/translations/de/LC_MESSAGES/messages.po +618 -0
  149. rustfava/translations/es/LC_MESSAGES/messages.mo +0 -0
  150. rustfava/translations/es/LC_MESSAGES/messages.po +619 -0
  151. rustfava/translations/fa/LC_MESSAGES/messages.mo +0 -0
  152. rustfava/translations/fa/LC_MESSAGES/messages.po +618 -0
  153. rustfava/translations/fr/LC_MESSAGES/messages.mo +0 -0
  154. rustfava/translations/fr/LC_MESSAGES/messages.po +618 -0
  155. rustfava/translations/ja/LC_MESSAGES/messages.mo +0 -0
  156. rustfava/translations/ja/LC_MESSAGES/messages.po +618 -0
  157. rustfava/translations/nl/LC_MESSAGES/messages.mo +0 -0
  158. rustfava/translations/nl/LC_MESSAGES/messages.po +617 -0
  159. rustfava/translations/pt/LC_MESSAGES/messages.mo +0 -0
  160. rustfava/translations/pt/LC_MESSAGES/messages.po +617 -0
  161. rustfava/translations/pt_BR/LC_MESSAGES/messages.mo +0 -0
  162. rustfava/translations/pt_BR/LC_MESSAGES/messages.po +618 -0
  163. rustfava/translations/ru/LC_MESSAGES/messages.mo +0 -0
  164. rustfava/translations/ru/LC_MESSAGES/messages.po +617 -0
  165. rustfava/translations/sk/LC_MESSAGES/messages.mo +0 -0
  166. rustfava/translations/sk/LC_MESSAGES/messages.po +623 -0
  167. rustfava/translations/sv/LC_MESSAGES/messages.mo +0 -0
  168. rustfava/translations/sv/LC_MESSAGES/messages.po +618 -0
  169. rustfava/translations/uk/LC_MESSAGES/messages.mo +0 -0
  170. rustfava/translations/uk/LC_MESSAGES/messages.po +618 -0
  171. rustfava/translations/zh/LC_MESSAGES/messages.mo +0 -0
  172. rustfava/translations/zh/LC_MESSAGES/messages.po +618 -0
  173. rustfava/translations/zh_Hant_TW/LC_MESSAGES/messages.mo +0 -0
  174. rustfava/translations/zh_Hant_TW/LC_MESSAGES/messages.po +618 -0
  175. rustfava/util/__init__.py +157 -0
  176. rustfava/util/date.py +576 -0
  177. rustfava/util/excel.py +118 -0
  178. rustfava/util/ranking.py +79 -0
  179. rustfava/util/sets.py +18 -0
  180. rustfava/util/unreachable.py +20 -0
  181. rustfava-0.1.0.dist-info/METADATA +102 -0
  182. rustfava-0.1.0.dist-info/RECORD +187 -0
  183. rustfava-0.1.0.dist-info/WHEEL +5 -0
  184. rustfava-0.1.0.dist-info/entry_points.txt +2 -0
  185. rustfava-0.1.0.dist-info/licenses/AUTHORS +11 -0
  186. rustfava-0.1.0.dist-info/licenses/LICENSE +21 -0
  187. rustfava-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../frontend/node_modules/@ungap/custom-elements/index.js", "../../../frontend/src/clipboard.ts", "../../../frontend/src/codemirror/dom.ts", "../../../frontend/src/keyboard-shortcuts.ts", "../../../frontend/src/stores/filters.ts", "../../../frontend/src/lib/iso4217.ts", "../../../frontend/src/stores/options.ts", "../../../frontend/src/stores/chart.ts", "../../../frontend/node_modules/d3-axis/src/identity.js", "../../../frontend/node_modules/d3-axis/src/axis.js", "../../../frontend/node_modules/d3-scale/src/init.js", "../../../frontend/node_modules/d3-scale/src/ordinal.js", "../../../frontend/node_modules/d3-scale/src/band.js", "../../../frontend/node_modules/d3-color/src/define.js", "../../../frontend/node_modules/d3-color/src/color.js", "../../../frontend/node_modules/d3-color/src/math.js", "../../../frontend/node_modules/d3-color/src/lab.js", "../../../frontend/node_modules/d3-interpolate/src/basis.js", "../../../frontend/node_modules/d3-interpolate/src/basisClosed.js", "../../../frontend/node_modules/d3-interpolate/src/constant.js", "../../../frontend/node_modules/d3-interpolate/src/color.js", "../../../frontend/node_modules/d3-interpolate/src/rgb.js", "../../../frontend/node_modules/d3-interpolate/src/numberArray.js", "../../../frontend/node_modules/d3-interpolate/src/array.js", "../../../frontend/node_modules/d3-interpolate/src/date.js", "../../../frontend/node_modules/d3-interpolate/src/number.js", "../../../frontend/node_modules/d3-interpolate/src/object.js", "../../../frontend/node_modules/d3-interpolate/src/string.js", "../../../frontend/node_modules/d3-interpolate/src/value.js", "../../../frontend/node_modules/d3-interpolate/src/round.js", "../../../frontend/node_modules/d3-scale/src/constant.js", "../../../frontend/node_modules/d3-scale/src/number.js", "../../../frontend/node_modules/d3-scale/src/continuous.js", "../../../frontend/node_modules/d3-scale/src/tickFormat.js", "../../../frontend/node_modules/d3-scale/src/linear.js", "../../../frontend/node_modules/d3-scale/src/nice.js", "../../../frontend/node_modules/d3-scale/src/pow.js", "../../../frontend/node_modules/d3-scale/src/time.js", "../../../frontend/node_modules/d3-scale/src/utcTime.js", "../../../frontend/src/stores/format.ts", "../../../frontend/src/charts/Axis.svelte", "../../../frontend/src/charts/helpers.ts", "../../../frontend/src/charts/BarChart.svelte", "../../../frontend/src/charts/ChartLegend.svelte", "../../../frontend/src/charts/Icicle.svelte", "../../../frontend/src/charts/Sunburst.svelte", "../../../frontend/src/charts/Treemap.svelte", "../../../frontend/src/charts/HierarchyContainer.svelte", "../../../frontend/node_modules/d3-quadtree/src/add.js", "../../../frontend/node_modules/d3-quadtree/src/cover.js", "../../../frontend/node_modules/d3-quadtree/src/data.js", "../../../frontend/node_modules/d3-quadtree/src/extent.js", "../../../frontend/node_modules/d3-quadtree/src/quad.js", "../../../frontend/node_modules/d3-quadtree/src/find.js", "../../../frontend/node_modules/d3-quadtree/src/remove.js", "../../../frontend/node_modules/d3-quadtree/src/root.js", "../../../frontend/node_modules/d3-quadtree/src/size.js", "../../../frontend/node_modules/d3-quadtree/src/visit.js", "../../../frontend/node_modules/d3-quadtree/src/visitAfter.js", "../../../frontend/node_modules/d3-quadtree/src/x.js", "../../../frontend/node_modules/d3-quadtree/src/y.js", "../../../frontend/node_modules/d3-quadtree/src/quadtree.js", "../../../frontend/src/charts/LineChart.svelte", "../../../frontend/src/charts/ModeSwitch.svelte", "../../../frontend/src/charts/ScatterPlot.svelte", "../../../frontend/src/charts/Chart.svelte", "../../../frontend/src/charts/context.ts", "../../../frontend/src/charts/SelectCombobox.svelte", "../../../frontend/src/charts/ConversionAndInterval.svelte", "../../../frontend/src/charts/ChartSwitcher.svelte", "../../../frontend/src/stores/accounts.ts", "../../../frontend/src/tree-table/AccountCellHeader.svelte", "../../../frontend/src/tree-table/helpers.ts", "../../../frontend/src/sidebar/AccountIndicator.svelte", "../../../frontend/src/tree-table/AccountCell.svelte", "../../../frontend/src/tree-table/Diff.svelte", "../../../frontend/src/tree-table/IntervalTreeTableNode.svelte", "../../../frontend/src/tree-table/IntervalTreeTable.svelte", "../../../frontend/src/modals/document-upload.ts", "../../../frontend/src/stores/journal.ts", "../../../frontend/src/lib/regex.ts", "../../../frontend/src/reports/journal/click_handler.ts", "../../../frontend/src/lib/set.ts", "../../../frontend/src/reports/journal/JournalFilters.svelte", "../../../frontend/src/reports/journal/JournalHeaders.svelte", "../../../frontend/src/reports/journal/sort.ts", "../../../frontend/src/reports/journal/JournalTable.svelte", "../../../frontend/src/reports/accounts/AccountReport.svelte", "../../../frontend/src/reports/accounts/index.ts", "../../../frontend/src/sort/SortHeader.svelte", "../../../frontend/src/reports/commodities/CommodityTable.svelte", "../../../frontend/src/reports/commodities/Commodities.svelte", "../../../frontend/src/reports/commodities/index.ts", "../../../frontend/src/lib/fuzzy.ts", "../../../frontend/src/AutocompleteInput.svelte", "../../../frontend/src/entry-forms/AccountInput.svelte", "../../../frontend/src/lib/paths.ts", "../../../frontend/src/lib/tree.ts", "../../../frontend/src/lib/focus.ts", "../../../frontend/src/modals/ModalBase.svelte", "../../../frontend/src/reports/documents/stores.ts", "../../../frontend/src/reports/documents/Accounts.svelte", "../../../frontend/src/editor/DocumentPreviewEditor.svelte", "../../../frontend/src/reports/documents/DocumentPreview.svelte", "../../../frontend/src/reports/documents/Table.svelte", "../../../frontend/src/reports/documents/Documents.svelte", "../../../frontend/src/reports/documents/index.ts", "../../../frontend/src/editor/SaveButton.svelte", "../../../frontend/src/reports/editor/AppMenu.svelte", "../../../frontend/src/reports/editor/AppMenuItem.svelte", "../../../frontend/src/reports/editor/AppMenuSubItem.svelte", "../../../frontend/src/reports/editor/Key.svelte", "../../../frontend/src/lib/sources.ts", "../../../frontend/src/reports/editor/stores.ts", "../../../frontend/src/reports/editor/Sources.svelte", "../../../frontend/src/reports/editor/EditorMenu.svelte", "../../../frontend/src/reports/editor/Editor.svelte", "../../../frontend/src/reports/editor/index.ts", "../../../frontend/src/reports/errors/Errors.svelte", "../../../frontend/src/reports/errors/index.ts", "../../../frontend/src/reports/events/EventTable.svelte", "../../../frontend/src/reports/events/Events.svelte", "../../../frontend/src/reports/events/index.ts", "../../../frontend/src/reports/query/QueryLinks.svelte", "../../../frontend/src/reports/query/QueryTable.svelte", "../../../frontend/src/reports/holdings/Holdings.svelte", "../../../frontend/src/reports/holdings/index.ts", "../../../frontend/node_modules/svelte/src/reactivity/map.js", "../../../frontend/node_modules/svelte/src/reactivity/url-search-params.js", "../../../frontend/node_modules/svelte/src/reactivity/url.js", "../../../frontend/src/entry-forms/AddMetadataButton.svelte", "../../../frontend/src/entry-forms/EntryMetadata.svelte", "../../../frontend/src/entry-forms/Balance.svelte", "../../../frontend/src/entry-forms/Note.svelte", "../../../frontend/src/entry-forms/Posting.svelte", "../../../frontend/src/entry-forms/Transaction.svelte", "../../../frontend/src/entry-forms/Entry.svelte", "../../../frontend/src/reports/import/Extract.svelte", "../../../frontend/src/reports/import/FileList.svelte", "../../../frontend/src/reports/import/ImportFileUpload.svelte", "../../../frontend/src/reports/import/Import.svelte", "../../../frontend/src/reports/import/index.ts", "../../../frontend/src/reports/journal/Journal.svelte", "../../../frontend/src/reports/journal/index.ts", "../../../frontend/src/stores/color_scheme.ts", "../../../frontend/src/reports/options/OptionsTable.svelte", "../../../frontend/src/reports/options/Options.svelte", "../../../frontend/src/reports/options/index.ts", "../../../frontend/src/stores/query.ts", "../../../frontend/src/charts/query-charts.ts", "../../../frontend/src/reports/query/ReadonlyQueryEditor.svelte", "../../../frontend/src/reports/query/QueryBox.svelte", "../../../frontend/src/reports/query/QueryEditor.svelte", "../../../frontend/src/reports/query/Query.svelte", "../../../frontend/src/reports/query/index.ts", "../../../frontend/src/reports/statistics/EntriesByType.svelte", "../../../frontend/src/reports/statistics/UpdateActivity.svelte", "../../../frontend/src/reports/statistics/Statistics.svelte", "../../../frontend/src/reports/statistics/index.ts", "../../../frontend/src/tree-table/TreeTableNode.svelte", "../../../frontend/src/tree-table/TreeTable.svelte", "../../../frontend/src/reports/tree_reports/BalanceSheet.svelte", "../../../frontend/src/reports/tree_reports/IncomeStatement.svelte", "../../../frontend/src/reports/tree_reports/TrialBalance.svelte", "../../../frontend/src/reports/tree_reports/index.ts", "../../../frontend/src/reports/routes.ts", "../../../frontend/src/stores/editor.ts", "../../../frontend/src/modals/AddEntry.svelte", "../../../frontend/src/editor/DeleteButton.svelte", "../../../frontend/src/editor/SliceEditor.svelte", "../../../frontend/src/modals/EntryContextBalances.svelte", "../../../frontend/src/modals/EntryContextLocation.svelte", "../../../frontend/src/modals/Context.svelte", "../../../frontend/src/modals/DocumentUpload.svelte", "../../../frontend/src/modals/Export.svelte", "../../../frontend/src/modals/Modals.svelte", "../../../frontend/src/sidebar/AccountSelector.svelte", "../../../frontend/src/sidebar/SidebarLink.svelte", "../../../frontend/src/sidebar/AsideContents.svelte", "../../../frontend/src/sidebar/AsideWithButton.svelte", "../../../frontend/src/sidebar/FilterForm.svelte", "../../../frontend/src/sidebar/HeaderIcon.svelte", "../../../frontend/src/sidebar/AccountPageTitle.svelte", "../../../frontend/src/sidebar/PageTitle.svelte", "../../../frontend/src/sidebar/Header.svelte", "../../../frontend/src/sidebar/HeaderAndAside.svelte", "../../../frontend/src/sidebar/index.ts", "../../../frontend/src/sort/sortable-table.ts", "../../../frontend/src/svelte-custom-elements.ts", "../../../frontend/src/tree-table/tree-table-custom-element.ts", "../../../frontend/src/app.ts"],
4
+ "sourcesContent": ["/*! (c) Andrea Giammarchi @webreflection ISC */\n(function () {\n 'use strict';\n\n var attributesObserver = (function (whenDefined, MutationObserver) {\n var attributeChanged = function attributeChanged(records) {\n for (var i = 0, length = records.length; i < length; i++) dispatch(records[i]);\n };\n var dispatch = function dispatch(_ref) {\n var target = _ref.target,\n attributeName = _ref.attributeName,\n oldValue = _ref.oldValue;\n target.attributeChangedCallback(attributeName, oldValue, target.getAttribute(attributeName));\n };\n return function (target, is) {\n var attributeFilter = target.constructor.observedAttributes;\n if (attributeFilter) {\n whenDefined(is).then(function () {\n new MutationObserver(attributeChanged).observe(target, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: attributeFilter\n });\n for (var i = 0, length = attributeFilter.length; i < length; i++) {\n if (target.hasAttribute(attributeFilter[i])) dispatch({\n target: target,\n attributeName: attributeFilter[i],\n oldValue: null\n });\n }\n });\n }\n return target;\n };\n });\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (!it) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n var F = function () {};\n return {\n s: F,\n n: function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function () {\n it = it.call(o);\n },\n n: function () {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function (e) {\n didErr = true;\n err = e;\n },\n f: function () {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n }\n\n /*! (c) Andrea Giammarchi - ISC */\n var TRUE = true,\n FALSE = false,\n QSA$1 = 'querySelectorAll';\n\n /**\n * Start observing a generic document or root element.\n * @param {(node:Element, connected:boolean) => void} callback triggered per each dis/connected element\n * @param {Document|Element} [root=document] by default, the global document to observe\n * @param {Function} [MO=MutationObserver] by default, the global MutationObserver\n * @param {string[]} [query=['*']] the selectors to use within nodes\n * @returns {MutationObserver}\n */\n var notify = function notify(callback) {\n var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n var MO = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : MutationObserver;\n var query = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ['*'];\n var loop = function loop(nodes, selectors, added, removed, connected, pass) {\n var _iterator = _createForOfIteratorHelper(nodes),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var node = _step.value;\n if (pass || QSA$1 in node) {\n if (connected) {\n if (!added.has(node)) {\n added.add(node);\n removed[\"delete\"](node);\n callback(node, connected);\n }\n } else if (!removed.has(node)) {\n removed.add(node);\n added[\"delete\"](node);\n callback(node, connected);\n }\n if (!pass) loop(node[QSA$1](selectors), selectors, added, removed, connected, TRUE);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n };\n var mo = new MO(function (records) {\n if (query.length) {\n var selectors = query.join(',');\n var added = new Set(),\n removed = new Set();\n var _iterator2 = _createForOfIteratorHelper(records),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _step2$value = _step2.value,\n addedNodes = _step2$value.addedNodes,\n removedNodes = _step2$value.removedNodes;\n loop(removedNodes, selectors, added, removed, FALSE, FALSE);\n loop(addedNodes, selectors, added, removed, TRUE, FALSE);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n });\n var observe = mo.observe;\n (mo.observe = function (node) {\n return observe.call(mo, node, {\n subtree: TRUE,\n childList: TRUE\n });\n })(root);\n return mo;\n };\n\n var QSA = 'querySelectorAll';\n var _self$1 = self,\n document$2 = _self$1.document,\n Element$1 = _self$1.Element,\n MutationObserver$2 = _self$1.MutationObserver,\n Set$2 = _self$1.Set,\n WeakMap$1 = _self$1.WeakMap;\n var elements = function elements(element) {\n return QSA in element;\n };\n var filter = [].filter;\n var qsaObserver = (function (options) {\n var live = new WeakMap$1();\n var drop = function drop(elements) {\n for (var i = 0, length = elements.length; i < length; i++) live[\"delete\"](elements[i]);\n };\n var flush = function flush() {\n var records = observer.takeRecords();\n for (var i = 0, length = records.length; i < length; i++) {\n parse(filter.call(records[i].removedNodes, elements), false);\n parse(filter.call(records[i].addedNodes, elements), true);\n }\n };\n var matches = function matches(element) {\n return element.matches || element.webkitMatchesSelector || element.msMatchesSelector;\n };\n var notifier = function notifier(element, connected) {\n var selectors;\n if (connected) {\n for (var q, m = matches(element), i = 0, length = query.length; i < length; i++) {\n if (m.call(element, q = query[i])) {\n if (!live.has(element)) live.set(element, new Set$2());\n selectors = live.get(element);\n if (!selectors.has(q)) {\n selectors.add(q);\n options.handle(element, connected, q);\n }\n }\n }\n } else if (live.has(element)) {\n selectors = live.get(element);\n live[\"delete\"](element);\n selectors.forEach(function (q) {\n options.handle(element, connected, q);\n });\n }\n };\n var parse = function parse(elements) {\n var connected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n for (var i = 0, length = elements.length; i < length; i++) notifier(elements[i], connected);\n };\n var query = options.query;\n var root = options.root || document$2;\n var observer = notify(notifier, root, MutationObserver$2, query);\n var attachShadow = Element$1.prototype.attachShadow;\n if (attachShadow) Element$1.prototype.attachShadow = function (init) {\n var shadowRoot = attachShadow.call(this, init);\n observer.observe(shadowRoot);\n return shadowRoot;\n };\n if (query.length) parse(root[QSA](query));\n return {\n drop: drop,\n flush: flush,\n observer: observer,\n parse: parse\n };\n });\n\n var _self = self,\n document$1 = _self.document,\n Map = _self.Map,\n MutationObserver$1 = _self.MutationObserver,\n Object$1 = _self.Object,\n Set$1 = _self.Set,\n WeakMap = _self.WeakMap,\n Element = _self.Element,\n HTMLElement = _self.HTMLElement,\n Node = _self.Node,\n Error = _self.Error,\n TypeError$1 = _self.TypeError,\n Reflect = _self.Reflect;\n var defineProperty = Object$1.defineProperty,\n keys = Object$1.keys,\n getOwnPropertyNames = Object$1.getOwnPropertyNames,\n setPrototypeOf = Object$1.setPrototypeOf;\n var legacy = !self.customElements;\n var expando = function expando(element) {\n var key = keys(element);\n var value = [];\n var ignore = new Set$1();\n var length = key.length;\n for (var i = 0; i < length; i++) {\n value[i] = element[key[i]];\n try {\n delete element[key[i]];\n } catch (SafariTP) {\n ignore.add(i);\n }\n }\n return function () {\n for (var _i = 0; _i < length; _i++) ignore.has(_i) || (element[key[_i]] = value[_i]);\n };\n };\n if (legacy) {\n var HTMLBuiltIn = function HTMLBuiltIn() {\n var constructor = this.constructor;\n if (!classes.has(constructor)) throw new TypeError$1('Illegal constructor');\n var is = classes.get(constructor);\n if (override) return augment(override, is);\n var element = createElement.call(document$1, is);\n return augment(setPrototypeOf(element, constructor.prototype), is);\n };\n var createElement = document$1.createElement;\n var classes = new Map();\n var defined = new Map();\n var prototypes = new Map();\n var registry = new Map();\n var query = [];\n var handle = function handle(element, connected, selector) {\n var proto = prototypes.get(selector);\n if (connected && !proto.isPrototypeOf(element)) {\n var redefine = expando(element);\n override = setPrototypeOf(element, proto);\n try {\n new proto.constructor();\n } finally {\n override = null;\n redefine();\n }\n }\n var method = \"\".concat(connected ? '' : 'dis', \"connectedCallback\");\n if (method in proto) element[method]();\n };\n var _qsaObserver = qsaObserver({\n query: query,\n handle: handle\n }),\n parse = _qsaObserver.parse;\n var override = null;\n var whenDefined = function whenDefined(name) {\n if (!defined.has(name)) {\n var _,\n $ = new Promise(function ($) {\n _ = $;\n });\n defined.set(name, {\n $: $,\n _: _\n });\n }\n return defined.get(name).$;\n };\n var augment = attributesObserver(whenDefined, MutationObserver$1);\n self.customElements = {\n define: function define(is, Class) {\n if (registry.has(is)) throw new Error(\"the name \\\"\".concat(is, \"\\\" has already been used with this registry\"));\n classes.set(Class, is);\n prototypes.set(is, Class.prototype);\n registry.set(is, Class);\n query.push(is);\n whenDefined(is).then(function () {\n parse(document$1.querySelectorAll(is));\n });\n defined.get(is)._(Class);\n },\n get: function get(is) {\n return registry.get(is);\n },\n whenDefined: whenDefined\n };\n defineProperty(HTMLBuiltIn.prototype = HTMLElement.prototype, 'constructor', {\n value: HTMLBuiltIn\n });\n self.HTMLElement = HTMLBuiltIn;\n document$1.createElement = function (name, options) {\n var is = options && options.is;\n var Class = is ? registry.get(is) : registry.get(name);\n return Class ? new Class() : createElement.call(document$1, name);\n };\n // in case ShadowDOM is used through a polyfill, to avoid issues\n // with builtin extends within shadow roots\n if (!('isConnected' in Node.prototype)) defineProperty(Node.prototype, 'isConnected', {\n configurable: true,\n get: function get() {\n return !(this.ownerDocument.compareDocumentPosition(this) & this.DOCUMENT_POSITION_DISCONNECTED);\n }\n });\n } else {\n legacy = !self.customElements.get('extends-br');\n if (legacy) {\n try {\n var BR = function BR() {\n return self.Reflect.construct(HTMLBRElement, [], BR);\n };\n BR.prototype = HTMLLIElement.prototype;\n var is = 'extends-br';\n self.customElements.define('extends-br', BR, {\n 'extends': 'br'\n });\n legacy = document$1.createElement('br', {\n is: is\n }).outerHTML.indexOf(is) < 0;\n var _self$customElements = self.customElements,\n get = _self$customElements.get,\n _whenDefined = _self$customElements.whenDefined;\n self.customElements.whenDefined = function (is) {\n var _this = this;\n return _whenDefined.call(this, is).then(function (Class) {\n return Class || get.call(_this, is);\n });\n };\n } catch (o_O) {}\n }\n }\n if (legacy) {\n var _parseShadow = function _parseShadow(element) {\n var root = shadowRoots.get(element);\n _parse(root.querySelectorAll(this), element.isConnected);\n };\n var customElements = self.customElements;\n var _createElement = document$1.createElement;\n var define = customElements.define,\n _get = customElements.get,\n upgrade = customElements.upgrade;\n var _ref = Reflect || {\n construct: function construct(HTMLElement) {\n return HTMLElement.call(this);\n }\n },\n construct = _ref.construct;\n var shadowRoots = new WeakMap();\n var shadows = new Set$1();\n var _classes = new Map();\n var _defined = new Map();\n var _prototypes = new Map();\n var _registry = new Map();\n var shadowed = [];\n var _query = [];\n var getCE = function getCE(is) {\n return _registry.get(is) || _get.call(customElements, is);\n };\n var _handle = function _handle(element, connected, selector) {\n var proto = _prototypes.get(selector);\n if (connected && !proto.isPrototypeOf(element)) {\n var redefine = expando(element);\n _override = setPrototypeOf(element, proto);\n try {\n new proto.constructor();\n } finally {\n _override = null;\n redefine();\n }\n }\n var method = \"\".concat(connected ? '' : 'dis', \"connectedCallback\");\n if (method in proto) element[method]();\n };\n var _qsaObserver2 = qsaObserver({\n query: _query,\n handle: _handle\n }),\n _parse = _qsaObserver2.parse;\n var _qsaObserver3 = qsaObserver({\n query: shadowed,\n handle: function handle(element, connected) {\n if (shadowRoots.has(element)) {\n if (connected) shadows.add(element);else shadows[\"delete\"](element);\n if (_query.length) _parseShadow.call(_query, element);\n }\n }\n }),\n parseShadowed = _qsaObserver3.parse;\n // qsaObserver also patches attachShadow\n // be sure this runs *after* that\n var attachShadow = Element.prototype.attachShadow;\n if (attachShadow) Element.prototype.attachShadow = function (init) {\n var root = attachShadow.call(this, init);\n shadowRoots.set(this, root);\n return root;\n };\n var _whenDefined2 = function _whenDefined2(name) {\n if (!_defined.has(name)) {\n var _,\n $ = new Promise(function ($) {\n _ = $;\n });\n _defined.set(name, {\n $: $,\n _: _\n });\n }\n return _defined.get(name).$;\n };\n var _augment = attributesObserver(_whenDefined2, MutationObserver$1);\n var _override = null;\n getOwnPropertyNames(self).filter(function (k) {\n return /^HTML.*Element$/.test(k);\n }).forEach(function (k) {\n var HTMLElement = self[k];\n function HTMLBuiltIn() {\n var constructor = this.constructor;\n if (!_classes.has(constructor)) throw new TypeError$1('Illegal constructor');\n var _classes$get = _classes.get(constructor),\n is = _classes$get.is,\n tag = _classes$get.tag;\n if (is) {\n if (_override) return _augment(_override, is);\n var element = _createElement.call(document$1, tag);\n element.setAttribute('is', is);\n return _augment(setPrototypeOf(element, constructor.prototype), is);\n } else return construct.call(this, HTMLElement, [], constructor);\n }\n\n defineProperty(HTMLBuiltIn.prototype = HTMLElement.prototype, 'constructor', {\n value: HTMLBuiltIn\n });\n defineProperty(self, k, {\n value: HTMLBuiltIn\n });\n });\n document$1.createElement = function (name, options) {\n var is = options && options.is;\n if (is) {\n var Class = _registry.get(is);\n if (Class && _classes.get(Class).tag === name) return new Class();\n }\n var element = _createElement.call(document$1, name);\n if (is) element.setAttribute('is', is);\n return element;\n };\n customElements.get = getCE;\n customElements.whenDefined = _whenDefined2;\n customElements.upgrade = function (element) {\n var is = element.getAttribute('is');\n if (is) {\n var _constructor = _registry.get(is);\n if (_constructor) {\n _augment(setPrototypeOf(element, _constructor.prototype), is);\n // apparently unnecessary because this is handled by qsa observer\n // if (element.isConnected && element.connectedCallback)\n // element.connectedCallback();\n return;\n }\n }\n upgrade.call(customElements, element);\n };\n customElements.define = function (is, Class, options) {\n if (getCE(is)) throw new Error(\"'\".concat(is, \"' has already been defined as a custom element\"));\n var selector;\n var tag = options && options[\"extends\"];\n _classes.set(Class, tag ? {\n is: is,\n tag: tag\n } : {\n is: '',\n tag: is\n });\n if (tag) {\n selector = \"\".concat(tag, \"[is=\\\"\").concat(is, \"\\\"]\");\n _prototypes.set(selector, Class.prototype);\n _registry.set(is, Class);\n _query.push(selector);\n } else {\n define.apply(customElements, arguments);\n shadowed.push(selector = is);\n }\n _whenDefined2(is).then(function () {\n if (tag) {\n _parse(document$1.querySelectorAll(selector));\n shadows.forEach(_parseShadow, [selector]);\n } else parseShadowed(document$1.querySelectorAll(selector));\n });\n _defined.get(is)._(Class);\n };\n }\n\n})();\n", "import { log_error } from \"./log.ts\";\n\nexport class CopyableText extends HTMLElement {\n constructor() {\n super();\n\n this.addEventListener(\"click\", (event) => {\n const text = this.getAttribute(\"data-clipboard-text\");\n if (text != null) {\n navigator.clipboard.writeText(text).catch(log_error);\n }\n event.stopPropagation();\n });\n }\n}\n", "import type { EditorView } from \"@codemirror/view\";\nimport type { Attachment } from \"svelte/attachments\";\n\nimport { log_error } from \"../log.ts\";\n\n/**\n * Read-only editors in the help pages.\n *\n * This lazily imports ./setup.ts to only pull in codemirror\n * and the Beancount parser when used.\n */\nexport class BeancountTextarea extends HTMLTextAreaElement {\n constructor() {\n super();\n import(\"./beancount.ts\")\n .then(({ init_textarea }) => {\n init_textarea(this);\n })\n .catch(log_error);\n }\n}\n\n/**\n * A Svelte attachment to add an editor to a DOM element.\n */\nexport function attach_editor(\n editor: EditorView,\n): Attachment<HTMLDivElement | HTMLPreElement> {\n return (el) => {\n el.appendChild(editor.dom);\n\n return () => {\n el.removeChild(editor.dom);\n };\n };\n}\n", "import type { Attachment } from \"svelte/attachments\";\n\n/**\n * Add a tooltip showing the keyboard shortcut over the target element.\n * @param target - The target element to show the tooltip on.\n * @returns A function to remove event handler.\n */\nfunction showTooltip(target: HTMLElement, description: string): () => void {\n const { hidden } = target;\n if (hidden) {\n target.hidden = false;\n }\n const tooltip = document.createElement(\"div\");\n tooltip.className = \"keyboard-tooltip\";\n tooltip.textContent = description;\n document.body.appendChild(tooltip);\n const targetRect = target.getBoundingClientRect();\n // Padded 10px to the left if there is space or centered otherwise\n const left =\n targetRect.left +\n Math.min((target.offsetWidth - tooltip.offsetWidth) / 2, 10);\n const top = targetRect.top + (target.offsetHeight - tooltip.offsetHeight) / 2;\n tooltip.style.left = `${left.toString()}px`;\n tooltip.style.top = `${(top + window.scrollY).toString()}px`;\n return () => {\n tooltip.remove();\n if (hidden) {\n target.hidden = true;\n }\n };\n}\n\n/**\n * Show all keyboard shortcut tooltips.\n */\nfunction showTooltips(): () => void {\n const removes: (() => void)[] = [];\n document.querySelectorAll(\"[data-key]\").forEach((el) => {\n const key = el.getAttribute(\"data-key\");\n if (el instanceof HTMLElement && key != null) {\n removes.push(showTooltip(el, key));\n }\n });\n return () => {\n removes.forEach((r) => {\n r();\n });\n };\n}\n\n/**\n * Ignore events originating from editable elements.\n * @param element - The element to check.\n * @returns true if the element is one of input/select/textarea or a\n * contentEditable element.\n */\nfunction isEditableElement(element: EventTarget | null): boolean {\n return (\n element instanceof HTMLElement &&\n (element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement ||\n element.isContentEditable)\n );\n}\n\ntype UppercaseLetter =\n | \"A\"\n | \"B\"\n | \"C\"\n | \"D\"\n | \"E\"\n | \"F\"\n | \"G\"\n | \"H\"\n | \"I\"\n | \"J\"\n | \"L\"\n | \"M\"\n | \"N\"\n | \"O\"\n | \"P\"\n | \"Q\"\n | \"R\"\n | \"S\"\n | \"T\"\n | \"U\"\n | \"V\"\n | \"W\"\n | \"X\"\n | \"Y\"\n | \"Z\";\ntype LowercaseLetter = Lowercase<UppercaseLetter>;\ntype Letter = UppercaseLetter | LowercaseLetter;\n// This type can be extended as needed to support all the desired\n// key combinations\ntype KeyCombo =\n | \"?\"\n | Letter\n | `${\"Control\" | \"Meta\"}+${\"d\" | \"s\" | \"Enter\"}`\n // d,s,t - journal filters; f - filters; g - reports\n | `${\"d\" | \"f\" | \"g\" | \"s\" | \"t\"} ${Letter}`;\n/** A handler function or an element to click. */\ntype KeyboardShortcutAction = ((event: KeyboardEvent) => void) | HTMLElement;\nconst keyboardShortcuts = new Map<string, KeyboardShortcutAction>();\n// The last typed character to check for sequences of two keys.\nlet lastChar = \"\";\n\n/**\n * Handle a `keydown` event on the document.\n *\n * Dispatch to the relevant handler.\n */\nfunction keydown(event: KeyboardEvent): void {\n if (isEditableElement(event.target)) {\n // ignore events in editable elements.\n return;\n }\n let eventKey = event.key;\n if (event.metaKey) {\n eventKey = `Meta+${eventKey}`;\n }\n if (event.altKey) {\n eventKey = `Alt+${eventKey}`;\n }\n if (event.ctrlKey) {\n eventKey = `Control+${eventKey}`;\n }\n const lastTwoKeys = `${lastChar} ${eventKey}`;\n const handler =\n keyboardShortcuts.get(lastTwoKeys) ?? keyboardShortcuts.get(eventKey);\n if (handler) {\n if (handler instanceof HTMLInputElement) {\n event.preventDefault();\n handler.focus();\n } else if (handler instanceof HTMLElement) {\n event.preventDefault();\n handler.click();\n } else {\n handler(event);\n }\n }\n if (event.key !== \"Alt\" && event.key !== \"Control\" && event.key !== \"Shift\") {\n lastChar = eventKey;\n }\n}\n\n/** A type to specify a platform-dependent keyboard shortcut. */\nexport type KeySpec =\n | KeyCombo\n | { key: KeyCombo; mac?: KeyCombo; note?: string };\n\nconst isMac =\n // This still seems to be the least bad way to check whether we are running on macOS or iOS\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n navigator.platform.startsWith(\"Mac\") || navigator.platform === \"iPhone\";\n\nexport const modKey = isMac ? \"Cmd\" : \"Ctrl\";\n\n/**\n * Get the keyboard key specifier string for the current platform.\n * @param spec - The key spec.\n */\nfunction getKeySpecKey(spec: KeySpec): KeyCombo {\n if (typeof spec === \"string\") {\n return spec;\n }\n return isMac ? (spec.mac ?? spec.key) : spec.key;\n}\n\n/**\n * Get the keyboard key description.\n * @param spec - The key spec.\n */\nfunction getKeySpecDescription(spec: KeySpec): string {\n if (typeof spec === \"string\") {\n return spec;\n }\n const key = isMac ? (spec.mac ?? spec.key) : spec.key;\n return spec.note != null ? `${key} - ${spec.note}` : key;\n}\n\n/**\n * Bind an event handler to a key.\n * @param spec - The key to bind.\n * @param handler - The callback to run on key press.\n * @returns A function to unbind the keyboard handler.\n */\nfunction bindKey(spec: KeySpec, handler: KeyboardShortcutAction): () => void {\n const key = getKeySpecKey(spec);\n const sequence = key.split(\" \");\n if (sequence.length > 2) {\n console.error(\"Only key sequences of length <=2 are supported: \", key);\n }\n if (keyboardShortcuts.has(key)) {\n console.warn(\"Duplicate keyboard shortcut: \", key, handler);\n }\n keyboardShortcuts.set(key, handler);\n return () => {\n keyboardShortcuts.delete(key);\n };\n}\n\n/**\n * A svelte attachment to attach a global keyboard shortcut.\n *\n * This will attach a listener for the given key (or key sequence of length 2).\n * This listener will focus the given node if it is an <input> element and\n * trigger a click on it otherwise.\n */\nexport const keyboardShortcut = (\n spec?: KeySpec,\n): Attachment<HTMLElement> | null => {\n if (spec == null) {\n return null;\n }\n return (node) => {\n node.setAttribute(\"data-key\", getKeySpecDescription(spec));\n const unbind = bindKey(spec, node);\n return () => {\n unbind();\n node.removeAttribute(\"data-key\");\n };\n };\n};\n\n/**\n * Register the keys to show/hide the tooltips and register the global keydown handler.\n */\nexport function initGlobalKeyboardShortcuts(): void {\n document.addEventListener(\"keydown\", keydown);\n\n bindKey(\"?\", () => {\n const hide = showTooltips();\n const once = () => {\n hide();\n document.removeEventListener(\"mousedown\", once);\n document.removeEventListener(\"keydown\", once);\n document.removeEventListener(\"scroll\", once);\n };\n document.addEventListener(\"mousedown\", once);\n document.addEventListener(\"keydown\", once);\n document.addEventListener(\"scroll\", once);\n });\n}\n", "import { derived } from \"svelte/store\";\n\nimport { searchParams } from \"./url.ts\";\n\n/** The time filter. */\nexport const time_filter = derived(\n searchParams,\n ($searchParams) => $searchParams.get(\"time\") ?? \"\",\n);\n/** The account filter. */\nexport const account_filter = derived(\n searchParams,\n ($searchParams) => $searchParams.get(\"account\") ?? \"\",\n);\n/** The filter with our custom query syntax. */\nexport const fql_filter = derived(\n searchParams,\n ($searchParams) => $searchParams.get(\"filter\") ?? \"\",\n);\n\n/** The three entry filters that Fava supports. */\nexport interface Filters extends Record<string, string> {\n account: string;\n filter: string;\n time: string;\n}\n\n/** The three filters as well as conversion and interval. */\nexport interface FiltersConversionInterval extends Filters {\n conversion: string;\n interval: string;\n}\n\n/** The current filters, can be used as URL parameters. */\nexport const filter_params = derived(\n [time_filter, account_filter, fql_filter],\n ([$time_filter, $account_filter, $fql_filter]): Filters => ({\n time: $time_filter,\n account: $account_filter,\n filter: $fql_filter,\n }),\n);\n\nexport function getURLFilters(url: URL): FiltersConversionInterval {\n return {\n account: url.searchParams.get(\"account\") ?? \"\",\n filter: url.searchParams.get(\"filter\") ?? \"\",\n time: url.searchParams.get(\"time\") ?? \"\",\n conversion: url.searchParams.get(\"conversion\") ?? \"\",\n interval: url.searchParams.get(\"interval\") ?? \"\",\n };\n}\n", "/**\n * ISO 4217 currency codes.\n *\n * https://www.currency-iso.org/en/home/tables/table-a1.html\n */\nexport default new Set([\n \"AED\",\n \"AFN\",\n \"ALL\",\n \"AMD\",\n \"ANG\",\n \"AOA\",\n \"ARS\",\n \"AUD\",\n \"AWG\",\n \"AZN\",\n \"BAM\",\n \"BBD\",\n \"BDT\",\n \"BGN\",\n \"BHD\",\n \"BIF\",\n \"BMD\",\n \"BND\",\n \"BOB\",\n \"BOV\",\n \"BRL\",\n \"BSD\",\n \"BTN\",\n \"BWP\",\n \"BYN\",\n \"BZD\",\n \"CAD\",\n \"CDF\",\n \"CHE\",\n \"CHF\",\n \"CHW\",\n \"CLF\",\n \"CLP\",\n \"CNY\",\n \"COP\",\n \"COU\",\n \"CRC\",\n \"CUC\",\n \"CUP\",\n \"CVE\",\n \"CZK\",\n \"DJF\",\n \"DKK\",\n \"DOP\",\n \"DZD\",\n \"EGP\",\n \"ERN\",\n \"ETB\",\n \"EUR\",\n \"FJD\",\n \"FKP\",\n \"GBP\",\n \"GEL\",\n \"GHS\",\n \"GIP\",\n \"GMD\",\n \"GNF\",\n \"GTQ\",\n \"GYD\",\n \"HKD\",\n \"HNL\",\n \"HRK\",\n \"HTG\",\n \"HUF\",\n \"IDR\",\n \"ILS\",\n \"INR\",\n \"IQD\",\n \"IRR\",\n \"ISK\",\n \"JMD\",\n \"JOD\",\n \"JPY\",\n \"KES\",\n \"KGS\",\n \"KHR\",\n \"KMF\",\n \"KPW\",\n \"KRW\",\n \"KWD\",\n \"KYD\",\n \"KZT\",\n \"LAK\",\n \"LBP\",\n \"LKR\",\n \"LRD\",\n \"LSL\",\n \"LYD\",\n \"MAD\",\n \"MDL\",\n \"MGA\",\n \"MKD\",\n \"MMK\",\n \"MNT\",\n \"MOP\",\n \"MRU\",\n \"MUR\",\n \"MVR\",\n \"MWK\",\n \"MXN\",\n \"MXV\",\n \"MYR\",\n \"MZN\",\n \"NAD\",\n \"NGN\",\n \"NIO\",\n \"NOK\",\n \"NPR\",\n \"NZD\",\n \"OMR\",\n \"PAB\",\n \"PEN\",\n \"PGK\",\n \"PHP\",\n \"PKR\",\n \"PLN\",\n \"PYG\",\n \"QAR\",\n \"RON\",\n \"RSD\",\n \"RUB\",\n \"RWF\",\n \"SAR\",\n \"SBD\",\n \"SCR\",\n \"SDG\",\n \"SEK\",\n \"SGD\",\n \"SHP\",\n \"SLL\",\n \"SOS\",\n \"SRD\",\n \"SSP\",\n \"STN\",\n \"SVC\",\n \"SYP\",\n \"SZL\",\n \"THB\",\n \"TJS\",\n \"TMT\",\n \"TND\",\n \"TOP\",\n \"TRY\",\n \"TTD\",\n \"TWD\",\n \"TZS\",\n \"UAH\",\n \"UGX\",\n \"USD\",\n \"USN\",\n \"UYI\",\n \"UYU\",\n \"UYW\",\n \"UZS\",\n \"VES\",\n \"VND\",\n \"VUV\",\n \"WST\",\n \"XAF\",\n \"XAG\",\n \"XAU\",\n \"XBA\",\n \"XBB\",\n \"XBC\",\n \"XBD\",\n \"XCD\",\n \"XDR\",\n \"XOF\",\n \"XPD\",\n \"XPF\",\n \"XPT\",\n \"XSU\",\n \"XTS\",\n \"XUA\",\n \"XXX\",\n \"YER\",\n \"ZAR\",\n \"ZMW\",\n \"ZWL\",\n]);\n", "import { derived } from \"svelte/store\";\n\nimport { derived_array } from \"../lib/store.ts\";\nimport { ledgerData } from \"./index.ts\";\n\n/** Beancount's options */\nconst options = derived(ledgerData, (v) => v.options);\n/** Beancount ledger title */\nexport const ledger_title = derived(options, ($options) => $options.title);\n/** The operating currencies (sorted). */\nexport const operating_currency = derived_array(options, ($options) =>\n [...$options.operating_currency].sort(),\n);\nconst filename = derived(options, ($options) => $options.filename);\nconst include = derived_array(options, ($options) => $options.include);\n/** All included files, with the main one first. */\nexport const sources = derived(\n [filename, include],\n ([$filename, $include]) => new Set([$filename, ...$include]),\n);\n\nexport const documents = derived_array(\n options,\n ($options) => $options.documents,\n);\nexport const name_assets = derived(options, ($options) => $options.name_assets);\nexport const name_equity = derived(options, ($options) => $options.name_equity);\nexport const name_expenses = derived(\n options,\n ($options) => $options.name_expenses,\n);\nexport const name_income = derived(options, ($options) => $options.name_income);\nexport const name_liabilities = derived(\n options,\n ($options) => $options.name_liabilities,\n);\n", "import { derived, writable } from \"svelte/store\";\n\nimport { _ } from \"../i18n.ts\";\nimport iso4217currencies from \"../lib/iso4217.ts\";\nimport { localStorageSyncedStore } from \"../lib/store.ts\";\nimport type { ValidationT } from \"../lib/validation.ts\";\nimport { array, constants, string } from \"../lib/validation.ts\";\nimport { conversion_currencies } from \"./fava_options.ts\";\nimport { currencies_sorted } from \"./index.ts\";\nimport { operating_currency } from \"./options.ts\";\n\n/** This store is used to switch to the same chart (as identified by name) on navigation. */\nexport const lastActiveChartName = writable<string | null>(null);\n\nconst hierarchy_chart_mode_validator = constants(\n \"treemap\",\n \"sunburst\",\n \"icicle\",\n);\ntype HierarchyChartMode = ValidationT<typeof hierarchy_chart_mode_validator>;\n\n/** The currently selected hierarchy chart mode. */\nexport const hierarchyChartMode = localStorageSyncedStore<HierarchyChartMode>(\n \"hierarchy-chart-mode\",\n hierarchy_chart_mode_validator,\n () => \"treemap\",\n () => [\n [\"treemap\", _(\"Treemap\")],\n [\"sunburst\", _(\"Sunburst\")],\n [\"icicle\", _(\"Icicle\")],\n ],\n);\n\nconst line_chart_mode_validator = constants(\"line\", \"area\");\ntype LineChartMode = ValidationT<typeof line_chart_mode_validator>;\n\n/** The currently selected line chart mode. */\nexport const lineChartMode = localStorageSyncedStore<LineChartMode>(\n \"line-chart-mode\",\n line_chart_mode_validator,\n () => \"line\",\n () => [\n [\"line\", _(\"Line chart\")],\n [\"area\", _(\"Area chart\")],\n ],\n);\n\nconst bar_chart_mode_validator = constants(\"stacked\", \"single\");\ntype BarChartMode = ValidationT<typeof bar_chart_mode_validator>;\n\n/** The currently selected bar chart mode. */\nexport const barChartMode = localStorageSyncedStore<BarChartMode>(\n \"bar-chart-mode\",\n bar_chart_mode_validator,\n () => \"stacked\",\n () => [\n [\"stacked\", _(\"Stacked Bars\")],\n [\"single\", _(\"Single Bars\")],\n ],\n);\n\n/** The currencies that are currently not shown in the bar and line charts. */\nexport const chartToggledCurrencies = localStorageSyncedStore(\n \"chart-toggled-currencies\",\n array(string),\n () => [],\n);\n\n/** The currencies to over as conversion options. */\nconst currency_suggestions = derived(\n [operating_currency, currencies_sorted, conversion_currencies],\n ([$operating_currency, $currencies_sorted, $conversion_currencies]) =>\n $conversion_currencies.length > 0\n ? $conversion_currencies\n : new Set([\n ...$operating_currency,\n ...$currencies_sorted.filter((c) => iso4217currencies.has(c)),\n ]),\n);\n\n/** The possible conversion options and their human-readable descriptions. */\nexport const conversions = derived(\n currency_suggestions,\n ($currency_suggestions): readonly string[] => [\n \"at_cost\",\n \"at_value\",\n \"units\",\n ...$currency_suggestions,\n ],\n);\n", "export default function(x) {\n return x;\n}\n", "import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n", "export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n", "import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n", "export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n", "export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n", "export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", "export default x => () => x;\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n", "export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n", "export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n", "import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n", "import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n", "export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n", "export default function constants(x) {\n return function() {\n return x;\n };\n}\n", "export default function number(x) {\n return +x;\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n", "import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n", "export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n", "import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n", "import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n", "import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n", "import { format } from \"d3-format\";\nimport type { NumberValue } from \"d3-scale\";\nimport { derived } from \"svelte/store\";\n\nimport type { FormatterContext } from \"../format.ts\";\nimport {\n dateFormat,\n formatter_context,\n localeFormatter,\n replaceNumbers,\n timeFilterDateFormat,\n} from \"../format.ts\";\nimport { locale } from \"./fava_options.ts\";\nimport { incognito, precisions } from \"./index.ts\";\nimport { interval } from \"./url.ts\";\n\nconst short_format = format(\".3s\");\n\n/** Render a number to a short string, for example for the y-axis of a line chart. */\nexport const short = derived(incognito, ($incognito) =>\n $incognito\n ? (n: NumberValue) => replaceNumbers(short_format(n))\n : short_format,\n);\n\n/** Format a number for which the currency is not known. */\nexport const num = derived(locale, ($locale) => localeFormatter($locale));\n\n/** Formatting context for currencies. */\nexport const ctx = derived(\n [incognito, locale, precisions],\n ([$incognito, $locale, $precisions]): FormatterContext =>\n formatter_context($incognito, $locale, $precisions),\n);\n\nexport const currentDateFormat = derived(interval, (val) => dateFormat[val]);\nexport const currentTimeFilterDateFormat = derived(\n interval,\n (val) => timeFilterDateFormat[val],\n);\n", "<script lang=\"ts\">\n import type { Axis } from \"d3-axis\";\n import type { NumberValue } from \"d3-scale\";\n import { select } from \"d3-selection\";\n\n type Ax = Axis<string> | Axis<NumberValue>;\n\n interface Props {\n /** The d3 axis to use. */\n axis: Ax;\n /** True if this is an x axis. */\n x?: boolean;\n /** True if this is a y axis. */\n y?: boolean;\n /** Show a pronounced line at zero (for y axis). */\n lineAtZero?: number;\n /** Height of the chart (needed for the correct offset of an x axis) */\n innerHeight?: number;\n }\n\n let {\n axis,\n x = false,\n y = false,\n lineAtZero,\n innerHeight = 0,\n }: Props = $props();\n\n let transform = $derived(\n x ? `translate(0,${innerHeight.toString()})` : undefined,\n );\n</script>\n\n<g\n class:y\n {transform}\n {@attach (node: SVGGElement) => {\n const selection = select(node);\n\n $effect(() => {\n axis(selection);\n });\n }}\n>\n {#if y && lineAtZero != null}\n <g class=\"zero\" transform={`translate(0,${lineAtZero.toString()})`}>\n <line x2={-axis.tickSizeInner()} />\n </g>\n {/if}\n</g>\n\n<style>\n g :global(path),\n g :global(line) {\n fill: none;\n stroke: var(--chart-axis);\n shape-rendering: crispedges;\n }\n\n g.y :global(line),\n g.y :global(path.domain) {\n opacity: 0.2;\n }\n\n g.y .zero line {\n opacity: 1;\n stroke: var(--chart-line-at-zero);\n }\n</style>\n", "import { hcl } from \"d3-color\";\nimport { scaleOrdinal } from \"d3-scale\";\nimport { derived, get as store_get } from \"svelte/store\";\n\nimport { currentTimeFilterDateFormat } from \"../stores/format.ts\";\nimport { accounts, currencies_sorted } from \"../stores/index.ts\";\nimport { operating_currency } from \"../stores/options.ts\";\n\n/**\n * Set the time filter to the given value (formatted according to the current interval).\n * @param date - a date.\n * @returns A URL for the given interval.\n */\nexport function urlForTimeFilter(date: Date): string {\n const url = new URL(window.location.href);\n url.searchParams.set(\"time\", store_get(currentTimeFilterDateFormat)(date));\n return url.toString();\n}\n\n/**\n * Include zero in the extent.\n *\n * For convenience this also turns a empty extent into [0,1].\n */\nexport function includeZero([from, to]:\n | [number, number]\n | [undefined, undefined]): [number, number] {\n if (from === undefined) {\n return [0, 1];\n }\n return [Math.min(0, from), Math.max(0, to)];\n}\n\n/**\n * Pad the extent by a factor of 0.05.\n *\n * For convenience this also turns a empty extent into [0,1].\n */\nexport function padExtent([from, to]:\n | [number, number]\n | [undefined, undefined]): [number, number] {\n if (from === undefined) {\n return [0, 1];\n }\n const diff = to - from;\n return [from - diff * 0.03, to + diff * 0.03];\n}\n\n/**\n * Filter ticks to have them not overlap.\n * @param domain - The domain of values to filter.\n * @param count - The number of ticks that should be returned.\n */\nexport function filterTicks(domain: string[], count: number): string[] {\n if (domain.length <= count) {\n return domain;\n }\n const showIndices = Math.ceil(domain.length / count);\n return domain.filter((_d, i) => i % showIndices === 0);\n}\n\n/**\n * Generate an array of colors.\n *\n * Uses the HCL color space in an attempt to generate colours that are\n * to be perceived to be of the same brightness.\n * @param count - the number of colors to generate.\n * @param chroma - optional, the chroma channel value.\n * @param luminance - optional, the luminance channel value.\n */\nexport function hclColorRange(\n count: number,\n chroma = 45,\n luminance = 70,\n): string[] {\n const offset = 270;\n const delta = 360 / count;\n const colors = [...Array(count).keys()].map((index) => {\n const hue = (index * delta + offset) % 360;\n return hcl(hue, chroma, luminance);\n });\n return colors.map((c) => c.toString());\n}\n\nexport const colors10 = hclColorRange(10);\nexport const colors15 = hclColorRange(15, 30, 80);\n\n/*\n * The color scales for the charts.\n *\n * The scales for treemap and sunburst charts will be initialised with all\n * accounts on page init and currencies with all commodities.\n */\nexport const scatterplotScale = scaleOrdinal(colors10);\n\nexport const treemapScale = derived(accounts, ($accounts) =>\n scaleOrdinal(colors15).domain($accounts),\n);\n\nexport const sunburstScale = derived(accounts, ($accounts) =>\n scaleOrdinal(colors10).domain($accounts),\n);\n\nexport const currenciesScale = derived(\n [operating_currency, currencies_sorted],\n ([$operating_currency, $currencies_sorted]) =>\n scaleOrdinal(colors10).domain([\n ...$operating_currency,\n ...$currencies_sorted,\n ]),\n);\n", "<script lang=\"ts\">\n import { extent } from \"d3-array\";\n import { axisBottom, axisLeft } from \"d3-axis\";\n import { scaleBand, scaleLinear, scaleOrdinal } from \"d3-scale\";\n\n import { urlForAccount } from \"../helpers.ts\";\n import { barChartMode, chartToggledCurrencies } from \"../stores/chart.ts\";\n import { ctx, currentTimeFilterDateFormat, short } from \"../stores/format.ts\";\n import Axis from \"./Axis.svelte\";\n import type { BarChart } from \"./bar.ts\";\n import {\n currenciesScale,\n filterTicks,\n hclColorRange,\n includeZero,\n padExtent,\n urlForTimeFilter,\n } from \"./helpers.ts\";\n import { followingTooltip } from \"./tooltip.ts\";\n\n interface Props {\n chart: BarChart;\n width: number;\n }\n\n let { chart, width }: Props = $props();\n\n const today = new Date();\n const maxColumnWidth = 100;\n const margin = { top: 10, right: 10, bottom: 30, left: 40 };\n const height = 250;\n\n let accounts = $derived(chart.accounts);\n\n let filtered = $derived(chart.filter($chartToggledCurrencies));\n let currencies = $derived(filtered.currencies);\n let bar_groups = $derived(filtered.bar_groups);\n let stacks = $derived(filtered.stacks);\n\n let innerHeight = $derived(height - margin.top - margin.bottom);\n let maxWidth = $derived(bar_groups.length * maxColumnWidth);\n let offset = $derived(margin.left + Math.max(0, width - maxWidth) / 2);\n let innerWidth = $derived(\n Math.min(width - margin.left - margin.right, maxWidth),\n );\n\n /** Whether to display stacked bars. */\n let showStackedBars = $derived(\n $barChartMode === \"stacked\" && chart.hasStackedData,\n );\n /** The currently hovered account. */\n let highlighted: string | null = $state(null);\n\n // Scales\n let x0 = $derived(\n scaleBand([0, innerWidth])\n .domain(bar_groups.map((d) => d.label))\n .padding(0.1),\n );\n let x1 = $derived(scaleBand([0, x0.bandwidth()]).domain(currencies));\n\n let yExtent = $derived(\n showStackedBars\n ? extent(stacks.flatMap(([, s]) => s.flat(2)))\n : extent(\n bar_groups.flatMap((d) => d.values),\n (d) => d.value,\n ),\n );\n let y = $derived(\n scaleLinear([innerHeight, 0]).domain(padExtent(includeZero(yExtent))),\n );\n\n let colorScale = $derived(\n scaleOrdinal(hclColorRange(accounts.length)).domain(accounts),\n );\n\n // Axes\n let xAxis = $derived(\n axisBottom(x0)\n .tickSizeOuter(0)\n .tickValues(filterTicks(x0.domain(), innerWidth / 70)),\n );\n let yAxis = $derived(\n axisLeft(y).tickPadding(6).tickSize(-innerWidth).tickFormat($short),\n );\n</script>\n\n<svg viewBox={`0 0 ${width.toString()} ${height.toString()}`}>\n <g transform={`translate(${offset.toString()},${margin.top.toString()})`}>\n <Axis x axis={xAxis} {innerHeight} />\n <Axis y axis={yAxis} lineAtZero={y(0)} />\n {#each bar_groups as group (group.date)}\n <g\n class=\"group\"\n class:desaturate={group.date > today}\n {@attach followingTooltip(() => chart.tooltipText($ctx, group))}\n transform={`translate(${(x0(group.label) ?? 0).toString()},0)`}\n >\n <rect\n class=\"group-box\"\n x={(x0.bandwidth() - x0.step()) / 2}\n width={x0.step()}\n height={innerHeight}\n />\n <a\n href={urlForTimeFilter(group.date)}\n aria-label={$currentTimeFilterDateFormat(group.date)}\n >\n <rect\n class=\"axis-group-box\"\n transform={`translate(0,${innerHeight.toString()})`}\n width={x0.bandwidth()}\n height={margin.bottom}\n />\n </a>\n {#if !showStackedBars}\n {#each group.values as { currency, value, budget } (currency)}\n <rect\n fill={$currenciesScale(currency)}\n width={x1.bandwidth()}\n x={x1(currency)}\n y={y(Math.max(0, value))}\n height={Math.abs(y(value) - y(0))}\n />\n <rect\n class=\"budget\"\n width={x1.bandwidth()}\n x={x1(currency)}\n y={y(Math.max(0, budget))}\n height={Math.abs(y(budget) - y(0))}\n />\n {/each}\n {/if}\n </g>\n {/each}\n {#if showStackedBars}\n {#each stacks as [currency, account_stacks] (currency)}\n {#each account_stacks as stack (stack.key)}\n {@const account = stack.key}\n <a href={$urlForAccount(account)}>\n <g\n class=\"category\"\n class:faded={highlighted != null && account !== highlighted}\n onmouseover={() => {\n highlighted = account;\n }}\n onfocus={() => {\n highlighted = account;\n }}\n onmouseout={() => {\n highlighted = null;\n }}\n onblur={() => {\n highlighted = null;\n }}\n role=\"img\"\n >\n {#each stack as bar (bar.data.date)}\n <rect\n class:desaturate={bar.data.date > today}\n width={x1.bandwidth()}\n x={(x0(bar.data.label) ?? 0) + (x1(currency) ?? 0)}\n y={y(Math.max(bar[0], bar[1]))}\n height={Math.abs(y(bar[1]) - y(bar[0]))}\n fill={colorScale(account)}\n {@attach followingTooltip(() =>\n chart.tooltipTextAccount(\n $ctx,\n bar.data,\n account,\n $chartToggledCurrencies,\n ),\n )}\n />\n {/each}\n </g>\n </a>\n {/each}\n {/each}\n {/if}\n </g>\n</svg>\n\n<style>\n .category.faded {\n opacity: 0.5;\n }\n\n .axis-group-box {\n cursor: pointer;\n opacity: 0;\n }\n\n .group-box {\n opacity: 0;\n }\n\n .group:hover .group-box {\n opacity: 0.1;\n }\n\n .budget {\n opacity: 0.3;\n }\n\n .desaturate {\n filter: saturate(50%);\n }\n</style>\n", "<script lang=\"ts\">\n import type { Writable } from \"svelte/store\";\n\n import { currenciesScale } from \"./helpers.ts\";\n\n interface Props {\n /** The chart legend to show. */\n legend: readonly string[];\n /** Whether to use currency colors. */\n color: boolean;\n /** A list of elements that are toggled. */\n toggled?: Writable<string[]>;\n /** Alternatively, a single active element, all others are toggled. */\n active?: Writable<string | null>;\n }\n\n let { legend, color, toggled, active }: Props = $props();\n</script>\n\n<div>\n {#each legend as item (item)}\n <button\n type=\"button\"\n onclick={() => {\n if (active) {\n active.set(item);\n } else if (toggled) {\n toggled.update((v) =>\n v.includes(item) ? v.filter((i) => i !== item) : [...v, item],\n );\n }\n }}\n class:inactive={active ? item !== $active : $toggled?.includes(item)}\n >\n <i style=\"background-color: {color ? $currenciesScale(item) : '#bbb'}\"\n ></i>\n <span>{item}</span>\n </button>\n {/each}\n</div>\n\n<style>\n button {\n display: contents;\n color: inherit;\n }\n\n .inactive span {\n text-decoration: line-through;\n }\n\n i {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin-left: 5px;\n border-radius: 10px;\n }\n\n .inactive i {\n filter: grayscale();\n }\n\n @media print {\n .inactive {\n display: none;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import { partition } from \"d3-hierarchy\";\n\n import { formatPercentage } from \"../format.ts\";\n import { urlForAccount } from \"../helpers.ts\";\n import { leaf } from \"../lib/account.ts\";\n import { ctx } from \"../stores/format.ts\";\n import { sunburstScale } from \"./helpers.ts\";\n import type {\n AccountHierarchyDatum,\n AccountHierarchyNode,\n } from \"./hierarchy.ts\";\n import { domHelpers, followingTooltip } from \"./tooltip.ts\";\n\n interface Props {\n data: AccountHierarchyNode;\n currency: string;\n width: number;\n height: number;\n }\n\n let { data, currency, width, height }: Props = $props();\n\n let root = $derived(partition<AccountHierarchyDatum>()(data));\n let nodes = $derived(root.descendants().filter((d) => !d.data.dummy));\n\n let current: string | null = $state(null);\n\n function tooltipText(d: AccountHierarchyNode) {\n const val = d.value ?? 0;\n const rootValue = root.value ?? 1;\n\n return [\n domHelpers.t(\n `${$ctx.amount(val, currency)} (${formatPercentage(val / rootValue)})`,\n ),\n domHelpers.em(d.data.account),\n ];\n }\n</script>\n\n<g\n {width}\n {height}\n onmouseleave={() => {\n current = null;\n }}\n role=\"img\"\n>\n {#each nodes as d (d.data.account)}\n {@const account = d.data.account}\n <g\n {@attach followingTooltip(() => tooltipText(d))}\n class:current={current != null ? current.startsWith(account) : false}\n >\n <a\n href={$urlForAccount(account)}\n aria-label={account}\n onmouseover={() => {\n current = account;\n }}\n onfocus={() => {\n current = account;\n }}\n >\n <rect\n fill-rule=\"evenodd\"\n fill={$sunburstScale(account)}\n width={width * (d.y1 - d.y0)}\n height={height * (d.x1 - d.x0)}\n role=\"img\"\n x={width * d.y0}\n y={height * d.x0}\n />\n <text\n dy=\".5em\"\n text-anchor=\"middle\"\n x={(width * (d.y1 + d.y0)) / 2}\n y={(height * (d.x1 + d.x0)) / 2}\n visibility={height * (d.x1 - d.x0) > 14 ? \"visible\" : \"hidden\"}\n >\n {leaf(account)}\n </text>\n </a>\n </g>\n {/each}\n</g>\n\n<style>\n g:focus-within > g,\n g:hover > g {\n opacity: 0.7;\n }\n\n g:focus-within > g.current,\n g:hover > g.current {\n opacity: 1;\n }\n</style>\n", "<script lang=\"ts\">\n import type { HierarchyRectangularNode } from \"d3-hierarchy\";\n import { partition } from \"d3-hierarchy\";\n import { scaleLinear, scaleSqrt } from \"d3-scale\";\n import { arc } from \"d3-shape\";\n import { untrack } from \"svelte\";\n\n import { formatPercentage } from \"../format.ts\";\n import { urlForAccount } from \"../helpers.ts\";\n import { ctx } from \"../stores/format.ts\";\n import { sunburstScale } from \"./helpers.ts\";\n import type {\n AccountHierarchyDatum,\n AccountHierarchyNode,\n } from \"./hierarchy.ts\";\n\n interface Props {\n data: AccountHierarchyNode;\n currency: string;\n width: number;\n height: number;\n }\n\n let { data, currency, width, height }: Props = $props();\n\n let radius = $derived(Math.min(width, height) / 2);\n\n let root = $derived(partition<AccountHierarchyDatum>()(data));\n let nodes = $derived(\n root.descendants().filter((d) => !d.data.dummy && d.depth > 0),\n );\n\n let current: AccountHierarchyNode | null = $state(null);\n\n $effect.pre(() => {\n // if-expression to run on each change of chart\n void data;\n untrack(() => {\n current = null;\n });\n });\n\n function balanceText(d: AccountHierarchyNode): string {\n const val = d.value ?? 0;\n const total = root.value ?? 0;\n return total\n ? `${$ctx.amount(val, currency)} (${formatPercentage(val / total)})`\n : $ctx.amount(val, currency);\n }\n\n const x = scaleLinear([0, 2 * Math.PI]);\n let y = $derived(scaleSqrt([0, radius]));\n let arcShape = $derived(\n arc<HierarchyRectangularNode<AccountHierarchyDatum>>()\n .startAngle((d) => x(d.x0))\n .endAngle((d) => x(d.x1))\n .innerRadius((d) => y(d.y0))\n .outerRadius((d) => y(d.y1)),\n );\n</script>\n\n<g\n {width}\n {height}\n transform={`translate(${(width / 2).toString()},${(height / 2).toString()})`}\n onmouseleave={() => {\n current = null;\n }}\n role=\"img\"\n>\n <circle r={radius} />\n <text class=\"account\" text-anchor=\"middle\">\n {(current ?? root).data.account}\n </text>\n <text class=\"balance\" dy=\"1.2em\" text-anchor=\"middle\">\n {balanceText(current ?? root)}\n </text>\n {#each nodes as d (d.data.account)}\n <a href={$urlForAccount(d.data.account)} aria-label={d.data.account}>\n <path\n onmouseover={() => {\n current = d;\n }}\n onfocus={() => {\n current = d;\n }}\n class:half={current && !current.data.account.startsWith(d.data.account)}\n fill-rule=\"evenodd\"\n fill={$sunburstScale(d.data.account)}\n d={arcShape(d)}\n role=\"img\"\n />\n </a>\n {/each}\n</g>\n\n<style>\n circle {\n opacity: 0;\n }\n\n .half {\n opacity: 0.5;\n }\n\n .account {\n fill: var(--text-color);\n }\n\n .balance {\n font-family: var(--font-family-monospaced);\n }\n\n path {\n cursor: pointer;\n }\n</style>\n", "<script lang=\"ts\">\n import { treemap } from \"d3-hierarchy\";\n\n import { formatPercentage } from \"../format.ts\";\n import { urlForAccount } from \"../helpers.ts\";\n import { leaf } from \"../lib/account.ts\";\n import { ctx } from \"../stores/format.ts\";\n import { treemapScale } from \"./helpers.ts\";\n import type {\n AccountHierarchyDatum,\n AccountHierarchyNode,\n } from \"./hierarchy.ts\";\n import { domHelpers, followingTooltip } from \"./tooltip.ts\";\n\n interface Props {\n data: AccountHierarchyNode;\n width: number;\n height: number;\n currency: string;\n }\n\n let { data, width, height, currency }: Props = $props();\n\n const tree = treemap<AccountHierarchyDatum>().paddingInner(2).round(true);\n let root = $derived(tree.size([width, height])(data.copy()));\n let leaves = $derived(\n root.leaves().filter((d) => d.value != null && d.value !== 0),\n );\n\n function fill(d: AccountHierarchyNode) {\n const node = d.data.dummy && d.parent ? d.parent : d;\n if (node.depth === 1 || !node.parent) {\n return $treemapScale(node.data.account);\n }\n return $treemapScale(node.parent.data.account);\n }\n\n function tooltipText(d: AccountHierarchyNode) {\n const val = d.value ?? 0;\n const rootValue = root.value ?? 1;\n\n return [\n domHelpers.t(\n `${$ctx.amount(val, currency)} (${formatPercentage(val / rootValue)})`,\n ),\n domHelpers.em(d.data.account),\n ];\n }\n</script>\n\n<svg viewBox={`0 0 ${width.toString()} ${height.toString()}`}>\n {#each leaves as d (d.data.account)}\n {@const account = d.data.account}\n <g\n transform={`translate(${d.x0.toString()},${d.y0.toString()})`}\n {@attach followingTooltip(() => tooltipText(d))}\n >\n <rect fill={fill(d)} width={d.x1 - d.x0} height={d.y1 - d.y0} />\n <a href={$urlForAccount(account)}>\n <text\n dy=\".5em\"\n x={(d.x1 - d.x0) / 2}\n y={(d.y1 - d.y0) / 2}\n text-anchor=\"middle\"\n {@attach (node: SVGTextElement) => {\n // Hide account names that are too long.\n const length = node.getComputedTextLength();\n node.style.visibility =\n d.x1 - d.x0 > length + 4 && d.y1 - d.y0 > 14\n ? \"visible\"\n : \"hidden\";\n }}\n >\n {leaf(account)}\n </text>\n </a>\n </g>\n {/each}\n</svg>\n\n<style>\n svg {\n shape-rendering: crispedges;\n }\n</style>\n", "<script lang=\"ts\">\n import { _ } from \"../i18n.ts\";\n import { hierarchyChartMode } from \"../stores/chart.ts\";\n import type { HierarchyChart } from \"./hierarchy.ts\";\n import Icicle from \"./Icicle.svelte\";\n import Sunburst from \"./Sunburst.svelte\";\n import Treemap from \"./Treemap.svelte\";\n\n interface Props {\n chart: HierarchyChart;\n width: number;\n }\n\n let { chart, width }: Props = $props();\n\n let data = $derived(chart.data);\n let currencies = $derived(chart.currencies);\n\n let treemap_currency = $derived(chart.treemap_currency);\n let mode = $derived($hierarchyChartMode);\n let treemap = $derived(\n mode === \"treemap\" ? data.get($treemap_currency ?? \"\") : undefined,\n );\n\n let treemap_height = $derived(Math.min(width / 2.5, 400));\n let sunburst_height = 500;\n let icicle_height = $derived(Math.min(width / 2.5, 400));\n</script>\n\n{#if currencies.length === 0}\n <svg viewBox={`0 0 ${width.toString()} 160`}>\n <text x={width / 2} y={80} text-anchor=\"middle\">\n {_(\"Chart is empty.\")}\n </text>\n </svg>\n{:else if treemap && $treemap_currency}\n <Treemap\n data={treemap}\n currency={$treemap_currency}\n {width}\n height={treemap_height}\n />\n{:else if mode === \"sunburst\"}\n <svg viewBox={`0 0 ${width.toString()} ${sunburst_height.toString()}`}>\n {#each [...data] as [chart_currency, d], i (chart_currency)}\n <g\n transform={`translate(${((width * i) / currencies.length).toString()},0)`}\n >\n <Sunburst\n data={d}\n currency={chart_currency}\n width={width / currencies.length}\n height={sunburst_height}\n />\n </g>\n {/each}\n </svg>\n{:else if mode === \"icicle\"}\n <svg viewBox={`0 0 ${width.toString()} ${icicle_height.toString()}`}>\n {#each [...data] as [chart_currency, d], i (chart_currency)}\n <g\n transform={`translate(${((width * i) / currencies.length).toString()},0)`}\n >\n <Icicle\n data={d}\n currency={chart_currency}\n width={width / currencies.length}\n height={icicle_height}\n />\n </g>\n {/each}\n </svg>\n{/if}\n", "export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n", "export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don\u2019t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n", "export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n", "export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n", "export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n", "import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can\u2019t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn\u2019t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n", "export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n", "export default function() {\n return this._root;\n}\n", "export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n", "import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n", "import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n", "export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n", "export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n", "import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n", "<script lang=\"ts\">\n import { extent, max, min } from \"d3-array\";\n import { axisBottom, axisLeft } from \"d3-axis\";\n import { quadtree } from \"d3-quadtree\";\n import { scaleLinear, scaleUtc } from \"d3-scale\";\n import { area, curveStepAfter, line } from \"d3-shape\";\n\n import { chartToggledCurrencies, lineChartMode } from \"../stores/chart.ts\";\n import { ctx, short } from \"../stores/format.ts\";\n import Axis from \"./Axis.svelte\";\n import { currenciesScale, includeZero, padExtent } from \"./helpers.ts\";\n import type { LineChart, LineChartDatum } from \"./line.ts\";\n import type { TooltipFindNode } from \"./tooltip.ts\";\n import { positionedTooltip } from \"./tooltip.ts\";\n\n interface Props {\n chart: LineChart;\n width: number;\n }\n\n let { chart, width }: Props = $props();\n\n const today = new Date();\n const margin = { top: 10, right: 10, bottom: 30, left: 40 };\n const height = 250;\n let innerWidth = $derived(width - margin.left - margin.right);\n let innerHeight = $derived(height - margin.top - margin.bottom);\n\n let data = $derived(chart.filter($chartToggledCurrencies));\n\n // Scales and quadtree\n let allValues = $derived(data.flatMap((d) => d.values));\n\n let xExtent = $derived([\n min(data, (s) => s.values[0]?.date) ?? today,\n max(data, (s) => s.values[s.values.length - 1]?.date) ?? today,\n ] as const);\n let x = $derived(scaleUtc([0, innerWidth]).domain(xExtent));\n let valueExtent = $derived(extent(allValues, (v) => v.value));\n // Include zero in area charts so the entire area is shown, not a cropped part of it\n let yExtent = $derived(\n $lineChartMode === \"area\" ? includeZero(valueExtent) : valueExtent,\n );\n // Span y-axis as max minus min value plus 5 percent margin\n let y = $derived(scaleLinear([innerHeight, 0]).domain(padExtent(yExtent)));\n\n // Quadtree for hover.\n let quad = $derived(\n quadtree(\n allValues,\n (d) => x(d.date),\n (d) => y(d.value),\n ),\n );\n\n let lineShape = $derived(\n line<LineChartDatum>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(curveStepAfter),\n );\n\n let areaShape = $derived(\n area<LineChartDatum>()\n .x((d) => x(d.date))\n .y1((d) => y(d.value))\n .y0(Math.min(innerHeight, y(0)))\n .curve(curveStepAfter),\n );\n\n // Axes\n let xAxis = $derived(axisBottom(x).tickSizeOuter(0));\n let yAxis = $derived(\n axisLeft(y).tickPadding(6).tickSize(-innerWidth).tickFormat($short),\n );\n\n const tooltipFindNode: TooltipFindNode = (xPos, yPos) => {\n const d = quad.find(xPos, yPos);\n return d && [x(d.date), y(d.value), chart.tooltipText($ctx, d)];\n };\n\n let futureFilter = $derived(\n xExtent[1] > today ? \"url(#desaturateFuture)\" : undefined,\n );\n</script>\n\n<svg viewBox={`0 0 ${width.toString()} ${height.toString()}`}>\n <filter id=\"desaturateFuture\">\n <feColorMatrix type=\"saturate\" values=\"0.5\" x={x(today)} />\n <feBlend in2=\"SourceGraphic\" />\n </filter>\n <g\n {@attach positionedTooltip(tooltipFindNode)}\n transform={`translate(${margin.left.toString()},${margin.top.toString()})`}\n >\n <Axis x axis={xAxis} {innerHeight} />\n <Axis y axis={yAxis} />\n {#if $lineChartMode === \"area\"}\n <g class=\"area\" filter={futureFilter}>\n {#each data as d (d.name)}\n <path d={areaShape(d.values)} fill={$currenciesScale(d.name)} />\n {/each}\n </g>\n {/if}\n <g class=\"lines\" filter={futureFilter}>\n {#each data as d (d.name)}\n <path d={lineShape(d.values)} stroke={$currenciesScale(d.name)} />\n {/each}\n </g>\n {#if $lineChartMode === \"line\"}\n <g>\n {#each data as d (d.name)}\n <g fill={$currenciesScale(d.name)}>\n {#each d.values as v (v.date)}\n <circle\n r=\"2\"\n cx={x(v.date)}\n cy={y(v.value)}\n class:desaturate={v.date > today}\n />\n {/each}\n </g>\n {/each}\n </g>\n {/if}\n </g>\n</svg>\n\n<style>\n svg > g {\n pointer-events: all;\n }\n\n .lines path {\n fill: none;\n stroke-width: 2px;\n }\n\n .area path {\n opacity: 0.3;\n }\n\n .desaturate {\n filter: saturate(50%);\n }\n</style>\n", "<script lang=\"ts\" generics=\"T extends string\">\n import type { LocalStoreSyncedStore } from \"../lib/store.ts\";\n\n interface Props {\n /** The store to show a switch for. */\n store: LocalStoreSyncedStore<T>;\n }\n\n let { store }: Props = $props();\n</script>\n\n<span>\n {#each store.values() as [option, name] (option)}\n <label class=\"button\" class:muted={$store !== option}>\n <input type=\"radio\" bind:group={$store} value={option} />\n {name}\n </label>\n {/each}\n</span>\n\n<style>\n input {\n display: none;\n }\n\n label + label {\n margin-left: 0.125rem;\n }\n\n @media print {\n label {\n display: none;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import { extent } from \"d3-array\";\n import { axisBottom, axisLeft } from \"d3-axis\";\n import { quadtree } from \"d3-quadtree\";\n import { scalePoint, scaleUtc } from \"d3-scale\";\n\n import { day } from \"../format.ts\";\n import Axis from \"./Axis.svelte\";\n import { scatterplotScale } from \"./helpers.ts\";\n import type { ScatterPlot, ScatterPlotDatum } from \"./scatterplot.ts\";\n import type { TooltipFindNode } from \"./tooltip.ts\";\n import { domHelpers, positionedTooltip } from \"./tooltip.ts\";\n\n interface Props {\n chart: ScatterPlot;\n width: number;\n }\n\n let { chart, width }: Props = $props();\n\n const today = new Date();\n const margin = { top: 10, right: 10, bottom: 30, left: 70 };\n const height = 250;\n let innerWidth = $derived(width - margin.left - margin.right);\n let innerHeight = $derived(height - margin.top - margin.bottom);\n\n // Scales\n let dateExtent = $derived(extent(chart.data, (d) => d.date));\n let x = $derived(\n scaleUtc([0, innerWidth]).domain(dateExtent[0] ? dateExtent : [0, 1]),\n );\n let y = $derived(\n scalePoint([innerHeight, 0])\n .domain(chart.data.map((d) => d.type))\n .padding(1),\n );\n\n // Axes\n let xAxis = $derived(axisBottom(x).tickSizeOuter(0));\n let yAxis = $derived(\n axisLeft(y)\n .tickPadding(6)\n .tickSize(-innerWidth)\n .tickFormat((d) => d),\n );\n\n /** Quadtree for hover. */\n let quad = $derived(\n quadtree(\n [...chart.data],\n (d) => x(d.date),\n (d) => y(d.type) ?? 0,\n ),\n );\n\n function tooltipText(d: ScatterPlotDatum) {\n return [domHelpers.t(d.description), domHelpers.em(day(d.date))];\n }\n\n const tooltipFindNode: TooltipFindNode = (xPos, yPos) => {\n const d = quad.find(xPos, yPos);\n return d && [x(d.date), y(d.type) ?? 0, tooltipText(d)];\n };\n</script>\n\n<svg viewBox={`0 0 ${width.toString()} ${height.toString()}`}>\n <g\n {@attach positionedTooltip(tooltipFindNode)}\n transform={`translate(${margin.left.toString()},${margin.top.toString()})`}\n >\n <Axis x axis={xAxis} {innerHeight} />\n <Axis y axis={yAxis} />\n <g>\n {#each chart.data as dot (`${dot.date.toString()}-${dot.type}`)}\n <circle\n r=\"5\"\n fill={scatterplotScale(dot.type)}\n cx={x(dot.date)}\n cy={y(dot.type)}\n class:desaturate={dot.date > today}\n />\n {/each}\n </g>\n </g>\n</svg>\n\n<style>\n svg > g {\n pointer-events: all;\n }\n\n .desaturate {\n filter: saturate(50%);\n }\n</style>\n", "<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n\n import { router } from \"../router.ts\";\n import {\n barChartMode,\n chartToggledCurrencies,\n hierarchyChartMode,\n lineChartMode,\n } from \"../stores/chart.ts\";\n import { show_charts } from \"../stores/url.ts\";\n import BarChart from \"./BarChart.svelte\";\n import ChartLegend from \"./ChartLegend.svelte\";\n import HierarchyContainer from \"./HierarchyContainer.svelte\";\n import type { FavaChart } from \"./index.ts\";\n import LineChart from \"./LineChart.svelte\";\n import ModeSwitch from \"./ModeSwitch.svelte\";\n import ScatterPlot from \"./ScatterPlot.svelte\";\n\n interface Props {\n /** The chart to render. */\n chart: FavaChart;\n /** Additional elements to render in the top right. */\n children?: Snippet;\n }\n\n let { chart, children }: Props = $props();\n\n /** Width of the chart. */\n let width: number | undefined = $state();\n</script>\n\n<div class=\"flex-row\">\n {#if $show_charts}\n {#if chart.type === \"barchart\"}\n <ChartLegend\n legend={chart.currencies}\n color={!($barChartMode === \"stacked\" && chart.hasStackedData)}\n toggled={chartToggledCurrencies}\n />\n {/if}\n {#if chart.type === \"linechart\"}\n <ChartLegend\n legend={chart.series_names}\n color={true}\n toggled={chartToggledCurrencies}\n />\n {/if}\n {#if chart.type === \"hierarchy\" && $hierarchyChartMode === \"treemap\" && chart.treemap_currency}\n <ChartLegend\n legend={chart.currencies}\n color={false}\n active={chart.treemap_currency}\n />\n {/if}\n <span class=\"spacer\"></span>\n {#if chart.type === \"hierarchy\"}\n <ModeSwitch store={hierarchyChartMode} />\n {:else if chart.type === \"linechart\"}\n <ModeSwitch store={lineChartMode} />\n {:else if chart.type === \"barchart\" && chart.hasStackedData}\n <ModeSwitch store={barChartMode} />\n {/if}\n {:else}<span class=\"spacer\"></span>{/if}\n {@render children?.()}\n <button\n type=\"button\"\n class=\"show-charts\"\n onclick={() => {\n router.set_search_param(\"charts\", $show_charts ? \"false\" : \"\");\n }}\n >\n {$show_charts ? \"▼\" : \"◀\"}\n </button>\n</div>\n<div hidden={!$show_charts} bind:clientWidth={width}>\n {#if width}\n {#if chart.type === \"barchart\"}\n <BarChart {chart} {width} />\n {:else if chart.type === \"hierarchy\"}\n <HierarchyContainer {chart} {width} />\n {:else if chart.type === \"linechart\"}\n <LineChart {chart} {width} />\n {:else if chart.type === \"scatterplot\"}\n <ScatterPlot {chart} {width} />\n {/if}\n {/if}\n</div>\n\n<style>\n .flex-row {\n margin-bottom: var(--flex-gap);\n }\n\n @media print {\n button.show-charts {\n display: none;\n }\n }\n</style>\n", "import { derived } from \"svelte/store\";\n\nimport { currentDateFormat } from \"../stores/format.ts\";\nimport { currencies } from \"../stores/index.ts\";\nimport { operating_currency } from \"../stores/options.ts\";\nimport { conversion } from \"../stores/url.ts\";\n\n/** Context data for parsing and rendering of the charts. */\nexport interface ChartContext {\n /** The list of operating currencies, complemented by the current conversion currency. */\n readonly currencies: readonly string[];\n /** The current date format as determined from the interval. */\n readonly dateFormat: (date: Date) => string;\n}\n\n/**\n * The list of operating currencies, adding in the current conversion currency.\n */\nconst operatingCurrenciesWithConversion = derived(\n [operating_currency, currencies, conversion],\n ([$operating_currency, $currencies, $conversion]) =>\n $currencies.includes($conversion) &&\n !$operating_currency.includes($conversion)\n ? [...$operating_currency, $conversion]\n : $operating_currency,\n);\n\nexport const chartContext = derived(\n [operatingCurrenciesWithConversion, currentDateFormat],\n ([$operatingCurrenciesWithConversion, $currentDateFormat]): ChartContext => ({\n currencies: $operatingCurrenciesWithConversion,\n dateFormat: $currentDateFormat,\n }),\n);\n", "<!--\n @component\n An element to select element(s) from a dropdown.\n\n It receives its `value` and a list of possible `options`. The `description` prop should\n render a human-readable string for the value (which will be displayed in the button) and\n option (which will be shown in the list popup). Optionally a `multiple_select` function\n can be passed and a selection of multiple options is possible for sets of options for\n which this returns true.\n\n This is an implementation of the Combobox pattern as described by the\n ARIA Authoring Practices Guide (APG) at\n https://www.w3.org/WAI/ARIA/apg/patterns/combobox/\n In particular it should match the Select-Only Combobox example at\n https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/\n-->\n<script lang=\"ts\">\n interface Props {\n /** The currently entered value. */\n value: string;\n /** The options for the value. */\n options: readonly string[];\n /** Function to get the human readable description of an option and the value. */\n description: (option: string) => string;\n /** Whether an option can be part of a multi-selection (separated by comma in value). */\n multiple_select?: (option: string) => boolean;\n }\n\n let {\n value = $bindable(),\n options,\n description,\n multiple_select,\n }: Props = $props();\n\n /** Whether the list of options in the Combobox popup is hidden. */\n let hidden = $state(true);\n /** The index of the option that is currently focused */\n // Use the initial index in options (options does not change).\n // svelte-ignore state_referenced_locally\n let index = $state(options.indexOf(value));\n /** The popup list element. */\n let ul: HTMLUListElement | undefined = $state();\n\n const uid = $props.id();\n const listbox_id = `combobox-listbox-${uid}`;\n\n const SEPARATOR = \",\";\n let values = $derived(value.split(SEPARATOR));\n\n // Scroll focused element into view.\n $effect(() => {\n if (!hidden && index) {\n ul?.children[index]?.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\",\n });\n }\n });\n\n /** The various actions that can be triggered by user mouse or key events. */\n const actions = {\n /** Close the popup list. */\n close: () => {\n hidden = true;\n },\n /** Find the first element matching the typed letter and focus it. */\n find_letter: (key: string, event: KeyboardEvent) => {\n const match = options.findIndex((o) => o.toLowerCase().startsWith(key));\n if (match > -1) {\n event.stopPropagation();\n index = match;\n hidden = false;\n }\n },\n /** Focus the first element and open if not open yet. */\n first: () => {\n index = 0;\n hidden = false;\n },\n /** Focus the last element and open if not open yet. */\n last: () => {\n index = 0;\n hidden = false;\n },\n /** Focus the previous element in the popup. */\n next: () => {\n index = index === 0 ? options.length - 1 : index - 1;\n },\n /** Open the popup list. */\n open: () => {\n hidden = false;\n },\n /** Focus the previous element in the popup. */\n previous: () => {\n index = index === options.length - 1 ? 0 : index + 1;\n },\n /** Select the given or the focused element in the options list. */\n select: (o?: string) => {\n const option = o ?? options[index];\n if (option != null) {\n if (\n // biome-ignore lint/complexity/useOptionalChain: clashes with strict-boolean-expressions rule\n multiple_select != null &&\n multiple_select(option) &&\n values.every(multiple_select)\n ) {\n value = values.includes(option)\n ? values.filter((v) => v !== option).join(SEPARATOR)\n : [...values, option].join(SEPARATOR);\n } else {\n value = option;\n }\n index = options.indexOf(option);\n hidden = true;\n }\n },\n /** Toggle the popup list. */\n toggle: () => {\n hidden = !hidden;\n },\n };\n\n /** Get the action for a keyboard event. */\n function key_action(event: KeyboardEvent): (() => void) | null {\n const { key } = event;\n const modifier = event.altKey || event.ctrlKey || event.metaKey;\n\n if (/^[\\w]$/.exec(key) && !modifier) {\n return actions.find_letter.bind(null, key, event);\n }\n if (key === \"Home\") {\n return actions.first;\n }\n if (key === \"End\") {\n return actions.last;\n }\n if ((key === \"Enter\" || key === \" \") && !hidden) {\n return actions.select;\n }\n if (key === \"Escape\" && !hidden) {\n return actions.close;\n }\n if (key === \"ArrowUp\") {\n return hidden ? actions.open : actions.next;\n }\n if (key === \"ArrowDown\") {\n return hidden ? actions.open : actions.previous;\n }\n return null;\n }\n</script>\n\n<span>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={!hidden}\n aria-controls={listbox_id}\n class=\"muted\"\n onclick={actions.toggle}\n onblur={actions.close}\n onkeydown={(event) => {\n const action = key_action(event);\n if (action) {\n event.preventDefault();\n action();\n }\n }}\n >\n {description(value)}\n </button>\n <ul {hidden} role=\"listbox\" id={listbox_id} bind:this={ul}>\n {#each options as option, i (option)}\n <li\n role=\"option\"\n aria-selected={values.includes(option)}\n class:current={i === index}\n onmousedown={(ev) => {\n if (ev.button === 0) {\n actions.select(option);\n }\n }}\n >\n {description(option)}\n </li>\n {/each}\n </ul>\n</span>\n\n<style>\n span {\n position: relative;\n display: inline-block;\n }\n\n ul {\n position: absolute;\n z-index: var(--z-index-autocomplete);\n overflow: auto;\n background-color: var(--background);\n border: 1px solid var(--border-darker);\n box-shadow: var(--box-shadow-dropdown);\n }\n\n li {\n padding: 2px 5px;\n white-space: nowrap;\n cursor: pointer;\n }\n\n li.current {\n padding: 0 3px;\n border: var(--link-color) dotted 2px;\n }\n\n li[aria-selected=\"true\"],\n li:hover {\n color: var(--background);\n background-color: var(--link-color);\n }\n\n @media print {\n span {\n display: none;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import { _, format } from \"../i18n.ts\";\n import {\n DEFAULT_INTERVAL,\n getInterval,\n intervalLabel,\n INTERVALS,\n } from \"../lib/interval.ts\";\n import { router } from \"../router.ts\";\n import { conversions } from \"../stores/chart.ts\";\n import { conversion, interval } from \"../stores/url.ts\";\n import SelectCombobox from \"./SelectCombobox.svelte\";\n\n const conversion_description = (option: string) => {\n switch (option) {\n case \"at_cost\":\n return _(\"At Cost\");\n case \"at_value\":\n return _(\"At Market Value\");\n case \"units\":\n return _(\"Units\");\n default:\n return format(_(\"Converted to %(currency)s\"), { currency: option });\n }\n };\n\n const is_currency_conversion = (option: string) =>\n ![\"at_cost\", \"at_value\", \"units\"].includes(option);\n</script>\n\n<SelectCombobox\n bind:value={\n () => $conversion,\n (value: string) => {\n router.set_search_param(\"conversion\", value === \"at_cost\" ? \"\" : value);\n }\n }\n options={$conversions}\n description={conversion_description}\n multiple_select={is_currency_conversion}\n/>\n\n<SelectCombobox\n bind:value={\n () => $interval,\n (value: string) => {\n router.set_search_param(\n \"interval\",\n value === DEFAULT_INTERVAL ? \"\" : value,\n );\n }\n }\n options={INTERVALS}\n description={(o: string) => intervalLabel(getInterval(o))}\n/>\n", "<script lang=\"ts\">\n import { _ } from \"../i18n.ts\";\n import type { KeySpec } from \"../keyboard-shortcuts.ts\";\n import { keyboardShortcut } from \"../keyboard-shortcuts.ts\";\n import { lastActiveChartName } from \"../stores/chart.ts\";\n import { show_charts } from \"../stores/url.ts\";\n import Chart from \"./Chart.svelte\";\n import { chartContext } from \"./context.ts\";\n import ConversionAndInterval from \"./ConversionAndInterval.svelte\";\n import type { ParsedFavaChart } from \"./index.ts\";\n\n interface Props {\n charts: readonly ParsedFavaChart[];\n }\n\n let { charts }: Props = $props();\n\n let active_chart = $derived(\n charts.find((c) => c.label === $lastActiveChartName) ?? charts[0],\n );\n\n // Get the shortcut key for jumping to the previous chart.\n let shortcutPrevious = $derived((index: number): KeySpec | undefined => {\n const current = active_chart ? charts.indexOf(active_chart) : -1;\n return index === (current - 1 + charts.length) % charts.length\n ? { key: \"C\", note: _(\"Previous\") }\n : undefined;\n });\n // Get the shortcut key for jumping to the next chart.\n let shortcutNext = $derived((index: number): KeySpec | undefined => {\n const current = active_chart ? charts.indexOf(active_chart) : -1;\n return index === (current + 1 + charts.length) % charts.length\n ? { key: \"c\", note: _(\"Next\") }\n : undefined;\n });\n</script>\n\n{#if active_chart}\n <Chart chart={active_chart.with_context($chartContext)}>\n <ConversionAndInterval />\n </Chart>\n <div hidden={!$show_charts}>\n {#each charts as chart, index (chart.label)}\n <button\n type=\"button\"\n class=\"unset\"\n class:selected={chart === active_chart}\n onclick={() => {\n $lastActiveChartName = chart.label;\n }}\n {@attach keyboardShortcut(shortcutPrevious(index))}\n {@attach keyboardShortcut(shortcutNext(index))}\n >\n {chart.label}\n </button>\n {/each}\n </div>\n{/if}\n\n<style>\n div {\n margin-bottom: 1em;\n color: var(--text-color-lightest);\n text-align: center;\n }\n\n button {\n padding: 0 0.5em;\n }\n\n button + button {\n border-left: 1px solid var(--text-color-lighter);\n }\n\n button.selected,\n button:hover {\n color: var(--text-color-lighter);\n }\n\n @media print {\n button {\n display: none;\n border-left: none;\n }\n\n button + button {\n border-left: none;\n }\n\n button.selected {\n display: inline;\n }\n }\n</style>\n", "import type { Readable } from \"svelte/store\";\nimport { derived, get as store_get, writable } from \"svelte/store\";\n\nimport { _ } from \"../i18n.ts\";\nimport {\n is_descendant,\n is_descendant_or_equal,\n parent,\n} from \"../lib/account.ts\";\nimport {\n collapse_pattern,\n invert_income_liabilities_equity,\n} from \"./fava_options.ts\";\nimport { account_details, accounts_internal } from \"./index.ts\";\nimport { name_equity, name_income, name_liabilities } from \"./options.ts\";\n\n/** The accounts that are toggled via the collapse-pattern option. */\nconst collapsed_accounts: Readable<readonly string[]> = derived(\n [collapse_pattern, accounts_internal],\n ([$collapse_pattern, $accounts_internal]) => {\n const matchers = $collapse_pattern.map((pattern) => new RegExp(pattern));\n return $accounts_internal.filter((account: string) =>\n matchers.some((matcher) => matcher.test(account)),\n );\n },\n);\n\n// The accounts that were manually toggled.\n// `true` stands for 'toggled' and `false` for 'open'.\nconst explicitly_toggled = writable<ReadonlyMap<string, boolean>>(new Map());\n\n/** The accounts that are toggled in trees. */\nexport const toggled_accounts: Readable<ReadonlySet<string>> = derived(\n [collapsed_accounts, explicitly_toggled],\n ([$collapsed_accounts, $explicitly_toggled]) => {\n const toggled = new Set($collapsed_accounts);\n for (const [account, is_toggled] of $explicitly_toggled) {\n if (is_toggled) {\n toggled.add(account);\n } else {\n toggled.delete(account);\n }\n }\n return toggled;\n },\n);\n\n/**\n * Toggle an account.\n *\n * If opening and it is a Shift-Click, deeply open all descendants.\n * If opening and it is a Ctrl- or Meta-Click, open direct children.\n */\nexport function toggle_account(account: string, event: MouseEvent): void {\n const $toggled_accounts = store_get(toggled_accounts);\n const $accounts_internal = store_get(accounts_internal);\n const is_opening = $toggled_accounts.has(account);\n\n explicitly_toggled.update(($explicitly_toggled) => {\n const new_explicitly_toggled = new Map($explicitly_toggled);\n new_explicitly_toggled.set(account, !is_opening);\n if (is_opening) {\n if (event.shiftKey) {\n $accounts_internal.filter(is_descendant(account)).forEach((child) => {\n new_explicitly_toggled.set(child, false);\n });\n } else if (event.ctrlKey || event.metaKey) {\n $accounts_internal\n .filter((a) => parent(a) === account)\n .forEach((child) => {\n new_explicitly_toggled.set(child, true);\n });\n }\n }\n return new_explicitly_toggled;\n });\n}\n\n/** Deeply expand all children of the account. */\nexport function expand_all(account: string): void {\n const $toggled_accounts = store_get(toggled_accounts);\n\n explicitly_toggled.update(($explicitly_toggled) => {\n const new_explicitly_toggled = new Map($explicitly_toggled);\n [...$toggled_accounts]\n .filter(is_descendant_or_equal(account))\n .forEach((descendant) => {\n new_explicitly_toggled.set(descendant, false);\n });\n return new_explicitly_toggled;\n });\n}\n\n/** Whether the balances for an account should be inverted. */\nexport const invert_account = derived(\n [\n invert_income_liabilities_equity,\n name_income,\n name_liabilities,\n name_equity,\n ],\n ([\n $invert_income_liabilities_equity,\n $name_income,\n $name_liabilities,\n $name_equity,\n ]): ((name: string) => boolean) =>\n $invert_income_liabilities_equity\n ? (name) =>\n name.startsWith($name_income) ||\n name.startsWith($name_liabilities) ||\n name.startsWith($name_equity) ||\n name === _(\"Net Profit\")\n : () => false,\n);\n\n/** Whether an account is closed before the given date. */\nexport const is_closed_account = derived(\n [account_details],\n ([$account_details]) =>\n (name: string, date: Date | null) => {\n const close_date = $account_details[name]?.close_date;\n if (!close_date) {\n return false;\n }\n return date == null ? true : close_date < date;\n },\n);\n", "<!--\n @component\n Header for the account column.\n-->\n<script lang=\"ts\">\n import { some } from \"d3-array\";\n\n import { _ } from \"../i18n.ts\";\n import { is_descendant_or_equal } from \"../lib/account.ts\";\n import { expand_all, toggled_accounts } from \"../stores/accounts.ts\";\n\n interface Props {\n /** The account this tree is rendered for. */\n account: string;\n }\n\n let { account }: Props = $props();\n\n const toggled_children = $derived(\n some($toggled_accounts, is_descendant_or_equal(account)),\n );\n\n const help_title = _(\n \"Hold Shift while clicking to expand all children.\\n\" +\n \"Hold Ctrl or Cmd while clicking to expand one level.\",\n );\n</script>\n\n<span title={help_title}>\n {#if toggled_children}\n <button\n type=\"button\"\n class=\"link\"\n title={_(\"Expand all accounts\")}\n onclick={() => {\n expand_all(account);\n }}\n >\n {_(\"Expand all\")}\n </button>\n {/if}\n</span>\n\n<style>\n span {\n flex: 1;\n min-width: 14em;\n max-width: 30em;\n }\n\n button {\n margin-left: 1em;\n font-weight: normal;\n color: inherit;\n opacity: 0.5;\n }\n</style>\n", "import { getContext, setContext } from \"svelte\";\nimport type { Readable } from \"svelte/store\";\nimport { derived } from \"svelte/store\";\n\nimport type { AccountTreeNode } from \"../charts/hierarchy.ts\";\nimport { is_empty } from \"../lib/objects.ts\";\nimport { is_closed_account } from \"../stores/accounts.ts\";\nimport {\n show_accounts_with_zero_balance,\n show_accounts_with_zero_transactions,\n show_closed_accounts,\n} from \"../stores/fava_options.ts\";\nimport { accounts_set } from \"../stores/index.ts\";\n\nconst key = Symbol(\"tree-table\");\n\n/** The accounts that should not be shown. */\ntype NotShown = Readable<ReadonlySet<string>>;\n\nexport const setTreeTableNotShownContext = (ctx: NotShown): NotShown =>\n setContext(key, ctx);\n\nexport const getTreeTableNotShownContext = (): NotShown => getContext(key);\n\n/** Recursively build set of accounts that should not be shown. */\nexport const get_not_shown = derived(\n [\n show_accounts_with_zero_balance,\n show_accounts_with_zero_transactions,\n show_closed_accounts,\n accounts_set,\n is_closed_account,\n ],\n ([\n $show_accounts_with_zero_balance,\n $show_accounts_with_zero_transactions,\n $show_closed_accounts,\n $accounts_set,\n $is_closed_account,\n ]) =>\n (node: AccountTreeNode, end: Date | null): Set<string> => {\n const not_shown = new Set<string>();\n const should_show_recursive = (n: AccountTreeNode): boolean => {\n if (\n // We need to evaluate this for all descendants recursively\n // the .map().some() ensures it does not short-circuit\n n.children.map(should_show_recursive).some((b) => b) ||\n !is_empty(n.balance_children)\n ) {\n return true;\n }\n if (\n !$accounts_set.has(n.account) ||\n (!$show_closed_accounts && $is_closed_account(n.account, end)) ||\n (!$show_accounts_with_zero_balance && is_empty(n.balance)) ||\n (!$show_accounts_with_zero_transactions && !n.has_txns)\n ) {\n not_shown.add(n.account);\n return false;\n }\n return true;\n };\n should_show_recursive(node);\n return not_shown;\n },\n);\n", "<script lang=\"ts\">\n import { timeDay } from \"d3-time\";\n\n import { uptodate_indicator_grey_lookback_days } from \"../stores/fava_options.ts\";\n import { account_details } from \"../stores/index.ts\";\n\n interface Props {\n /** The account name. */\n account: string;\n /** Whether the indicator should be slightly smaller for the tree tables. */\n small?: boolean;\n }\n\n let { account, small = false }: Props = $props();\n\n let details = $derived($account_details[account]);\n let status = $derived(details?.uptodate_status);\n let balance = $derived(details?.balance_string ?? \"\");\n let last_entry = $derived(details?.last_entry);\n\n let last_account_activity = $derived(\n last_entry ? timeDay.count(last_entry.date, new Date()) : 0,\n );\n</script>\n\n{#if status}\n {#if status === \"green\"}\n <span\n class=\"status-indicator status-green\"\n class:small\n title=\"The last entry is a passing balance check.\"\n ></span>\n {:else}\n <copyable-text\n class=\"status-indicator status-{status}\"\n class:small\n title={`${\n status === \"yellow\"\n ? \"The last entry is not a balance check.\"\n : \"The last entry is a failing balance check.\"\n }\n\nClick to copy the balance directives to the clipboard:\n\n${balance}`}\n data-clipboard-text={balance}\n ></copyable-text>\n {/if}\n {#if last_account_activity > $uptodate_indicator_grey_lookback_days}\n <span\n class=\"status-indicator status-gray\"\n class:small\n title=\"This account has not been updated in a while. ({last_account_activity} days ago)\"\n ></span>\n {/if}\n{/if}\n\n<style>\n .status-indicator {\n width: 10px;\n height: 10px;\n margin: 0 0 0 10px;\n border-radius: 10px;\n }\n\n .status-indicator.small {\n display: inline-block;\n width: 6px;\n height: 6px;\n margin: 5px;\n border-radius: 6px;\n }\n\n .status-indicator.status-gray {\n margin-left: 0;\n }\n</style>\n", "<!--\n @component\n Account name cell.\n-->\n<script lang=\"ts\">\n import type { AccountTreeNode } from \"../charts/hierarchy.ts\";\n import { urlForAccount } from \"../helpers.ts\";\n import { leaf } from \"../lib/account.ts\";\n import AccountIndicator from \"../sidebar/AccountIndicator.svelte\";\n import { toggle_account, toggled_accounts } from \"../stores/accounts.ts\";\n\n interface Props {\n /** The account node to render the name cell for. */\n node: AccountTreeNode;\n }\n\n let { node }: Props = $props();\n\n let { account, children } = $derived(node);\n let is_toggled = $derived($toggled_accounts.has(account));\n</script>\n\n<span class=\"droptarget\" data-account-name={account}>\n {#if children.length > 0}\n <button\n type=\"button\"\n class=\"unset\"\n onclick={(event) => {\n toggle_account(account, event);\n }}\n >\n {is_toggled ? \"▸\" : \"▾\"}\n </button>\n {/if}\n <a href={$urlForAccount(account)} class=\"account\">\n {leaf(account)}\n </a>\n <AccountIndicator {account} small />\n</span>\n\n<style>\n button {\n position: absolute;\n padding: 0 3px;\n color: var(--treetable-expander);\n }\n\n a {\n margin-left: 1em;\n }\n\n span {\n display: flex;\n flex: 1;\n align-items: center;\n min-width: calc(14em - var(--account-indent, 0em));\n max-width: calc(30em - var(--account-indent, 0em));\n margin-left: var(--account-indent, 0);\n }\n\n /* Indent each level of account by one more 1em. */\n :global(ol ol) span {\n --account-indent: 1em;\n }\n\n :global(ol ol ol) span {\n --account-indent: 2em;\n }\n\n :global(ol ol ol ol) span {\n --account-indent: 3em;\n }\n\n :global(ol ol ol ol ol) span {\n --account-indent: 4em;\n }\n\n :global(ol ol ol ol ol ol) span {\n --account-indent: 5em;\n }\n\n :global(ol ol ol ol ol ol ol) span {\n --account-indent: 6em;\n }\n\n :global(ol ol ol ol ol ol ol ol) span {\n --account-indent: 7em;\n }\n\n :global(ol ol ol ol ol ol ol ol ol) span {\n --account-indent: 8em;\n }\n</style>\n", "<script lang=\"ts\">\n import { ctx } from \"../stores/format.ts\";\n\n interface Props {\n /** Difference to show. */\n diff: number;\n /** Number to show on hover. */\n num: number;\n /** The currency that both numbers are in. */\n currency: string;\n }\n\n let { diff, num, currency }: Props = $props();\n let positive = $derived(diff > 0);\n</script>\n\n<br />\n<span class:positive title={$ctx.amount(num, currency)}>\n ({positive ? \"+\" : \"-\"}{$ctx.num(Math.abs(diff), currency)})\n</span>\n\n<style>\n span {\n margin-right: 3px;\n font-size: 0.9em;\n color: var(--diff-negative);\n white-space: nowrap;\n }\n\n .positive {\n color: var(--diff-positive);\n }\n</style>\n", "<script lang=\"ts\">\n import type { AccountBudget } from \"../api/validators.ts\";\n import type { AccountTreeNode } from \"../charts/hierarchy.ts\";\n import type { NonEmptyArray } from \"../lib/array.ts\";\n import { is_empty } from \"../lib/objects.ts\";\n import { toggled_accounts } from \"../stores/accounts.ts\";\n import { ctx } from \"../stores/format.ts\";\n import { currency_name } from \"../stores/index.ts\";\n import AccountCell from \"./AccountCell.svelte\";\n import Diff from \"./Diff.svelte\";\n import { getTreeTableNotShownContext } from \"./helpers.ts\";\n import IntervalTreeTableNode from \"./IntervalTreeTableNode.svelte\";\n\n type Nodes = NonEmptyArray<AccountTreeNode>;\n\n interface Props {\n /** The account nodes to show. */\n nodes: Nodes;\n /** The budgets (per account a list per date range). */\n budgets: Record<string, AccountBudget[]>;\n }\n\n let { nodes, budgets }: Props = $props();\n\n const not_shown = getTreeTableNotShownContext();\n\n let [node] = $derived(nodes);\n let { account, children } = $derived(node);\n let account_budgets = $derived(budgets[account]);\n\n let is_toggled = $derived($toggled_accounts.has(account));\n</script>\n\n<li>\n <p>\n <AccountCell {node} />\n {#each nodes as n, index (index)}\n {@const account_budget = account_budgets?.[index]}\n {@const has_balance =\n !is_empty(n.balance) ||\n (account_budget != null && !is_empty(account_budget.budget))}\n {@const show_balance = !is_toggled && has_balance}\n {@const shown_balance = show_balance ? n.balance : n.balance_children}\n {@const shown_budget = show_balance\n ? account_budget?.budget\n : account_budget?.budget_children}\n <span class=\"num other\" class:dimmed={!is_toggled && !has_balance}>\n {#each Object.entries(shown_balance) as [currency, number] (currency)}\n {@const budget = shown_budget?.[currency]}\n <span title={$currency_name(currency)}>\n {$ctx.amount(number, currency)}\n </span>\n {#if budget}\n <Diff diff={budget - number} num={budget} {currency} />\n {/if}\n <br />\n {/each}\n {#if shown_budget}\n {#each Object.entries(shown_budget).filter(([c]) => !(shown_balance[c] ?? 0)) as [currency, budget] (currency)}\n <span title={$currency_name(currency)}>\n {$ctx.amount(0, currency)}\n </span>\n <Diff diff={budget} num={budget} {currency} />\n <br />\n {/each}\n {/if}\n </span>\n {/each}\n </p>\n {#if !is_toggled && children.some((n) => !$not_shown.has(n.account))}\n <ol>\n {#each children as child, index (child.account)}\n {#if !$not_shown.has(child.account)}\n <IntervalTreeTableNode\n nodes={nodes.map((n) => n.children[index]) as unknown as Nodes}\n {budgets}\n />\n {/if}\n {/each}\n </ol>\n {/if}\n</li>\n", "<script lang=\"ts\">\n import { intersection, min } from \"d3-array\";\n import { writable } from \"svelte/store\";\n\n import type { AccountBudget } from \"../api/validators.ts\";\n import type { AccountTreeNode } from \"../charts/hierarchy.ts\";\n import { urlForAccount } from \"../helpers.ts\";\n import type { NonEmptyArray } from \"../lib/array.ts\";\n import { currentTimeFilterDateFormat } from \"../stores/format.ts\";\n import AccountCellHeader from \"./AccountCellHeader.svelte\";\n import { get_not_shown, setTreeTableNotShownContext } from \"./helpers.ts\";\n import IntervalTreeTableNode from \"./IntervalTreeTableNode.svelte\";\n\n interface Props {\n /** The account trees to show. */\n trees: NonEmptyArray<AccountTreeNode>;\n /** The dates. */\n dates: { begin: Date; end: Date }[];\n /** The budgets (per account a list per date range). */\n budgets: Record<string, AccountBudget[]>;\n /** Whether this is cumulative. */\n accumulate: boolean;\n }\n\n let { trees, dates, budgets, accumulate }: Props = $props();\n\n const not_shown = writable(new Set<string>());\n setTreeTableNotShownContext(not_shown);\n\n $effect(() => {\n $not_shown = intersection(\n ...trees.map((n, index) => $get_not_shown(n, dates[index]?.end ?? null)),\n );\n });\n\n let account = $derived(trees[0].account);\n let start_date = $derived(\n accumulate ? min(dates, (d) => d.begin) : undefined,\n );\n let start_date_filter = $derived(\n start_date ? $currentTimeFilterDateFormat(start_date) : undefined,\n );\n let time_filters = $derived(\n dates.map((date_range): [string, string] => {\n const title = $currentTimeFilterDateFormat(date_range.begin);\n return start_date_filter != null\n ? [title, `${start_date_filter}-${title}`]\n : [title, title];\n }),\n );\n</script>\n\n<ol class=\"flex-table tree-table-new\">\n <li class=\"head\">\n <p>\n <AccountCellHeader {account} />\n {#each time_filters as [title, time] (time)}\n <span class=\"num other\">\n <a href={$urlForAccount(account, { time })}>\n {title}\n </a>\n </span>\n {/each}\n </p>\n </li>\n <IntervalTreeTableNode nodes={trees} {budgets} />\n</ol>\n\n<style>\n ol {\n overflow-x: auto;\n }\n</style>\n", "/**\n * We can handle either files or an URL being dragged-and-dropped.\n */\nexport function is_supported_datatransfer(\n dataTransfer: DataTransfer | null,\n): dataTransfer is DataTransfer {\n return (\n dataTransfer != null &&\n (dataTransfer.types.includes(\"Files\") ||\n (dataTransfer.types.includes(\"text/uri-list\") &&\n new URL(dataTransfer.getData(\"URL\")).searchParams.has(\"filename\")))\n );\n}\n", "import { localStorageSyncedStore } from \"../lib/store.ts\";\nimport { array, constants, string, tuple } from \"../lib/validation.ts\";\nimport type { JournalSortColumn } from \"../reports/journal/sort.ts\";\n\nconst default_journal_show = [\n \"balance\",\n \"budget\",\n \"cleared\",\n \"custom\",\n \"discovered\",\n \"document\",\n \"note\",\n \"pending\",\n \"query\",\n \"statement\",\n \"transaction\",\n];\n\n/** The types of entries to show in the journal. */\nexport const journal_show = localStorageSyncedStore(\n \"journal-show\",\n array(string),\n () => default_journal_show,\n);\n\nexport type JournalSort = [JournalSortColumn, \"asc\" | \"desc\"];\nconst default_journal_sort: JournalSort = [\"date\", \"desc\"];\n\n/** The column and order that the journal should be sorted in. */\nexport const journal_sort = localStorageSyncedStore<JournalSort>(\n \"journal-sort-order\",\n tuple(constants(\"date\", \"flag\", \"narration\"), constants(\"asc\", \"desc\")),\n () => default_journal_sort,\n);\n", "/**\n * Escape the value to produce a valid regex for the Fava filter.\n */\nexport function escape_for_regex(value: string): string {\n return value.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n", "import { get as store_get } from \"svelte/store\";\n\nimport { escape_for_regex } from \"../../lib/regex.ts\";\nimport { router } from \"../../router.ts\";\nimport { fql_filter } from \"../../stores/filters.ts\";\n\n/**\n * Add a filter to the existing list of filters. Any parts that are interpreted\n * as a regex must be escaped.\n */\nfunction add_filter(value: string): void {\n const $fql_filter = store_get(fql_filter);\n router.set_search_param(\n \"filter\",\n $fql_filter ? `${$fql_filter} ${value}` : value,\n );\n}\n\nexport function handle_journal_click({ target }: Event): void {\n if (!(target instanceof HTMLElement) || target instanceof HTMLAnchorElement) {\n return;\n }\n\n if (target.matches(\".tag, .link\")) {\n // Filter for tags and links when clicking on them.\n add_filter(target.innerText);\n } else if (target.matches(\".payee\")) {\n // Filter for payees when clicking on them.\n // Note: any special characters in the payee string are escaped so the\n // filter matches against the payee literally.\n add_filter(`payee:\"^${escape_for_regex(target.innerText)}$\"`);\n } else if (target.tagName === \"DT\") {\n // Filter for metadata key when clicking on the key. The key tag text\n // includes the colon.\n const expr = `${target.innerText}\"\"`;\n add_filter(target.closest(\".postings\") ? `any(${expr})` : expr);\n } else if (target.tagName === \"DD\") {\n // Filter for metadata key and value when clicking on the value. The key\n // tag text includes the colon.\n const key = (target.previousElementSibling as HTMLElement).innerText;\n const value = `\"^${escape_for_regex(target.innerText)}$\"`;\n const expr = `${key}${value}`;\n add_filter(target.closest(\".postings\") ? `any(${expr})` : expr);\n } else if (target.closest(\".indicators\")) {\n // Toggle postings and metadata by clicking on indicators.\n target.closest(\".journal > li\")?.classList.toggle(\"show-full-entry\");\n }\n}\n", "/**\n * Toggle an element in a set (mutating and returning it).\n */\nexport function toggle<T>(set: Set<T>, element: T): Set<T> {\n if (set.has(element)) {\n set.delete(element);\n } else {\n set.add(element);\n }\n return set;\n}\n", "<script lang=\"ts\" module>\n import { _, format } from \"../../i18n.ts\";\n import type { KeySpec } from \"../../keyboard-shortcuts.ts\";\n import { keyboardShortcut } from \"../../keyboard-shortcuts.ts\";\n import { toggle } from \"../../lib/set.ts\";\n import { journal_show } from \"../../stores/journal.ts\";\n\n const toggleText = _(\"Toggle %(type)s entries\");\n\n /**\n * This is the list of all toggle buttons to show.\n * For some entry types we have subtypes (like 'cleared' for 'transaction'),\n * which get special-cased in the toggle logic below.\n */\n const buttons: [\n type: string,\n button_text: string,\n title: string | null,\n shortcut: KeySpec,\n supertype?: string,\n ][] = [\n [\"open\", \"Open\", null, \"s o\"],\n [\"close\", \"Close\", null, \"s c\"],\n [\"transaction\", \"Transaction\", null, \"s t\"],\n [\"cleared\", \"*\", _(\"Cleared transactions\"), \"t c\", \"transaction\"],\n [\"pending\", \"!\", _(\"Pending transactions\"), \"t p\", \"transaction\"],\n [\"other\", \"x\", _(\"Other transactions\"), \"t o\", \"transaction\"],\n [\"balance\", \"Balance\", null, \"s b\"],\n [\"note\", \"Note\", null, \"s n\"],\n [\"document\", \"Document\", null, \"s d\"],\n [\n \"discovered\",\n \"D\",\n _(\"Documents with a #discovered tag\"),\n \"d d\",\n \"document\",\n ],\n [\"linked\", \"L\", _(\"Documents with a #linked tag\"), \"d l\", \"document\"],\n [\"pad\", \"Pad\", null, \"s p\"],\n [\"query\", \"Query\", null, \"s q\"],\n [\"custom\", \"Custom\", null, \"s C\"],\n [\"budget\", \"B\", _(\"Budget entries\"), \"s B\", \"custom\"],\n [\"metadata\", _(\"Metadata\"), _(\"Toggle metadata\"), \"m\"],\n [\"postings\", _(\"Postings\"), _(\"Toggle postings\"), \"p\"],\n ];\n</script>\n\n<script lang=\"ts\">\n let shownSet = $derived(new Set($journal_show));\n\n function toggle_type(type: string) {\n journal_show.update((show) => {\n const set = new Set(show);\n toggle(set, type);\n // Also toggle all entries that have `type` as their supertype.\n buttons.filter((b) => b[4] === type).forEach((b) => toggle(set, b[0]));\n return [...set].sort();\n });\n }\n\n let active = $derived((type: string, supertype?: string): boolean =>\n supertype != null\n ? shownSet.has(type) && shownSet.has(supertype)\n : shownSet.has(type),\n );\n</script>\n\n<form class=\"flex-row\">\n {#each buttons as [type, button_text, title, shortcut, supertype] (type)}\n <button\n type=\"button\"\n title={title ?? format(toggleText, { type: button_text })}\n {@attach keyboardShortcut(shortcut)}\n class:inactive={!active(type, supertype)}\n onclick={() => {\n toggle_type(type);\n }}\n >\n {button_text}\n </button>\n {/each}\n</form>\n\n<style>\n form {\n justify-content: flex-end;\n }\n</style>\n", "<script lang=\"ts\">\n import { _ } from \"../../i18n.ts\";\n import { journal_sort } from \"../../stores/journal.ts\";\n import type { JournalSortColumn } from \"./sort.ts\";\n\n interface Props {\n disabled: boolean;\n show_change_and_balance: boolean;\n set_sort_column: (name: JournalSortColumn) => void;\n }\n\n let { disabled, show_change_and_balance, set_sort_column }: Props = $props();\n\n let [name, order] = $derived($journal_sort);\n</script>\n\n<ol class=\"flex-table journal\">\n <li class=\"head\">\n <p>\n <button\n type=\"button\"\n class=\"datecell unset\"\n data-order={name === \"date\" ? order : undefined}\n {disabled}\n onclick={() => {\n set_sort_column(\"date\");\n }}\n >\n {_(\"Date\")}\n </button>\n <button\n type=\"button\"\n class=\"flag unset\"\n data-order={name === \"flag\" ? order : undefined}\n {disabled}\n onclick={() => {\n set_sort_column(\"flag\");\n }}\n >\n {_(\"F\")}\n </button>\n <button\n type=\"button\"\n class=\"description unset\"\n data-order={name === \"narration\" ? order : undefined}\n {disabled}\n onclick={() => {\n set_sort_column(\"narration\");\n }}\n >\n {_(\"Payee\")}/{_(\"Narration\")}\n </button>\n <span class=\"num\">{_(\"Units\")}</span>\n {#if show_change_and_balance}\n <span class=\"num\">{_(\"Cost\")} / {_(\"Change\")}</span>\n <span class=\"num\">{_(\"Price\")} / {_(\"Balance\")}</span>\n {:else}\n <span class=\"num\">{_(\"Cost\")}</span>\n <span class=\"num\">{_(\"Price\")}</span>\n {/if}\n </p>\n </li>\n</ol>\n\n<style>\n ol {\n margin: var(--flex-gap) 0 0;\n }\n\n button {\n position: relative;\n }\n</style>\n", "import { get_direction, sortElements } from \"../../sort/index.ts\";\nimport type { JournalSort } from \"../../stores/journal.ts\";\n\nexport type JournalSortColumn = \"date\" | \"flag\" | \"narration\";\n\nconst journal_column_types = {\n date: \"num\",\n flag: \"string\",\n narration: \"string\",\n};\n\nconst journal_column_selectors = {\n date: \".datecell\",\n flag: \".flag\",\n narration: \".description\",\n};\n\nexport function sort_journal(ol: HTMLOListElement, sort: JournalSort): void {\n const [column, order] = sort;\n const type = journal_column_types[column];\n const selector = journal_column_selectors[column];\n sortElements<HTMLLIElement>(\n ol,\n [].slice.call(ol.children),\n (li) => li.querySelector(selector),\n get_direction(order),\n type,\n );\n}\n", "<script lang=\"ts\">\n import { untrack } from \"svelte\";\n\n import { _ } from \"../../i18n.ts\";\n import { get_el } from \"../../lib/dom.ts\";\n import { shallow_equal } from \"../../lib/equals.ts\";\n import { log_error } from \"../../log.ts\";\n import { is_supported_datatransfer } from \"../../modals/document-upload.ts\";\n import { is_loading, loading_state } from \"../../router.ts\";\n import {\n journal_show,\n journal_sort,\n type JournalSort,\n } from \"../../stores/journal.ts\";\n import { get_account_from_url } from \"../accounts/index.ts\";\n import { handle_journal_click } from \"./click_handler.ts\";\n import JournalFilters from \"./JournalFilters.svelte\";\n import JournalHeaders from \"./JournalHeaders.svelte\";\n import type { JournalSortColumn } from \"./sort.ts\";\n import { sort_journal } from \"./sort.ts\";\n\n interface Props {\n all_pages?: Promise<DocumentFragment | null>[];\n initial_sort: JournalSort;\n journal: DocumentFragment;\n show_change_and_balance: boolean;\n }\n\n let {\n all_pages = [],\n initial_sort,\n journal,\n show_change_and_balance,\n }: Props = $props();\n\n let ol: HTMLOListElement | undefined = $state();\n\n /** Set the data attributes for drag-and-drop on dragenter */\n function ondragenter(event: DragEvent) {\n const closest_element = get_el(event.target);\n const description = closest_element?.closest(\".description\");\n // Get the closest `<li>` to also find the first posting account in a transaction.\n const li = description?.closest(\"li\");\n if (\n description instanceof Element &&\n li &&\n is_supported_datatransfer(event.dataTransfer)\n ) {\n const account = [...li.querySelectorAll(\"a\")]\n .map((a) => new URL(a.href))\n .map(get_account_from_url)\n .find((res) => res.is_ok)?.value;\n if (account != null) {\n description.setAttribute(\"data-account-name\", account);\n description.classList.add(\"dragover\");\n event.preventDefault();\n\n const date_link = description\n .closest(\".journal > li\")\n ?.querySelector(\".datecell\")\n ?.querySelector(\"a\");\n if (date_link != null) {\n const entry_date = date_link.innerText;\n const hash = new URL(date_link.href).hash;\n if (hash.startsWith(\"#context-\")) {\n const entry_hash = hash.slice(9);\n description.setAttribute(\"data-entry-date\", entry_date);\n description.setAttribute(\"data-entry-hash\", entry_hash);\n }\n }\n }\n }\n }\n</script>\n\n<JournalFilters />\n<JournalHeaders\n disabled={$is_loading}\n {show_change_and_balance}\n set_sort_column={(column: JournalSortColumn) => {\n const sort: JournalSort = [\n column,\n shallow_equal($journal_sort, [column, \"asc\"]) ? \"desc\" : \"asc\",\n ];\n if (ol) {\n sort_journal(ol, sort);\n $journal_sort = sort;\n }\n }}\n/>\n<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n<!-- svelte-ignore a11y_click_events_have_key_events -->\n<ol\n class={[\"flex-table\", \"journal\", ...$journal_show.map((s) => `show-${s}`)]}\n bind:this={ol}\n onclick={handle_journal_click}\n {ondragenter}\n {@attach (node: HTMLOListElement) => {\n void journal;\n untrack(() => {\n const sort = $journal_sort;\n node.innerHTML = \"\";\n node.append(journal);\n // If the data is already sorted by the fetched order, we do not need to sort again\n // For the non-datewise sorts, only sort once for the initial page and once at the end.\n const needs_sorting = !shallow_equal(sort, initial_sort);\n if (needs_sorting) {\n sort_journal(node, sort);\n }\n if (all_pages.length > 0) {\n loading_state\n .run(async () => {\n for (const page of all_pages) {\n const fragment = await page;\n if (fragment) {\n node.append(fragment);\n }\n }\n if (needs_sorting) {\n sort_journal(node, sort);\n }\n })\n .catch(log_error);\n }\n });\n }}\n></ol>\n", "<script lang=\"ts\">\n import ChartSwitcher from \"../../charts/ChartSwitcher.svelte\";\n import { ParsedHierarchyChart } from \"../../charts/hierarchy.ts\";\n import { urlForAccount } from \"../../helpers.ts\";\n import { _ } from \"../../i18n.ts\";\n import { is_non_empty } from \"../../lib/array.ts\";\n import { intervalLabel } from \"../../lib/interval.ts\";\n import { currentTimeFilterDateFormat } from \"../../stores/format.ts\";\n import { interval } from \"../../stores/url.ts\";\n import IntervalTreeTable from \"../../tree-table/IntervalTreeTable.svelte\";\n import JournalTable from \"../journal/JournalTable.svelte\";\n import type { AccountReportProps } from \"./index.ts\";\n\n let {\n account,\n report_type,\n charts,\n journal,\n interval_balances,\n dates,\n budgets,\n }: AccountReportProps = $props();\n\n let accumulate = $derived(report_type === \"balances\");\n let interval_label = $derived(intervalLabel($interval).toLowerCase());\n\n let all_charts = $derived(\n interval_balances && dates\n ? [\n ...charts,\n ...interval_balances\n .slice(0, 3)\n .map(\n (node, index) =>\n new ParsedHierarchyChart(\n $currentTimeFilterDateFormat(\n dates[index]?.begin ?? new Date(),\n ),\n node,\n ),\n ),\n ]\n : charts,\n );\n</script>\n\n<ChartSwitcher charts={all_charts} />\n\n<div class=\"droptarget\" data-account-name={account}>\n <div class=\"headerline\">\n <h3>\n {#if report_type !== \"journal\"}\n <a\n href={$urlForAccount(account)}\n title={_(\"Journal of all entries for this Account and Sub-Accounts\")}\n >\n {_(\"Account Journal\")}\n </a>\n {:else}\n {_(\"Account Journal\")}\n {/if}\n </h3>\n <h3>\n {#if report_type !== \"changes\"}\n <a href={$urlForAccount(account, { r: \"changes\" })}>\n {_(\"Changes\")} ({interval_label})\n </a>\n {:else}\n {_(\"Changes\")} ({interval_label})\n {/if}\n </h3>\n <h3>\n {#if report_type !== \"balances\"}\n <a href={$urlForAccount(account, { r: \"balances\" })}>\n {_(\"Balances\")} ({interval_label})\n </a>\n {:else}\n {_(\"Balances\")} ({interval_label})\n {/if}\n </h3>\n </div>\n {#if report_type === \"journal\" && journal != null}\n <JournalTable\n {journal}\n initial_sort={[\"date\", \"desc\"]}\n show_change_and_balance={true}\n />\n {:else if interval_balances && is_non_empty(interval_balances) && budgets && dates}\n <IntervalTreeTable\n trees={interval_balances}\n {dates}\n {budgets}\n {accumulate}\n />\n {/if}\n</div>\n", "import { get_account_report } from \"../../api/index.ts\";\nimport type { AccountBudget } from \"../../api/validators.ts\";\nimport type { AccountTreeNode } from \"../../charts/hierarchy.ts\";\nimport type { ParsedFavaChart } from \"../../charts/index.ts\";\nimport type { NonRelativeUrlPathError } from \"../../helpers.ts\";\nimport { getUrlPath } from \"../../helpers.ts\";\nimport { fragment_from_string } from \"../../lib/dom.ts\";\nimport { err, ok, type Result } from \"../../lib/result.ts\";\nimport { getURLFilters } from \"../../stores/filters.ts\";\nimport { Route } from \"../route.ts\";\nimport AccountReport from \"./AccountReport.svelte\";\n\nexport type AccountReportType = \"journal\" | \"balances\" | \"changes\";\n\nconst to_report_type = (s: string | null): AccountReportType =>\n s === \"balances\" || s === \"changes\" ? s : \"journal\";\n\nexport interface AccountReportProps {\n account: string;\n report_type: AccountReportType;\n charts: ParsedFavaChart[];\n journal: DocumentFragment | null;\n interval_balances: AccountTreeNode[] | null;\n dates: { begin: Date; end: Date }[] | null;\n budgets: Record<string, AccountBudget[]> | null;\n}\n\nclass NotAnAccountUrlError extends Error {\n constructor(pathname: string) {\n super(`Path '${pathname}' is not a path for the account report.`);\n }\n}\n\n/**\n * Get the account from the given URL.\n */\nexport function get_account_from_url(\n url: URL,\n): Result<string, NonRelativeUrlPathError | NotAnAccountUrlError> {\n return getUrlPath(url).and_then((relative_path) => {\n const [base, account] = relative_path.split(\"/\");\n if (base === \"account\" && account != null) {\n return ok(account);\n }\n return err(new NotAnAccountUrlError(relative_path));\n });\n}\n\nexport const account_report = new Route<AccountReportProps>(\n \"account\",\n AccountReport,\n async (url) => {\n const account = get_account_from_url(url).unwrap();\n const report_type = to_report_type(url.searchParams.get(\"r\"));\n const { charts, journal, interval_balances, dates, budgets } =\n await get_account_report({\n ...getURLFilters(url),\n a: account,\n r: report_type,\n });\n\n return {\n charts,\n journal: journal != null ? fragment_from_string(journal) : null,\n interval_balances,\n dates,\n budgets,\n account,\n report_type,\n };\n },\n (url) => {\n const [, account] = getUrlPath(url).unwrap().split(\"/\");\n return `account:${account ?? \"ERROR\"}`;\n },\n);\n", "<!--\n @component\n A `<th>` table header for a sortable column.\n-->\n<script lang=\"ts\">\n import { type SortColumn, type Sorter, UnsortedColumn } from \"./index.ts\";\n\n interface Props {\n /** The current sorter. */\n sorter: Sorter;\n /** The column to show the header for. */\n column: SortColumn;\n }\n\n let { sorter = $bindable(), column }: Props = $props();\n\n let is_sortable = $derived(!(column instanceof UnsortedColumn));\n</script>\n\n{#if is_sortable}\n <th\n onclick={() => {\n sorter = sorter.switchColumn(column);\n }}\n data-order={column === sorter.column ? sorter.order : undefined}\n data-sort\n >\n {column.name}\n </th>\n{:else}\n <th>\n {column.name}\n </th>\n{/if}\n", "<script lang=\"ts\">\n import { day } from \"../../format.ts\";\n import { _ } from \"../../i18n.ts\";\n import { NumberColumn, Sorter } from \"../../sort/index.ts\";\n import SortHeader from \"../../sort/SortHeader.svelte\";\n import { ctx } from \"../../stores/format.ts\";\n import { currency_name } from \"../../stores/index.ts\";\n\n type T = [Date, number];\n interface Props {\n prices: readonly T[];\n quote: string;\n }\n\n let { prices, quote }: Props = $props();\n\n const columns = [\n new NumberColumn<T>(_(\"Date\"), (d) => d[0].valueOf()),\n new NumberColumn<T>(_(\"Price\"), (d) => d[1]),\n ] as const;\n let sorter = $state(new Sorter(columns[0], \"desc\"));\n\n let sorted_prices = $derived(sorter.sort(prices));\n let quote_name = $derived($currency_name(quote));\n</script>\n\n<table>\n <thead>\n <tr>\n {#each columns as column (column)}\n <SortHeader bind:sorter {column} />\n {/each}\n </tr>\n </thead>\n <tbody>\n {#each sorted_prices as [date, value] (date)}\n <tr>\n <td>{day(date)}</td>\n <td class=\"num\" title={quote_name}>\n {$ctx.amount(value, quote)}\n </td>\n </tr>\n {/each}\n </tbody>\n</table>\n", "<script lang=\"ts\">\n import ChartSwitcher from \"../../charts/ChartSwitcher.svelte\";\n import { currency_name } from \"../../stores/index.ts\";\n import CommodityTable from \"./CommodityTable.svelte\";\n import type { CommoditiesReportProps } from \"./index.ts\";\n\n let { charts, commodities }: CommoditiesReportProps = $props();\n</script>\n\n<ChartSwitcher {charts} />\n{#each commodities as { base, quote, prices } (`${base}-${quote}`)}\n <div class=\"left\">\n <h3>\n <span title={$currency_name(base)}>{base}</span> /\n <span title={$currency_name(quote)}>{quote}</span>\n </h3>\n <CommodityTable {prices} {quote} />\n </div>\n{/each}\n", "import { get_commodities } from \"../../api/index.ts\";\nimport type { Commodities } from \"../../api/validators.ts\";\nimport { LineChart } from \"../../charts/line.ts\";\nimport { domHelpers } from \"../../charts/tooltip.ts\";\nimport { day } from \"../../format.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { getURLFilters } from \"../../stores/filters.ts\";\nimport { Route } from \"../route.ts\";\nimport CommoditiesSvelte from \"./Commodities.svelte\";\n\nexport interface CommoditiesReportProps {\n charts: LineChart[];\n commodities: Commodities;\n}\n\nexport const commodities = new Route<CommoditiesReportProps>(\n \"commodities\",\n CommoditiesSvelte,\n async (url) =>\n get_commodities(getURLFilters(url)).then((cs) => {\n const charts = cs.map(({ base, quote, prices }) => {\n const name = `${base} / ${quote}`;\n const values = prices.map((d) => ({ name, date: d[0], value: d[1] }));\n\n return new LineChart(name, [{ name, values }], (c, d) => [\n domHelpers.t(`1 ${base} = ${c.amount(d.value, quote)}`),\n domHelpers.em(day(d.date)),\n ]);\n });\n return { commodities: cs, charts };\n }),\n () => _(\"Commodities\"),\n);\n", "/**\n * Fuzzy match a pattern against a string.\n *\n * @param pattern The pattern to search for.\n * @param text The string to search in.\n *\n * Returns a score greater than zero if all characters of `pattern` can be\n * found in order in `string`. For lowercase characters in `pattern` match both\n * lower and upper case, for uppercase only an exact match counts.\n */\nexport function fuzzytest(pattern: string, text: string): number {\n const casesensitive = pattern === pattern.toLowerCase();\n const exact = casesensitive\n ? text.toLowerCase().indexOf(pattern)\n : text.indexOf(pattern);\n if (exact > -1) {\n return pattern.length ** 2;\n }\n let score = 0;\n let localScore = 0;\n let pindex = 0;\n for (const char of text) {\n const search = pattern[pindex];\n if (char === search || char.toLowerCase() === search) {\n pindex += 1;\n localScore += 1;\n } else {\n localScore = 0;\n }\n score += localScore;\n }\n return pindex === pattern.length ? score : 0;\n}\n\n/**\n * Filter a list of possible suggestions to only those that match the pattern\n */\nexport function fuzzyfilter(\n pattern: string,\n suggestions: readonly string[],\n): readonly string[] {\n if (!pattern) {\n return suggestions;\n }\n return suggestions\n .map((s): [string, number] => [s, fuzzytest(pattern, s)])\n .filter(([, score]) => score > 0)\n .sort((a, b) => b[1] - a[1])\n .map(([s]) => s);\n}\n\nexport type FuzzyWrappedText = [\"text\" | \"match\", string][];\n\n/**\n * Wrap fuzzy matched characters.\n *\n * Wrap all occurences of characters of `pattern` (in order) in `string` in\n * tuples with a \"match\" marker (and the others as plain \"text\") to allow for\n * the matches to be wrapped in markers to highlight them in the HTML.\n */\nexport function fuzzywrap(pattern: string, text: string): FuzzyWrappedText {\n if (!pattern) {\n return [[\"text\", text]];\n }\n const casesensitive = pattern === pattern.toLowerCase();\n const exact = casesensitive\n ? text.toLowerCase().indexOf(pattern)\n : text.indexOf(pattern);\n if (exact > -1) {\n const before = text.slice(0, exact);\n const match = text.slice(exact, exact + pattern.length);\n const after = text.slice(exact + pattern.length);\n const result: FuzzyWrappedText = [];\n if (before) {\n result.push([\"text\", before]);\n }\n result.push([\"match\", match]);\n if (after) {\n result.push([\"text\", after]);\n }\n return result;\n }\n // current index into the pattern\n let pindex = 0;\n // current unmatched string\n let plain: string | null = null;\n // current matched string\n let match: string | null = null;\n const result: FuzzyWrappedText = [];\n for (const char of text) {\n const search = pattern[pindex];\n if (char === search || char.toLowerCase() === search) {\n match = match != null ? match + char : char;\n if (plain != null) {\n result.push([\"text\", plain]);\n plain = null;\n }\n pindex += 1;\n } else {\n plain = plain != null ? plain + char : char;\n if (match != null) {\n result.push([\"match\", match]);\n match = null;\n }\n }\n }\n if (pindex < pattern.length) {\n return [[\"text\", text]];\n }\n if (plain != null) {\n result.push([\"text\", plain]);\n plain = null;\n }\n if (match != null) {\n result.push([\"match\", match]);\n match = null;\n }\n return result;\n}\n", "<!--\n @component\n An autocomplete input for fuzzy selection of suggestions.\n\n It receives its `value` and a list of possible `suggestions`. Matching suggestions will be\n shown in a dropdown below the input field and can be selected by clicking or by keyboard.\n\n This is an implementation of the Combobox pattern as described by the\n ARIA Authoring Practices Guide (APG) at\n https://www.w3.org/WAI/ARIA/apg/patterns/combobox/\n In particular it should match the Editable Combobox With List Autocomplete example at\n https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/\n-->\n<script lang=\"ts\">\n import type { KeySpec } from \"./keyboard-shortcuts.ts\";\n import { keyboardShortcut } from \"./keyboard-shortcuts.ts\";\n import {\n fuzzyfilter,\n fuzzywrap,\n type FuzzyWrappedText,\n } from \"./lib/fuzzy.ts\";\n\n interface Props {\n /** The currently entered value (bindable). */\n value: string;\n /** A placeholder for the input field. */\n placeholder: string;\n /** The suggestions for the value. */\n suggestions: readonly string[];\n /** A function to extract the string that should be used for suggestion filtering. */\n valueExtractor?: (val: string, input: HTMLInputElement) => string;\n /** A function to update the value after selecting a suggestion. */\n valueSelector?: (val: string, input: HTMLInputElement) => string;\n /** Automatically adjust the size of the input element. */\n setSize?: boolean;\n /** A key binding to add for this input. */\n key?: KeySpec;\n /** A function that checks the entered value for validity. */\n checkValidity?: (val: string) => string;\n /** Whether to mark the input as required. */\n required?: boolean | undefined;\n /** Whether to show a button to clear the input. */\n clearButton?: boolean;\n /** An event handler to run on blur. */\n onBlur?: (el: HTMLInputElement) => void;\n /** An event handler to run on enter. */\n onEnter?: (el: HTMLInputElement) => void;\n /** An event handler to run on an element being selected. */\n onSelect?: (el: HTMLInputElement) => void;\n }\n\n let {\n value = $bindable(),\n placeholder,\n suggestions,\n valueExtractor,\n valueSelector,\n setSize = false,\n key,\n checkValidity,\n clearButton = false,\n required,\n onBlur,\n onEnter,\n onSelect,\n }: Props = $props();\n\n const uid = $props.id();\n const autocomple_id = `combobox-autocomplete-${uid}`;\n\n let hidden = $state.raw(true);\n let index = $state.raw(-1);\n let input: HTMLInputElement | undefined = $state.raw();\n\n let size = $derived(\n setSize ? Math.max(value.length, placeholder.length) + 1 : undefined,\n );\n let extractedValue = $derived(\n input && valueExtractor ? valueExtractor(value, input) : value,\n );\n let filteredSuggestions: {\n suggestion: string;\n fuzzywrapped: FuzzyWrappedText;\n }[] = $derived.by(() => {\n const filtered = fuzzyfilter(extractedValue, suggestions)\n .slice(0, 30)\n .map((suggestion) => ({\n suggestion,\n fuzzywrapped: fuzzywrap(extractedValue, suggestion),\n }));\n return filtered.length === 1 && filtered[0]?.suggestion === extractedValue\n ? []\n : filtered;\n });\n\n $effect(() => {\n const msg = checkValidity ? checkValidity(value) : \"\";\n input?.setCustomValidity(msg);\n });\n\n $effect.pre(() => {\n // ensure the index is pointing to a valid element.\n index = Math.min(index, filteredSuggestions.length - 1);\n });\n\n function select(suggestion: string) {\n value =\n input && valueSelector ? valueSelector(suggestion, input) : suggestion;\n if (input) {\n onSelect?.(input);\n }\n hidden = true;\n }\n\n function mousedown(event: MouseEvent, suggestion: string) {\n if (event.button === 0) {\n select(suggestion);\n }\n }\n\n let expanded = $derived(!hidden && filteredSuggestions.length > 0);\n\n function keydown(event: KeyboardEvent) {\n if (event.key === \"Enter\") {\n const suggestion = filteredSuggestions[index]?.suggestion;\n if (index > -1 && !hidden && suggestion != null) {\n event.preventDefault();\n select(suggestion);\n } else if (input) {\n onEnter?.(input);\n }\n } else if (event.key === \" \" && event.ctrlKey) {\n hidden = false;\n } else if (event.key === \"Escape\") {\n event.stopPropagation();\n if (expanded) {\n index = -1;\n hidden = true;\n } else {\n value = \"\";\n }\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n index = index === 0 ? filteredSuggestions.length - 1 : index - 1;\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n index = index === filteredSuggestions.length - 1 ? 0 : index + 1;\n }\n }\n</script>\n\n<span>\n <input\n type=\"text\"\n autocomplete=\"off\"\n role=\"combobox\"\n aria-expanded={expanded}\n aria-controls={autocomple_id}\n bind:value\n bind:this={input}\n {@attach keyboardShortcut(key)}\n onblur={(event) => {\n hidden = true;\n onBlur?.(event.currentTarget);\n }}\n onfocus={() => {\n hidden = false;\n }}\n oninput={() => {\n hidden = false;\n }}\n onkeydown={keydown}\n {placeholder}\n {required}\n {size}\n />\n {#if clearButton && value}\n <button\n type=\"button\"\n tabindex={-1}\n class=\"muted round\"\n onclick={() => {\n value = \"\";\n if (input) {\n onSelect?.(input);\n }\n }}\n >\n ×\n </button>\n {/if}\n {#if filteredSuggestions.length}\n <ul {hidden} role=\"listbox\" id={autocomple_id}>\n {#each filteredSuggestions as { fuzzywrapped, suggestion }, i (suggestion)}\n <li\n role=\"option\"\n aria-selected={i === index}\n class:selected={i === index}\n onmousedown={(ev) => {\n mousedown(ev, suggestion);\n }}\n >\n {#each fuzzywrapped as [type, text], i (i)}\n {#if type === \"text\"}\n {text}\n {:else}\n <span>{text}</span>\n {/if}\n {/each}\n </li>\n {/each}\n </ul>\n {/if}\n</span>\n\n<style>\n span {\n position: relative;\n display: inline-block;\n flex: var(--autocomplete-wrapper-flex, initial);\n }\n\n input {\n width: 100%;\n }\n\n ul {\n position: var(--autocomplete-list-position, absolute);\n z-index: var(--z-index-autocomplete);\n overflow: hidden auto;\n background-color: var(--background);\n border: 1px solid var(--border-darker);\n box-shadow: var(--box-shadow-dropdown);\n }\n\n li {\n min-width: 8rem;\n padding: 0 0.5em;\n white-space: nowrap;\n cursor: pointer;\n }\n\n li.selected,\n li:hover {\n color: var(--background);\n background-color: var(--link-color);\n }\n\n button {\n position: absolute;\n top: 8px;\n right: 4px;\n background: transparent;\n }\n\n li span {\n height: 1.2em;\n padding: 0 0.05em;\n margin: 0 -0.05em;\n background-color: var(--autocomplete-match);\n border-radius: 2px;\n }\n\n @media print {\n button {\n display: none;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import AutocompleteInput from \"../AutocompleteInput.svelte\";\n import { _ } from \"../i18n.ts\";\n import { date as validate_date } from \"../lib/validation.ts\";\n import { is_closed_account } from \"../stores/accounts.ts\";\n import { accounts, accounts_set } from \"../stores/index.ts\";\n\n interface Props {\n /** The account name input value. */\n value: string;\n /** An optional list of accounts to suggest - otherwise the whole account list is used. */\n suggestions?: string[] | undefined;\n /** The date to enter this account for to exclude closed accounts. */\n date?: string | undefined;\n /** Whether to mark the input as required. */\n required?: boolean;\n }\n\n let { value = $bindable(), suggestions, date, required }: Props = $props();\n\n let checkValidity = $derived((val: string) =>\n !$accounts_set.size || $accounts_set.has(val) || (required !== true && !val)\n ? \"\"\n : _(\"Should be one of the declared accounts\"),\n );\n\n let parsed_date = $derived(validate_date(date).unwrap_or(null));\n let account_suggestions = $derived(suggestions ?? $accounts);\n let filtered_suggestions = $derived(\n parsed_date\n ? account_suggestions.filter(\n (account) => !$is_closed_account(account, parsed_date),\n )\n : account_suggestions,\n );\n</script>\n\n<AutocompleteInput\n placeholder={_(\"Account\")}\n bind:value\n {checkValidity}\n {required}\n suggestions={filtered_suggestions}\n/>\n", "/**\n * Get the basename of a file path.\n */\nexport function basename(filename: string): string {\n const parts = filename.split(/\\/|\\\\/);\n return parts[parts.length - 1] ?? \"\";\n}\n\n/**\n * Get the extension of a filename.\n */\nexport function ext(filename: string): string {\n const match = /\\.(\\w+)$/.exec(filename);\n return match?.[1] ?? \"\";\n}\n\n/**\n * Check whether the given filename includes the account parts at the end.\n */\nexport function documentHasAccount(filename: string, account: string): boolean {\n const accountParts = account.split(\":\").reverse();\n const folders = filename.split(/\\/|\\\\/).reverse().slice(1);\n return accountParts.every((part, index) => part === folders[index]);\n}\n\n/**\n * Splits the path to dirname (including last separator) and basename. Keeps\n * Windows and UNIX style path separators as they are, but handles both.\n */\nexport function dirnameBasename(path: string): [string, string] {\n // Special case for when we only have the last remaining separator i.e. root\n if (path.length < 2) {\n return [\"\", path];\n }\n // Handle both Windows and unix style path separators and a mixture of them\n const lastIndexOfSlash = path.lastIndexOf(\"/\", path.length - 2);\n const lastIndexOfBackslash = path.lastIndexOf(\"\\\\\", path.length - 2);\n const lastIndex =\n lastIndexOfSlash > lastIndexOfBackslash\n ? lastIndexOfSlash\n : lastIndexOfBackslash;\n // This could maybe happen on Windows if the path name is something like C:\\\n if (lastIndex < 0) {\n return [\"\", path];\n }\n return [path.substring(0, lastIndex + 1), path.substring(lastIndex + 1)];\n}\n", "import { parent as parentAccount } from \"./account.ts\";\n\n/**\n * A tree node.\n *\n * The only base property this has is `.children`, all others are\n * passed in via the generic parameter.\n */\nexport type TreeNode<S> = S & { readonly children: TreeNode<S>[] };\n\n/**\n * Generate an account tree from an array. The data will be sorted.\n *\n * This is a bit like d3-hierarchys stratify, but inserts implicit nodes that\n * are missing in the hierarchy.\n *\n * @param data - the data (accounts) to generate the tree for.\n * @param id - A getter to obtain the node name for an input datum.\n * @param init - A getter for any extra properties to set on the node.\n */\nexport function stratifyAccounts<T, S = null>(\n data: Iterable<T>,\n id: (datum: T) => string,\n init: (name: string, datum?: T) => S,\n): TreeNode<S> {\n return stratify(\n [...data].sort((a, b) => id(a).localeCompare(id(b))),\n id,\n init,\n parentAccount,\n );\n}\n\n/**\n * Generate a tree from an array. The data will not be sorted.\n *\n * This is a bit like d3-hierarchys stratify, but inserts implicit nodes that\n * are missing in the hierarchy.\n *\n * @param data - the data to generate the tree for.\n * @param id - A getter to obtain the node name for an input datum.\n * @param init - A getter for any extra properties to set on the node.\n * @param parent - A getter to obtain the parent node name.\n */\nexport function stratify<T, S = null>(\n data: Iterable<T>,\n id: (datum: T) => string,\n init: (name: string, datum?: T) => S,\n parent: (name: string) => string,\n): TreeNode<S> {\n const root: TreeNode<S> = { children: [], ...init(\"\") };\n const map = new Map<string, TreeNode<S>>();\n map.set(\"\", root);\n\n function addNode(name: string, datum?: T): TreeNode<S> {\n const existing = map.get(name);\n if (existing) {\n Object.assign(existing, init(name, datum));\n return existing;\n }\n const node: TreeNode<S> = { children: [], ...init(name, datum) };\n map.set(name, node);\n const parentName = parent(name);\n const parentNode = map.get(parentName) ?? addNode(parentName);\n parentNode.children.push(node);\n return node;\n }\n\n [...data].forEach((datum) => {\n addNode(id(datum), datum);\n });\n return root;\n}\n\n/**\n * Get all matching descendants.\n */\nexport function* all_matching<T>(\n root: TreeNode<T>,\n predicate: (node: TreeNode<T>) => boolean,\n): Generator<TreeNode<T>, void, void> {\n if (predicate(root)) {\n yield root;\n }\n for (const child of root.children) {\n for (const match of all_matching(child, predicate)) {\n yield match;\n }\n }\n}\n", "const FOCUSABLE_ELEMENTS = [\n \"a[href]\",\n 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\n \"select:not([disabled]):not([aria-hidden])\",\n \"textarea:not([disabled]):not([aria-hidden])\",\n \"button:not([disabled]):not([aria-hidden])\",\n \"object\",\n \"[contenteditable]\",\n].join(\", \");\n\nexport function getFocusableElements(el: Element): Element[] {\n return [...el.querySelectorAll(FOCUSABLE_ELEMENTS)];\n}\n\n/**\n * Focus a node (if possible).\n * @returns whether focusing succeeded.\n */\nexport function attemptFocus(el: Node): boolean {\n try {\n // @ts-expect-error We are attempting to focus any kind of element here.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n el.focus();\n } catch {\n // pass\n }\n return document.activeElement === el;\n}\n", "<!--\n @component\n A modal dialog.\n\n This tries to follow https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/.\n-->\n<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n import type { Attachment } from \"svelte/attachments\";\n\n import { attemptFocus, getFocusableElements } from \"../lib/focus.ts\";\n import { router } from \"../router.ts\";\n\n interface Props {\n shown: boolean;\n focus?: string;\n closeHandler?: () => void;\n children: Snippet;\n }\n\n let {\n shown,\n focus,\n closeHandler = router.close_overlay,\n children,\n }: Props = $props();\n\n /**\n * A Svelte action to handle focus within a modal.\n */\n const handleFocus: Attachment<HTMLDivElement> = (el) => {\n const keydown = (ev: KeyboardEvent) => {\n if (ev.key === \"Tab\") {\n const focusable = getFocusableElements(el);\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (ev.shiftKey && document.activeElement === first && last) {\n ev.preventDefault();\n attemptFocus(last);\n } else if (!ev.shiftKey && document.activeElement === last && first) {\n ev.preventDefault();\n attemptFocus(first);\n }\n } else if (ev.key === \"Escape\") {\n ev.preventDefault();\n closeHandler();\n }\n };\n\n document.addEventListener(\"keydown\", keydown);\n\n const selectorFocusEl = focus != null ? el.querySelector(focus) : undefined;\n const focusEl = selectorFocusEl ?? getFocusableElements(el)[0];\n if (focusEl) {\n attemptFocus(focusEl);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", keydown);\n };\n };\n</script>\n\n{#if shown}\n <div class=\"overlay\">\n <div class=\"background\" onclick={closeHandler} aria-hidden=\"true\"></div>\n <div class=\"content\" role=\"dialog\" aria-modal=\"true\" {@attach handleFocus}>\n {@render children()}\n <button type=\"button\" class=\"muted close\" onclick={closeHandler}>\n x\n </button>\n </div>\n </div>\n{/if}\n\n<style>\n :global(body:has(.overlay)) {\n overflow: hidden;\n }\n\n .background {\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n background: var(--overlay-wrapper-background);\n }\n\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--z-index-overlay);\n display: flex;\n align-items: start;\n justify-content: center;\n width: 100vw;\n height: 100vh;\n overflow: auto;\n }\n\n .content {\n position: relative;\n display: flex;\n width: 100%;\n max-width: 767px;\n padding: 1em;\n margin: 0.5em;\n margin-top: 10vh;\n background: var(--background);\n box-shadow: var(--box-shadow-overlay);\n }\n\n .close {\n position: absolute;\n top: 1em;\n right: 1em;\n width: 2em;\n height: 2em;\n margin: 0;\n line-height: 1em;\n color: var(--text-color-lighter);\n }\n\n .content :global(form),\n .content > :global(div) {\n width: 100%;\n }\n\n @media (width <= 767px) {\n /* Show the modal full-screen on mobile. */\n .overlay {\n height: 100%;\n }\n\n .background {\n /* Ensure that modal overflow gets a white background. */\n background: var(--background);\n }\n\n .content {\n height: 100%;\n margin: 0;\n box-shadow: unset;\n }\n }\n</style>\n", "import { writable } from \"svelte/store\";\n\nexport const selectedAccount = writable(\"\");\n", "<script lang=\"ts\">\n import { leaf } from \"../../lib/account.ts\";\n import type { TreeNode } from \"../../lib/tree.ts\";\n import { toggle_account, toggled_accounts } from \"../../stores/accounts.ts\";\n import Accounts from \"./Accounts.svelte\";\n import { selectedAccount } from \"./stores.ts\";\n\n interface Props {\n node: TreeNode<{ name: string; count: number }>;\n move: (m: { account: string; filename: string }) => void;\n }\n\n let { node, move }: Props = $props();\n let account = $derived(node.name);\n\n let drag = $state(false);\n let is_toggled = $derived($toggled_accounts.has(account));\n\n let hasChildren = $derived(node.children.length > 0);\n let selected = $derived($selectedAccount === node.name);\n\n /**\n * Start drag if a document filename is dragged onto an account.\n * @param event - The drag event that is passed to the event handler.\n */\n function dragenter(event: DragEvent) {\n const types = event.dataTransfer?.types ?? [];\n if (types.includes(\"fava/filename\")) {\n event.preventDefault();\n drag = true;\n }\n }\n\n /**\n * Handle a drop and bubble the event.\n * @param event - The drag event that is passed to the event handler.\n */\n function drop(event: DragEvent) {\n event.preventDefault();\n const filename = event.dataTransfer?.getData(\"fava/filename\");\n if (filename != null) {\n move({ account: node.name, filename });\n drag = false;\n }\n }\n</script>\n\n{#if account}\n <p\n ondragenter={dragenter}\n ondragover={dragenter}\n ondragleave={() => {\n drag = false;\n }}\n ondrop={drop}\n title={account}\n class=\"droptarget\"\n data-account-name={account}\n class:selected\n class:drag\n >\n {#if hasChildren}\n <button\n type=\"button\"\n class=\"unset toggle\"\n onclick={(event) => {\n toggle_account(account, event);\n event.stopPropagation();\n }}>{is_toggled ? \"▸\" : \"▾\"}</button\n >\n {/if}\n <button\n type=\"button\"\n class=\"unset leaf\"\n onclick={() => {\n $selectedAccount = selected ? \"\" : account;\n }}>{leaf(account)}</button\n >\n {#if node.count > 0}\n <span class=\"count\"> {node.count}</span>\n {/if}\n </p>\n{/if}\n{#if hasChildren && !is_toggled}\n <ul>\n {#each node.children as child (child.name)}\n <li>\n <Accounts node={child} {move} />\n </li>\n {/each}\n </ul>\n{/if}\n\n<style>\n ul {\n padding: 0 0 0 0.5em;\n margin: 0;\n }\n\n p {\n position: relative;\n display: flex;\n padding-right: 0.5em;\n margin: 0;\n overflow: hidden;\n border-bottom: 1px solid var(--table-border);\n border-left: 1px solid var(--table-border);\n }\n\n p > * {\n padding: 1px;\n }\n\n .count {\n opacity: 0.6;\n }\n\n .selected,\n .drag {\n background-color: var(--table-header-background);\n }\n\n .leaf {\n flex-grow: 1;\n margin-left: 1em;\n }\n\n .toggle {\n position: absolute;\n margin: 0 0.25rem;\n color: var(--treetable-expander);\n }\n</style>\n", "<!--\n @component\n A basic fullsize readonly editor that loads and displays the text document\n at the given URL.\n-->\n<script lang=\"ts\">\n import { attach_editor } from \"../codemirror/dom.ts\";\n import type { CodemirrorBql } from \"../codemirror/types.ts\";\n import { fetch_text } from \"../lib/fetch.ts\";\n\n interface Props {\n /** Codemirror setup module */\n codemirror_bql: CodemirrorBql;\n /** The URL to load the editor contents from. */\n url: string;\n }\n\n let { url, codemirror_bql }: Props = $props();\n\n // svelte-ignore state_referenced_locally\n const editor = codemirror_bql.init_document_preview_editor();\n\n const set_editor_content = (value: string) => {\n if (value !== editor.state.sliceDoc()) {\n editor.dispatch(codemirror_bql.replace_contents(editor.state, value));\n }\n };\n\n $effect(() => {\n fetch_text(url).then(set_editor_content, () => {\n set_editor_content(`Loading ${url} failed...`);\n });\n });\n</script>\n\n<div {@attach attach_editor(editor)}></div>\n\n<style>\n div {\n width: 100%;\n height: 100%;\n }\n\n div :global(.cm-editor) {\n width: 100%;\n height: 100%;\n }\n</style>\n", "<!--\n @component\n A component to show PDFs, text, images, and HTML files.\n-->\n<script lang=\"ts\" module>\n /** For these file extensions we show a plain-text read-only editor. */\n const plainTextExtensions = [\"csv\", \"json\", \"qfx\", \"txt\", \"xml\"];\n /** For these file extensions we try to show the file as an `<img>` */\n const imageExtensions = [\n \"gif\",\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"svg\",\n \"webp\",\n \"bmp\",\n \"ico\",\n ];\n</script>\n\n<script lang=\"ts\">\n import DocumentPreviewEditor from \"../../editor/DocumentPreviewEditor.svelte\";\n import { urlForRaw } from \"../../helpers.ts\";\n import { ext } from \"../../lib/paths.ts\";\n\n interface Props {\n filename: string;\n }\n\n let { filename }: Props = $props();\n\n let extension = $derived(ext(filename).toLowerCase());\n let url = $derived($urlForRaw(\"document/\", { filename }));\n</script>\n\n{#if extension === \"pdf\"}\n <object title={filename} data={url}></object>\n{:else if plainTextExtensions.includes(extension)}\n {#await import(\"../../codemirror/bql.ts\") then codemirror_bql}\n <DocumentPreviewEditor {url} {codemirror_bql} />\n {/await}\n{:else if imageExtensions.includes(extension)}\n <img src={url} alt={filename} />\n{:else if [\"html\", \"htm\"].includes(extension)}\n <iframe src={url} title={filename} sandbox=\"\"></iframe>\n{:else}\n Preview for file `{filename}` with file type `{extension}` is not implemented\n{/if}\n\n<style>\n object,\n img,\n iframe {\n width: 100%;\n height: 100%;\n }\n\n img {\n object-fit: contain;\n }\n</style>\n", "<script lang=\"ts\">\n import type { Document } from \"../../entries/index.ts\";\n import { _ } from \"../../i18n.ts\";\n import { is_descendant_or_equal } from \"../../lib/account.ts\";\n import { basename } from \"../../lib/paths.ts\";\n import { DateColumn, Sorter, StringColumn } from \"../../sort/index.ts\";\n import SortHeader from \"../../sort/SortHeader.svelte\";\n import { selectedAccount } from \"./stores.ts\";\n\n interface Props {\n data: Document[];\n selected?: Document | null;\n }\n\n let { data, selected = $bindable(null) }: Props = $props();\n\n /**\n * Extract just the latter part of the filename if it starts with a date.\n */\n function name(doc: Document) {\n const base = basename(doc.filename);\n return base.startsWith(doc.date) ? base.substring(11) : base;\n }\n\n const columns = [\n new DateColumn<Document>(_(\"Date\")),\n new StringColumn<Document>(_(\"Name\"), (d) => name(d)),\n ] as const;\n let sorter = $state(new Sorter(columns[0], \"desc\"));\n\n let is_descendant_of_selected = $derived(\n is_descendant_or_equal($selectedAccount),\n );\n let filtered_documents = $derived(\n data.filter((doc) => is_descendant_of_selected(doc.account)),\n );\n let sorted_documents = $derived(sorter.sort(filtered_documents));\n</script>\n\n<table>\n <thead>\n <tr>\n {#each columns as column (column)}\n <SortHeader bind:sorter {column} />\n {/each}\n </tr>\n </thead>\n <tbody>\n {#each sorted_documents as doc (doc.filename)}\n <tr\n class:selected={selected === doc}\n draggable={true}\n title={doc.filename}\n ondragstart={(ev) => {\n ev.dataTransfer?.setData(\"fava/filename\", doc.filename);\n }}\n onclick={() => {\n selected = doc;\n }}\n >\n <td>{doc.date}</td>\n <td>{name(doc)}</td>\n </tr>\n {/each}\n </tbody>\n</table>\n\n<style>\n table {\n width: 100%;\n }\n\n tr {\n cursor: pointer;\n }\n\n .selected,\n tr:hover {\n background-color: var(--table-header-background);\n }\n</style>\n", "<script lang=\"ts\">\n import { group } from \"d3-array\";\n\n import { move_document } from \"../../api/index.ts\";\n import type { Document } from \"../../entries/index.ts\";\n import AccountInput from \"../../entry-forms/AccountInput.svelte\";\n import { _ } from \"../../i18n.ts\";\n import { basename } from \"../../lib/paths.ts\";\n import { stratifyAccounts } from \"../../lib/tree.ts\";\n import ModalBase from \"../../modals/ModalBase.svelte\";\n import { router } from \"../../router.ts\";\n import Accounts from \"./Accounts.svelte\";\n import DocumentPreview from \"./DocumentPreview.svelte\";\n import type { DocumentsReportProps } from \"./index.ts\";\n import Table from \"./Table.svelte\";\n\n let { documents }: DocumentsReportProps = $props();\n\n interface MoveDetails {\n account: string;\n filename: string;\n newName: string;\n }\n\n let grouped = $derived(group(documents, (d) => d.account));\n let node = $derived(\n stratifyAccounts(\n grouped.entries(),\n ([s]) => s,\n (name, d) => ({ name, count: d?.[1].length ?? 0 }),\n ),\n );\n\n let selected: Document | null = $state(null);\n let moving: MoveDetails | null = $state(null);\n\n /**\n * Rename the selected document with <F2>.\n */\n function keyup(ev: KeyboardEvent) {\n if (ev.key === \"F2\" && selected && !moving) {\n moving = {\n account: selected.account,\n filename: selected.filename,\n newName: basename(selected.filename),\n };\n }\n }\n\n async function move(event: SubmitEvent) {\n event.preventDefault();\n if (moving) {\n const moved = await move_document(\n moving.filename,\n moving.account,\n moving.newName,\n );\n if (moved) {\n moving = null;\n router.reload();\n }\n }\n }\n</script>\n\n<svelte:window onkeyup={keyup} />\n{#if moving}\n <ModalBase\n shown={true}\n closeHandler={() => {\n moving = null;\n }}\n >\n <form onsubmit={move}>\n <h3>{_(\"Move or rename document\")}</h3>\n <p><code>{moving.filename}</code></p>\n <p>\n <AccountInput bind:value={moving.account} />\n <input size={40} bind:value={moving.newName} />\n <button type=\"submit\">{_(\"Move\")}</button>\n </p>\n </form>\n </ModalBase>\n{/if}\n<div class=\"fixed-fullsize-container\">\n <Accounts\n {node}\n move={(arg: { account: string; filename: string }) => {\n moving = { ...arg, newName: basename(arg.filename) };\n }}\n />\n <div>\n <Table bind:selected data={documents} />\n </div>\n {#if selected}\n <DocumentPreview filename={selected.filename} />\n {/if}\n</div>\n\n<style>\n .fixed-fullsize-container {\n display: grid;\n grid-template-columns: 1fr 2fr 3fr;\n }\n\n .fixed-fullsize-container > :global(*) {\n height: 100%;\n overflow: auto;\n resize: horizontal;\n }\n\n .fixed-fullsize-container > :global(* + *) {\n border-left: thin solid var(--sidebar-border);\n }\n</style>\n", "import { get_documents } from \"../../api/index.ts\";\nimport type { Document } from \"../../entries/index.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { getURLFilters } from \"../../stores/filters.ts\";\nimport { Route } from \"../route.ts\";\nimport Documents from \"./Documents.svelte\";\n\nexport interface DocumentsReportProps {\n documents: Document[];\n}\n\nexport const documents = new Route(\n \"documents\",\n Documents,\n async (url: URL) =>\n get_documents(getURLFilters(url)).then((data) => ({\n documents: data,\n })),\n () => _(\"Documents\"),\n);\n", "<script lang=\"ts\">\n import { _ } from \"../i18n.ts\";\n import { keyboardShortcut } from \"../keyboard-shortcuts.ts\";\n\n interface Props {\n /** Whether anything is changed - the button is disabled otherwise. */\n changed: boolean;\n /** Whether the contents are currently being saved. */\n saving: boolean;\n }\n\n let { changed, saving }: Props = $props();\n\n let buttonContent = $derived(saving ? _(\"Saving...\") : _(\"Save\"));\n</script>\n\n<button\n type=\"submit\"\n disabled={!changed}\n {@attach keyboardShortcut({ key: \"Control+s\", mac: \"Meta+s\" })}\n>\n {buttonContent}\n</button>\n", "<!--\n @component\n An application menu.\n-->\n<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n\n interface Props {\n children: Snippet;\n }\n\n let { children }: Props = $props();\n</script>\n\n<div role=\"menubar\">\n {@render children()}\n</div>\n\n<style>\n div {\n display: flex;\n gap: 0.5em;\n align-items: stretch;\n margin-right: 0.5em;\n }\n</style>\n", "<!--\n @component\n A single top level menu item in an app menu.\n\n The default slot should filled with its vertically arranged sub-items.\n-->\n<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n\n interface Props {\n /** The name of the menu item. */\n name: string;\n children: Snippet;\n }\n\n let { name, children }: Props = $props();\n\n let open = $state(false);\n</script>\n\n<span\n class:open\n tabindex=\"0\"\n role=\"menuitem\"\n onblur={() => {\n open = false;\n }}\n onkeydown={(event) => {\n if (event.key === \"Escape\") {\n open = false;\n } else if (event.key === \"ArrowDown\") {\n open = true;\n }\n }}\n>\n {name}\n <ul role=\"menu\">\n {@render children()}\n </ul>\n</span>\n\n<style>\n span {\n padding: 0.7em 0.5em;\n cursor: pointer;\n }\n\n span.open,\n span:hover {\n background-color: var(--background-darkest);\n }\n\n span::after {\n content: \"▾\";\n }\n\n ul {\n position: absolute;\n z-index: var(--z-index-floating-ui);\n display: none;\n width: 500px;\n max-height: 400px;\n margin: 0.7em 0 0 -0.5em; /* The top margin should match the (bottom) padding of the span above. */\n overflow-y: auto;\n background-color: var(--background);\n border: 1px solid var(--border);\n box-shadow: var(--box-shadow-dropdown);\n }\n\n span.open > ul,\n span:hover > ul {\n display: block;\n }\n</style>\n", "<!--\n @component\n A sub-item in an app menu.\n-->\n<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n\n interface Props {\n /** A title (optional) for the element. */\n title?: string;\n /** Whether this menu item should be marked as selected. */\n selected?: boolean;\n /** The action to execute on click. */\n action: () => void;\n children: Snippet;\n right?: Snippet;\n }\n\n let { title, selected = false, action, children, right }: Props = $props();\n</script>\n\n<li\n class:selected\n {title}\n role=\"menuitem\"\n onclick={action}\n onkeydown={(event) => {\n if (event.key === \"Enter\") {\n action();\n }\n }}\n>\n {@render children()}\n {#if right}\n <span>\n {@render right()}\n </span>\n {/if}\n</li>\n\n<style>\n .selected::before {\n content: \"›\";\n }\n\n li {\n padding: 0.25em 0.5em;\n }\n\n span {\n float: right;\n }\n\n li:hover,\n li:focus-visible {\n background-color: var(--background-darkest);\n }\n</style>\n", "<script lang=\"ts\">\n interface Props {\n key: string[];\n }\n\n let { key }: Props = $props();\n</script>\n\n{#each key as part, index (part)}\n <kbd>{part}</kbd>{index === key.length - 1 ? \"\" : \"+\"}\n{/each}\n", "import { dirnameBasename } from \"./paths.ts\";\nimport { stratify, type TreeNode } from \"./tree.ts\";\n\nexport type SourceNode = TreeNode<{ name: string; path: string }>;\n\nexport function is_directory(node: SourceNode): boolean {\n return node.children.length > 0;\n}\n\nexport function build_compressed_sources_tree(\n sources: Set<string>,\n): SourceNode {\n const root = stratify(\n sources,\n (path) => path,\n (path) => ({ name: basename(path), path }),\n (path) => parent(path),\n );\n // Simplify the tree by removing the nodes with only one children\n return compress_tree(root);\n}\n\nfunction basename(path: string): string {\n const [_, basename] = dirnameBasename(path);\n return basename;\n}\n\nexport function parent(path: string): string {\n const [dirname, _] = dirnameBasename(path);\n return dirname;\n}\n\nfunction compress_tree(parent: SourceNode): SourceNode {\n if (parent.children.length === 0) {\n return parent;\n }\n\n if (parent.children.length === 1 && parent.children[0] !== undefined) {\n const onlyChild = parent.children[0];\n // Do not compress leaf nodes (=files)\n if (onlyChild.children.length === 0) {\n return parent;\n }\n\n const newName = parent.name + onlyChild.name;\n return compress_tree({\n name: newName,\n path: onlyChild.path,\n children: onlyChild.children,\n });\n } else {\n const newChildren: SourceNode[] = [];\n for (const child of parent.children) {\n newChildren.push(compress_tree(child));\n }\n return { name: parent.name, path: parent.path, children: newChildren };\n }\n}\n", "import { derived, get, writable } from \"svelte/store\";\n\nimport {\n build_compressed_sources_tree,\n is_directory,\n parent,\n} from \"../../lib/sources.ts\";\nimport { all_matching } from \"../../lib/tree.ts\";\nimport { sources } from \"../../stores/options.ts\";\n\nexport const sources_tree = derived(sources, build_compressed_sources_tree);\n\n// The directories which have been explicitly expanded (true) or collapsed (false).\nexport const expanded_directories = writable<ReadonlyMap<string, boolean>>(\n new Map(),\n);\n\n/**\n * Toggle a directory.\n *\n * If Shift-Click, deeply expand/collapse all descendants.\n * If Ctrl- or Meta-Click, expand/collapse direct children.\n */\nexport function toggle_directory(\n directory: string,\n expand: boolean,\n event: MouseEvent,\n): void {\n const $sources_tree = get(sources_tree);\n\n expanded_directories.update(($expanded_directories) => {\n const new_expanded_directories = new Map($expanded_directories);\n new_expanded_directories.set(directory, expand);\n if (event.shiftKey) {\n const descendants = all_matching(\n $sources_tree,\n (node) => is_directory(node) && node.path.startsWith(directory),\n );\n\n for (const node of descendants) {\n new_expanded_directories.set(node.path, expand);\n }\n } else if (event.ctrlKey || event.metaKey) {\n const direct_children = all_matching(\n $sources_tree,\n (node) => is_directory(node) && parent(node.path) === directory,\n );\n\n for (const node of direct_children) {\n new_expanded_directories.set(node.path, expand);\n }\n }\n return new_expanded_directories;\n });\n}\n", "<script lang=\"ts\">\n import type { SourceNode } from \"../../lib/sources.ts\";\n import Sources from \"./Sources.svelte\";\n import { expanded_directories, toggle_directory } from \"./stores.ts\";\n\n interface Props {\n is_root?: boolean;\n node: SourceNode;\n on_select: (source: string) => void;\n selected: string;\n }\n\n let { is_root = false, node, on_select, selected }: Props = $props();\n\n let is_expanded = $derived.by(() => {\n const result = $expanded_directories.get(node.path);\n // Even though root is always expanded, treat is as being collapsed by default.\n // This allows for expanding everything with one Ctrl/Meta-Click. The subsequent click would then collapse everything.\n return result ?? (!is_root && selected.startsWith(node.path));\n });\n\n let is_directory = $derived(node.children.length > 0);\n // Show where the selected file would be, if directories are collapsed\n let is_selected = $derived(\n is_directory && !is_expanded && !is_root\n ? selected.startsWith(node.path)\n : selected === node.path,\n );\n\n let action = (event: MouseEvent) => {\n if (is_directory) {\n toggle_directory(node.path, !is_expanded, event);\n } else {\n on_select(node.path);\n }\n event.stopPropagation();\n };\n</script>\n\n<li class:selected={is_selected} role=\"menuitem\">\n {#if is_root}\n <button\n type=\"button\"\n title=\"Beancount data root directory\nShift-Click to expand/collapse immediate directories\nCtrl-/Cmd-/Meta-Click to expand/collapse all directories.\"\n class=\"unset root\"\n onclick={action}\n >\n {node.name}\n </button>\n {:else}\n <p>\n {#if is_directory}\n <button type=\"button\" class=\"unset toggle\" onclick={action}>\n {is_expanded ? \"▾\" : \"▸\"}\n </button>\n {/if}\n <button type=\"button\" class=\"unset leaf\" onclick={action}>\n {node.name}\n </button>\n </p>\n {/if}\n {#if is_directory && (is_expanded || is_root)}\n <ul>\n {#each node.children as child (child.path)}\n <Sources node={child} {on_select} {selected} />\n {/each}\n </ul>\n {/if}\n</li>\n\n<style>\n ul {\n padding: 0 0 0 0.5em;\n margin: 0;\n }\n\n p {\n position: relative;\n display: flex;\n padding-right: 0.5em;\n margin: 0;\n overflow: hidden;\n border-bottom: 1px solid var(--table-border);\n border-left: 1px solid var(--table-border);\n }\n\n p > * {\n padding: 1px;\n }\n\n .selected {\n background-color: var(--table-header-background);\n }\n\n .leaf {\n flex-grow: 1;\n margin-left: 1em;\n }\n\n .toggle {\n position: absolute;\n margin: 0 0.25rem;\n color: var(--treetable-expander);\n }\n\n .root {\n margin: 0 0.25rem;\n }\n</style>\n", "<script lang=\"ts\">\n import type { EditorView } from \"@codemirror/view\";\n import type { Snippet } from \"svelte\";\n\n import type { CodemirrorBeancount } from \"../../codemirror/types.ts\";\n import { urlFor } from \"../../helpers.ts\";\n import { _ } from \"../../i18n.ts\";\n import { modKey } from \"../../keyboard-shortcuts.ts\";\n import { router } from \"../../router.ts\";\n import { insert_entry } from \"../../stores/fava_options.ts\";\n import AppMenu from \"./AppMenu.svelte\";\n import AppMenuItem from \"./AppMenuItem.svelte\";\n import AppMenuSubItem from \"./AppMenuSubItem.svelte\";\n import Key from \"./Key.svelte\";\n import Sources from \"./Sources.svelte\";\n import { sources_tree } from \"./stores.ts\";\n\n interface Props {\n file_path: string;\n editor: EditorView;\n codemirror_beancount: CodemirrorBeancount;\n children: Snippet;\n }\n\n let { file_path, editor, codemirror_beancount, children }: Props = $props();\n\n function goToFileAndLine(filename: string, line?: number) {\n const url = $urlFor(\"editor/\", { file_path: filename, line });\n // only load if the file changed.\n const load = filename !== file_path;\n router.navigate(url, load);\n if (!load && line != null) {\n // Scroll to line if we didn't change to a different file.\n editor.dispatch(codemirror_beancount.scroll_to_line(editor.state, line));\n editor.focus();\n }\n }\n</script>\n\n<div>\n <AppMenu>\n <AppMenuItem name={_(\"File\")}>\n <Sources\n is_root\n node={$sources_tree}\n on_select={(source: string) => {\n goToFileAndLine(source);\n }}\n selected={file_path}\n ></Sources>\n </AppMenuItem>\n <AppMenuItem name={_(\"Edit\")}>\n <AppMenuSubItem\n action={() => codemirror_beancount.beancount_format(editor)}\n >\n {_(\"Align Amounts\")}\n {#snippet right()}\n <Key key={[modKey, \"d\"]} />\n {/snippet}\n </AppMenuSubItem>\n <AppMenuSubItem action={() => codemirror_beancount.toggleComment(editor)}>\n {_(\"Toggle Comment (selection)\")}\n {#snippet right()}\n <Key key={[modKey, \"/\"]} />\n {/snippet}\n </AppMenuSubItem>\n <AppMenuSubItem action={() => codemirror_beancount.unfoldAll(editor)}>\n {_(\"Open all folds\")}\n {#snippet right()}\n <Key key={[\"Ctrl\", \"Alt\", \"]\"]} />\n {/snippet}\n </AppMenuSubItem>\n <AppMenuSubItem action={() => codemirror_beancount.foldAll(editor)}>\n {_(\"Close all folds\")}\n {#snippet right()}\n <Key key={[\"Ctrl\", \"Alt\", \"[\"]} />\n {/snippet}\n </AppMenuSubItem>\n </AppMenuItem>\n {#if $insert_entry.length}\n <AppMenuItem name={`'insert-entry' ${_(\"Options\")}`}>\n {#each $insert_entry as opt (`${opt.filename}:${opt.lineno.toString()}`)}\n <AppMenuSubItem\n title={`${opt.filename}:${opt.lineno.toString()}`}\n action={() => {\n goToFileAndLine(opt.filename, opt.lineno - 1);\n }}\n >\n {opt.re}\n {#snippet right()}\n <span>{opt.date}</span>\n {/snippet}\n </AppMenuSubItem>\n {/each}\n </AppMenuItem>\n {/if}\n </AppMenu>\n {@render children()}\n</div>\n\n<style>\n div {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n background: var(--sidebar-background);\n border-bottom: 1px solid var(--sidebar-border);\n }\n</style>\n", "<script lang=\"ts\">\n import type { EditorView } from \"@codemirror/view\";\n import { onMount, untrack } from \"svelte\";\n\n import { get_errors, put_source } from \"../../api/index.ts\";\n import { attach_editor } from \"../../codemirror/dom.ts\";\n import SaveButton from \"../../editor/SaveButton.svelte\";\n import { log_error } from \"../../log.ts\";\n import { notify_err } from \"../../notifications.ts\";\n import { router } from \"../../router.ts\";\n import {\n currency_column,\n indent,\n insert_entry,\n } from \"../../stores/fava_options.ts\";\n import { errors } from \"../../stores/index.ts\";\n import EditorMenu from \"./EditorMenu.svelte\";\n import type { EditorReportProps } from \"./index.ts\";\n\n let { source, line_search_param, codemirror_beancount }: EditorReportProps =\n $props();\n\n let file_path = $derived(source.file_path);\n\n let changed = $state(false);\n const onDocChanges = () => {\n changed = true;\n };\n\n let sha256sum = $state(\"\");\n let saving = $state(false);\n\n /**\n * Save the contents of the editor.\n */\n async function save(cm: EditorView) {\n saving = true;\n try {\n sha256sum = await put_source({\n file_path,\n source: cm.state.sliceDoc(),\n sha256sum,\n });\n changed = false;\n cm.focus();\n get_errors().then((v) => {\n errors.set(v);\n }, log_error);\n } catch (error) {\n notify_err(error, (e) => e.message);\n } finally {\n saving = false;\n }\n }\n\n // svelte-ignore state_referenced_locally\n const editor = codemirror_beancount.init_beancount_editor(\n \"\",\n onDocChanges,\n [\n {\n key: \"Control-s\",\n mac: \"Meta-s\",\n run: () => {\n save(editor).catch(() => {\n // save should catch all errors itself, see above\n });\n return true;\n },\n },\n ],\n $indent,\n $currency_column,\n );\n\n $effect(() => {\n // update editor contents if source changes\n void source;\n untrack(() => {\n editor.dispatch(\n codemirror_beancount.replace_contents(editor.state, source.source),\n );\n sha256sum = source.sha256sum;\n editor.focus();\n changed = false;\n });\n });\n\n $effect(() => {\n // Go to line if the edited file changes. The line number is obtained from the\n // URL, last file insert option, or last file line (in that order).\n const last_insert_opt = untrack(() =>\n $insert_entry.filter((f) => f.filename === file_path).at(-1),\n );\n let line = editor.state.doc.lines;\n if (line_search_param != null) {\n line = line_search_param;\n } else if (last_insert_opt) {\n line = last_insert_opt.lineno - 1;\n }\n editor.dispatch(codemirror_beancount.scroll_to_line(editor.state, line));\n });\n\n $effect(() => {\n // Update diagnostics, showing errors in the editor\n // Only show errors for this file, or general errors (AKA no source)\n const errorsForFile = $errors.filter(\n (err) => err.source == null || err.source.filename === file_path,\n );\n editor.dispatch(\n codemirror_beancount.set_errors(editor.state, errorsForFile),\n );\n });\n\n const checkEditorChanges = () =>\n changed\n ? \"There are unsaved changes. Are you sure you want to leave?\"\n : null;\n\n onMount(() => router.add_interrupt_handler(checkEditorChanges));\n</script>\n\n<form\n class=\"fixed-fullsize-container\"\n onsubmit={async (event) => {\n event.preventDefault();\n return save(editor);\n }}\n>\n <EditorMenu {file_path} {editor} {codemirror_beancount}>\n <SaveButton {changed} {saving} />\n </EditorMenu>\n <div {@attach attach_editor(editor)}></div>\n</form>\n\n<style>\n form {\n display: flex;\n flex-direction: column;\n }\n\n form div {\n flex: 1;\n width: 100%;\n height: 100px; /* As a flex-base so that it uses exactly the available space. */\n }\n\n form :global(.cm-editor) {\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n</style>\n", "import { get_source } from \"../../api/index.ts\";\nimport type { SourceFile } from \"../../api/validators.ts\";\nimport type { CodemirrorBeancount } from \"../../codemirror/types.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { Route } from \"../route.ts\";\nimport Editor from \"./Editor.svelte\";\n\nexport interface EditorReportProps {\n source: SourceFile;\n line_search_param: number | null;\n codemirror_beancount: CodemirrorBeancount;\n}\n\nexport const editor = new Route<EditorReportProps>(\n \"editor\",\n Editor,\n async (url: URL) => {\n const line = url.searchParams.get(\"line\");\n const line_search_param = line != null ? Number.parseInt(line, 10) : null;\n const [source, codemirror_beancount] = await Promise.all([\n get_source({\n filename: url.searchParams.get(\"file_path\") ?? \"\",\n }),\n import(\"../../codemirror/beancount.ts\"),\n ]);\n return {\n source,\n line_search_param,\n init_beancount_editor: codemirror_beancount.init_beancount_editor,\n codemirror_beancount,\n };\n },\n () => _(\"Editor\"),\n);\n", "<script lang=\"ts\">\n import type { BeancountError } from \"../../api/validators.ts\";\n import { urlForAccount, urlForSource } from \"../../helpers.ts\";\n import { _, format } from \"../../i18n.ts\";\n import { NumberColumn, Sorter, StringColumn } from \"../../sort/index.ts\";\n import SortHeader from \"../../sort/SortHeader.svelte\";\n import { accounts, errors } from \"../../stores/index.ts\";\n\n let account_re = $derived(new RegExp(`(${$accounts.join(\"|\")})`));\n\n /** Split and extract account names to replace them with links to the account page. */\n function extract_accounts(msg: string): [\"text\" | \"account\", string][] {\n return msg\n .split(account_re)\n .map((text, index) =>\n index % 2 === 0 ? [\"text\", text] : [\"account\", text],\n );\n }\n\n type T = BeancountError;\n const columns = [\n new StringColumn<T>(_(\"File\"), (d) => d.source?.filename ?? \"\"),\n new NumberColumn<T>(_(\"Line\"), (d) => d.source?.lineno ?? 0),\n new StringColumn<T>(_(\"Error\"), (d) => d.message),\n ] as const;\n let sorter = $state(new Sorter(columns[0], \"desc\"));\n\n let sorted_errors = $derived(sorter.sort($errors));\n</script>\n\n{#if $errors.length}\n <table>\n <thead>\n <tr>\n {#each columns as column (column)}\n <SortHeader bind:sorter {column} />\n {/each}\n </tr>\n </thead>\n <tbody>\n {#each sorted_errors as { message, source } (source ? `${source.filename}-${source.lineno.toString()}-${message}` : message)}\n <tr>\n {#if source}\n {@const url = $urlForSource(\n source.filename,\n source.lineno.toString(),\n )}\n {@const title = format(_(\"Show source %(file)s:%(lineno)s\"), {\n file: source.filename,\n lineno: source.lineno.toString(),\n })}\n <td>{source.filename}</td>\n <td class=\"num\">\n <a class=\"source\" href={url} {title}>{source.lineno}</a>\n </td>\n {:else}\n <td></td>\n <td class=\"num\"></td>\n {/if}\n <td class=\"pre\">\n {#each extract_accounts(message) as [type, text] (text)}\n {#if type === \"text\"}\n {text}\n {:else}\n <a href={$urlForAccount(text)}>{text}</a>\n {/if}\n {/each}\n </td>\n </tr>\n {/each}\n </tbody>\n </table>\n{:else}\n <p>\n {_(\"No errors.\")}\n </p>\n{/if}\n", "import { _ } from \"../../i18n.ts\";\nimport { DatalessRoute } from \"../route.ts\";\nimport ErrorsSvelte from \"./Errors.svelte\";\n\nexport const errors = new DatalessRoute(\"errors\", ErrorsSvelte, () =>\n _(\"Errors\"),\n);\n", "<script lang=\"ts\">\n import type { Event } from \"../../entries/index.ts\";\n import { _ } from \"../../i18n.ts\";\n import { DateColumn, Sorter, StringColumn } from \"../../sort/index.ts\";\n import SortHeader from \"../../sort/SortHeader.svelte\";\n\n interface Props {\n events: Event[];\n }\n\n let { events }: Props = $props();\n\n const columns = [\n new DateColumn<Event>(_(\"Date\")),\n new StringColumn<Event>(_(\"Description\"), (d) => d.description),\n ] as const;\n let sorter = $state(new Sorter(columns[0], \"desc\"));\n\n let sorted_events = $derived(sorter.sort(events));\n</script>\n\n<table>\n <thead>\n <tr>\n {#each columns as column (column)}\n <SortHeader bind:sorter {column} />\n {/each}\n </tr>\n </thead>\n <tbody>\n {#each sorted_events as event (`${event.date}-${event.description}`)}\n <tr>\n <td>{event.date}</td>\n <td>{event.description}</td>\n </tr>\n {/each}\n </tbody>\n</table>\n", "<script lang=\"ts\">\n import { group } from \"d3-array\";\n\n import ChartSwitcher from \"../../charts/ChartSwitcher.svelte\";\n import { ScatterPlot } from \"../../charts/scatterplot.ts\";\n import { _, format } from \"../../i18n.ts\";\n import EventTable from \"./EventTable.svelte\";\n import type { EventsReportProps } from \"./index.ts\";\n\n let { events }: EventsReportProps = $props();\n\n let groups = $derived([...group(events, (e) => e.type)]);\n\n let charts = $derived([\n new ScatterPlot(\n _(\"Events\"),\n events.map(({ date, type, description }) => ({\n date: new Date(date),\n type,\n description,\n })),\n ),\n ]);\n</script>\n\n{#if groups.length}\n <ChartSwitcher {charts} />\n\n {#each groups as [type, events_in_group] (type)}\n <div class=\"left\">\n <h3>{format(_(\"Event: %(type)s\"), { type })}</h3>\n <EventTable events={events_in_group} />\n </div>\n {/each}\n{:else}\n <p>\n {_(\"No events.\")}\n </p>\n{/if}\n", "import { get_events } from \"../../api/index.ts\";\nimport type { Event } from \"../../entries/index.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { getURLFilters } from \"../../stores/filters.ts\";\nimport { Route } from \"../route.ts\";\nimport Events from \"./Events.svelte\";\n\nexport interface EventsReportProps {\n events: Event[];\n}\n\nexport const events = new Route<EventsReportProps>(\n \"events\",\n Events,\n async (url: URL) =>\n get_events(getURLFilters(url)).then((data) => ({ events: data })),\n () => _(\"Events\"),\n);\n", "<!--\n @component\n Renders the links to download the query result in CSV and possibly\n other formats.\n-->\n<script lang=\"ts\">\n import { urlFor } from \"../../helpers.ts\";\n import { _ } from \"../../i18n.ts\";\n import { HAVE_EXCEL } from \"../../stores/index.ts\";\n\n interface Props {\n /** The query string. */\n query: string;\n }\n\n let { query }: Props = $props();\n let params = $derived({ query_string: query });\n</script>\n\n<span>\n ({_(\"Download as\")}\n <a href={$urlFor(\"download-query/query_result.csv\", params)} data-remote>\n CSV\n </a>\n {#if $HAVE_EXCEL}\n ,\n <a href={$urlFor(\"download-query/query_result.xlsx\", params)} data-remote>\n XLSX\n </a>\n , or\n <a href={$urlFor(\"download-query/query_result.ods\", params)} data-remote>\n ODS\n </a>\n {/if}\n )\n</span>\n\n<style>\n span {\n color: var(--text-color-lighter);\n }\n</style>\n", "<!--\n @component\n A query result table.\n-->\n<script lang=\"ts\">\n import { Amount, Position } from \"../../entries/index.ts\";\n import { day } from \"../../format.ts\";\n import { urlForAccount } from \"../../helpers.ts\";\n import { is_empty } from \"../../lib/objects.ts\";\n import AccountIndicator from \"../../sidebar/AccountIndicator.svelte\";\n import { Sorter, UnsortedColumn } from \"../../sort/index.ts\";\n import SortHeader from \"../../sort/SortHeader.svelte\";\n import { ctx, num } from \"../../stores/format.ts\";\n import { accounts_set, currency_name } from \"../../stores/index.ts\";\n import type { QueryCell, QueryResultTable } from \"./query_table.ts\";\n import { Inventory } from \"./query_table.ts\";\n\n interface Props {\n /** The table to render. */\n table: QueryResultTable;\n /** A column name to filter by if empty (expected to be an Inventory column). */\n filter_empty?: string;\n }\n\n let { table, filter_empty }: Props = $props();\n\n let filter_empty_column_index = $derived(\n table.columns.findIndex((column) => column.name === filter_empty),\n );\n\n let filtered_rows = $derived(\n filter_empty_column_index > -1\n ? table.rows.filter((row) => {\n const cell = row[filter_empty_column_index];\n return !(cell instanceof Inventory && is_empty(cell.value));\n })\n : table.rows,\n );\n\n let sorter = $state.raw(\n new Sorter<QueryCell[]>(new UnsortedColumn(\"<Dummy>\"), \"asc\"),\n );\n let sorted_rows = $derived(sorter.sort(filtered_rows));\n</script>\n\n<table>\n <thead>\n <tr>\n {#each table.columns as column (column.name)}\n <SortHeader bind:sorter {column} />\n {/each}\n </tr>\n </thead>\n <tbody>\n {#each sorted_rows as row (row)}\n <tr>\n {#each row as value, index (index)}\n {#if value == null}\n <td>&nbsp;</td>\n {:else if typeof value === \"boolean\"}\n <td>\n {value.toString().toUpperCase()}\n </td>\n {:else if typeof value === \"number\"}\n <td class=\"num\">\n {table.columns[index]?.dtype === \"int\"\n ? value.toString()\n : $num(value)}\n </td>\n {:else if typeof value === \"string\"}\n <td>\n {#if $accounts_set.has(value)}\n <a href={$urlForAccount(value)}>{value}</a>\n <AccountIndicator account={value} small />\n {:else if value.length === 32 && /[a-z0-9]/.test(value)}\n <a href={`#context-${value}`}>{value}</a>\n {:else}\n {value}\n {/if}\n </td>\n {:else if Array.isArray(value)}\n <td>\n {value.join(\",\")}\n </td>\n {:else if value instanceof Date}\n <td>\n {day(value)}\n </td>\n {:else if value instanceof Amount}\n <td class=\"num\" title={$currency_name(value.currency)}>\n {value.str($ctx)}\n </td>\n {:else if value instanceof Position}\n <td class=\"num\">\n <span title={$currency_name(value.units.currency)}>\n {value.units.str($ctx)}\n </span>\n {#if value.cost}\n &lbrace;<span title={$currency_name(value.cost.currency)}>\n {value.cost.str($ctx)}\n </span>&rbrace;{/if}\n </td>\n {:else if value instanceof Inventory}\n <td class=\"num\">\n {#each Object.entries(value.value) as [currency, number] (currency)}\n <span title={$currency_name(currency)}\n >{$ctx.amount(number, currency)}</span\n >\n <br />\n {/each}\n </td>\n {/if}\n {/each}\n </tr>\n {/each}\n </tbody>\n</table>\n", "<script lang=\"ts\">\n import { urlFor } from \"../../helpers.ts\";\n import { _ } from \"../../i18n.ts\";\n import QueryLinks from \"../query/QueryLinks.svelte\";\n import QueryTable from \"../query/QueryTable.svelte\";\n import type { HoldingsReportProps } from \"./index.ts\";\n\n let {\n aggregation_key,\n query_string,\n query_result_table,\n }: HoldingsReportProps = $props();\n</script>\n\n<div class=\"headerline\">\n <h3>\n {#if aggregation_key === \"all\"}\n {_(\"Holdings\")}\n {:else}\n <a href={$urlFor(\"holdings/\")}>{_(\"Holdings\")}</a>\n {/if}\n </h3>\n <h3>\n {#if aggregation_key === \"by_account\"}\n {_(\"Holdings by\")} {_(\"Account\")}\n {:else}\n <a href={$urlFor(\"holdings/by_account/\")}>\n {_(\"Holdings by\")}\n {_(\"Account\")}\n </a>\n {/if}\n </h3>\n <h3>\n {#if aggregation_key === \"by_currency\"}\n {_(\"Holdings by\")} {_(\"Currency\")}\n {:else}\n <a href={$urlFor(\"holdings/by_currency/\")}>\n {_(\"Holdings by\")}\n {_(\"Currency\")}\n </a>\n {/if}\n </h3>\n <h3>\n {#if aggregation_key === \"by_cost_currency\"}\n {_(\"Holdings by\")} {_(\"Cost currency\")}\n {:else}\n <a href={$urlFor(\"holdings/by_cost_currency/\")}>\n {_(\"Holdings by\")}\n {_(\"Cost currency\")}\n </a>\n {/if}\n </h3>\n</div>\n\n<p>\n <a href={$urlFor(\"query\", { query_string })}>{_(\"Query\")}</a>\n <QueryLinks query={query_string} />\n</p>\n<QueryTable table={query_result_table} filter_empty=\"units\" />\n", "import { get_query } from \"../../api/index.ts\";\nimport { getUrlPath } from \"../../helpers.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { getURLFilters } from \"../../stores/filters.ts\";\nimport type { QueryResultTable } from \"../query/query_table.ts\";\nimport { Route } from \"../route.ts\";\nimport Holdings from \"./Holdings.svelte\";\n\nexport type HoldingsReportType =\n | \"all\"\n | \"by_account\"\n | \"by_currency\"\n | \"by_cost_currency\";\n\nconst to_report_type = (s: string | null): HoldingsReportType =>\n s === \"by_account\" || s === \"by_currency\" || s === \"by_cost_currency\"\n ? s\n : \"all\";\n\nconst QUERIES = {\n all: `\nSELECT\n account,\n units(sum(position)) as units,\n cost_number as cost,\n first(getprice(currency, cost_currency)) as price,\n cost(sum(position)) as book_value,\n value(sum(position)) as market_value,\n safediv((abs(sum(number(value(position)))) - abs(sum(number(cost(position))))), sum(number(cost(position)))) * 100 as unrealized_profit_pct,\n cost_date as acquisition_date\nWHERE account_sortkey(account) ~ \"^[01]\"\nGROUP BY account, cost_date, currency, cost_currency, cost_number, account_sortkey(account)\nORDER BY account_sortkey(account), currency, cost_date\n`.trim(),\n by_account: `\nSELECT\n account,\n units(sum(position)) as units,\n cost(sum(position)) as book_value,\n value(sum(position)) as market_value,\n safediv((abs(sum(number(value(position)))) - abs(sum(number(cost(position))))), sum(number(cost(position)))) * 100 as unrealized_profit_pct\nWHERE account_sortkey(account) ~ \"^[01]\"\nGROUP BY account, cost_currency, account_sortkey(account), currency\nORDER BY account_sortkey(account), currency\n`.trim(),\n by_currency: `\nSELECT\n units(sum(position)) as units,\n safediv(number(only(first(cost_currency), cost(sum(position)))), number(only(first(currency), units(sum(position))))) as average_cost,\n first(getprice(currency, cost_currency)) as price,\n cost(sum(position)) as book_value,\n value(sum(position)) as market_value,\n safediv((abs(sum(number(value(position)))) - abs(sum(number(cost(position))))), sum(number(cost(position)))) * 100 as unrealized_profit_pct\nWHERE account_sortkey(account) ~ \"^[01]\"\nGROUP BY currency, cost_currency\nORDER BY currency, cost_currency\n`.trim(),\n by_cost_currency: `\nSELECT\n units(sum(position)) as units,\n cost(sum(position)) as book_value,\n value(sum(position)) as market_value,\n safediv((abs(sum(number(value(position)))) - abs(sum(number(cost(position))))), sum(number(cost(position)))) * 100 as unrealized_profit_pct\nWHERE account_sortkey(account) ~ \"^[01]\"\nGROUP BY cost_currency\nORDER BY cost_currency\n`.trim(),\n};\n\nexport interface HoldingsReportProps {\n aggregation_key: HoldingsReportType;\n query_string: string;\n query_result_table: QueryResultTable;\n}\n\nexport const holdings = new Route<HoldingsReportProps>(\n \"holdings\",\n Holdings,\n async (url) => {\n const [, key = \"\"] = getUrlPath(url).unwrap().split(\"/\");\n const aggregation_key = to_report_type(key);\n const query_string = QUERIES[aggregation_key];\n const query_result_table = await get_query({\n query_string,\n ...getURLFilters(url),\n });\n if (query_result_table.t !== \"table\") {\n throw new Error(\"Internal error: expected a query result table\");\n }\n return { aggregation_key, query_string, query_result_table };\n },\n () => _(\"Holdings\"),\n);\n", "/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { set, source, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\n/**\n * A reactive version of the built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object.\n * Reading contents of the map (by iterating, or by reading `map.size` or calling `map.get(...)` or `map.has(...)` as in the [tic-tac-toe example](https://svelte.dev/playground/0b0ff4aa49c9443f9b47fe5203c78293) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the map is updated.\n *\n * Note that values in a reactive map are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteMap } from 'svelte/reactivity';\n * \timport { result } from './game.js';\n *\n * \tlet board = new SvelteMap();\n * \tlet player = $state('x');\n * \tlet winner = $derived(result(board));\n *\n * \tfunction reset() {\n * \t\tplayer = 'x';\n * \t\tboard.clear();\n * \t}\n * </script>\n *\n * <div class=\"board\">\n * \t{#each Array(9), i}\n * \t\t<button\n * \t\t\tdisabled={board.has(i) || winner}\n * \t\t\tonclick={() => {\n * \t\t\t\tboard.set(i, player);\n * \t\t\t\tplayer = player === 'x' ? 'o' : 'x';\n * \t\t\t}}\n * \t\t>{board.get(i)}</button>\n * \t{/each}\n * </div>\n *\n * {#if winner}\n * \t<p>{winner} wins!</p>\n * \t<button onclick={reset}>reset</button>\n * {:else}\n * \t<p>{player} is next</p>\n * {/if}\n * ```\n *\n * @template K\n * @template V\n * @extends {Map<K, V>}\n */\nexport class SvelteMap extends Map {\n\t/** @type {Map<K, Source<number>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<readonly [K, V]> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Map(value);\n\n\t\t\ttag(this.#version, 'SvelteMap version');\n\t\t\ttag(this.#size, 'SvelteMap.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var [key, v] of value) {\n\t\t\t\tsuper.set(key, v);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteMap instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t/** @param {K} key */\n\thas(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tvar ret = super.get(key);\n\t\t\tif (ret !== undefined) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param {(value: V, key: K, map: Map<K, V>) => void} callbackfn\n\t * @param {any} [this_arg]\n\t */\n\tforEach(callbackfn, this_arg) {\n\t\tthis.#read_all();\n\t\tsuper.forEach(callbackfn, this_arg);\n\t}\n\n\t/** @param {K} key */\n\tget(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tvar ret = super.get(key);\n\t\t\tif (ret !== undefined) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn super.get(key);\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @param {V} value\n\t * */\n\tset(key, value) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar prev_res = super.get(key);\n\t\tvar res = super.set(key, value);\n\t\tvar version = this.#version;\n\n\t\tif (s === undefined) {\n\t\t\ts = this.#source(0);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t}\n\n\t\t\tsources.set(key, s);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(version);\n\t\t} else if (prev_res !== value) {\n\t\t\tincrement(s);\n\n\t\t\t// if not every reaction of s is a reaction of version we need to also include version\n\t\t\tvar v_reactions = version.reactions === null ? null : new Set(version.reactions);\n\t\t\tvar needs_version_increase =\n\t\t\t\tv_reactions === null ||\n\t\t\t\t!s.reactions?.every((r) =>\n\t\t\t\t\t/** @type {NonNullable<typeof v_reactions>} */ (v_reactions).has(r)\n\t\t\t\t);\n\t\t\tif (needs_version_increase) {\n\t\t\t\tincrement(version);\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/** @param {K} key */\n\tdelete(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar res = super.delete(key);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(key);\n\t\t\tset(this.#size, super.size);\n\t\t\tset(s, -1);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\t\tset(this.#size, 0);\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, -1);\n\t\t}\n\t\tincrement(this.#version);\n\t\tsources.clear();\n\t}\n\n\t#read_all() {\n\t\tget(this.#version);\n\n\t\tvar sources = this.#sources;\n\t\tif (this.#size.v !== sources.size) {\n\t\t\tfor (var key of super.keys()) {\n\t\t\t\tif (!sources.has(key)) {\n\t\t\t\t\tvar s = this.#source(0);\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t\t}\n\n\t\t\t\t\tsources.set(key, s);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ([, s] of this.#sources) {\n\t\t\tget(s);\n\t\t}\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\tvalues() {\n\t\tthis.#read_all();\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tthis.#read_all();\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#size);\n\t\treturn super.size;\n\t}\n}\n", "import { DEV } from 'esm-env';\nimport { state, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { get_current_url } from './url.js';\n\nexport const REPLACE = Symbol();\n\n/**\n * A reactive version of the built-in [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object.\n * Reading its contents (by iterating, or by calling `params.get(...)` or `params.getAll(...)` as in the [example](https://svelte.dev/playground/b3926c86c5384bab9f2cf993bc08c1c8) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the params are updated.\n *\n * ```svelte\n * <script>\n * \timport { SvelteURLSearchParams } from 'svelte/reactivity';\n *\n * \tconst params = new SvelteURLSearchParams('message=hello');\n *\n * \tlet key = $state('key');\n * \tlet value = $state('value');\n * </script>\n *\n * <input bind:value={key} />\n * <input bind:value={value} />\n * <button onclick={() => params.append(key, value)}>append</button>\n *\n * <p>?{params.toString()}</p>\n *\n * {#each params as [key, value]}\n * \t<p>{key}: {value}</p>\n * {/each}\n * ```\n */\nexport class SvelteURLSearchParams extends URLSearchParams {\n\t#version = DEV ? tag(state(0), 'SvelteURLSearchParams version') : state(0);\n\t#url = get_current_url();\n\n\t#updating = false;\n\n\t#update_url() {\n\t\tif (!this.#url || this.#updating) return;\n\t\tthis.#updating = true;\n\n\t\tconst search = this.toString();\n\t\tthis.#url.search = search && `?${search}`;\n\n\t\tthis.#updating = false;\n\t}\n\n\t/**\n\t * @param {URLSearchParams} params\n\t * @internal\n\t */\n\t[REPLACE](params) {\n\t\tif (this.#updating) return;\n\t\tthis.#updating = true;\n\n\t\tfor (const key of [...super.keys()]) {\n\t\t\tsuper.delete(key);\n\t\t}\n\n\t\tfor (const [key, value] of params) {\n\t\t\tsuper.append(key, value);\n\t\t}\n\n\t\tincrement(this.#version);\n\t\tthis.#updating = false;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tappend(name, value) {\n\t\tsuper.append(name, value);\n\t\tthis.#update_url();\n\t\tincrement(this.#version);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string=} value\n\t * @returns {void}\n\t */\n\tdelete(name, value) {\n\t\tvar has_value = super.has(name, value);\n\t\tsuper.delete(name, value);\n\t\tif (has_value) {\n\t\t\tthis.#update_url();\n\t\t\tincrement(this.#version);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {string|null}\n\t */\n\tget(name) {\n\t\tget(this.#version);\n\t\treturn super.get(name);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {string[]}\n\t */\n\tgetAll(name) {\n\t\tget(this.#version);\n\t\treturn super.getAll(name);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string=} value\n\t * @returns {boolean}\n\t */\n\thas(name, value) {\n\t\tget(this.#version);\n\t\treturn super.has(name, value);\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tset(name, value) {\n\t\tvar previous = super.getAll(name).join('');\n\t\tsuper.set(name, value);\n\t\t// can't use has(name, value), because for something like https://svelte.dev?foo=1&bar=2&foo=3\n\t\t// if you set `foo` to 1, then foo=3 gets deleted whilst `has(\"foo\", \"1\")` returns true\n\t\tif (previous !== super.getAll(name).join('')) {\n\t\t\tthis.#update_url();\n\t\t\tincrement(this.#version);\n\t\t}\n\t}\n\n\tsort() {\n\t\tsuper.sort();\n\t\tthis.#update_url();\n\t\tincrement(this.#version);\n\t}\n\n\ttoString() {\n\t\tget(this.#version);\n\t\treturn super.toString();\n\t}\n\n\tvalues() {\n\t\tget(this.#version);\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tget(this.#version);\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#version);\n\t\treturn super.size;\n\t}\n}\n", "import { DEV } from 'esm-env';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { REPLACE, SvelteURLSearchParams } from './url-search-params.js';\n\n/** @type {SvelteURL | null} */\nlet current_url = null;\n\nexport function get_current_url() {\n\t// ideally we'd just export `current_url` directly, but it seems Vitest doesn't respect live bindings\n\treturn current_url;\n}\n\n/**\n * A reactive version of the built-in [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) object.\n * Reading properties of the URL (such as `url.href` or `url.pathname`) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the URL changes.\n *\n * The `searchParams` property is an instance of [SvelteURLSearchParams](https://svelte.dev/docs/svelte/svelte-reactivity#SvelteURLSearchParams).\n *\n * [Example](https://svelte.dev/playground/5a694758901b448c83dc40dc31c71f2a):\n *\n * ```svelte\n * <script>\n * \timport { SvelteURL } from 'svelte/reactivity';\n *\n * \tconst url = new SvelteURL('https://example.com/path');\n * </script>\n *\n * <!-- changes to these... -->\n * <input bind:value={url.protocol} />\n * <input bind:value={url.hostname} />\n * <input bind:value={url.pathname} />\n *\n * <hr />\n *\n * <!-- will update `href` and vice versa -->\n * <input bind:value={url.href} size=\"65\" />\n * ```\n */\nexport class SvelteURL extends URL {\n\t#protocol = state(super.protocol);\n\t#username = state(super.username);\n\t#password = state(super.password);\n\t#hostname = state(super.hostname);\n\t#port = state(super.port);\n\t#pathname = state(super.pathname);\n\t#hash = state(super.hash);\n\t#search = state(super.search);\n\t#searchParams;\n\n\t/**\n\t * @param {string | URL} url\n\t * @param {string | URL} [base]\n\t */\n\tconstructor(url, base) {\n\t\turl = new URL(url, base);\n\t\tsuper(url);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#protocol, 'SvelteURL.protocol');\n\t\t\ttag(this.#username, 'SvelteURL.username');\n\t\t\ttag(this.#password, 'SvelteURL.password');\n\t\t\ttag(this.#hostname, 'SvelteURL.hostname');\n\t\t\ttag(this.#port, 'SvelteURL.port');\n\t\t\ttag(this.#pathname, 'SvelteURL.pathname');\n\t\t\ttag(this.#hash, 'SvelteURL.hash');\n\t\t\ttag(this.#search, 'SvelteURL.search');\n\t\t}\n\n\t\tcurrent_url = this;\n\t\tthis.#searchParams = new SvelteURLSearchParams(url.searchParams);\n\t\tcurrent_url = null;\n\t}\n\n\tget hash() {\n\t\treturn get(this.#hash);\n\t}\n\n\tset hash(value) {\n\t\tsuper.hash = value;\n\t\tset(this.#hash, super.hash);\n\t}\n\n\tget host() {\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\treturn super.host;\n\t}\n\n\tset host(value) {\n\t\tsuper.host = value;\n\t\tset(this.#hostname, super.hostname);\n\t\tset(this.#port, super.port);\n\t}\n\n\tget hostname() {\n\t\treturn get(this.#hostname);\n\t}\n\n\tset hostname(value) {\n\t\tsuper.hostname = value;\n\t\tset(this.#hostname, super.hostname);\n\t}\n\n\tget href() {\n\t\tget(this.#protocol);\n\t\tget(this.#username);\n\t\tget(this.#password);\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\tget(this.#pathname);\n\t\tget(this.#hash);\n\t\tget(this.#search);\n\t\treturn super.href;\n\t}\n\n\tset href(value) {\n\t\tsuper.href = value;\n\t\tset(this.#protocol, super.protocol);\n\t\tset(this.#username, super.username);\n\t\tset(this.#password, super.password);\n\t\tset(this.#hostname, super.hostname);\n\t\tset(this.#port, super.port);\n\t\tset(this.#pathname, super.pathname);\n\t\tset(this.#hash, super.hash);\n\t\tset(this.#search, super.search);\n\t\tthis.#searchParams[REPLACE](super.searchParams);\n\t}\n\n\tget password() {\n\t\treturn get(this.#password);\n\t}\n\n\tset password(value) {\n\t\tsuper.password = value;\n\t\tset(this.#password, super.password);\n\t}\n\n\tget pathname() {\n\t\treturn get(this.#pathname);\n\t}\n\n\tset pathname(value) {\n\t\tsuper.pathname = value;\n\t\tset(this.#pathname, super.pathname);\n\t}\n\n\tget port() {\n\t\treturn get(this.#port);\n\t}\n\n\tset port(value) {\n\t\tsuper.port = value;\n\t\tset(this.#port, super.port);\n\t}\n\n\tget protocol() {\n\t\treturn get(this.#protocol);\n\t}\n\n\tset protocol(value) {\n\t\tsuper.protocol = value;\n\t\tset(this.#protocol, super.protocol);\n\t}\n\n\tget search() {\n\t\treturn get(this.#search);\n\t}\n\n\tset search(value) {\n\t\tsuper.search = value;\n\t\tset(this.#search, value);\n\t\tthis.#searchParams[REPLACE](super.searchParams);\n\t}\n\n\tget username() {\n\t\treturn get(this.#username);\n\t}\n\n\tset username(value) {\n\t\tsuper.username = value;\n\t\tset(this.#username, super.username);\n\t}\n\n\tget origin() {\n\t\tget(this.#protocol);\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\treturn super.origin;\n\t}\n\n\tget searchParams() {\n\t\treturn this.#searchParams;\n\t}\n\n\ttoString() {\n\t\treturn this.href;\n\t}\n\n\ttoJSON() {\n\t\treturn this.href;\n\t}\n}\n", "<script lang=\"ts\">\n import type { EntryMetadata } from \"../entries/index.ts\";\n import { _ } from \"../i18n.ts\";\n\n interface Props {\n meta: EntryMetadata;\n }\n\n let { meta = $bindable() }: Props = $props();\n</script>\n\n<button\n type=\"button\"\n class=\"muted round\"\n onclick={() => {\n meta = meta.add();\n }}\n tabindex={-1}\n title={_(\"Add metadata\")}\n>\n m\n</button>\n", "<script lang=\"ts\">\n import type { EntryMetadata } from \"../entries/index.ts\";\n import { _ } from \"../i18n.ts\";\n\n interface Props {\n meta: EntryMetadata;\n }\n\n let { meta = $bindable() }: Props = $props();\n\n let meta_entries = $derived(meta.entries());\n</script>\n\n{#each meta_entries as [key, value], index (index)}\n <div class=\"flex-row\">\n <button\n type=\"button\"\n class=\"muted round remove-row\"\n onclick={() => {\n meta = meta.delete(key);\n }}\n tabindex={-1}\n >\n ×\n </button>\n <input\n type=\"text\"\n class=\"key\"\n placeholder={_(\"Key\")}\n value={key}\n onchange={(event) => {\n meta = meta.update_key(key, event.currentTarget.value);\n }}\n required\n />\n :\n <input\n type=\"text\"\n class=\"value\"\n placeholder={_(\"Value\")}\n {value}\n onchange={(event) => {\n meta = meta.set_string(key, event.currentTarget.value);\n }}\n />\n {#if index === meta_entries.length - 1 && key}\n <button\n type=\"button\"\n class=\"muted round\"\n onclick={() => {\n meta = meta.add();\n }}\n aria-label={_(\"Add metadata\")}\n title={_(\"Add metadata\")}\n >\n +\n </button>\n {/if}\n </div>\n{/each}\n\n<style>\n div {\n padding-left: 3rem;\n }\n\n input.key {\n width: 12rem;\n }\n\n input.value {\n flex-grow: 1;\n }\n\n @media (width <= 767px) {\n div {\n padding-left: 0;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import AutocompleteInput from \"../AutocompleteInput.svelte\";\n import type { Balance, EntryMetadata } from \"../entries/index.ts\";\n import { _ } from \"../i18n.ts\";\n import { currencies } from \"../stores/index.ts\";\n import AccountInput from \"./AccountInput.svelte\";\n import AddMetadataButton from \"./AddMetadataButton.svelte\";\n import EntryMetadataSvelte from \"./EntryMetadata.svelte\";\n\n interface Props {\n entry: Balance;\n }\n\n let { entry = $bindable() }: Props = $props();\n</script>\n\n<div class=\"flex-column\">\n <div class=\"flex-row\">\n <input\n type=\"date\"\n bind:value={\n () => entry.date,\n (date: string) => {\n entry = entry.set(\"date\", date);\n }\n }\n required\n />\n <h4>{_(\"Balance\")}</h4>\n <AccountInput\n bind:value={\n () => entry.account,\n (account: string) => {\n entry = entry.set(\"account\", account);\n }\n }\n date={entry.date}\n required\n --autocomplete-wrapper-flex=\"1\"\n />\n <input\n type=\"tel\"\n pattern=\"-?[0-9.,]*\"\n placeholder={_(\"Number\")}\n size={10}\n bind:value={\n () => entry.amount.number,\n (number: string) => {\n entry = entry.set(\"amount\", entry.amount.set_number(number));\n }\n }\n required\n />\n <AutocompleteInput\n placeholder={_(\"Currency\")}\n suggestions={$currencies}\n bind:value={\n () => entry.amount.currency,\n (currency: string) => {\n entry = entry.set(\"amount\", entry.amount.set_currency(currency));\n }\n }\n required\n --autocomplete-wrapper-flex=\"0 6em\"\n />\n <AddMetadataButton\n bind:meta={\n () => entry.meta,\n (meta: EntryMetadata) => {\n entry = entry.set(\"meta\", meta);\n }\n }\n />\n </div>\n <EntryMetadataSvelte\n bind:meta={\n () => entry.meta,\n (meta: EntryMetadata) => {\n entry = entry.set(\"meta\", meta);\n }\n }\n />\n</div>\n", "<script lang=\"ts\">\n import type { EntryMetadata, Note } from \"../entries/index.ts\";\n import { _ } from \"../i18n.ts\";\n import AccountInput from \"./AccountInput.svelte\";\n import AddMetadataButton from \"./AddMetadataButton.svelte\";\n import EntryMetadataSvelte from \"./EntryMetadata.svelte\";\n\n interface Props {\n entry: Note;\n }\n\n let { entry = $bindable() }: Props = $props();\n</script>\n\n<div class=\"flex-column\">\n <div class=\"flex-row\">\n <input\n type=\"date\"\n name=\"date\"\n bind:value={\n () => entry.date,\n (date: string) => {\n entry = entry.set(\"date\", date);\n }\n }\n required\n />\n <h4>{_(\"Note\")}</h4>\n <AccountInput\n bind:value={\n () => entry.account,\n (account: string) => {\n entry = entry.set(\"account\", account);\n }\n }\n date={entry.date}\n required\n --autocomplete-wrapper-flex=\"1\"\n />\n <AddMetadataButton\n bind:meta={\n () => entry.meta,\n (meta: EntryMetadata) => {\n entry = entry.set(\"meta\", meta);\n }\n }\n />\n </div>\n <textarea\n rows={2}\n placeholder=\"Comment\"\n bind:value={\n () => entry.comment,\n (comment: string) => {\n entry = entry.set(\"comment\", comment);\n }\n }\n ></textarea>\n <EntryMetadataSvelte\n bind:meta={\n () => entry.meta,\n (meta: EntryMetadata) => {\n entry = entry.set(\"meta\", meta);\n }\n }\n />\n</div>\n\n<style>\n textarea {\n resize: vertical;\n }\n</style>\n", "<script lang=\"ts\">\n import AutocompleteInput from \"../AutocompleteInput.svelte\";\n import type { EntryMetadata, Posting } from \"../entries/index.ts\";\n import { _ } from \"../i18n.ts\";\n import { currencies } from \"../stores/index.ts\";\n import AccountInput from \"./AccountInput.svelte\";\n import AddMetadataButton from \"./AddMetadataButton.svelte\";\n import EntryMetadataSvelte from \"./EntryMetadata.svelte\";\n\n interface Props {\n /** The posting to show and edit. */\n posting: Posting;\n /** Index in the list of postings, used to move it. */\n index: number;\n /** Account suggestions. */\n suggestions?: string[] | undefined;\n /** Entry date to limit account suggestions. */\n date?: string;\n /** Handler to move a posting to another position on drag. */\n move: (arg: { from: number; to: number }) => void;\n /** Handler to remove this posting. */\n remove: () => void;\n }\n\n let {\n posting = $bindable(),\n index,\n suggestions,\n date,\n move,\n remove,\n }: Props = $props();\n\n let amount_number = $derived(posting.amount.replace(/[^\\-?0-9.]/g, \"\"));\n let amountSuggestions = $derived(\n $currencies.map((c) => `${amount_number} ${c}`),\n );\n\n let drag = $state.raw(false);\n let draggable = $state.raw(true);\n\n function mousemove(event: MouseEvent) {\n draggable = !(event.target instanceof HTMLInputElement);\n }\n function dragstart(event: DragEvent) {\n event.dataTransfer?.setData(\"fava/posting\", index.toString());\n }\n function dragenter(event: DragEvent) {\n const types = event.dataTransfer?.types ?? [];\n if (types.includes(\"fava/posting\")) {\n event.preventDefault();\n drag = true;\n }\n }\n function dragleave() {\n drag = false;\n }\n function drop(event: DragEvent) {\n event.preventDefault();\n const from = event.dataTransfer?.getData(\"fava/posting\");\n if (from != null) {\n move({ from: +from, to: index });\n drag = false;\n }\n }\n</script>\n\n<div\n class=\"flex-row\"\n class:drag\n {draggable}\n onmousemove={mousemove}\n ondragstart={dragstart}\n ondragenter={dragenter}\n ondragover={dragenter}\n ondragleave={dragleave}\n ondrop={drop}\n role=\"group\"\n>\n <button\n type=\"button\"\n class=\"muted round remove-row\"\n onclick={remove}\n tabindex={-1}\n >\n ×\n </button>\n <AccountInput\n bind:value={\n () => posting.account,\n (account: string) => {\n posting = posting.set(\"account\", account);\n }\n }\n {suggestions}\n {date}\n --autocomplete-wrapper-flex=\"2\"\n />\n <AutocompleteInput\n placeholder={_(\"Amount\")}\n suggestions={amountSuggestions}\n bind:value={\n () => posting.amount,\n (amount: string) => {\n posting = posting.set(\"amount\", amount);\n }\n }\n --autocomplete-wrapper-flex=\"1\"\n />\n <AddMetadataButton\n bind:meta={\n () => posting.meta,\n (meta: EntryMetadata) => {\n posting = posting.set(\"meta\", meta);\n }\n }\n />\n</div>\n<EntryMetadataSvelte\n bind:meta={\n () => posting.meta,\n (meta: EntryMetadata) => {\n posting = posting.set(\"meta\", meta);\n }\n }\n/>\n\n<style>\n .drag {\n box-shadow: var(--box-shadow-button);\n }\n\n div {\n padding-left: 3rem;\n cursor: grab;\n }\n\n div > * {\n cursor: initial;\n }\n\n div:last-child .remove-row {\n visibility: hidden;\n }\n\n @media (width <= 767px) {\n div {\n padding-left: 0;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import {\n get_narration_transaction,\n get_narrations,\n get_payee_accounts,\n get_payee_transaction,\n } from \"../api/index.ts\";\n import AutocompleteInput from \"../AutocompleteInput.svelte\";\n import type { EntryMetadata, Transaction } from \"../entries/index.ts\";\n import { Posting } from \"../entries/index.ts\";\n import { _ } from \"../i18n.ts\";\n import { move } from \"../lib/array.ts\";\n import { notify_err } from \"../notifications.ts\";\n import { payees } from \"../stores/index.ts\";\n import AddMetadataButton from \"./AddMetadataButton.svelte\";\n import EntryMetadataSvelte from \"./EntryMetadata.svelte\";\n import PostingSvelte from \"./Posting.svelte\";\n\n interface Props {\n entry: Transaction;\n }\n\n let { entry = $bindable() }: Props = $props();\n let suggestions: string[] | undefined = $state.raw();\n\n let payee = $derived(entry.payee);\n $effect(() => {\n if (payee) {\n suggestions = undefined;\n if ($payees.includes(payee)) {\n get_payee_accounts({ payee })\n .then((s) => {\n suggestions = s;\n })\n .catch((error: unknown) => {\n notify_err(\n error,\n (err) =>\n `Fetching account suggestions for payee ${payee} failed: ${err.message}`,\n );\n });\n }\n }\n });\n\n let narration = $derived(entry.get_narration_tags_links());\n let narration_suggestions: string[] = $state.raw([]);\n $effect(() => {\n get_narrations()\n .then((s) => {\n narration_suggestions = s;\n })\n .catch((error: unknown) => {\n notify_err(\n error,\n (err) => `Fetching narration suggestions failed: ${err.message}`,\n );\n });\n });\n\n // Autofill complete transactions.\n async function autocompleteSelectPayee() {\n if (entry.narration || entry.postings.some((p) => !p.is_empty())) {\n return;\n }\n const payee_transaction = await get_payee_transaction({\n payee: entry.payee,\n });\n entry = payee_transaction.set(\"date\", entry.date);\n }\n async function autocompleteSelectNarration() {\n if (entry.payee || entry.postings.some((p) => !p.is_empty())) {\n return;\n }\n const data = await get_narration_transaction({ narration });\n data.set(\"date\", entry.date);\n entry = data;\n narration = entry.get_narration_tags_links();\n }\n\n // Always have one empty posting at the end.\n $effect(() => {\n if (!entry.postings.some((p) => p.is_empty())) {\n entry = entry.set(\"postings\", entry.postings.concat(Posting.empty()));\n }\n });\n</script>\n\n<div class=\"flex-column\">\n <div class=\"flex-row\">\n <input\n type=\"date\"\n bind:value={\n () => entry.date,\n (date: string) => {\n entry = entry.set(\"date\", date);\n }\n }\n required\n />\n <input\n type=\"text\"\n name=\"flag\"\n bind:value={\n () => entry.flag,\n (flag: string) => {\n entry = entry.set(\"flag\", flag);\n }\n }\n required\n />\n <label>\n <span class=\"hide-on-desktop\">{_(\"Payee\")}:</span>\n <AutocompleteInput\n placeholder={_(\"Payee\")}\n bind:value={\n () => entry.payee,\n (payee: string) => {\n entry = entry.set(\"payee\", payee);\n }\n }\n suggestions={$payees}\n onSelect={autocompleteSelectPayee}\n --autocomplete-wrapper-flex=\"1\"\n />\n </label>\n <label class=\"narration\">\n <span class=\"hide-on-desktop\">{_(\"Narration\")}:</span>\n <AutocompleteInput\n placeholder={_(\"Narration\")}\n bind:value={narration}\n suggestions={narration_suggestions}\n onSelect={autocompleteSelectNarration}\n onEnter={() => {\n entry = entry.set_narration_tags_links(narration);\n }}\n onBlur={() => {\n entry = entry.set_narration_tags_links(narration);\n }}\n --autocomplete-wrapper-flex=\"2\"\n />\n <AddMetadataButton\n bind:meta={\n () => entry.meta,\n (meta: EntryMetadata) => {\n entry = entry.set(\"meta\", meta);\n }\n }\n />\n </label>\n </div>\n <EntryMetadataSvelte\n bind:meta={\n () => entry.meta,\n (meta: EntryMetadata) => {\n entry = entry.set(\"meta\", meta);\n }\n }\n />\n <div class=\"flex-row hide-on-desktop\">\n <span class=\"label\">{_(\"Postings\")}:</span>\n </div>\n {#each entry.postings, index (index)}\n <!-- Using the indexed access (instead of `as posting` in the each) seems to track\n the reactivity differently and avoids cursor jumping on the posting inputs. -->\n {@const posting = entry.postings[index]}\n {#if posting}\n <PostingSvelte\n bind:posting={\n () => posting,\n (posting: Posting) => {\n entry = entry.set(\"postings\", entry.postings.with(index, posting));\n }\n }\n {index}\n {suggestions}\n date={entry.date}\n move={({ from, to }: { from: number; to: number }) => {\n entry = entry.set(\"postings\", move(entry.postings, from, to));\n }}\n remove={() => {\n entry = entry.set(\"postings\", entry.postings.toSpliced(index, 1));\n }}\n />\n {/if}\n {/each}\n</div>\n\n<style>\n input[name=\"flag\"] {\n width: 1.5em;\n padding-right: 2px;\n padding-left: 2px;\n text-align: center;\n }\n\n .hide-on-desktop {\n display: none;\n }\n\n @media (width <= 767px) {\n .hide-on-desktop {\n display: initial;\n width: 100%;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import type { Entry } from \"../entries/index.ts\";\n import { Balance, Note, Transaction } from \"../entries/index.ts\";\n import BalanceSvelte from \"./Balance.svelte\";\n import NoteSvelte from \"./Note.svelte\";\n import TransactionSvelte from \"./Transaction.svelte\";\n\n interface Props {\n entry: Entry;\n }\n\n let { entry = $bindable() }: Props = $props();\n</script>\n\n{#if entry instanceof Balance}\n <BalanceSvelte bind:entry />\n{:else if entry instanceof Note}\n <NoteSvelte bind:entry />\n{:else if entry instanceof Transaction}\n <TransactionSvelte bind:entry />\n{:else}\n Entry type unsupported for editing.\n{/if}\n", "<script lang=\"ts\">\n import type { Entry as EntryType } from \"../../entries/index.ts\";\n import Entry from \"../../entry-forms/Entry.svelte\";\n import { _ } from \"../../i18n.ts\";\n import ModalBase from \"../../modals/ModalBase.svelte\";\n\n interface Props {\n entries: EntryType[];\n save: () => void;\n close: () => void;\n }\n\n let { entries = $bindable(), save, close }: Props = $props();\n\n let currentIndex = $state.raw(0);\n let count = $derived(entries.length);\n let shown = $derived(count > 0);\n\n let entry = $derived(entries[currentIndex]);\n let duplicate = $derived(entry?.is_duplicate());\n let count_duplicates = $derived(\n entries.filter((e) => e.is_duplicate()).length,\n );\n $effect(() => {\n if (count > 0 && currentIndex >= count) {\n currentIndex = 0;\n }\n });\n\n function submitOrNext(event: SubmitEvent) {\n event.preventDefault();\n if (currentIndex < count - 1) {\n currentIndex += 1;\n } else {\n save();\n }\n }\n\n function previousEntry() {\n currentIndex = Math.max(currentIndex - 1, 0);\n }\n\n function toggleDuplicate() {\n if (entry) {\n entries[currentIndex] = entry.set_meta(\n \"__duplicate__\",\n !entry.is_duplicate(),\n );\n }\n }\n\n let current_index_from_one = $derived(currentIndex + 1);\n let count_without_duplicates = $derived(count - count_duplicates);\n</script>\n\n<ModalBase {shown} closeHandler={close}>\n <form class=\"flex-column\" novalidate={duplicate} onsubmit={submitOrNext}>\n <h3>{_(\"Import\")}</h3>\n {#if entry}\n <div class=\"flex-row\">\n <h3>\n Entry\n {current_index_from_one}\n of\n {count}\n ({count_without_duplicates}\n to import):\n </h3>\n <span class=\"spacer\"></span>\n <label class=\"button muted\">\n <input\n type=\"checkbox\"\n checked={duplicate}\n onclick={toggleDuplicate}\n />\n {_(\"ignore duplicate\")}\n </label>\n </div>\n <div class:duplicate>\n <Entry\n bind:entry={\n () => entry,\n (entry: EntryType) => {\n entries[currentIndex] = entry;\n }\n }\n />\n </div>\n <div class=\"flex-row\">\n {#if currentIndex > 0}\n <button\n type=\"button\"\n class=\"muted\"\n onclick={() => {\n currentIndex = 0;\n }}\n >\n ⏮\n </button>\n <button type=\"button\" class=\"muted\" onclick={previousEntry}>\n {_(\"Previous\")}\n </button>\n {/if}\n <span class=\"spacer\"></span>\n {#if currentIndex < entries.length - 1}\n <button type=\"submit\">{_(\"Next\")}</button>\n <button\n type=\"button\"\n class=\"muted\"\n onclick={() => {\n currentIndex = entries.length - 1;\n }}\n >\n ⏭\n </button>\n {:else}<button type=\"submit\">{_(\"Save\")}</button>{/if}\n </div>\n {#if entry.meta.get(\"__source__\")}\n <hr />\n <h3>\n {_(\"Source\")}\n {#if entry.meta.lineno}({_(\"Line\")}: {entry.meta.lineno}){/if}\n </h3>\n <pre>{entry.meta.get(\"__source__\")}</pre>\n {/if}\n {/if}\n </form>\n</ModalBase>\n\n<style>\n pre {\n margin: 0;\n font-size: 0.9em;\n white-space: pre-wrap;\n }\n\n .duplicate {\n display: contents;\n opacity: 0.5;\n }\n</style>\n", "<script lang=\"ts\">\n import type { Entry } from \"../../entries/index.ts\";\n import AccountInput from \"../../entry-forms/AccountInput.svelte\";\n import { _ } from \"../../i18n.ts\";\n import type { ProcessedImportableFile } from \"./index.ts\";\n\n interface Props {\n files: ProcessedImportableFile[];\n extract_cache: Map<string, Entry[]>;\n file_accounts: Map<string, string>;\n file_names: Map<string, string>;\n selected: string | null;\n remove: (name: string) => void;\n move: (name: string, a: string, newName: string) => void;\n extract: (name: string, importer: string) => void;\n }\n\n let {\n files,\n extract_cache = $bindable(),\n file_accounts = $bindable(),\n file_names = $bindable(),\n selected = $bindable(),\n remove,\n move,\n extract,\n }: Props = $props();\n</script>\n\n{#each files as file (file.name)}\n <div class=\"header\" title={file.name} class:selected={selected === file.name}>\n <button\n type=\"button\"\n class=\"unset\"\n onclick={() => {\n selected = selected === file.name ? null : file.name;\n }}\n >\n {file.basename}\n </button>\n <button\n type=\"button\"\n class=\"round\"\n onclick={() => {\n remove(file.name);\n }}\n title={_(\"Delete\")}\n tabindex={-1}\n >\n ×\n </button>\n </div>\n <div class=\"flex-column\">\n {#each file.importers as info (info.importer_name)}\n {@const file_importer_key = `${file.name}:${info.importer_name}`}\n {@const account = file_accounts.get(file_importer_key) ?? info.account}\n {@const new_name = file_names.get(file_importer_key) ?? info.newName}\n <form\n class=\"flex-row\"\n onsubmit={(event) => {\n event.preventDefault();\n move(file.name, account, new_name);\n }}\n >\n <AccountInput\n bind:value={\n () => account,\n (value: string) => {\n file_accounts.set(file_importer_key, value);\n }\n }\n required\n />\n <input\n size={40}\n bind:value={\n () => new_name,\n (value: string) => {\n file_names.set(file_importer_key, value);\n }\n }\n />\n <button type=\"submit\">\n {_(\"Move\")}\n </button>\n {#if info.importer_name}\n {@const is_cached = extract_cache.has(file_importer_key)}\n <button\n type=\"button\"\n title=\"{_('Extract')} with importer {info.importer_name}\"\n onclick={() => {\n extract(file.name, info.importer_name);\n }}\n >\n {is_cached ? _(\"Continue\") : _(\"Extract\")}\n </button>\n {#if is_cached}\n <button\n type=\"button\"\n onclick={() => {\n extract_cache.delete(file_importer_key);\n }}\n >\n {_(\"Clear\")}\n </button>\n {/if}\n {info.importer_name}\n {/if}\n </form>\n {/each}\n </div>\n{/each}\n\n<style>\n .header {\n padding: 0.5rem;\n background-color: var(--summary-background);\n }\n\n .header button:first-child {\n width: 90%;\n }\n\n .header button:nth-child(2) {\n float: right;\n }\n\n .header.selected {\n background-color: var(--summary-background-darker);\n }\n</style>\n", "<script lang=\"ts\">\n import { put_upload_import_file } from \"../../api/index.ts\";\n import { _ } from \"../../i18n.ts\";\n import { notify, notify_err } from \"../../notifications.ts\";\n import { router } from \"../../router.ts\";\n\n let input: HTMLInputElement | undefined = $state.raw();\n\n /** Upload the selected files and reload. */\n async function uploadImports(event: SubmitEvent) {\n event.preventDefault();\n if (input?.files == null) {\n return;\n }\n await Promise.all(\n Array.from(input.files).map(async (file) => {\n const formData = new FormData();\n formData.append(\"file\", file, file.name);\n return put_upload_import_file(formData).then(\n notify,\n (error: unknown) => {\n notify_err(error, (err) => `Upload error: ${err.message}`);\n },\n );\n }),\n );\n input.value = \"\";\n router.reload();\n }\n</script>\n\n<form onsubmit={uploadImports}>\n <h2>{_(\"Upload files for import\")}</h2>\n <input bind:this={input} multiple type=\"file\" />\n <button type=\"submit\">{_(\"Upload\")}</button>\n</form>\n", "<script lang=\"ts\">\n import { onMount } from \"svelte\";\n import { SvelteMap } from \"svelte/reactivity\";\n\n import {\n delete_document,\n get_extract,\n move_document,\n save_entries,\n } from \"../../api/index.ts\";\n import type { Entry } from \"../../entries/index.ts\";\n import { urlFor } from \"../../helpers.ts\";\n import { _ } from \"../../i18n.ts\";\n import { is_non_empty } from \"../../lib/array.ts\";\n import { notify, notify_err } from \"../../notifications.ts\";\n import { router } from \"../../router.ts\";\n import { import_config } from \"../../stores/fava_options.ts\";\n import DocumentPreview from \"../documents/DocumentPreview.svelte\";\n import Extract from \"./Extract.svelte\";\n import FileList from \"./FileList.svelte\";\n import ImportFileUpload from \"./ImportFileUpload.svelte\";\n import type { ImportReportProps } from \"./index.ts\";\n\n let { files }: ImportReportProps = $props();\n\n // initially show the other files if no importable files are present\n // svelte-ignore state_referenced_locally\n const show_other_files_initially = files.every(\n (file) => !file.identified_by_importers,\n );\n\n /** Whether the `<details>` for the \"other files\" is open. */\n let show_other_files = $state.raw(show_other_files_initially);\n\n /** The array of entries to show the modal for. */\n let entries: Entry[] = $state([]);\n\n /** Name of the currently selected file. */\n let selected: string | null = $state.raw(null);\n\n /** The lists of entries for file and importer combos where extract was started and not completed. */\n let extract_cache = new SvelteMap<string, Entry[]>();\n /** The account names chosen for a file and importer. */\n let file_accounts = new SvelteMap<string, string>();\n /** The names chosen for a file and importer. */\n let file_names = new SvelteMap<string, string>();\n\n /** Importable files. */\n let importable_files = $derived(\n files.filter((file) => file.identified_by_importers),\n );\n /** Files not identified by any importer. */\n let other_files = $derived(\n files.filter((file) => !file.identified_by_importers),\n );\n\n const preventNavigation = () =>\n extract_cache.size > 0\n ? \"There are unfinished imports, are you sure you want to continue?\"\n : null;\n\n onMount(() => router.add_interrupt_handler(preventNavigation));\n\n /**\n * Move the given file to the new file name (and remove from the list).\n */\n async function move(filename: string, account: string, newName: string) {\n const moved = await move_document(filename, account, newName);\n if (moved) {\n router.reload();\n }\n }\n\n /**\n * Delete the given file and remove it from the displayed list.\n */\n async function remove(filename: string) {\n if (!window.confirm(_(\"Delete this file?\"))) {\n return;\n }\n const removed = await delete_document(filename);\n if (removed) {\n if (selected === filename) {\n selected = null;\n }\n router.reload();\n }\n }\n\n /**\n * Open the extract dialog for the given file/importer combination.\n */\n async function extract(filename: string, importer: string) {\n const file_importer_key = `${filename}:${importer}`;\n const cached = extract_cache.get(file_importer_key);\n if (cached) {\n entries = cached;\n return;\n }\n try {\n entries = await get_extract({ filename, importer });\n if (entries.length) {\n extract_cache.set(file_importer_key, entries);\n } else {\n notify(\"No entries to import from this file.\", \"warning\");\n }\n } catch (error) {\n notify_err(error);\n }\n }\n\n /**\n * Save the current entries.\n */\n async function save() {\n const without_duplicates = entries.filter((e) => !e.is_duplicate());\n const key = [...extract_cache].find(([, e]) => e === entries)?.[0];\n if (key != null) {\n extract_cache.delete(key);\n }\n entries = [];\n if (is_non_empty(without_duplicates)) {\n await save_entries(without_duplicates);\n }\n }\n</script>\n\n{#if $import_config == null}\n <p>\n No importers configured. See <a href={$urlFor(\"help/import\")}\n >Help (Import)</a\n > for more information.\n </p>\n{:else}\n <Extract\n bind:entries\n close={() => {\n entries = [];\n }}\n {save}\n />\n <div class=\"fixed-fullsize-container\">\n <div class=\"filelist flex-column\">\n {#if files.length === 0}\n <p>{_(\"No files were found for import.\")}</p>\n {/if}\n {#if importable_files.length > 0}\n <h2>{_(\"Importable Files\")}</h2>\n <FileList\n files={importable_files}\n {extract_cache}\n {file_accounts}\n {file_names}\n bind:selected\n {move}\n {remove}\n {extract}\n />\n {/if}\n {#if other_files.length > 0}\n <details bind:open={show_other_files}>\n <summary>{_(\"Non-importable Files\")}</summary>\n <FileList\n files={other_files}\n {extract_cache}\n {file_accounts}\n {file_names}\n bind:selected\n {move}\n {remove}\n {extract}\n />\n </details>\n {/if}\n <ImportFileUpload />\n </div>\n {#if selected}\n <div>\n <DocumentPreview filename={selected} />\n </div>\n {/if}\n </div>\n{/if}\n\n<style>\n .fixed-fullsize-container {\n display: flex;\n align-items: stretch;\n }\n\n .fixed-fullsize-container > * {\n flex: 1 1 40%;\n overflow: auto;\n }\n\n .filelist {\n padding: 1rem;\n }\n</style>\n", "import { get_imports } from \"../../api/index.ts\";\nimport { todayAsString } from \"../../format.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { Route } from \"../route.ts\";\nimport ImportSvelte from \"./Import.svelte\";\n\n/**\n * Construct the filename from date and basename.\n *\n * If it already starts with a date use it, otherwise prepend the date\n */\nfunction newFilename(date: string, basename: string): string {\n return /^\\d{4}-\\d{2}-\\d{2}/.test(basename) ? basename : `${date} ${basename}`;\n}\n\nexport interface ProcessedImportableFile {\n /** Full filename of this file. */\n readonly name: string;\n /** Basename of this file. */\n readonly basename: string;\n /** Whether at least one importer identified this file. */\n readonly identified_by_importers: boolean;\n readonly importers: {\n readonly account: string;\n readonly importer_name: string;\n readonly newName: string;\n }[];\n}\n\nexport interface ImportReportProps {\n files: ProcessedImportableFile[];\n}\n\nexport const import_report = new Route<ImportReportProps>(\n \"import\",\n ImportSvelte,\n async () =>\n get_imports()\n .then((files) => {\n // Initially set the file names for all importable files.\n const today = todayAsString();\n return files.map((file) => {\n const importers = file.importers.map(\n ({ account, importer_name, date, name }) => ({\n account,\n importer_name,\n newName: newFilename(date, name),\n }),\n );\n const identified_by_importers = importers.length > 0;\n if (!identified_by_importers) {\n const newName = newFilename(today, file.basename);\n importers.push({ account: \"\", newName, importer_name: \"\" });\n }\n return { ...file, identified_by_importers, importers };\n });\n })\n .then((files) => ({ files })),\n () => _(\"Import\"),\n);\n", "<script lang=\"ts\">\n import type { JournalReportProps } from \"./index.ts\";\n import JournalTable from \"./JournalTable.svelte\";\n\n let { journal, initial_sort, all_pages }: JournalReportProps = $props();\n</script>\n\n<JournalTable\n {journal}\n {initial_sort}\n {all_pages}\n show_change_and_balance={false}\n/>\n", "import { range } from \"d3-array\";\nimport { get as store_get } from \"svelte/store\";\n\nimport { get_journal_page } from \"../../api/index.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { fragment_from_string } from \"../../lib/dom.ts\";\nimport { shallow_equal } from \"../../lib/equals.ts\";\nimport { log_error } from \"../../log.ts\";\nimport { notify_err } from \"../../notifications.ts\";\nimport { getURLFilters } from \"../../stores/filters.ts\";\nimport { journal_sort, type JournalSort } from \"../../stores/journal.ts\";\nimport { Route } from \"../route.ts\";\nimport Journal from \"./Journal.svelte\";\n\nexport interface JournalReportProps {\n journal: DocumentFragment;\n initial_sort: JournalSort;\n all_pages: Promise<DocumentFragment | null>[];\n}\n\nexport const journal = new Route<JournalReportProps>(\n \"journal\",\n Journal,\n async (url: URL) => {\n const filters = getURLFilters(url);\n const $journal_sort = store_get(journal_sort);\n const order = shallow_equal($journal_sort, [\"date\", \"asc\"])\n ? \"asc\"\n : \"desc\";\n const { journal, total_pages } = await get_journal_page({\n ...filters,\n page: 1,\n order,\n });\n\n let error_shown = false;\n const pages = range(2, total_pages + 1);\n const all_pages = pages.map(async (page) => {\n return get_journal_page({ ...filters, page, order }).then(\n (res) => fragment_from_string(res.journal),\n (error: unknown) => {\n log_error(`Failed to fetch page ${page.toString()}`, error);\n if (!error_shown) {\n notify_err(new Error(\"Failed to fetch some journal pages\"));\n error_shown = true;\n }\n return null;\n },\n );\n });\n\n return {\n journal: fragment_from_string(journal),\n initial_sort: [\"date\", order],\n all_pages,\n };\n },\n () => _(\"Journal\"),\n);\n", "import { _ } from \"../i18n.ts\";\nimport { localStorageSyncedStore } from \"../lib/store.ts\";\nimport { constants, type ValidationT } from \"../lib/validation.ts\";\n\nconst color_scheme_validator = constants(\"light dark\", \"dark\", \"light\");\n\n/** The currently selected colorScheme. */\nexport const color_scheme = localStorageSyncedStore<\n ValidationT<typeof color_scheme_validator>\n>(\n \"theme\",\n color_scheme_validator,\n () => \"light dark\",\n () => [\n [\"light dark\", `\u2699\uFE0F ${_(\"System\")}`],\n [\"dark\", `\uD83C\uDF19 ${_(\"Dark\")}`],\n [\"light\", `\u2600\uFE0F ${_(\"Light\")}`],\n ],\n);\n\n/** Set the color scheme on store changes. */\nexport function init_color_scheme(): void {\n color_scheme.subscribe(($theme) => {\n document.documentElement.style.colorScheme = $theme;\n });\n}\n", "<script lang=\"ts\">\n import { _ } from \"../../i18n.ts\";\n import { Sorter, StringColumn } from \"../../sort/index.ts\";\n import SortHeader from \"../../sort/SortHeader.svelte\";\n\n type T = [string, string];\n interface Props {\n options: Record<string, string>;\n }\n\n let { options }: Props = $props();\n\n const columns = [\n new StringColumn<T>(_(\"Key\"), (d) => d[0]),\n new StringColumn<T>(_(\"Value\"), (d) => d[1]),\n ] as const;\n let sorter = $state(new Sorter(columns[0], \"asc\"));\n\n let options_array = $derived(Object.entries(options));\n let sorted_options = $derived(sorter.sort(options_array));\n</script>\n\n<table>\n <thead>\n <tr>\n {#each columns as column (column)}\n <SortHeader bind:sorter {column} />\n {/each}\n </tr>\n </thead>\n <tbody>\n {#each sorted_options as [key, value] (key)}\n <tr>\n <td>{key}</td>\n <td><pre>{value}</pre></td>\n </tr>\n {/each}\n </tbody>\n</table>\n\n<style>\n td:nth-child(1) {\n font-weight: 500;\n }\n</style>\n", "<script lang=\"ts\">\n import ModeSwitch from \"../../charts/ModeSwitch.svelte\";\n import { urlFor } from \"../../helpers.ts\";\n import { _ } from \"../../i18n.ts\";\n import { color_scheme } from \"../../stores/color_scheme.ts\";\n import type { OptionsReportProps } from \"./index.ts\";\n import OptionsTable from \"./OptionsTable.svelte\";\n\n let { fava_options, beancount_options }: OptionsReportProps = $props();\n</script>\n\n<h2>\n {_(\"Color scheme\")}\n</h2>\n<p>\n <ModeSwitch store={color_scheme} />\n</p>\n\n<h2>\n {_(\"Fava options\")}\n <a href={$urlFor(\"help/options\")}>({_(\"help\")})</a>\n</h2>\n<OptionsTable options={fava_options} />\n\n<h2>{_(\"Beancount options\")}</h2>\n<OptionsTable options={beancount_options} />\n", "import { get_options } from \"../../api/index.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { Route } from \"../route.ts\";\nimport OptionsSvelte from \"./Options.svelte\";\n\nexport interface OptionsReportProps {\n fava_options: Record<string, string>;\n beancount_options: Record<string, string>;\n}\n\nexport const options = new Route<OptionsReportProps>(\n \"options\",\n OptionsSvelte,\n async () => get_options(),\n () => _(\"Options\"),\n);\n", "import { localStorageSyncedStore } from \"../lib/store.ts\";\nimport { array, string } from \"../lib/validation.ts\";\n\nconst { update, set, subscribe } = localStorageSyncedStore(\n \"query-history\",\n array(string),\n () => [],\n);\n\n/** The query shell history. */\nexport const query_shell_history = {\n subscribe,\n /** Completely clear the history. */\n clear(): void {\n set([]);\n },\n /** Add a new entry to the query history (this does avoid duplicates). */\n add(query: string): void {\n if (query) {\n update((hist) => [...new Set([query, ...hist])]);\n }\n },\n /** Remove a query string from the query history. */\n remove(query: string): void {\n if (query) {\n update((hist) => hist.filter((item) => item !== query));\n }\n },\n};\n", "import { stratifyAccounts } from \"../lib/tree.ts\";\nimport type {\n Inventory,\n QueryResultTable,\n} from \"../reports/query/query_table.ts\";\nimport type { ChartContext } from \"./context.ts\";\nimport type { HierarchyChart } from \"./hierarchy.ts\";\nimport { ParsedHierarchyChart } from \"./hierarchy.ts\";\nimport type { LineChart } from \"./line.ts\";\nimport { ParsedLineChart } from \"./line.ts\";\n\n/** Get the query chart, if possible, from a query result */\nexport function getQueryChart(\n table: QueryResultTable,\n $chartContext: ChartContext,\n): HierarchyChart | LineChart | null {\n const { columns } = table;\n const [first, second] = columns;\n if (!first || !second || columns.length > 2) {\n return null;\n }\n if (first.dtype === \"str\" && second.dtype === \"Inventory\") {\n const grouped = (table.rows as [string, Inventory][]).map(\n ([group, inv]) => ({ group, balance: inv.value }),\n );\n const root = stratifyAccounts(\n grouped,\n (d) => d.group,\n (account, d) => ({ account, balance: d?.balance ?? {} }),\n );\n root.account = \"(root)\";\n return new ParsedHierarchyChart(null, root).with_context($chartContext);\n }\n if (first.dtype === \"date\" && second.dtype === \"Inventory\") {\n const bals = (table.rows as [Date, Inventory][]).map(([date, inv]) => ({\n date,\n balance: inv.value,\n }));\n return new ParsedLineChart(null, bals).with_context();\n }\n return null;\n}\n", "<script lang=\"ts\">\n import { attach_editor } from \"../../codemirror/dom.ts\";\n import type { CodemirrorBql } from \"../../codemirror/types.ts\";\n\n interface Props {\n value: string;\n error?: boolean | undefined;\n codemirror_bql: CodemirrorBql;\n }\n\n let { value, error = false, codemirror_bql }: Props = $props();\n\n let editor = $derived(codemirror_bql.init_readonly_query_editor(value));\n</script>\n\n<pre class:error {@attach attach_editor(editor)}></pre>\n\n<style>\n .error {\n border: 1px solid var(--error);\n }\n</style>\n", "<!--\n @component\n Renders a query result in a collapsible box.\n-->\n<script lang=\"ts\">\n import Chart from \"../../charts/Chart.svelte\";\n import { chartContext } from \"../../charts/context.ts\";\n import { getQueryChart } from \"../../charts/query-charts.ts\";\n import type { CodemirrorBql } from \"../../codemirror/types.ts\";\n import type { Result } from \"../../lib/result.ts\";\n import type { QueryResult } from \"./query_table.ts\";\n import QueryLinks from \"./QueryLinks.svelte\";\n import QueryTable from \"./QueryTable.svelte\";\n import ReadonlyQueryEditor from \"./ReadonlyQueryEditor.svelte\";\n\n interface Props {\n /** The query string. */\n query: string;\n /** The query result, possibly missing or an error. */\n result?: Result<QueryResult, string> | undefined;\n /** Whether this box is open. */\n open?: boolean | undefined;\n /** Handler to run on 'select' (clicking the summary bar). */\n onselect: () => void;\n /** Handler to run on 'delete' (clicking the x button). */\n ondelete: () => void;\n codemirror_bql: CodemirrorBql;\n }\n\n let {\n query,\n result,\n open = $bindable(),\n onselect,\n ondelete,\n codemirror_bql,\n }: Props = $props();\n\n let inactive = $derived(!result);\n</script>\n\n<details bind:open>\n <summary class:inactive onclick={inactive ? onselect : null}>\n <ReadonlyQueryEditor\n value={query}\n error={result?.is_err}\n {codemirror_bql}\n />\n <span class=\"spacer\"></span>\n {#if result && result.is_ok && result.value.t === \"table\"}\n <QueryLinks {query} />\n {/if}\n <button\n type=\"button\"\n onclick={(ev) => {\n ev.stopPropagation();\n ondelete();\n }}\n >\n x\n </button>\n </summary>\n <div>\n {#if result}\n {#if result.is_ok}\n {#if result.value.t === \"string\"}\n <pre><code>{result.value.contents}</code></pre>\n {:else}\n {@const chart = getQueryChart(result.value, $chartContext)}\n {#if chart}\n <Chart {chart} />\n {/if}\n <QueryTable table={result.value} />\n {/if}\n {:else}\n <pre><code>{result.error}</code></pre>\n {/if}\n {/if}\n </div>\n</details>\n\n<style>\n details > div {\n max-height: 70vh;\n overflow: auto;\n }\n\n .inactive {\n filter: opacity(0.5);\n }\n\n pre {\n margin: 0;\n }\n</style>\n", "<script lang=\"ts\">\n import { attach_editor } from \"../../codemirror/dom.ts\";\n import type { CodemirrorBql } from \"../../codemirror/types.ts\";\n import { _ } from \"../../i18n.ts\";\n import { keyboardShortcut } from \"../../keyboard-shortcuts.ts\";\n\n interface Props {\n value: string;\n submit: () => void;\n codemirror_bql: CodemirrorBql;\n }\n\n let { value = $bindable(), submit, codemirror_bql }: Props = $props();\n\n // svelte-ignore state_referenced_locally\n const editor = codemirror_bql.init_query_editor(\n value,\n (state) => {\n value = state.sliceDoc();\n },\n _(\"...enter a BQL query. 'help' to list available commands.\"),\n () => submit,\n );\n\n $effect(() => {\n if (value !== editor.state.sliceDoc()) {\n editor.dispatch(codemirror_bql.replace_contents(editor.state, value));\n }\n });\n</script>\n\n<form\n onsubmit={(event) => {\n event.preventDefault();\n submit();\n }}\n>\n <div {@attach attach_editor(editor)}></div>\n <button type=\"submit\" {@attach keyboardShortcut(\"Control+Enter\")}>\n {_(\"Submit\")}\n </button>\n</form>\n\n<style>\n form {\n display: flex;\n align-items: center;\n padding-bottom: 1em;\n }\n\n button {\n margin: 0;\n }\n\n div {\n flex-grow: 1;\n width: 100%;\n height: auto;\n margin-right: 0.5em;\n font-size: 16px;\n border: 1px solid var(--border);\n }\n\n form :global(.cm-editor) {\n width: 100%;\n }\n</style>\n", "<script lang=\"ts\">\n import { onMount } from \"svelte\";\n\n import { get_query } from \"../../api/index.ts\";\n import { err, ok, type Result } from \"../../lib/result.ts\";\n import { log_error } from \"../../log.ts\";\n import { router } from \"../../router.ts\";\n import { filter_params } from \"../../stores/filters.ts\";\n import { query_shell_history } from \"../../stores/query.ts\";\n import { searchParams } from \"../../stores/url.ts\";\n import type { QueryReportProps } from \"./index.ts\";\n import type { QueryResult } from \"./query_table.ts\";\n import QueryBox from \"./QueryBox.svelte\";\n import QueryEditor from \"./QueryEditor.svelte\";\n\n let { codemirror_bql }: QueryReportProps = $props();\n\n /** The current query string in the editor. */\n let query_string = $state.raw(\"\");\n /** The currently loaded results. */\n let results: Record<string, Result<QueryResult, string>> = $state({});\n /** The toggle states of the individual boxes. */\n const is_open: Record<string, boolean> = $state({});\n\n onMount(() =>\n searchParams.subscribe(($searchParams) => {\n const search_query_string = $searchParams.get(\"query_string\") ?? \"\";\n // Set the query string to the value from the URL query if that changes (e.g. on navigation).\n if (search_query_string !== query_string) {\n query_string = search_query_string;\n submit();\n }\n }),\n );\n\n onMount(() =>\n filter_params.subscribe(() => {\n rerun_all_open();\n }),\n );\n\n /** Submit the current query and load the result for it. */\n function submit() {\n const query = query_string;\n if (!query) {\n return;\n }\n if (query.trim().toUpperCase() === \"CLEAR\") {\n query_shell_history.clear();\n query_string = \"\";\n router.set_search_param(\"query_string\", \"\");\n return;\n }\n query_shell_history.add(query);\n router.set_search_param(\"query_string\", query);\n get_query({ query_string: query, ...$filter_params })\n .then(\n (res) => ok(res),\n (error: unknown) =>\n err(error instanceof Error ? error.message : \"INTERNAL ERROR\"),\n )\n .then((res) => {\n results[query] = res;\n is_open[query] = true;\n document.querySelector(\"article\")?.scroll(0, 0);\n })\n .catch(log_error);\n }\n\n /* Re-run all open queries on global filter change. */\n function rerun_all_open() {\n const to_rerun = Object.entries(is_open)\n .filter(([, is_open]) => is_open)\n .map(([query]) => query);\n results = {};\n for (const query of to_rerun) {\n get_query({ query_string: query, ...$filter_params })\n .then(\n (res) => ok(res),\n (error: unknown) =>\n err(error instanceof Error ? error.message : \"INTERNAL ERROR\"),\n )\n .then((res) => {\n results[query] = res;\n })\n .catch(log_error);\n }\n }\n\n /** Delete the given query from the history and potentially clear it from the form. */\n function delete_item(query: string) {\n query_shell_history.remove(query);\n if (query_string === query) {\n query_string = \"\";\n router.set_search_param(\"query_string\", \"\");\n }\n }\n</script>\n\n<QueryEditor bind:value={query_string} {submit} {codemirror_bql} />\n{#each $query_shell_history as query (query)}\n <QueryBox\n {query}\n result={results[query]}\n bind:open={is_open[query]}\n onselect={() => {\n query_string = query;\n submit();\n }}\n ondelete={() => {\n delete_item(query);\n }}\n {codemirror_bql}\n />\n{/each}\n", "import type { CodemirrorBql } from \"../../codemirror/types.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { Route } from \"../route.ts\";\nimport QuerySvelte from \"./Query.svelte\";\n\nexport interface QueryReportProps {\n codemirror_bql: CodemirrorBql;\n}\nexport const query = new Route<QueryReportProps>(\n \"query\",\n QuerySvelte,\n async () => {\n const codemirror_bql = await import(\"../../codemirror/bql.ts\");\n return { codemirror_bql };\n },\n () => _(\"Query\"),\n);\n", "<script lang=\"ts\">\n import { sum } from \"d3-array\";\n\n import { _ } from \"../../i18n.ts\";\n import { NumberColumn, Sorter, StringColumn } from \"../../sort/index.ts\";\n import SortHeader from \"../../sort/SortHeader.svelte\";\n\n let { entries_by_type }: { entries_by_type: Record<string, number> } =\n $props();\n\n let total = $derived(sum(Object.values(entries_by_type)));\n\n const columns = [\n new StringColumn<[string, number]>(_(\"Type\"), (d) => d[0].valueOf()),\n new NumberColumn<[string, number]>(_(\"# Entries\"), (d) => d[1]),\n ] as const;\n let sorter = $state(new Sorter(columns[0], \"asc\"));\n let sorted_entries_by_type = $derived(\n sorter.sort(Object.entries(entries_by_type)),\n );\n</script>\n\n<table>\n <thead>\n <tr>\n {#each columns as column (column)}\n <SortHeader bind:sorter {column} />\n {/each}\n </tr>\n </thead>\n <tbody>\n {#each sorted_entries_by_type as [type, count] (type)}\n <tr>\n <td>{type}</td>\n <td class=\"num\">{count}</td>\n </tr>\n {/each}\n </tbody>\n <tfoot>\n <tr>\n <td>{_(\"Total\")}</td>\n <td class=\"num\">{total}</td>\n </tr>\n </tfoot>\n</table>\n", "<script lang=\"ts\">\n import type { AccountDetail } from \"../../api/validators.ts\";\n import { day } from \"../../format.ts\";\n import { urlForAccount } from \"../../helpers.ts\";\n import { _ } from \"../../i18n.ts\";\n import AccountIndicator from \"../../sidebar/AccountIndicator.svelte\";\n import {\n NumberColumn,\n Sorter,\n StringColumn,\n UnsortedColumn,\n } from \"../../sort/index.ts\";\n import SortHeader from \"../../sort/SortHeader.svelte\";\n import { ctx } from \"../../stores/format.ts\";\n import { account_details, currency_name } from \"../../stores/index.ts\";\n import { name_assets, name_liabilities } from \"../../stores/options.ts\";\n import type { Inventory } from \"../query/query_table.ts\";\n\n let { balances }: { balances: Record<string, Inventory> } = $props();\n\n let accounts = $derived(\n Object.entries($account_details).filter(\n ([account_name]) =>\n account_name.startsWith($name_assets) ||\n account_name.startsWith($name_liabilities),\n ),\n );\n\n const status_sortorder = { red: 3, yellow: 2, green: 1 };\n type Row = [string, AccountDetail];\n const columns = [\n new StringColumn<Row>(_(\"Account\"), (d) => d[0].valueOf()),\n new NumberColumn<Row>(\"\", ([, d]) =>\n d.uptodate_status == null ? 0 : status_sortorder[d.uptodate_status],\n ),\n new NumberColumn<Row>(_(\"Last Entry\"), ([, d]) =>\n d.last_entry != null ? +d.last_entry.date : 0,\n ),\n new UnsortedColumn(_(\"Balance\")),\n ] as const;\n let sorter = $state(new Sorter(columns[0], \"asc\"));\n let sorted_accounts = $derived(sorter.sort(accounts));\n</script>\n\n<table>\n <thead>\n <tr>\n {#each columns as column (column)}\n <SortHeader bind:sorter {column} />\n {/each}\n </tr>\n </thead>\n <tbody>\n {#each sorted_accounts as [account_name, { last_entry, uptodate_status }] (account_name)}\n {#if last_entry}\n {@const inventory = balances[account_name]}\n <tr>\n <td class=\"account\">\n <a href={$urlForAccount(account_name)}>{account_name}</a>\n </td>\n <td>\n {#if uptodate_status}\n <AccountIndicator account={account_name} small />\n {/if}\n </td>\n <td>\n <a href={`#context-${last_entry.entry_hash}`}>\n {day(last_entry.date)}\n </a>\n </td>\n <td class=\"num\">\n {#if inventory}\n {#each Object.entries(inventory.value) as [currency, number] (currency)}\n <span title={$currency_name(currency)}\n >{$ctx.amount(number, currency)}</span\n >\n <br />\n {/each}\n {/if}\n </td>\n </tr>\n {/if}\n {/each}\n </tbody>\n</table>\n", "<script lang=\"ts\">\n import { urlFor } from \"../../helpers.ts\";\n import { _ } from \"../../i18n.ts\";\n import QueryTable from \"../query/QueryTable.svelte\";\n import EntriesByType from \"./EntriesByType.svelte\";\n import {\n postings_per_account_query,\n type StatisticsReportProps,\n } from \"./index.ts\";\n import UpdateActivity from \"./UpdateActivity.svelte\";\n\n let {\n all_balance_directives,\n balances,\n entries_by_type,\n postings_per_account,\n }: StatisticsReportProps = $props();\n</script>\n\n<div class=\"left\">\n <h3>\n {_(\"Postings per Account\")}\n (<a href={$urlFor(\"query\", { query_string: postings_per_account_query })}>\n {_(\"Query\")}\n </a>)\n </h3>\n <QueryTable table={postings_per_account} />\n</div>\n\n<div class=\"left\">\n <h3>\n {_(\"Update Activity\")}\n <copyable-text\n class=\"button right\"\n title={_(\n \"Click to copy balance directives for accounts (except green ones) to the clipboard.\",\n )}\n data-clipboard-text={all_balance_directives}\n >\n {_(\"Copy balance directives\")}\n </copyable-text>\n </h3>\n <UpdateActivity {balances} />\n</div>\n\n<div class=\"left\">\n <h3>{_(\"Entries per Type\")}</h3>\n <EntriesByType {entries_by_type} />\n</div>\n", "import { get_query, get_statistics } from \"../../api/index.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { getURLFilters } from \"../../stores/filters.ts\";\nimport type { Inventory, QueryResultTable } from \"../query/query_table.ts\";\nimport { Route } from \"../route.ts\";\nimport Statistics from \"./Statistics.svelte\";\n\nexport interface StatisticsReportProps {\n all_balance_directives: string;\n balances: Record<string, Inventory>;\n entries_by_type: Record<string, number>;\n postings_per_account: QueryResultTable;\n}\nexport const postings_per_account_query =\n \"SELECT account, count(account) ORDER BY account\";\n\nexport const statistics = new Route<StatisticsReportProps>(\n \"statistics\",\n Statistics,\n async (url) => {\n const postings_per_account = await get_query({\n query_string: postings_per_account_query,\n ...getURLFilters(url),\n });\n const { all_balance_directives, balances, entries_by_type } =\n await get_statistics(getURLFilters(url));\n if (postings_per_account.t !== \"table\") {\n throw new Error(\"Internal error: expected a query result table\");\n }\n return {\n all_balance_directives,\n balances,\n entries_by_type,\n postings_per_account,\n };\n },\n () => _(\"Statistics\"),\n);\n", "<script lang=\"ts\">\n import type { AccountTreeNode } from \"../charts/hierarchy.ts\";\n import { is_empty } from \"../lib/objects.ts\";\n import { toggled_accounts } from \"../stores/accounts.ts\";\n import { ctx } from \"../stores/format.ts\";\n import { currency_name } from \"../stores/index.ts\";\n import { operating_currency } from \"../stores/options.ts\";\n import AccountCell from \"./AccountCell.svelte\";\n import Diff from \"./Diff.svelte\";\n import { getTreeTableNotShownContext } from \"./helpers.ts\";\n import TreeTableNode from \"./TreeTableNode.svelte\";\n\n interface Props {\n /** The account node to show. */\n node: AccountTreeNode;\n /** Whther to invert all numbers (either `1` or `-1`). */\n invert: number;\n }\n\n let { node, invert }: Props = $props();\n\n const not_shown = getTreeTableNotShownContext();\n\n let { account, children } = $derived(node);\n\n let is_toggled = $derived($toggled_accounts.has(account));\n\n let has_balance = $derived(!is_empty(node.balance));\n /** Whether to show the balance (or balance_children) */\n let show_balance = $derived(!is_toggled && has_balance);\n let shown_balance = $derived(\n show_balance ? node.balance : node.balance_children,\n );\n let shown_cost = $derived(show_balance ? node.cost : node.cost_children);\n let shown_balance_other = $derived(\n Object.entries(shown_balance)\n .sort()\n .filter(([c]) => !$operating_currency.includes(c)),\n );\n let dimmed = $derived(!is_toggled && !has_balance);\n</script>\n\n<li>\n <p>\n <AccountCell {node} />\n {#each $operating_currency as currency (currency)}\n {@const num = shown_balance[currency]}\n {@const cost_num = shown_cost?.[currency] ?? 0}\n <span class=\"num\" class:dimmed>\n {#if num}\n {$ctx.num(invert * num, currency)}\n {#if cost_num && num - cost_num}\n {@const diff = invert * (num - cost_num)}\n <Diff {diff} num={invert * cost_num} {currency} />\n {/if}\n {/if}\n </span>\n {/each}\n <span class=\"num other\" class:dimmed>\n {#each shown_balance_other as [currency, num] (currency)}\n {@const cost_num = shown_cost?.[currency] ?? 0}\n <span title={$currency_name(currency)}>\n {$ctx.amount(invert * num, currency)}\n </span>\n {#if cost_num && num - cost_num}\n {@const diff = invert * (num - cost_num)}\n <Diff {diff} num={invert * cost_num} {currency} />\n {/if}\n <br />\n {/each}\n </span>\n </p>\n {#if !is_toggled && children.some((n) => !$not_shown.has(n.account))}\n <ol>\n {#each children.filter((n) => !$not_shown.has(n.account)) as child (child.account)}\n <TreeTableNode node={child} {invert} />\n {/each}\n </ol>\n {/if}\n</li>\n", "<script lang=\"ts\">\n import { writable } from \"svelte/store\";\n\n import type { AccountTreeNode } from \"../charts/hierarchy.ts\";\n import { _ } from \"../i18n.ts\";\n import { invert_account } from \"../stores/accounts.ts\";\n import { currency_name } from \"../stores/index.ts\";\n import { operating_currency } from \"../stores/options.ts\";\n import AccountCellHeader from \"./AccountCellHeader.svelte\";\n import { get_not_shown, setTreeTableNotShownContext } from \"./helpers.ts\";\n import TreeTableNode from \"./TreeTableNode.svelte\";\n\n interface Props {\n /** The account tree to show. */\n tree: AccountTreeNode;\n /** The end date (for closed accounts). */\n end: Date | null;\n }\n\n let { tree, end }: Props = $props();\n let account = $derived(tree.account);\n\n const not_shown = writable(new Set<string>());\n setTreeTableNotShownContext(not_shown);\n\n $effect(() => {\n $not_shown = $get_not_shown(tree, end);\n });\n</script>\n\n<ol\n class=\"flex-table tree-table-new\"\n class:wider={$operating_currency.length > 1}\n>\n <li class=\"head\">\n <p>\n <AccountCellHeader {account} />\n {#each $operating_currency as currency (currency)}\n <span class=\"num\" title={$currency_name(currency)}>{currency}</span>\n {/each}\n <span class=\"num other\">{_(\"Other\")}</span>\n </p>\n </li>\n {#each account === \"\" ? tree.children : [tree] as node (node.account)}\n <TreeTableNode {node} invert={$invert_account(node.account) ? -1 : 1} />\n {/each}\n</ol>\n\n<style>\n /* For two or more operating currencies, set a slightly smaller size. */\n .wider {\n font-size: 0.9em;\n }\n</style>\n", "<script lang=\"ts\">\n import ChartSwitcher from \"../../charts/ChartSwitcher.svelte\";\n import TreeTable from \"../../tree-table/TreeTable.svelte\";\n import type { TreeReportProps } from \"./index.ts\";\n\n let { charts, trees, date_range }: TreeReportProps = $props();\n let end = $derived(date_range?.end ?? null);\n</script>\n\n<ChartSwitcher {charts} />\n\n<div class=\"row\">\n <div class=\"column\">\n {#each trees.slice(0, 1) as tree (tree.account)}\n <TreeTable {tree} {end} />\n {/each}\n </div>\n <div class=\"column\">\n {#each trees.slice(1) as tree (tree.account)}\n <TreeTable {tree} {end} />\n {/each}\n </div>\n</div>\n", "<script lang=\"ts\">\n import ChartSwitcher from \"../../charts/ChartSwitcher.svelte\";\n import TreeTable from \"../../tree-table/TreeTable.svelte\";\n import type { TreeReportProps } from \"./index.ts\";\n\n let { charts, trees, date_range }: TreeReportProps = $props();\n let end = $derived(date_range?.end ?? null);\n</script>\n\n<ChartSwitcher {charts} />\n\n<div class=\"row\">\n <div class=\"column\">\n {#each trees.slice(0, 2) as tree (tree.account)}\n <TreeTable {tree} {end} />\n {/each}\n </div>\n <div class=\"column\">\n {#each trees.slice(2) as tree (tree.account)}\n <TreeTable {tree} {end} />\n {/each}\n </div>\n</div>\n", "<script lang=\"ts\">\n import ChartSwitcher from \"../../charts/ChartSwitcher.svelte\";\n import TreeTable from \"../../tree-table/TreeTable.svelte\";\n import type { TreeReportProps } from \"./index.ts\";\n\n let { charts, trees, date_range }: TreeReportProps = $props();\n let end = $derived(date_range?.end ?? null);\n</script>\n\n<ChartSwitcher {charts} />\n\n<div class=\"row\">\n {#each trees as tree (tree.account)}\n <TreeTable {tree} {end} />\n {/each}\n</div>\n", "import {\n get_balance_sheet,\n get_income_statement,\n get_trial_balance,\n} from \"../../api/index.ts\";\nimport {\n type AccountTreeNode,\n ParsedHierarchyChart,\n} from \"../../charts/hierarchy.ts\";\nimport type { ParsedFavaChart } from \"../../charts/index.ts\";\nimport { _ } from \"../../i18n.ts\";\nimport { getURLFilters } from \"../../stores/filters.ts\";\nimport { Route } from \"../route.ts\";\nimport BalanceSheet from \"./BalanceSheet.svelte\";\nimport IncomeStatement from \"./IncomeStatement.svelte\";\nimport TrialBalance from \"./TrialBalance.svelte\";\n\nexport interface TreeReportProps {\n charts: ParsedFavaChart[];\n trees: AccountTreeNode[];\n date_range: { begin: Date; end: Date } | null;\n}\n\nexport const income_statement = new Route(\n \"income_statement\",\n IncomeStatement,\n async (url) => {\n const report = await get_income_statement(getURLFilters(url));\n const [income, _profit, expenses] = report.trees;\n if (income && expenses) {\n report.charts.push(\n ParsedHierarchyChart.from_node(income),\n ParsedHierarchyChart.from_node(expenses),\n );\n }\n return report;\n },\n () => _(\"Income Statement\"),\n);\n\nexport const balance_sheet = new Route(\n \"balance_sheet\",\n BalanceSheet,\n async (url) => {\n const report = await get_balance_sheet(getURLFilters(url));\n report.charts.push(...report.trees.map(ParsedHierarchyChart.from_node));\n return report;\n },\n () => _(\"Balance Sheet\"),\n);\n\nexport const trial_balance = new Route(\n \"trial_balance\",\n TrialBalance,\n async (url) => {\n const report = await get_trial_balance(getURLFilters(url));\n const root = report.trees[0];\n if (root) {\n report.charts.push(...root.children.map(ParsedHierarchyChart.from_node));\n }\n return report;\n },\n () => _(\"Trial Balance\"),\n);\n", "import { account_report } from \"./accounts/index.ts\";\nimport { commodities } from \"./commodities/index.ts\";\nimport { documents } from \"./documents/index.ts\";\nimport { editor } from \"./editor/index.ts\";\nimport { errors } from \"./errors/index.ts\";\nimport { events } from \"./events/index.ts\";\nimport { holdings } from \"./holdings/index.ts\";\nimport { import_report } from \"./import/index.ts\";\nimport { journal } from \"./journal/index.ts\";\nimport { options } from \"./options/index.ts\";\nimport { query } from \"./query/index.ts\";\nimport type { FrontendRoute } from \"./route.ts\";\nimport { statistics } from \"./statistics/index.ts\";\nimport {\n balance_sheet,\n income_statement,\n trial_balance,\n} from \"./tree_reports/index.ts\";\n\n/**\n * This is a list of routes to render in the frontend. For those that we render\n * in the frontend, the router will pre-load any required data with the load\n * function and then render the component. These components hence need to be\n * able to react to changed data (using idiomatic Svelte code should ensure\n * that, care mainly needs to be taken around lifecycle hooks that should run\n * if some parts of the data change)\n */\nexport const frontend_routes: FrontendRoute[] = [\n account_report,\n balance_sheet,\n commodities,\n documents,\n editor,\n errors,\n events,\n holdings,\n import_report,\n income_statement,\n journal,\n options,\n query,\n statistics,\n trial_balance,\n];\n", "import { localStorageSyncedStore } from \"../lib/store.ts\";\nimport { boolean } from \"../lib/validation.ts\";\n\n/** Whether to reload after saving an entry in the slice editor. */\nexport const reloadAfterSavingEntrySlice = localStorageSyncedStore(\n \"reload-after-saving-entry-slice\",\n boolean,\n () => true,\n);\n\n/** Whether to continue (and add another entry) after adding an entry in the AddEntry dialog. */\nexport const addEntryContinue = localStorageSyncedStore(\n \"add-entry-continue\",\n boolean,\n () => false,\n);\n", "<script lang=\"ts\">\n import { save_entries } from \"../api/index.ts\";\n import { Balance, Note, Transaction } from \"../entries/index.ts\";\n import Entry from \"../entry-forms/Entry.svelte\";\n import { todayAsString } from \"../format.ts\";\n import { _ } from \"../i18n.ts\";\n import { router } from \"../router.ts\";\n import { addEntryContinue } from \"../stores/editor.ts\";\n import { hash } from \"../stores/url.ts\";\n import ModalBase from \"./ModalBase.svelte\";\n\n /** The entry types which have support adding in the modal. */\n const entryTypes = [\n [Transaction, _(\"Transaction\")],\n [Balance, _(\"Balance\")],\n [Note, _(\"Note\")],\n ] as const;\n\n // For the first entry to be added, use today as the default date.\n let entry: Transaction | Balance | Note = $state.raw(\n Transaction.empty(todayAsString()),\n );\n\n async function submit(event: SubmitEvent) {\n event.preventDefault();\n await save_entries([entry]);\n const added_entry_date = entry.date;\n // Reuse the date of the entry that was just added.\n // @ts-expect-error all these entries have that static method, but TS is not able to determine that\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n entry = entry.constructor.empty(added_entry_date);\n if (!$addEntryContinue) {\n router.close_overlay();\n }\n }\n\n let shown = $derived($hash === \"add-transaction\");\n</script>\n\n<ModalBase {shown} focus=\".payee input\">\n <form onsubmit={submit} class=\"flex-column\">\n <h3>\n {_(\"Add\")}\n {#each entryTypes as [Cls, displayName] (displayName)}\n <button\n type=\"button\"\n class:muted={!(entry instanceof Cls)}\n onclick={() => {\n // when switching between entry types, keep the date.\n entry = Cls.empty(entry.date);\n }}\n >\n {displayName}\n </button>\n <!-- eslint-disable-next-line svelte/no-useless-mustaches -->\n {\" \"}\n {/each}\n </h3>\n <Entry bind:entry />\n <div class=\"flex-row\">\n <span class=\"spacer\"></span>\n <label>\n <input type=\"checkbox\" bind:checked={$addEntryContinue} />\n <span>{_(\"continue\")}</span>\n </label>\n <button type=\"submit\">{_(\"Save\")}</button>\n </div>\n </form>\n</ModalBase>\n\n<style>\n h3 {\n margin: 0;\n }\n\n label span {\n margin-right: 1rem;\n }\n</style>\n", "<script lang=\"ts\">\n import { _ } from \"../i18n.ts\";\n\n interface Props {\n deleting: boolean;\n onDelete: () => void;\n }\n\n let { deleting, onDelete }: Props = $props();\n\n let buttonContent = $derived(deleting ? _(\"Deleting...\") : _(\"Delete\"));\n</script>\n\n<button type=\"button\" class=\"muted\" onclick={onDelete} title={_(\"Delete\")}>\n {buttonContent}\n</button>\n", "<script lang=\"ts\">\n import { delete_source_slice, put_source_slice } from \"../api/index.ts\";\n import { attach_editor } from \"../codemirror/dom.ts\";\n import type { CodemirrorBeancount } from \"../codemirror/types.ts\";\n import { _ } from \"../i18n.ts\";\n import { notify_err } from \"../notifications.ts\";\n import { router } from \"../router.ts\";\n import { reloadAfterSavingEntrySlice } from \"../stores/editor.ts\";\n import { currency_column, indent } from \"../stores/fava_options.ts\";\n import DeleteButton from \"./DeleteButton.svelte\";\n import SaveButton from \"./SaveButton.svelte\";\n\n interface Props {\n slice: string;\n entry_hash: string;\n sha256sum: string;\n codemirror_beancount: CodemirrorBeancount;\n }\n\n let {\n slice,\n entry_hash = $bindable(),\n sha256sum = $bindable(),\n codemirror_beancount,\n }: Props = $props();\n\n // Keep the initital slice value to check for changes.\n // svelte-ignore state_referenced_locally\n const initial_slice = slice;\n\n let currentSlice = $state(initial_slice);\n let changed = $derived(currentSlice !== initial_slice);\n\n let saving = $state(false);\n let deleting = $state(false);\n\n async function save(event?: SubmitEvent) {\n event?.preventDefault();\n saving = true;\n try {\n sha256sum = await put_source_slice({\n entry_hash,\n source: currentSlice,\n sha256sum,\n });\n if ($reloadAfterSavingEntrySlice) {\n router.reload();\n }\n router.close_overlay();\n } catch (error) {\n notify_err(error, (err) => `Saving failed: ${err.message}`);\n } finally {\n saving = false;\n }\n }\n\n async function deleteSlice() {\n deleting = true;\n try {\n await delete_source_slice({ entry_hash, sha256sum });\n entry_hash = \"\";\n if ($reloadAfterSavingEntrySlice) {\n router.reload();\n }\n router.close_overlay();\n } catch (error) {\n notify_err(error, (err) => `Deleting failed: ${err.message}`);\n } finally {\n deleting = false;\n }\n }\n\n // svelte-ignore state_referenced_locally\n const editor = codemirror_beancount.init_beancount_editor(\n initial_slice,\n (state) => {\n currentSlice = state.sliceDoc();\n },\n [\n {\n key: \"Control-s\",\n mac: \"Meta-s\",\n run: () => {\n save().catch(() => {\n // save should catch all errors itself, see above\n });\n return true;\n },\n },\n ],\n $indent,\n $currency_column,\n );\n</script>\n\n<form onsubmit={save} class=\"flex-column\">\n <div class=\"editor\" {@attach attach_editor(editor)}></div>\n <div class=\"flex-row\">\n <span class=\"spacer\"></span>\n <label>\n <input type=\"checkbox\" bind:checked={$reloadAfterSavingEntrySlice} />\n <span>{_(\"reload\")}</span>\n </label>\n <DeleteButton {deleting} onDelete={deleteSlice} />\n <SaveButton {changed} {saving} />\n </div>\n</form>\n\n<style>\n .editor {\n border: 1px solid var(--sidebar-border);\n }\n</style>\n", "<script lang=\"ts\">\n import { urlForAccount } from \"../helpers.ts\";\n import { _ } from \"../i18n.ts\";\n\n type ContextBalance = Record<string, string[]>;\n interface Props {\n balances_before: ContextBalance;\n balances_after: ContextBalance | null;\n }\n\n let { balances_before, balances_after }: Props = $props();\n\n let accounts = $derived(\n [\n ...new Set([\n ...Object.keys(balances_before),\n ...Object.keys(balances_after ?? {}),\n ]),\n ].sort(),\n );\n</script>\n\n<details>\n <summary>\n <span>{_(\"Context\")}</span>\n </summary>\n <div>\n <table>\n <thead>\n <tr>\n <th>{_(\"Account\")}</th>\n <th>{_(\"Balances before entry\")}</th>\n {#if balances_after}\n <th>{_(\"Balances after entry\")}</th>\n {/if}\n </tr>\n </thead>\n <tbody>\n {#each accounts as account (account)}\n <tr>\n <td><a href={$urlForAccount(account)}>{account}</a></td>\n <td class=\"num\">\n {#each balances_before[account] as amount (amount)}\n {amount}\n <br />\n {/each}\n </td>\n {#if balances_after}\n <td class=\"num\">\n {#each balances_after[account] as amount (amount)}\n {amount}\n <br />\n {/each}\n </td>\n {/if}\n </tr>\n {/each}\n </tbody>\n </table>\n </div>\n</details>\n", "<script lang=\"ts\">\n import type { EntryBaseAttributes } from \"../entries/index.ts\";\n import { urlForSource } from \"../helpers.ts\";\n import { _ } from \"../i18n.ts\";\n\n interface Props {\n entry: EntryBaseAttributes;\n }\n\n let { entry }: Props = $props();\n</script>\n\n<p>\n {_(\"Location\")}:\n <code>\n <a href={$urlForSource(entry.meta.filename, entry.meta.lineno)}>\n {entry.meta.filename}:{entry.meta.lineno}\n </a>\n </code>\n</p>\n\n<style>\n code {\n display: inline-block;\n max-width: 80%;\n padding: 2px 4px;\n vertical-align: top;\n }\n</style>\n", "<script lang=\"ts\">\n import { get_context, get_source_slice } from \"../api/index.ts\";\n import SliceEditor from \"../editor/SliceEditor.svelte\";\n import { _ } from \"../i18n.ts\";\n import ReportLoadError from \"../reports/ReportLoadError.svelte\";\n import { hash } from \"../stores/url.ts\";\n import EntryContextBalances from \"./EntryContextBalances.svelte\";\n import EntryContextLocation from \"./EntryContextLocation.svelte\";\n import ModalBase from \"./ModalBase.svelte\";\n\n let shown = $derived($hash.startsWith(\"context\"));\n let entry_hash = $derived(shown ? $hash.slice(8) : \"\");\n</script>\n\n<ModalBase {shown}>\n <div class=\"content\">\n {#if shown}\n {#await get_context({ entry_hash })}\n <p>Loading entry context...</p>\n {:then { entry, balances_after, balances_before }}\n <EntryContextLocation {entry} />\n {#if balances_before}\n <EntryContextBalances {balances_before} {balances_after} />\n {/if}\n {#if entry.meta.lineno !== \"0\" && !entry.meta.filename.startsWith(\"<\")}\n {#await Promise.all( [get_source_slice( { entry_hash }, ), import(\"../codemirror/beancount.ts\")], )}\n <p>Loading entry slice...</p>\n {:then [{ slice, sha256sum }, codemirror_beancount]}\n <SliceEditor\n {entry_hash}\n {slice}\n {sha256sum}\n {codemirror_beancount}\n />\n {:catch error}\n <ReportLoadError title={_(\"Context\")} {error} />\n {/await}\n {/if}\n {:catch error}\n <ReportLoadError title={_(\"Context\")} {error} />\n {/await}\n {/if}\n </div>\n</ModalBase>\n", "<!--\n @component\n On drag-and-dropping of links (to documents) or files onto an entry or an\n account, this modal overlay allows one to fill in account name and or change\n the file name.\n\n File uploads via Drag and Drop on elements with class \"droptarget\"\n and attribute \"data-account-name\".\n-->\n<script lang=\"ts\">\n import { SvelteMap } from \"svelte/reactivity\";\n\n import { put_add_document, put_attach_document } from \"../api/index.ts\";\n import AccountInput from \"../entry-forms/AccountInput.svelte\";\n import { todayAsString } from \"../format.ts\";\n import { _ } from \"../i18n.ts\";\n import { get_el } from \"../lib/dom.ts\";\n import { basename, documentHasAccount } from \"../lib/paths.ts\";\n import { notify, notify_err } from \"../notifications.ts\";\n import { router } from \"../router.ts\";\n import { documents } from \"../stores/options.ts\";\n import { is_supported_datatransfer } from \"./document-upload.ts\";\n import ModalBase from \"./ModalBase.svelte\";\n\n let account = $state(\"\");\n let files = $state<FileList | null>(null);\n let entry_date = $state<string | null>(null);\n let entry_hash = $state<string | null>(null);\n let documents_folder = $state($documents[0] ?? \"\");\n const new_file_names = new SvelteMap<File, string>();\n let shown = $derived(files != null);\n\n /**\n * Handle a dragenter event on '.droptarget'.\n *\n * We want to allow a drop if the dragged thing is either a file that could be\n * dragged from a file manager or a URL (as dragged from a document link in Fava).\n *\n * Setting the .dragover class disables pointer-events on children via CSS, so\n * that the relevant next events are received on this droptarget element.\n *\n * Alternatively, this event can be handled in other components, setting the\n * .dragover class to indicate to the other events handlers below that it is\n * a valid drop zone.\n */\n function ondragenter(event: DragEvent): void {\n if (is_supported_datatransfer(event.dataTransfer)) {\n const droptarget = get_el(event.target)?.closest(\".droptarget\");\n if (droptarget) {\n droptarget.classList.add(\"dragover\");\n event.preventDefault();\n }\n }\n }\n\n /**\n * Handle a dragover event\n *\n * If the .dragover class is present, enable it to receive drop events.\n */\n function ondragover(event: DragEvent): void {\n const dragover = get_el(event.target)?.closest(\".dragover\");\n if (dragover) {\n event.preventDefault();\n }\n }\n /**\n * On dragleave, remove the nearest `.dragover` class.\n */\n function ondragleave(event: DragEvent): void {\n const dragover = get_el(event.target)?.closest(\".dragover\");\n dragover?.classList.remove(\"dragover\");\n }\n\n /**\n * On drop, handle both files and links.\n */\n function ondrop(event: DragEvent): void {\n const dragover = get_el(event.target)?.closest(\".dragover\");\n const { dataTransfer } = event;\n // Account name that the document should be attached to.\n const target_account = dragover?.getAttribute(\"data-account-name\");\n if (dragover == null || target_account == null || dataTransfer == null) {\n return;\n }\n dragover.classList.remove(\"dragover\");\n event.preventDefault();\n\n if (dataTransfer.types.includes(\"Files\")) {\n // Files are being dropped.\n account = target_account;\n entry_date = dragover.getAttribute(\"data-entry-date\");\n entry_hash = dragover.getAttribute(\"data-entry-hash\");\n files = dataTransfer.files;\n } else if (dataTransfer.types.includes(\"text/uri-list\")) {\n // Links are being dropped\n const url = dataTransfer.getData(\"URL\");\n // Try to extract the filename from the URL.\n let filename = new URL(url).searchParams.get(\"filename\");\n const entry_hash = dragover.getAttribute(\"data-entry-hash\");\n if (filename != null && entry_hash != null) {\n if (documentHasAccount(filename, target_account)) {\n filename = basename(filename);\n }\n put_attach_document({ filename, entry_hash }).then(\n notify,\n (error: unknown) => {\n notify_err(\n error,\n (e) => `Adding document metadata failed: ${e.message}`,\n );\n },\n );\n }\n }\n }\n\n function closeHandler() {\n account = \"\";\n entry_date = null;\n entry_hash = null;\n files = null;\n new_file_names.clear();\n }\n\n function get_name(file: File): string {\n const new_file_name = new_file_names.get(file);\n if (new_file_name != null) {\n return new_file_name;\n }\n return /^\\d{4}-\\d{2}-\\d{2}/.test(file.name)\n ? file.name\n : `${entry_date ?? todayAsString()} ${file.name}`;\n }\n\n async function onsubmit(event: SubmitEvent) {\n if (files == null) {\n return;\n }\n event.preventDefault();\n await Promise.all(\n Array.from(files).map(async (file) => {\n const formData = new FormData();\n formData.set(\"account\", account);\n if (entry_hash != null) {\n formData.set(\"hash\", entry_hash);\n }\n formData.set(\"folder\", documents_folder);\n const name = get_name(file);\n formData.set(\"file\", file, name);\n return put_add_document(formData).then(notify, (error: unknown) => {\n notify_err(\n error,\n (err) => `Uploading ${name} failed: ${err.message}`,\n );\n });\n }),\n );\n closeHandler();\n router.reload();\n }\n</script>\n\n<svelte:document {ondragenter} {ondragover} {ondragleave} {ondrop} />\n<ModalBase {shown} {closeHandler}>\n <form {onsubmit}>\n <h3>{_(\"Upload file(s)\")}:</h3>\n <label>\n <span>{_(\"Files\")}:</span>\n <input type=\"file\" multiple bind:files />\n </label>\n {#each files as file (file)}\n <input\n class=\"file\"\n bind:value={\n () => get_name(file),\n (new_file_name: string) => {\n new_file_names.set(file, new_file_name);\n }\n }\n />\n {/each}\n <label>\n <span>{_(\"Documents folder\")}:</span>\n <select bind:value={documents_folder}>\n {#each $documents as folder (folder)}\n <option>{folder}</option>\n {/each}\n </select>\n </label>\n <label>\n <span>{_(\"Account\")}:</span>\n <AccountInput bind:value={account} required />\n </label>\n <button type=\"submit\">{_(\"Upload\")}</button>\n </form>\n</ModalBase>\n\n<style>\n input.file {\n width: 100%;\n margin-bottom: 0.5rem;\n }\n\n label {\n display: flex;\n align-items: center;\n margin-bottom: 0.5rem;\n\n > span:first-child {\n flex-basis: 10rem;\n }\n\n > :global(span):last-child {\n flex: 1;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import { urlFor } from \"../helpers.ts\";\n import { _ } from \"../i18n.ts\";\n import { hash } from \"../stores/url.ts\";\n import ModalBase from \"./ModalBase.svelte\";\n\n let shown = $derived($hash === \"export\");\n</script>\n\n<ModalBase {shown}>\n {#if shown}\n <div>\n <h3>{_(\"Export\")}:</h3>\n <a href={$urlFor(\"download-journal\")} data-remote>\n {_(\"Download currently filtered entries as a Beancount file\")}\n </a>\n </div>\n {/if}\n</ModalBase>\n", "<script lang=\"ts\">\n import AddEntry from \"./AddEntry.svelte\";\n import Context from \"./Context.svelte\";\n import DocumentUpload from \"./DocumentUpload.svelte\";\n import Export from \"./Export.svelte\";\n</script>\n\n<AddEntry />\n<Context />\n<DocumentUpload />\n<Export />\n", "<script lang=\"ts\">\n import AutocompleteInput from \"../AutocompleteInput.svelte\";\n import { urlForAccount } from \"../helpers.ts\";\n import { _ } from \"../i18n.ts\";\n import { router } from \"../router.ts\";\n import { accounts } from \"../stores/index.ts\";\n\n let value = $state(\"\");\n\n function select(el: HTMLInputElement) {\n if (value) {\n router.navigate($urlForAccount(value));\n el.blur();\n value = \"\";\n }\n }\n</script>\n\n<li>\n <AutocompleteInput\n bind:value\n placeholder={_(\"Go to account\")}\n suggestions={$accounts}\n key=\"g a\"\n onSelect={select}\n onEnter={select}\n />\n</li>\n\n<style>\n li {\n --input-border: none;\n --input-padding: 0.25em 0.5em 0.25em 1em;\n --autocomplete-list-position: fixed;\n }\n</style>\n", "<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n\n import { urlFor } from \"../helpers.ts\";\n import type { KeySpec } from \"../keyboard-shortcuts.ts\";\n import { keyboardShortcut } from \"../keyboard-shortcuts.ts\";\n import { pathname } from \"../stores/url.ts\";\n\n interface Props {\n /** Report to generate the URL for. */\n report: string;\n /** Name to display for this link. */\n name: string;\n /** Key combination for the link. */\n key?: KeySpec;\n /** Whether this is a remote link (for which we do not intercept clicks). */\n remote?: true;\n /** Show a bubble with a number */\n bubble?: [number, \"error\" | \"info\"];\n children?: Snippet;\n }\n\n let { report, name, key, remote, bubble, children }: Props = $props();\n\n let href = $derived(remote ? report : $urlFor(`${report}/`));\n let selected = $derived(remote ? false : href.includes($pathname));\n</script>\n\n<li>\n <a class:selected {href} {@attach keyboardShortcut(key)} data-remote={remote}>\n {name}\n {#if bubble && bubble[0] > 0}\n <span class=\"bubble\" class:error={bubble[1] === \"error\"}>\n {bubble[0]}\n </span>\n {/if}\n </a>\n {@render children?.()}\n</li>\n\n<style>\n a {\n display: block;\n padding: 0.25em 0.5em 0.25em 1em;\n color: inherit;\n }\n\n a.selected,\n a:hover {\n color: var(--sidebar-hover-color);\n background-color: var(--sidebar-border);\n }\n\n li {\n display: flex;\n flex-wrap: wrap;\n }\n\n li:last-child {\n margin-bottom: 0;\n border: none;\n }\n\n li a:first-child {\n flex: 1;\n }\n\n .bubble {\n float: right;\n padding: 0 8px;\n font-size: 0.9em;\n color: var(--sidebar-color);\n background-color: var(--sidebar-border);\n border-radius: 12px;\n }\n\n .error.bubble {\n color: white;\n background-color: var(--error);\n }\n</style>\n", "<script lang=\"ts\">\n import { urlFor } from \"../helpers.ts\";\n import { _ } from \"../i18n.ts\";\n import { keyboardShortcut } from \"../keyboard-shortcuts.ts\";\n import { errors, extensions, ledgerData } from \"../stores/index.ts\";\n import AccountSelector from \"./AccountSelector.svelte\";\n import Link from \"./SidebarLink.svelte\";\n\n const truncate = (s: string) => (s.length < 25 ? s : `${s.slice(25)}…`);\n\n let user_queries = $derived($ledgerData.user_queries);\n let upcoming_events_count = $derived($ledgerData.upcoming_events_count);\n let sidebar_links = $derived($ledgerData.sidebar_links);\n let extension_reports = $derived(\n $extensions.filter((e) => e.report_title != null),\n );\n</script>\n\n{#if sidebar_links.length}\n <ul class=\"navigation\">\n {#each sidebar_links as [label, link] (link)}\n <Link report={link} name={label} remote />\n {/each}\n </ul>\n{/if}\n<ul class=\"navigation\">\n <Link report=\"income_statement\" name={_(\"Income Statement\")} key=\"g i\" />\n <Link report=\"balance_sheet\" name={_(\"Balance Sheet\")} key=\"g b\" />\n <Link report=\"trial_balance\" name={_(\"Trial Balance\")} key=\"g t\" />\n <Link report=\"journal\" name={_(\"Journal\")} key=\"g j\" />\n <Link report=\"query\" name={_(\"Query\")} key=\"g q\">\n {#if user_queries.length}\n <ul class=\"submenu\">\n {#each user_queries as { query_string, name } (query_string)}\n <li>\n <a href={$urlFor(\"query/\", { query_string })}>{truncate(name)}</a>\n </li>\n {/each}\n </ul>\n {/if}\n </Link>\n <AccountSelector />\n</ul>\n<ul class=\"navigation\">\n <Link report=\"holdings\" name={_(\"Holdings\")} key=\"g h\" />\n <Link report=\"commodities\" name={_(\"Commodities\")} key=\"g c\" />\n <Link report=\"documents\" name={_(\"Documents\")} key=\"g d\" />\n <Link\n report=\"events\"\n name={_(\"Events\")}\n key=\"g E\"\n bubble={[upcoming_events_count, \"info\"]}\n />\n <Link report=\"statistics\" name={_(\"Statistics\")} key=\"g s\" />\n</ul>\n<ul class=\"navigation\">\n <Link report=\"editor\" name={_(\"Editor\")} key=\"g e\">\n <a\n href=\"#add-transaction\"\n class=\"secondary add-transaction\"\n title={_(\"Add Journal Entry\")}\n {@attach keyboardShortcut(\"n\")}>+</a\n >\n </Link>\n {#if $errors.length > 0}\n <Link\n report=\"errors\"\n name={_(\"Errors\")}\n bubble={[$errors.length, \"error\"]}\n />\n {/if}\n <Link report=\"import\" name={_(\"Import\")} key=\"g n\">\n <a href=\"#export\" class=\"secondary\" title={_(\"Export\")}>⬇</a>\n </Link>\n <Link report=\"options\" name={_(\"Options\")} key=\"g o\" />\n <Link report=\"help\" name={_(\"Help\")} key=\"g H\" />\n</ul>\n{#if extension_reports.length}\n <ul class=\"navigation\">\n {#each extension_reports as ext (ext.name)}\n <Link report={`extension/${ext.name}`} name={ext.report_title ?? \"\"} />\n {/each}\n </ul>\n{/if}\n\n<style>\n .navigation {\n padding-bottom: 0.5rem;\n margin: 0;\n }\n\n .navigation + .navigation {\n padding-top: 0.5rem;\n border-top: 1px solid var(--sidebar-border);\n }\n\n a {\n display: block;\n padding: 0.25em 0.5em 0.25em 1em;\n color: inherit;\n }\n\n a:hover {\n color: var(--sidebar-hover-color);\n background-color: var(--sidebar-border);\n }\n\n .secondary {\n width: 30px;\n padding: 3px 9px;\n line-height: 22px;\n color: inherit;\n background-color: var(--sidebar-background);\n }\n\n .add-transaction {\n font-size: 23px;\n }\n\n .submenu {\n width: 100%;\n margin: 0 0 0.5em;\n }\n\n .submenu a {\n width: 100%;\n padding-left: 35px;\n }\n\n .submenu li {\n font-size: 0.9em;\n }\n</style>\n", "<script lang=\"ts\">\n import AsideContents from \"./AsideContents.svelte\";\n\n /** Whether the sidebar is currently shown. */\n let active = $state(false);\n const toggle = () => {\n active = !active;\n };\n</script>\n\n{#if active}\n <div class=\"overlay\" onclick={toggle} aria-hidden=\"true\"></div>\n{/if}\n<div class:active class=\"aside-buttons\">\n <button type=\"button\" onclick={toggle}>☰</button>\n <a class=\"button\" href=\"#add-transaction\">+</a>\n</div>\n<aside class:active>\n <AsideContents />\n</aside>\n\n<style>\n aside {\n grid-area: aside;\n padding-top: 0.5rem;\n margin: 0;\n overflow-y: auto;\n color: var(--sidebar-color);\n background-color: var(--sidebar-background);\n border-right: 1px solid var(--sidebar-border);\n }\n\n .aside-buttons {\n display: none;\n }\n\n @media (width <= 767px) {\n :root {\n --aside-width: 200px;\n }\n\n aside {\n position: fixed;\n top: 0;\n bottom: 0;\n z-index: var(--z-index-floating-ui);\n width: var(--aside-width);\n margin-left: calc(-1 * var(--aside-width));\n transition: var(--transitions);\n }\n\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--z-index-floating-ui);\n cursor: pointer;\n background: var(--overlay-wrapper-background);\n transition: var(--transitions);\n }\n\n aside.active {\n margin-left: 0;\n }\n\n .aside-buttons {\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--z-index-floating-ui);\n display: flex;\n flex-direction: column;\n transition: var(--transitions);\n }\n\n .active.aside-buttons {\n left: var(--aside-width);\n }\n\n .aside-buttons > * {\n width: 42px;\n height: 42px;\n color: var(--mobile-button-text);\n text-align: center;\n background-color: var(--sidebar-background);\n border: 1px solid var(--sidebar-border);\n }\n\n .aside-buttons a {\n font-size: 28px;\n }\n }\n\n @media print {\n aside,\n .aside-buttons {\n display: none;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import AutocompleteInput from \"../AutocompleteInput.svelte\";\n import { _ } from \"../i18n.ts\";\n import { escape_for_regex } from \"../lib/regex.ts\";\n import { router, set_query_param } from \"../router.ts\";\n import {\n account_filter,\n fql_filter,\n time_filter,\n } from \"../stores/filters.ts\";\n import { accounts, links, payees, tags, years } from \"../stores/index.ts\";\n\n let fql_filter_suggestions = $derived([\n ...$tags.map((tag) => `#${tag}`),\n ...$links.map((link) => `^${link}`),\n ...$payees.map((payee) => `payee:\"${escape_for_regex(payee)}\"`),\n ]);\n\n function valueExtractor(value: string, input: HTMLInputElement) {\n const match = /\\S*$/.exec(\n value.slice(0, input.selectionStart ?? undefined),\n );\n return match?.[0] ?? value;\n }\n function valueSelector(value: string, input: HTMLInputElement) {\n const selectionStart = input.selectionStart ?? 0;\n const match = /\\S*$/.exec(input.value.slice(0, selectionStart));\n const matchLength = match?.[0]?.length;\n return matchLength !== undefined\n ? `${input.value.slice(\n 0,\n selectionStart - matchLength,\n )}${value}${input.value.slice(selectionStart)}`\n : value;\n }\n\n let account_filter_value = $state(\"\");\n let fql_filter_value = $state(\"\");\n let time_filter_value = $state(\"\");\n account_filter.subscribe((v) => {\n account_filter_value = v;\n });\n fql_filter.subscribe((v) => {\n fql_filter_value = v;\n });\n time_filter.subscribe((v) => {\n time_filter_value = v;\n });\n\n /** Set the target we want to navigate to to avoid duplicate navigation. */\n let target: URL | null = null;\n\n /**\n * Submit the filter form.\n *\n * This is called on all the three possible events (blur, select, enter)\n * and also on the form submit. Having the listener on:enter would\n * theoretically be unnecessary (as the form would also be submitted) but\n * it seems to work around a Safari bug, see #809 and #1528.\n */\n function submit() {\n const url = new URL(router.current);\n set_query_param(url, \"account\", account_filter_value);\n set_query_param(url, \"filter\", fql_filter_value);\n set_query_param(url, \"time\", time_filter_value);\n if (url.href !== router.current.href) {\n target = url;\n setTimeout(() => {\n if (target) {\n router.navigate(target);\n target = null;\n }\n });\n }\n }\n</script>\n\n<form\n class=\"flex-row\"\n onsubmit={(ev) => {\n ev.preventDefault();\n submit();\n }}\n>\n <AutocompleteInput\n bind:value={time_filter_value}\n placeholder={_(\"Time\")}\n suggestions={$years}\n key=\"f t\"\n clearButton={true}\n setSize={true}\n onBlur={submit}\n onSelect={submit}\n onEnter={submit}\n />\n <AutocompleteInput\n bind:value={account_filter_value}\n placeholder={_(\"Account\")}\n suggestions={$accounts}\n key=\"f a\"\n clearButton={true}\n setSize={true}\n onBlur={submit}\n onSelect={submit}\n onEnter={submit}\n />\n <AutocompleteInput\n bind:value={fql_filter_value}\n placeholder={_(\"Filter by tag, payee, ...\")}\n suggestions={fql_filter_suggestions}\n key=\"f f\"\n clearButton={true}\n setSize={true}\n {valueExtractor}\n {valueSelector}\n onBlur={submit}\n onSelect={submit}\n onEnter={submit}\n />\n <!-- svelte-ignore a11y_consider_explicit_label -->\n <button type=\"submit\"></button>\n</form>\n\n<style>\n form {\n color: var(--text-color);\n\n --placeholder-color: var(--header-placeholder-color);\n --placeholder-background: var(--header-placeholder-background);\n --input-padding: 8px 25px 8px 10px;\n }\n\n form > :global(span) {\n max-width: 18rem;\n }\n\n form :global(input) {\n outline: none;\n background-color: var(--background);\n border: 0;\n }\n\n form :global([type=\"text\"]:focus) {\n background-color: var(--background);\n }\n\n [type=\"submit\"] {\n display: none;\n }\n\n @media print {\n form {\n --input-padding: 8px 10px;\n }\n\n form :global(input):placeholder-shown {\n display: none;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import { is_loading } from \"../router.ts\";\n</script>\n\n<svg\n class:loading={$is_loading}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 100 100\"\n>\n <rect width=\"100\" height=\"100\" rx=\"20\" fill=\"#0a0a0a\" />\n <text\n x=\"50\"\n y=\"68\"\n font-size=\"50\"\n font-family=\"system-ui\"\n font-weight=\"bold\"\n text-anchor=\"middle\"\n >\n <tspan fill=\"#f97316\">r</tspan><tspan fill=\"white\">f</tspan>\n </text>\n</svg>\n\n<style>\n @keyframes spinner {\n to {\n transform: rotate(360deg);\n }\n }\n\n .loading {\n padding: 0;\n border-top: 2px solid var(--header-color);\n border-radius: 50%;\n animation: spinner 1s linear infinite;\n }\n\n .loading rect,\n .loading text {\n opacity: 0;\n }\n\n @media print {\n svg {\n display: none;\n }\n }\n</style>\n", "<script lang=\"ts\">\n import { day } from \"../format.ts\";\n import { urlForAccount } from \"../helpers.ts\";\n import { ancestors, leaf } from \"../lib/account.ts\";\n import { account_details } from \"../stores/index.ts\";\n import AccountIndicator from \"./AccountIndicator.svelte\";\n\n interface Props {\n account: string;\n }\n\n let { account }: Props = $props();\n\n let parts = $derived(ancestors(account));\n let details = $derived($account_details[account]);\n let last = $derived(details?.last_entry);\n</script>\n\n<span class=\"droptarget\" data-account-name={account}>\n {#each parts as name, index (index)}\n <a href={$urlForAccount(name)} title={name}>{leaf(name)}</a\n >{#if index < parts.length - 1}:{/if}\n {/each}\n <AccountIndicator {account} />\n {#if last}\n <span class=\"last-activity\">\n (Last entry: <a href=\"#context-{last.entry_hash}\">{day(last.date)}</a>)\n </span>\n {/if}\n</span>\n\n<style>\n a {\n color: unset;\n }\n\n .droptarget {\n padding: 0.6em;\n margin-left: -0.6em;\n }\n\n .last-activity {\n display: inline-block;\n margin-left: 10px;\n font-size: 12px;\n font-weight: normal;\n opacity: 0.8;\n }\n</style>\n", "<script lang=\"ts\">\n import AccountPageTitle from \"./AccountPageTitle.svelte\";\n import { page_title } from \"./page-title.ts\";\n\n let { title, type } = $derived($page_title);\n\n let is_account = $derived(type === \"account\");\n</script>\n\n<strong>\n {#if !is_account}\n {title}\n {:else}\n <AccountPageTitle account={title} />\n {/if}\n</strong>\n\n<style>\n strong::before {\n margin: 0 10px;\n font-weight: normal;\n content: \"›\";\n opacity: 0.5;\n }\n</style>\n", "<script lang=\"ts\">\n import { keyboardShortcut } from \"../keyboard-shortcuts.ts\";\n import { router } from \"../router.ts\";\n import { ledgerData } from \"../stores/index.ts\";\n import { ledger_title } from \"../stores/options.ts\";\n import FilterForm from \"./FilterForm.svelte\";\n import HeaderIcon from \"./HeaderIcon.svelte\";\n import { has_changes } from \"./page-title.ts\";\n import PageTitle from \"./PageTitle.svelte\";\n\n let other_ledgers = $derived($ledgerData.other_ledgers);\n let has_dropdown = $derived(other_ledgers.length);\n</script>\n\n<header>\n <HeaderIcon />\n <h1>\n {$ledger_title}{#if has_dropdown}&nbsp;▾{/if}<PageTitle />\n {#if has_dropdown}\n <div class=\"beancount-files\">\n <ul>\n {#each other_ledgers as [name, url] (url)}\n <li>\n <a href={url} data-remote>{name}</a>\n </li>\n {/each}\n </ul>\n </div>\n {/if}\n </h1>\n <button\n type=\"button\"\n hidden={!$has_changes}\n class=\"reload-page\"\n {@attach keyboardShortcut(\"r\")}\n onclick={router.reload}\n >\n &#8635;\n </button>\n <span class=\"spacer\"></span>\n <FilterForm />\n</header>\n\n<style>\n .reload-page {\n color: var(--dark-gray);\n background-color: var(--warning);\n }\n\n h1 {\n display: inline-block;\n padding: 0.5rem;\n margin: 0;\n overflow: hidden;\n font-size: 16px;\n font-weight: normal;\n }\n\n a:hover,\n a:link,\n a:visited {\n color: inherit;\n }\n\n .beancount-files {\n position: absolute;\n z-index: var(--z-index-floating-ui);\n display: none;\n width: 20em;\n margin-top: 0.25em;\n color: var(--link-color);\n background-color: var(--background);\n border: 1px solid var(--border);\n box-shadow: var(--box-shadow-dropdown);\n }\n\n .beancount-files a {\n display: block;\n padding: 8px 12px 8px 28px;\n cursor: pointer;\n }\n\n h1:hover .beancount-files {\n display: block;\n }\n\n .beancount-files ul {\n max-height: 400px;\n margin-bottom: 0;\n overflow-y: auto;\n }\n\n .beancount-files a:hover {\n color: var(--background);\n background-color: var(--link-color);\n }\n</style>\n", "<script lang=\"ts\">\n import AsideWithButton from \"./AsideWithButton.svelte\";\n import Header from \"./Header.svelte\";\n</script>\n\n<Header />\n<AsideWithButton />\n", "/**\n * This script initialises the AsideWithButton.svelte component.\n */\n\nimport { mount } from \"svelte\";\nimport { get as store_get } from \"svelte/store\";\n\nimport Modals from \"../modals/Modals.svelte\";\nimport { ledger_title } from \"../stores/options.ts\";\nimport HeaderAndAside from \"./HeaderAndAside.svelte\";\nimport { page_title } from \"./page-title.ts\";\n\nexport function initSidebar(): void {\n page_title.subscribe(({ title }) => {\n document.title = `${title} - ${store_get(ledger_title)}`;\n });\n\n const anchor = document.querySelector(\"article\");\n mount(\n HeaderAndAside,\n anchor ? { target: document.body, anchor } : { target: document.body },\n );\n\n mount(Modals, {\n target: document.body,\n });\n}\n", "import { get_direction, sortElements } from \"./index.ts\";\n\nexport class SortableTable extends HTMLTableElement {\n constructor() {\n super();\n const body = this.tBodies.item(0);\n if (!this.tHead || !body) {\n return;\n }\n const headers = [...this.tHead.querySelectorAll(\"th[data-sort]\")];\n\n headers.forEach((header, index) => {\n header.addEventListener(\"click\", () => {\n const order =\n header.getAttribute(\"data-order\") === \"asc\" ? \"desc\" : \"asc\";\n const type = header.getAttribute(\"data-sort\");\n\n // update sort order\n headers.forEach((e) => {\n e.removeAttribute(\"data-order\");\n });\n header.setAttribute(\"data-order\", order);\n\n sortElements<HTMLTableRowElement>(\n body,\n [...body.querySelectorAll(\"tr\")],\n (tr) => tr.cells.item(index),\n get_direction(order),\n type,\n );\n });\n });\n }\n}\n", "/**\n * A custom element that will render a Svelte component.\n */\n\nimport { type Component, mount, unmount } from \"svelte\";\n\nimport ChartSwitcher from \"./charts/ChartSwitcher.svelte\";\nimport {\n account_hierarchy_validator,\n type AccountTreeNode,\n} from \"./charts/hierarchy.ts\";\nimport type { ParsedFavaChart } from \"./charts/index.ts\";\nimport { chart_validator } from \"./charts/index.ts\";\nimport { domHelpers } from \"./charts/tooltip.ts\";\nimport type { Result } from \"./lib/result.ts\";\nimport { log_error } from \"./log.ts\";\nimport type { QueryResultTable } from \"./reports/query/query_table.ts\";\nimport { query_table_validator } from \"./reports/query/query_table.ts\";\nimport QueryTable from \"./reports/query/QueryTable.svelte\";\nimport TreeTable from \"./tree-table/TreeTable.svelte\";\n\n/** This class pairs the components and their validation functions to use them in a type-safe way. */\nclass SvelteCustomElementComponent<T extends Record<string, unknown>> {\n readonly type: string;\n private readonly Component: Component<T>;\n private readonly validate: (data: unknown) => Result<T, Error>;\n\n constructor(\n type: string,\n Component: Component<T>,\n validate: (data: unknown) => Result<T, Error>,\n ) {\n this.type = type;\n this.Component = Component;\n this.validate = validate;\n }\n\n /** Load data and render the component for this route to the given target. */\n render(target: SvelteCustomElement, data: unknown): (() => void) | undefined {\n const res = this.validate(data);\n if (res.is_err) {\n target.setError(\n `Rendering component '${this.type}' failed due to invalid JSON data:`,\n domHelpers.br(),\n res.error.message,\n );\n log_error(res.error);\n log_error(\"Invalid JSON for component:\", data);\n return undefined;\n }\n const instance = mount(this.Component, { target, props: res.value });\n return () => {\n void unmount(instance);\n };\n }\n}\n\nconst components = [\n new SvelteCustomElementComponent<{ charts: readonly ParsedFavaChart[] }>(\n \"charts\",\n ChartSwitcher,\n (data) => chart_validator(data).map((charts) => ({ charts })),\n ),\n new SvelteCustomElementComponent<{ table: QueryResultTable }>(\n \"query-table\",\n QueryTable,\n (data) => query_table_validator(data).map((table) => ({ table })),\n ),\n new SvelteCustomElementComponent<{ tree: AccountTreeNode; end: null }>(\n \"tree-table\",\n TreeTable,\n (data) =>\n account_hierarchy_validator(data).map((tree) => ({ tree, end: null })),\n ),\n];\n\n/**\n * A custom element that represents a Svelte component.\n *\n * The tag should have a `type` attribute with one\n * of the valid values in the Map above.\n */\nexport class SvelteCustomElement extends HTMLElement {\n private destroy?: (() => void) | undefined;\n\n /** Show some error content. */\n setError(...nodes_or_strings: (Node | string)[]): void {\n this.classList.add(\"error\");\n this.replaceChildren(\"Error: \", ...nodes_or_strings);\n }\n\n connectedCallback(): void {\n if (this.destroy) {\n return;\n }\n const type = this.getAttribute(\"type\");\n if (type == null) {\n this.setError(\"Component is missing type\");\n return;\n }\n const comp = components.find((t) => t.type === type);\n if (!comp) {\n this.setError(`Unknown component type: '${type}'`);\n return;\n }\n const script = this.querySelector(\"script\");\n this.destroy = comp.render(\n this,\n script?.type === \"application/json\" ? JSON.parse(script.innerHTML) : null,\n );\n }\n\n disconnectedCallback(): void {\n try {\n this.destroy?.();\n this.destroy = undefined;\n } catch {\n // pass\n }\n }\n}\n", "/**\n * Account trees.\n *\n * This handles the toggling of accounts in the accounts trees.\n *\n * This is not used in Fava anymore but provided for extension compatibility.\n */\nexport class TreeTableCustomElement extends HTMLElement {\n constructor() {\n super();\n\n const expandAllLink = this.querySelector(\".expand-all\");\n expandAllLink?.addEventListener(\"click\", () => {\n expandAllLink.classList.add(\"hidden\");\n this.querySelectorAll(\".toggled\").forEach((el) => {\n el.classList.remove(\"toggled\");\n });\n });\n\n this.addEventListener(\"click\", (event) => {\n const { target } = event;\n if (\n !(target instanceof HTMLElement) ||\n target instanceof HTMLAnchorElement ||\n !target.closest(\"span.has-children\")\n ) {\n return;\n }\n const row = target.closest(\"li\");\n if (!row) {\n return;\n }\n const willShow = row.classList.contains(\"toggled\");\n if (event.shiftKey) {\n this.querySelectorAll(\"li\").forEach((el) => {\n el.classList.toggle(\"toggled\", !willShow);\n });\n }\n if (event.ctrlKey || event.metaKey) {\n this.querySelectorAll(\"li\").forEach((el) => {\n el.classList.toggle(\"toggled\", willShow);\n });\n }\n row.classList.toggle(\"toggled\");\n\n expandAllLink?.classList.toggle(\n \"hidden\",\n !this.querySelectorAll(\".toggled\").length,\n );\n });\n }\n}\n", "/**\n * Fava's main Javascript entry point.\n *\n * The code for Fava's UI is split into several modules that are all imported\n * below. The most interactive parts are written as Svelte components. Some\n * other functionality is written in plain Javascript and or web components\n * extending normal HTML elements.\n */\n\nimport \"../css/style.css\";\nimport \"../css/base.css\";\nimport \"../css/layout.css\";\nimport \"../css/charts.css\";\nimport \"../css/components.css\";\nimport \"../css/editor.css\";\nimport \"../css/grid.css\";\nimport \"../css/fonts.css\";\nimport \"../css/help.css\";\nimport \"../css/journal-table.css\";\nimport \"../css/notifications.css\";\nimport \"../css/tree-table.css\";\n// Polyfill for customised builtin elements in Webkit\nimport \"@ungap/custom-elements\";\n\nimport { get as store_get } from \"svelte/store\";\n\nimport { get_changed, get_errors, get_ledger_data } from \"./api/index.ts\";\nimport { ledgerDataValidator } from \"./api/validators.ts\";\nimport { CopyableText } from \"./clipboard.ts\";\nimport { BeancountTextarea } from \"./codemirror/dom.ts\";\nimport { _ } from \"./i18n.ts\";\nimport { initGlobalKeyboardShortcuts } from \"./keyboard-shortcuts.ts\";\nimport { getScriptTagValue } from \"./lib/dom.ts\";\nimport { log_error } from \"./log.ts\";\nimport { notify, notify_err } from \"./notifications.ts\";\nimport { frontend_routes } from \"./reports/routes.ts\";\nimport { router } from \"./router.ts\";\nimport { initSidebar } from \"./sidebar/index.ts\";\nimport { has_changes } from \"./sidebar/page-title.ts\";\nimport { SortableTable } from \"./sort/sortable-table.ts\";\nimport { init_color_scheme } from \"./stores/color_scheme.ts\";\nimport {\n auto_reload,\n invert_gains_losses_colors,\n} from \"./stores/fava_options.ts\";\nimport { errors, ledgerData } from \"./stores/index.ts\";\nimport { ledger_mtime, read_mtime } from \"./stores/mtime.ts\";\nimport { SvelteCustomElement } from \"./svelte-custom-elements.ts\";\nimport { TreeTableCustomElement } from \"./tree-table/tree-table-custom-element.ts\";\n\n/**\n * Define the custom elements that Fava uses.\n */\nfunction defineCustomElements() {\n customElements.define(\"beancount-textarea\", BeancountTextarea, {\n extends: \"textarea\",\n });\n customElements.define(\"copyable-text\", CopyableText);\n customElements.define(\"svelte-component\", SvelteCustomElement);\n\n // for extension compatibility (only used in _query_table.html)\n customElements.define(\"sortable-table\", SortableTable, { extends: \"table\" });\n // for extension compatibility\n customElements.define(\"tree-table\", TreeTableCustomElement);\n}\n\n/**\n * Update the ledger data and errors; Reload if automatic reloading is configured.\n */\nfunction onChanges() {\n get_ledger_data()\n .then((v) => {\n ledgerData.set(v);\n })\n .catch((e: unknown) => {\n notify_err(e, (err) => `Error fetching ledger data: ${err.message}`);\n });\n if (store_get(auto_reload) && !router.has_interrupt_handler) {\n router.reload();\n } else {\n get_errors().then((v) => {\n errors.set(v);\n }, log_error);\n notify(_(\"File change detected. Click to reload.\"), \"warning\", () => {\n router.reload();\n });\n }\n}\n\n/**\n * Check the `changed` API endpoint.\n *\n * Updates of the mtime returned by this endpoint will fire the appropriate events if some\n * file changed.\n *\n * This will be scheduled every 5 seconds.\n */\nfunction pollForChanges(): void {\n get_changed().catch(log_error);\n}\n\nfunction init(): void {\n const initial = getScriptTagValue(\"#ledger-data\", ledgerDataValidator);\n if (initial.is_ok) {\n ledgerData.set(initial.value);\n } else {\n log_error(initial.error);\n }\n read_mtime();\n\n let initial_mtime = true;\n ledger_mtime.subscribe(() => {\n if (initial_mtime) {\n initial_mtime = false;\n return;\n }\n has_changes.set(true);\n onChanges();\n });\n\n router.init(frontend_routes);\n initSidebar();\n initGlobalKeyboardShortcuts();\n defineCustomElements();\n setInterval(pollForChanges, 5000);\n\n ledgerData.subscribe((val) => {\n errors.set(val.errors);\n });\n\n init_color_scheme();\n\n invert_gains_losses_colors.subscribe(($invert) => {\n document.documentElement.classList.toggle(\"invert-gains-losses\", $invert);\n });\n}\n\ninit();\n"],
5
+ "mappings": "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",
6
+ "names": ["whenDefined", "MutationObserver", "attributeChanged", "dispatch", "_ref", "is", "err", "notify", "root", "query", "loop", "elements", "options", "drop", "flush", "parse", "matches", "notifier", "q", "attachShadow", "init", "Map", "Element", "HTMLElement", "Error", "expando", "key", "HTMLBuiltIn", "handle", "_", "$", "define", "get", "BR", "_parseShadow", "customElements", "construct", "getCE", "_handle", "_whenDefined2", "tag", "event", "text", "editor", "left", "top", "key", "event", "tickFormat", "axis", "format", "range", "text", "_", "range", "index", "range", "_", "_", "copy", "parent", "key", "format", "min", "max", "t1", "t2", "t3", "color", "rgb", "i", "constants", "number", "constants", "range", "i", "source", "_", "number", "linear", "interval", "_", "date", "number", "ticks", "day", "second", "format", "tickFormat", "_", "interval", "date", "get", "index", "accounts", "currencies", "linear", "root", "group", "$$anchor", "root_1", "root", "$$anchor", "root_1", "root", "root_1", "$$anchor", "text", "root", "linear", "root_1", "text", "$$anchor", "root_2", "root", "root_1", "$$anchor", "root_2", "text", "currencies", "root_1", "text", "$$anchor", "root_6", "parent", "leaf", "right", "bottom", "parent", "_", "parent", "next", "right", "bottom", "child", "next", "child", "_", "_", "leaf", "copy", "next", "child", "linear", "root", "root_1", "$$anchor", "root_2", "root_3", "root_5", "root_6", "root", "$$anchor", "label", "root_1", "root", "$$anchor", "root_1", "$$anchor", "LineChart", "ScatterPlot", "index", "key", "event", "root", "$$anchor", "root_1", "format", "index", "$$anchor", "root_3", "event", "get", "child", "date", "root", "root_1", "ctx", "root_2", "root_3", "root_4", "root", "root_1", "event", "root", "index", "root_1", "number", "$$anchor", "root_6", "child", "index", "root", "$$anchor", "root_1", "get", "key", "set", "set", "root", "$$anchor", "root_1", "format", "root", "event", "hash", "index", "root_1", "root_3", "root_5", "$$anchor", "pathname", "journal", "root_1", "root_2", "root", "$$anchor", "date", "root_2", "$$anchor", "root_1", "text", "match", "result", "index", "event", "keydown", "root", "root_1", "root_2", "$$anchor", "root_3", "$$item", "i", "text", "root_6", "filename", "index", "init", "parent", "root", "child", "keydown", "root_1", "event", "filename", "root_1", "root_2", "root_3", "root_4", "child", "$$anchor", "root_5", "editor", "root", "root_1", "$$anchor", "root_6", "root_8", "root", "$$anchor", "root_2", "move", "event", "$$anchor", "root_2", "documents", "root", "root", "root", "event", "text", "root", "event", "root_1", "$$anchor", "index", "sources", "root", "basename", "parent", "_", "child", "event", "get", "parent", "is_directory", "event", "root", "root_1", "root_2", "root_3", "root_4", "child", "$$anchor", "filename", "root", "$$anchor", "source", "right", "root_15", "editor", "err", "root", "$$anchor", "event", "source", "text", "index", "root_1", "$$anchor", "source", "root_3", "format", "$$item", "root_8", "root_9", "errors", "root", "$$anchor", "event", "root_2", "date", "$$anchor", "root_2", "format", "root_3", "root", "text", "root", "$$anchor", "root_2", "index", "root_4", "root_6", "root_8", "root_10", "root_13", "root_16", "root_18", "root_22", "root_25", "number", "root_2", "root_4", "root_6", "root_8", "to_report_type", "key", "key", "sources", "key", "root", "$$anchor", "index", "key", "root_1", "event", "root_2", "root", "date", "number", "root", "date", "comment", "event", "err", "root", "label", "payee", "$$anchor", "index", "posting", "Posting", "date", "Balance", "$$anchor", "Note", "Transaction", "event", "root_1", "label", "entry", "root_5", "$$anchor", "root_2", "root_4", "event", "event", "err", "root", "move", "filename", "key", "root_1", "root_3", "root_5", "root_6", "date", "basename", "get", "journal", "root", "$$anchor", "key", "root_2", "options", "set", "query", "second", "group", "root", "date", "editor", "root", "root", "$$anchor", "root_4", "root_7", "editor", "state", "root", "event", "query", "is_open", "$$anchor", "root", "$$anchor", "root_2", "accounts", "root", "$$anchor", "root_3", "number", "$$item", "text", "root", "$$anchor", "num", "root_1", "root_6", "child", "root", "$$anchor", "root_1", "$$anchor", "$$anchor", "$$anchor", "root", "documents", "errors", "options", "event", "root_1", "$$anchor", "label", "root", "event", "err", "editor", "state", "root", "label", "accounts", "root", "root_1", "$$anchor", "root_2", "root_4", "root", "text", "root_1", "root_10", "entry", "balances_after", "balances_before", "$$anchor", "root_8", "slice", "sha256sum", "codemirror_beancount", "$$source", "$$value", "event", "filename", "entry_hash", "err", "root_1", "label", "$$anchor", "root_2", "root_3", "root_2", "root", "root", "root_1", "root_1", "label", "$$anchor", "root_4", "root_5", "$0", "root_6", "root_8", "root_9", "ext", "toggle", "root_1", "tag", "root", "root", "root", "$$anchor", "index", "root_3", "root", "$$anchor", "root", "root_2", "$$anchor", "root_3", "get", "index", "event", "err", "get"]
7
+ }