@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
@@ -0,0 +1,297 @@
1
+ import React, { forwardRef } from "react";
2
+ import { useId } from "../../../utils-external";
3
+ import { cl } from "../../../utils/helpers";
4
+ import { useMergeRefs } from "../../../utils/hooks";
5
+ import {
6
+ DataTableCaption,
7
+ type DataTableCaptionProps,
8
+ } from "../caption/DataTableCaption";
9
+ import {
10
+ DataTableEmptyState,
11
+ type DataTableEmptyStateProps,
12
+ } from "../empty-state/DataTableEmptyState";
13
+ import { DataTableDetailsPanelProvider } from "../hooks/useTableDetailsPanel";
14
+ import { useTableKeyboardNav } from "../hooks/useTableKeyboardNav";
15
+ import {
16
+ type SelectionProps,
17
+ noSelectionState,
18
+ } from "../hooks/useTableSelection";
19
+ import {
20
+ DataTableLoadingState,
21
+ type DataTableLoadingStateProps,
22
+ } from "../loading-state/DataTableLoadingState";
23
+ import {
24
+ DataTableTbody,
25
+ type DataTableTbodyProps,
26
+ } from "../tbody/DataTableTbody";
27
+ import { DataTableTd, type DataTableTdProps } from "../td/DataTableTd";
28
+ import {
29
+ DataTableTfoot,
30
+ type DataTableTfootProps,
31
+ } from "../tfoot/DataTableTfoot";
32
+ import { DataTableTh, type DataTableThProps } from "../th/DataTableTh";
33
+ import {
34
+ DataTableThead,
35
+ type DataTableTheadProps,
36
+ } from "../thead/DataTableThead";
37
+ import { DataTableTr, type DataTableTrProps } from "../tr/DataTableTr";
38
+ import { DataTableContextProvider } from "./DataTableRoot.context";
39
+
40
+ interface DataTableProps
41
+ extends React.HTMLAttributes<HTMLTableElement>, SelectionProps {
42
+ children: React.ReactNode;
43
+ /**
44
+ * Controls vertical cell padding.
45
+ * @default "normal"
46
+ */
47
+ rowDensity?: "condensed" | "normal" | "spacious";
48
+ /**
49
+ * Zebra striped table
50
+ * @default false
51
+ */
52
+ zebraStripes?: boolean;
53
+ /**
54
+ * Truncate content in cells and show ellipsis for overflowed text.
55
+ *
56
+ * **NB:** When using `layout="auto"`, you have to manually set a `maxWidth` on columns that should be truncated.
57
+ * @default true
58
+ */
59
+ truncateContent?: boolean; // TODO: Consider making this default false when layout=auto, and maybe disallow it but add a wrap prop on the td-comp.
60
+ /**
61
+ * Enables keyboard navigation for table rows and cells.
62
+ * @default false
63
+ */
64
+ withKeyboardNav?: boolean;
65
+ /**
66
+ * Custom callback to determine if navigation should be blocked.
67
+ * Called before default blocking logic.
68
+ * Requires `withKeyboardNav` to be `true`.
69
+ */
70
+ shouldBlockNavigation?: (event: KeyboardEvent) => boolean;
71
+ /**
72
+ * Controls table layout.
73
+ *
74
+ * ### fixed
75
+ * Gives you full control of column widths. This is required for resizable columns.
76
+ *
77
+ * ### auto
78
+ * Makes the columns resize automatically based on the content.
79
+ * The table will take up at least 100% of available width.
80
+ *
81
+ * **NB:** When using this with `truncateContent`, you have to manually
82
+ * set a `contentMaxWidth` on cells that should be truncated.
83
+ * @default "fixed"
84
+ */
85
+ layout?: "fixed" | "auto";
86
+ }
87
+
88
+ interface DataTableRootComponent extends React.ForwardRefExoticComponent<
89
+ DataTableProps & React.RefAttributes<HTMLTableElement>
90
+ > {
91
+ /**
92
+ * @see 🏷️ {@link DataTableCaptionProps}
93
+ * @example
94
+ * ```jsx
95
+ * <DataTable>
96
+ * <DataTable.Caption>
97
+ * Lorem ipsum
98
+ * </DataTable.Caption
99
+ * </DataTable>
100
+ * ```
101
+ */
102
+ Caption: typeof DataTableCaption;
103
+ /**
104
+ * @see 🏷️ {@link DataTableTheadProps}
105
+ * @example
106
+ * ```jsx
107
+ * <DataTable>
108
+ * <DataTable.Thead>
109
+ * ... TODO
110
+ * </DataTable.Thead>
111
+ * </DataTable>
112
+ * ```
113
+ */
114
+ Thead: typeof DataTableThead;
115
+ /**
116
+ * @see 🏷️ {@link DataTableTbodyProps}
117
+ * @example
118
+ * ```jsx
119
+ * <DataTable>
120
+ * <DataTable.Tbody>
121
+ * ... TODO
122
+ * </DataTable.Tbody>
123
+ * </DataTable>
124
+ * ```
125
+ */
126
+ Tbody: typeof DataTableTbody;
127
+ /**
128
+ * @see 🏷️ {@link DataTableTrProps}
129
+ * @example
130
+ * ```jsx
131
+ * <DataTable>
132
+ * <DataTable.Tr>
133
+ * ... TODO
134
+ * </DataTable.Tr
135
+ * </DataTable>
136
+ * ```
137
+ */
138
+ Tr: typeof DataTableTr;
139
+ /**
140
+ * @see 🏷️ {@link DataTableThProps}
141
+ * @example
142
+ * ```jsx
143
+ * ```
144
+ */
145
+ Th: typeof DataTableTh;
146
+ /**
147
+ * @see 🏷️ {@link DataTableTdProps}
148
+ * @example
149
+ * ```jsx
150
+ * <DataTable>
151
+ * <DataTable.Tbody>
152
+ * <DataTable.Td>
153
+ * Lorem ipsum
154
+ * </DataTable.Td>
155
+ * <DataTable.Td>
156
+ * Dolor sit amet
157
+ * </DataTable.Td>
158
+ * </DataTable.Tbody>
159
+ * </DataTable>
160
+ * ```
161
+ */
162
+ Td: typeof DataTableTd;
163
+ /**
164
+ * @see 🏷️ {@link DataTableTfootProps}
165
+ * @example
166
+ * ```jsx
167
+ * <DataTable>
168
+ * <DataTable.Tfoot>
169
+ * ...
170
+ * </DataTable.Tfoot>
171
+ * </DataTable>
172
+ * ```
173
+ */
174
+ Tfoot: typeof DataTableTfoot;
175
+ /**
176
+ * @see 🏷️ {@link DataTableEmptyStateProps}
177
+ * @example
178
+ * ```jsx
179
+ * <DataTable>
180
+ * <DataTable.TBody>
181
+ * <DataTable.EmptyState />
182
+ * </DataTable.TBody>
183
+ * </DataTable>
184
+ * ```
185
+ */
186
+ EmptyState: typeof DataTableEmptyState;
187
+ /**
188
+ * @see 🏷️ {@link DataTableEmptyStateProps}
189
+ * @example
190
+ * ```jsx
191
+ * <DataTable>
192
+ * <DataTable.TBody>
193
+ * <DataTable.LoadingState />
194
+ * </DataTable.TBody>
195
+ * </DataTable>
196
+ * ```
197
+ */
198
+ LoadingState: typeof DataTableLoadingState;
199
+ }
200
+
201
+ /**
202
+ * TODO Component description etc.
203
+ *
204
+ * **NB:** To get sticky headers, you have to set a height restriction on the table container. You can use VStack for this:
205
+ * TODO example
206
+ */
207
+ const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
208
+ (
209
+ {
210
+ className,
211
+ rowDensity = "normal",
212
+ withKeyboardNav = false,
213
+ zebraStripes = false,
214
+ truncateContent = true,
215
+ shouldBlockNavigation,
216
+ layout = "fixed",
217
+ ...rest
218
+ },
219
+ forwardedRef,
220
+ ) => {
221
+ const { tabIndex, setTableRef } = useTableKeyboardNav({
222
+ enabled: withKeyboardNav,
223
+ shouldBlockNavigation,
224
+ });
225
+
226
+ const mergedRef = useMergeRefs(forwardedRef, setTableRef);
227
+
228
+ return (
229
+ <DataTableContextProvider
230
+ layout={layout}
231
+ withKeyboardNav={withKeyboardNav}
232
+ selectionState={noSelectionState}
233
+ stickySelection={false}
234
+ stickyHeader={true}
235
+ tableId={useId()}
236
+ showLoadingSkeletons={false}
237
+ onRowClick={undefined}
238
+ showLoadingOverlay={false}
239
+ columns={[]}
240
+ fullWidthColSpan={9999}
241
+ >
242
+ <DataTableDetailsPanelProvider>
243
+ <div className="aksel-data-table__border-wrapper">
244
+ <div className="aksel-data-table__scroll-wrapper">
245
+ <table
246
+ {...rest}
247
+ ref={mergedRef}
248
+ className={cl("aksel-data-table", className)}
249
+ data-zebra-stripes={zebraStripes}
250
+ data-truncate-content={truncateContent}
251
+ data-density={rowDensity}
252
+ data-layout={layout}
253
+ tabIndex={tabIndex}
254
+ />
255
+ </div>
256
+ </div>
257
+ </DataTableDetailsPanelProvider>
258
+ </DataTableContextProvider>
259
+ );
260
+ },
261
+ ) as DataTableRootComponent;
262
+
263
+ DataTable.Caption = DataTableCaption;
264
+ DataTable.Thead = DataTableThead;
265
+ DataTable.Tbody = DataTableTbody;
266
+ DataTable.Th = DataTableTh;
267
+ DataTable.Tr = DataTableTr;
268
+ DataTable.Td = DataTableTd;
269
+ DataTable.Tfoot = DataTableTfoot;
270
+ DataTable.EmptyState = DataTableEmptyState;
271
+ DataTable.LoadingState = DataTableLoadingState;
272
+
273
+ export {
274
+ DataTable,
275
+ DataTableCaption,
276
+ DataTableEmptyState,
277
+ DataTableLoadingState,
278
+ DataTableTbody,
279
+ DataTableTd,
280
+ DataTableTfoot,
281
+ DataTableTh,
282
+ DataTableThead,
283
+ DataTableTr,
284
+ };
285
+ export default DataTable;
286
+ export type {
287
+ DataTableCaptionProps,
288
+ DataTableEmptyStateProps,
289
+ DataTableLoadingStateProps,
290
+ DataTableProps,
291
+ DataTableTbodyProps,
292
+ DataTableTdProps,
293
+ DataTableTfootProps,
294
+ DataTableTheadProps,
295
+ DataTableThProps,
296
+ DataTableTrProps,
297
+ };