@spaceinvoices/react-ui 0.4.11 → 0.4.12
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/cli/dist/index.js +1 -1
- package/package.json +3 -2
- package/registry.json +30 -31
- package/src/common/autocomplete.tsx +41 -25
- package/src/components/activities/locales/bg.ts +21 -0
- package/src/components/activities/locales/cs.ts +21 -0
- package/src/components/activities/locales/en.ts +21 -0
- package/src/components/activities/locales/et.ts +21 -0
- package/src/components/activities/locales/fi.ts +21 -0
- package/src/components/activities/locales/is.ts +21 -0
- package/src/components/activities/locales/nb.ts +21 -0
- package/src/components/activities/locales/sk.ts +21 -0
- package/src/components/activities/locales/sv.ts +21 -0
- package/src/components/advance-invoices/advance-invoices.hooks.ts +2 -3
- package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +290 -69
- package/src/components/advance-invoices/create/locales/bg.ts +48 -0
- package/src/components/advance-invoices/create/locales/cs.ts +48 -0
- package/src/components/advance-invoices/create/locales/en.ts +48 -0
- package/src/components/advance-invoices/create/locales/et.ts +48 -0
- package/src/components/advance-invoices/create/locales/fi.ts +48 -0
- package/src/components/advance-invoices/create/locales/hr.ts +17 -17
- package/src/components/advance-invoices/create/locales/is.ts +48 -0
- package/src/components/advance-invoices/create/locales/nb.ts +48 -0
- package/src/components/advance-invoices/create/locales/sk.ts +48 -0
- package/src/components/advance-invoices/create/locales/sl.ts +9 -7
- package/src/components/advance-invoices/create/locales/sv.ts +48 -0
- package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +16 -2
- package/src/components/advance-invoices/list/list-row-actions.tsx +48 -16
- package/src/components/advance-invoices/list/list-table.tsx +33 -8
- package/src/components/advance-invoices/list/locales/bg.ts +51 -0
- package/src/components/advance-invoices/list/locales/cs.ts +51 -0
- package/src/components/advance-invoices/list/locales/en.ts +33 -2
- package/src/components/advance-invoices/list/locales/et.ts +51 -0
- package/src/components/advance-invoices/list/locales/fi.ts +51 -0
- package/src/components/advance-invoices/list/locales/hr.ts +15 -15
- package/src/components/advance-invoices/list/locales/is.ts +51 -0
- package/src/components/advance-invoices/list/locales/nb.ts +51 -0
- package/src/components/advance-invoices/list/locales/sk.ts +51 -0
- package/src/components/advance-invoices/list/locales/sv.ts +51 -0
- package/src/components/advance-invoices/list/use-advance-invoice-download.ts +3 -5
- package/src/components/common/autocomplete-locales.ts +101 -0
- package/src/components/company-registry/company-registry.hooks.ts +3 -7
- package/src/components/credit-notes/create/create-credit-note-form.tsx +211 -22
- package/src/components/credit-notes/create/locales/bg.ts +87 -0
- package/src/components/credit-notes/create/locales/cs.ts +87 -0
- package/src/components/credit-notes/create/locales/en.ts +87 -0
- package/src/components/credit-notes/create/locales/et.ts +87 -0
- package/src/components/credit-notes/create/locales/fi.ts +87 -0
- package/src/components/credit-notes/create/locales/hr.ts +24 -24
- package/src/components/credit-notes/create/locales/is.ts +87 -0
- package/src/components/credit-notes/create/locales/nb.ts +87 -0
- package/src/components/credit-notes/create/locales/sk.ts +87 -0
- package/src/components/credit-notes/create/locales/sl.ts +9 -9
- package/src/components/credit-notes/create/locales/sv.ts +87 -0
- package/src/components/credit-notes/create/prepare-credit-note-submission.ts +32 -0
- package/src/components/credit-notes/credit-notes.hooks.ts +15 -3
- package/src/components/credit-notes/list/list-row-actions.tsx +19 -7
- package/src/components/credit-notes/list/list-table.tsx +58 -7
- package/src/components/credit-notes/list/locales/bg.ts +48 -0
- package/src/components/credit-notes/list/locales/cs.ts +48 -0
- package/src/components/credit-notes/list/locales/en.ts +31 -2
- package/src/components/credit-notes/list/locales/et.ts +48 -0
- package/src/components/credit-notes/list/locales/fi.ts +48 -0
- package/src/components/credit-notes/list/locales/hr.ts +12 -12
- package/src/components/credit-notes/list/locales/is.ts +48 -0
- package/src/components/credit-notes/list/locales/nb.ts +48 -0
- package/src/components/credit-notes/list/locales/sk.ts +48 -0
- package/src/components/credit-notes/list/locales/sv.ts +48 -0
- package/src/components/credit-notes/list/use-credit-note-download.ts +3 -5
- package/src/components/customers/create-customer-form/locales/bg.ts +21 -0
- package/src/components/customers/create-customer-form/locales/cs.ts +21 -0
- package/src/components/customers/create-customer-form/locales/en.ts +21 -0
- package/src/components/customers/create-customer-form/locales/et.ts +21 -0
- package/src/components/customers/create-customer-form/locales/fi.ts +21 -0
- package/src/components/customers/create-customer-form/locales/hr.ts +11 -11
- package/src/components/customers/create-customer-form/locales/is.ts +21 -0
- package/src/components/customers/create-customer-form/locales/nb.ts +21 -0
- package/src/components/customers/create-customer-form/locales/sk.ts +21 -0
- package/src/components/customers/create-customer-form/locales/sv.ts +21 -0
- package/src/components/customers/customer-autocomplete.tsx +32 -4
- package/src/components/customers/customer-list-table/customer-list-table.tsx +8 -6
- package/src/components/customers/customer-list-table/locales/bg.ts +25 -0
- package/src/components/customers/customer-list-table/locales/cs.ts +25 -0
- package/src/components/customers/customer-list-table/locales/en.ts +17 -2
- package/src/components/customers/customer-list-table/locales/et.ts +25 -0
- package/src/components/customers/customer-list-table/locales/fi.ts +25 -0
- package/src/components/customers/customer-list-table/locales/hr.ts +11 -11
- package/src/components/customers/customer-list-table/locales/is.ts +25 -0
- package/src/components/customers/customer-list-table/locales/nb.ts +25 -0
- package/src/components/customers/customer-list-table/locales/sk.ts +25 -0
- package/src/components/customers/customer-list-table/locales/sv.ts +25 -0
- package/src/components/customers/customers.hooks.ts +14 -17
- package/src/components/customers/edit-customer-form/locales/bg.ts +13 -0
- package/src/components/customers/edit-customer-form/locales/cs.ts +13 -0
- package/src/components/customers/edit-customer-form/locales/en.ts +13 -0
- package/src/components/customers/edit-customer-form/locales/et.ts +13 -0
- package/src/components/customers/edit-customer-form/locales/fi.ts +13 -0
- package/src/components/customers/edit-customer-form/locales/hr.ts +5 -5
- package/src/components/customers/edit-customer-form/locales/is.ts +13 -0
- package/src/components/customers/edit-customer-form/locales/nb.ts +13 -0
- package/src/components/customers/edit-customer-form/locales/sk.ts +13 -0
- package/src/components/customers/edit-customer-form/locales/sv.ts +13 -0
- package/src/components/dashboard/collection-rate-card/collection-rate-card.tsx +7 -6
- package/src/components/dashboard/collection-rate-card/locales/en.ts +3 -0
- package/src/components/dashboard/collection-rate-card/use-collection-rate.ts +8 -7
- package/src/components/dashboard/invoice-status-chart/invoice-status-chart.tsx +7 -4
- package/src/components/dashboard/invoice-status-chart/locales/bg.ts +5 -5
- package/src/components/dashboard/invoice-status-chart/locales/cs.ts +5 -5
- package/src/components/dashboard/invoice-status-chart/locales/de.ts +1 -1
- package/src/components/dashboard/invoice-status-chart/locales/en.ts +10 -0
- package/src/components/dashboard/invoice-status-chart/locales/es.ts +1 -1
- package/src/components/dashboard/invoice-status-chart/locales/et.ts +5 -5
- package/src/components/dashboard/invoice-status-chart/locales/fi.ts +5 -5
- package/src/components/dashboard/invoice-status-chart/locales/fr.ts +1 -1
- package/src/components/dashboard/invoice-status-chart/locales/hr.ts +5 -5
- package/src/components/dashboard/invoice-status-chart/locales/is.ts +5 -5
- package/src/components/dashboard/invoice-status-chart/locales/it.ts +1 -1
- package/src/components/dashboard/invoice-status-chart/locales/nb.ts +5 -5
- package/src/components/dashboard/invoice-status-chart/locales/nl.ts +1 -1
- package/src/components/dashboard/invoice-status-chart/locales/pl.ts +1 -1
- package/src/components/dashboard/invoice-status-chart/locales/pt.ts +1 -1
- package/src/components/dashboard/invoice-status-chart/locales/sk.ts +5 -5
- package/src/components/dashboard/invoice-status-chart/locales/sl.ts +1 -1
- package/src/components/dashboard/invoice-status-chart/locales/sv.ts +5 -5
- package/src/components/dashboard/payment-methods-chart/locales/bg.ts +5 -5
- package/src/components/dashboard/payment-methods-chart/locales/cs.ts +5 -5
- package/src/components/dashboard/payment-methods-chart/locales/en.ts +12 -0
- package/src/components/dashboard/payment-methods-chart/locales/et.ts +5 -5
- package/src/components/dashboard/payment-methods-chart/locales/fi.ts +6 -6
- package/src/components/dashboard/payment-methods-chart/locales/hr.ts +3 -3
- package/src/components/dashboard/payment-methods-chart/locales/is.ts +5 -5
- package/src/components/dashboard/payment-methods-chart/locales/nb.ts +5 -5
- package/src/components/dashboard/payment-methods-chart/locales/sk.ts +5 -5
- package/src/components/dashboard/payment-methods-chart/locales/sv.ts +5 -5
- package/src/components/dashboard/payment-methods-chart/payment-methods-chart.tsx +4 -3
- package/src/components/dashboard/payment-trend-chart/locales/bg.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/locales/cs.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/locales/en.ts +6 -0
- package/src/components/dashboard/payment-trend-chart/locales/et.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/locales/fi.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/locales/is.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/locales/nb.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/locales/sk.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/locales/sv.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/payment-trend-chart.tsx +4 -3
- package/src/components/dashboard/payment-trend-chart/use-payment-trend.ts +12 -9
- package/src/components/dashboard/revenue-card.tsx +3 -3
- package/src/components/dashboard/revenue-trend-chart/locales/bg.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/locales/cs.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/locales/en.ts +6 -0
- package/src/components/dashboard/revenue-trend-chart/locales/et.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/locales/fi.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/locales/is.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/locales/nb.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/locales/sk.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/locales/sv.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/revenue-trend-chart.tsx +4 -3
- package/src/components/dashboard/revenue-trend-chart/use-revenue-trend.ts +4 -3
- package/src/components/dashboard/shared/local-date.ts +11 -0
- package/src/components/dashboard/shared/use-revenue-data.ts +6 -5
- package/src/components/dashboard/shared/use-stats-query.ts +7 -11
- package/src/components/dashboard/stat-card.tsx +3 -3
- package/src/components/dashboard/tax-collected-card/tax-collected-card.tsx +11 -9
- package/src/components/dashboard/tax-collected-card/use-tax-collected.ts +3 -2
- package/src/components/dashboard/top-customers-chart/locales/bg.ts +2 -2
- package/src/components/dashboard/top-customers-chart/locales/cs.ts +2 -2
- package/src/components/dashboard/top-customers-chart/locales/en.ts +7 -0
- package/src/components/dashboard/top-customers-chart/locales/et.ts +2 -2
- package/src/components/dashboard/top-customers-chart/locales/fi.ts +2 -2
- package/src/components/dashboard/top-customers-chart/locales/is.ts +2 -2
- package/src/components/dashboard/top-customers-chart/locales/nb.ts +2 -2
- package/src/components/dashboard/top-customers-chart/locales/sk.ts +2 -2
- package/src/components/dashboard/top-customers-chart/locales/sv.ts +2 -2
- package/src/components/dashboard/top-customers-chart/top-customers-chart.tsx +4 -3
- package/src/components/dashboard/top-customers-chart/use-top-customers.ts +7 -20
- package/src/components/delivery-notes/create/create-delivery-note-form.tsx +61 -31
- package/src/components/delivery-notes/create/locales/bg.ts +68 -0
- package/src/components/delivery-notes/create/locales/cs.ts +68 -0
- package/src/components/delivery-notes/create/locales/en.ts +68 -0
- package/src/components/delivery-notes/create/locales/et.ts +68 -0
- package/src/components/delivery-notes/create/locales/fi.ts +68 -0
- package/src/components/delivery-notes/create/locales/hr.ts +6 -6
- package/src/components/delivery-notes/create/locales/is.ts +68 -0
- package/src/components/delivery-notes/create/locales/nb.ts +68 -0
- package/src/components/delivery-notes/create/locales/sk.ts +68 -0
- package/src/components/delivery-notes/create/locales/sl.ts +5 -5
- package/src/components/delivery-notes/create/locales/sv.ts +68 -0
- package/src/components/delivery-notes/delivery-notes.hooks.ts +20 -3
- package/src/components/delivery-notes/list/list-row-actions.tsx +62 -16
- package/src/components/delivery-notes/list/list-table.tsx +42 -9
- package/src/components/delivery-notes/list/locales/bg.ts +40 -0
- package/src/components/delivery-notes/list/locales/cs.ts +40 -0
- package/src/components/delivery-notes/list/locales/et.ts +40 -0
- package/src/components/delivery-notes/list/locales/fi.ts +40 -0
- package/src/components/delivery-notes/list/locales/is.ts +40 -0
- package/src/components/delivery-notes/list/locales/nb.ts +40 -0
- package/src/components/delivery-notes/list/locales/sk.ts +40 -0
- package/src/components/delivery-notes/list/locales/sv.ts +40 -0
- package/src/components/delivery-notes/list/use-delivery-note-download.ts +3 -5
- package/src/components/documents/create/document-add-item-form.tsx +256 -147
- package/src/components/documents/create/document-add-item-tax-rate-field.tsx +2 -1
- package/src/components/documents/create/document-details-section.tsx +30 -12
- package/src/components/documents/create/document-item-validation.ts +50 -0
- package/src/components/documents/create/document-items-section.tsx +44 -6
- package/src/components/documents/create/document-recipient-section.tsx +10 -2
- package/src/components/documents/create/linked-documents-info.tsx +4 -3
- package/src/components/documents/create/live-preview.tsx +19 -15
- package/src/components/documents/create/mark-as-paid-section.tsx +77 -20
- package/src/components/documents/create/payment-rows.ts +291 -0
- package/src/components/documents/create/prepare-document-submission.ts +24 -13
- package/src/components/documents/create/scroll-to-first-invalid-field.ts +27 -0
- package/src/components/documents/create/smart-code-insert-button.tsx +5 -53
- package/src/components/documents/create/use-document-customer-form.ts +74 -25
- package/src/components/documents/documents.hooks.ts +3 -5
- package/src/components/documents/index.ts +1 -0
- package/src/components/documents/public/index.ts +1 -0
- package/src/components/documents/public/public-document-summary.tsx +343 -0
- package/src/components/documents/shared/document-preview-display.tsx +65 -39
- package/src/components/documents/shared/index.ts +6 -1
- package/src/components/documents/shared/scaled-document-preview.tsx +33 -19
- package/src/components/documents/types.ts +24 -0
- package/src/components/documents/view/document-actions-bar.tsx +241 -62
- package/src/components/documents/view/document-activities-list.tsx +23 -11
- package/src/components/documents/view/document-details-card.tsx +7 -27
- package/src/components/documents/view/document-payments-list.tsx +114 -57
- package/src/components/documents/view/document-relations-list.tsx +26 -6
- package/src/components/documents/view/document-sidebar.tsx +25 -3
- package/src/components/documents/view/document-version-history.tsx +137 -0
- package/src/components/documents/view/index.ts +1 -0
- package/src/components/documents/view/locales/bg.ts +143 -0
- package/src/components/documents/view/locales/cs.ts +143 -0
- package/src/components/documents/view/locales/de.ts +13 -0
- package/src/components/documents/view/locales/en.ts +143 -0
- package/src/components/documents/view/locales/es.ts +13 -0
- package/src/components/documents/view/locales/et.ts +143 -0
- package/src/components/documents/view/locales/fi.ts +143 -0
- package/src/components/documents/view/locales/fr.ts +13 -0
- package/src/components/documents/view/locales/hr.ts +13 -0
- package/src/components/documents/view/locales/is.ts +143 -0
- package/src/components/documents/view/locales/it.ts +13 -0
- package/src/components/documents/view/locales/nb.ts +143 -0
- package/src/components/documents/view/locales/nl.ts +13 -0
- package/src/components/documents/view/locales/pl.ts +13 -0
- package/src/components/documents/view/locales/pt.ts +13 -0
- package/src/components/documents/view/locales/sk.ts +143 -0
- package/src/components/documents/view/locales/sl.ts +13 -0
- package/src/components/documents/view/locales/sv.ts +143 -0
- package/src/components/documents/view/use-document-download.ts +18 -17
- package/src/components/entities/create-entity-form.tsx +200 -12
- package/src/components/entities/entities.hooks.ts +15 -7
- package/src/components/entities/entity-settings-form/entity-settings-form.tsx +121 -65
- package/src/components/entities/entity-settings-form/input-with-preview.tsx +28 -4
- package/src/components/entities/entity-settings-form/locales/bg.ts +199 -0
- package/src/components/entities/entity-settings-form/locales/cs.ts +199 -0
- package/src/components/entities/entity-settings-form/locales/de.ts +8 -3
- package/src/components/entities/entity-settings-form/locales/en.ts +199 -0
- package/src/components/entities/entity-settings-form/locales/es.ts +8 -3
- package/src/components/entities/entity-settings-form/locales/et.ts +198 -0
- package/src/components/entities/entity-settings-form/locales/fi.ts +199 -0
- package/src/components/entities/entity-settings-form/locales/fr.ts +8 -3
- package/src/components/entities/entity-settings-form/locales/hr.ts +16 -11
- package/src/components/entities/entity-settings-form/locales/is.ts +199 -0
- package/src/components/entities/entity-settings-form/locales/it.ts +8 -3
- package/src/components/entities/entity-settings-form/locales/nb.ts +199 -0
- package/src/components/entities/entity-settings-form/locales/nl.ts +8 -3
- package/src/components/entities/entity-settings-form/locales/pl.ts +8 -3
- package/src/components/entities/entity-settings-form/locales/pt.ts +8 -3
- package/src/components/entities/entity-settings-form/locales/sk.ts +199 -0
- package/src/components/entities/entity-settings-form/locales/sl.ts +20 -15
- package/src/components/entities/entity-settings-form/locales/sv.ts +205 -0
- package/src/components/entities/fina-settings-form/fina-operator-required-dialog.tsx +34 -9
- package/src/components/entities/fina-settings-form/fina-settings-form.tsx +2 -0
- package/src/components/entities/fina-settings-form/fina-settings.hooks.ts +14 -45
- package/src/components/entities/fina-settings-form/locales/bg.ts +163 -0
- package/src/components/entities/fina-settings-form/locales/cs.ts +163 -0
- package/src/components/entities/fina-settings-form/locales/et.ts +163 -0
- package/src/components/entities/fina-settings-form/locales/fi.ts +163 -0
- package/src/components/entities/fina-settings-form/locales/hr.ts +11 -10
- package/src/components/entities/fina-settings-form/locales/is.ts +164 -0
- package/src/components/entities/fina-settings-form/locales/nb.ts +163 -0
- package/src/components/entities/fina-settings-form/locales/sk.ts +163 -0
- package/src/components/entities/fina-settings-form/locales/sl.ts +8 -7
- package/src/components/entities/fina-settings-form/locales/sv.ts +165 -0
- package/src/components/entities/furs-settings-form/furs-operator-required-dialog.tsx +34 -9
- package/src/components/entities/furs-settings-form/furs-settings-form.tsx +13 -1
- package/src/components/entities/furs-settings-form/furs-settings.hooks.ts +141 -42
- package/src/components/entities/furs-settings-form/locales/bg.ts +242 -0
- package/src/components/entities/furs-settings-form/locales/cs.ts +241 -0
- package/src/components/entities/furs-settings-form/locales/de.ts +42 -15
- package/src/components/entities/furs-settings-form/locales/en.ts +24 -0
- package/src/components/entities/furs-settings-form/locales/es.ts +42 -15
- package/src/components/entities/furs-settings-form/locales/et.ts +242 -0
- package/src/components/entities/furs-settings-form/locales/fi.ts +243 -0
- package/src/components/entities/furs-settings-form/locales/fr.ts +43 -15
- package/src/components/entities/furs-settings-form/locales/hr.ts +44 -19
- package/src/components/entities/furs-settings-form/locales/is.ts +242 -0
- package/src/components/entities/furs-settings-form/locales/it.ts +42 -15
- package/src/components/entities/furs-settings-form/locales/nb.ts +242 -0
- package/src/components/entities/furs-settings-form/locales/nl.ts +42 -15
- package/src/components/entities/furs-settings-form/locales/pl.ts +40 -15
- package/src/components/entities/furs-settings-form/locales/pt.ts +42 -15
- package/src/components/entities/furs-settings-form/locales/sk.ts +243 -0
- package/src/components/entities/furs-settings-form/locales/sl.ts +34 -10
- package/src/components/entities/furs-settings-form/locales/sv.ts +242 -0
- package/src/components/entities/furs-settings-form/sections/enable-fiscalization-section.tsx +11 -0
- package/src/components/entities/furs-settings-form/sections/furs-internal-act-download-card.tsx +111 -0
- package/src/components/entities/furs-settings-form/sections/general-settings-section.tsx +27 -0
- package/src/components/entities/furs-settings-form/sections/premises-management-section.tsx +23 -16
- package/src/components/entities/furs-settings-form/sections/register-premise-dialog.tsx +89 -31
- package/src/components/entities/settings/branding-settings-form.tsx +11 -30
- package/src/components/entities/settings/company-settings-form.tsx +2 -1
- package/src/components/entities/settings/defaults-settings-form.tsx +106 -3
- package/src/components/entities/settings/email-settings-form.tsx +245 -3
- package/src/components/entities/settings/eslog-settings-form.tsx +2 -1
- package/src/components/entities/settings/number-format-settings-form.tsx +2 -1
- package/src/components/entities/settings/pdf-template-selector/locales/bg.ts +20 -0
- package/src/components/entities/settings/pdf-template-selector/locales/cs.ts +20 -0
- package/src/components/entities/settings/pdf-template-selector/locales/en.ts +20 -0
- package/src/components/entities/settings/pdf-template-selector/locales/et.ts +19 -0
- package/src/components/entities/settings/pdf-template-selector/locales/fi.ts +20 -0
- package/src/components/entities/settings/pdf-template-selector/locales/is.ts +19 -0
- package/src/components/entities/settings/pdf-template-selector/locales/nb.ts +19 -0
- package/src/components/entities/settings/pdf-template-selector/locales/sk.ts +20 -0
- package/src/components/entities/settings/pdf-template-selector/locales/sv.ts +19 -0
- package/src/components/entities/settings/tax-rules-settings-form.tsx +21 -6
- package/src/components/estimates/create/create-estimate-form.tsx +70 -34
- package/src/components/estimates/create/locales/bg.ts +76 -0
- package/src/components/estimates/create/locales/cs.ts +76 -0
- package/src/components/estimates/create/locales/en.ts +76 -0
- package/src/components/estimates/create/locales/et.ts +76 -0
- package/src/components/estimates/create/locales/fi.ts +76 -0
- package/src/components/estimates/create/locales/hr.ts +8 -8
- package/src/components/estimates/create/locales/is.ts +76 -0
- package/src/components/estimates/create/locales/nb.ts +76 -0
- package/src/components/estimates/create/locales/sk.ts +76 -0
- package/src/components/estimates/create/locales/sl.ts +8 -8
- package/src/components/estimates/create/locales/sv.ts +76 -0
- package/src/components/estimates/create/prepare-estimate-submission.ts +4 -1
- package/src/components/estimates/estimates.hooks.ts +15 -3
- package/src/components/estimates/list/list-row-actions.tsx +34 -7
- package/src/components/estimates/list/list-table.tsx +78 -10
- package/src/components/estimates/list/locales/bg.ts +38 -0
- package/src/components/estimates/list/locales/cs.ts +38 -0
- package/src/components/estimates/list/locales/en.ts +27 -2
- package/src/components/estimates/list/locales/et.ts +38 -0
- package/src/components/estimates/list/locales/fi.ts +38 -0
- package/src/components/estimates/list/locales/hr.ts +2 -2
- package/src/components/estimates/list/locales/is.ts +38 -0
- package/src/components/estimates/list/locales/nb.ts +38 -0
- package/src/components/estimates/list/locales/sk.ts +38 -0
- package/src/components/estimates/list/locales/sv.ts +38 -0
- package/src/components/estimates/list/use-estimate-download.ts +3 -5
- package/src/components/export/document-export-form.tsx +72 -15
- package/src/components/export/sales-per-item-export-form.tsx +3 -2
- package/src/components/invoices/create/create-invoice-form.tsx +294 -76
- package/src/components/invoices/create/eslog-validation.ts +97 -8
- package/src/components/invoices/create/locales/bg.ts +164 -0
- package/src/components/invoices/create/locales/cs.ts +164 -0
- package/src/components/invoices/create/locales/de.ts +24 -0
- package/src/components/invoices/create/locales/en.ts +164 -0
- package/src/components/invoices/create/locales/es.ts +24 -0
- package/src/components/invoices/create/locales/et.ts +164 -0
- package/src/components/invoices/create/locales/fi.ts +164 -0
- package/src/components/invoices/create/locales/fr.ts +23 -0
- package/src/components/invoices/create/locales/hr.ts +32 -9
- package/src/components/invoices/create/locales/is.ts +164 -0
- package/src/components/invoices/create/locales/it.ts +24 -0
- package/src/components/invoices/create/locales/nb.ts +164 -0
- package/src/components/invoices/create/locales/nl.ts +23 -0
- package/src/components/invoices/create/locales/pl.ts +23 -0
- package/src/components/invoices/create/locales/pt.ts +24 -0
- package/src/components/invoices/create/locales/sk.ts +164 -0
- package/src/components/invoices/create/locales/sl.ts +32 -9
- package/src/components/invoices/create/locales/sv.ts +166 -0
- package/src/components/invoices/create/prepare-invoice-submission.ts +19 -2
- package/src/components/invoices/invoices-furs.hooks.ts +11 -8
- package/src/components/invoices/invoices.hooks.ts +27 -10
- package/src/components/invoices/list/list-row-actions.tsx +54 -21
- package/src/components/invoices/list/list-table.tsx +92 -11
- package/src/components/invoices/list/locales/bg.ts +49 -0
- package/src/components/invoices/list/locales/cs.ts +49 -0
- package/src/components/invoices/list/locales/en.ts +34 -2
- package/src/components/invoices/list/locales/et.ts +49 -0
- package/src/components/invoices/list/locales/fi.ts +49 -0
- package/src/components/invoices/list/locales/is.ts +49 -0
- package/src/components/invoices/list/locales/nb.ts +49 -0
- package/src/components/invoices/list/locales/sk.ts +49 -0
- package/src/components/invoices/list/locales/sv.ts +49 -0
- package/src/components/invoices/list/use-invoice-download.ts +3 -5
- package/src/components/invoices/send-email-dialog/locales/bg.ts +58 -0
- package/src/components/invoices/send-email-dialog/locales/cs.ts +58 -0
- package/src/components/invoices/send-email-dialog/locales/de.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/en.ts +58 -0
- package/src/components/invoices/send-email-dialog/locales/es.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/et.ts +58 -0
- package/src/components/invoices/send-email-dialog/locales/fi.ts +58 -0
- package/src/components/invoices/send-email-dialog/locales/fr.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/hr.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/is.ts +58 -0
- package/src/components/invoices/send-email-dialog/locales/it.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/nb.ts +58 -0
- package/src/components/invoices/send-email-dialog/locales/nl.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/pl.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/pt.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/sk.ts +58 -0
- package/src/components/invoices/send-email-dialog/locales/sl.ts +21 -0
- package/src/components/invoices/send-email-dialog/locales/sv.ts +58 -0
- package/src/components/invoices/send-email-dialog/send-email-dialog.tsx +188 -93
- package/src/components/invoices/view/eslog-info-display.tsx +2 -0
- package/src/components/invoices/view/fiscalization-status-card.tsx +2 -0
- package/src/components/items/create-item-form/create-item-form.tsx +29 -0
- package/src/components/items/create-item-form/locales/bg.ts +13 -0
- package/src/components/items/create-item-form/locales/cs.ts +13 -0
- package/src/components/items/create-item-form/locales/et.ts +13 -0
- package/src/components/items/create-item-form/locales/fi.ts +13 -0
- package/src/components/items/create-item-form/locales/is.ts +13 -0
- package/src/components/items/create-item-form/locales/nb.ts +13 -0
- package/src/components/items/create-item-form/locales/sk.ts +13 -0
- package/src/components/items/create-item-form/locales/sv.ts +13 -0
- package/src/components/items/edit-item-form/edit-item-form.tsx +39 -1
- package/src/components/items/edit-item-form/locales/bg.ts +12 -0
- package/src/components/items/edit-item-form/locales/cs.ts +12 -0
- package/src/components/items/edit-item-form/locales/en.ts +12 -0
- package/src/components/items/edit-item-form/locales/et.ts +12 -0
- package/src/components/items/edit-item-form/locales/fi.ts +12 -0
- package/src/components/items/edit-item-form/locales/is.ts +12 -0
- package/src/components/items/edit-item-form/locales/nb.ts +12 -0
- package/src/components/items/edit-item-form/locales/sk.ts +12 -0
- package/src/components/items/edit-item-form/locales/sv.ts +12 -0
- package/src/components/items/item-combobox.tsx +51 -18
- package/src/components/items/item-list-table/item-list-table.tsx +47 -23
- package/src/components/items/item-list-table/locales/bg.ts +16 -0
- package/src/components/items/item-list-table/locales/cs.ts +16 -0
- package/src/components/items/item-list-table/locales/en.ts +4 -3
- package/src/components/items/item-list-table/locales/et.ts +16 -0
- package/src/components/items/item-list-table/locales/fi.ts +16 -0
- package/src/components/items/item-list-table/locales/is.ts +16 -0
- package/src/components/items/item-list-table/locales/nb.ts +16 -0
- package/src/components/items/item-list-table/locales/sk.ts +16 -0
- package/src/components/items/item-list-table/locales/sv.ts +16 -0
- package/src/components/items/items.hooks.ts +15 -15
- package/src/components/payments/create-payment-form/create-payment-form.tsx +11 -7
- package/src/components/payments/create-payment-form/locales/bg.ts +20 -0
- package/src/components/payments/create-payment-form/locales/cs.ts +20 -0
- package/src/components/payments/create-payment-form/locales/en.ts +20 -0
- package/src/components/payments/create-payment-form/locales/et.ts +20 -0
- package/src/components/payments/create-payment-form/locales/fi.ts +20 -0
- package/src/components/payments/create-payment-form/locales/hr.ts +2 -2
- package/src/components/payments/create-payment-form/locales/is.ts +20 -0
- package/src/components/payments/create-payment-form/locales/nb.ts +20 -0
- package/src/components/payments/create-payment-form/locales/sk.ts +20 -0
- package/src/components/payments/create-payment-form/locales/sl.ts +4 -4
- package/src/components/payments/create-payment-form/locales/sv.ts +20 -0
- package/src/components/payments/edit-payment-form/edit-payment-form.tsx +5 -1
- package/src/components/payments/edit-payment-form/locales/bg.ts +20 -0
- package/src/components/payments/edit-payment-form/locales/cs.ts +20 -0
- package/src/components/payments/edit-payment-form/locales/en.ts +20 -0
- package/src/components/payments/edit-payment-form/locales/et.ts +20 -0
- package/src/components/payments/edit-payment-form/locales/fi.ts +20 -0
- package/src/components/payments/edit-payment-form/locales/hr.ts +2 -2
- package/src/components/payments/edit-payment-form/locales/is.ts +20 -0
- package/src/components/payments/edit-payment-form/locales/nb.ts +20 -0
- package/src/components/payments/edit-payment-form/locales/sk.ts +20 -0
- package/src/components/payments/edit-payment-form/locales/sl.ts +4 -4
- package/src/components/payments/edit-payment-form/locales/sv.ts +20 -0
- package/src/components/payments/list/list-row-actions.tsx +10 -2
- package/src/components/payments/list/list-table.tsx +51 -45
- package/src/components/payments/list/locales/bg.ts +42 -0
- package/src/components/payments/list/locales/cs.ts +42 -0
- package/src/components/payments/list/locales/de.ts +18 -0
- package/src/components/payments/list/locales/en.ts +37 -2
- package/src/components/payments/list/locales/es.ts +18 -0
- package/src/components/payments/list/locales/et.ts +42 -0
- package/src/components/payments/list/locales/fi.ts +42 -0
- package/src/components/payments/list/locales/fr.ts +18 -0
- package/src/components/payments/list/locales/hr.ts +18 -0
- package/src/components/payments/list/locales/is.ts +42 -0
- package/src/components/payments/list/locales/it.ts +18 -0
- package/src/components/payments/list/locales/nb.ts +42 -0
- package/src/components/payments/list/locales/nl.ts +18 -0
- package/src/components/payments/list/locales/pl.ts +18 -0
- package/src/components/payments/list/locales/pt.ts +18 -0
- package/src/components/payments/list/locales/sk.ts +42 -0
- package/src/components/payments/list/locales/sl.ts +18 -1
- package/src/components/payments/list/locales/sv.ts +42 -0
- package/src/components/payments/payments.hooks.ts +13 -6
- package/src/components/recurring-invoices/create-recurring-invoice-form/create-recurring-invoice-form.tsx +23 -17
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/bg.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/cs.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/en.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/et.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/fi.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/hr.ts +6 -6
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/is.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/nb.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sk.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sl.ts +4 -4
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sv.ts +44 -0
- package/src/components/recurring-invoices/list/list-row-actions.tsx +3 -5
- package/src/components/recurring-invoices/list/list-table.tsx +10 -7
- package/src/components/recurring-invoices/list/locales/bg.ts +28 -0
- package/src/components/recurring-invoices/list/locales/cs.ts +28 -0
- package/src/components/recurring-invoices/list/locales/en.ts +23 -0
- package/src/components/recurring-invoices/list/locales/et.ts +28 -0
- package/src/components/recurring-invoices/list/locales/fi.ts +28 -0
- package/src/components/recurring-invoices/list/locales/is.ts +28 -0
- package/src/components/recurring-invoices/list/locales/nb.ts +28 -0
- package/src/components/recurring-invoices/list/locales/sk.ts +28 -0
- package/src/components/recurring-invoices/list/locales/sv.ts +28 -0
- package/src/components/recurring-invoices/recurring-invoices.hooks.ts +11 -8
- package/src/components/request-logs/request-log-detail.tsx +30 -23
- package/src/components/request-logs/request-log-list-table.tsx +88 -45
- package/src/components/table/README.md +47 -9
- package/src/components/table/data-table.tsx +232 -92
- package/src/components/table/filter-bar.tsx +1 -1
- package/src/components/table/filter-panel.tsx +51 -22
- package/src/components/table/hooks/use-table-state.ts +64 -11
- package/src/components/table/index.ts +3 -0
- package/src/components/table/locales.ts +119 -4
- package/src/components/table/selection-toolbar.tsx +65 -9
- package/src/components/table/sorting.ts +80 -0
- package/src/components/table/table-skeleton.tsx +15 -9
- package/src/components/table/types.ts +17 -0
- package/src/components/tax-reports/index.ts +8 -0
- package/src/components/tax-reports/kir-export-form.tsx +4 -5
- package/src/components/tax-reports/slovenia-accounting-mappings-fields.tsx +271 -0
- package/src/components/tax-reports/slovenia-tax-profile-step.tsx +21 -10
- package/src/components/tax-reports/slovenia-vod-export-form.tsx +452 -0
- package/src/components/tax-reports/slovenia-yearly-export-form.tsx +17 -16
- package/src/components/tax-reports/slovenia-yearly-review-step.tsx +40 -18
- package/src/components/taxes/create-tax-form/create-tax-form.tsx +48 -2
- package/src/components/taxes/create-tax-form/locales/bg.ts +8 -0
- package/src/components/taxes/create-tax-form/locales/cs.ts +8 -0
- package/src/components/taxes/create-tax-form/locales/et.ts +8 -0
- package/src/components/taxes/create-tax-form/locales/fi.ts +8 -0
- package/src/components/taxes/create-tax-form/locales/is.ts +8 -0
- package/src/components/taxes/create-tax-form/locales/nb.ts +8 -0
- package/src/components/taxes/create-tax-form/locales/sk.ts +8 -0
- package/src/components/taxes/create-tax-form/locales/sv.ts +8 -0
- package/src/components/taxes/edit-tax-form/edit-tax-form.tsx +80 -11
- package/src/components/taxes/edit-tax-form/locales/bg.ts +6 -0
- package/src/components/taxes/edit-tax-form/locales/cs.ts +6 -0
- package/src/components/taxes/edit-tax-form/locales/en.ts +6 -0
- package/src/components/taxes/edit-tax-form/locales/et.ts +6 -0
- package/src/components/taxes/edit-tax-form/locales/fi.ts +6 -0
- package/src/components/taxes/edit-tax-form/locales/is.ts +6 -0
- package/src/components/taxes/edit-tax-form/locales/nb.ts +6 -0
- package/src/components/taxes/edit-tax-form/locales/sk.ts +6 -0
- package/src/components/taxes/edit-tax-form/locales/sv.ts +6 -0
- package/src/components/taxes/tax-list-table/locales/bg.ts +17 -0
- package/src/components/taxes/tax-list-table/locales/cs.ts +17 -0
- package/src/components/taxes/tax-list-table/locales/en.ts +4 -3
- package/src/components/taxes/tax-list-table/locales/et.ts +17 -0
- package/src/components/taxes/tax-list-table/locales/fi.ts +17 -0
- package/src/components/taxes/tax-list-table/locales/is.ts +17 -0
- package/src/components/taxes/tax-list-table/locales/nb.ts +17 -0
- package/src/components/taxes/tax-list-table/locales/sk.ts +17 -0
- package/src/components/taxes/tax-list-table/locales/sv.ts +17 -0
- package/src/components/taxes/tax-list-table/tax-list-table.tsx +53 -19
- package/src/components/taxes/taxes.hooks.ts +53 -12
- package/src/components/ui/badge.tsx +1 -1
- package/src/components/ui/button.tsx +1 -1
- package/src/components/ui/drawer.tsx +2 -2
- package/src/components/ui/form.tsx +118 -2
- package/src/components/ui/progress.tsx +6 -4
- package/src/components/ui/select.tsx +118 -1
- package/src/components/ui/sonner.tsx +17 -36
- package/src/components/ui/sticky-form-footer.tsx +6 -1
- package/src/components/ui/tooltip.tsx +15 -2
- package/src/components/webhook-logs/webhook-delivery-detail.tsx +22 -22
- package/src/components/webhook-logs/webhook-delivery-list-table.tsx +92 -17
- package/src/components/wl-subscription/locked-feature.tsx +11 -10
- package/src/components/wl-subscription/paywall.tsx +184 -72
- package/src/components/wl-subscription/upgrade-modal.tsx +28 -31
- package/src/generate-schemas.ts +14 -4
- package/src/generated/schemas/account_webhook.ts +43 -0
- package/src/generated/schemas/accountwebhook.ts +67 -0
- package/src/generated/schemas/entity.ts +255 -16
- package/src/generated/schemas/exportsloveniavodxml_body.ts +16 -0
- package/src/generated/schemas/furssettings.ts +1 -0
- package/src/generated/schemas/incomingpurchasedocument.ts +198 -0
- package/src/generated/schemas/incomingpurchasedocumentpayment.ts +38 -0
- package/src/generated/schemas/index.ts +10 -0
- package/src/generated/schemas/item.ts +36 -0
- package/src/generated/schemas/me.ts +23 -19
- package/src/generated/schemas/order.ts +2 -0
- package/src/generated/schemas/orderintegration.ts +8 -4
- package/src/generated/schemas/payment.ts +5 -0
- package/src/generated/schemas/ptatcudseries.ts +30 -0
- package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +35 -3
- package/src/generated/schemas/rendercreditnotepreview_body.ts +35 -3
- package/src/generated/schemas/renderdeliverynotepreview_body.ts +12 -5
- package/src/generated/schemas/renderestimatepreview_body.ts +38 -5
- package/src/generated/schemas/renderinvoicepreview_body.ts +39 -5
- package/src/generated/schemas/senddocument_body.ts +1 -0
- package/src/generated/schemas/sendemail_body.ts +67 -39
- package/src/generated/schemas/sloveniataxprofile.ts +97 -21
- package/src/generated/schemas/starteslogexport_body.ts +33 -0
- package/src/generated/schemas/startpdfexport_body.ts +94 -78
- package/src/generated/schemas/supplier.ts +59 -0
- package/src/generated/schemas/syncshopifyorders_body.ts +20 -0
- package/src/generated/schemas/tax.ts +2 -0
- package/src/generated/schemas/uploadfile_body.ts +1 -0
- package/src/generated/schemas/userptsettings.ts +26 -0
- package/src/generated/schemas/voidinvoice_body.ts +20 -0
- package/src/generated/schemas/webhook.ts +2 -0
- package/src/hooks/create-resource-hooks.ts +22 -19
- package/src/hooks/use-duplicate-document.ts +10 -8
- package/src/hooks/use-eslog-validation.ts +5 -1
- package/src/hooks/use-next-document-number.ts +13 -6
- package/src/hooks/use-resolved-entity-id.ts +14 -0
- package/src/hooks/use-resource-mutation.ts +11 -30
- package/src/hooks/use-transaction-type-check.ts +3 -8
- package/src/lib/browser-cookies.ts +1 -1
- package/src/lib/country-capabilities.ts +114 -0
- package/src/lib/date-fns-locale.ts +1 -20
- package/src/lib/eslog-export.ts +32 -0
- package/src/lib/fiscalization-options.ts +21 -1
- package/src/lib/formatting.ts +27 -0
- package/src/lib/furs-error-utils.ts +29 -0
- package/src/lib/locale.ts +4 -0
- package/src/lib/payment-display.ts +95 -0
- package/src/lib/pt-document-input.ts +67 -0
- package/src/lib/schemas/shared.ts +1 -0
- package/src/lib/template-variables.tsx +102 -4
- package/src/lib/translation.ts +51 -33
- package/src/lib/white-label-capabilities.ts +626 -0
- package/src/lib/zod-validation-message.ts +291 -0
- package/src/providers/entities-provider.tsx +32 -14
- package/src/providers/sdk-provider.tsx +112 -12
- package/src/providers/space-invoices-provider.tsx +129 -0
- package/src/providers/white-label-provider.tsx +96 -4
- package/src/providers/wl-subscription-provider.tsx +144 -10
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
Name: "Navn",
|
|
3
|
+
"Tax Rates": "Avgiftssatser",
|
|
4
|
+
Created: "Opprettet",
|
|
5
|
+
Default: "Standard",
|
|
6
|
+
"Unnamed Tax": "Unnamed Tax",
|
|
7
|
+
"Open menu": "Åpne menyen",
|
|
8
|
+
Actions: "Handlinger",
|
|
9
|
+
"Copy tax ID": "Copy tax ID",
|
|
10
|
+
"View tax": "View tax",
|
|
11
|
+
"Your list is empty": "Your tax list is empty",
|
|
12
|
+
"Get started by creating your first entry": "Get started by creating your first tax",
|
|
13
|
+
"No results found": "No taxes found",
|
|
14
|
+
"Try adjusting your search criteria": "Try adjusting your search criteria",
|
|
15
|
+
"Clear search": "Clear search",
|
|
16
|
+
"Clear all": "Clear all",
|
|
17
|
+
} as const;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
Name: "Meno",
|
|
3
|
+
"Tax Rates": "Daňové sadzby",
|
|
4
|
+
Created: "Vytvorené",
|
|
5
|
+
Default: "Predvolená",
|
|
6
|
+
"Unnamed Tax": "Unnamed Tax",
|
|
7
|
+
"Open menu": "Otvoriť menu",
|
|
8
|
+
Actions: "Akcie",
|
|
9
|
+
"Copy tax ID": "Copy tax ID",
|
|
10
|
+
"View tax": "View tax",
|
|
11
|
+
"Your list is empty": "Your tax list is empty",
|
|
12
|
+
"Get started by creating your first entry": "Get started by creating your first tax",
|
|
13
|
+
"No results found": "No taxes found",
|
|
14
|
+
"Try adjusting your search criteria": "Try adjusting your search criteria",
|
|
15
|
+
"Clear search": "Clear search",
|
|
16
|
+
"Clear all": "Clear all",
|
|
17
|
+
} as const;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
Name: "Namn",
|
|
3
|
+
"Tax Rates": "Skattesatser",
|
|
4
|
+
Created: "Skapad",
|
|
5
|
+
Default: "Standard",
|
|
6
|
+
"Unnamed Tax": "Unnamed Tax",
|
|
7
|
+
"Open menu": "Öppna menyn",
|
|
8
|
+
Actions: "Åtgärder",
|
|
9
|
+
"Copy tax ID": "Copy tax ID",
|
|
10
|
+
"View tax": "View tax",
|
|
11
|
+
"Your list is empty": "Your tax list is empty",
|
|
12
|
+
"Get started by creating your first entry": "Get started by creating your first tax",
|
|
13
|
+
"No results found": "No taxes found",
|
|
14
|
+
"Try adjusting your search criteria": "Try adjusting your search criteria",
|
|
15
|
+
"Clear search": "Clear search",
|
|
16
|
+
"Clear all": "Clear all",
|
|
17
|
+
} as const;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import type { Tax } from "@spaceinvoices/js-sdk";
|
|
2
|
-
import {
|
|
2
|
+
import { taxes } from "@spaceinvoices/js-sdk";
|
|
3
|
+
import { Percent } from "lucide-react";
|
|
4
|
+
import { useMemo } from "react";
|
|
5
|
+
import { Badge } from "@/ui/components/ui/badge";
|
|
6
|
+
import { Button } from "@/ui/components/ui/button";
|
|
3
7
|
import type { ComponentTranslationProps } from "@/ui/lib/translation";
|
|
4
8
|
import { createTranslation } from "@/ui/lib/translation";
|
|
5
|
-
import { useSDK } from "@/ui/providers/sdk-provider";
|
|
6
9
|
import { DataTable } from "../../table/data-table";
|
|
7
10
|
import { useTableFetch } from "../../table/hooks/use-table-fetch";
|
|
8
|
-
import
|
|
11
|
+
import { withTableTranslations } from "../../table/locales";
|
|
12
|
+
import type { Column, ListTableProps, TableQueryParams } from "../../table/types";
|
|
9
13
|
import { TAXES_CACHE_KEY } from "../taxes.hooks";
|
|
10
14
|
import de from "./locales/de";
|
|
11
15
|
import en from "./locales/en";
|
|
@@ -17,8 +21,7 @@ import nl from "./locales/nl";
|
|
|
17
21
|
import pl from "./locales/pl";
|
|
18
22
|
import pt from "./locales/pt";
|
|
19
23
|
import sl from "./locales/sl";
|
|
20
|
-
import
|
|
21
|
-
import TaxListRow from "./tax-list-row";
|
|
24
|
+
import TaxListRowActions from "./tax-list-row-actions";
|
|
22
25
|
|
|
23
26
|
const translations = withTableTranslations({
|
|
24
27
|
en,
|
|
@@ -49,25 +52,56 @@ export default function TaxListTable({
|
|
|
49
52
|
...i18nProps
|
|
50
53
|
}: TaxListTableProps) {
|
|
51
54
|
const t = createTranslation({ translations, ...i18nProps });
|
|
52
|
-
const { sdk } = useSDK();
|
|
53
|
-
|
|
54
55
|
const handleFetch = useTableFetch((params: TableQueryParams) => {
|
|
55
|
-
|
|
56
|
-
return sdk.taxes.list(params as any);
|
|
56
|
+
return taxes.list(params as any);
|
|
57
57
|
}, entityId);
|
|
58
58
|
|
|
59
|
+
const columns: Column<Tax>[] = useMemo(
|
|
60
|
+
() => [
|
|
61
|
+
{
|
|
62
|
+
id: "name",
|
|
63
|
+
header: t("Name"),
|
|
64
|
+
sort: true,
|
|
65
|
+
cell: (tax) => (
|
|
66
|
+
<div className="flex items-center gap-2">
|
|
67
|
+
<Button variant="link" className="py-0 underline" onClick={() => onRowClick?.(tax)}>
|
|
68
|
+
<Percent className="h-4 w-4 flex-shrink-0" />
|
|
69
|
+
{tax.name || t("Unnamed Tax")}
|
|
70
|
+
</Button>
|
|
71
|
+
{tax.is_default && (
|
|
72
|
+
<Badge variant="secondary" className="text-xs">
|
|
73
|
+
{t("Default")}
|
|
74
|
+
</Badge>
|
|
75
|
+
)}
|
|
76
|
+
</div>
|
|
77
|
+
),
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "tax_rates",
|
|
81
|
+
header: t("Tax Rates"),
|
|
82
|
+
cell: (tax) => (tax.tax_rates?.length ? tax.tax_rates.map((rate) => `${rate.rate}%`).join(", ") : "-"),
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: "created_at",
|
|
86
|
+
header: t("Created"),
|
|
87
|
+
sort: {
|
|
88
|
+
defaultDirection: "desc",
|
|
89
|
+
},
|
|
90
|
+
cell: (tax) => new Date(tax.created_at).toLocaleDateString(),
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: "actions",
|
|
94
|
+
header: "",
|
|
95
|
+
align: "right",
|
|
96
|
+
cell: (tax) => <TaxListRowActions tax={tax} onView={onView} t={t} />,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
[t, onRowClick, onView],
|
|
100
|
+
);
|
|
101
|
+
|
|
59
102
|
return (
|
|
60
103
|
<DataTable
|
|
61
|
-
columns={
|
|
62
|
-
{ id: "name", header: t("Name") },
|
|
63
|
-
{ id: "tax_rates", header: t("Tax Rates") },
|
|
64
|
-
{ id: "created_at", header: t("Created") },
|
|
65
|
-
{ id: "actions", header: "", align: "right" },
|
|
66
|
-
]}
|
|
67
|
-
renderRow={(tax) => (
|
|
68
|
-
<TaxListRow tax={tax} key={tax.id} onRowClick={(tax) => onRowClick?.(tax)} onView={onView} t={t} />
|
|
69
|
-
)}
|
|
70
|
-
renderHeader={() => <TaxListHeader t={t} />}
|
|
104
|
+
columns={columns}
|
|
71
105
|
queryParams={queryParams}
|
|
72
106
|
resourceName="tax"
|
|
73
107
|
cacheKey={TAXES_CACHE_KEY}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
1
|
+
import { type CreateTaxBody, type PaginatedResponse, type Tax, taxes, type UpdateTaxBody } from "@spaceinvoices/js-sdk";
|
|
2
|
+
import {
|
|
3
|
+
type UseMutationOptions,
|
|
4
|
+
type UseQueryOptions,
|
|
5
|
+
useMutation,
|
|
6
|
+
useQuery,
|
|
7
|
+
useQueryClient,
|
|
8
|
+
} from "@tanstack/react-query";
|
|
3
9
|
import { createResourceHooks } from "../../hooks/create-resource-hooks";
|
|
4
|
-
import { useSDK } from "../../providers/sdk-provider";
|
|
5
10
|
|
|
6
11
|
export const TAXES_CACHE_KEY = "taxes";
|
|
7
12
|
|
|
@@ -11,12 +16,50 @@ const {
|
|
|
11
16
|
useDeleteResource: useDeleteTax,
|
|
12
17
|
useRestoreResource: useRestoreTax,
|
|
13
18
|
usePermanentDeleteResource: usePermanentDeleteTax,
|
|
14
|
-
} = createResourceHooks<Tax, CreateTaxBody, UpdateTaxBody>(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
} = createResourceHooks<Tax, CreateTaxBody, UpdateTaxBody>(
|
|
20
|
+
{
|
|
21
|
+
create: taxes.create,
|
|
22
|
+
update: taxes.update,
|
|
23
|
+
delete: taxes.delete,
|
|
24
|
+
restore: taxes.restoreTax,
|
|
25
|
+
permanentDelete: taxes.permanentDeleteTax,
|
|
26
|
+
},
|
|
27
|
+
TAXES_CACHE_KEY,
|
|
28
|
+
);
|
|
18
29
|
|
|
19
|
-
export { useCreateTax,
|
|
30
|
+
export { useCreateTax, useDeleteTax, usePermanentDeleteTax, useRestoreTax, useUpdateTax };
|
|
31
|
+
|
|
32
|
+
type ReplaceTaxVariables = {
|
|
33
|
+
id: string;
|
|
34
|
+
data: CreateTaxBody;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export function useReplaceTax(
|
|
38
|
+
options: {
|
|
39
|
+
entityId?: string | null;
|
|
40
|
+
onSuccess?: (data: Tax, variables: ReplaceTaxVariables, context: unknown) => void;
|
|
41
|
+
onError?: (error: Error, variables: ReplaceTaxVariables, context: unknown) => void;
|
|
42
|
+
mutationOptions?: Omit<
|
|
43
|
+
UseMutationOptions<Tax, Error, ReplaceTaxVariables, unknown>,
|
|
44
|
+
"mutationFn" | "onSuccess" | "onError"
|
|
45
|
+
>;
|
|
46
|
+
} = {},
|
|
47
|
+
) {
|
|
48
|
+
const queryClient = useQueryClient();
|
|
49
|
+
|
|
50
|
+
return useMutation<Tax, Error, ReplaceTaxVariables>({
|
|
51
|
+
mutationFn: async ({ id, data }) => taxes.replaceTax(id, data, { entity_id: options.entityId ?? undefined }),
|
|
52
|
+
onSuccess: (data, variables, context) => {
|
|
53
|
+
queryClient.invalidateQueries({ queryKey: [TAXES_CACHE_KEY] });
|
|
54
|
+
queryClient.invalidateQueries({ queryKey: [TAXES_CACHE_KEY, variables.id, options.entityId] });
|
|
55
|
+
options.onSuccess?.(data, variables, context);
|
|
56
|
+
},
|
|
57
|
+
onError: (error, variables, context) => {
|
|
58
|
+
options.onError?.(error, variables, context);
|
|
59
|
+
},
|
|
60
|
+
...options.mutationOptions,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
20
63
|
|
|
21
64
|
/**
|
|
22
65
|
* Hook to fetch all taxes for an entity
|
|
@@ -25,16 +68,14 @@ export function useListTaxes(
|
|
|
25
68
|
entityId: string,
|
|
26
69
|
options?: Omit<UseQueryOptions<PaginatedResponse<Tax>, Error>, "queryKey" | "queryFn">,
|
|
27
70
|
) {
|
|
28
|
-
const { sdk } = useSDK();
|
|
29
|
-
|
|
30
71
|
return useQuery({
|
|
31
72
|
queryKey: [TAXES_CACHE_KEY, entityId],
|
|
32
73
|
queryFn: () =>
|
|
33
|
-
|
|
74
|
+
taxes.list({
|
|
34
75
|
entity_id: entityId,
|
|
35
76
|
limit: 100,
|
|
36
77
|
}),
|
|
37
|
-
enabled: !!
|
|
78
|
+
enabled: !!entityId,
|
|
38
79
|
...options,
|
|
39
80
|
});
|
|
40
81
|
}
|
|
@@ -14,7 +14,7 @@ const badgeVariants = cva(
|
|
|
14
14
|
destructive: "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20",
|
|
15
15
|
outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
|
|
16
16
|
ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
|
|
17
|
-
link: "text-primary underline-offset-4 hover:underline",
|
|
17
|
+
link: "text-primary-readable underline-offset-4 hover:underline",
|
|
18
18
|
},
|
|
19
19
|
},
|
|
20
20
|
defaultVariants: {
|
|
@@ -14,7 +14,7 @@ const buttonVariants = cva(
|
|
|
14
14
|
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
15
15
|
ghost: "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
16
16
|
destructive: "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30",
|
|
17
|
-
link: "text-primary underline-offset-4 hover:underline",
|
|
17
|
+
link: "text-primary-readable underline-offset-4 hover:underline",
|
|
18
18
|
},
|
|
19
19
|
size: {
|
|
20
20
|
default: "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
@@ -51,7 +51,7 @@ function DrawerContent({
|
|
|
51
51
|
<DrawerPrimitive.Content
|
|
52
52
|
data-slot="drawer-content"
|
|
53
53
|
className={cn(
|
|
54
|
-
"bg-background flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm group/drawer-content
|
|
54
|
+
"bg-background fixed z-50 flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:pb-[calc(max(1rem,env(safe-area-inset-bottom))+4.5rem)] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm group/drawer-content",
|
|
55
55
|
className
|
|
56
56
|
)}
|
|
57
57
|
{...props}
|
|
@@ -77,7 +77,7 @@ function DrawerFooter({ className, ...props }: React.ComponentProps<"div">) {
|
|
|
77
77
|
return (
|
|
78
78
|
<div
|
|
79
79
|
data-slot="drawer-footer"
|
|
80
|
-
className={cn("gap-2 p-4
|
|
80
|
+
className={cn("mt-auto flex flex-col gap-2 p-4 pb-[max(1rem,env(safe-area-inset-bottom))]", className)}
|
|
81
81
|
{...props}
|
|
82
82
|
/>
|
|
83
83
|
)
|
|
@@ -6,16 +6,96 @@ import { Slot } from "@radix-ui/react-slot"
|
|
|
6
6
|
import {
|
|
7
7
|
Controller,
|
|
8
8
|
type ControllerProps,
|
|
9
|
+
type FieldErrors,
|
|
9
10
|
type FieldPath,
|
|
10
11
|
type FieldValues,
|
|
11
12
|
FormProvider,
|
|
13
|
+
type UseFormReturn,
|
|
12
14
|
useFormContext,
|
|
13
15
|
} from "react-hook-form"
|
|
14
16
|
|
|
15
17
|
import { cn } from "@/ui/lib/utils"
|
|
16
18
|
import { Label } from "@/ui/components/ui/label"
|
|
19
|
+
import { getValidationLocale, translateZodValidationMessage } from "@/ui/lib/zod-validation-message"
|
|
17
20
|
|
|
18
|
-
const
|
|
21
|
+
const ValidationLocaleContext = React.createContext<string | undefined>(undefined)
|
|
22
|
+
|
|
23
|
+
type FormProps = UseFormReturn<any> & {
|
|
24
|
+
children: React.ReactNode
|
|
25
|
+
locale?: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function Form({ locale, ...props }: FormProps) {
|
|
29
|
+
const { watch, getFieldState, clearErrors, trigger } = props
|
|
30
|
+
|
|
31
|
+
React.useEffect(() => {
|
|
32
|
+
const subscription = watch((_value, { name, type }) => {
|
|
33
|
+
if (!name || type !== "change") return
|
|
34
|
+
|
|
35
|
+
const fieldState = getFieldState(name)
|
|
36
|
+
if (!fieldState.error) return
|
|
37
|
+
|
|
38
|
+
// Manual/setError flows should clear immediately once the user edits the field again.
|
|
39
|
+
if (fieldState.error.type === "manual" || fieldState.error.type === "submit" || fieldState.error.type === "eslog") {
|
|
40
|
+
clearErrors(name)
|
|
41
|
+
return
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void trigger(name)
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
return () => subscription.unsubscribe()
|
|
48
|
+
}, [watch, getFieldState, clearErrors, trigger])
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<ValidationLocaleContext.Provider value={locale}>
|
|
52
|
+
<FormProvider {...props} />
|
|
53
|
+
</ValidationLocaleContext.Provider>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function scrollFormToFirstError(form: HTMLFormElement | null) {
|
|
58
|
+
if (!form) return
|
|
59
|
+
|
|
60
|
+
const scrollToInvalidField = () => {
|
|
61
|
+
const errorTarget = form.querySelector<HTMLElement>('[data-form-error-summary="true"], [aria-invalid="true"]')
|
|
62
|
+
if (!errorTarget) return
|
|
63
|
+
|
|
64
|
+
errorTarget.scrollIntoView({ behavior: "smooth", block: "center" })
|
|
65
|
+
|
|
66
|
+
if (errorTarget.matches('[aria-invalid="true"]') && typeof errorTarget.focus === "function") {
|
|
67
|
+
errorTarget.focus({ preventScroll: true })
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
requestAnimationFrame(() => {
|
|
72
|
+
requestAnimationFrame(scrollToInvalidField)
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function collectFormErrorPaths(errors: FieldErrors<FieldValues>, prefix = ""): string[] {
|
|
77
|
+
const paths: string[] = []
|
|
78
|
+
|
|
79
|
+
for (const [key, value] of Object.entries(errors)) {
|
|
80
|
+
if (!value) continue
|
|
81
|
+
|
|
82
|
+
const nextPrefix = prefix ? `${prefix}.${key}` : key
|
|
83
|
+
if (key === "root") {
|
|
84
|
+
paths.push(nextPrefix)
|
|
85
|
+
continue
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (typeof value === "object") {
|
|
89
|
+
if ("message" in value || "type" in value || "ref" in value) {
|
|
90
|
+
paths.push(nextPrefix)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
paths.push(...collectFormErrorPaths(value as FieldErrors<FieldValues>, nextPrefix))
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return [...new Set(paths)]
|
|
98
|
+
}
|
|
19
99
|
|
|
20
100
|
type FormFieldContextValue<
|
|
21
101
|
TFieldValues extends FieldValues = FieldValues,
|
|
@@ -135,8 +215,11 @@ function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
|
|
|
135
215
|
}
|
|
136
216
|
|
|
137
217
|
function FormMessage({ className, children, ...props }: React.ComponentProps<"p">) {
|
|
218
|
+
const validationLocale = React.useContext(ValidationLocaleContext)
|
|
138
219
|
const { error, formMessageId } = useFormField()
|
|
139
|
-
const body = error
|
|
220
|
+
const body = error
|
|
221
|
+
? translateZodValidationMessage(String(error?.message ?? ""), getValidationLocale(validationLocale))
|
|
222
|
+
: children
|
|
140
223
|
|
|
141
224
|
if (!body) {
|
|
142
225
|
return null
|
|
@@ -154,6 +237,37 @@ function FormMessage({ className, children, ...props }: React.ComponentProps<"p"
|
|
|
154
237
|
)
|
|
155
238
|
}
|
|
156
239
|
|
|
240
|
+
function FormRoot({ className, ...props }: React.ComponentProps<"form">) {
|
|
241
|
+
const { formState } = useFormContext()
|
|
242
|
+
const formRef = React.useRef<HTMLFormElement>(null)
|
|
243
|
+
const lastSubmitCountRef = React.useRef(0)
|
|
244
|
+
const hasScrolledForSubmitRef = React.useRef(false)
|
|
245
|
+
const errorPaths = React.useMemo(() => collectFormErrorPaths(formState.errors), [formState.errors])
|
|
246
|
+
|
|
247
|
+
React.useEffect(() => {
|
|
248
|
+
if (formState.submitCount !== lastSubmitCountRef.current) {
|
|
249
|
+
lastSubmitCountRef.current = formState.submitCount
|
|
250
|
+
hasScrolledForSubmitRef.current = false
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (!formState.isSubmitted || errorPaths.length === 0 || hasScrolledForSubmitRef.current) {
|
|
254
|
+
return
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
hasScrolledForSubmitRef.current = true
|
|
258
|
+
scrollFormToFirstError(formRef.current)
|
|
259
|
+
}, [errorPaths.length, formState.isSubmitted, formState.submitCount])
|
|
260
|
+
|
|
261
|
+
return (
|
|
262
|
+
<form
|
|
263
|
+
ref={formRef}
|
|
264
|
+
data-slot="form-root"
|
|
265
|
+
className={className}
|
|
266
|
+
{...props}
|
|
267
|
+
/>
|
|
268
|
+
)
|
|
269
|
+
}
|
|
270
|
+
|
|
157
271
|
export {
|
|
158
272
|
useFormField,
|
|
159
273
|
Form,
|
|
@@ -163,4 +277,6 @@ export {
|
|
|
163
277
|
FormDescription,
|
|
164
278
|
FormMessage,
|
|
165
279
|
FormField,
|
|
280
|
+
FormRoot,
|
|
281
|
+
scrollFormToFirstError,
|
|
166
282
|
}
|
|
@@ -7,17 +7,19 @@ function Progress({
|
|
|
7
7
|
className,
|
|
8
8
|
...props
|
|
9
9
|
}: ProgressPrimitive.Root.Props & { className?: string }) {
|
|
10
|
+
const normalizedValue = Math.min(Math.max(value ?? 0, 0), 100)
|
|
11
|
+
|
|
10
12
|
return (
|
|
11
13
|
<ProgressPrimitive.Root
|
|
12
14
|
data-slot="progress"
|
|
13
|
-
value={
|
|
15
|
+
value={normalizedValue}
|
|
14
16
|
className={cn("relative w-full overflow-hidden rounded-full bg-primary/20", className)}
|
|
15
17
|
{...props}
|
|
16
18
|
>
|
|
17
|
-
<ProgressPrimitive.Track>
|
|
19
|
+
<ProgressPrimitive.Track className="block h-full w-full">
|
|
18
20
|
<ProgressPrimitive.Indicator
|
|
19
|
-
className="h-full
|
|
20
|
-
style={{ width: `${
|
|
21
|
+
className="progress-indicator-shimmer block h-full rounded-full transition-all duration-500 ease-in-out"
|
|
22
|
+
style={{ width: `${normalizedValue}%` }}
|
|
21
23
|
/>
|
|
22
24
|
</ProgressPrimitive.Track>
|
|
23
25
|
</ProgressPrimitive.Root>
|
|
@@ -6,7 +6,97 @@ import { Select as SelectPrimitive } from "@base-ui/react/select"
|
|
|
6
6
|
import { cn } from "@/ui/lib/utils"
|
|
7
7
|
import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
type RegisteredSelectItem = {
|
|
10
|
+
id: symbol
|
|
11
|
+
label: React.ReactNode
|
|
12
|
+
value: unknown
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type SelectItemsContextValue = {
|
|
16
|
+
removeItem: (id: symbol) => void
|
|
17
|
+
upsertItem: (item: RegisteredSelectItem) => void
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const SelectItemsContext = React.createContext<SelectItemsContextValue | null>(null)
|
|
21
|
+
|
|
22
|
+
function getSelectItemText(node: React.ReactNode): string {
|
|
23
|
+
if (node == null || typeof node === "boolean") {
|
|
24
|
+
return ""
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (typeof node === "string" || typeof node === "number") {
|
|
28
|
+
return String(node)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (Array.isArray(node)) {
|
|
32
|
+
return node.map(getSelectItemText).join(" ")
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (React.isValidElement<{ children?: React.ReactNode }>(node)) {
|
|
36
|
+
return getSelectItemText(node.props.children)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return ""
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function Select<Value, Multiple extends boolean | undefined = false>({
|
|
43
|
+
children,
|
|
44
|
+
items,
|
|
45
|
+
...props
|
|
46
|
+
}: SelectPrimitive.Root.Props<Value, Multiple>) {
|
|
47
|
+
const [registeredItems, setRegisteredItems] = React.useState<RegisteredSelectItem[]>([])
|
|
48
|
+
|
|
49
|
+
const upsertItem = React.useCallback((item: RegisteredSelectItem) => {
|
|
50
|
+
setRegisteredItems((current) => {
|
|
51
|
+
const existingIndex = current.findIndex((entry) => entry.id === item.id)
|
|
52
|
+
|
|
53
|
+
if (existingIndex === -1) {
|
|
54
|
+
return [...current, item]
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const existingItem = current[existingIndex]
|
|
58
|
+
if (existingItem.value === item.value && existingItem.label === item.label) {
|
|
59
|
+
return current
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const next = current.slice()
|
|
63
|
+
next[existingIndex] = item
|
|
64
|
+
return next
|
|
65
|
+
})
|
|
66
|
+
}, [])
|
|
67
|
+
|
|
68
|
+
const removeItem = React.useCallback((id: symbol) => {
|
|
69
|
+
setRegisteredItems((current) => current.filter((item) => item.id !== id))
|
|
70
|
+
}, [])
|
|
71
|
+
|
|
72
|
+
const contextValue = React.useMemo<SelectItemsContextValue>(
|
|
73
|
+
() => ({ removeItem, upsertItem }),
|
|
74
|
+
[removeItem, upsertItem]
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
const resolvedItems = React.useMemo(() => {
|
|
78
|
+
if (items) {
|
|
79
|
+
return items
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (registeredItems.length === 0) {
|
|
83
|
+
return undefined
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return registeredItems.map(({ label, value }) => ({ label, value }))
|
|
87
|
+
}, [items, registeredItems])
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<SelectItemsContext.Provider value={contextValue}>
|
|
91
|
+
<SelectPrimitive.Root
|
|
92
|
+
{...props}
|
|
93
|
+
items={resolvedItems as SelectPrimitive.Root.Props<Value, Multiple>["items"]}
|
|
94
|
+
>
|
|
95
|
+
{children}
|
|
96
|
+
</SelectPrimitive.Root>
|
|
97
|
+
</SelectItemsContext.Provider>
|
|
98
|
+
)
|
|
99
|
+
}
|
|
10
100
|
|
|
11
101
|
function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
|
|
12
102
|
return (
|
|
@@ -118,11 +208,38 @@ function SelectLabel({
|
|
|
118
208
|
function SelectItem({
|
|
119
209
|
className,
|
|
120
210
|
children,
|
|
211
|
+
label,
|
|
212
|
+
value = null,
|
|
121
213
|
...props
|
|
122
214
|
}: SelectPrimitive.Item.Props) {
|
|
215
|
+
const itemsContext = React.useContext(SelectItemsContext)
|
|
216
|
+
const itemId = React.useRef(Symbol("select-item"))
|
|
217
|
+
const derivedLabel = getSelectItemText(children).replace(/\s+/g, " ").trim()
|
|
218
|
+
const resolvedLabel = label ?? (derivedLabel.length > 0 ? derivedLabel : undefined)
|
|
219
|
+
|
|
220
|
+
React.useEffect(() => {
|
|
221
|
+
if (!itemsContext || !resolvedLabel) {
|
|
222
|
+
return undefined
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const nextItem = {
|
|
226
|
+
id: itemId.current,
|
|
227
|
+
label: resolvedLabel,
|
|
228
|
+
value,
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
itemsContext.upsertItem(nextItem)
|
|
232
|
+
|
|
233
|
+
return () => {
|
|
234
|
+
itemsContext.removeItem(itemId.current)
|
|
235
|
+
}
|
|
236
|
+
}, [itemsContext, resolvedLabel, value])
|
|
237
|
+
|
|
123
238
|
return (
|
|
124
239
|
<SelectPrimitive.Item
|
|
125
240
|
data-slot="select-item"
|
|
241
|
+
label={resolvedLabel}
|
|
242
|
+
value={value}
|
|
126
243
|
className={cn(
|
|
127
244
|
"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-pointer items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
128
245
|
className
|
|
@@ -1,43 +1,24 @@
|
|
|
1
|
-
"use client"
|
|
1
|
+
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
let useTheme: () => { theme?: string } = () => ({ theme: "system" })
|
|
8
|
-
try {
|
|
9
|
-
// Dynamic import to avoid hard dependency on next-themes
|
|
10
|
-
const nextThemes = require("next-themes")
|
|
11
|
-
if (nextThemes?.useTheme) {
|
|
12
|
-
useTheme = nextThemes.useTheme
|
|
13
|
-
}
|
|
14
|
-
} catch {
|
|
15
|
-
// next-themes not available, use fallback
|
|
16
|
-
}
|
|
3
|
+
import { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon } from "lucide-react";
|
|
4
|
+
import { useTheme } from "next-themes";
|
|
5
|
+
import type { CSSProperties } from "react";
|
|
6
|
+
import { Toaster as Sonner, type ToasterProps } from "sonner";
|
|
17
7
|
|
|
18
8
|
const Toaster = ({ ...props }: ToasterProps) => {
|
|
19
|
-
const { theme
|
|
9
|
+
const { resolvedTheme, theme } = useTheme();
|
|
10
|
+
const activeTheme = resolvedTheme || theme || "system";
|
|
20
11
|
|
|
21
12
|
return (
|
|
22
13
|
<Sonner
|
|
23
|
-
theme={
|
|
14
|
+
theme={activeTheme as ToasterProps["theme"]}
|
|
24
15
|
className="toaster group"
|
|
25
16
|
icons={{
|
|
26
|
-
success:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
),
|
|
32
|
-
warning: (
|
|
33
|
-
<TriangleAlertIcon className="size-4" />
|
|
34
|
-
),
|
|
35
|
-
error: (
|
|
36
|
-
<OctagonXIcon className="size-4" />
|
|
37
|
-
),
|
|
38
|
-
loading: (
|
|
39
|
-
<Loader2Icon className="size-4 animate-spin" />
|
|
40
|
-
),
|
|
17
|
+
success: <CircleCheckIcon className="size-4" />,
|
|
18
|
+
info: <InfoIcon className="size-4" />,
|
|
19
|
+
warning: <TriangleAlertIcon className="size-4" />,
|
|
20
|
+
error: <OctagonXIcon className="size-4" />,
|
|
21
|
+
loading: <Loader2Icon className="size-4 animate-spin" />,
|
|
41
22
|
}}
|
|
42
23
|
style={
|
|
43
24
|
{
|
|
@@ -45,7 +26,7 @@ const Toaster = ({ ...props }: ToasterProps) => {
|
|
|
45
26
|
"--normal-text": "var(--popover-foreground)",
|
|
46
27
|
"--normal-border": "var(--border)",
|
|
47
28
|
"--border-radius": "var(--radius)",
|
|
48
|
-
} as
|
|
29
|
+
} as CSSProperties
|
|
49
30
|
}
|
|
50
31
|
toastOptions={{
|
|
51
32
|
classNames: {
|
|
@@ -54,7 +35,7 @@ const Toaster = ({ ...props }: ToasterProps) => {
|
|
|
54
35
|
}}
|
|
55
36
|
{...props}
|
|
56
37
|
/>
|
|
57
|
-
)
|
|
58
|
-
}
|
|
38
|
+
);
|
|
39
|
+
};
|
|
59
40
|
|
|
60
|
-
export { Toaster }
|
|
41
|
+
export { Toaster };
|