@voyantjs/finance-ui 0.85.2 → 0.85.4

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.
@@ -1,9 +1,22 @@
1
- import { type InvoiceRecord } from "@voyantjs/finance-react";
1
+ import { type BookingPaymentScheduleRecord, type InvoiceRecord } from "@voyantjs/finance-react";
2
+ export type InvoiceTypeChoice = "invoice" | "proforma";
2
3
  export interface BookingInvoiceDialogUpload {
3
4
  storageKey: string;
4
5
  mimeType: string;
5
6
  fileSize: number;
6
7
  }
8
+ export interface BookingInvoiceDueDateResolverInput {
9
+ issueDate: string;
10
+ dueDate: string;
11
+ invoiceType: InvoiceTypeChoice;
12
+ booking: {
13
+ id: string;
14
+ currency: string;
15
+ amountCents: number | null;
16
+ };
17
+ bookingPaymentSchedule: BookingPaymentScheduleRecord;
18
+ }
19
+ export type BookingInvoiceDueDateResolver = (input: BookingInvoiceDueDateResolverInput) => string;
7
20
  export interface BookingInvoiceDialogProps {
8
21
  open: boolean;
9
22
  onOpenChange: (open: boolean) => void;
@@ -28,6 +41,12 @@ export interface BookingInvoiceDialogProps {
28
41
  * would apply server-side at issuance. Defaults to 0 when omitted.
29
42
  */
30
43
  defaultScheduleTaxRatePercent?: number;
44
+ /**
45
+ * Resolve the legal document due date when an invoice/proforma is
46
+ * derived from a payment schedule. Defaults to the schedule due date
47
+ * for backwards compatibility.
48
+ */
49
+ resolveScheduleDueDate?: BookingInvoiceDueDateResolver;
31
50
  onSuccess?: (invoice: InvoiceRecord) => void;
32
51
  }
33
52
  /**
@@ -40,5 +59,5 @@ export interface BookingInvoiceDialogProps {
40
59
  * supporting documents.
41
60
  */
42
61
  export declare function BookingInvoiceDialog({ open, onOpenChange, bookingId, defaultCurrency, // i18n-literal-ok domain default currency
43
- defaultAmountCents, uploadFile, defaultScheduleTaxRatePercent, onSuccess, }: BookingInvoiceDialogProps): import("react/jsx-runtime").JSX.Element;
62
+ defaultAmountCents, uploadFile, defaultScheduleTaxRatePercent, resolveScheduleDueDate, onSuccess, }: BookingInvoiceDialogProps): import("react/jsx-runtime").JSX.Element;
44
63
  //# sourceMappingURL=booking-invoice-dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"booking-invoice-dialog.d.ts","sourceRoot":"","sources":["../../src/components/booking-invoice-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAKnB,MAAM,yBAAyB,CAAA;AAqChC,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAChE;;;;;OAKG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAA;IACtC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;CAC7C;AAgED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,eAAuB,EAAE,0CAA0C;AACnE,kBAAyB,EACzB,UAAU,EACV,6BAAiC,EACjC,SAAS,GACV,EAAE,yBAAyB,2CAuqB3B"}
1
+ {"version":3,"file":"booking-invoice-dialog.d.ts","sourceRoot":"","sources":["../../src/components/booking-invoice-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,aAAa,EAKnB,MAAM,yBAAyB,CAAA;AA0BhC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,CAAA;AAWtD,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,iBAAiB,CAAA;IAC9B,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAA;QACV,QAAQ,EAAE,MAAM,CAAA;QAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAC3B,CAAA;IACD,sBAAsB,EAAE,4BAA4B,CAAA;CACrD;AAED,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,kCAAkC,KAAK,MAAM,CAAA;AAEjG,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAChE;;;;;OAKG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAA;IACtC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,6BAA6B,CAAA;IACtD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;CAC7C;AAgED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,eAAuB,EAAE,0CAA0C;AACnE,kBAAyB,EACzB,UAAU,EACV,6BAAiC,EACjC,sBAAsB,EACtB,SAAS,GACV,EAAE,yBAAyB,2CAgsB3B"}
@@ -76,7 +76,7 @@ const PAYMENT_METHODS = [
76
76
  * supporting documents.
77
77
  */
78
78
  export function BookingInvoiceDialog({ open, onOpenChange, bookingId, defaultCurrency = "EUR", // i18n-literal-ok domain default currency
79
- defaultAmountCents = null, uploadFile, defaultScheduleTaxRatePercent = 0, onSuccess, }) {
79
+ defaultAmountCents = null, uploadFile, defaultScheduleTaxRatePercent = 0, resolveScheduleDueDate, onSuccess, }) {
80
80
  const { createFromBooking } = useInvoiceMutation();
81
81
  const { baseUrl, fetcher } = useVoyantFinanceContext();
82
82
  const messages = useFinanceUiMessagesOrDefault();
@@ -143,7 +143,6 @@ defaultAmountCents = null, uploadFile, defaultScheduleTaxRatePercent = 0, onSucc
143
143
  return;
144
144
  }
145
145
  setCurrency(selectedSchedule.currency);
146
- setDueDate(selectedSchedule.dueDate);
147
146
  // The schedule amount is the gross (customer-facing) sum, so the
148
147
  // line item's net unit price is `amount / (1 + tax%)`. Without this
149
148
  // back-out the line would compute as `amount + amount * tax%`,
@@ -162,6 +161,30 @@ defaultAmountCents = null, uploadFile, defaultScheduleTaxRatePercent = 0, onSucc
162
161
  },
