@wisemen/wise-invoicing-web 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/{ApprovalReminderSettingsViewDataProvider-DwtfyQpx.js → ApprovalReminderSettingsViewDataProvider-IuReavOR.js} +3 -3
  2. package/dist/{BillingDocumentDetailViewDataProvider-TJUwMhtn.js → BillingDocumentDetailViewDataProvider-B3I6UIKY.js} +2201 -1728
  3. package/dist/BillingDocumentDetailViewDataProvider.css +1 -1
  4. package/dist/{BillingDocumentPdf-PU9Ldfhs.js → BillingDocumentPdf-rFqmLUPy.js} +226 -219
  5. package/dist/{CreditNoteDetailViewDataProvider-DOPmal5D.js → CreditNoteDetailViewDataProvider-CQRnG2Fz.js} +42 -42
  6. package/dist/{CreditNotePdfViewDataProvider-BH7MaReQ.js → CreditNotePdfViewDataProvider-RytwPWH5.js} +2 -2
  7. package/dist/{CustomFieldValueText-BjRVovZL.js → CustomFieldValueText-DA0aPKwC.js} +2 -2
  8. package/dist/{DunningCaseDetailViewDataProvider-CW8ijY3H.js → DunningCaseDetailViewDataProvider-BRYbYgTw.js} +65 -65
  9. package/dist/{DunningCaseOverviewView-Cfo-4VIw.js → DunningCaseOverviewView-D0vScVF1.js} +125 -125
  10. package/dist/{DunningCaseReminderPdfViewDataProvider-Dr-CS_VQ.js → DunningCaseReminderPdfViewDataProvider-I_ZQiAuK.js} +2 -2
  11. package/dist/{DunningCaseSendDialog-BYFXJYMM.js → DunningCaseSendDialog-CV66_tMv.js} +8 -8
  12. package/dist/{InvoiceApprovalOutOfSyncIndicator-CP2GLaeh.js → InvoiceApprovalOutOfSyncIndicator-AJOQe8j8.js} +2 -2
  13. package/dist/{InvoiceApprovalOverviewView-Cjdu9iZC.js → InvoiceApprovalOverviewView-CcMqr2jH.js} +213 -213
  14. package/dist/{InvoiceApprovalStatusBadge-CcX8agTF.js → InvoiceApprovalStatusBadge-BJ3Q18bf.js} +4 -4
  15. package/dist/{InvoiceApproveDialogDataProvider-4wNAetBn.js → InvoiceApproveDialogDataProvider-DaCEHgs0.js} +7 -7
  16. package/dist/{InvoiceDetailViewDataProvider-C9O3hXGo.js → InvoiceDetailViewDataProvider-B5uZY8Qy.js} +47 -47
  17. package/dist/{InvoiceOverviewViewDataProvider-DBdw7FvZ.js → InvoiceOverviewViewDataProvider-BrgmweRE.js} +57 -57
  18. package/dist/{InvoicePdfView-CvU9bRVd.js → InvoicePdfView-CPEX7E9W.js} +1 -1
  19. package/dist/{InvoicePdfViewDataProvider-CFjHQ58K.js → InvoicePdfViewDataProvider-T4-8A2OD.js} +3 -3
  20. package/dist/{InvoicePublicPdfViewDataProvider-DDv-LdBU.js → InvoicePublicPdfViewDataProvider-BkHZoPSZ.js} +3 -3
  21. package/dist/{InvoicePublicProFormaPdfViewDataProvider-BTjJnELb.js → InvoicePublicProFormaPdfViewDataProvider-CfkArXbC.js} +3 -3
  22. package/dist/{InvoicingFileUploadProvider-Kcq7kSSt.js → InvoicingFileUploadProvider-BLBjPKqx.js} +1 -1
  23. package/dist/{IssuerSettingsViewDataProvider-BuSIVnIl.js → IssuerSettingsViewDataProvider-BStn0jFI.js} +2 -2
  24. package/dist/{ReminderSettingsViewDataProvider-CH7gSXnj.js → ReminderSettingsViewDataProvider-CjX7afDs.js} +3 -3
  25. package/dist/{api.util-CkIRZS3h.js → api.util-D6m6OY3_.js} +15 -6
  26. package/dist/{billingDocumentDetail.transformer-Bfd8geNo.js → billingDocumentDetail.transformer-Da-Nt4bI.js} +37 -29
  27. package/dist/client/index.d.ts +1 -1
  28. package/dist/client/types.gen.d.ts +16 -2
  29. package/dist/client/zod.gen.d.ts +28 -0
  30. package/dist/{creditNoteDetail.query-tLnfqsEB.js → creditNoteDetail.query-Yb8TdZNm.js} +22 -18
  31. package/dist/{dist-D5agTXFI.js → dist-BpDuRYDT.js} +132 -132
  32. package/dist/{dist-boJIIxnT.js → dist-Cdbpkd3Y.js} +1 -1
  33. package/dist/{dist-BD7Allff.js → dist-DCbLgB6Y.js} +182 -102
  34. package/dist/{i18n.lib--mzprLMR.js → i18n.lib-CKs3ExEl.js} +28 -0
  35. package/dist/index.d.ts +28 -0
  36. package/dist/index.js +33 -32
  37. package/dist/{invoice.service-B1w16_Md.js → invoice.service-DWDl9XRh.js} +214 -209
  38. package/dist/{invoiceApproval.service-BHAJmFkU.js → invoiceApproval.service-Fwlxgd9o.js} +2 -2
  39. package/dist/{invoiceApprovalStatus.util-DohOKR4q.js → invoiceApprovalStatus.util-q-zHLdFV.js} +1 -1
  40. package/dist/{invoiceCustomer.service-DpVfpQUD.js → invoiceCustomer.service-DOexR54S.js} +2 -2
  41. package/dist/{invoiceDetail.query-CfyNSXLS.js → invoiceDetail.query-B5w0Vlsy.js} +1 -1
  42. package/dist/{invoiceIndexCache.util-jHsrFwcA.js → invoiceIndexCache.util-CUlp4R7R.js} +2 -2
  43. package/dist/{invoicingConfig.composable-COn1rKRf.js → invoicingConfig.composable-DjFexycc.js} +2 -2
  44. package/dist/{issuerSettings.query-CDFk2GiP.js → issuerSettings.query-BHuLjV9P.js} +1 -1
  45. package/dist/libs/i18n.lib.d.ts +28 -0
  46. package/dist/locales/en-US.json.d.ts +14 -0
  47. package/dist/locales/nl-BE.json.d.ts +14 -0
  48. package/dist/models/billing-document/billingDocumentDetail.model.d.ts +1 -0
  49. package/dist/models/billing-document/billingDocumentLineGroup.util.d.ts +15 -0
  50. package/dist/models/billing-document/billingDocumentLineGroup.util.spec.d.ts +1 -0
  51. package/dist/models/billing-document/billingDocumentUpdateLines.model.d.ts +1 -0
  52. package/dist/modules/invoice/models/invoice/pdf/invoicePdfDetail.model.d.ts +1 -0
  53. package/dist/modules/invoice/use-cases/pdf/components/invoicePdf.types.d.ts +4 -1
  54. package/dist/modules/invoice/use-cases/pdf/utils/invoicePdf.util.d.ts +5 -0
  55. package/dist/{reminderConfig.query-DSO0ekC_.js → reminderConfig.query-C4J6m4ER.js} +1 -1
  56. package/dist/style.css +1 -1
  57. package/dist/types/apiError.type.d.ts +2 -2
  58. package/dist/ui/billing-document/table/BillingDocumentLineItemDeleteDialog.vue.d.ts +1 -0
  59. package/dist/ui/billing-document/table/BillingDocumentLineItemsInsertIndicator.vue.d.ts +3 -0
  60. package/dist/ui/billing-document/table/BillingDocumentLineItemsTableGroupRow.vue.d.ts +5 -2
  61. package/dist/ui/billing-document/table/BillingDocumentLineItemsTreeIndent.vue.d.ts +17 -0
  62. package/dist/ui/billing-document/table/billingDocumentLineItemsTable.context.d.ts +78 -18
  63. package/dist/ui/billing-document/table/composables/useBillingDocumentLineItemsEditor.composable.d.ts +14 -4
  64. package/dist/ui/billing-document/table/composables/useBillingDocumentLineItemsKeyboardNav.composable.d.ts +6 -0
  65. package/dist/ui/billing-document/table/composables/useBillingDocumentLineItemsRowMutations.composable.d.ts +8 -4
  66. package/dist/ui/billing-document/table/composables/useBillingDocumentLineItemsTableDrag.composable.d.ts +16 -3
  67. package/dist/ui/billing-document/table/utils/billingDocumentLineItemsEditor.util.d.ts +163 -26
  68. package/package.json +2 -2
