@emamid/svelte-data-table 0.0.21 → 1.0.1

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 (81) hide show
  1. package/dist/DataTable.svelte +303 -239
  2. package/dist/DataTable.svelte.d.ts +30 -60
  3. package/dist/DataTableDataCell.svelte +157 -90
  4. package/dist/DataTableDataCell.svelte.d.ts +18 -27
  5. package/dist/DataTableHeaderCell.svelte +63 -21
  6. package/dist/DataTableHeaderCell.svelte.d.ts +9 -23
  7. package/dist/DataTableIcon.svelte +25 -0
  8. package/dist/DataTableIcon.svelte.d.ts +9 -0
  9. package/dist/DataTableRow.svelte +150 -80
  10. package/dist/DataTableRow.svelte.d.ts +26 -34
  11. package/dist/cells/Actions.d.ts +1 -1
  12. package/dist/cells/Actions.js +10 -11
  13. package/dist/cells/ActionsCell.svelte +58 -23
  14. package/dist/cells/ActionsCell.svelte.d.ts +9 -34
  15. package/dist/cells/ButtonCell.svelte +58 -16
  16. package/dist/cells/ButtonCell.svelte.d.ts +11 -20
  17. package/dist/cells/CheckboxCell.svelte +72 -19
  18. package/dist/cells/CheckboxCell.svelte.d.ts +11 -22
  19. package/dist/cells/InputCell.svelte +93 -49
  20. package/dist/cells/InputCell.svelte.d.ts +14 -25
  21. package/dist/cells/MultiSelectCell.svelte +85 -26
  22. package/dist/cells/MultiSelectCell.svelte.d.ts +15 -26
  23. package/dist/cells/NumberInputCell.svelte +90 -45
  24. package/dist/cells/NumberInputCell.svelte.d.ts +13 -24
  25. package/dist/cells/RadioCell.svelte +66 -0
  26. package/dist/cells/RadioCell.svelte.d.ts +12 -0
  27. package/dist/cells/RangeCell.svelte +66 -17
  28. package/dist/cells/RangeCell.svelte.d.ts +13 -22
  29. package/dist/cells/SelectCell.svelte +87 -26
  30. package/dist/cells/SelectCell.svelte.d.ts +15 -26
  31. package/dist/cells/SpinCell.svelte +91 -42
  32. package/dist/cells/SpinCell.svelte.d.ts +13 -28
  33. package/dist/cells/TabWrapper.svelte +23 -21
  34. package/dist/cells/TabWrapper.svelte.d.ts +10 -22
  35. package/dist/cells/index.d.ts +2 -4
  36. package/dist/cells/index.js +2 -4
  37. package/dist/common.d.ts +199 -53
  38. package/dist/common.js +30 -11
  39. package/dist/index.d.ts +2 -2
  40. package/dist/index.js +1 -1
  41. package/dist/themes/active.d.ts +4 -0
  42. package/dist/themes/active.js +12 -0
  43. package/dist/themes/daisyUI.d.ts +2 -0
  44. package/dist/themes/daisyUI.js +47 -0
  45. package/dist/themes/default.d.ts +2 -0
  46. package/dist/themes/default.js +57 -0
  47. package/dist/themes/iconify.d.ts +2 -0
  48. package/dist/themes/iconify.js +33 -0
  49. package/dist/themes/index.d.ts +4 -0
  50. package/dist/themes/index.js +4 -0
  51. package/package.json +28 -30
  52. package/dist/DataTable.doc.d.ts +0 -81
  53. package/dist/DataTable.doc.js +0 -81
  54. package/dist/cells/ActionsCell.doc.d.ts +0 -28
  55. package/dist/cells/ActionsCell.doc.js +0 -28
  56. package/dist/cells/ButtonCell.doc.d.ts +0 -9
  57. package/dist/cells/ButtonCell.doc.js +0 -9
  58. package/dist/cells/CheckboxCell.doc.d.ts +0 -6
  59. package/dist/cells/CheckboxCell.doc.js +0 -6
  60. package/dist/cells/InputCell.doc.d.ts +0 -6
  61. package/dist/cells/InputCell.doc.js +0 -6
  62. package/dist/cells/MultiSelectCell.doc.d.ts +0 -8
  63. package/dist/cells/MultiSelectCell.doc.js +0 -8
  64. package/dist/cells/NumberInputCell.doc.d.ts +0 -6
  65. package/dist/cells/NumberInputCell.doc.js +0 -6
  66. package/dist/cells/RangeCell.doc.d.ts +0 -7
  67. package/dist/cells/RangeCell.doc.js +0 -7
  68. package/dist/cells/RatingCell.doc.d.ts +0 -7
  69. package/dist/cells/RatingCell.doc.js +0 -7
  70. package/dist/cells/RatingCell.svelte +0 -13
  71. package/dist/cells/RatingCell.svelte.d.ts +0 -22
  72. package/dist/cells/SelectCell.doc.d.ts +0 -8
  73. package/dist/cells/SelectCell.doc.js +0 -8
  74. package/dist/cells/SpinCell.doc.d.ts +0 -13
  75. package/dist/cells/SpinCell.doc.js +0 -13
  76. package/dist/cells/TabWrapper.doc.d.ts +0 -5
  77. package/dist/cells/TabWrapper.doc.js +0 -5
  78. package/dist/cells/ToggleCell.doc.d.ts +0 -6
  79. package/dist/cells/ToggleCell.doc.js +0 -6
  80. package/dist/cells/ToggleCell.svelte +0 -21
  81. package/dist/cells/ToggleCell.svelte.d.ts +0 -23