163
162
  ]);
164
163
  }, [source, selectedSchedule, defaultScheduleTaxRatePercent]);
164
+ useEffect(() => {
165
+ if (source !== "schedule" || !selectedSchedule)
166
+ return;
167
+ setDueDate(resolveScheduleDueDate?.({
168
+ issueDate,
169
+ dueDate: selectedSchedule.dueDate,
170
+ invoiceType,
171
+ booking: {
172
+ id: bookingId,
173
+ currency: defaultCurrency,
174
+ amountCents: defaultAmountCents,
175
+ },
176
+ bookingPaymentSchedule: selectedSchedule,
177
+ }) ?? selectedSchedule.dueDate);
178
+ }, [
179
+ source,
180
+ selectedSchedule,
181
+ resolveScheduleDueDate,
182
+ issueDate,
183
+ invoiceType,
184
+ bookingId,
185
+ defaultCurrency,
186
+ defaultAmountCents,
187
+ ]);
165
188
  // ---- line item totals ----------------------------------------------------
166
189
  // When the operator entered explicit line items, the global Subtotal/Tax/
167
190
  // Total fields become a read-only summary of the sum across rows.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { BookingInvoiceDialog, type BookingInvoiceDialogProps, type BookingInvoiceDialogUpload, } from "./components/booking-invoice-dialog.js";
1
+ export { BookingInvoiceDialog, type BookingInvoiceDialogProps, type BookingInvoiceDialogUpload, type BookingInvoiceDueDateResolver, type BookingInvoiceDueDateResolverInput, type InvoiceTypeChoice, } from "./components/booking-invoice-dialog.js";
2
2
  export { actionLedgerRiskVariant, actionLedgerStatusVariant, InvoiceActionLedgerCard, type InvoiceActionLedgerCardProps, PaymentSessionActionLedgerCard, type PaymentSessionActionLedgerCardProps, } from "./components/invoice-action-ledger-card.js";
3
3
  export { creditNoteStatusVariant, DetailLink, type DetailLinkProps, DetailRow, type DetailRowProps, EmptyRow as InvoiceDetailEmptyRow, type EmptyRowProps as InvoiceDetailEmptyRowProps, formatPaymentMethod as formatInvoicePaymentMethod, InvoiceAttachmentsCard, type InvoiceAttachmentsCardProps, InvoiceCreditNotesCard, type InvoiceCreditNotesCardProps, type InvoiceDetailCardProps, InvoiceDetailHeader, type InvoiceDetailHeaderProps, type InvoiceDetailIntegrationContent, type InvoiceDetailIntegrationSlotContext, InvoiceDetailLoading, InvoiceDetailPage, type InvoiceDetailPageProps, type InvoiceDetailPageSlots, InvoiceDetailState, InvoiceLineItemsCard, type InvoiceLineItemsCardProps, InvoiceLinksCard, type InvoiceLinksCardProps, InvoiceNotesCard, type InvoiceNotesCardProps, InvoicePaymentsCard, type InvoicePaymentsCardProps, InvoiceSummaryCard, invoiceStatusVariant, LoadingRow as InvoiceDetailLoadingRow, Money, type MoneyProps, paymentStatusVariant, } from "./components/invoice-detail-page.js";
4
4
  export { InvoiceDetailPageWithActionLedger, type InvoiceDetailPageWithActionLedgerProps, } from "./components/invoice-detail-page-with-action-ledger.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/finance-ui",
3
- "version": "0.85.2",
3
+ "version": "0.85.4",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,14 +45,14 @@
45
45
  "react-dom": "^19.0.0",
46
46
  "react-hook-form": "^7.60.0",
47
47
  "zod": "^4.3.6",
48
- "@voyantjs/bookings-ui": "0.85.2",
49
- "@voyantjs/finance": "0.85.2",
50
- "@voyantjs/finance-react": "0.85.2",
51
- "@voyantjs/suppliers-ui": "0.85.2",
52
- "@voyantjs/ui": "0.85.2"
48
+ "@voyantjs/bookings-ui": "0.85.4",
49
+ "@voyantjs/finance": "0.85.4",
50
+ "@voyantjs/finance-react": "0.85.4",
51
+ "@voyantjs/suppliers-ui": "0.85.4",
52
+ "@voyantjs/ui": "0.85.4"
53
53
  },
54
54
  "dependencies": {
55
- "@voyantjs/i18n": "0.85.2"
55
+ "@voyantjs/i18n": "0.85.4"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@tanstack/react-query": "^5.100.11",
@@ -65,12 +65,12 @@
65
65
  "typescript": "^6.0.2",
66
66
  "vitest": "^4.1.2",
67
67
  "zod": "^4.3.6",
68
- "@voyantjs/bookings-ui": "0.85.2",
69
- "@voyantjs/finance": "0.85.2",
70
- "@voyantjs/finance-react": "0.85.2",
71
- "@voyantjs/i18n": "0.85.2",
72
- "@voyantjs/suppliers-ui": "0.85.2",
73
- "@voyantjs/ui": "0.85.2",
68
+ "@voyantjs/bookings-ui": "0.85.4",
69
+ "@voyantjs/finance": "0.85.4",
70
+ "@voyantjs/finance-react": "0.85.4",
71
+ "@voyantjs/i18n": "0.85.4",
72
+ "@voyantjs/suppliers-ui": "0.85.4",
73
+ "@voyantjs/ui": "0.85.4",
74
74
  "@voyantjs/voyant-typescript-config": "0.1.0"
75
75
  },
76
76
  "files": [