@hub-kit/core 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +125 -0
  2. package/cli/hub-kit.mjs +112 -0
  3. package/dist/adapters/bank-reconciliation.d.ts +100 -0
  4. package/dist/adapters/bank-reconciliation.js +1 -0
  5. package/dist/adapters/bank-sync-log.d.ts +46 -0
  6. package/dist/adapters/bank-sync-log.js +1 -0
  7. package/dist/adapters/category-rules.d.ts +94 -0
  8. package/dist/adapters/category-rules.js +1 -0
  9. package/dist/adapters/companies.d.ts +85 -0
  10. package/dist/adapters/companies.js +3 -0
  11. package/dist/adapters/customers.d.ts +71 -0
  12. package/dist/adapters/customers.js +1 -0
  13. package/dist/adapters/exclusion-rules.d.ts +34 -0
  14. package/dist/adapters/exclusion-rules.js +15 -0
  15. package/dist/adapters/file-naming.d.ts +36 -0
  16. package/dist/adapters/file-naming.js +1 -0
  17. package/dist/adapters/index.d.ts +24 -0
  18. package/dist/adapters/index.js +1 -0
  19. package/dist/adapters/invoice-detail.d.ts +126 -0
  20. package/dist/adapters/invoice-detail.js +1 -0
  21. package/dist/adapters/invoice-list.d.ts +63 -0
  22. package/dist/adapters/invoice-list.js +1 -0
  23. package/dist/adapters/invoice-upload.d.ts +26 -0
  24. package/dist/adapters/invoice-upload.js +1 -0
  25. package/dist/adapters/manual-bookings.d.ts +56 -0
  26. package/dist/adapters/manual-bookings.js +1 -0
  27. package/dist/adapters/notifications.d.ts +31 -0
  28. package/dist/adapters/notifications.js +1 -0
  29. package/dist/adapters/open-items.d.ts +42 -0
  30. package/dist/adapters/open-items.js +1 -0
  31. package/dist/adapters/opos-whitelist.d.ts +38 -0
  32. package/dist/adapters/opos-whitelist.js +1 -0
  33. package/dist/adapters/outgoing-invoices.d.ts +32 -0
  34. package/dist/adapters/outgoing-invoices.js +1 -0
  35. package/dist/adapters/overview.d.ts +68 -0
  36. package/dist/adapters/overview.js +1 -0
  37. package/dist/adapters/processing-log.d.ts +48 -0
  38. package/dist/adapters/processing-log.js +1 -0
  39. package/dist/adapters/properties.d.ts +87 -0
  40. package/dist/adapters/properties.js +1 -0
  41. package/dist/adapters/supplier-detail.d.ts +64 -0
  42. package/dist/adapters/supplier-detail.js +1 -0
  43. package/dist/adapters/supplier-list.d.ts +21 -0
  44. package/dist/adapters/supplier-list.js +1 -0
  45. package/dist/adapters/team.d.ts +79 -0
  46. package/dist/adapters/team.js +1 -0
  47. package/dist/adapters/trash.d.ts +26 -0
  48. package/dist/adapters/trash.js +1 -0
  49. package/dist/adapters/vat-rules.d.ts +83 -0
  50. package/dist/adapters/vat-rules.js +1 -0
  51. package/dist/components/access/index.d.ts +3 -0
  52. package/dist/components/access/index.js +3 -0
  53. package/dist/components/access/permission-checklist.d.ts +13 -0
  54. package/dist/components/access/permission-checklist.js +19 -0
  55. package/dist/components/access/permission-matrix.d.ts +12 -0
  56. package/dist/components/access/permission-matrix.js +18 -0
  57. package/dist/components/access/types.d.ts +15 -0
  58. package/dist/components/access/types.js +1 -0
  59. package/dist/components/dashboard/date-range-calendar.d.ts +19 -0
  60. package/dist/components/dashboard/date-range-calendar.js +97 -0
  61. package/dist/components/dashboard/index.d.ts +23 -0
  62. package/dist/components/dashboard/index.js +14 -0
  63. package/dist/components/dashboard/kpi-card.d.ts +13 -0
  64. package/dist/components/dashboard/kpi-card.js +7 -0
  65. package/dist/components/dashboard/money-cards-row.d.ts +29 -0
  66. package/dist/components/dashboard/money-cards-row.js +28 -0
  67. package/dist/components/dashboard/money-trend-chart.d.ts +13 -0
  68. package/dist/components/dashboard/money-trend-chart.js +16 -0
  69. package/dist/components/dashboard/panel.d.ts +9 -0
  70. package/dist/components/dashboard/panel.js +5 -0
  71. package/dist/components/dashboard/period-picker.d.ts +25 -0
  72. package/dist/components/dashboard/period-picker.js +82 -0
  73. package/dist/components/dashboard/periods.d.ts +13 -0
  74. package/dist/components/dashboard/periods.js +63 -0
  75. package/dist/components/dashboard/pipeline-stages-panel.d.ts +14 -0
  76. package/dist/components/dashboard/pipeline-stages-panel.js +12 -0
  77. package/dist/components/dashboard/processing-summary-panel.d.ts +34 -0
  78. package/dist/components/dashboard/processing-summary-panel.js +11 -0
  79. package/dist/components/dashboard/ranked-bars.d.ts +15 -0
  80. package/dist/components/dashboard/ranked-bars.js +16 -0
  81. package/dist/components/dashboard/ranked-list-panel.d.ts +14 -0
  82. package/dist/components/dashboard/ranked-list-panel.js +9 -0
  83. package/dist/components/dashboard/stage-tiles.d.ts +15 -0
  84. package/dist/components/dashboard/stage-tiles.js +6 -0
  85. package/dist/components/dashboard/stat-rows-panel.d.ts +25 -0
  86. package/dist/components/dashboard/stat-rows-panel.js +7 -0
  87. package/dist/components/dashboard/stat-tile.d.ts +20 -0
  88. package/dist/components/dashboard/stat-tile.js +9 -0
  89. package/dist/components/feedback/index.d.ts +4 -0
  90. package/dist/components/feedback/index.js +2 -0
  91. package/dist/components/feedback/query-states.d.ts +27 -0
  92. package/dist/components/feedback/query-states.js +38 -0
  93. package/dist/components/feedback/table-pagination.d.ts +20 -0
  94. package/dist/components/feedback/table-pagination.js +15 -0
  95. package/dist/components/invoice-queue/index.d.ts +5 -0
  96. package/dist/components/invoice-queue/index.js +3 -0
  97. package/dist/components/invoice-queue/next-action-cell.d.ts +5 -0
  98. package/dist/components/invoice-queue/next-action-cell.js +9 -0
  99. package/dist/components/invoice-queue/queue-kpi-card.d.ts +19 -0
  100. package/dist/components/invoice-queue/queue-kpi-card.js +31 -0
  101. package/dist/components/invoice-queue/queue-kpi-row.d.ts +22 -0
  102. package/dist/components/invoice-queue/queue-kpi-row.js +12 -0
  103. package/dist/components/notifications/alerts.d.ts +25 -0
  104. package/dist/components/notifications/alerts.js +66 -0
  105. package/dist/components/notifications/bell.d.ts +14 -0
  106. package/dist/components/notifications/bell.js +17 -0
  107. package/dist/components/notifications/highlight.d.ts +4 -0
  108. package/dist/components/notifications/highlight.js +7 -0
  109. package/dist/components/notifications/index.d.ts +7 -0
  110. package/dist/components/notifications/index.js +6 -0
  111. package/dist/components/notifications/reminder-dialog.d.ts +24 -0
  112. package/dist/components/notifications/reminder-dialog.js +54 -0
  113. package/dist/components/notifications/types.d.ts +27 -0
  114. package/dist/components/notifications/types.js +1 -0
  115. package/dist/components/notifications/use-notification-acks.d.ts +7 -0
  116. package/dist/components/notifications/use-notification-acks.js +37 -0
  117. package/dist/components/shell/breadcrumbs.d.ts +7 -0
  118. package/dist/components/shell/breadcrumbs.js +38 -0
  119. package/dist/components/shell/index.d.ts +3 -0
  120. package/dist/components/shell/index.js +3 -0
  121. package/dist/components/shell/shell.d.ts +30 -0
  122. package/dist/components/shell/shell.js +110 -0
  123. package/dist/components/shell/types.d.ts +23 -0
  124. package/dist/components/shell/types.js +3 -0
  125. package/dist/components/tour/find-target.d.ts +1 -0
  126. package/dist/components/tour/find-target.js +3 -0
  127. package/dist/components/tour/index.d.ts +14 -0
  128. package/dist/components/tour/index.js +8 -0
  129. package/dist/components/tour/labels.d.ts +10 -0
  130. package/dist/components/tour/labels.js +9 -0
  131. package/dist/components/tour/seen-store.d.ts +3 -0
  132. package/dist/components/tour/seen-store.js +34 -0
  133. package/dist/components/tour/tour-blocks.d.ts +4 -0
  134. package/dist/components/tour/tour-blocks.js +27 -0
  135. package/dist/components/tour/tour-button.d.ts +4 -0
  136. package/dist/components/tour/tour-button.js +12 -0
  137. package/dist/components/tour/tour-card.d.ts +11 -0
  138. package/dist/components/tour/tour-card.js +7 -0
  139. package/dist/components/tour/tour-context.d.ts +16 -0
  140. package/dist/components/tour/tour-context.js +2 -0
  141. package/dist/components/tour/tour-overlay.d.ts +1 -0
  142. package/dist/components/tour/tour-overlay.js +165 -0
  143. package/dist/components/tour/tour-provider.d.ts +9 -0
  144. package/dist/components/tour/tour-provider.js +80 -0
  145. package/dist/components/tour/types.d.ts +44 -0
  146. package/dist/components/tour/types.js +1 -0
  147. package/dist/components/tour/use-tour.d.ts +3 -0
  148. package/dist/components/tour/use-tour.js +9 -0
  149. package/dist/hooks/use-mobile.d.ts +1 -0
  150. package/dist/hooks/use-mobile.js +15 -0
  151. package/dist/i18n/index.d.ts +15 -0
  152. package/dist/i18n/index.js +15 -0
  153. package/dist/lib/bank-import/classify.d.ts +8 -0
  154. package/dist/lib/bank-import/classify.js +89 -0
  155. package/dist/lib/bank-import/column-guess.d.ts +2 -0
  156. package/dist/lib/bank-import/column-guess.js +40 -0
  157. package/dist/lib/bank-import/csv.d.ts +3 -0
  158. package/dist/lib/bank-import/csv.js +20 -0
  159. package/dist/lib/bank-import/duplicates.d.ts +2 -0
  160. package/dist/lib/bank-import/duplicates.js +21 -0
  161. package/dist/lib/bank-import/index.d.ts +12 -0
  162. package/dist/lib/bank-import/index.js +9 -0
  163. package/dist/lib/bank-import/mapping-storage.d.ts +3 -0
  164. package/dist/lib/bank-import/mapping-storage.js +29 -0
  165. package/dist/lib/bank-import/normalize.d.ts +4 -0
  166. package/dist/lib/bank-import/normalize.js +82 -0
  167. package/dist/lib/bank-import/parse-file.d.ts +7 -0
  168. package/dist/lib/bank-import/parse-file.js +23 -0
  169. package/dist/lib/bank-import/types.d.ts +31 -0
  170. package/dist/lib/bank-import/types.js +1 -0
  171. package/dist/lib/bank-import/xlsx.d.ts +2 -0
  172. package/dist/lib/bank-import/xlsx.js +25 -0
  173. package/dist/lib/class-names.d.ts +2 -0
  174. package/dist/lib/class-names.js +5 -0
  175. package/dist/lib/download.d.ts +2 -0
  176. package/dist/lib/download.js +14 -0
  177. package/dist/lib/formatters.d.ts +6 -0
  178. package/dist/lib/formatters.js +24 -0
  179. package/dist/lib/index.d.ts +9 -0
  180. package/dist/lib/index.js +6 -0
  181. package/dist/lib/opos-whitelist/index.d.ts +2 -0
  182. package/dist/lib/opos-whitelist/index.js +1 -0
  183. package/dist/lib/opos-whitelist/opos.d.ts +14 -0
  184. package/dist/lib/opos-whitelist/opos.js +49 -0
  185. package/dist/lib/query-result.d.ts +12 -0
  186. package/dist/lib/query-result.js +1 -0
  187. package/dist/lib/tour-placeholders/index.d.ts +2 -0
  188. package/dist/lib/tour-placeholders/index.js +1 -0
  189. package/dist/lib/tour-placeholders/overview.d.ts +12 -0
  190. package/dist/lib/tour-placeholders/overview.js +139 -0
  191. package/dist/pages/bank-accounts/BankAccountsPage.d.ts +7 -0
  192. package/dist/pages/bank-accounts/BankAccountsPage.js +21 -0
  193. package/dist/pages/bank-accounts/index.d.ts +4 -0
  194. package/dist/pages/bank-accounts/index.js +2 -0
  195. package/dist/pages/bank-accounts/labels.d.ts +15 -0
  196. package/dist/pages/bank-accounts/labels.js +14 -0
  197. package/dist/pages/bank-import/BankImportWizard.d.ts +9 -0
  198. package/dist/pages/bank-import/BankImportWizard.js +158 -0
  199. package/dist/pages/bank-import/index.d.ts +4 -0
  200. package/dist/pages/bank-import/index.js +2 -0
  201. package/dist/pages/bank-import/labels.d.ts +44 -0
  202. package/dist/pages/bank-import/labels.js +43 -0
  203. package/dist/pages/bank-sync-log/BankSyncLogPage.d.ts +7 -0
  204. package/dist/pages/bank-sync-log/BankSyncLogPage.js +77 -0
  205. package/dist/pages/bank-sync-log/index.d.ts +4 -0
  206. package/dist/pages/bank-sync-log/index.js +2 -0
  207. package/dist/pages/bank-sync-log/labels.d.ts +21 -0
  208. package/dist/pages/bank-sync-log/labels.js +20 -0
  209. package/dist/pages/bank-transactions/BankMatchPanel.d.ts +8 -0
  210. package/dist/pages/bank-transactions/BankMatchPanel.js +75 -0
  211. package/dist/pages/bank-transactions/BankTransactionsPage.d.ts +7 -0
  212. package/dist/pages/bank-transactions/BankTransactionsPage.js +59 -0
  213. package/dist/pages/bank-transactions/badges.d.ts +8 -0
  214. package/dist/pages/bank-transactions/badges.js +24 -0
  215. package/dist/pages/bank-transactions/index.d.ts +6 -0
  216. package/dist/pages/bank-transactions/index.js +4 -0
  217. package/dist/pages/bank-transactions/labels.d.ts +41 -0
  218. package/dist/pages/bank-transactions/labels.js +40 -0
  219. package/dist/pages/bank-transactions/sort-control.d.ts +17 -0
  220. package/dist/pages/bank-transactions/sort-control.js +8 -0
  221. package/dist/pages/bank-transactions/use-table-view.d.ts +23 -0
  222. package/dist/pages/bank-transactions/use-table-view.js +54 -0
  223. package/dist/pages/category-rules/CategoryRulesPage.d.ts +7 -0
  224. package/dist/pages/category-rules/CategoryRulesPage.js +160 -0
  225. package/dist/pages/category-rules/index.d.ts +4 -0
  226. package/dist/pages/category-rules/index.js +2 -0
  227. package/dist/pages/category-rules/labels.d.ts +66 -0
  228. package/dist/pages/category-rules/labels.js +72 -0
  229. package/dist/pages/companies/company-detail-page.d.ts +10 -0
  230. package/dist/pages/companies/company-detail-page.js +184 -0
  231. package/dist/pages/companies/company-form.d.ts +20 -0
  232. package/dist/pages/companies/company-form.js +23 -0
  233. package/dist/pages/companies/company-list-page.d.ts +9 -0
  234. package/dist/pages/companies/company-list-page.js +109 -0
  235. package/dist/pages/companies/known-spellings-card.d.ts +8 -0
  236. package/dist/pages/companies/known-spellings-card.js +65 -0
  237. package/dist/pages/companies/labels.d.ts +105 -0
  238. package/dist/pages/companies/labels.js +104 -0
  239. package/dist/pages/companies/sort-control.d.ts +17 -0
  240. package/dist/pages/companies/sort-control.js +8 -0
  241. package/dist/pages/companies/use-infinite-rows.d.ts +6 -0
  242. package/dist/pages/companies/use-infinite-rows.js +24 -0
  243. package/dist/pages/companies/use-table-view.d.ts +23 -0
  244. package/dist/pages/companies/use-table-view.js +56 -0
  245. package/dist/pages/customers/company-chip.d.ts +6 -0
  246. package/dist/pages/customers/company-chip.js +9 -0
  247. package/dist/pages/customers/copy-button.d.ts +6 -0
  248. package/dist/pages/customers/copy-button.js +31 -0
  249. package/dist/pages/customers/customer-detail-page.d.ts +10 -0
  250. package/dist/pages/customers/customer-detail-page.js +83 -0
  251. package/dist/pages/customers/customer-list-page.d.ts +9 -0
  252. package/dist/pages/customers/customer-list-page.js +65 -0
  253. package/dist/pages/customers/edit-customer-dialog.d.ts +9 -0
  254. package/dist/pages/customers/edit-customer-dialog.js +72 -0
  255. package/dist/pages/customers/form-hints.d.ts +6 -0
  256. package/dist/pages/customers/form-hints.js +9 -0
  257. package/dist/pages/customers/invoice-status-badge.d.ts +10 -0
  258. package/dist/pages/customers/invoice-status-badge.js +22 -0
  259. package/dist/pages/customers/labels.d.ts +116 -0
  260. package/dist/pages/customers/labels.js +117 -0
  261. package/dist/pages/customers/new-customer-dialog.d.ts +6 -0
  262. package/dist/pages/customers/new-customer-dialog.js +93 -0
  263. package/dist/pages/customers/sort-control.d.ts +14 -0
  264. package/dist/pages/customers/sort-control.js +9 -0
  265. package/dist/pages/customers/use-table-view.d.ts +23 -0
  266. package/dist/pages/customers/use-table-view.js +56 -0
  267. package/dist/pages/exclusion-rules/exclusion-rules-page.d.ts +7 -0
  268. package/dist/pages/exclusion-rules/exclusion-rules-page.js +114 -0
  269. package/dist/pages/exclusion-rules/labels.d.ts +53 -0
  270. package/dist/pages/exclusion-rules/labels.js +61 -0
  271. package/dist/pages/file-naming/build-filename.d.ts +3 -0
  272. package/dist/pages/file-naming/build-filename.js +82 -0
  273. package/dist/pages/file-naming/file-naming-page.d.ts +10 -0
  274. package/dist/pages/file-naming/file-naming-page.js +120 -0
  275. package/dist/pages/file-naming/labels.d.ts +44 -0
  276. package/dist/pages/file-naming/labels.js +44 -0
  277. package/dist/pages/index.d.ts +63 -0
  278. package/dist/pages/index.js +48 -0
  279. package/dist/pages/invoice-detail/InvoiceDetailPage.d.ts +11 -0
  280. package/dist/pages/invoice-detail/InvoiceDetailPage.js +292 -0
  281. package/dist/pages/invoice-detail/OutgoingInvoiceFlag.d.ts +26 -0
  282. package/dist/pages/invoice-detail/OutgoingInvoiceFlag.js +16 -0
  283. package/dist/pages/invoice-detail/ReviewBadge.d.ts +15 -0
  284. package/dist/pages/invoice-detail/ReviewBadge.js +23 -0
  285. package/dist/pages/invoice-detail/ReviewCard.d.ts +17 -0
  286. package/dist/pages/invoice-detail/ReviewCard.js +12 -0
  287. package/dist/pages/invoice-detail/SideBySide.d.ts +5 -0
  288. package/dist/pages/invoice-detail/SideBySide.js +5 -0
  289. package/dist/pages/invoice-detail/WorkflowHistoryList.d.ts +23 -0
  290. package/dist/pages/invoice-detail/WorkflowHistoryList.js +32 -0
  291. package/dist/pages/invoice-detail/WorkflowLadder.d.ts +20 -0
  292. package/dist/pages/invoice-detail/WorkflowLadder.js +16 -0
  293. package/dist/pages/invoice-detail/history.d.ts +23 -0
  294. package/dist/pages/invoice-detail/history.js +76 -0
  295. package/dist/pages/invoice-detail/index.d.ts +21 -0
  296. package/dist/pages/invoice-detail/index.js +11 -0
  297. package/dist/pages/invoice-detail/labels.d.ts +79 -0
  298. package/dist/pages/invoice-detail/labels.js +139 -0
  299. package/dist/pages/invoice-detail/pipeline-types.d.ts +58 -0
  300. package/dist/pages/invoice-detail/pipeline-types.js +1 -0
  301. package/dist/pages/invoice-detail/review-recheck.d.ts +8 -0
  302. package/dist/pages/invoice-detail/review-recheck.js +103 -0
  303. package/dist/pages/invoice-detail/review.d.ts +91 -0
  304. package/dist/pages/invoice-detail/review.js +310 -0
  305. package/dist/pages/invoice-list/badges.d.ts +23 -0
  306. package/dist/pages/invoice-list/badges.js +26 -0
  307. package/dist/pages/invoice-list/index.d.ts +5 -0
  308. package/dist/pages/invoice-list/index.js +3 -0
  309. package/dist/pages/invoice-list/invoice-list-page.d.ts +13 -0
  310. package/dist/pages/invoice-list/invoice-list-page.js +114 -0
  311. package/dist/pages/invoice-list/labels.d.ts +36 -0
  312. package/dist/pages/invoice-list/labels.js +29 -0
  313. package/dist/pages/invoice-list/sort-control.d.ts +17 -0
  314. package/dist/pages/invoice-list/sort-control.js +8 -0
  315. package/dist/pages/invoice-list/use-table-view.d.ts +23 -0
  316. package/dist/pages/invoice-list/use-table-view.js +54 -0
  317. package/dist/pages/invoice-upload/InvoiceUploadPage.d.ts +7 -0
  318. package/dist/pages/invoice-upload/InvoiceUploadPage.js +115 -0
  319. package/dist/pages/invoice-upload/index.d.ts +4 -0
  320. package/dist/pages/invoice-upload/index.js +2 -0
  321. package/dist/pages/invoice-upload/labels.d.ts +29 -0
  322. package/dist/pages/invoice-upload/labels.js +28 -0
  323. package/dist/pages/manual-bookings/ManualBookingsPage.d.ts +7 -0
  324. package/dist/pages/manual-bookings/ManualBookingsPage.js +161 -0
  325. package/dist/pages/manual-bookings/index.d.ts +4 -0
  326. package/dist/pages/manual-bookings/index.js +2 -0
  327. package/dist/pages/manual-bookings/labels.d.ts +53 -0
  328. package/dist/pages/manual-bookings/labels.js +52 -0
  329. package/dist/pages/notifications/labels.d.ts +22 -0
  330. package/dist/pages/notifications/labels.js +21 -0
  331. package/dist/pages/notifications/notifications-page.d.ts +14 -0
  332. package/dist/pages/notifications/notifications-page.js +81 -0
  333. package/dist/pages/open-items/OpenItemsPage.d.ts +11 -0
  334. package/dist/pages/open-items/OpenItemsPage.js +110 -0
  335. package/dist/pages/open-items/index.d.ts +6 -0
  336. package/dist/pages/open-items/index.js +3 -0
  337. package/dist/pages/open-items/labels.d.ts +37 -0
  338. package/dist/pages/open-items/labels.js +36 -0
  339. package/dist/pages/open-items/urgency.d.ts +8 -0
  340. package/dist/pages/open-items/urgency.js +27 -0
  341. package/dist/pages/opos-whitelist/OposWhitelistPage.d.ts +7 -0
  342. package/dist/pages/opos-whitelist/OposWhitelistPage.js +165 -0
  343. package/dist/pages/opos-whitelist/index.d.ts +4 -0
  344. package/dist/pages/opos-whitelist/index.js +2 -0
  345. package/dist/pages/opos-whitelist/labels.d.ts +56 -0
  346. package/dist/pages/opos-whitelist/labels.js +70 -0
  347. package/dist/pages/outgoing-invoices/OutgoingInvoicesPage.d.ts +7 -0
  348. package/dist/pages/outgoing-invoices/OutgoingInvoicesPage.js +169 -0
  349. package/dist/pages/outgoing-invoices/index.d.ts +4 -0
  350. package/dist/pages/outgoing-invoices/index.js +2 -0
  351. package/dist/pages/outgoing-invoices/labels.d.ts +43 -0
  352. package/dist/pages/outgoing-invoices/labels.js +42 -0
  353. package/dist/pages/outgoing-invoices/sort-control.d.ts +17 -0
  354. package/dist/pages/outgoing-invoices/sort-control.js +8 -0
  355. package/dist/pages/outgoing-invoices/use-table-view.d.ts +23 -0
  356. package/dist/pages/outgoing-invoices/use-table-view.js +54 -0
  357. package/dist/pages/overview/labels.d.ts +35 -0
  358. package/dist/pages/overview/labels.js +34 -0
  359. package/dist/pages/overview/overview-page.d.ts +22 -0
  360. package/dist/pages/overview/overview-page.js +127 -0
  361. package/dist/pages/processing-log/labels.d.ts +54 -0
  362. package/dist/pages/processing-log/labels.js +53 -0
  363. package/dist/pages/processing-log/mail-parsing.d.ts +21 -0
  364. package/dist/pages/processing-log/mail-parsing.js +52 -0
  365. package/dist/pages/processing-log/processing-log-page.d.ts +9 -0
  366. package/dist/pages/processing-log/processing-log-page.js +206 -0
  367. package/dist/pages/properties/badges.d.ts +20 -0
  368. package/dist/pages/properties/badges.js +45 -0
  369. package/dist/pages/properties/company-assignment-field.d.ts +11 -0
  370. package/dist/pages/properties/company-assignment-field.js +13 -0
  371. package/dist/pages/properties/form-field.d.ts +6 -0
  372. package/dist/pages/properties/form-field.js +9 -0
  373. package/dist/pages/properties/labels.d.ts +124 -0
  374. package/dist/pages/properties/labels.js +128 -0
  375. package/dist/pages/properties/name-variants-card.d.ts +7 -0
  376. package/dist/pages/properties/name-variants-card.js +60 -0
  377. package/dist/pages/properties/property-detail-page.d.ts +10 -0
  378. package/dist/pages/properties/property-detail-page.js +150 -0
  379. package/dist/pages/properties/property-list-page.d.ts +13 -0
  380. package/dist/pages/properties/property-list-page.js +201 -0
  381. package/dist/pages/properties/sort-control.d.ts +14 -0
  382. package/dist/pages/properties/sort-control.js +9 -0
  383. package/dist/pages/properties/use-infinite-rows.d.ts +6 -0
  384. package/dist/pages/properties/use-infinite-rows.js +26 -0
  385. package/dist/pages/properties/use-table-view.d.ts +23 -0
  386. package/dist/pages/properties/use-table-view.js +56 -0
  387. package/dist/pages/supplier-detail/SupplierDetailPage.d.ts +10 -0
  388. package/dist/pages/supplier-detail/SupplierDetailPage.js +157 -0
  389. package/dist/pages/supplier-detail/index.d.ts +4 -0
  390. package/dist/pages/supplier-detail/index.js +2 -0
  391. package/dist/pages/supplier-detail/labels.d.ts +46 -0
  392. package/dist/pages/supplier-detail/labels.js +45 -0
  393. package/dist/pages/supplier-list/SupplierListPage.d.ts +9 -0
  394. package/dist/pages/supplier-list/SupplierListPage.js +102 -0
  395. package/dist/pages/supplier-list/index.d.ts +4 -0
  396. package/dist/pages/supplier-list/index.js +2 -0
  397. package/dist/pages/supplier-list/labels.d.ts +33 -0
  398. package/dist/pages/supplier-list/labels.js +32 -0
  399. package/dist/pages/supplier-list/sort-control.d.ts +17 -0
  400. package/dist/pages/supplier-list/sort-control.js +8 -0
  401. package/dist/pages/supplier-list/use-table-view.d.ts +23 -0
  402. package/dist/pages/supplier-list/use-table-view.js +54 -0
  403. package/dist/pages/team/account-dialogs.d.ts +12 -0
  404. package/dist/pages/team/account-dialogs.js +49 -0
  405. package/dist/pages/team/employee-editor.d.ts +19 -0
  406. package/dist/pages/team/employee-editor.js +124 -0
  407. package/dist/pages/team/labels.d.ts +99 -0
  408. package/dist/pages/team/labels.js +98 -0
  409. package/dist/pages/team/new-employee.d.ts +8 -0
  410. package/dist/pages/team/new-employee.js +103 -0
  411. package/dist/pages/team/roles-tab.d.ts +6 -0
  412. package/dist/pages/team/roles-tab.js +46 -0
  413. package/dist/pages/team/team-page.d.ts +7 -0
  414. package/dist/pages/team/team-page.js +81 -0
  415. package/dist/pages/team/temp-password-dialog.d.ts +11 -0
  416. package/dist/pages/team/temp-password-dialog.js +23 -0
  417. package/dist/pages/trash/labels.d.ts +68 -0
  418. package/dist/pages/trash/labels.js +69 -0
  419. package/dist/pages/trash/trash-page.d.ts +9 -0
  420. package/dist/pages/trash/trash-page.js +259 -0
  421. package/dist/pages/vat-rules/labels.d.ts +110 -0
  422. package/dist/pages/vat-rules/labels.js +109 -0
  423. package/dist/pages/vat-rules/new-rule-dialog.d.ts +7 -0
  424. package/dist/pages/vat-rules/new-rule-dialog.js +134 -0
  425. package/dist/pages/vat-rules/rule-row.d.ts +20 -0
  426. package/dist/pages/vat-rules/rule-row.js +120 -0
  427. package/dist/pages/vat-rules/vat-rules-page.d.ts +9 -0
  428. package/dist/pages/vat-rules/vat-rules-page.js +61 -0
  429. package/dist/ui/alert-dialog.d.ts +20 -0
  430. package/dist/ui/alert-dialog.js +41 -0
  431. package/dist/ui/badge.d.ts +9 -0
  432. package/dist/ui/badge.js +20 -0
  433. package/dist/ui/breadcrumb.d.ts +19 -0
  434. package/dist/ui/breadcrumb.js +23 -0
  435. package/dist/ui/button.d.ts +11 -0
  436. package/dist/ui/button.js +33 -0
  437. package/dist/ui/calendar.d.ts +8 -0
  438. package/dist/ui/calendar.js +75 -0
  439. package/dist/ui/card.d.ts +8 -0
  440. package/dist/ui/card.js +16 -0
  441. package/dist/ui/chart.d.ts +62 -0
  442. package/dist/ui/chart.js +118 -0
  443. package/dist/ui/checkbox.d.ts +4 -0
  444. package/dist/ui/checkbox.js +11 -0
  445. package/dist/ui/collapsible.d.ts +5 -0
  446. package/dist/ui/collapsible.js +5 -0
  447. package/dist/ui/combobox.d.ts +24 -0
  448. package/dist/ui/combobox.js +55 -0
  449. package/dist/ui/command.d.ts +80 -0
  450. package/dist/ui/command.js +29 -0
  451. package/dist/ui/dialog.d.ts +19 -0
  452. package/dist/ui/dialog.js +58 -0
  453. package/dist/ui/dropdown-menu.d.ts +27 -0
  454. package/dist/ui/dropdown-menu.js +33 -0
  455. package/dist/ui/field-context.d.ts +4 -0
  456. package/dist/ui/field-context.js +6 -0
  457. package/dist/ui/field.d.ts +3 -0
  458. package/dist/ui/field.js +8 -0
  459. package/dist/ui/icon-action.d.ts +3 -0
  460. package/dist/ui/icon-action.js +8 -0
  461. package/dist/ui/index.d.ts +32 -0
  462. package/dist/ui/index.js +32 -0
  463. package/dist/ui/input.d.ts +3 -0
  464. package/dist/ui/input.js +11 -0
  465. package/dist/ui/label.d.ts +5 -0
  466. package/dist/ui/label.js +15 -0
  467. package/dist/ui/multi-combobox.d.ts +18 -0
  468. package/dist/ui/multi-combobox.js +40 -0
  469. package/dist/ui/popover.d.ts +9 -0
  470. package/dist/ui/popover.js +12 -0
  471. package/dist/ui/scroll-area.d.ts +5 -0
  472. package/dist/ui/scroll-area.js +9 -0
  473. package/dist/ui/scroll-shadow.d.ts +8 -0
  474. package/dist/ui/scroll-shadow.js +57 -0
  475. package/dist/ui/select.d.ts +13 -0
  476. package/dist/ui/select.js +31 -0
  477. package/dist/ui/separator.d.ts +4 -0
  478. package/dist/ui/separator.js +7 -0
  479. package/dist/ui/sheet.d.ts +25 -0
  480. package/dist/ui/sheet.js +40 -0
  481. package/dist/ui/sidebar.d.ts +65 -0
  482. package/dist/ui/sidebar.js +207 -0
  483. package/dist/ui/skeleton.d.ts +2 -0
  484. package/dist/ui/skeleton.js +6 -0
  485. package/dist/ui/sonner.d.ts +5 -0
  486. package/dist/ui/sonner.js +13 -0
  487. package/dist/ui/switch.d.ts +4 -0
  488. package/dist/ui/switch.js +7 -0
  489. package/dist/ui/table.d.ts +12 -0
  490. package/dist/ui/table.js +24 -0
  491. package/dist/ui/tabs.d.ts +7 -0
  492. package/dist/ui/tabs.js +12 -0
  493. package/dist/ui/textarea.d.ts +3 -0
  494. package/dist/ui/textarea.js +11 -0
  495. package/dist/ui/tooltip.d.ts +7 -0
  496. package/dist/ui/tooltip.js +11 -0
  497. package/package.json +80 -0
  498. package/themes/TOKENS.md +57 -0
  499. package/themes/default.css +60 -0
