@makolabs/ripple 0.0.1-dev.1 → 0.0.1-dev.11

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 (116) hide show
  1. package/README.md +571 -98
  2. package/dist/button/Button.svelte +48 -0
  3. package/dist/button/Button.svelte.d.ts +4 -0
  4. package/dist/button/button.d.ts +113 -0
  5. package/dist/button/button.js +168 -0
  6. package/dist/charts/Chart.svelte +533 -0
  7. package/dist/charts/Chart.svelte.d.ts +4 -0
  8. package/dist/drawer/Drawer.svelte +224 -0
  9. package/dist/drawer/Drawer.svelte.d.ts +4 -0
  10. package/dist/drawer/drawer.d.ts +160 -0
  11. package/dist/drawer/drawer.js +80 -0
  12. package/dist/elements/alert/Alert.svelte +53 -0
  13. package/dist/elements/alert/Alert.svelte.d.ts +4 -0
  14. package/dist/elements/badge/Badge.svelte +43 -0
  15. package/dist/elements/badge/Badge.svelte.d.ts +4 -0
  16. package/dist/elements/badge/badge.d.ts +181 -0
  17. package/dist/elements/badge/badge.js +65 -0
  18. package/dist/elements/dropdown/Dropdown.svelte +267 -0
  19. package/dist/elements/dropdown/Dropdown.svelte.d.ts +4 -0
  20. package/dist/elements/dropdown/Select.svelte +314 -0
  21. package/dist/elements/dropdown/Select.svelte.d.ts +4 -0
  22. package/dist/elements/dropdown/dropdown.d.ts +251 -0
  23. package/dist/elements/dropdown/dropdown.js +95 -0
  24. package/dist/elements/dropdown/select.d.ts +200 -0
  25. package/dist/elements/dropdown/select.js +82 -0
  26. package/dist/elements/file-upload/FileUpload.svelte +213 -0
  27. package/dist/elements/file-upload/FileUpload.svelte.d.ts +4 -0
  28. package/dist/elements/progress/Progress.svelte +87 -0
  29. package/dist/elements/progress/Progress.svelte.d.ts +4 -0
  30. package/dist/elements/timeline/Timeline.svelte +92 -0
  31. package/dist/elements/timeline/Timeline.svelte.d.ts +7 -0
  32. package/dist/forms/Checkbox.svelte +54 -0
  33. package/dist/forms/Checkbox.svelte.d.ts +4 -0
  34. package/dist/forms/DateRange.svelte +493 -0
  35. package/dist/forms/DateRange.svelte.d.ts +4 -0
  36. package/dist/forms/Form.svelte +39 -0
  37. package/dist/forms/Form.svelte.d.ts +4 -0
  38. package/dist/forms/Input.svelte +86 -0
  39. package/dist/forms/Input.svelte.d.ts +4 -0
  40. package/dist/forms/NumberInput.svelte +159 -0
  41. package/dist/forms/NumberInput.svelte.d.ts +4 -0
  42. package/dist/forms/RadioInputs.svelte +64 -0
  43. package/dist/forms/RadioInputs.svelte.d.ts +4 -0
  44. package/dist/forms/RadioPill.svelte +66 -0
  45. package/dist/forms/RadioPill.svelte.d.ts +4 -0
  46. package/dist/forms/Slider.svelte +342 -0
  47. package/dist/forms/Slider.svelte.d.ts +4 -0
  48. package/dist/forms/Tags.svelte +181 -0
  49. package/dist/forms/Tags.svelte.d.ts +4 -0
  50. package/dist/forms/Toggle.svelte +132 -0
  51. package/dist/forms/Toggle.svelte.d.ts +4 -0
  52. package/dist/forms/slider.d.ts +143 -0
  53. package/dist/forms/slider.js +62 -0
  54. package/dist/header/Breadcrumbs.svelte +73 -0
  55. package/dist/header/Breadcrumbs.svelte.d.ts +4 -0
  56. package/dist/header/PageHeader.svelte +30 -0
  57. package/dist/header/PageHeader.svelte.d.ts +4 -0
  58. package/dist/header/breadcrumbs.d.ts +226 -0
  59. package/dist/header/breadcrumbs.js +87 -0
  60. package/dist/header/pageheaders.d.ts +10 -0
  61. package/dist/header/pageheaders.js +1 -0
  62. package/dist/helper/cls.d.ts +1 -0
  63. package/dist/helper/cls.js +4 -0
  64. package/dist/helper/date.d.ts +7 -0
  65. package/dist/helper/date.js +15 -0
  66. package/dist/helper/nav.svelte.d.ts +6 -0
  67. package/dist/helper/nav.svelte.js +23 -0
  68. package/dist/index.d.ts +734 -1
  69. package/dist/index.js +62 -1
  70. package/dist/layout/card/Card.svelte +41 -0
  71. package/dist/layout/card/Card.svelte.d.ts +4 -0
  72. package/dist/layout/card/StatsCard.svelte +265 -0
  73. package/dist/layout/card/StatsCard.svelte.d.ts +4 -0
  74. package/dist/layout/card/card.d.ts +128 -0
  75. package/dist/layout/card/card.js +51 -0
  76. package/dist/layout/card/stats-card.d.ts +206 -0
  77. package/dist/layout/card/stats-card.js +73 -0
  78. package/dist/layout/navbar/Navbar.svelte +206 -0
  79. package/dist/layout/navbar/Navbar.svelte.d.ts +4 -0
  80. package/dist/layout/navbar/navbar.d.ts +205 -0
  81. package/dist/layout/navbar/navbar.js +98 -0
  82. package/dist/layout/sidebar/NavGroup.svelte +97 -0
  83. package/dist/layout/sidebar/NavGroup.svelte.d.ts +4 -0
  84. package/dist/layout/sidebar/NavItem.svelte +29 -0
  85. package/dist/layout/sidebar/NavItem.svelte.d.ts +4 -0
  86. package/dist/layout/sidebar/Sidebar.svelte +139 -0
  87. package/dist/layout/sidebar/Sidebar.svelte.d.ts +4 -0
  88. package/dist/layout/table/Cells.svelte +111 -0
  89. package/dist/layout/table/Cells.svelte.d.ts +27 -0
  90. package/dist/layout/table/Table.svelte +413 -0
  91. package/dist/layout/table/Table.svelte.d.ts +4 -0
  92. package/dist/layout/table/table.d.ts +303 -0
  93. package/dist/layout/table/table.js +149 -0
  94. package/dist/layout/tabs/Tab.svelte +57 -0
  95. package/dist/layout/tabs/Tab.svelte.d.ts +4 -0
  96. package/dist/layout/tabs/TabContent.svelte +31 -0
  97. package/dist/layout/tabs/TabContent.svelte.d.ts +4 -0
  98. package/dist/layout/tabs/TabGroup.svelte +57 -0
  99. package/dist/layout/tabs/TabGroup.svelte.d.ts +4 -0
  100. package/dist/layout/tabs/tabs.d.ts +155 -0
  101. package/dist/layout/tabs/tabs.js +156 -0
  102. package/dist/modal/Modal.svelte +207 -0
  103. package/dist/modal/Modal.svelte.d.ts +4 -0
  104. package/dist/modal/modal.d.ts +211 -0
  105. package/dist/modal/modal.js +81 -0
  106. package/dist/sonner/sonner.svelte +13 -0
  107. package/dist/sonner/sonner.svelte.d.ts +4 -0
  108. package/dist/types/variants.d.ts +1 -0
  109. package/dist/types/variants.js +1 -0
  110. package/dist/variants.d.ts +20 -0
  111. package/dist/variants.js +19 -0
  112. package/package.json +104 -80
  113. package/dist/layout/Card.svelte +0 -179
  114. package/dist/layout/Card.svelte.d.ts +0 -208
  115. package/dist/layout/index.d.ts +0 -1
  116. package/dist/layout/index.js +0 -1
