@gradio/dataframe 0.21.7 → 0.23.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 (128) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/Dataframe.test.ts +697 -32
  3. package/Index.svelte +107 -106
  4. package/dist/Index.svelte +107 -106
  5. package/dist/Index.svelte.d.ts +0 -1
  6. package/dist/shared/BooleanCell.svelte +12 -6
  7. package/dist/shared/BooleanCell.svelte.d.ts +4 -18
  8. package/dist/shared/CellMenu.svelte +74 -49
  9. package/dist/shared/CellMenu.svelte.d.ts +5 -19
  10. package/dist/shared/CellMenuButton.svelte +3 -3
  11. package/dist/shared/CellMenuButton.svelte.d.ts +4 -18
  12. package/dist/shared/CellMenuIcons.svelte +1 -1
  13. package/dist/shared/CellMenuIcons.svelte.d.ts +4 -18
  14. package/dist/shared/DataCell.svelte +189 -0
  15. package/dist/shared/DataCell.svelte.d.ts +44 -0
  16. package/dist/shared/EditableCell.svelte +88 -64
  17. package/dist/shared/EditableCell.svelte.d.ts +8 -26
  18. package/dist/shared/EmptyRowButton.svelte +2 -2
  19. package/dist/shared/EmptyRowButton.svelte.d.ts +4 -18
  20. package/dist/shared/FilterMenu.svelte +26 -18
  21. package/dist/shared/FilterMenu.svelte.d.ts +5 -21
  22. package/dist/shared/HeaderCell.svelte +218 -0
  23. package/dist/shared/HeaderCell.svelte.d.ts +30 -0
  24. package/dist/shared/RowNumber.svelte +4 -2
  25. package/dist/shared/RowNumber.svelte.d.ts +4 -18
  26. package/dist/shared/Table.svelte +1039 -947
  27. package/dist/shared/Table.svelte.d.ts +12 -30
  28. package/dist/shared/Toolbar.svelte +32 -22
  29. package/dist/shared/Toolbar.svelte.d.ts +6 -21
  30. package/dist/shared/column_measurement.svelte.d.ts +20 -0
  31. package/dist/shared/column_measurement.svelte.js +79 -0
  32. package/dist/shared/icons/FilterIcon.svelte +14 -6
  33. package/dist/shared/icons/FilterIcon.svelte.d.ts +14 -6
  34. package/dist/shared/icons/Padlock.svelte +6 -2
  35. package/dist/shared/icons/Padlock.svelte.d.ts +4 -25
  36. package/dist/shared/icons/SelectionButtons.svelte +23 -8
  37. package/dist/shared/icons/SelectionButtons.svelte.d.ts +4 -18
  38. package/dist/shared/icons/SortButtonDown.svelte +15 -4
  39. package/dist/shared/icons/SortButtonDown.svelte.d.ts +4 -25
  40. package/dist/shared/icons/SortButtonUp.svelte +15 -5
  41. package/dist/shared/icons/SortButtonUp.svelte.d.ts +4 -25
  42. package/dist/shared/icons/SortIcon.svelte +13 -7
  43. package/dist/shared/icons/SortIcon.svelte.d.ts +7 -21
  44. package/dist/shared/tanstack/index.d.ts +3 -0
  45. package/dist/shared/tanstack/index.js +3 -0
  46. package/dist/shared/tanstack/table.svelte.d.ts +26 -0
  47. package/dist/shared/tanstack/table.svelte.js +102 -0
  48. package/dist/shared/tanstack/virtual.svelte.d.ts +14 -0
  49. package/dist/shared/tanstack/virtual.svelte.js +76 -0
  50. package/dist/shared/types.d.ts +2 -0
  51. package/dist/shared/utils/filter.d.ts +5 -0
  52. package/dist/shared/utils/filter.js +62 -0
  53. package/dist/shared/utils/selection_utils.js +1 -1
  54. package/dist/shared/utils/table_utils.d.ts +1 -14
  55. package/dist/shared/utils/table_utils.js +0 -61
  56. package/dist/standalone/Index.svelte +71 -46
  57. package/dist/standalone/Index.svelte.d.ts +4 -23
  58. package/dist/types.d.ts +32 -0
  59. package/dist/types.js +1 -0
  60. package/package.json +12 -11
  61. package/shared/BooleanCell.svelte +12 -6
  62. package/shared/CellMenu.svelte +74 -49
  63. package/shared/CellMenuButton.svelte +3 -3
  64. package/shared/CellMenuIcons.svelte +1 -1
  65. package/shared/DataCell.svelte +189 -0
  66. package/shared/EditableCell.svelte +88 -64
  67. package/shared/EmptyRowButton.svelte +2 -2
  68. package/shared/FilterMenu.svelte +26 -18
  69. package/shared/HeaderCell.svelte +218 -0
  70. package/shared/RowNumber.svelte +4 -2
  71. package/shared/Table.svelte +1039 -947
  72. package/shared/Toolbar.svelte +32 -22
  73. package/shared/column_measurement.svelte.ts +103 -0
  74. package/shared/icons/FilterIcon.svelte +14 -6
  75. package/shared/icons/Padlock.svelte +6 -2
  76. package/shared/icons/SelectionButtons.svelte +23 -8
  77. package/shared/icons/SortButtonDown.svelte +15 -4
  78. package/shared/icons/SortButtonUp.svelte +15 -5
  79. package/shared/icons/SortIcon.svelte +13 -7
  80. package/shared/tanstack/index.ts +23 -0
  81. package/shared/tanstack/table.svelte.ts +117 -0
  82. package/shared/tanstack/virtual.svelte.ts +105 -0
  83. package/shared/types.ts +3 -0
  84. package/shared/utils/filter.ts +66 -0
  85. package/shared/utils/selection_utils.ts +1 -1
  86. package/shared/utils/table_utils.ts +1 -100
  87. package/standalone/Index.svelte +71 -46
  88. package/test/filter.test.ts +350 -0
  89. package/test/selection_utils.test.ts +416 -0
  90. package/test/table_utils.test.ts +45 -112
  91. package/types.ts +34 -0
  92. package/dist/shared/TableCell.svelte +0 -330
  93. package/dist/shared/TableCell.svelte.d.ts +0 -66
  94. package/dist/shared/TableHeader.svelte +0 -344
  95. package/dist/shared/TableHeader.svelte.d.ts +0 -61
  96. package/dist/shared/VirtualTable.svelte +0 -379
  97. package/dist/shared/VirtualTable.svelte.d.ts +0 -42
  98. package/dist/shared/context/dataframe_context.d.ts +0 -180
  99. package/dist/shared/context/dataframe_context.js +0 -412
  100. package/dist/shared/icons/SortArrowDown.svelte +0 -25
  101. package/dist/shared/icons/SortArrowDown.svelte.d.ts +0 -20
  102. package/dist/shared/icons/SortArrowUp.svelte +0 -25
  103. package/dist/shared/icons/SortArrowUp.svelte.d.ts +0 -20
  104. package/dist/shared/utils/data_processing.d.ts +0 -14
  105. package/dist/shared/utils/data_processing.js +0 -47
  106. package/dist/shared/utils/drag_utils.d.ts +0 -15
  107. package/dist/shared/utils/drag_utils.js +0 -67
  108. package/dist/shared/utils/filter_utils.d.ts +0 -29
  109. package/dist/shared/utils/filter_utils.js +0 -123
  110. package/dist/shared/utils/keyboard_utils.d.ts +0 -3
  111. package/dist/shared/utils/keyboard_utils.js +0 -236
  112. package/dist/shared/utils/menu_utils.d.ts +0 -42
  113. package/dist/shared/utils/menu_utils.js +0 -58
  114. package/dist/shared/utils/sort_utils.d.ts +0 -26
  115. package/dist/shared/utils/sort_utils.js +0 -59
  116. package/shared/TableCell.svelte +0 -330
  117. package/shared/TableHeader.svelte +0 -344
  118. package/shared/VirtualTable.svelte +0 -379
  119. package/shared/context/dataframe_context.ts +0 -701
  120. package/shared/icons/SortArrowDown.svelte +0 -25
  121. package/shared/icons/SortArrowUp.svelte +0 -25
  122. package/shared/utils/data_processing.ts +0 -77
  123. package/shared/utils/drag_utils.ts +0 -105
  124. package/shared/utils/filter_utils.ts +0 -208
  125. package/shared/utils/keyboard_utils.ts +0 -309
  126. package/shared/utils/menu_utils.ts +0 -115
  127. package/shared/utils/sort_utils.ts +0 -91
  128. package/test/sort_utils.test.ts +0 -323