package/README.md ADDED
@@ -0,0 +1,125 @@
1
+ # Hub Kit
2
+
3
+ One package that powers every Hub project. Pages, components and the theme system live
4
+ here; each project supplies its data adapters, its dictionary, and one theme file.
5
+
6
+ Rules for working in this repo: see `CLAUDE.md`. The full plan: see `docs/plan.md`.
7
+
8
+ ## Install in a project
9
+
10
+ ```bash
11
+ npm install @hub-kit/core
12
+ ```
13
+
14
+ In the project's `styles.css`:
15
+
16
+ ```css
17
+ @import "@hub-kit/core/themes/default.css";
18
+ @source "../node_modules/@hub-kit/core/dist";
19
+ ```
20
+
21
+ ## Use a component
22
+
23
+ ```tsx
24
+ import { QueueKpiRow } from "@hub-kit/core/invoice-queue";
25
+ import { NotificationBell, AlertList } from "@hub-kit/core/notifications";
26
+ import { Button, Table } from "@hub-kit/core/ui";
27
+ ```
28
+
29
+ ## Use a page
30
+
31
+ A page needs one adapter the project implements, and takes optional labels for
32
+ translation. English works out of the box.
33
+
34
+ ```tsx
35
+ import { ProcessingLogPage } from "@hub-kit/core/pages";
36
+ import { processingLogAdapter } from "../adapters/processing-log";
37
+
38
+ export function ActivityLog() {
39
+ return <ProcessingLogPage adapter={processingLogAdapter} />;
40
+ }
41
+ ```
42
+
43
+ The adapter interfaces are in `hub-kit/adapters`. Query hooks return a plain
44
+ `QueryResult` shape, so the project implements them with React Query and Supabase;
45
+ mutations are plain functions returning promises, so the project wraps its own writes
46
+ and cache invalidation.
47
+
48
+ ## Set up a new project
49
+
50
+ ```bash
51
+ npx hub-kit init
52
+ ```
53
+
54
+ This creates `hub.config.mjs`, `src/hub/registry.tsx` and a starter adapter, then prints
55
+ the two CSS lines to add. Nothing is overwritten if the files already exist.
56
+
57
+ ## Add a guided tour
58
+
59
+ Tours are plain data the project owns. One object per page, keyed by the project's own
60
+ route path:
61
+
62
+ ```tsx
63
+ import { TourProvider, TourButton, type TourDefinition } from "@hub-kit/core/tour";
64
+
65
+ const overviewTour: TourDefinition = {
66
+ id: "overview",
67
+ steps: [
68
+ {
69
+ target: "overview-money-cards",
70
+ title: "Your figures at a glance",
71
+ content: [{ kind: "paragraph", text: "Incoming and outgoing invoices for the period." }],
72
+ showPlaceholderData: true,
73
+ },
74
+ ],
75
+ };
76
+
77
+ <TourProvider tours={{ "/overview": overviewTour }}>
78
+ <Shell headerActions={<TourButton />} ...rest />
79
+ </TourProvider>
80
+ ```
81
+
82
+ A tour opens by itself the first time a user lands on the page. Once it is skipped or
83
+ finished it never opens by itself again; the Tour button always reopens it. Pages with no
84
+ tour show no button. Target names are listed in `docs/tour-guide.md`.
85
+
86
+ Steps carry typed content blocks: `paragraph`, `list`, `image`, `video`, `link`,
87
+ `keyValueList` and `callout`. The array order is the order on the card. Styling comes from
88
+ the theme, so a project supplies content only.
89
+
90
+ A step with `showPlaceholderData` fills an empty page with sample values while the tour is
91
+ open. Sample values come from a separate read-only adapter, so real data is never read
92
+ through or written to.
93
+
94
+ Full instructions, including the target names each kit page offers: `docs/tour-guide.md`.
95
+
96
+ ## Generate route files
97
+
98
+ `hub.config.mjs` in the project root names the enabled pages:
99
+
100
+ ```js
101
+ export default {
102
+ registryImport: "@/hub/registry",
103
+ pages: [
104
+ { component: "TeamPage", path: "/team" },
105
+ { component: "NotificationsPage", path: "/benachrichtigungen" },
106
+ { component: "ActivityLogPage", path: "/protokoll" },
107
+ ],
108
+ };
109
+ ```
110
+
111
+ Then:
112
+
113
+ ```bash
114
+ npx hub-kit sync
115
+ ```
116
+
117
+ This writes one thin route file per page. The project's `src/hub/registry.tsx` binds
118
+ each kit page to its adapters and dictionary once.
119
+
120
+ ## Build this package
121
+
122
+ ```bash
123
+ npm run build # compiles src/ to dist/ with type declarations
124
+ npm run check # type check only
125
+ ```
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env node
2
+ import { mkdirSync, writeFileSync, existsSync } from "node:fs";
3
+ import { resolve, dirname } from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+
6
+ const command = process.argv[2];
7
+
8
+ if (command === "init") {
9
+ await runInit();
10
+ } else if (command === "sync") {
11
+ await runSync();
12
+ } else {
13
+ console.log("Usage: hub-kit <init|sync>");
14
+ console.log(" init Creates hub.config.mjs, a registry file and a starter adapter.");
15
+ console.log(" sync Reads hub.config.mjs and writes one route file per enabled page.");
16
+ process.exit(command ? 1 : 0);
17
+ }
18
+
19
+ async function runInit() {
20
+ const configTemplate = `export default {
21
+ registryImport: "@/hub/registry",
22
+ pages: [
23
+ { component: "ActivityLogPage", path: "/activity-log" },
24
+ ],
25
+ };
26
+ `;
27
+
28
+ const registryTemplate = `import { ProcessingLogPage } from "@hub-kit/core/pages";
29
+
30
+ import { processingLogAdapter } from "./adapters/processing-log";
31
+
32
+ export function ActivityLogPage() {
33
+ return <ProcessingLogPage adapter={processingLogAdapter} />;
34
+ }
35
+ `;
36
+
37
+ const adapterTemplate = `import type { ProcessingLogAdapter } from "@hub-kit/core/adapters";
38
+
39
+ export const processingLogAdapter: ProcessingLogAdapter = {
40
+ // Implement each member with your project's data layer.
41
+ };
42
+ `;
43
+
44
+ writeFileIfMissing(resolve(process.cwd(), "hub.config.mjs"), configTemplate);
45
+ writeFileIfMissing(resolve(process.cwd(), "src/hub/registry.tsx"), registryTemplate);
46
+ writeFileIfMissing(resolve(process.cwd(), "src/hub/adapters/processing-log.ts"), adapterTemplate);
47
+
48
+ console.log("");
49
+ console.log("Add these two lines to your main CSS file:");
50
+ console.log(' @import "@hub-kit/core/themes/default.css";');
51
+ console.log(' @source "../node_modules/@hub-kit/core/dist";');
52
+ console.log("");
53
+ console.log("Next steps:");
54
+ console.log(" 1. Fill in src/hub/adapters/processing-log.ts with your data layer.");
55
+ console.log(" 2. Add your pages to hub.config.mjs and bind them in src/hub/registry.tsx.");
56
+ console.log(" 3. Run: npx hub-kit sync");
57
+ }
58
+
59
+ function writeFileIfMissing(filePath, content) {
60
+ if (existsSync(filePath)) {
61
+ console.log(`kept ${filePath} (already exists)`);
62
+ return;
63
+ }
64
+ mkdirSync(dirname(filePath), { recursive: true });
65
+ writeFileSync(filePath, content);
66
+ console.log(`wrote ${filePath}`);
67
+ }
68
+
69
+ async function runSync() {
70
+ const configPath = resolve(process.cwd(), "hub.config.mjs");
71
+ if (!existsSync(configPath)) {
72
+ console.error("No hub.config.mjs found in this folder. Run: npx hub-kit init");
73
+ process.exit(1);
74
+ }
75
+
76
+ const config = (await import(pathToFileURL(configPath).href)).default;
77
+
78
+ if (!Array.isArray(config?.pages)) {
79
+ console.error("hub.config.mjs must export default { pages: [...] }.");
80
+ process.exit(1);
81
+ }
82
+
83
+ const routesFolder = resolve(process.cwd(), config.routesFolder ?? "src/routes");
84
+ const registryImport = config.registryImport ?? "@/hub/registry";
85
+
86
+ for (const page of config.pages) {
87
+ if (!page.component || !page.path) {
88
+ console.error(`Every page needs a component and a path. Got: ${JSON.stringify(page)}`);
89
+ process.exit(1);
90
+ }
91
+ const routePath = page.path.endsWith("/") ? page.path : `${page.path}/`;
92
+ const fileFolder = resolve(routesFolder, ...routePath.split("/").filter(Boolean));
93
+ const filePath = resolve(fileFolder, "index.tsx");
94
+ const depth = routePath.split("/").filter(Boolean).length;
95
+
96
+ const fileContent = `// Generated by "hub-kit sync". Edit hub.config.mjs instead of this file.
97
+ import { createFileRoute } from "@tanstack/react-router";
98
+
99
+ import { ${page.component} } from "${registryImport}";
100
+
101
+ export const Route = createFileRoute("${routePath.slice(0, -1)}/")({
102
+ component: ${page.component},
103
+ });
104
+ `;
105
+
106
+ mkdirSync(dirname(filePath), { recursive: true });
107
+ writeFileSync(filePath, fileContent);
108
+ console.log(`wrote ${filePath} (depth ${depth})`);
109
+ }
110
+
111
+ console.log(`Done: ${config.pages.length} route file(s).`);
112
+ }
@@ -0,0 +1,100 @@
1
+ import type { NormalizedRow } from "../lib/bank-import/types";
2
+ export interface BankAccountRecord {
3
+ id: string;
4
+ account_name: string | null;
5
+ company_code: string | null;
6
+ iban: string | null;
7
+ bic: string | null;
8
+ bank_name: string | null;
9
+ product_type: string | null;
10
+ currency: string | null;
11
+ balance: number | null;
12
+ balance_date: string | null;
13
+ is_own_account: boolean;
14
+ excluded_at: string | null;
15
+ }
16
+ export interface BankTransactionRecord {
17
+ id: string;
18
+ account_id: string;
19
+ booking_date: string | null;
20
+ value_date: string | null;
21
+ amount: number;
22
+ currency: string | null;
23
+ counterparty_holder: string | null;
24
+ counterparty_iban: string | null;
25
+ payment_reference: string | null;
26
+ booking_text: string | null;
27
+ direction: string | null;
28
+ transaction_type: string | null;
29
+ matching_status: string;
30
+ no_receipt_reason: string | null;
31
+ }
32
+ export interface BankMatchCandidate {
33
+ invoiceId: string;
34
+ issuer: string | null;
35
+ invoiceNumber: string | null;
36
+ amount: number | null;
37
+ documentDate: string | null;
38
+ score: number | null;
39
+ reasons?: string[] | null;
40
+ }
41
+ export interface BankInvoiceSearchResult {
42
+ id: string;
43
+ issuer: string | null;
44
+ invoiceNumber: string | null;
45
+ amount: number | null;
46
+ documentDate: string | null;
47
+ }
48
+ export interface BankReconciliationAdapter {
49
+ useAccounts(): {
50
+ data: BankAccountRecord[];
51
+ loading: boolean;
52
+ error: unknown;
53
+ };
54
+ useTransactions(): {
55
+ data: BankTransactionRecord[];
56
+ loading: boolean;
57
+ error: unknown;
58
+ };
59
+ useCompanyOptions?(): {
60
+ data: {
61
+ code: string;
62
+ name: string;
63
+ }[];
64
+ loading: boolean;
65
+ };
66
+ useCandidates(transactionId: string): {
67
+ data: BankMatchCandidate[];
68
+ loading: boolean;
69
+ };
70
+ confirmMatch(transactionId: string, invoiceId: string): Promise<void>;
71
+ rejectMatch(transactionId: string, invoiceId: string): Promise<void>;
72
+ noReceipt?: {
73
+ mark(transactionId: string, reason: string): Promise<void>;
74
+ clear(transactionId: string): Promise<void>;
75
+ reasons: {
76
+ value: string;
77
+ label: string;
78
+ }[];
79
+ };
80
+ manualSearch?: {
81
+ search(query: string): Promise<BankInvoiceSearchResult[]>;
82
+ };
83
+ openInvoice: (invoiceId: string) => void;
84
+ formatMoney: (value: number | null) => string;
85
+ formatDate: (iso: string | null) => string;
86
+ import?: {
87
+ useAccountOptions(): {
88
+ data: {
89
+ id: string;
90
+ label: string;
91
+ }[];
92
+ loading: boolean;
93
+ };
94
+ importRows(accountId: string, filename: string, rows: NormalizedRow[]): Promise<{
95
+ imported: number;
96
+ skipped: number;
97
+ duplicates: number;
98
+ }>;
99
+ };
100
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,46 @@
1
+ export interface SyncLogRow {
2
+ id: string;
3
+ createdAt: string;
4
+ event: string;
5
+ level: string;
6
+ connectionId: string | null;
7
+ message: string | null;
8
+ counts: Record<string, unknown> | null;
9
+ }
10
+ export interface SyncLogFilter {
11
+ event?: string;
12
+ level?: string;
13
+ connectionId?: string;
14
+ from?: string;
15
+ to?: string;
16
+ page: number;
17
+ pageSize: number;
18
+ refreshMs: number;
19
+ }
20
+ export interface SyncLogAdapter {
21
+ useLogsPage(filter: SyncLogFilter): {
22
+ data: {
23
+ rows: SyncLogRow[];
24
+ total: number;
25
+ } | undefined;
26
+ isFetching: boolean;
27
+ dataUpdatedAt: number;
28
+ error: unknown;
29
+ refetch: () => void;
30
+ };
31
+ useFacets(): {
32
+ data: {
33
+ events: string[];
34
+ levels: string[];
35
+ } | undefined;
36
+ };
37
+ useConnections(): {
38
+ data: {
39
+ id: string;
40
+ label: string;
41
+ }[];
42
+ };
43
+ formatDateTime: (iso: string) => string;
44
+ eventLabel: (event: string) => string;
45
+ countLabel: (key: string) => string;
46
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,94 @@
1
+ export type BwaBlock = "revenue" | "cost_of_goods" | "costs" | "neutral" | "taxes" | "special_case";
2
+ export type CategoryDirection = "incoming" | "outgoing";
3
+ export interface CategoryRecord {
4
+ id: string;
5
+ code: string;
6
+ name: string;
7
+ parentId: string | null;
8
+ bwaBlock: BwaBlock;
9
+ bwaLine: string;
10
+ direction: CategoryDirection;
11
+ sortOrder: number;
12
+ isCatchall: boolean;
13
+ isExcludedFromPnl: boolean;
14
+ isActive: boolean;
15
+ note: string | null;
16
+ }
17
+ export interface NewCategory {
18
+ code: string;
19
+ name: string;
20
+ parentId: string | null;
21
+ bwaBlock: BwaBlock;
22
+ bwaLine: string;
23
+ direction: CategoryDirection;
24
+ note: string | null;
25
+ }
26
+ export interface AssignmentRuleScopeChip {
27
+ label: string;
28
+ value: string;
29
+ }
30
+ export interface AssignmentRuleRow {
31
+ id: string;
32
+ categoryLabel: string;
33
+ scopeChips: AssignmentRuleScopeChip[];
34
+ isActive: boolean;
35
+ note: string | null;
36
+ createdAt: string;
37
+ }
38
+ export interface NewAssignmentRule {
39
+ categoryId: string;
40
+ supplierId: string | null;
41
+ propertyId: string | null;
42
+ companyId: string | null;
43
+ referencePattern: string | null;
44
+ note: string | null;
45
+ }
46
+ export interface CategoryRulesAdapter {
47
+ useCategories(): {
48
+ data: CategoryRecord[];
49
+ loading: boolean;
50
+ error: unknown;
51
+ };
52
+ createCategory(input: NewCategory): Promise<void>;
53
+ updateCategory(id: string, input: Partial<NewCategory>): Promise<void>;
54
+ archiveCategory(id: string): Promise<void>;
55
+ moveCategory(id: string, direction: "up" | "down"): Promise<void>;
56
+ useRules(): {
57
+ data: AssignmentRuleRow[];
58
+ loading: boolean;
59
+ error: unknown;
60
+ };
61
+ useCategoryOptions(): {
62
+ data: {
63
+ id: string;
64
+ label: string;
65
+ }[];
66
+ loading: boolean;
67
+ };
68
+ useSupplierOptions(): {
69
+ data: {
70
+ id: string;
71
+ name: string;
72
+ }[];
73
+ loading: boolean;
74
+ };
75
+ usePropertyOptions(): {
76
+ data: {
77
+ id: string;
78
+ code: string;
79
+ name: string | null;
80
+ }[];
81
+ loading: boolean;
82
+ };
83
+ useCompanyOptions(): {
84
+ data: {
85
+ id: string;
86
+ code: string;
87
+ name: string;
88
+ }[];
89
+ loading: boolean;
90
+ };
91
+ createRule(input: NewAssignmentRule): Promise<void>;
92
+ setRuleActive(id: string, active: boolean): Promise<void>;
93
+ deleteRule(id: string): Promise<void>;
94
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,85 @@
1
+ import type { QueryResult } from "../lib/query-result";
2
+ import type { StatusTone } from "./processing-log";
3
+ export interface Company {
4
+ id: string;
5
+ code: string;
6
+ name: string;
7
+ area: string | null;
8
+ archivedAt: string | null;
9
+ archiveReason: string | null;
10
+ createdAt: string | null;
11
+ updatedAt: string | null;
12
+ }
13
+ export interface CompanyInvoiceTotals {
14
+ totalAmount: number;
15
+ invoiceCount: number;
16
+ }
17
+ export interface CompanyInvoice {
18
+ id: string;
19
+ invoiceNumber: string | null;
20
+ propertyCode: string | null;
21
+ documentDate: string | null;
22
+ amountGross: number | null;
23
+ status: string | null;
24
+ }
25
+ export interface CompanyProperty {
26
+ id: string;
27
+ code: string;
28
+ name: string | null;
29
+ }
30
+ export interface PropertyCompanyLink {
31
+ propertyId: string;
32
+ companyId: string;
33
+ }
34
+ export interface CompanyAlias {
35
+ id: string;
36
+ alias: string;
37
+ isActive: boolean;
38
+ }
39
+ export interface CompanyChanges {
40
+ code?: string;
41
+ name?: string;
42
+ area?: string | null;
43
+ }
44
+ export declare const aliasClaimedByAnotherEntityError = "ALIAS_CLAIMED";
45
+ export declare const aliasAlreadyExistsError = "ALIAS_EXISTS";
46
+ export interface CompaniesAdapter {
47
+ useCompanies(query: {
48
+ includeArchived: boolean;
49
+ }): QueryResult<Company[]>;
50
+ useCompanyInvoiceTotals(): QueryResult<Map<string, CompanyInvoiceTotals>>;
51
+ useCompany(companyId: string): QueryResult<Company | null>;
52
+ useInvoicesForCompany(companyId: string, companyCode: string | undefined): QueryResult<CompanyInvoice[]>;
53
+ useProperties(): QueryResult<CompanyProperty[]>;
54
+ usePropertyCompanyLinks(): QueryResult<PropertyCompanyLink[]>;
55
+ useCompanyAliases(companyCode: string): QueryResult<CompanyAlias[]>;
56
+ createCompany(input: {
57
+ code: string;
58
+ name: string;
59
+ }): Promise<void>;
60
+ updateCompany(input: {
61
+ companyId: string;
62
+ changes: CompanyChanges;
63
+ }): Promise<void>;
64
+ archiveCompany(input: {
65
+ companyId: string;
66
+ reason: string;
67
+ }): Promise<void>;
68
+ restoreCompany(input: {
69
+ companyId: string;
70
+ }): Promise<void>;
71
+ addCompanyAlias(input: {
72
+ companyCode: string;
73
+ alias: string;
74
+ }): Promise<void>;
75
+ removeCompanyAlias(input: {
76
+ aliasId: string;
77
+ }): Promise<void>;
78
+ /** Selectable area-of-responsibility values; empty when the project has none. */
79
+ areaOptions: string[];
80
+ invoiceStatusTone: Record<string, StatusTone>;
81
+ openCompany(companyId: string): void;
82
+ openCompanyList(): void;
83
+ openProperty(propertyCode: string): void;
84
+ openInvoice(invoiceId: string): void;
85
+ }
@@ -0,0 +1,3 @@
1
+ // addCompanyAlias rejects with these exact messages so the page can pick the right toast.
2
+ export const aliasClaimedByAnotherEntityError = "ALIAS_CLAIMED";
3
+ export const aliasAlreadyExistsError = "ALIAS_EXISTS";
@@ -0,0 +1,71 @@
1
+ import type { QueryResult } from "../lib/query-result";
2
+ export interface Customer {
3
+ id: string;
4
+ companyId: string;
5
+ isCompany: boolean;
6
+ name: string;
7
+ contactPerson: string | null;
8
+ email: string | null;
9
+ phone: string | null;
10
+ addressStreet: string | null;
11
+ addressZip: string | null;
12
+ addressCity: string | null;
13
+ vatId: string | null;
14
+ customerNumber: string | null;
15
+ updatedAt: string;
16
+ }
17
+ export interface CustomerCompany {
18
+ id: string;
19
+ code: string;
20
+ name: string;
21
+ }
22
+ export type CustomerInvoiceStatus = "draft" | "open" | "paid" | "voided";
23
+ export interface CustomerInvoice {
24
+ id: string;
25
+ invoiceNumber: string | null;
26
+ invoiceDate: string | null;
27
+ dueDate: string | null;
28
+ amountGross: number | null;
29
+ status: CustomerInvoiceStatus;
30
+ }
31
+ export interface CustomerInvoiceTotals {
32
+ invoiceCount: number;
33
+ totalAmount: number;
34
+ overdueCount: number;
35
+ }
36
+ export interface NewCustomerInput {
37
+ companyId: string;
38
+ isCompany: boolean;
39
+ name: string;
40
+ contactPerson: string | null;
41
+ email: string | null;
42
+ phone: string | null;
43
+ addressStreet: string | null;
44
+ addressZip: string | null;
45
+ addressCity: string | null;
46
+ vatId: string | null;
47
+ }
48
+ export interface CustomerUpdateInput {
49
+ name: string;
50
+ contactPerson: string | null;
51
+ email: string | null;
52
+ phone: string | null;
53
+ addressStreet: string | null;
54
+ addressZip: string | null;
55
+ addressCity: string | null;
56
+ vatId: string | null;
57
+ customerNumber: string | null;
58
+ }
59
+ export interface CustomersAdapter {
60
+ useCustomers(): QueryResult<Customer[]>;
61
+ useCustomer(customerId: string): QueryResult<Customer | null>;
62
+ useCompanies(): QueryResult<CustomerCompany[]>;
63
+ /** Pre-aggregated invoice totals for the list, keyed by customer id. */
64
+ useInvoiceTotalsByCustomer(): QueryResult<Record<string, CustomerInvoiceTotals>>;
65
+ useCustomerInvoices(customerId: string): QueryResult<CustomerInvoice[]>;
66
+ createCustomer(input: NewCustomerInput): Promise<void>;
67
+ updateCustomer(customerId: string, input: CustomerUpdateInput): Promise<void>;
68
+ deleteCustomer(customerId: string, reason: string): Promise<void>;
69
+ openCustomer(customerId: string): void;
70
+ openCustomerList(): void;
71
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { QueryResult } from "../lib/query-result";
2
+ export declare const EXCLUSION_SCOPES_BEFORE_READING: readonly ["sender", "subject", "filename", "envelope"];
3
+ export declare const EXCLUSION_SCOPES_AFTER_READING: readonly ["party", "supplier", "body", "company", "property"];
4
+ export type ExclusionScope = (typeof EXCLUSION_SCOPES_BEFORE_READING)[number] | (typeof EXCLUSION_SCOPES_AFTER_READING)[number];
5
+ export interface ExclusionRule {
6
+ id: string;
7
+ scope: ExclusionScope;
8
+ term: string;
9
+ note: string | null;
10
+ isActive: boolean;
11
+ }
12
+ export interface ExclusionImpact {
13
+ supported: boolean;
14
+ matchCount: number;
15
+ totalCount: number;
16
+ }
17
+ export interface ExclusionRulesAdapter {
18
+ useExclusionRules(): QueryResult<ExclusionRule[]>;
19
+ useExclusionImpact(query: {
20
+ scope: ExclusionScope;
21
+ term: string;
22
+ enabled: boolean;
23
+ }): QueryResult<ExclusionImpact>;
24
+ createExclusionRule(input: {
25
+ scope: ExclusionScope;
26
+ term: string;
27
+ note: string;
28
+ }): Promise<void>;
29
+ setExclusionRuleActive(input: {
30
+ id: string;
31
+ isActive: boolean;
32
+ }): Promise<void>;
33
+ deleteExclusionRule(id: string): Promise<void>;
34
+ }