@navikt/ds-react 8.10.3 → 8.10.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.
Files changed (159) hide show
  1. package/cjs/action-menu/ActionMenu.js +1 -1
  2. package/cjs/action-menu/ActionMenu.js.map +1 -1
  3. package/cjs/data/stories/Data.test-data.d.ts +24 -0
  4. package/cjs/data/stories/Data.test-data.js +1616 -0
  5. package/cjs/data/stories/Data.test-data.js.map +1 -0
  6. package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
  7. package/cjs/data/table/column-header/DataTableColumnHeader.js +2 -2
  8. package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  9. package/cjs/data/table/column-header/useTableColumnResize.d.ts +21 -18
  10. package/cjs/data/table/column-header/useTableColumnResize.js +7 -25
  11. package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
  12. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
  13. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +32 -0
  14. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
  15. package/cjs/data/table/helpers/collectTableRowEntries.d.ts +4 -4
  16. package/cjs/data/table/helpers/collectTableRowEntries.js +6 -7
  17. package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
  18. package/cjs/data/table/hooks/useColumnOptions.js +18 -5
  19. package/cjs/data/table/hooks/useColumnOptions.js.map +1 -1
  20. package/cjs/data/table/hooks/useTableDetailsPanel.d.ts +62 -0
  21. package/cjs/data/table/hooks/{useTableExpansion.js → useTableDetailsPanel.js} +20 -19
  22. package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -0
  23. package/cjs/data/table/hooks/useTableItems.d.ts +13 -16
  24. package/cjs/data/table/hooks/useTableItems.js +9 -8
  25. package/cjs/data/table/hooks/useTableItems.js.map +1 -1
  26. package/cjs/data/table/hooks/useTableSelection.d.ts +4 -2
  27. package/cjs/data/table/hooks/useTableSelection.js +6 -1
  28. package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
  29. package/cjs/data/table/index.d.ts +1 -2
  30. package/cjs/data/table/index.js +22 -12
  31. package/cjs/data/table/index.js.map +1 -1
  32. package/cjs/data/table/root/DataTable.types.d.ts +7 -6
  33. package/cjs/data/table/root/DataTableRoot.context.d.ts +5 -1
  34. package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
  35. package/cjs/data/table/root/DataTableRoot.d.ts +79 -115
  36. package/cjs/data/table/root/DataTableRoot.js +167 -38
  37. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  38. package/cjs/data/table/root/DataTableRoot.legacy.d.ts +177 -0
  39. package/cjs/data/table/root/DataTableRoot.legacy.js +104 -0
  40. package/cjs/data/table/root/DataTableRoot.legacy.js.map +1 -0
  41. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
  42. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js +21 -0
  43. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
  44. package/cjs/data/table/tr/DataTableTr.js +11 -11
  45. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  46. package/cjs/utils/components/dismissablelayer/DismissableLayer.js +1 -1
  47. package/cjs/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
  48. package/cjs/utils/components/floating/Floating.d.ts +16 -1
  49. package/cjs/utils/components/floating/Floating.js +50 -13
  50. package/cjs/utils/components/floating/Floating.js.map +1 -1
  51. package/cjs/utils/components/floating-menu/Menu.js +1 -1
  52. package/cjs/utils/components/floating-menu/Menu.js.map +1 -1
  53. package/cjs/utils/helpers/create-strict-context.js +1 -1
  54. package/cjs/utils/helpers/create-strict-context.js.map +1 -1
  55. package/cjs/utils/hooks/useControllableState.d.ts +5 -5
  56. package/cjs/utils/hooks/useControllableState.js.map +1 -1
  57. package/cjs/utils/hooks/useValueAsRef.js +1 -1
  58. package/cjs/utils/hooks/useValueAsRef.js.map +1 -1
  59. package/cjs/utils-external/hooks/useId.js +1 -1
  60. package/cjs/utils-external/hooks/useId.js.map +1 -1
  61. package/esm/action-menu/ActionMenu.js +1 -1
  62. package/esm/action-menu/ActionMenu.js.map +1 -1
  63. package/esm/data/stories/Data.test-data.d.ts +24 -0
  64. package/esm/data/stories/Data.test-data.js +1607 -0
  65. package/esm/data/stories/Data.test-data.js.map +1 -0
  66. package/esm/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
  67. package/esm/data/table/column-header/DataTableColumnHeader.js +2 -2
  68. package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  69. package/esm/data/table/column-header/useTableColumnResize.d.ts +21 -18
  70. package/esm/data/table/column-header/useTableColumnResize.js +7 -25
  71. package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
  72. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
  73. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +27 -0
  74. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
  75. package/esm/data/table/helpers/collectTableRowEntries.d.ts +4 -4
  76. package/esm/data/table/helpers/collectTableRowEntries.js +6 -7
  77. package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
  78. package/esm/data/table/hooks/useColumnOptions.js +18 -5
  79. package/esm/data/table/hooks/useColumnOptions.js.map +1 -1
  80. package/esm/data/table/hooks/useTableDetailsPanel.d.ts +62 -0
  81. package/esm/data/table/hooks/{useTableExpansion.js → useTableDetailsPanel.js} +17 -16
  82. package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -0
  83. package/esm/data/table/hooks/useTableItems.d.ts +13 -16
  84. package/esm/data/table/hooks/useTableItems.js +9 -8
  85. package/esm/data/table/hooks/useTableItems.js.map +1 -1
  86. package/esm/data/table/hooks/useTableSelection.d.ts +4 -2
  87. package/esm/data/table/hooks/useTableSelection.js +6 -1
  88. package/esm/data/table/hooks/useTableSelection.js.map +1 -1
  89. package/esm/data/table/index.d.ts +1 -2
  90. package/esm/data/table/index.js +21 -1
  91. package/esm/data/table/index.js.map +1 -1
  92. package/esm/data/table/root/DataTable.types.d.ts +7 -6
  93. package/esm/data/table/root/DataTableRoot.context.d.ts +5 -1
  94. package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
  95. package/esm/data/table/root/DataTableRoot.d.ts +79 -115
  96. package/esm/data/table/root/DataTableRoot.js +174 -36
  97. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  98. package/esm/data/table/root/DataTableRoot.legacy.d.ts +177 -0
  99. package/esm/data/table/root/DataTableRoot.legacy.js +59 -0
  100. package/esm/data/table/root/DataTableRoot.legacy.js.map +1 -0
  101. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
  102. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js +16 -0
  103. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
  104. package/esm/data/table/tr/DataTableTr.js +11 -11
  105. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  106. package/esm/utils/components/dismissablelayer/DismissableLayer.js +1 -1
  107. package/esm/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
  108. package/esm/utils/components/floating/Floating.d.ts +16 -1
  109. package/esm/utils/components/floating/Floating.js +48 -13
  110. package/esm/utils/components/floating/Floating.js.map +1 -1
  111. package/esm/utils/components/floating-menu/Menu.js +2 -2
  112. package/esm/utils/components/floating-menu/Menu.js.map +1 -1
  113. package/esm/utils/helpers/create-strict-context.js +1 -1
  114. package/esm/utils/helpers/create-strict-context.js.map +1 -1
  115. package/esm/utils/hooks/useControllableState.d.ts +5 -5
  116. package/esm/utils/hooks/useControllableState.js.map +1 -1
  117. package/esm/utils/hooks/useValueAsRef.js +1 -1
  118. package/esm/utils/hooks/useValueAsRef.js.map +1 -1
  119. package/esm/utils-external/hooks/useId.js +1 -1
  120. package/esm/utils-external/hooks/useId.js.map +1 -1
  121. package/package.json +3 -3
  122. package/src/action-menu/ActionMenu.tsx +1 -1
  123. package/src/data/stories/Data.test-data.tsx +1703 -0
  124. package/src/data/table/column-header/DataTableColumnHeader.tsx +6 -6
  125. package/src/data/table/column-header/useTableColumnResize.ts +29 -44
  126. package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +53 -0
  127. package/src/data/table/helpers/collectTableRowEntries.ts +10 -18
  128. package/src/data/table/hooks/__tests__/useTableItems.test.ts +14 -7
  129. package/src/data/table/hooks/__tests__/useTableSelection.test.ts +57 -44
  130. package/src/data/table/hooks/useColumnOptions.ts +19 -5
  131. package/src/data/table/hooks/{useTableExpansion.tsx → useTableDetailsPanel.tsx} +81 -45
  132. package/src/data/table/hooks/useTableItems.ts +27 -36
  133. package/src/data/table/hooks/useTableSelection.ts +17 -6
  134. package/src/data/table/index.tsx +5 -3
  135. package/src/data/table/root/DataTable.types.ts +20 -6
  136. package/src/data/table/root/DataTableRoot.context.ts +5 -1
  137. package/src/data/table/root/DataTableRoot.legacy.tsx +297 -0
  138. package/src/data/table/root/DataTableRoot.tsx +482 -217
  139. package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +39 -0
  140. package/src/data/table/tr/DataTableTr.tsx +14 -13
  141. package/src/utils/components/dismissablelayer/DismissableLayer.tsx +1 -1
  142. package/src/utils/components/floating/Floating.tsx +56 -13
  143. package/src/utils/components/floating-menu/Menu.tsx +4 -1
  144. package/src/utils/helpers/create-strict-context.tsx +1 -1
  145. package/src/utils/hooks/useControllableState.ts +11 -8
  146. package/src/utils/hooks/useValueAsRef.ts +1 -1
  147. package/src/utils-external/hooks/useId.ts +1 -1
  148. package/cjs/data/table/hooks/useTableExpansion.d.ts +0 -27
  149. package/cjs/data/table/hooks/useTableExpansion.js.map +0 -1
  150. package/cjs/data/table/root/DataTableAuto.d.ts +0 -182
  151. package/cjs/data/table/root/DataTableAuto.js +0 -206
  152. package/cjs/data/table/root/DataTableAuto.js.map +0 -1
  153. package/esm/data/table/hooks/useTableExpansion.d.ts +0 -27
  154. package/esm/data/table/hooks/useTableExpansion.js.map +0 -1
  155. package/esm/data/table/root/DataTableAuto.d.ts +0 -182
  156. package/esm/data/table/root/DataTableAuto.js +0 -170
  157. package/esm/data/table/root/DataTableAuto.js.map +0 -1
  158. package/src/data/table/root/DataTableAuto.test.tsx +0 -244
  159. package/src/data/table/root/DataTableAuto.tsx +0 -612