@@ -0,0 +1,413 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../helper/cls.js';
3
+ import { table, type TableProps, type SortDirection, type SortState } from './table.js';
4
+
5
+ let {
6
+ data = [],
7
+ columns = [],
8
+ color = 'default',
9
+ size = 'base',
10
+ bordered = true,
11
+ striped = false,
12
+ pageSize = 10,
13
+ selectable = false,
14
+ selected = $bindable([]),
15
+ onrowclick = () => {},
16
+ onsort = () => {},
17
+ onselect = () => {},
18
+ class: classname = '',
19
+ wrapperclass: wrapperClass = '',
20
+ tableclass: tableClass = '',
21
+ theadclass: theadClass = '',
22
+ tbodyclass: tbodyClass = '',
23
+ trclass: trClass = '',
24
+ thclass: thClass = '',
25
+ tdclass: tdClass = '',
26
+ footerclass: footerClass = '',
27
+ rowclass = () => '',
28
+ loading = false
29
+ }: TableProps<any> = $props();
30
+
31
+ let sortColumn = $state('');
32
+ let sortDirection = $state<SortDirection>(null);
33
+ let currentPage = $state(1);
34
+
35
+ // Pagination is automatically determined by pageSize
36
+ const pagination = $derived(pageSize > 0 && data.length > pageSize);
37
+
38
+ const {
39
+ base,
40
+ wrapper,
41
+ table: tableBaseClass,
42
+ thead,
43
+ tbody,
44
+ tr,
45
+ th,
46
+ td,
47
+ footer,
48
+ pagination: paginationClass,
49
+ emptyState,
50
+ sortButton,
51
+ sortIcon
52
+ } = $derived(
53
+ table({
54
+ size,
55
+ color,
56
+ bordered,
57
+ striped
58
+ })
59
+ );
60
+
61
+ const baseClasses = $derived(cn(base(), classname));
62
+ const wrapperClasses = $derived(cn(wrapper(), wrapperClass));
63
+ const tableClasses = $derived(cn(tableBaseClass(), tableClass));
64
+ const theadClasses = $derived(cn(thead(), theadClass));
65
+ const tbodyClasses = $derived(cn(tbody(), tbodyClass));
66
+ const trClasses = $derived(cn(tr(), trClass));
67
+ const thClasses = $derived(cn(th(), thClass));
68
+ const tdClasses = $derived(cn(td(), tdClass));
69
+ const footerClasses = $derived(cn(footer(), footerClass));
70
+ const emptyStateClasses = $derived(emptyState());
71
+
72
+ // Handle pagination
73
+ const totalPages = $derived(Math.ceil(data.length / pageSize));
74
+ const paginatedData = $derived(
75
+ pagination ? data.slice((currentPage - 1) * pageSize, currentPage * pageSize) : data
76
+ );
77
+
78
+ // Handle sorting
79
+ function toggleSort(column: string) {
80
+ const columnDef = columns.find((col) => (col.sortKey || col.key) === column);
81
+ if (!columnDef?.sortable) return;
82
+
83
+ if (sortColumn === column) {
84
+ // Cycle through: asc -> desc -> null
85
+ if (sortDirection === 'asc') {
86
+ sortDirection = 'desc';
87
+ } else if (sortDirection === 'desc') {
88
+ sortDirection = null;
89
+ sortColumn = '';
90
+ } else {
91
+ sortDirection = 'asc';
92
+ }
93
+ } else {
94
+ sortColumn = column;
95
+ sortDirection = 'asc';
96
+ }
97
+
98
+ const newSortState: SortState = { column: sortColumn, direction: sortDirection };
99
+ onsort(newSortState);
100
+ }
101
+
102
+ function toggleRowSelection(row: any) {
103
+ if (!selectable) return;
104
+
105
+ const index = selected.findIndex((r) => r === row);
106
+ if (index === -1) {
107
+ selected = [...selected, row];
108
+ } else {
109
+ selected = selected.filter((r) => r !== row);
110
+ }
111
+
112
+ onselect(selected);
113
+ }
114
+
115
+ function isRowSelected(row: any) {
116
+ return selected.includes(row);
117
+ }
118
+
119
+ function handleRowClick(row: any, index: number) {
120
+ onrowclick(row, index);
121
+ }
122
+
123
+ function nextPage() {
124
+ if (currentPage < totalPages) {
125
+ currentPage++;
126
+ }
127
+ }
128
+
129
+ function prevPage() {
130
+ if (currentPage > 1) {
131
+ currentPage--;
132
+ }
133
+ }
134
+
135
+ function goToPage(page: number) {
136
+ if (page >= 1 && page <= totalPages) {
137
+ currentPage = page;
138
+ }
139
+ }
140
+ </script>
141
+
142
+ <div class={baseClasses}>
143
+ <div class={wrapperClasses}>
144
+ <table class={tableClasses}>
145
+ <thead class={theadClasses}>
146
+ <tr>
147
+ {#if selectable}
148
+ <th class={thClasses}>
149
+ <input
150
+ type="checkbox"
151
+ onchange={() => {
152
+ if (selected.length === data.length) {
153
+ selected = [];
154
+ } else {
155
+ selected = [...data];
156
+ }
157
+ onselect(selected);
158
+ }}
159
+ checked={selected.length === data.length && data.length > 0}
160
+ aria-label="Select all rows"
161
+ />
162
+ </th>
163
+ {/if}
164
+
165
+ {#each columns as column (column.key)}
166
+ <th
167
+ class={cn(
168
+ thClasses,
169
+ column.align === 'center' && 'text-center',
170
+ column.align === 'right' && 'text-right',
171
+ column.class
172
+ )}
173
+ style={column.width ? `width: ${column.width}` : undefined}
174
+ >
175
+ {#if column.sortable}
176
+ <button
177
+ type="button"
178
+ class={sortButton()}
179
+ onclick={() => toggleSort(column.sortKey || column.key)}
180
+ aria-label={`Sort by ${column.header}`}
181
+ >
182
+ {column.header}
183
+ <span class={sortIcon()}>
184
+ {#if sortColumn === (column.sortKey || column.key)}
185
+ {#if sortDirection === 'asc'}
186
+ <svg
187
+ xmlns="http://www.w3.org/2000/svg"
188
+ viewBox="0 0 20 20"
189
+ fill="currentColor"
190
+ class="h-4 w-4"
191
+ >
192
+ <path
193
+ d="M10 15a.75.75 0 01-.75-.75V7.612L6.058 10.8a.75.75 0 01-1.061-1.061l3.75-3.75a.75.75 0 011.06 0l3.75 3.75a.75.75 0 11-1.06 1.061L10.75 7.612v6.638A.75.75 0 0110 15z"
194
+ />
195
+ </svg>
196
+ {:else if sortDirection === 'desc'}
197
+ <svg
198
+ xmlns="http://www.w3.org/2000/svg"
199
+ viewBox="0 0 20 20"
200
+ fill="currentColor"
201
+ class="h-4 w-4"
202
+ >
203
+ <path
204
+ d="M10 5a.75.75 0 01.75.75v6.638l3.192-3.187a.75.75 0 111.06 1.061l-3.75 3.75a.75.75 0 01-1.06 0l-3.75-3.75a.75.75 0 111.06-1.061L9.25 12.389V5.75A.75.75 0 0110 5z"
205
+ />
206
+ </svg>
207
+ {/if}
208
+ {:else}
209
+ <svg
210
+ xmlns="http://www.w3.org/2000/svg"
211
+ fill="none"
212
+ viewBox="0 0 24 24"
213
+ stroke-width="1.5"
214
+ stroke="currentColor"
215
+ class="h-4 w-4 opacity-40"
216
+ >
217
+ <path
218
+ stroke-linecap="round"
219
+ stroke-linejoin="round"
220
+ d="M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9"
221
+ />
222
+ </svg>
223
+ {/if}
224
+ </span>
225
+ </button>
226
+ {:else}
227
+ {column.header}
228
+ {/if}
229
+ </th>
230
+ {/each}
231
+ </tr>
232
+ </thead>
233
+
234
+ <tbody class={tbodyClasses}>
235
+ {#if loading}
236
+ <tr>
237
+ <td
238
+ colspan={selectable ? columns.length + 1 : columns.length}
239
+ class={cn(tdClasses, 'py-8 text-center')}
240
+ >
241
+ <div class="flex justify-center">
242
+ <svg
243
+ class="text-default-500 h-6 w-6 animate-spin"
244
+ xmlns="http://www.w3.org/2000/svg"
245
+ fill="none"
246
+ viewBox="0 0 24 24"
247
+ >
248
+ <circle
249
+ class="opacity-25"
250
+ cx="12"
251
+ cy="12"
252
+ r="10"
253
+ stroke="currentColor"
254
+ stroke-width="4"
255
+ ></circle>
256
+ <path
257
+ class="opacity-75"
258
+ fill="currentColor"
259
+ d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
260
+ ></path>
261
+ </svg>
262
+ </div>
263
+ </td>
264
+ </tr>
265
+ {:else if paginatedData.length === 0}
266
+ <tr>
267
+ <td
268
+ colspan={selectable ? columns.length + 1 : columns.length}
269
+ class={emptyStateClasses}
270
+ >
271
+ No data available
272
+ </td>
273
+ </tr>
274
+ {:else}
275
+ {#each paginatedData as row, rowIndex (rowIndex)}
276
+ <tr
277
+ class={cn(
278
+ trClasses,
279
+ rowclass(row, rowIndex),
280
+ selectable && isRowSelected(row) && 'bg-primary-100'
281
+ )}
282
+ onclick={() => handleRowClick(row, rowIndex)}
283
+ aria-selected={selectable && isRowSelected(row)}
284
+ >
285
+ {#if selectable}
286
+ <td class={tdClasses}>
287
+ <input
288
+ type="checkbox"
289
+ checked={isRowSelected(row)}
290
+ onclick={(e) => {
291
+ e.stopPropagation(); // Prevent row click
292
+ toggleRowSelection(row);
293
+ }}
294
+ aria-label={`Select row ${rowIndex + 1}`}
295
+ />
296
+ </td>
297
+ {/if}
298
+
299
+ {#each columns as column (column.key)}
300
+ <td
301
+ class={cn(
302
+ tdClasses,
303
+ column.align === 'center' && 'text-center',
304
+ column.align === 'right' && 'text-right',
305
+ column.class
306
+ )}
307
+ >
308
+ {#if column.cell}
309
+ {@render column.cell(row, column.key, rowIndex)}
310
+ {:else if row[column.key] === undefined || row[column.key] === null}
311
+ <span class="text-default-300">—</span>
312
+ {:else}
313
+ {row[column.key]}
314
+ {/if}
315
+ </td>
316
+ {/each}
317
+ </tr>
318
+ {/each}
319
+ {/if}
320
+ </tbody>
321
+ </table>
322
+ </div>
323
+
324
+ {#if pagination && totalPages > 1}
325
+ <div class={footerClasses}>
326
+ <div class={paginationClass}>
327
+ <div class="flex items-center gap-2">
328
+ <span class="text-default-500 text-sm">
329
+ Showing {Math.min((currentPage - 1) * pageSize + 1, data.length)}
330
+ to {Math.min(currentPage * pageSize, data.length)} of {data.length} entries
331
+ </span>
332
+ </div>
333
+
334
+ <div class="flex items-center gap-1">
335
+ <button
336
+ type="button"
337
+ class={cn(
338
+ 'relative inline-flex items-center rounded-md px-2 py-1 text-sm font-medium',
339
+ currentPage === 1
340
+ ? 'text-default-300 cursor-not-allowed'
341
+ : 'text-default-700 hover:bg-default-100'
342
+ )}
343
+ onclick={prevPage}
344
+ disabled={currentPage === 1}
345
+ aria-label="Previous page"
346
+ >
347
+ <svg
348
+ xmlns="http://www.w3.org/2000/svg"
349
+ viewBox="0 0 20 20"
350
+ fill="currentColor"
351
+ class="h-5 w-5"
352
+ >
353
+ <path
354
+ d="M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z"
355
+ />
356
+ </svg>
357
+ </button>
358
+
359
+ <!--eslint-disable-next-line @typescript-eslint/no-unused-vars-->
360
+ {#each Array(Math.min(5, totalPages)) as _, i (i)}
361
+ {@const pageNum =
362
+ currentPage <= 3
363
+ ? i + 1
364
+ : currentPage >= totalPages - 2
365
+ ? totalPages - 4 + i
366
+ : currentPage - 2 + i}
367
+
368
+ {#if pageNum > 0 && pageNum <= totalPages}
369
+ <button
370
+ type="button"
371
+ class={cn(
372
+ 'relative inline-flex items-center rounded-md px-3 py-1 text-sm font-medium',
373
+ currentPage === pageNum
374
+ ? 'bg-primary-100 text-primary-700'
375
+ : 'text-default-700 hover:bg-default-100'
376
+ )}
377
+ onclick={() => goToPage(pageNum)}
378
+ aria-label={`Page ${pageNum}`}
379
+ aria-current={currentPage === pageNum ? 'page' : undefined}
380
+ >
381
+ {pageNum}
382
+ </button>
383
+ {/if}
384
+ {/each}
385
+
386
+ <button
387
+ type="button"
388
+ class={cn(
389
+ 'relative inline-flex items-center rounded-md px-2 py-1 text-sm font-medium',
390
+ currentPage === totalPages
391
+ ? 'text-default-300 cursor-not-allowed'
392
+ : 'text-default-700 hover:bg-default-100'
393
+ )}
394
+ onclick={nextPage}
395
+ disabled={currentPage === totalPages}
396
+ aria-label="Next page"
397
+ >
398
+ <svg
399
+ xmlns="http://www.w3.org/2000/svg"
400
+ viewBox="0 0 20 20"
401
+ fill="currentColor"
402
+ class="h-5 w-5"
403
+ >
404
+ <path
405
+ d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z"
406
+ />
407
+ </svg>
408
+ </button>
409
+ </div>
410
+ </div>
411
+ </div>
412
+ {/if}
413
+ </div>
@@ -0,0 +1,4 @@
1
+ import { type TableProps } from './table.js';
2
+ declare const Table: import("svelte").Component<TableProps<any>, {}, "selected">;
3
+ type Table = ReturnType<typeof Table>;
4
+ export default Table;
@@ -0,0 +1,303 @@
1
+ import type { ClassValue } from 'tailwind-variants';
2
+ import type { Snippet } from 'svelte';
3
+ import type { VariantColors, VariantSizes } from '../../index.js';
4
+ export type DataRow = Record<string, any>;
5
+ export type KeyType = keyof DataRow;
6
+ export type StatusType = 'active' | 'inactive' | 'pending' | 'error' | 'default';
7
+ export type TableColumn<T extends DataRow = any> = {
8
+ key: KeyType;
9
+ header: string;
10
+ cell?: Snippet<[row: T, key: KeyType, index?: number]>;
11
+ sortable?: boolean;
12
+ sortKey?: string;
13
+ align?: 'left' | 'center' | 'right';
14
+ width?: string;
15
+ class?: ClassValue;
16
+ };
17
+ export type SortDirection = 'asc' | 'desc' | null;
18
+ export type SortState = {
19
+ column: string | null;
20
+ direction: SortDirection;
21
+ };
22
+ export declare const table: import("tailwind-variants").TVReturnType<{
23
+ size: {
24
+ xs: {
25
+ th: string;
26
+ td: string;
27
+ };
28
+ sm: {
29
+ th: string;
30
+ td: string;
31
+ };
32
+ base: {
33
+ th: string;
34
+ td: string;
35
+ };
36
+ lg: {
37
+ th: string;
38
+ td: string;
39
+ };
40
+ xl: {
41
+ th: string;
42
+ td: string;
43
+ };
44
+ '2xl': {
45
+ th: string;
46
+ td: string;
47
+ };
48
+ };
49
+ color: {
50
+ default: {
51
+ th: string;
52
+ };
53
+ primary: {
54
+ th: string;
55
+ tr: string;
56
+ };
57
+ secondary: {
58
+ th: string;
59
+ tr: string;
60
+ };
61
+ info: {
62
+ th: string;
63
+ tr: string;
64
+ };
65
+ success: {
66
+ th: string;
67
+ tr: string;
68
+ };
69
+ warning: {
70
+ th: string;
71
+ tr: string;
72
+ };
73
+ danger: {
74
+ th: string;
75
+ tr: string;
76
+ };
77
+ };
78
+ bordered: {
79
+ true: {
80
+ table: string;
81
+ th: string;
82
+ td: string;
83
+ };
84
+ false: {
85
+ table: string;
86
+ };
87
+ };
88
+ striped: {
89
+ true: {
90
+ tr: string;
91
+ };
92
+ };
93
+ }, {
94
+ base: string;
95
+ wrapper: string;
96
+ table: string;
97
+ thead: string;
98
+ tbody: string;
99
+ tr: string;
100
+ th: string;
101
+ td: string;
102
+ footer: string;
103
+ pagination: string;
104
+ emptyState: string;
105
+ sortButton: string;
106
+ sortIcon: string;
107
+ }, undefined, {
108
+ size: {
109
+ xs: {
110
+ th: string;
111
+ td: string;
112
+ };
113
+ sm: {
114
+ th: string;
115
+ td: string;
116
+ };
117
+ base: {
118
+ th: string;
119
+ td: string;
120
+ };
121
+ lg: {
122
+ th: string;
123
+ td: string;
124
+ };
125
+ xl: {
126
+ th: string;
127
+ td: string;
128
+ };
129
+ '2xl': {
130
+ th: string;
131
+ td: string;
132
+ };
133
+ };
134
+ color: {
135
+ default: {
136
+ th: string;
137
+ };
138
+ primary: {
139
+ th: string;
140
+ tr: string;
141
+ };
142
+ secondary: {
143
+ th: string;
144
+ tr: string;
145
+ };
146
+ info: {
147
+ th: string;
148
+ tr: string;
149
+ };
150
+ success: {
151
+ th: string;
152
+ tr: string;
153
+ };
154
+ warning: {
155
+ th: string;
156
+ tr: string;
157
+ };
158
+ danger: {
159
+ th: string;
160
+ tr: string;
161
+ };
162
+ };
163
+ bordered: {
164
+ true: {
165
+ table: string;
166
+ th: string;
167
+ td: string;
168
+ };
169
+ false: {
170
+ table: string;
171
+ };
172
+ };
173
+ striped: {
174
+ true: {
175
+ tr: string;
176
+ };
177
+ };
178
+ }, {
179
+ base: string;
180
+ wrapper: string;
181
+ table: string;
182
+ thead: string;
183
+ tbody: string;
184
+ tr: string;
185
+ th: string;
186
+ td: string;
187
+ footer: string;
188
+ pagination: string;
189
+ emptyState: string;
190
+ sortButton: string;
191
+ sortIcon: string;
192
+ }, import("tailwind-variants").TVReturnType<{
193
+ size: {
194
+ xs: {
195
+ th: string;
196
+ td: string;
197
+ };
198
+ sm: {
199
+ th: string;
200
+ td: string;
201
+ };
202
+ base: {
203
+ th: string;
204
+ td: string;
205
+ };
206
+ lg: {
207
+ th: string;
208
+ td: string;
209
+ };
210
+ xl: {
211
+ th: string;
212
+ td: string;
213
+ };
214
+ '2xl': {
215
+ th: string;
216
+ td: string;
217
+ };
218
+ };
219
+ color: {
220
+ default: {
221
+ th: string;
222
+ };
223
+ primary: {
224
+ th: string;
225
+ tr: string;
226
+ };
227
+ secondary: {
228
+ th: string;
229
+ tr: string;
230
+ };
231
+ info: {
232
+ th: string;
233
+ tr: string;
234
+ };
235
+ success: {
236
+ th: string;
237
+ tr: string;
238
+ };
239
+ warning: {
240
+ th: string;
241
+ tr: string;
242
+ };
243
+ danger: {
244
+ th: string;
245
+ tr: string;
246
+ };
247
+ };
248
+ bordered: {
249
+ true: {
250
+ table: string;
251
+ th: string;
252
+ td: string;
253
+ };
254
+ false: {
255
+ table: string;
256
+ };
257
+ };
258
+ striped: {
259
+ true: {
260
+ tr: string;
261
+ };
262
+ };
263
+ }, {
264
+ base: string;
265
+ wrapper: string;
266
+ table: string;
267
+ thead: string;
268
+ tbody: string;
269
+ tr: string;
270
+ th: string;
271
+ td: string;
272
+ footer: string;
273
+ pagination: string;
274
+ emptyState: string;
275
+ sortButton: string;
276
+ sortIcon: string;
277
+ }, undefined, unknown, unknown, undefined>>;
278
+ export type TableProps<T extends DataRow = any> = {
279
+ data: T[];
280
+ columns: TableColumn<T>[];
281
+ color?: VariantColors;
282
+ size?: VariantSizes;
283
+ bordered?: boolean;
284
+ striped?: boolean;
285
+ emptyStateText?: string;
286
+ pageSize?: number;
287
+ selectable?: boolean;
288
+ selected?: T[];
289
+ class?: ClassValue;
290
+ wrapperclass?: ClassValue;
291
+ tableclass?: ClassValue;
292
+ theadclass?: ClassValue;
293
+ tbodyclass?: ClassValue;
294
+ trclass?: ClassValue;
295
+ thclass?: ClassValue;
296
+ tdclass?: ClassValue;
297
+ footerclass?: ClassValue;
298
+ onrowclick?: (row: T, index: number) => void;
299
+ onsort?: (sortState: SortState) => void;
300
+ onselect?: (selected: T[]) => void;
301
+ rowclass?: (row: T, index: number) => ClassValue;
302
+ loading?: boolean;
303
+ };