@@ -1,323 +0,0 @@
1
- import { describe, test, expect } from "vitest";
2
- import {
3
- get_sort_status,
4
- sort_data,
5
- SortDirection
6
- } from "../shared/utils/sort_utils";
7
-
8
- describe("sort_utils", () => {
9
- describe("get_sort_status", () => {
10
- const headers = ["A", "B", "C"];
11
-
12
- test("returns none when no sort is active", () => {
13
- expect(get_sort_status("A", [], headers)).toBe("none");
14
- });
15
-
16
- test("returns ascending when column is sorted ascending", () => {
17
- expect(
18
- get_sort_status(
19
- "A",
20
- [{ col: 0, direction: "asc" as SortDirection }],
21
- headers
22
- )
23
- ).toBe("asc");
24
- });
25
-
26
- test("returns descending when column is sorted descending", () => {
27
- expect(
28
- get_sort_status(
29
- "B",
30
- [{ col: 1, direction: "desc" as SortDirection }],
31
- headers
32
- )
33
- ).toBe("desc");
34
- });
35
-
36
- test("returns none for non-matching column", () => {
37
- expect(
38
- get_sort_status(
39
- "A",
40
- [{ col: 1, direction: "asc" as SortDirection }],
41
- headers
42
- )
43
- ).toBe("none");
44
- });
45
-
46
- test("handles multiple sort columns", () => {
47
- const sort_columns = [
48
- { col: 0, direction: "asc" as SortDirection },
49
- { col: 1, direction: "desc" as SortDirection }
50
- ];
51
- expect(get_sort_status("A", sort_columns, headers)).toBe("asc");
52
- expect(get_sort_status("B", sort_columns, headers)).toBe("desc");
53
- expect(get_sort_status("C", sort_columns, headers)).toBe("none");
54
- });
55
-
56
- test("handles invalid column indices", () => {
57
- expect(
58
- get_sort_status(
59
- "A",
60
- [{ col: -1, direction: "asc" as SortDirection }],
61
- headers
62
- )
63
- ).toBe("none");
64
-
65
- expect(
66
- get_sort_status(
67
- "A",
68
- [{ col: 999, direction: "asc" as SortDirection }],
69
- headers
70
- )
71
- ).toBe("none");
72
- });
73
-
74
- test("handles empty headers", () => {
75
- expect(
76
- get_sort_status(
77
- "A",
78
- [{ col: 0, direction: "asc" as SortDirection }],
79
- []
80
- )
81
- ).toBe("none");
82
- });
83
-
84
- test("prioritizes first matching column in sort_columns", () => {
85
- const sort_columns = [
86
- { col: 0, direction: "asc" as SortDirection },
87
- { col: 0, direction: "desc" as SortDirection }
88
- ];
89
-
90
- expect(get_sort_status("A", sort_columns, headers)).toBe("asc");
91
- });
92
- });
93
-
94
- describe("sort_data", () => {
95
- const data = [
96
- [
97
- { id: "1", value: "B" },
98
- { id: "2", value: 2 }
99
- ],
100
- [
101
- { id: "3", value: "A" },
102
- { id: "4", value: 1 }
103
- ],
104
- [
105
- { id: "5", value: "C" },
106
- { id: "6", value: 3 }
107
- ]
108
- ];
109
-
110
- test("sorts strings ascending", () => {
111
- const indices = sort_data(data, [
112
- { col: 0, direction: "asc" as SortDirection }
113
- ]);
114
- expect(indices).toEqual([1, 0, 2]); // A, B, C
115
- });
116
-
117
- test("sorts numbers ascending", () => {
118
- const indices = sort_data(data, [
119
- { col: 1, direction: "asc" as SortDirection }
120
- ]);
121
- expect(indices).toEqual([1, 0, 2]);
122
- });
123
-
124
- test("sorts strings descending", () => {
125
- const indices = sort_data(data, [
126
- { col: 0, direction: "desc" as SortDirection }
127
- ]);
128
- expect(indices).toEqual([2, 0, 1]);
129
- });
130
-
131
- test("returns original order when sort params are empty", () => {
132
- const indices = sort_data(data, []);
133
- expect(indices).toEqual([0, 1, 2]);
134
- });
135
-
136
- test("handles empty data", () => {
137
- const indices = sort_data(
138
- [],
139
- [{ col: 0, direction: "asc" as SortDirection }]
140
- );
141
- expect(indices).toEqual([]);
142
- });
143
-
144
- test("handles invalid column index", () => {
145
- const indices = sort_data(data, [
146
- { col: 999, direction: "asc" as SortDirection }
147
- ]);
148
- expect(indices).toEqual([0, 1, 2]);
149
- });
150
-
151
- test("sorts by multiple columns", () => {
152
- const test_data = [
153
- [
154
- { id: "1", value: "A" },
155
- { id: "2", value: 2 }
156
- ],
157
- [
158
- { id: "3", value: "A" },
159
- { id: "4", value: 1 }
160
- ],
161
- [
162
- { id: "5", value: "B" },
163
- { id: "6", value: 3 }
164
- ]
165
- ];
166
-
167
- const indices = sort_data(test_data, [
168
- { col: 0, direction: "asc" as SortDirection },
169
- { col: 1, direction: "asc" as SortDirection }
170
- ]);
171
-
172
- expect(indices).toEqual([1, 0, 2]);
173
- });
174
-
175
- test("respects sort direction for each column", () => {
176
- const test_data = [
177
- [
178
- { id: "1", value: "A" },
179
- { id: "2", value: 2 }
180
- ],
181
- [
182
- { id: "3", value: "A" },
183
- { id: "4", value: 1 }
184
- ],
185
- [
186
- { id: "5", value: "B" },
187
- { id: "6", value: 3 }
188
- ]
189
- ];
190
-
191
- const indices = sort_data(test_data, [
192
- { col: 0, direction: "asc" as SortDirection },
193
- { col: 1, direction: "desc" as SortDirection }
194
- ]);
195
-
196
- expect(indices).toEqual([0, 1, 2]);
197
- });
198
-
199
- test("handles mixed data types in sort columns", () => {
200
- const mixed_data = [
201
- [
202
- { id: "1", value: "A" },
203
- { id: "2", value: 2 }
204
- ],
205
- [
206
- { id: "3", value: "A" },
207
- { id: "4", value: 1 }
208
- ],
209
- [
210
- { id: "5", value: "B" },
211
- { id: "6", value: 2 }
212
- ]
213
- ];
214
-
215
- const indices = sort_data(mixed_data, [
216
- { col: 0, direction: "asc" as SortDirection },
217
- { col: 1, direction: "asc" as SortDirection }
218
- ]);
219
-
220
- expect(indices).toEqual([1, 0, 2]);
221
- });
222
-
223
- test("handles more than two sort columns", () => {
224
- const complex_data = [
225
- [
226
- { id: "1", value: "A" },
227
- { id: "2", value: 1 },
228
- { id: "3", value: "X" }
229
- ],
230
- [
231
- { id: "4", value: "A" },
232
- { id: "5", value: 1 },
233
- { id: "6", value: "Y" }
234
- ],
235
- [
236
- { id: "7", value: "B" },
237
- { id: "8", value: 2 },
238
- { id: "9", value: "Z" }
239
- ]
240
- ];
241
-
242
- const indices = sort_data(complex_data, [
243
- { col: 0, direction: "asc" as SortDirection },
244
- { col: 1, direction: "asc" as SortDirection },
245
- { col: 2, direction: "asc" as SortDirection }
246
- ]);
247
-
248
- expect(indices).toEqual([0, 1, 2]);
249
- });
250
-
251
- test("ignores invalid sort columns", () => {
252
- const indices = sort_data(data, [
253
- { col: -1, direction: "asc" as SortDirection },
254
- { col: 0, direction: "asc" as SortDirection }
255
- ]);
256
-
257
- expect(indices).toEqual([1, 0, 2]);
258
- });
259
-
260
- test("maintains original order when all values are equal", () => {
261
- const equal_data = [
262
- [
263
- { id: "1", value: "A" },
264
- { id: "2", value: 1 }
265
- ],
266
- [
267
- { id: "3", value: "A" },
268
- { id: "4", value: 1 }
269
- ],
270
- [
271
- { id: "5", value: "A" },
272
- { id: "6", value: 1 }
273
- ]
274
- ];
275
-
276
- const indices = sort_data(equal_data, [
277
- { col: 0, direction: "asc" as SortDirection },
278
- { col: 1, direction: "asc" as SortDirection }
279
- ]);
280
-
281
- expect(indices).toEqual([0, 1, 2]);
282
- });
283
-
284
- test("handles undefined values in data rows", () => {
285
- const data_with_undefined = [
286
- [
287
- { id: "1", value: "A" },
288
- { id: "2", value: "" }
289
- ],
290
- [
291
- { id: "3", value: "B" },
292
- { id: "4", value: 2 }
293
- ]
294
- ];
295
-
296
- const indices = sort_data(data_with_undefined, [
297
- { col: 0, direction: "asc" as SortDirection },
298
- { col: 1, direction: "asc" as SortDirection }
299
- ]);
300
-
301
- expect(indices).toEqual([0, 1]);
302
- });
303
-
304
- test("handles missing values in data", () => {
305
- const data_with_missing = [
306
- [
307
- { id: "1", value: "" },
308
- { id: "2", value: 1 }
309
- ],
310
- [
311
- { id: "3", value: "A" },
312
- { id: "4", value: 2 }
313
- ]
314
- ];
315
-
316
- const indices = sort_data(data_with_missing, [
317
- { col: 0, direction: "asc" as SortDirection }
318
- ]);
319
-
320
- expect(indices).toEqual([0, 1]);
321
- });
322
- });
323
- });