@voyant-travel/finance-react 0.122.1 → 0.124.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.
@@ -115,7 +115,7 @@ function ResultPanel({ result }) {
115
115
  sessionId: sessionId ?? messages.result.noSession,
116
116
  }) }));
117
117
  }
118
- return (_jsxs("div", { className: "flex flex-col gap-4 rounded-xl border bg-card p-5", children: [_jsxs("div", { className: "flex items-center gap-2 text-emerald-700", children: [_jsx(CheckCircle2, { className: "h-5 w-5" }), _jsx("span", { className: "font-medium", children: messages.result.ready })] }), _jsx("p", { className: "text-muted-foreground text-sm", children: messages.result.body }), _jsxs("div", { className: "flex items-center gap-2 rounded-md border bg-muted/30 p-3 font-mono text-xs", children: [_jsx("span", { className: "flex-1 break-all", children: landingUrl }), _jsx("button", { type: "button", "aria-label": messages.result.copyLink, className: "text-muted-foreground hover:text-foreground", onClick: () => {
118
+ return (_jsxs("div", { className: "flex flex-col gap-4 rounded-md border bg-card p-5", children: [_jsxs("div", { className: "flex items-center gap-2 text-emerald-700", children: [_jsx(CheckCircle2, { className: "h-5 w-5" }), _jsx("span", { className: "font-medium", children: messages.result.ready })] }), _jsx("p", { className: "text-muted-foreground text-sm", children: messages.result.body }), _jsxs("div", { className: "flex items-center gap-2 rounded-md border bg-muted/30 p-3 font-mono text-xs", children: [_jsx("span", { className: "flex-1 break-all", children: landingUrl }), _jsx("button", { type: "button", "aria-label": messages.result.copyLink, className: "text-muted-foreground hover:text-foreground", onClick: () => {
119
119
  navigator.clipboard?.writeText(landingUrl).catch(() => undefined);
120
120
  }, children: _jsx(Copy, { className: "h-3.5 w-3.5" }) }), _jsx("a", { href: landingUrl, target: "_blank", rel: "noreferrer", "aria-label": messages.result.openLink, className: "text-muted-foreground hover:text-foreground", children: _jsx(ExternalLink, { className: "h-3.5 w-3.5" }) })] })] }));
121
121
  }
@@ -92,7 +92,7 @@ function CardPanel({ session, onPayByCard, }) {
92
92
  setStarting(false);
93
93
  }
94
94
  };
95
- return (_jsxs("div", { className: "rounded-xl border bg-card p-5 shadow-sm", children: [_jsx("p", { className: "mb-4 text-muted-foreground text-sm", children: messages.card.description }), _jsxs(Button, { className: "w-full", disabled: starting, onClick: handleClick, children: [starting && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), formatMessage(messages.card.payAmount, {
95
+ return (_jsxs("div", { className: "rounded-md border bg-card p-5 shadow-sm", children: [_jsx("p", { className: "mb-4 text-muted-foreground text-sm", children: messages.card.description }), _jsxs(Button, { className: "w-full", disabled: starting, onClick: handleClick, children: [starting && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), formatMessage(messages.card.payAmount, {
96
96
  amount: i18n.formatCurrency(session.amountCents / 100, session.currency),
97
97
  }), !starting && _jsx(ExternalLink, { className: "ml-2 h-4 w-4" })] }), error && (_jsx("p", { className: "mt-3 text-destructive text-xs", children: formatMessage(messages.card.errorAdvice, { message: error }) }))] }));
98
98
  }
@@ -100,7 +100,7 @@ function BankTransferPanel({ session, instructions, }) {
100
100
  const i18n = useCheckoutUiI18nOrDefault();
101
101
  const messages = i18n.messages.paymentLinkLandingPage;
102
102
  const reference = instructions.reference ?? session.externalReference ?? session.clientReference ?? session.id;
103
- return (_jsxs("div", { className: "rounded-xl border bg-card p-5 shadow-sm", children: [_jsx("p", { className: "mb-4 text-muted-foreground text-sm", children: formatMessage(messages.bank.instructions, {
103
+ return (_jsxs("div", { className: "rounded-md border bg-card p-5 shadow-sm", children: [_jsx("p", { className: "mb-4 text-muted-foreground text-sm", children: formatMessage(messages.bank.instructions, {
104
104
  amount: i18n.formatCurrency(session.amountCents / 100, session.currency),
105
105
  }) }), _jsxs("dl", { className: "grid grid-cols-1 gap-2 text-sm", children: [_jsx(Row, { label: messages.bank.beneficiary, children: instructions.beneficiaryName }), _jsx(Row, { label: messages.bank.iban, copyValue: instructions.iban, children: _jsx("span", { className: "font-mono", children: instructions.iban }) }), instructions.bic && (_jsx(Row, { label: messages.bank.bicSwift, copyValue: instructions.bic, children: _jsx("span", { className: "font-mono", children: instructions.bic }) })), instructions.bankName && _jsx(Row, { label: messages.bank.bank, children: instructions.bankName }), _jsx(Row, { label: messages.bank.reference, copyValue: reference, children: _jsx("span", { className: "font-mono", children: reference }) })] }), instructions.notes && (_jsx("p", { className: "mt-4 text-muted-foreground text-xs", children: instructions.notes }))] }));
106
106
  }
@@ -166,7 +166,7 @@ function TerminalState({ status, reason, onRetry, }) {
166
166
  }
167
167
  function ProcessingState() {
168
168
  const messages = useCheckoutUiMessagesOrDefault().paymentLinkLandingPage;
169
- return (_jsxs("div", { className: "flex flex-col items-center gap-3 rounded-xl border bg-card p-8 text-center", children: [_jsx(Loader2, { className: "h-10 w-10 animate-spin text-muted-foreground" }), _jsx("h2", { className: "font-semibold text-lg", children: messages.processing.title }), _jsx("p", { className: "max-w-md text-muted-foreground text-sm", children: messages.processing.body })] }));
169
+ return (_jsxs("div", { className: "flex flex-col items-center gap-3 rounded-md border bg-card p-8 text-center", children: [_jsx(Loader2, { className: "h-10 w-10 animate-spin text-muted-foreground" }), _jsx("h2", { className: "font-semibold text-lg", children: messages.processing.title }), _jsx("p", { className: "max-w-md text-muted-foreground text-sm", children: messages.processing.body })] }));
170
170
  }
171
171
  function defaultDescription(session, messages) {
172
172
  return messages.descriptions[session.targetType] ?? messages.descriptions.default;
@@ -27,7 +27,7 @@ export function PaymentStep({ value, onChange, capabilities, savedMethods, loadi
27
27
  // ─────────────────────────────────────────────────────────────────────────────
28
28
  function SavedMethodsSection({ loading, methods, selectedId, onSelect, }) {
29
29
  const messages = useCheckoutUiMessagesOrDefault().paymentStep.savedMethods;
30
- return (_jsxs("section", { className: "rounded-xl border bg-card p-5 shadow-sm", children: [_jsxs("header", { className: "mb-3 flex items-center justify-between", children: [_jsx("h3", { className: "font-medium text-sm", children: messages.title }), methods.length > 0 && (_jsx("span", { className: "text-muted-foreground text-xs", children: formatMessage(messages.countOnFile, { count: methods.length }) }))] }), loading ? (_jsx("div", { className: "h-16 animate-pulse rounded-md bg-muted/40" })) : methods.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed p-4 text-center text-muted-foreground text-xs", children: messages.empty })) : (_jsx("ul", { className: "flex flex-col gap-2", children: methods.map((m) => {
30
+ return (_jsxs("section", { className: "rounded-md border bg-card p-5 shadow-sm", children: [_jsxs("header", { className: "mb-3 flex items-center justify-between", children: [_jsx("h3", { className: "font-medium text-sm", children: messages.title }), methods.length > 0 && (_jsx("span", { className: "text-muted-foreground text-xs", children: formatMessage(messages.countOnFile, { count: methods.length }) }))] }), loading ? (_jsx("div", { className: "h-16 animate-pulse rounded-md bg-muted/40" })) : methods.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed p-4 text-center text-muted-foreground text-xs", children: messages.empty })) : (_jsx("ul", { className: "flex flex-col gap-2", children: methods.map((m) => {
31
31
  const selected = selectedId === m.id;
32
32
  return (_jsx("li", { children: _jsxs("button", { type: "button", onClick: () => onSelect(m), className: cn("flex w-full items-center gap-3 rounded-md border bg-background p-3 text-left transition-colors", selected
33
33
  ? "border-primary ring-2 ring-primary/20"
@@ -71,7 +71,7 @@ function AltMethodsSection({ value, onChange, showNewCard, extraOptions, hideHol
71
71
  onChange({ type: "extra", optionId: id.slice("extra:".length) });
72
72
  }
73
73
  };
74
- return (_jsxs("section", { className: "rounded-xl border bg-card p-5 shadow-sm", children: [_jsx("header", { className: "mb-3 flex items-center justify-between", children: _jsx("h3", { className: "font-medium text-sm", children: messages.title }) }), _jsxs(RadioGroup, { value: activeId ?? "__none", onValueChange: (v) => {
74
+ return (_jsxs("section", { className: "rounded-md border bg-card p-5 shadow-sm", children: [_jsx("header", { className: "mb-3 flex items-center justify-between", children: _jsx("h3", { className: "font-medium text-sm", children: messages.title }) }), _jsxs(RadioGroup, { value: activeId ?? "__none", onValueChange: (v) => {
75
75
  if (!v)
76
76
  return;
77
77
  if (v === "new_card" || v === "hold" || v.startsWith("extra:")) {
@@ -40,6 +40,18 @@ export interface SupplierInvoiceFormDialogProps {
40
40
  * when both this and `searchSuppliers` are provided.
41
41
  */
42
42
  createSupplier?: (name: string) => Promise<AsyncComboboxOption | null>;
43
+ /**
44
+ * Search the products module for the create dialog's product picker. When
45
+ * provided (create mode only), the operator can attribute the invoice to a
46
+ * product — and, with `listDeparturesForProduct`, to one of its departures.
47
+ * On save this emits a whole-invoice cost allocation seeded from the total.
48
+ */
49
+ searchProducts?: (query: string) => Promise<AsyncComboboxOption[]>;
50
+ /**
51
+ * List a product's departures for the create dialog's two-step picker (pick
52
+ * product, then departure). Only used alongside `searchProducts`.
53
+ */
54
+ listDeparturesForProduct?: (productId: string, query: string) => Promise<AsyncComboboxOption[]>;
43
55
  }
44
- export declare function SupplierInvoiceFormDialog({ open, onOpenChange, invoice, onSaved, extractFromFile, searchSuppliers, createSupplier, }: SupplierInvoiceFormDialogProps): import("react/jsx-runtime").JSX.Element;
56
+ export declare function SupplierInvoiceFormDialog({ open, onOpenChange, invoice, onSaved, extractFromFile, searchSuppliers, createSupplier, searchProducts, listDeparturesForProduct, }: SupplierInvoiceFormDialogProps): import("react/jsx-runtime").JSX.Element;
45
57
  //# sourceMappingURL=supplier-invoice-form-dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"supplier-invoice-form-dialog.d.ts","sourceRoot":"","sources":["../../src/components/supplier-invoice-form-dialog.tsx"],"names":[],"mappings":"AAwBA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAE3B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAY7E;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,iDAAiD;IACjD,OAAO,CAAC,EAAE,qBAAqB,CAAA;IAC/B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACpE;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACnE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAA;CACvE;AA0BD,wBAAgB,yBAAyB,CAAC,EACxC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,OAAO,EACP,eAAe,EACf,eAAe,EACf,cAAc,GACf,EAAE,8BAA8B,2CA4KhC"}
1
+ {"version":3,"file":"supplier-invoice-form-dialog.d.ts","sourceRoot":"","sources":["../../src/components/supplier-invoice-form-dialog.tsx"],"names":[],"mappings":"AAwBA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAE3B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAY7E;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,iDAAiD;IACjD,OAAO,CAAC,EAAE,qBAAqB,CAAA;IAC/B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACpE;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACnE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAA;IACtE;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAClE;;;OAGG;IACH,wBAAwB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;CAChG;AAuCD,wBAAgB,yBAAyB,CAAC,EACxC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,OAAO,EACP,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,wBAAwB,GACzB,EAAE,8BAA8B,2CAkPhC"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { formatMessage } from "@voyant-travel/i18n";
3
3
  import { Button, Dialog, DialogBody, DialogContent, DialogFooter, DialogHeader, DialogTitle, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Textarea, } from "@voyant-travel/ui/components";
4
4
  import { CurrencyCombobox } from "@voyant-travel/ui/components/currency-combobox";
@@ -28,9 +28,17 @@ function seed(invoice) {
28
28
  dueDate: invoice?.dueDate ?? "",
29
29
  internalRef: invoice?.internalRef ?? "",
30
30
  notes: invoice?.notes ?? "",
31
+ productId: "",
32
+ departureId: "",
33
+ total: "",
31
34
  };
32
35
  }
33
- export function SupplierInvoiceFormDialog({ open, onOpenChange, invoice, onSaved, extractFromFile, searchSuppliers, createSupplier, }) {
36
+ /** Parse a major-unit amount string ("1250.00") to integer cents. */
37
+ function toCents(major) {
38
+ const n = Number.parseFloat(major);
39
+ return Number.isFinite(n) ? Math.round(n * 100) : 0;
40
+ }
41
+ export function SupplierInvoiceFormDialog({ open, onOpenChange, invoice, onSaved, extractFromFile, searchSuppliers, createSupplier, searchProducts, listDeparturesForProduct, }) {
34
42
  const messages = useFinanceUiMessagesOrDefault();
35
43
  const t = messages.supplierInvoiceDetail.form;
36
44
  const statusLabels = messages.supplierInvoicesPage.statusLabels;
@@ -46,6 +54,7 @@ export function SupplierInvoiceFormDialog({ open, onOpenChange, invoice, onSaved
46
54
  try {
47
55
  const x = await extractFromFile(file);
48
56
  setForm((prev) => ({
57
+ ...prev,
49
58
  supplierInvoiceNo: x.supplierInvoiceNo ?? prev.supplierInvoiceNo,
50
59
  supplierId: x.supplierId ?? prev.supplierId,
51
60
  status: x.status ?? prev.status,
@@ -89,13 +98,44 @@ export function SupplierInvoiceFormDialog({ open, onOpenChange, invoice, onSaved
89
98
  update.mutate({ id: invoice.id, input: payload }, { onSuccess: (row) => onDone(row?.id ?? invoice.id) });
90
99
  }
91
100
  else {
92
- create.mutate(payload, { onSuccess: (row) => row && onDone(row.id) });
101
+ // Attribute the whole invoice to the picked departure (or, failing that,
102
+ // product) as a single manual cost allocation, seeded with the total.
103
+ const totalCents = toCents(form.total);
104
+ const allocations = form.departureId
105
+ ? [
106
+ {
107
+ targetType: "departure",
108
+ departureId: form.departureId,
109
+ amountCents: totalCents,
110
+ splitMethod: "manual",
111
+ },
112
+ ]
113
+ : form.productId
114
+ ? [
115
+ {
116
+ targetType: "product",
117
+ productId: form.productId,
118
+ amountCents: totalCents,
119
+ splitMethod: "manual",
120
+ },
121
+ ]
122
+ : undefined;
123
+ create.mutate({
124
+ ...payload,
125
+ ...(form.total ? { totalCents } : {}),
126
+ ...(allocations ? { allocations } : {}),
127
+ }, { onSuccess: (row) => row && onDone(row.id) });
93
128
  }
94
129
  };
95
130
  return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "sm:max-w-lg", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEdit ? t.editTitle : messages.supplierInvoicesPage.recordInvoice }) }), _jsxs(DialogBody, { className: "grid grid-cols-2 gap-3", children: [extractFromFile ? (_jsxs("label", { className: "col-span-2 cursor-pointer", children: [_jsxs("span", { className: "inline-flex h-9 items-center gap-2 rounded-md border border-dashed px-3 text-sm font-medium hover:bg-muted", children: [_jsx(Upload, { className: "size-4" }), extracting ? t.extracting : t.extractUpload] }), _jsx("input", { type: "file", className: "sr-only", disabled: extracting, onChange: (e) => {
96
131
  void handleExtract(e.target.files?.[0]);
97
132
  e.target.value = "";
98
- } })] })) : null, _jsx(Field, { label: t.supplierInvoiceNo, children: _jsx(Input, { value: form.supplierInvoiceNo, onChange: (e) => set({ supplierInvoiceNo: e.target.value }) }) }), _jsx(Field, { label: t.supplierId, children: searchSuppliers ? (_jsx(AsyncCombobox, { value: form.supplierId || null, onChange: (v) => set({ supplierId: v ?? "" }), search: searchSuppliers, onCreate: createSupplier, createLabel: (name) => formatMessage(t.supplierCreate, { name }), placeholder: t.supplierSearchPlaceholder })) : (_jsx(Input, { value: form.supplierId, onChange: (e) => set({ supplierId: e.target.value }) })) }), _jsx(Field, { label: t.status, children: _jsxs(Select, { value: form.status, onValueChange: (v) => set({ status: v ?? "received" }), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: STATUS_ORDER.map((s) => (_jsx(SelectItem, { value: s, children: statusLabels[s] }, s))) })] }) }), _jsx(Field, { label: t.currency, children: _jsx(CurrencyCombobox, { value: form.currency || null, onChange: (v) => set({ currency: v ?? "" }), className: "w-full" }) }), _jsx(Field, { label: t.issueDate, children: _jsx(DatePicker, { value: form.issueDate || null, onChange: (v) => set({ issueDate: v ?? "" }), className: "w-full" }) }), _jsx(Field, { label: t.dueDate, children: _jsx(DatePicker, { value: form.dueDate || null, onChange: (v) => set({ dueDate: v ?? "" }), className: "w-full" }) }), _jsx(Field, { label: t.internalRef, className: "col-span-2", children: _jsx(Input, { value: form.internalRef, onChange: (e) => set({ internalRef: e.target.value }) }) }), _jsx(Field, { label: t.notes, className: "col-span-2", children: _jsx(Textarea, { value: form.notes, onChange: (e) => set({ notes: e.target.value }) }) })] }), _jsx(DialogFooter, { children: _jsx(Button, { type: "button", disabled: !canSave || pending, onClick: submit, children: pending ? t.saving : t.save }) })] }) }));
133
+ } })] })) : null, _jsx(Field, { label: t.supplierInvoiceNo, children: _jsx(Input, { value: form.supplierInvoiceNo, onChange: (e) => set({ supplierInvoiceNo: e.target.value }) }) }), _jsx(Field, { label: t.supplierId, children: searchSuppliers ? (_jsx(AsyncCombobox, { value: form.supplierId || null, onChange: (v) => set({ supplierId: v ?? "" }), search: searchSuppliers, onCreate: createSupplier, createLabel: (name) => formatMessage(t.supplierCreate, { name }), placeholder: t.supplierSearchPlaceholder })) : (_jsx(Input, { value: form.supplierId, onChange: (e) => set({ supplierId: e.target.value }) })) }), _jsx(Field, { label: t.status, children: _jsxs(Select, { value: form.status, onValueChange: (v) => set({ status: v ?? "received" }), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: STATUS_ORDER.map((s) => (_jsx(SelectItem, { value: s, children: statusLabels[s] }, s))) })] }) }), _jsx(Field, { label: t.currency, children: _jsx(CurrencyCombobox, { value: form.currency || null, onChange: (v) => set({ currency: v ?? "" }), className: "w-full" }) }), _jsx(Field, { label: t.issueDate, children: _jsx(DatePicker, { value: form.issueDate || null, onChange: (v) => set({ issueDate: v ?? "" }), className: "w-full" }) }), _jsx(Field, { label: t.dueDate, children: _jsx(DatePicker, { value: form.dueDate || null, onChange: (v) => set({ dueDate: v ?? "" }), className: "w-full" }) }), !isEdit && searchProducts ? (_jsxs(_Fragment, { children: [_jsx(Field, { label: t.product, className: "col-span-2", children: _jsx(AsyncCombobox, { value: form.productId || null, onChange: (v) => set({ productId: v ?? "", departureId: "" }), search: searchProducts, placeholder: t.productSearchPlaceholder }) }), listDeparturesForProduct ? (_jsx(Field, { label: t.departure, className: "col-span-2", children: _jsx(AsyncCombobox
134
+ // Remount when the product changes so stale departures from
135
+ // the previous product can't be offered/selected.
136
+ , { value: form.departureId || null, onChange: (v) => set({ departureId: v ?? "" }), disabled: !form.productId, search: (query) => form.productId
137
+ ? listDeparturesForProduct(form.productId, query)
138
+ : Promise.resolve([]), placeholder: t.departureSearchPlaceholder }, form.productId || "no-product") })) : null, _jsx(Field, { label: formatMessage(t.totalLabel, { currency: form.currency || "" }), className: "col-span-2", children: _jsx(Input, { inputMode: "decimal", value: form.total, onChange: (e) => set({ total: e.target.value }) }) })] })) : null, _jsx(Field, { label: t.internalRef, className: "col-span-2", children: _jsx(Input, { value: form.internalRef, onChange: (e) => set({ internalRef: e.target.value }) }) }), _jsx(Field, { label: t.notes, className: "col-span-2", children: _jsx(Textarea, { value: form.notes, onChange: (e) => set({ notes: e.target.value }) }) })] }), _jsx(DialogFooter, { children: _jsx(Button, { type: "button", disabled: !canSave || pending, onClick: submit, children: pending ? t.saving : t.save }) })] }) }));
99
139
  }
100
140
  function Field({ label, className, children, }) {
101
141
  return (_jsxs("div", { className: cn("flex flex-col gap-2", className), children: [_jsx(Label, { children: label }), children] }));
@@ -9,6 +9,10 @@ export interface SupplierInvoicesPageProps {
9
9
  searchSuppliers?: (query: string) => Promise<AsyncComboboxOption[]>;
10
10
  /** Create a supplier inline from the create dialog's supplier picker. */
11
11
  createSupplier?: (name: string) => Promise<AsyncComboboxOption | null>;
12
+ /** Search products for the create dialog's product/departure attribution. */
13
+ searchProducts?: (query: string) => Promise<AsyncComboboxOption[]>;
14
+ /** List a product's departures for the create dialog's two-step picker. */
15
+ listDeparturesForProduct?: (productId: string, query: string) => Promise<AsyncComboboxOption[]>;
12
16
  }
13
- export declare function SupplierInvoicesPage({ className, onOpenSupplierInvoice, extractFromFile, searchSuppliers, createSupplier, }?: SupplierInvoicesPageProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function SupplierInvoicesPage({ className, onOpenSupplierInvoice, extractFromFile, searchSuppliers, createSupplier, searchProducts, listDeparturesForProduct, }?: SupplierInvoicesPageProps): import("react/jsx-runtime").JSX.Element;
14
18
  //# sourceMappingURL=supplier-invoices-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"supplier-invoices-page.d.ts","sourceRoot":"","sources":["../../src/components/supplier-invoices-page.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAO9D,OAAO,EACL,KAAK,yBAAyB,EAE/B,MAAM,mCAAmC,CAAA;AA4B1C,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,yEAAyE;IACzE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACpE,gEAAgE;IAChE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACnE,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAA;CACvE;AAID,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,cAAc,GACf,GAAE,yBAA8B,2CAwLhC"}
1
+ {"version":3,"file":"supplier-invoices-page.d.ts","sourceRoot":"","sources":["../../src/components/supplier-invoices-page.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAO9D,OAAO,EACL,KAAK,yBAAyB,EAE/B,MAAM,mCAAmC,CAAA;AA4B1C,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,yEAAyE;IACzE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACpE,gEAAgE;IAChE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACnE,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAA;IACtE,6EAA6E;IAC7E,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAClE,2EAA2E;IAC3E,wBAAwB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;CAChG;AAID,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,wBAAwB,GACzB,GAAE,yBAA8B,2CA0LhC"}
@@ -28,7 +28,7 @@ const STATUS_VARIANT = {
28
28
  disputed: "destructive",
29
29
  void: "outline",
30
30
  };
31
- export function SupplierInvoicesPage({ className, onOpenSupplierInvoice, extractFromFile, searchSuppliers, createSupplier, } = {}) {
31
+ export function SupplierInvoicesPage({ className, onOpenSupplierInvoice, extractFromFile, searchSuppliers, createSupplier, searchProducts, listDeparturesForProduct, } = {}) {
32
32
  const t = useFinanceUiMessagesOrDefault().supplierInvoicesPage;
33
33
  const [createOpen, setCreateOpen] = useState(false);
34
34
  const [search, setSearch] = useState("");
@@ -59,7 +59,7 @@ export function SupplierInvoicesPage({ className, onOpenSupplierInvoice, extract
59
59
  }
60
60
  setPageIndex(0);
61
61
  };
62
- return (_jsxs("div", { className: cn("flex flex-col gap-6 p-6", className), children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: t.title }), _jsx("p", { className: "text-sm text-muted-foreground", children: t.description })] }), _jsxs(Button, { onClick: () => setCreateOpen(true), children: [_jsx(Plus, { className: "size-4" }), t.recordInvoice] })] }), _jsx(SupplierInvoiceFormDialog, { open: createOpen, onOpenChange: setCreateOpen, onSaved: (id) => onOpenSupplierInvoice?.(id), extractFromFile: extractFromFile, searchSuppliers: searchSuppliers, createSupplier: createSupplier }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs("div", { className: "relative max-w-sm flex-1", children: [_jsx(Search, { className: "absolute left-2 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { className: "pl-8", placeholder: t.searchPlaceholder, value: search, onChange: (event) => {
62
+ return (_jsxs("div", { className: cn("flex flex-col gap-6 p-6", className), children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: t.title }), _jsx("p", { className: "text-sm text-muted-foreground", children: t.description })] }), _jsxs(Button, { onClick: () => setCreateOpen(true), children: [_jsx(Plus, { className: "size-4" }), t.recordInvoice] })] }), _jsx(SupplierInvoiceFormDialog, { open: createOpen, onOpenChange: setCreateOpen, onSaved: (id) => onOpenSupplierInvoice?.(id), extractFromFile: extractFromFile, searchSuppliers: searchSuppliers, createSupplier: createSupplier, searchProducts: searchProducts, listDeparturesForProduct: listDeparturesForProduct }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs("div", { className: "relative max-w-sm flex-1", children: [_jsx(Search, { className: "absolute left-2 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { className: "pl-8", placeholder: t.searchPlaceholder, value: search, onChange: (event) => {
63
63
  setSearch(event.target.value);
64
64
  setPageIndex(0);
65
65
  } })] }), _jsxs(Select, { value: status, onValueChange: (value) => {
@@ -99,7 +99,7 @@ function TaxesPageContent({ api }) {
99
99
  return (_jsx(TaxesPageApiContext.Provider, { value: api, children: _jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold tracking-tight", children: taxMessages.title }), _jsx("p", { className: "text-sm text-muted-foreground", children: taxMessages.description })] }), _jsxs(Button, { size: "sm", onClick: () => {
100
100
  setEditing(undefined);
101
101
  setSheetOpen(true);
102
- }, children: [_jsx(Plus, { className: "mr-1.5 h-3.5 w-3.5" }), taxMessages.addTax] })] }), isPending ? (_jsx(TaxesPageSkeleton, { rows: 5 })) : (_jsx("div", { className: "rounded-lg border bg-card text-card-foreground shadow-sm", children: rows.length === 0 ? (_jsx("p", { className: "py-12 text-center text-sm text-muted-foreground", children: taxMessages.empty })) : (_jsx("div", { className: "flex flex-col divide-y", children: rows.map((row) => {
102
+ }, children: [_jsx(Plus, { className: "mr-1.5 h-3.5 w-3.5" }), taxMessages.addTax] })] }), isPending ? (_jsx(TaxesPageSkeleton, { rows: 5 })) : (_jsx("div", { className: "rounded-md border bg-card text-card-foreground shadow-sm", children: rows.length === 0 ? (_jsx("p", { className: "py-12 text-center text-sm text-muted-foreground", children: taxMessages.empty })) : (_jsx("div", { className: "flex flex-col divide-y", children: rows.map((row) => {
103
103
  const overrideLines = row.taxClass.lines ?? [];
104
104
  return (_jsxs("div", { className: "flex items-center justify-between px-6 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "text-sm font-medium", children: row.taxClass.label }), _jsx("span", { className: "font-mono text-xs text-muted-foreground", children: row.taxClass.code }), _jsx(Badge, { variant: "secondary", className: "text-xs", children: taxMessages.taxClassBadge }), overrideLines.length ? (_jsx(Badge, { variant: "outline", className: "text-xs", children: taxMessages.regimeOverrideCount.replace("{count}", String(overrideLines.length)) })) : null] }), _jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-2 text-xs text-muted-foreground", children: [_jsx("span", { children: taxMessages.defaultRegimeLabel }), _jsx("span", { children: row.regime?.name ?? "-" }), _jsx("span", { className: "font-mono", children: row.regime?.code ?? "-" }), _jsx(Badge, { variant: "outline", className: "text-xs", children: formatRate(row.regime?.ratePercent ?? null) }), !row.taxClass.active ? (_jsx(Badge, { variant: "secondary", className: "text-xs", children: taxMessages.inactive })) : null] }), overrideLines.length ? (_jsxs("div", { className: "mt-1 flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground", children: [_jsx("span", { children: taxMessages.regimeOverridesLabel }), overrideLines.map((line) => {
105
105
  const regime = regimesById.get(line.regime_id);
@@ -120,7 +120,7 @@ function TaxesPageContent({ api }) {
120
120
  }, taxRegimes: taxRegimesQuery.data?.data ?? [] }), _jsxs("div", { className: "mt-2 flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold tracking-tight", children: taxMessages.policyTitle }), _jsx("p", { className: "text-sm text-muted-foreground", children: taxMessages.policyDescription })] }), _jsxs(Button, { size: "sm", onClick: () => {
121
121
  setEditingProfile(undefined);
122
122
  setProfileSheetOpen(true);
123
- }, children: [_jsx(Plus, { className: "mr-1.5 h-3.5 w-3.5" }), taxMessages.addPolicyProfile] })] }), isPending ? null : (_jsx("div", { className: "rounded-lg border bg-card text-card-foreground shadow-sm", children: (policyProfilesQuery.data?.data ?? []).length === 0 ? (_jsx("p", { className: "py-12 text-center text-sm text-muted-foreground", children: taxMessages.policyEmpty })) : (_jsx("div", { className: "flex flex-col divide-y", children: (policyProfilesQuery.data?.data ?? []).map((profile) => {
123
+ }, children: [_jsx(Plus, { className: "mr-1.5 h-3.5 w-3.5" }), taxMessages.addPolicyProfile] })] }), isPending ? null : (_jsx("div", { className: "rounded-md border bg-card text-card-foreground shadow-sm", children: (policyProfilesQuery.data?.data ?? []).length === 0 ? (_jsx("p", { className: "py-12 text-center text-sm text-muted-foreground", children: taxMessages.policyEmpty })) : (_jsx("div", { className: "flex flex-col divide-y", children: (policyProfilesQuery.data?.data ?? []).map((profile) => {
124
124
  const profileRules = policyRulesByProfileId.get(profile.id) ?? [];
125
125
  return (_jsxs("div", { className: "flex flex-col gap-3 px-6 py-4", children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "text-sm font-medium", children: profile.name }), _jsx("span", { className: "font-mono text-xs text-muted-foreground", children: profile.code }), profile.jurisdiction ? (_jsx(Badge, { variant: "outline", className: "text-xs", children: profile.jurisdiction })) : null, !profile.active ? (_jsx(Badge, { variant: "secondary", className: "text-xs", children: taxMessages.inactive })) : null] }), profile.description ? (_jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: profile.description })) : null] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: () => {
126
126
  setEditingRule(undefined);
@@ -161,5 +161,5 @@ function TaxesPageContent({ api }) {
161
161
  } })] }) }));
162
162
  }
163
163
  function TaxesPageSkeleton({ rows }) {
164
- return (_jsx("div", { className: "rounded-lg border bg-card text-card-foreground shadow-sm", children: _jsx("div", { className: "flex flex-col divide-y", children: Array.from({ length: rows }).map((_, index) => (_jsxs("div", { className: "flex items-center justify-between px-6 py-3", children: [_jsxs("div", { className: "min-w-0 flex-1 space-y-2", children: [_jsx(Skeleton, { className: "h-4 w-48" }), _jsx(Skeleton, { className: "h-3 w-72 max-w-full" })] }), _jsx(Skeleton, { className: "h-8 w-8 rounded-md" })] }, index))) }) }));
164
+ return (_jsx("div", { className: "rounded-md border bg-card text-card-foreground shadow-sm", children: _jsx("div", { className: "flex flex-col divide-y", children: Array.from({ length: rows }).map((_, index) => (_jsxs("div", { className: "flex items-center justify-between px-6 py-3", children: [_jsxs("div", { className: "min-w-0 flex-1 space-y-2", children: [_jsx(Skeleton, { className: "h-4 w-48" }), _jsx(Skeleton, { className: "h-3 w-72 max-w-full" })] }), _jsx(Skeleton, { className: "h-8 w-8 rounded-md" })] }, index))) }) }));
165
165
  }
@@ -56,6 +56,11 @@ export declare const supplierInvoiceDetail: {
56
56
  extracting: string;
57
57
  supplierSearchPlaceholder: string;
58
58
  supplierCreate: string;
59
+ product: string;
60
+ departure: string;
61
+ productSearchPlaceholder: string;
62
+ departureSearchPlaceholder: string;
63
+ totalLabel: string;
59
64
  };
60
65
  summary: {
61
66
  subtotal: string;
@@ -1 +1 @@
1
- {"version":3,"file":"suppliers.d.ts","sourceRoot":"","sources":["../../../src/i18n/en/suppliers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIjC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BjC,CAAA"}
1
+ {"version":3,"file":"suppliers.d.ts","sourceRoot":"","sources":["../../../src/i18n/en/suppliers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsIjC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BjC,CAAA"}
@@ -56,6 +56,11 @@ export const supplierInvoiceDetail = {
56
56
  extracting: "Extracting…",
57
57
  supplierSearchPlaceholder: "Search suppliers…",
58
58
  supplierCreate: 'Create supplier "{name}"',
59
+ product: "Product",
60
+ departure: "Departure",
61
+ productSearchPlaceholder: "Search products…",
62
+ departureSearchPlaceholder: "Search departures…",
63
+ totalLabel: "Total ({currency})",
59
64
  },
60
65
  summary: {
61
66
  subtotal: "Subtotal",
package/dist/i18n/en.d.ts CHANGED
@@ -210,6 +210,11 @@ export declare const financeUiEn: {
210
210
  extracting: string;
211
211
  supplierSearchPlaceholder: string;
212
212
  supplierCreate: string;
213
+ product: string;
214
+ departure: string;
215
+ productSearchPlaceholder: string;
216
+ departureSearchPlaceholder: string;
217
+ totalLabel: string;
213
218
  };
214
219
  summary: {
215
220
  subtotal: string;
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBK,CAAA"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBK,CAAA"}
@@ -52,6 +52,13 @@ export type SupplierInvoiceDetailMessages = {
52
52
  supplierSearchPlaceholder: string;
53
53
  /** Inline "create supplier" row label; `{name}` = typed query. */
54
54
  supplierCreate: string;
55
+ /** Product/departure attribution (create mode, shown only when wired). */
56
+ product: string;
57
+ departure: string;
58
+ productSearchPlaceholder: string;
59
+ departureSearchPlaceholder: string;
60
+ /** Invoice total used to seed the departure cost allocation; `{currency}`. */
61
+ totalLabel: string;
55
62
  };
56
63
  summary: {
57
64
  subtotal: string;
@@ -1 +1 @@
1
- {"version":3,"file":"suppliers.d.ts","sourceRoot":"","sources":["../../../src/i18n/messages/suppliers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suppliers.d.ts","sourceRoot":"","sources":["../../../src/i18n/messages/suppliers.ts"],"names":[],"mappings":"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"}
@@ -214,6 +214,11 @@ export declare const financeUiMessageDefinitions: {
214
214
  extracting: string;
215
215
  supplierSearchPlaceholder: string;
216
216
  supplierCreate: string;
217
+ product: string;
218
+ departure: string;
219
+ productSearchPlaceholder: string;
220
+ departureSearchPlaceholder: string;
221
+ totalLabel: string;
217
222
  };
218
223
  summary: {
219
224
  subtotal: string;
@@ -1211,6 +1216,11 @@ export declare const financeUiMessageDefinitions: {
1211
1216
  extracting: string;
1212
1217
  supplierSearchPlaceholder: string;
1213
1218
  supplierCreate: string;
1219
+ product: string;
1220
+ departure: string;
1221
+ productSearchPlaceholder: string;
1222
+ departureSearchPlaceholder: string;
1223
+ totalLabel: string;
1214
1224
  };
1215
1225
  summary: {
1216
1226
  subtotal: string;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/i18n/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAEtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAKtD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGe,CAAA;AAEvD,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,CAAA;AASjF,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACjC,SAAS,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAC7C,qBAOA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAClC,SAAS,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAC7C,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAStC;AAED,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,MAAM,EACN,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACjC,SAAS,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAC7C,2CAWA;AAED,eAAO,MAAM,gBAAgB,2CAA2B,CAAA;AACxD,eAAO,MAAM,oBAAoB,yBAA+B,CAAA;AAEhE,wBAAgB,yBAAyB,wCAExC;AAED,wBAAgB,6BAA6B,sBAE5C"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/i18n/provider.tsx"],"names":[],"mappings":"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"}
@@ -56,6 +56,11 @@ export declare const supplierInvoiceDetail: {
56
56
  extracting: string;
57
57
  supplierSearchPlaceholder: string;
58
58
  supplierCreate: string;
59
+ product: string;
60
+ departure: string;
61
+ productSearchPlaceholder: string;
62
+ departureSearchPlaceholder: string;
63
+ totalLabel: string;
59
64
  };
60
65
  summary: {
61
66
  subtotal: string;
@@ -1 +1 @@
1
- {"version":3,"file":"suppliers.d.ts","sourceRoot":"","sources":["../../../src/i18n/ro/suppliers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIjC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BjC,CAAA"}
1
+ {"version":3,"file":"suppliers.d.ts","sourceRoot":"","sources":["../../../src/i18n/ro/suppliers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsIjC,CAAA;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BjC,CAAA"}
@@ -56,6 +56,11 @@ export const supplierInvoiceDetail = {
56
56
  extracting: "Se extrage…",
57
57
  supplierSearchPlaceholder: "Cauta furnizori…",
58
58
  supplierCreate: 'Creeaza furnizorul "{name}"',
59
+ product: "Produs",
60
+ departure: "Plecare",
61
+ productSearchPlaceholder: "Cauta produse…",
62
+ departureSearchPlaceholder: "Cauta plecari…",
63
+ totalLabel: "Total ({currency})",
59
64
  },
60
65
  summary: {
61
66
  subtotal: "Subtotal",
package/dist/i18n/ro.d.ts CHANGED
@@ -210,6 +210,11 @@ export declare const financeUiRo: {
210
210
  extracting: string;
211
211
  supplierSearchPlaceholder: string;
212
212
  supplierCreate: string;
213
+ product: string;
214
+ departure: string;
215
+ productSearchPlaceholder: string;
216
+ departureSearchPlaceholder: string;
217
+ totalLabel: string;
213
218
  };
214
219
  summary: {
215
220
  subtotal: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ro.d.ts","sourceRoot":"","sources":["../../src/i18n/ro.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBK,CAAA"}
1
+ {"version":3,"file":"ro.d.ts","sourceRoot":"","sources":["../../src/i18n/ro.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBK,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyant-travel/finance-react",
3
- "version": "0.122.1",
3
+ "version": "0.124.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -93,13 +93,13 @@
93
93
  "recharts": "^3.0.0",
94
94
  "sonner": "^2.0.7",
95
95
  "zod": "^4.0.0",
96
- "@voyant-travel/admin": "^0.111.4",
97
- "@voyant-travel/bookings-react": "^0.122.0",
98
- "@voyant-travel/inventory-react": "^0.4.0",
99
- "@voyant-travel/finance": "^0.122.1",
100
- "@voyant-travel/distribution-react": "^0.112.0",
101
- "@voyant-travel/ui": "^0.106.2",
102
- "@voyant-travel/operations-react": "^0.3.0"
96
+ "@voyant-travel/admin": "^0.113.0",
97
+ "@voyant-travel/bookings-react": "^0.124.0",
98
+ "@voyant-travel/finance": "^0.124.0",
99
+ "@voyant-travel/inventory-react": "^0.6.0",
100
+ "@voyant-travel/distribution-react": "^0.114.0",
101
+ "@voyant-travel/ui": "^0.107.0",
102
+ "@voyant-travel/operations-react": "^0.5.0"
103
103
  },
104
104
  "peerDependenciesMeta": {
105
105
  "@tanstack/react-table": {
@@ -151,16 +151,16 @@
151
151
  "typescript": "^6.0.2",
152
152
  "vitest": "^4.1.2",
153
153
  "zod": "^4.3.6",
154
- "@voyant-travel/bookings-react": "^0.122.0",
155
- "@voyant-travel/finance": "^0.122.1",
156
- "@voyant-travel/admin": "^0.111.4",
157
- "@voyant-travel/inventory-react": "^0.4.0",
154
+ "@voyant-travel/admin": "^0.113.0",
155
+ "@voyant-travel/bookings-react": "^0.124.0",
156
+ "@voyant-travel/finance": "^0.124.0",
157
+ "@voyant-travel/i18n": "^0.106.1",
158
+ "@voyant-travel/inventory-react": "^0.6.0",
158
159
  "@voyant-travel/react": "^0.104.1",
159
- "@voyant-travel/distribution-react": "^0.112.0",
160
+ "@voyant-travel/distribution-react": "^0.114.0",
161
+ "@voyant-travel/ui": "^0.107.0",
160
162
  "@voyant-travel/voyant-typescript-config": "^0.1.0",
161
- "@voyant-travel/operations-react": "^0.3.0",
162
- "@voyant-travel/ui": "^0.106.2",
163
- "@voyant-travel/i18n": "^0.106.1"
163
+ "@voyant-travel/operations-react": "^0.5.0"
164
164
  },
165
165
  "files": [
166
166
  "dist",