@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.
- package/README.md +125 -0
- package/cli/hub-kit.mjs +112 -0
- package/dist/adapters/bank-reconciliation.d.ts +100 -0
- package/dist/adapters/bank-reconciliation.js +1 -0
- package/dist/adapters/bank-sync-log.d.ts +46 -0
- package/dist/adapters/bank-sync-log.js +1 -0
- package/dist/adapters/category-rules.d.ts +94 -0
- package/dist/adapters/category-rules.js +1 -0
- package/dist/adapters/companies.d.ts +85 -0
- package/dist/adapters/companies.js +3 -0
- package/dist/adapters/customers.d.ts +71 -0
- package/dist/adapters/customers.js +1 -0
- package/dist/adapters/exclusion-rules.d.ts +34 -0
- package/dist/adapters/exclusion-rules.js +15 -0
- package/dist/adapters/file-naming.d.ts +36 -0
- package/dist/adapters/file-naming.js +1 -0
- package/dist/adapters/index.d.ts +24 -0
- package/dist/adapters/index.js +1 -0
- package/dist/adapters/invoice-detail.d.ts +126 -0
- package/dist/adapters/invoice-detail.js +1 -0
- package/dist/adapters/invoice-list.d.ts +63 -0
- package/dist/adapters/invoice-list.js +1 -0
- package/dist/adapters/invoice-upload.d.ts +26 -0
- package/dist/adapters/invoice-upload.js +1 -0
- package/dist/adapters/manual-bookings.d.ts +56 -0
- package/dist/adapters/manual-bookings.js +1 -0
- package/dist/adapters/notifications.d.ts +31 -0
- package/dist/adapters/notifications.js +1 -0
- package/dist/adapters/open-items.d.ts +42 -0
- package/dist/adapters/open-items.js +1 -0
- package/dist/adapters/opos-whitelist.d.ts +38 -0
- package/dist/adapters/opos-whitelist.js +1 -0
- package/dist/adapters/outgoing-invoices.d.ts +32 -0
- package/dist/adapters/outgoing-invoices.js +1 -0
- package/dist/adapters/overview.d.ts +68 -0
- package/dist/adapters/overview.js +1 -0
- package/dist/adapters/processing-log.d.ts +48 -0
- package/dist/adapters/processing-log.js +1 -0
- package/dist/adapters/properties.d.ts +87 -0
- package/dist/adapters/properties.js +1 -0
- package/dist/adapters/supplier-detail.d.ts +64 -0
- package/dist/adapters/supplier-detail.js +1 -0
- package/dist/adapters/supplier-list.d.ts +21 -0
- package/dist/adapters/supplier-list.js +1 -0
- package/dist/adapters/team.d.ts +79 -0
- package/dist/adapters/team.js +1 -0
- package/dist/adapters/trash.d.ts +26 -0
- package/dist/adapters/trash.js +1 -0
- package/dist/adapters/vat-rules.d.ts +83 -0
- package/dist/adapters/vat-rules.js +1 -0
- package/dist/components/access/index.d.ts +3 -0
- package/dist/components/access/index.js +3 -0
- package/dist/components/access/permission-checklist.d.ts +13 -0
- package/dist/components/access/permission-checklist.js +19 -0
- package/dist/components/access/permission-matrix.d.ts +12 -0
- package/dist/components/access/permission-matrix.js +18 -0
- package/dist/components/access/types.d.ts +15 -0
- package/dist/components/access/types.js +1 -0
- package/dist/components/dashboard/date-range-calendar.d.ts +19 -0
- package/dist/components/dashboard/date-range-calendar.js +97 -0
- package/dist/components/dashboard/index.d.ts +23 -0
- package/dist/components/dashboard/index.js +14 -0
- package/dist/components/dashboard/kpi-card.d.ts +13 -0
- package/dist/components/dashboard/kpi-card.js +7 -0
- package/dist/components/dashboard/money-cards-row.d.ts +29 -0
- package/dist/components/dashboard/money-cards-row.js +28 -0
- package/dist/components/dashboard/money-trend-chart.d.ts +13 -0
- package/dist/components/dashboard/money-trend-chart.js +16 -0
- package/dist/components/dashboard/panel.d.ts +9 -0
- package/dist/components/dashboard/panel.js +5 -0
- package/dist/components/dashboard/period-picker.d.ts +25 -0
- package/dist/components/dashboard/period-picker.js +82 -0
- package/dist/components/dashboard/periods.d.ts +13 -0
- package/dist/components/dashboard/periods.js +63 -0
- package/dist/components/dashboard/pipeline-stages-panel.d.ts +14 -0
- package/dist/components/dashboard/pipeline-stages-panel.js +12 -0
- package/dist/components/dashboard/processing-summary-panel.d.ts +34 -0
- package/dist/components/dashboard/processing-summary-panel.js +11 -0
- package/dist/components/dashboard/ranked-bars.d.ts +15 -0
- package/dist/components/dashboard/ranked-bars.js +16 -0
- package/dist/components/dashboard/ranked-list-panel.d.ts +14 -0
- package/dist/components/dashboard/ranked-list-panel.js +9 -0
- package/dist/components/dashboard/stage-tiles.d.ts +15 -0
- package/dist/components/dashboard/stage-tiles.js +6 -0
- package/dist/components/dashboard/stat-rows-panel.d.ts +25 -0
- package/dist/components/dashboard/stat-rows-panel.js +7 -0
- package/dist/components/dashboard/stat-tile.d.ts +20 -0
- package/dist/components/dashboard/stat-tile.js +9 -0
- package/dist/components/feedback/index.d.ts +4 -0
- package/dist/components/feedback/index.js +2 -0
- package/dist/components/feedback/query-states.d.ts +27 -0
- package/dist/components/feedback/query-states.js +38 -0
- package/dist/components/feedback/table-pagination.d.ts +20 -0
- package/dist/components/feedback/table-pagination.js +15 -0
- package/dist/components/invoice-queue/index.d.ts +5 -0
- package/dist/components/invoice-queue/index.js +3 -0
- package/dist/components/invoice-queue/next-action-cell.d.ts +5 -0
- package/dist/components/invoice-queue/next-action-cell.js +9 -0
- package/dist/components/invoice-queue/queue-kpi-card.d.ts +19 -0
- package/dist/components/invoice-queue/queue-kpi-card.js +31 -0
- package/dist/components/invoice-queue/queue-kpi-row.d.ts +22 -0
- package/dist/components/invoice-queue/queue-kpi-row.js +12 -0
- package/dist/components/notifications/alerts.d.ts +25 -0
- package/dist/components/notifications/alerts.js +66 -0
- package/dist/components/notifications/bell.d.ts +14 -0
- package/dist/components/notifications/bell.js +17 -0
- package/dist/components/notifications/highlight.d.ts +4 -0
- package/dist/components/notifications/highlight.js +7 -0
- package/dist/components/notifications/index.d.ts +7 -0
- package/dist/components/notifications/index.js +6 -0
- package/dist/components/notifications/reminder-dialog.d.ts +24 -0
- package/dist/components/notifications/reminder-dialog.js +54 -0
- package/dist/components/notifications/types.d.ts +27 -0
- package/dist/components/notifications/types.js +1 -0
- package/dist/components/notifications/use-notification-acks.d.ts +7 -0
- package/dist/components/notifications/use-notification-acks.js +37 -0
- package/dist/components/shell/breadcrumbs.d.ts +7 -0
- package/dist/components/shell/breadcrumbs.js +38 -0
- package/dist/components/shell/index.d.ts +3 -0
- package/dist/components/shell/index.js +3 -0
- package/dist/components/shell/shell.d.ts +30 -0
- package/dist/components/shell/shell.js +110 -0
- package/dist/components/shell/types.d.ts +23 -0
- package/dist/components/shell/types.js +3 -0
- package/dist/components/tour/find-target.d.ts +1 -0
- package/dist/components/tour/find-target.js +3 -0
- package/dist/components/tour/index.d.ts +14 -0
- package/dist/components/tour/index.js +8 -0
- package/dist/components/tour/labels.d.ts +10 -0
- package/dist/components/tour/labels.js +9 -0
- package/dist/components/tour/seen-store.d.ts +3 -0
- package/dist/components/tour/seen-store.js +34 -0
- package/dist/components/tour/tour-blocks.d.ts +4 -0
- package/dist/components/tour/tour-blocks.js +27 -0
- package/dist/components/tour/tour-button.d.ts +4 -0
- package/dist/components/tour/tour-button.js +12 -0
- package/dist/components/tour/tour-card.d.ts +11 -0
- package/dist/components/tour/tour-card.js +7 -0
- package/dist/components/tour/tour-context.d.ts +16 -0
- package/dist/components/tour/tour-context.js +2 -0
- package/dist/components/tour/tour-overlay.d.ts +1 -0
- package/dist/components/tour/tour-overlay.js +165 -0
- package/dist/components/tour/tour-provider.d.ts +9 -0
- package/dist/components/tour/tour-provider.js +80 -0
- package/dist/components/tour/types.d.ts +44 -0
- package/dist/components/tour/types.js +1 -0
- package/dist/components/tour/use-tour.d.ts +3 -0
- package/dist/components/tour/use-tour.js +9 -0
- package/dist/hooks/use-mobile.d.ts +1 -0
- package/dist/hooks/use-mobile.js +15 -0
- package/dist/i18n/index.d.ts +15 -0
- package/dist/i18n/index.js +15 -0
- package/dist/lib/bank-import/classify.d.ts +8 -0
- package/dist/lib/bank-import/classify.js +89 -0
- package/dist/lib/bank-import/column-guess.d.ts +2 -0
- package/dist/lib/bank-import/column-guess.js +40 -0
- package/dist/lib/bank-import/csv.d.ts +3 -0
- package/dist/lib/bank-import/csv.js +20 -0
- package/dist/lib/bank-import/duplicates.d.ts +2 -0
- package/dist/lib/bank-import/duplicates.js +21 -0
- package/dist/lib/bank-import/index.d.ts +12 -0
- package/dist/lib/bank-import/index.js +9 -0
- package/dist/lib/bank-import/mapping-storage.d.ts +3 -0
- package/dist/lib/bank-import/mapping-storage.js +29 -0
- package/dist/lib/bank-import/normalize.d.ts +4 -0
- package/dist/lib/bank-import/normalize.js +82 -0
- package/dist/lib/bank-import/parse-file.d.ts +7 -0
- package/dist/lib/bank-import/parse-file.js +23 -0
- package/dist/lib/bank-import/types.d.ts +31 -0
- package/dist/lib/bank-import/types.js +1 -0
- package/dist/lib/bank-import/xlsx.d.ts +2 -0
- package/dist/lib/bank-import/xlsx.js +25 -0
- package/dist/lib/class-names.d.ts +2 -0
- package/dist/lib/class-names.js +5 -0
- package/dist/lib/download.d.ts +2 -0
- package/dist/lib/download.js +14 -0
- package/dist/lib/formatters.d.ts +6 -0
- package/dist/lib/formatters.js +24 -0
- package/dist/lib/index.d.ts +9 -0
- package/dist/lib/index.js +6 -0
- package/dist/lib/opos-whitelist/index.d.ts +2 -0
- package/dist/lib/opos-whitelist/index.js +1 -0
- package/dist/lib/opos-whitelist/opos.d.ts +14 -0
- package/dist/lib/opos-whitelist/opos.js +49 -0
- package/dist/lib/query-result.d.ts +12 -0
- package/dist/lib/query-result.js +1 -0
- package/dist/lib/tour-placeholders/index.d.ts +2 -0
- package/dist/lib/tour-placeholders/index.js +1 -0
- package/dist/lib/tour-placeholders/overview.d.ts +12 -0
- package/dist/lib/tour-placeholders/overview.js +139 -0
- package/dist/pages/bank-accounts/BankAccountsPage.d.ts +7 -0
- package/dist/pages/bank-accounts/BankAccountsPage.js +21 -0
- package/dist/pages/bank-accounts/index.d.ts +4 -0
- package/dist/pages/bank-accounts/index.js +2 -0
- package/dist/pages/bank-accounts/labels.d.ts +15 -0
- package/dist/pages/bank-accounts/labels.js +14 -0
- package/dist/pages/bank-import/BankImportWizard.d.ts +9 -0
- package/dist/pages/bank-import/BankImportWizard.js +158 -0
- package/dist/pages/bank-import/index.d.ts +4 -0
- package/dist/pages/bank-import/index.js +2 -0
- package/dist/pages/bank-import/labels.d.ts +44 -0
- package/dist/pages/bank-import/labels.js +43 -0
- package/dist/pages/bank-sync-log/BankSyncLogPage.d.ts +7 -0
- package/dist/pages/bank-sync-log/BankSyncLogPage.js +77 -0
- package/dist/pages/bank-sync-log/index.d.ts +4 -0
- package/dist/pages/bank-sync-log/index.js +2 -0
- package/dist/pages/bank-sync-log/labels.d.ts +21 -0
- package/dist/pages/bank-sync-log/labels.js +20 -0
- package/dist/pages/bank-transactions/BankMatchPanel.d.ts +8 -0
- package/dist/pages/bank-transactions/BankMatchPanel.js +75 -0
- package/dist/pages/bank-transactions/BankTransactionsPage.d.ts +7 -0
- package/dist/pages/bank-transactions/BankTransactionsPage.js +59 -0
- package/dist/pages/bank-transactions/badges.d.ts +8 -0
- package/dist/pages/bank-transactions/badges.js +24 -0
- package/dist/pages/bank-transactions/index.d.ts +6 -0
- package/dist/pages/bank-transactions/index.js +4 -0
- package/dist/pages/bank-transactions/labels.d.ts +41 -0
- package/dist/pages/bank-transactions/labels.js +40 -0
- package/dist/pages/bank-transactions/sort-control.d.ts +17 -0
- package/dist/pages/bank-transactions/sort-control.js +8 -0
- package/dist/pages/bank-transactions/use-table-view.d.ts +23 -0
- package/dist/pages/bank-transactions/use-table-view.js +54 -0
- package/dist/pages/category-rules/CategoryRulesPage.d.ts +7 -0
- package/dist/pages/category-rules/CategoryRulesPage.js +160 -0
- package/dist/pages/category-rules/index.d.ts +4 -0
- package/dist/pages/category-rules/index.js +2 -0
- package/dist/pages/category-rules/labels.d.ts +66 -0
- package/dist/pages/category-rules/labels.js +72 -0
- package/dist/pages/companies/company-detail-page.d.ts +10 -0
- package/dist/pages/companies/company-detail-page.js +184 -0
- package/dist/pages/companies/company-form.d.ts +20 -0
- package/dist/pages/companies/company-form.js +23 -0
- package/dist/pages/companies/company-list-page.d.ts +9 -0
- package/dist/pages/companies/company-list-page.js +109 -0
- package/dist/pages/companies/known-spellings-card.d.ts +8 -0
- package/dist/pages/companies/known-spellings-card.js +65 -0
- package/dist/pages/companies/labels.d.ts +105 -0
- package/dist/pages/companies/labels.js +104 -0
- package/dist/pages/companies/sort-control.d.ts +17 -0
- package/dist/pages/companies/sort-control.js +8 -0
- package/dist/pages/companies/use-infinite-rows.d.ts +6 -0
- package/dist/pages/companies/use-infinite-rows.js +24 -0
- package/dist/pages/companies/use-table-view.d.ts +23 -0
- package/dist/pages/companies/use-table-view.js +56 -0
- package/dist/pages/customers/company-chip.d.ts +6 -0
- package/dist/pages/customers/company-chip.js +9 -0
- package/dist/pages/customers/copy-button.d.ts +6 -0
- package/dist/pages/customers/copy-button.js +31 -0
- package/dist/pages/customers/customer-detail-page.d.ts +10 -0
- package/dist/pages/customers/customer-detail-page.js +83 -0
- package/dist/pages/customers/customer-list-page.d.ts +9 -0
- package/dist/pages/customers/customer-list-page.js +65 -0
- package/dist/pages/customers/edit-customer-dialog.d.ts +9 -0
- package/dist/pages/customers/edit-customer-dialog.js +72 -0
- package/dist/pages/customers/form-hints.d.ts +6 -0
- package/dist/pages/customers/form-hints.js +9 -0
- package/dist/pages/customers/invoice-status-badge.d.ts +10 -0
- package/dist/pages/customers/invoice-status-badge.js +22 -0
- package/dist/pages/customers/labels.d.ts +116 -0
- package/dist/pages/customers/labels.js +117 -0
- package/dist/pages/customers/new-customer-dialog.d.ts +6 -0
- package/dist/pages/customers/new-customer-dialog.js +93 -0
- package/dist/pages/customers/sort-control.d.ts +14 -0
- package/dist/pages/customers/sort-control.js +9 -0
- package/dist/pages/customers/use-table-view.d.ts +23 -0
- package/dist/pages/customers/use-table-view.js +56 -0
- package/dist/pages/exclusion-rules/exclusion-rules-page.d.ts +7 -0
- package/dist/pages/exclusion-rules/exclusion-rules-page.js +114 -0
- package/dist/pages/exclusion-rules/labels.d.ts +53 -0
- package/dist/pages/exclusion-rules/labels.js +61 -0
- package/dist/pages/file-naming/build-filename.d.ts +3 -0
- package/dist/pages/file-naming/build-filename.js +82 -0
- package/dist/pages/file-naming/file-naming-page.d.ts +10 -0
- package/dist/pages/file-naming/file-naming-page.js +120 -0
- package/dist/pages/file-naming/labels.d.ts +44 -0
- package/dist/pages/file-naming/labels.js +44 -0
- package/dist/pages/index.d.ts +63 -0
- package/dist/pages/index.js +48 -0
- package/dist/pages/invoice-detail/InvoiceDetailPage.d.ts +11 -0
- package/dist/pages/invoice-detail/InvoiceDetailPage.js +292 -0
- package/dist/pages/invoice-detail/OutgoingInvoiceFlag.d.ts +26 -0
- package/dist/pages/invoice-detail/OutgoingInvoiceFlag.js +16 -0
- package/dist/pages/invoice-detail/ReviewBadge.d.ts +15 -0
- package/dist/pages/invoice-detail/ReviewBadge.js +23 -0
- package/dist/pages/invoice-detail/ReviewCard.d.ts +17 -0
- package/dist/pages/invoice-detail/ReviewCard.js +12 -0
- package/dist/pages/invoice-detail/SideBySide.d.ts +5 -0
- package/dist/pages/invoice-detail/SideBySide.js +5 -0
- package/dist/pages/invoice-detail/WorkflowHistoryList.d.ts +23 -0
- package/dist/pages/invoice-detail/WorkflowHistoryList.js +32 -0
- package/dist/pages/invoice-detail/WorkflowLadder.d.ts +20 -0
- package/dist/pages/invoice-detail/WorkflowLadder.js +16 -0
- package/dist/pages/invoice-detail/history.d.ts +23 -0
- package/dist/pages/invoice-detail/history.js +76 -0
- package/dist/pages/invoice-detail/index.d.ts +21 -0
- package/dist/pages/invoice-detail/index.js +11 -0
- package/dist/pages/invoice-detail/labels.d.ts +79 -0
- package/dist/pages/invoice-detail/labels.js +139 -0
- package/dist/pages/invoice-detail/pipeline-types.d.ts +58 -0
- package/dist/pages/invoice-detail/pipeline-types.js +1 -0
- package/dist/pages/invoice-detail/review-recheck.d.ts +8 -0
- package/dist/pages/invoice-detail/review-recheck.js +103 -0
- package/dist/pages/invoice-detail/review.d.ts +91 -0
- package/dist/pages/invoice-detail/review.js +310 -0
- package/dist/pages/invoice-list/badges.d.ts +23 -0
- package/dist/pages/invoice-list/badges.js +26 -0
- package/dist/pages/invoice-list/index.d.ts +5 -0
- package/dist/pages/invoice-list/index.js +3 -0
- package/dist/pages/invoice-list/invoice-list-page.d.ts +13 -0
- package/dist/pages/invoice-list/invoice-list-page.js +114 -0
- package/dist/pages/invoice-list/labels.d.ts +36 -0
- package/dist/pages/invoice-list/labels.js +29 -0
- package/dist/pages/invoice-list/sort-control.d.ts +17 -0
- package/dist/pages/invoice-list/sort-control.js +8 -0
- package/dist/pages/invoice-list/use-table-view.d.ts +23 -0
- package/dist/pages/invoice-list/use-table-view.js +54 -0
- package/dist/pages/invoice-upload/InvoiceUploadPage.d.ts +7 -0
- package/dist/pages/invoice-upload/InvoiceUploadPage.js +115 -0
- package/dist/pages/invoice-upload/index.d.ts +4 -0
- package/dist/pages/invoice-upload/index.js +2 -0
- package/dist/pages/invoice-upload/labels.d.ts +29 -0
- package/dist/pages/invoice-upload/labels.js +28 -0
- package/dist/pages/manual-bookings/ManualBookingsPage.d.ts +7 -0
- package/dist/pages/manual-bookings/ManualBookingsPage.js +161 -0
- package/dist/pages/manual-bookings/index.d.ts +4 -0
- package/dist/pages/manual-bookings/index.js +2 -0
- package/dist/pages/manual-bookings/labels.d.ts +53 -0
- package/dist/pages/manual-bookings/labels.js +52 -0
- package/dist/pages/notifications/labels.d.ts +22 -0
- package/dist/pages/notifications/labels.js +21 -0
- package/dist/pages/notifications/notifications-page.d.ts +14 -0
- package/dist/pages/notifications/notifications-page.js +81 -0
- package/dist/pages/open-items/OpenItemsPage.d.ts +11 -0
- package/dist/pages/open-items/OpenItemsPage.js +110 -0
- package/dist/pages/open-items/index.d.ts +6 -0
- package/dist/pages/open-items/index.js +3 -0
- package/dist/pages/open-items/labels.d.ts +37 -0
- package/dist/pages/open-items/labels.js +36 -0
- package/dist/pages/open-items/urgency.d.ts +8 -0
- package/dist/pages/open-items/urgency.js +27 -0
- package/dist/pages/opos-whitelist/OposWhitelistPage.d.ts +7 -0
- package/dist/pages/opos-whitelist/OposWhitelistPage.js +165 -0
- package/dist/pages/opos-whitelist/index.d.ts +4 -0
- package/dist/pages/opos-whitelist/index.js +2 -0
- package/dist/pages/opos-whitelist/labels.d.ts +56 -0
- package/dist/pages/opos-whitelist/labels.js +70 -0
- package/dist/pages/outgoing-invoices/OutgoingInvoicesPage.d.ts +7 -0
- package/dist/pages/outgoing-invoices/OutgoingInvoicesPage.js +169 -0
- package/dist/pages/outgoing-invoices/index.d.ts +4 -0
- package/dist/pages/outgoing-invoices/index.js +2 -0
- package/dist/pages/outgoing-invoices/labels.d.ts +43 -0
- package/dist/pages/outgoing-invoices/labels.js +42 -0
- package/dist/pages/outgoing-invoices/sort-control.d.ts +17 -0
- package/dist/pages/outgoing-invoices/sort-control.js +8 -0
- package/dist/pages/outgoing-invoices/use-table-view.d.ts +23 -0
- package/dist/pages/outgoing-invoices/use-table-view.js +54 -0
- package/dist/pages/overview/labels.d.ts +35 -0
- package/dist/pages/overview/labels.js +34 -0
- package/dist/pages/overview/overview-page.d.ts +22 -0
- package/dist/pages/overview/overview-page.js +127 -0
- package/dist/pages/processing-log/labels.d.ts +54 -0
- package/dist/pages/processing-log/labels.js +53 -0
- package/dist/pages/processing-log/mail-parsing.d.ts +21 -0
- package/dist/pages/processing-log/mail-parsing.js +52 -0
- package/dist/pages/processing-log/processing-log-page.d.ts +9 -0
- package/dist/pages/processing-log/processing-log-page.js +206 -0
- package/dist/pages/properties/badges.d.ts +20 -0
- package/dist/pages/properties/badges.js +45 -0
- package/dist/pages/properties/company-assignment-field.d.ts +11 -0
- package/dist/pages/properties/company-assignment-field.js +13 -0
- package/dist/pages/properties/form-field.d.ts +6 -0
- package/dist/pages/properties/form-field.js +9 -0
- package/dist/pages/properties/labels.d.ts +124 -0
- package/dist/pages/properties/labels.js +128 -0
- package/dist/pages/properties/name-variants-card.d.ts +7 -0
- package/dist/pages/properties/name-variants-card.js +60 -0
- package/dist/pages/properties/property-detail-page.d.ts +10 -0
- package/dist/pages/properties/property-detail-page.js +150 -0
- package/dist/pages/properties/property-list-page.d.ts +13 -0
- package/dist/pages/properties/property-list-page.js +201 -0
- package/dist/pages/properties/sort-control.d.ts +14 -0
- package/dist/pages/properties/sort-control.js +9 -0
- package/dist/pages/properties/use-infinite-rows.d.ts +6 -0
- package/dist/pages/properties/use-infinite-rows.js +26 -0
- package/dist/pages/properties/use-table-view.d.ts +23 -0
- package/dist/pages/properties/use-table-view.js +56 -0
- package/dist/pages/supplier-detail/SupplierDetailPage.d.ts +10 -0
- package/dist/pages/supplier-detail/SupplierDetailPage.js +157 -0
- package/dist/pages/supplier-detail/index.d.ts +4 -0
- package/dist/pages/supplier-detail/index.js +2 -0
- package/dist/pages/supplier-detail/labels.d.ts +46 -0
- package/dist/pages/supplier-detail/labels.js +45 -0
- package/dist/pages/supplier-list/SupplierListPage.d.ts +9 -0
- package/dist/pages/supplier-list/SupplierListPage.js +102 -0
- package/dist/pages/supplier-list/index.d.ts +4 -0
- package/dist/pages/supplier-list/index.js +2 -0
- package/dist/pages/supplier-list/labels.d.ts +33 -0
- package/dist/pages/supplier-list/labels.js +32 -0
- package/dist/pages/supplier-list/sort-control.d.ts +17 -0
- package/dist/pages/supplier-list/sort-control.js +8 -0
- package/dist/pages/supplier-list/use-table-view.d.ts +23 -0
- package/dist/pages/supplier-list/use-table-view.js +54 -0
- package/dist/pages/team/account-dialogs.d.ts +12 -0
- package/dist/pages/team/account-dialogs.js +49 -0
- package/dist/pages/team/employee-editor.d.ts +19 -0
- package/dist/pages/team/employee-editor.js +124 -0
- package/dist/pages/team/labels.d.ts +99 -0
- package/dist/pages/team/labels.js +98 -0
- package/dist/pages/team/new-employee.d.ts +8 -0
- package/dist/pages/team/new-employee.js +103 -0
- package/dist/pages/team/roles-tab.d.ts +6 -0
- package/dist/pages/team/roles-tab.js +46 -0
- package/dist/pages/team/team-page.d.ts +7 -0
- package/dist/pages/team/team-page.js +81 -0
- package/dist/pages/team/temp-password-dialog.d.ts +11 -0
- package/dist/pages/team/temp-password-dialog.js +23 -0
- package/dist/pages/trash/labels.d.ts +68 -0
- package/dist/pages/trash/labels.js +69 -0
- package/dist/pages/trash/trash-page.d.ts +9 -0
- package/dist/pages/trash/trash-page.js +259 -0
- package/dist/pages/vat-rules/labels.d.ts +110 -0
- package/dist/pages/vat-rules/labels.js +109 -0
- package/dist/pages/vat-rules/new-rule-dialog.d.ts +7 -0
- package/dist/pages/vat-rules/new-rule-dialog.js +134 -0
- package/dist/pages/vat-rules/rule-row.d.ts +20 -0
- package/dist/pages/vat-rules/rule-row.js +120 -0
- package/dist/pages/vat-rules/vat-rules-page.d.ts +9 -0
- package/dist/pages/vat-rules/vat-rules-page.js +61 -0
- package/dist/ui/alert-dialog.d.ts +20 -0
- package/dist/ui/alert-dialog.js +41 -0
- package/dist/ui/badge.d.ts +9 -0
- package/dist/ui/badge.js +20 -0
- package/dist/ui/breadcrumb.d.ts +19 -0
- package/dist/ui/breadcrumb.js +23 -0
- package/dist/ui/button.d.ts +11 -0
- package/dist/ui/button.js +33 -0
- package/dist/ui/calendar.d.ts +8 -0
- package/dist/ui/calendar.js +75 -0
- package/dist/ui/card.d.ts +8 -0
- package/dist/ui/card.js +16 -0
- package/dist/ui/chart.d.ts +62 -0
- package/dist/ui/chart.js +118 -0
- package/dist/ui/checkbox.d.ts +4 -0
- package/dist/ui/checkbox.js +11 -0
- package/dist/ui/collapsible.d.ts +5 -0
- package/dist/ui/collapsible.js +5 -0
- package/dist/ui/combobox.d.ts +24 -0
- package/dist/ui/combobox.js +55 -0
- package/dist/ui/command.d.ts +80 -0
- package/dist/ui/command.js +29 -0
- package/dist/ui/dialog.d.ts +19 -0
- package/dist/ui/dialog.js +58 -0
- package/dist/ui/dropdown-menu.d.ts +27 -0
- package/dist/ui/dropdown-menu.js +33 -0
- package/dist/ui/field-context.d.ts +4 -0
- package/dist/ui/field-context.js +6 -0
- package/dist/ui/field.d.ts +3 -0
- package/dist/ui/field.js +8 -0
- package/dist/ui/icon-action.d.ts +3 -0
- package/dist/ui/icon-action.js +8 -0
- package/dist/ui/index.d.ts +32 -0
- package/dist/ui/index.js +32 -0
- package/dist/ui/input.d.ts +3 -0
- package/dist/ui/input.js +11 -0
- package/dist/ui/label.d.ts +5 -0
- package/dist/ui/label.js +15 -0
- package/dist/ui/multi-combobox.d.ts +18 -0
- package/dist/ui/multi-combobox.js +40 -0
- package/dist/ui/popover.d.ts +9 -0
- package/dist/ui/popover.js +12 -0
- package/dist/ui/scroll-area.d.ts +5 -0
- package/dist/ui/scroll-area.js +9 -0
- package/dist/ui/scroll-shadow.d.ts +8 -0
- package/dist/ui/scroll-shadow.js +57 -0
- package/dist/ui/select.d.ts +13 -0
- package/dist/ui/select.js +31 -0
- package/dist/ui/separator.d.ts +4 -0
- package/dist/ui/separator.js +7 -0
- package/dist/ui/sheet.d.ts +25 -0
- package/dist/ui/sheet.js +40 -0
- package/dist/ui/sidebar.d.ts +65 -0
- package/dist/ui/sidebar.js +207 -0
- package/dist/ui/skeleton.d.ts +2 -0
- package/dist/ui/skeleton.js +6 -0
- package/dist/ui/sonner.d.ts +5 -0
- package/dist/ui/sonner.js +13 -0
- package/dist/ui/switch.d.ts +4 -0
- package/dist/ui/switch.js +7 -0
- package/dist/ui/table.d.ts +12 -0
- package/dist/ui/table.js +24 -0
- package/dist/ui/tabs.d.ts +7 -0
- package/dist/ui/tabs.js +12 -0
- package/dist/ui/textarea.d.ts +3 -0
- package/dist/ui/textarea.js +11 -0
- package/dist/ui/tooltip.d.ts +7 -0
- package/dist/ui/tooltip.js +11 -0
- package/package.json +80 -0
- package/themes/TOKENS.md +57 -0
- 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
|
+
```
|
package/cli/hub-kit.mjs
ADDED
|
@@ -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,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
|
+
}
|