@@ -1,244 +0,0 @@
1
- import { fireEvent, render, screen } from "@testing-library/react";
2
- import React from "react";
3
- import { describe, expect, test } from "vitest";
4
- import { DataTableColumnHeader } from "../column-header/DataTableColumnHeader";
5
- import type { ColumnDefinitions } from "./DataTable.types";
6
- import { DataTableAuto } from "./DataTableAuto";
7
- import { DataTable } from "./DataTableRoot";
8
-
9
- type TestRow = {
10
- id: string;
11
- name: string;
12
- subRows?: TestRow[];
13
- };
14
-
15
- const data: TestRow[] = [
16
- {
17
- id: "root",
18
- name: "Root",
19
- subRows: [{ id: "child", name: "Child" }],
20
- },
21
- ];
22
-
23
- const deepNestedData: TestRow[] = [
24
- {
25
- id: "root",
26
- name: "Root",
27
- subRows: [
28
- {
29
- id: "child",
30
- name: "Child",
31
- subRows: [{ id: "grandchild", name: "Grandchild" }],
32
- },
33
- ],
34
- },
35
- ];
36
-
37
- const fallbackIdData: TestRow[] = [
38
- {
39
- id: "unused-root-1",
40
- name: "Root",
41
- subRows: [{ id: "unused-child", name: "Child" }],
42
- },
43
- {
44
- id: "unused-root-2",
45
- name: "Sibling",
46
- },
47
- ];
48
-
49
- const columns: ColumnDefinitions<TestRow> = [
50
- {
51
- id: "name",
52
- label: "Name",
53
- header: "Name",
54
- cell: (row) => row.name,
55
- },
56
- ];
57
-
58
- describe("DataTableAuto", () => {
59
- test("renders expanded child rows and includes them in select-all", () => {
60
- render(
61
- <DataTableAuto
62
- columnDefinitions={columns}
63
- data={data}
64
- getRowId={(row) => row.id}
65
- getSubRows={(row) => row.subRows ?? []}
66
- selection={{ selectionMode: "multiple" }}
67
- />,
68
- );
69
-
70
- expect(screen.queryByText("Child")).not.toBeInTheDocument();
71
-
72
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
73
-
74
- expect(screen.getByText("Child")).toBeInTheDocument();
75
- expect(screen.getAllByRole("checkbox")).toHaveLength(3);
76
-
77
- fireEvent.click(
78
- screen.getByRole("checkbox", { name: "Velg alle synlige rader" }),
79
- );
80
-
81
- expect(
82
- screen
83
- .getAllByRole("checkbox")
84
- .every((checkbox) => (checkbox as HTMLInputElement).checked),
85
- ).toBe(true);
86
- });
87
-
88
- test("select-all checks all visible rows when fallback ids are used", () => {
89
- render(
90
- <DataTableAuto
91
- columnDefinitions={columns}
92
- data={fallbackIdData}
93
- getSubRows={(row) => row.subRows ?? []}
94
- defaultExpandedSubRowIds={[0]}
95
- selection={{ selectionMode: "multiple" }}
96
- />,
97
- );
98
-
99
- fireEvent.click(
100
- screen.getByRole("checkbox", { name: "Velg alle synlige rader" }),
101
- );
102
-
103
- const rowCheckboxes = screen
104
- .getAllByRole("checkbox")
105
- .slice(1) as HTMLInputElement[];
106
-
107
- expect(rowCheckboxes).toHaveLength(3);
108
- expect(rowCheckboxes.every((checkbox) => checkbox.checked)).toBe(true);
109
- });
110
-
111
- test("parent row selection follows visible nested rows", () => {
112
- render(
113
- <DataTableAuto
114
- columnDefinitions={columns}
115
- data={data}
116
- getRowId={(row) => row.id}
117
- getSubRows={(row) => row.subRows ?? []}
118
- selection={{ selectionMode: "multiple" }}
119
- />,
120
- );
121
-
122
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
123
-
124
- const getCheckboxes = () =>
125
- screen.getAllByRole("checkbox") as HTMLInputElement[];
126
-
127
- fireEvent.click(getCheckboxes()[2]);
128
-
129
- expect(getCheckboxes()[1].checked).toBe(false);
130
- expect(getCheckboxes()[1].indeterminate).toBe(true);
131
-
132
- fireEvent.click(getCheckboxes()[1]);
133
-
134
- expect(getCheckboxes()[1].checked).toBe(true);
135
- expect(getCheckboxes()[2].checked).toBe(true);
136
-
137
- fireEvent.click(getCheckboxes()[1]);
138
-
139
- expect(getCheckboxes()[1].checked).toBe(false);
140
- expect(getCheckboxes()[2].checked).toBe(false);
141
- });
142
-
143
- test("collapsed parent selection includes hidden descendants and can clear them again", () => {
144
- render(
145
- <DataTableAuto
146
- columnDefinitions={columns}
147
- data={deepNestedData}
148
- getRowId={(row) => row.id}
149
- getSubRows={(row) => row.subRows ?? []}
150
- selection={{ selectionMode: "multiple" }}
151
- />,
152
- );
153
-
154
- const getCheckboxes = () =>
155
- screen.getAllByRole("checkbox") as HTMLInputElement[];
156
-
157
- fireEvent.click(getCheckboxes()[1]);
158
-
159
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
160
-
161
- expect(getCheckboxes()[1].checked).toBe(true);
162
- expect(getCheckboxes()[2].checked).toBe(true);
163
-
164
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
165
-
166
- expect(getCheckboxes()[3].checked).toBe(true);
167
-
168
- fireEvent.click(
169
- screen.getAllByRole("button", { name: "Skjul under-rader" })[0],
170
- );
171
- fireEvent.click(getCheckboxes()[1]);
172
-
173
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
174
-
175
- expect(getCheckboxes()[1].checked).toBe(false);
176
- expect(getCheckboxes()[2].checked).toBe(false);
177
- expect(getCheckboxes()[3].checked).toBe(false);
178
- });
179
-
180
- test("select-all includes hidden descendants for collapsed parents and clears them again", () => {
181
- render(
182
- <DataTableAuto
183
- columnDefinitions={columns}
184
- data={deepNestedData}
185
- getRowId={(row) => row.id}
186
- getSubRows={(row) => row.subRows ?? []}
187
- selection={{ selectionMode: "multiple" }}
188
- />,
189
- );
190
-
191
- const getCheckboxes = () =>
192
- screen.getAllByRole("checkbox") as HTMLInputElement[];
193
-
194
- fireEvent.click(
195
- screen.getByRole("checkbox", { name: "Velg alle synlige rader" }),
196
- );
197
-
198
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
199
-
200
- expect(getCheckboxes()[1].checked).toBe(true);
201
- expect(getCheckboxes()[2].checked).toBe(true);
202
-
203
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
204
-
205
- expect(getCheckboxes()[3].checked).toBe(true);
206
-
207
- fireEvent.click(
208
- screen.getByRole("checkbox", { name: "Fjern alle synlige valgte rader" }),
209
- );
210
-
211
- expect(getCheckboxes()[0].checked).toBe(false);
212
-
213
- fireEvent.click(
214
- screen.getAllByRole("button", { name: "Skjul under-rader" })[0],
215
- );
216
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
217
-
218
- expect(getCheckboxes()[1].checked).toBe(false);
219
- expect(getCheckboxes()[2].checked).toBe(false);
220
- expect(getCheckboxes()[3].checked).toBe(false);
221
- });
222
-
223
- test("does not render expansion controls in the manual table variant", () => {
224
- render(
225
- <DataTable>
226
- <DataTable.Thead>
227
- <DataTable.Tr>
228
- <DataTableColumnHeader>Name</DataTableColumnHeader>
229
- </DataTable.Tr>
230
- </DataTable.Thead>
231
- <DataTable.Tbody>
232
- <DataTable.Tr>
233
- <DataTable.Td>Root</DataTable.Td>
234
- </DataTable.Tr>
235
- </DataTable.Tbody>
236
- </DataTable>,
237
- );
238
-
239
- expect(screen.getByText("Root")).toBeInTheDocument();
240
- expect(
241
- screen.queryByRole("button", { name: /vis detaljer|skjul detaljer/i }),
242
- ).not.toBeInTheDocument();
243
- });
244
- });