@@ -9,6 +9,7 @@ export declare const BILLING_DOCUMENT_VAT_RATE_OPTIONS: VatRate[];
9
9
  export declare const BILLING_DOCUMENT_UNIT_OPTIONS: UnitOfMeasurement[];
10
10
  export interface BillingDocumentLineItemEditorGroupRow {
11
11
  id: string;
12
+ parentGroupId: string | null;
12
13
  sourceGroupUuid: string | null;
13
14
  name: string;
14
15
  customFields: CustomFieldValue[];
@@ -31,76 +32,207 @@ export interface BillingDocumentLineItemEditorLineRow {
31
32
  vatRate: VatRate;
32
33
  }
33
34
  export type BillingDocumentLineItemEditorRow = BillingDocumentLineItemEditorGroupRow | BillingDocumentLineItemEditorLineRow;
34
- /**
35
- * Where a dropped row is meant to land when the slot itself cannot say.
36
- *
37
- * `group` joins the group the slot borders, `root` keeps the row ungrouped.
38
- * Callers without a pointer gesture behind them (keyboard, insert indicator)
39
- * pass `null` and fall back to neighbour inference.
40
- */
41
- export type BillingDocumentLineItemDropIntent = 'group' | 'root';
35
+ /** Mirrors the API's MAX_INVOICE_LINE_GROUP_DEPTH: a top-level group is level 1. */
36
+ export declare const BILLING_DOCUMENT_LINE_ITEM_MAX_GROUP_LEVEL = 4;
37
+ export interface BillingDocumentLineItemRowStructure {
38
+ /** The groups the row sits in, outermost first. */
39
+ ancestorGroupIds: string[];
40
+ /** How many groups the row sits in: 0 at the top level. */
41
+ depth: number;
42
+ }
43
+ export interface BillingDocumentLineItemGroupStructure {
44
+ /** Every line inside the group, at any depth. */
45
+ descendantLineIds: string[];
46
+ /** Group levels the group spans: 1 without subgroups, 2 with one level of them, … */
47
+ height: number;
48
+ /** 1 for a top-level group. */
49
+ level: number;
50
+ /** Every group inside the group, at any depth. */
51
+ subgroupCount: number;
52
+ }
53
+ /** What the flat rows encode about nesting, derived once per change of the rows. */
54
+ export interface BillingDocumentLineItemsStructure {
55
+ groups: ReadonlyMap<string, BillingDocumentLineItemGroupStructure>;
56
+ /** The deepest row depth in the document. */
57
+ maxDepth: number;
58
+ rows: ReadonlyMap<string, BillingDocumentLineItemRowStructure>;
59
+ }
42
60
  export interface BillingDocumentLineItemEditorMeta {
43
61
  currency: Monetary['currency'];
44
62
  documentType: AnyBillingDocumentDetail['type'];
45
63
  precision: number;
46
64
  }
47
65
  export declare class BillingDocumentLineItemsEditorUtil {
66
+ /**
67
+ * Appends one level of the server tree in position order — lines and
68
+ * subgroups share the positions of their level, so they interleave — with
69
+ * every group directly followed by its own contents.
70
+ */
71
+ private static appendBillingDocumentEditorRows;
48
72
  static buildBillingDocumentLineItemsPayload(meta: BillingDocumentLineItemEditorMeta, rows: BillingDocumentLineItemEditorRow[]): BillingDocumentUpdateLines;
73
+ /**
74
+ * Reads the nesting the flat rows encode. Each row lands in the group its
75
+ * `groupId` / `parentGroupId` points at, in the order it appears; a row whose
76
+ * group is missing — or whose parent chain loops back on itself — is lifted
77
+ * to the top level.
78
+ */
79
+ private static buildRowTree;
80
+ /**
81
+ * Whether a new group can be created inside `parentGroupId` (the top level
82
+ * when `null`) without nesting deeper than the API allows.
83
+ */
84
+ static canAddGroupInside(structure: BillingDocumentLineItemsStructure, parentGroupId: string | null): boolean;
85
+ /** Whether {@link groupSelectedRows} can wrap the selection without nesting too deep. */
86
+ static canGroupSelectedRows(rows: BillingDocumentLineItemEditorRow[], selectedIds: ReadonlySet<string>): boolean;
87
+ private static collectRowTreeLineIds;
49
88
  static createBillingDocumentEditorRows(invoice: AnyBillingDocumentDetail): BillingDocumentLineItemEditorRow[];
50
89
  static createBillingDocumentLineItemDiscount(discountPercentage: Percentage | null): BillingDocumentDiscount | null;
51
90
  static createBillingDocumentLineItemDisplayRows(invoice: AnyBillingDocumentDetail, isEditable: boolean): BillingDocumentLineItemEditorRow[];
52
- static createBillingDocumentLineItemGroupRow(group: BillingDocumentLineGroup): BillingDocumentLineItemEditorGroupRow;
91
+ static createBillingDocumentLineItemGroupRow(group: BillingDocumentLineGroup, parentGroupId?: string | null): BillingDocumentLineItemEditorGroupRow;
53
92
  static createBillingDocumentLineItemRowFromInvoiceLine(documentType: AnyBillingDocumentDetail['type'], line: BillingDocumentLine): BillingDocumentLineItemEditorLineRow;
54
93
  static createBillingDocumentLineItemRowsKey(rows: BillingDocumentLineItemEditorRow[]): string;
55
94
  static createBillingDocumentLineItemsMeta(invoice: AnyBillingDocumentDetail): BillingDocumentLineItemEditorMeta;
56
95
  static createBillingDocumentLineItemsServerSnapshot(invoice: AnyBillingDocumentDetail): string;
96
+ static createBillingDocumentLineItemsStructure(rows: BillingDocumentLineItemEditorRow[]): BillingDocumentLineItemsStructure;
57
97
  static createBillingDocumentLineItemTotals(row: BillingDocumentLineItemEditorLineRow): {
58
98
  discount: number;
59
99
  gross: number;
60
100
  net: number;
61
101
  vat: number;
62
102
  };
103
+ private static createBillingDocumentUpdateLevel;
63
104
  private static createBillingDocumentUpdateLine;
64
- static createNewBillingDocumentLineItemGroupRow(): BillingDocumentLineItemEditorGroupRow;
105
+ static createNewBillingDocumentLineItemGroupRow(parentGroupId?: string | null): BillingDocumentLineItemEditorGroupRow;
65
106
  static createNewBillingDocumentLineItemRow(meta: BillingDocumentLineItemEditorMeta, groupId?: string | null): BillingDocumentLineItemEditorLineRow;
107
+ /**
108
+ * Removes a group header. With `deleteContents` everything inside it goes
109
+ * too; without, its lines and subgroups move up into its parent, in place.
110
+ */
111
+ static deleteGroupRow(rows: BillingDocumentLineItemEditorRow[], groupId: string, deleteContents: boolean): BillingDocumentLineItemEditorRow[];
112
+ /**
113
+ * Removes the selected lines. A group goes with them once every line inside
114
+ * it — at any depth — is selected; a group without lines is left alone.
115
+ */
66
116
  static deleteSelectedRows(rows: BillingDocumentLineItemEditorRow[], selectedIds: ReadonlySet<string>): BillingDocumentLineItemEditorRow[];
67
117
  static duplicateBillingDocumentLineItemRow(row: BillingDocumentLineItemEditorLineRow): BillingDocumentLineItemEditorLineRow;
68
118
  static duplicateSelectedRows(rows: BillingDocumentLineItemEditorRow[], selectedIds: ReadonlySet<string>): BillingDocumentLineItemEditorRow[];
119
+ /**
120
+ * Index of the last row inside the group's block — its lines and subgroups
121
+ * at any depth — or of the header itself when the group is empty. Assumes
122
+ * the rows are normalized, so the block is contiguous.
123
+ */
69
124
  static findGroupBlockEndIndex(rows: BillingDocumentLineItemEditorRow[], groupId: string): number;
70
- private static findLineGroupHeaderIndex;
125
+ /**
126
+ * Where a row sits in the tree: its siblings array and index, and the same
127
+ * for the group it sits in (`null` at the top level).
128
+ */
129
+ private static findRowTreeLocation;
130
+ /**
131
+ * Index of the row heading the block that holds `targetIndex` on the level
132
+ * of `containerId`: the target itself, or its ancestor group directly inside
133
+ * that container. `-1` when the target sits outside the container.
134
+ */
135
+ private static findSiblingBlockStartIndex;
136
+ /**
137
+ * Flattens the tree back into rows, depth first, pointing every row at the
138
+ * group it now sits in. Rows whose placement did not change are kept as is.
139
+ */
140
+ private static flattenRowTree;
141
+ /** The level of a group, or 0 for the top level. */
142
+ private static getContainerLevel;
143
+ /**
144
+ * The groups a row dropped at `index` could join, deepest first: from the
145
+ * group the row above sits in (or heads) out to the group of the row below,
146
+ * which bounds the slot. `null` stands for the top level. Groups that are
147
+ * collapsed — or sit inside a collapsed group — are skipped, so a drop never
148
+ * vanishes into a group the user cannot see.
149
+ */
150
+ static getDropContainerIds(rows: BillingDocumentLineItemEditorRow[], index: number, collapsedGroupIds?: ReadonlySet<string>): Array<string | null>;
71
151
  private static getGroupBlockInsertionIndexAfterTarget;
72
152
  private static getGroupBlockInsertionIndexBeforeTarget;
153
+ /** The group a row sits in: a line's group, a group's parent group. */
154
+ private static getRowContainerId;
73
155
  private static getSignedQuantity;
74
156
  /**
75
- * Consolidates the selected lines into the supplied (new) group, inserting the
76
- * group block at the position of the first selected line. Non-selected rows
77
- * keep their order.
157
+ * Wraps the selection in the supplied (new) group. A group whose lines are
158
+ * all selected moves along as a whole; other selected lines move on their
159
+ * own. The new group is created in the innermost group that holds the whole
160
+ * selection, where the first selected row was. Rows stay unchanged when the
161
+ * wrap would nest deeper than the API allows.
78
162
  */
79
163
  static groupSelectedRows(rows: BillingDocumentLineItemEditorRow[], selectedIds: ReadonlySet<string>, groupRow: BillingDocumentLineItemEditorGroupRow): BillingDocumentLineItemEditorRow[];
164
+ /**
165
+ * Moves a row one level in: into the group directly above it on its own
166
+ * level, as that group's last row. Unchanged when there is no such group or
167
+ * the move would nest deeper than the API allows.
168
+ */
169
+ static indentRow(rows: BillingDocumentLineItemEditorRow[], rowId: string): BillingDocumentLineItemEditorRow[];
80
170
  static isBillingDocumentLineItemRowValid(row: BillingDocumentLineItemEditorRow): boolean;
81
171
  static isGroupRow(row: BillingDocumentLineItemEditorRow): row is BillingDocumentLineItemEditorGroupRow;
82
172
  static isLineRow(row: BillingDocumentLineItemEditorRow): row is BillingDocumentLineItemEditorLineRow;
83
173
  static isTransientEmptyLineRow(row: BillingDocumentLineItemEditorRow): boolean;
84
174
  static moveGroupBlockByIndex(rows: BillingDocumentLineItemEditorRow[], currentIndex: number, targetIndex: number): BillingDocumentLineItemEditorRow[];
85
- static moveSelectedRowsToGroup(rows: BillingDocumentLineItemEditorRow[], selectedIds: ReadonlySet<string>, groupId: string): BillingDocumentLineItemEditorRow[];
86
175
  /**
87
- * Re-orders rows so every line sits directly after its group's header, keeping
88
- * each group block contiguous. Lines whose group no longer exists become
89
- * ungrouped. Top-level order follows the first appearance of each group header
90
- * and ungrouped line.
176
+ * Moves a row by drag and drop. `currentIndex` and `targetIndex` follow the
177
+ * drag layer: the target is the index the row takes once it has left its own
178
+ * slot. `levelOffset` is how many levels the pointer travelled sideways
179
+ * (positive is deeper).
180
+ *
181
+ * A line lands in the group at the level closest to where it started plus
182
+ * that offset, among the groups the slot allows. A group keeps its parent
183
+ * and lands beside the sibling block it was dropped on, then moves in or out
184
+ * a level per step of offset.
185
+ */
186
+ static moveRowByIndex(rows: BillingDocumentLineItemEditorRow[], currentIndex: number, targetIndex: number, levelOffset?: number, collapsedGroupIds?: ReadonlySet<string>): BillingDocumentLineItemEditorRow[];
187
+ /**
188
+ * Moves the selected lines to the end of a group, or of the document when
189
+ * `groupId` is `null`.
190
+ */
191
+ static moveSelectedRowsToGroup(rows: BillingDocumentLineItemEditorRow[], selectedIds: ReadonlySet<string>, groupId: string | null): BillingDocumentLineItemEditorRow[];
192
+ /**
193
+ * Re-orders rows so every group header is directly followed by its own
194
+ * lines and subgroups, keeping each group block contiguous. Rows whose group
195
+ * no longer exists move to the top level. Order within each level follows
196
+ * the first appearance of each row.
91
197
  */
92
198
  static normalizeRows(rows: BillingDocumentLineItemEditorRow[]): BillingDocumentLineItemEditorRow[];
93
199
  /**
94
- * Resolves the group a line belongs to once it is inserted at `index`.
200
+ * Moves a row one level out: out of its group, to directly after that
201
+ * group's block. Unchanged for a row at the top level.
202
+ */
203
+ static outdentRow(rows: BillingDocumentLineItemEditorRow[], rowId: string): BillingDocumentLineItemEditorRow[];
204
+ /**
205
+ * Works out what {@link groupSelectedRows} would wrap: the selected rows as
206
+ * whole nodes (a fully selected group counts once), the path of groups that
207
+ * holds all of them, the child of that innermost group holding the first of
208
+ * them, and whether wrapping them stays within the maximum level.
209
+ */
210
+ private static planGroupSelection;
211
+ private static pruneSelectedFromRowTree;
212
+ private static removeGroupFromRowTree;
213
+ /**
214
+ * The group a dropped line joins at `index`: of the groups the slot allows
215
+ * (see {@link getDropContainerIds}), the one whose level is closest to
216
+ * `preferredLevel`.
217
+ */
218
+ static resolveDropContainerId(rows: BillingDocumentLineItemEditorRow[], index: number, preferredLevel: number, collapsedGroupIds?: ReadonlySet<string>): string | null;
219
+ /**
220
+ * The group a new group inserted between two visible rows belongs to: the
221
+ * innermost group both rows sit in, where the row above counts as inside its
222
+ * own group when it is an expanded group header. So a group added between
223
+ * two lines of a group nests in it, and one added between two groups — or at
224
+ * the very end — stays beside them.
225
+ */
226
+ static resolveGroupInsertParentId(visibleRows: BillingDocumentLineItemEditorRow[], index: number, structure: BillingDocumentLineItemsStructure, collapsedGroupIds: ReadonlySet<string>): string | null;
227
+ /**
228
+ * Resolves the group a new line belongs to once it is inserted at `index`.
95
229
  *
96
- * The slot right after a group's last line is ambiguous by construction: "the
97
- * new last line inside the group" and "the first line after the group" are the
98
- * same position in the row list and the same pixel band on screen. Neighbours
99
- * cannot disambiguate it, so a drop coming from the drag layer carries an
100
- * explicit `dropIntent`. Without one, the row is appended to the group it
230
+ * The slot right after a group's last row is ambiguous by construction: "the
231
+ * new last line inside the group" and "the first line after the group" are
232
+ * the same position in the row list. The line is appended to the group it
101
233
  * borders, which is what the insert indicators and keyboard inserts expect.
102
234
  */
103
- static resolveInsertGroupId(rows: BillingDocumentLineItemEditorRow[], index: number, dropIntent?: BillingDocumentLineItemDropIntent | null): string | null;
235
+ static resolveInsertGroupId(rows: BillingDocumentLineItemEditorRow[], index: number): string | null;
104
236
  /**
105
237
  * Puts the rows that were never sent back between the synced rows, at the
106
238
  * offset they held among the rows that were.
@@ -121,4 +253,9 @@ export declare class BillingDocumentLineItemsEditorUtil {
121
253
  */
122
254
  static syncBillingDocumentLineItemRowsWithServer(serverRows: BillingDocumentLineItemEditorRow[], currentRows: BillingDocumentLineItemEditorRow[]): BillingDocumentLineItemEditorRow[];
123
255
  private static trimOrNull;
256
+ /**
257
+ * Rebuilds the tree without the selected nodes, inserting the wrapping
258
+ * group among `containerChildren` after the remaining `precedingNodes`.
259
+ */
260
+ private static wrapSelectionInRowTree;
124
261
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@wisemen/wise-invoicing-web",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "private": false,
6
6
  "description": "Invoicing frontend package with Vue 3 components, composables and types",
7
7
  "author": "Wisemen",
@@ -92,7 +92,7 @@
92
92
  "vite": "^8.2.0",
93
93
  "vite-plugin-dts": "5.0.3",
94
94
  "vitest": "^4.1.11",
95
- "vue": "3.5.40",
95
+ "vue": "3.5.42",
96
96
  "vue-i18n": "11.4.8",
97
97
  "vue-router": "5.2.0",
98
98
  "vue-sonner": "2.0.9",