@@ -1,230 +1,291 @@
1
- <script>import { createEventDispatcher } from "svelte";
2
- import { Table, TableBody, TableHead } from "flowbite-svelte";
3
- import { AngleDownSolid, AngleUpSolid } from "flowbite-svelte-icons";
4
- import DataTableHeaderCell from "./DataTableHeaderCell.svelte";
5
- import DataTableRow from "./DataTableRow.svelte";
6
- import {
7
- getColumnID,
8
- joinClasses,
9
- setDataTableContext
10
- } from "./common.js";
11
- export let allowRowDrag = false;
12
- export let allowRowDrop = !!allowRowDrag;
13
- export let columns = [];
14
- export let items = [];
15
- export let sortKey = "";
16
- export let sortFunction = null;
17
- export let reverseSort = false;
18
- export let sortColumnID = null;
19
- export let sortAscendingIcon = AngleDownSolid;
20
- export let sortDescendingIcon = AngleUpSolid;
21
- export let itemKey = null;
22
- export let enterAction = "next";
23
- export let divClassAppend = "";
24
- export let divClassOverride = "";
25
- const divClassDefault = "relative overflow-x-auto overflow-y-auto";
26
- export let tableClassAppend = "";
27
- export let tableClassOverride = "";
28
- const tableClassDefault = "";
29
- export let theadClassAppend = "";
30
- export let theadClassOverride = "";
31
- const theadClassDefault = "text-xs uppercase sticky top-0 z-10";
32
- export let thClassAppend = "";
33
- export let thClassOverride = "";
34
- const thClassDefault = "";
35
- export let tableBodyClassAppend = "";
36
- export let tableBodyClassOverride = "";
37
- const tableBodyClassDefault = "";
38
- export let tdClassAppend = "";
39
- export let tdClassOverride = "";
40
- const tdClassDefault = "px-6 py-4 whitespace-nowrap font-medium";
41
- export let tdFocusedClassAppend = "";
42
- export let tdFocusedClassOverride = "";
43
- const tdFocusedClassDefault = "px-6 py-4 whitespace-nowrap font-medium";
44
- export let trClassAppend = "";
45
- export let trClassOverride = "";
46
- const trClassDefault = "";
47
- export let trClassGetter = null;
48
- export let striped = false;
49
- export let hoverable = false;
50
- export let noborder = false;
51
- export let shadow = false;
52
- export let color = "default";
53
- export let customColor = "";
54
- let sortedItems = [];
55
- let focusedColumnKeyID = null;
56
- let focusedItemKey = null;
57
- setDataTableContext({});
58
- const sortBySortKey = (a, b) => {
59
- let aValue = a[sortKey];
60
- let bValue = b[sortKey];
61
- if (aValue === bValue) {
62
- return 0;
63
- }
64
- if (typeof aValue === "string" && typeof bValue === "string") {
65
- return aValue.localeCompare(bValue);
66
- }
67
- if (typeof aValue === "number" && typeof bValue === "number") {
68
- return aValue - bValue;
69
- }
70
- if (typeof aValue === "number" || typeof bValue === "number") {
71
- return (aValue || 0) - (bValue || 0);
72
- }
73
- if (typeof aValue === "string" || typeof bValue === "string") {
74
- return (aValue || "").localeCompare(bValue || "");
75
- }
76
- return JSON.stringify(aValue).localeCompare(JSON.stringify(bValue));
77
- };
78
- $: {
79
- sortedItems = sortFunction ? items.toSorted(sortFunction) : sortKey ? items.toSorted(sortBySortKey) : [...items];
80
- if (reverseSort) {
81
- sortedItems.reverse();
82
- }
83
- }
84
- const dispatch = createEventDispatcher();
85
- const getItemKey = (item) => item ? itemKey ? item[itemKey] || null : items.indexOf(item).toString() : null;
86
- const divClass = joinClasses(divClassOverride || divClassDefault, divClassAppend);
87
- const tableClass = joinClasses(tableClassOverride || tableClassDefault, tableClassAppend);
88
- const theadClass = joinClasses(theadClassOverride || theadClassDefault, theadClassAppend);
89
- const thClass = joinClasses(thClassOverride || thClassDefault, thClassAppend);
90
- const tableBodyClass = joinClasses(
91
- tableBodyClassOverride || tableBodyClassDefault,
92
- tableBodyClassAppend
93
- );
94
- const trClass = joinClasses(trClassOverride || trClassDefault, trClassAppend);
95
- const tdClass = joinClasses(tdClassOverride || tdClassDefault, tdClassAppend);
96
- const tdFocusedClass = joinClasses(
97
- tdFocusedClassOverride || tdFocusedClassDefault,
98
- tdFocusedClassAppend
99
- );
100
- const getTRClass = (item, isRowFocused) => trClassGetter ? trClassGetter(item, isRowFocused, trClass, trClassDefault, trClassAppend, trClassOverride) : trClass;
101
- const internalColumns = columns.map((column) => {
102
- const columnTDClass = joinClasses(column.tdClassOverride || tdClass, column.tdClassAppend);
103
- const columnFocusedTDClass = joinClasses(
104
- column.tdFocusedClassOverride || tdFocusedClass,
105
- column.tdFocusedClassAppend
106
- );
107
- let getTDClass;
108
- const tdClassGetter = column.tdClassGetter;
109
- if (tdClassGetter) {
110
- getTDClass = (item, value, isFocused) => tdClassGetter(
111
- item,
112
- column,
113
- value,
114
- isFocused,
115
- columnTDClass,
116
- tdClassDefault,
117
- tdClassAppend,
118
- tdClassOverride
119
- );
120
- } else {
121
- getTDClass = (_item, _value, isFocused) => isFocused ? columnFocusedTDClass : columnTDClass;
122
- }
123
- return {
124
- ...column,
125
- sortKey: column.sortKey || column.key,
126
- id: column.id || column.key,
127
- getTDClass
128
- };
129
- });
130
- const focusableColumns = internalColumns.filter((column) => column.canFocus);
131
- const prevTab = (event) => {
132
- const { item, column } = event.detail;
133
- let nextColumn = null;
134
- let nextItem = null;
135
- if (column === focusableColumns[0]) {
136
- if (item !== sortedItems[0]) {
137
- nextColumn = focusableColumns[focusableColumns.length - 1];
138
- nextItem = sortedItems[sortedItems.indexOf(item) - 1];
139
- }
140
- } else {
141
- nextColumn = focusableColumns[focusableColumns.indexOf(column) - 1];
142
- nextItem = item;
143
- }
144
- focusedColumnKeyID = getColumnID(nextColumn);
145
- focusedItemKey = getItemKey(nextItem);
146
- };
147
- const nextTab = (event) => {
148
- const { item, column } = event.detail;
149
- let nextColumn = null;
150
- let nextItem = null;
151
- if (column === focusableColumns.at(-1)) {
152
- if (item !== sortedItems.at(-1)) {
153
- nextColumn = focusableColumns[0];
154
- nextItem = sortedItems[sortedItems.indexOf(item) + 1];
155
- }
156
- } else {
157
- nextColumn = focusableColumns[focusableColumns.indexOf(column) + 1];
158
- nextItem = item;
159
- }
160
- focusedColumnKeyID = getColumnID(nextColumn);
161
- focusedItemKey = getItemKey(nextItem);
162
- };
163
- const enterPressed = (event) => {
164
- if (enterAction === "stay") {
165
- return;
166
- }
167
- if (enterAction === "next") {
168
- return nextTab(event);
169
- }
170
- const { item } = event.detail;
171
- const itemIndex = sortedItems.indexOf(item);
172
- if (itemIndex !== sortedItems.length - 1) {
173
- focusedItemKey = getItemKey(sortedItems[itemIndex + 1]);
174
- }
175
- };
176
- const cellClicked = (event) => {
177
- const { column, item } = event.detail;
178
- focusedColumnKeyID = null;
179
- focusedItemKey = null;
180
- if (column.canFocus) {
181
- focusedColumnKeyID = getColumnID(column);
182
- focusedItemKey = getItemKey(item);
183
- }
184
- dispatch("cellClicked", {
185
- item,
186
- column
187
- });
188
- dispatch("rowClicked", {
189
- item
190
- });
191
- };
192
- const headerClicked = (column) => {
193
- if (column.id && column.canSort) {
194
- if (sortColumnID === column.id) {
195
- reverseSort = !reverseSort;
196
- } else {
197
- reverseSort = false;
198
- sortColumnID = column.id;
199
- sortKey = column.sortKey || "";
200
- sortFunction = column.sortFunction;
201
- }
202
- }
203
- dispatch("headerClicked", {
204
- column,
205
- sortColumnID,
206
- sortKey,
207
- sortFunction,
208
- reverseSort
209
- });
210
- };
1
+ <script lang="ts">
2
+ import { setContext } from 'svelte';
3
+
4
+ import type {
5
+ ActionEvent,
6
+ ColumnConfig,
7
+ DataCellChangedEvent,
8
+ DataCellDragEvent,
9
+ DataCellDropEvent,
10
+ DataCellEvent,
11
+ DataTableContext,
12
+ DataTableTheme,
13
+ EnterAction,
14
+ GetItemKeyFunction,
15
+ HeaderEvent,
16
+ RowBoolean,
17
+ RowClassFunction,
18
+ RowDragEvent,
19
+ RowDropBoolean,
20
+ RowDropEvent,
21
+ RowEvent,
22
+ SortFunction,
23
+ } from './common';
24
+
25
+ import {
26
+ dataTableContextName,
27
+ getColumnID,
28
+ joinPartClasses,
29
+ } from './common';
30
+
31
+ import { activeTheme } from './themes';
32
+
33
+ import DataTableHeaderCell from './DataTableHeaderCell.svelte';
34
+ import DataTableRow from './DataTableRow.svelte';
35
+
36
+ interface Props {
37
+ allowRowDrag?: RowBoolean;
38
+ allowRowDrop?: RowDropBoolean;
39
+ columns?: ColumnConfig[];
40
+ enterAction?: EnterAction;
41
+ itemKey?: string | null;
42
+ items?: any[];
43
+ onaction?: (event: ActionEvent) => void;
44
+ onbutton?: (event: DataCellEvent) => void;
45
+ oncellchanged?: (event: DataCellChangedEvent) => void;
46
+ oncellclick?: (event: DataCellEvent) => void;
47
+ oncelldragstart?: (event: DataCellDragEvent) => void;
48
+ oncelldropped?: (event: DataCellDropEvent) => void;
49
+ onenterpressed?: (event: DataCellEvent) => void;
50
+ onheaderclick?: (event: HeaderEvent) => void;
51
+ onnexttab?: (event: DataCellEvent) => void;
52
+ onprevtab?: (event: DataCellEvent) => void;
53
+ onrowclick?: (event: RowEvent) => void;
54
+ onrowdragstart?: (event: RowDragEvent) => void;
55
+ onrowdropped?: (event: RowDropEvent) => void;
56
+ reverseSort?: boolean;
57
+ sortColumnID?: string | null;
58
+ sortFunction?: SortFunction;
59
+ sortKey?: string;
60
+ theme?: DataTableTheme;
61
+ trClassGetter?: RowClassFunction;
62
+ }
63
+
64
+ let {
65
+ allowRowDrag = false,
66
+ allowRowDrop = !!allowRowDrag,
67
+ columns = [],
68
+ enterAction = 'next',
69
+ itemKey = null,
70
+ items = [],
71
+ onaction,
72
+ onbutton,
73
+ oncellchanged,
74
+ oncellclick,
75
+ oncelldragstart,
76
+ oncelldropped,
77
+ onenterpressed,
78
+ onheaderclick,
79
+ onnexttab,
80
+ onprevtab,
81
+ onrowclick,
82
+ onrowdragstart,
83
+ onrowdropped,
84
+ reverseSort = $bindable(false),
85
+ sortColumnID = $bindable(null),
86
+ sortFunction = $bindable(undefined),
87
+ sortKey = $bindable(''),
88
+ theme,
89
+ trClassGetter,
90
+ }: Props = $props();
91
+
92
+ let sortedItems = $derived.by(() => {
93
+ let tempItems = sortFunction
94
+ ? items.toSorted(sortFunction)
95
+ : sortKey
96
+ ? items.toSorted(sortBySortKey)
97
+ : [...items];
98
+ if (reverseSort) {
99
+ return tempItems.toReversed();
100
+ }
101
+ return tempItems;
102
+ })
103
+
104
+ let focusedColumnKeyID: any = $state(null);
105
+ let focusedItemKey: any = $state(null);
106
+
107
+ let context = $state<DataTableContext>({
108
+ // svelte-ignore state_referenced_locally
109
+ items,
110
+ // svelte-ignore state_referenced_locally
111
+ theme,
112
+ })
113
+
114
+ setContext(dataTableContextName, context);
115
+
116
+ const sortBySortKey: SortFunction = (a: any, b: any) => {
117
+ let aValue = a[sortKey];
118
+ let bValue = b[sortKey];
119
+
120
+ if (aValue === bValue) {
121
+ return 0;
122
+ }
123
+
124
+ if (typeof aValue === 'string' && typeof bValue === 'string') {
125
+ return aValue.localeCompare(bValue);
126
+ }
127
+
128
+ if (typeof aValue === 'number' && typeof bValue === 'number') {
129
+ return aValue - bValue;
130
+ }
131
+
132
+ if (typeof aValue === 'number' || typeof bValue === 'number') {
133
+ return (aValue || 0) - (bValue || 0);
134
+ }
135
+
136
+ if (typeof aValue === 'string' || typeof bValue === 'string') {
137
+ return (aValue || '').localeCompare(bValue || '');
138
+ }
139
+
140
+ return JSON.stringify(aValue).localeCompare(JSON.stringify(bValue));
141
+ };
142
+
143
+ const getItemKey: GetItemKeyFunction = (item?: any) =>
144
+ item ? (itemKey ? item[itemKey] || null : items.indexOf(item).toString()) : null;
145
+
146
+ const getClasses = (element: string) => joinPartClasses(
147
+ 'table',
148
+ element, [
149
+ activeTheme,
150
+ theme,
151
+ ],
152
+ )
153
+
154
+ const internalColumns: ColumnConfig[] = $derived(columns.map((column) => {
155
+ return {
156
+ ...column,
157
+ sortKey: column.sortKey || column.key,
158
+ id: column.id || column.key,
159
+ };
160
+ }));
161
+
162
+ const focusableColumns = $derived(internalColumns.filter((column) => column.canFocus));
163
+
164
+ const prevTab = (event: DataCellEvent) => {
165
+ const { item, column } = event;
166
+ let nextColumn: ColumnConfig | null = null;
167
+ let nextItem: any | null = null;
168
+ if (column === focusableColumns[0]) {
169
+ if (item !== sortedItems[0]) {
170
+ nextColumn = focusableColumns[focusableColumns.length - 1];
171
+ nextItem = sortedItems[sortedItems.indexOf(item) - 1];
172
+ }
173
+ } else {
174
+ nextColumn = focusableColumns[focusableColumns.indexOf(column) - 1];
175
+ nextItem = item;
176
+ }
177
+ focusedColumnKeyID = getColumnID(nextColumn);
178
+ focusedItemKey = getItemKey(nextItem);
179
+ onprevtab?.(event);
180
+ };
181
+
182
+ const nextTab = (event: DataCellEvent) => {
183
+ const { item, column } = event;
184
+ let nextColumn: ColumnConfig | null = null;
185
+ let nextItem: any | null = null;
186
+ if (column === focusableColumns.at(-1)) {
187
+ if (item !== sortedItems.at(-1)) {
188
+ nextColumn = focusableColumns[0];
189
+ nextItem = sortedItems[sortedItems.indexOf(item) + 1];
190
+ }
191
+ } else {
192
+ nextColumn = focusableColumns[focusableColumns.indexOf(column) + 1];
193
+ nextItem = item;
194
+ }
195
+ focusedColumnKeyID = getColumnID(nextColumn);
196
+ focusedItemKey = getItemKey(nextItem);
197
+ onnexttab?.(event);
198
+ };
199
+
200
+ const enterPressed = (event: DataCellEvent) => {
201
+ if (enterAction === 'stay') {
202
+ return;
203
+ }
204
+ if (enterAction === 'next') {
205
+ return nextTab(event);
206
+ }
207
+ const { item } = event;
208
+ const itemIndex = sortedItems.indexOf(item);
209
+ if (itemIndex !== sortedItems.length - 1) {
210
+ focusedItemKey = getItemKey(sortedItems[itemIndex + 1]);
211
+ }
212
+ onenterpressed?.(event);
213
+ };
214
+
215
+ const cellClicked = (event: DataCellEvent) => {
216
+ const { column, item } = event;
217
+ focusedColumnKeyID = null;
218
+ focusedItemKey = null;
219
+ if (column.canFocus) {
220
+ focusedColumnKeyID = getColumnID(column);
221
+ focusedItemKey = getItemKey(item);
222
+ }
223
+ oncellclick?.({ column, item });
224
+ onrowclick?.({ item });
225
+ };
226
+
227
+ const cellDragEnd = (_event: DataCellDragEvent) => {
228
+ context.draggedColumn = undefined;
229
+ context.draggedItem = undefined;
230
+ context.dragType = undefined;
231
+ }
232
+
233
+ const cellDragStart = (event: DataCellDragEvent) => {
234
+ context.draggedColumn = event.sourceColumn;
235
+ context.draggedItem = event.sourceItem;
236
+ context.dragType = 'cell';
237
+ oncelldragstart?.(event);
238
+ }
239
+
240
+ const headerClicked = (column: ColumnConfig) => {
241
+ if (column.id && column.canSort) {
242
+ if (sortColumnID === column.id) {
243
+ reverseSort = !reverseSort;
244
+ } else {
245
+ reverseSort = false;
246
+ sortColumnID = column.id;
247
+ sortKey = column.sortKey || '';
248
+ sortFunction = column.sortFunction;
249
+ }
250
+
251
+ onheaderclick?.({ column, sortColumnID, sortKey, sortFunction, reverseSort });
252
+ } else {
253
+ onheaderclick?.({ column });
254
+ }
255
+ };
256
+
257
+ const rowDragEnd = (_event: RowDragEvent) => {
258
+ context.dragType = undefined;
259
+ context.draggedItem = undefined;
260
+ }
261
+
262
+ const rowDragStart = (event: RowDragEvent) => {
263
+ context.draggedColumn = undefined;
264
+ context.draggedItem = event.sourceItem;
265
+ context.dragType = 'row';
266
+ onrowdragstart?.(event);
267
+ }
268
+
269
+ let tableClass = $derived(getClasses('table'));
270
+ let theadClass = $derived(getClasses('thead'));
271
+ let theadTRClass = $derived(getClasses('theadTR'));
272
+ let tbodyClass = $derived(getClasses('tbody'));
211
273
  </script>
212
274
 
213
- <Table class={tableClass} {divClass} {striped} {hoverable} {noborder} {shadow} {color} {customColor}>
214
- <TableHead defaultRow={false} class={theadClass}>
215
- {#each internalColumns as column}
216
- <DataTableHeaderCell
217
- {column}
218
- isSorted={!!sortColumnID && getColumnID(column) === sortColumnID}
219
- {reverseSort}
220
- defaultSortAscendingIcon={sortAscendingIcon}
221
- defaultSortDescendingIcon={sortDescendingIcon}
222
- {thClass}
223
- on:click={() => headerClicked(column)}
224
- />
225
- {/each}
226
- </TableHead>
227
- <TableBody {tableBodyClass}>
275
+ <table class={tableClass}>
276
+ <thead class={theadClass}>
277
+ <tr class={theadTRClass}>
278
+ {#each internalColumns as column}
279
+ <DataTableHeaderCell
280
+ {column}
281
+ isSorted={!!sortColumnID && getColumnID(column) === sortColumnID}
282
+ {reverseSort}
283
+ onclick={() => headerClicked(column)}
284
+ />
285
+ {/each}
286
+ </tr>
287
+ </thead>
288
+ <tbody class={tbodyClass}>
228
289
  {#each sortedItems as item}
229
290
  {@const isRowFocused = !!focusedItemKey && focusedItemKey === getItemKey(item)}
230
291
  <DataTableRow
@@ -232,21 +293,24 @@ const headerClicked = (column) => {
232
293
  {allowRowDrop}
233
294
  columns={internalColumns}
234
295
  {focusedColumnKeyID}
235
- {getTRClass}
236
296
  {isRowFocused}
237
297
  {item}
238
- on:action
239
- on:cellChanged
240
- on:cellClicked={cellClicked}
241
- on:cellDragStart
242
- on:cellDropped
243
- on:enterPressed={enterPressed}
244
- on:nextTab={nextTab}
245
- on:prevTab={prevTab}
246
- on:rowClicked
247
- on:rowDragStart
248
- on:rowDropped
298
+ {onaction}
299
+ {onbutton}
300
+ {oncellchanged}
301
+ oncellclick={cellClicked}
302
+ oncelldragend={cellDragEnd}
303
+ oncelldragstart={cellDragStart}
304
+ {oncelldropped}
305
+ onenterpressed={enterPressed}
306
+ onnexttab={nextTab}
307
+ onprevtab={prevTab}
308
+ {onrowclick}
309
+ ondragend={rowDragEnd}
310
+ ondragstart={rowDragStart}
311
+ ondropped={onrowdropped}
312
+ {trClassGetter}
249
313
  />
250
314
  {/each}
251
- </TableBody>
252
- </Table>
315
+ </tbody>
316
+ </table>
@@ -1,61 +1,31 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { ColumnConfig, EnterAction, RowBoolean, RowClassFunction, RowDropBoolean, SortFunction } from './common.js';
3
- declare const __propDef: {
4
- props: {
5
- allowRowDrag?: RowBoolean | undefined;
6
- allowRowDrop?: RowDropBoolean | undefined;
7
- columns?: ColumnConfig[] | undefined;
8
- items?: any[] | undefined;
9
- sortKey?: string | undefined;
10
- sortFunction?: SortFunction | undefined | null;
11
- reverseSort?: boolean | undefined;
12
- sortColumnID?: string | null | undefined;
13
- sortAscendingIcon?: ConstructorOfATypedSvelteComponent | undefined;
14
- sortDescendingIcon?: ConstructorOfATypedSvelteComponent | undefined;
15
- itemKey?: string | null | undefined;
16
- enterAction?: EnterAction | undefined;
17
- divClassAppend?: string | undefined;
18
- divClassOverride?: string | undefined;
19
- tableClassAppend?: string | undefined;
20
- tableClassOverride?: string | undefined;
21
- theadClassAppend?: string | undefined;
22
- theadClassOverride?: string | undefined;
23
- thClassAppend?: string | undefined;
24
- thClassOverride?: string | undefined;
25
- tableBodyClassAppend?: string | undefined;
26
- tableBodyClassOverride?: string | undefined;
27
- tdClassAppend?: string | undefined;
28
- tdClassOverride?: string | undefined;
29
- tdFocusedClassAppend?: string | undefined;
30
- tdFocusedClassOverride?: string | undefined;
31
- trClassAppend?: string | undefined;
32
- trClassOverride?: string | undefined;
33
- trClassGetter?: RowClassFunction | null | undefined;
34
- striped?: boolean | undefined;
35
- hoverable?: boolean | undefined;
36
- noborder?: boolean | undefined;
37
- shadow?: boolean | undefined;
38
- color?: string | undefined;
39
- customColor?: string | undefined;
40
- };
41
- events: {
42
- action: any;
43
- cellChanged: any;
44
- cellDragStart: CustomEvent<any>;
45
- cellDropped: CustomEvent<any>;
46
- rowClicked: CustomEvent<any>;
47
- rowDragStart: CustomEvent<any>;
48
- rowDropped: CustomEvent<any>;
49
- cellClicked: CustomEvent<any>;
50
- headerClicked: CustomEvent<any>;
51
- } & {
52
- [evt: string]: CustomEvent<any>;
53
- };
54
- slots: {};
55
- };
56
- export type DataTableProps = typeof __propDef.props;
57
- export type DataTableEvents = typeof __propDef.events;
58
- export type DataTableSlots = typeof __propDef.slots;
59
- export default class DataTable extends SvelteComponent<DataTableProps, DataTableEvents, DataTableSlots> {
1
+ import type { ActionEvent, ColumnConfig, DataCellChangedEvent, DataCellDragEvent, DataCellDropEvent, DataCellEvent, DataTableTheme, EnterAction, HeaderEvent, RowBoolean, RowClassFunction, RowDragEvent, RowDropBoolean, RowDropEvent, RowEvent, SortFunction } from './common';
2
+ interface Props {
3
+ allowRowDrag?: RowBoolean;
4
+ allowRowDrop?: RowDropBoolean;
5
+ columns?: ColumnConfig[];
6
+ enterAction?: EnterAction;
7
+ itemKey?: string | null;
8
+ items?: any[];
9
+ onaction?: (event: ActionEvent) => void;
10
+ onbutton?: (event: DataCellEvent) => void;
11
+ oncellchanged?: (event: DataCellChangedEvent) => void;
12
+ oncellclick?: (event: DataCellEvent) => void;
13
+ oncelldragstart?: (event: DataCellDragEvent) => void;
14
+ oncelldropped?: (event: DataCellDropEvent) => void;
15
+ onenterpressed?: (event: DataCellEvent) => void;
16
+ onheaderclick?: (event: HeaderEvent) => void;
17
+ onnexttab?: (event: DataCellEvent) => void;
18
+ onprevtab?: (event: DataCellEvent) => void;
19
+ onrowclick?: (event: RowEvent) => void;
20
+ onrowdragstart?: (event: RowDragEvent) => void;
21
+ onrowdropped?: (event: RowDropEvent) => void;
22
+ reverseSort?: boolean;
23
+ sortColumnID?: string | null;
24
+ sortFunction?: SortFunction;
25
+ sortKey?: string;
26
+ theme?: DataTableTheme;
27
+ trClassGetter?: RowClassFunction;
60
28
  }
61
- export {};
29
+ declare const DataTable: import("svelte").Component<Props, {}, "reverseSort" | "sortColumnID" | "sortFunction" | "sortKey">;
30
+ type DataTable = ReturnType<typeof DataTable>;
31
+ export default DataTable;