@emamid/svelte-data-table 0.0.22 → 1.0.2
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.
- package/dist/DataTable.svelte +303 -239
- package/dist/DataTable.svelte.d.ts +30 -60
- package/dist/DataTableDataCell.svelte +157 -90
- package/dist/DataTableDataCell.svelte.d.ts +18 -27
- package/dist/DataTableHeaderCell.svelte +63 -21
- package/dist/DataTableHeaderCell.svelte.d.ts +9 -23
- package/dist/DataTableIcon.svelte +25 -0
- package/dist/DataTableIcon.svelte.d.ts +9 -0
- package/dist/DataTableRow.svelte +150 -80
- package/dist/DataTableRow.svelte.d.ts +26 -34
- package/dist/cells/Actions.d.ts +1 -1
- package/dist/cells/Actions.js +10 -11
- package/dist/cells/ActionsCell.svelte +56 -33
- package/dist/cells/ActionsCell.svelte.d.ts +9 -47
- package/dist/cells/ButtonCell.svelte +58 -16
- package/dist/cells/ButtonCell.svelte.d.ts +11 -20
- package/dist/cells/CheckboxCell.svelte +72 -19
- package/dist/cells/CheckboxCell.svelte.d.ts +11 -22
- package/dist/cells/InputCell.svelte +93 -48
- package/dist/cells/InputCell.svelte.d.ts +14 -25
- package/dist/cells/MultiSelectCell.svelte +85 -25
- package/dist/cells/MultiSelectCell.svelte.d.ts +15 -26
- package/dist/cells/NumberInputCell.svelte +90 -44
- package/dist/cells/NumberInputCell.svelte.d.ts +13 -24
- package/dist/cells/RadioCell.svelte +66 -0
- package/dist/cells/RadioCell.svelte.d.ts +12 -0
- package/dist/cells/RangeCell.svelte +66 -17
- package/dist/cells/RangeCell.svelte.d.ts +13 -22
- package/dist/cells/SelectCell.svelte +87 -25
- package/dist/cells/SelectCell.svelte.d.ts +15 -26
- package/dist/cells/SpinCell.svelte +91 -42
- package/dist/cells/SpinCell.svelte.d.ts +13 -28
- package/dist/cells/TabWrapper.svelte +23 -21
- package/dist/cells/TabWrapper.svelte.d.ts +10 -22
- package/dist/cells/index.d.ts +3 -5
- package/dist/cells/index.js +3 -5
- package/dist/common.d.ts +199 -53
- package/dist/common.js +30 -11
- package/dist/index.d.ts +8 -2
- package/dist/index.js +8 -1
- package/dist/themes/active.d.ts +4 -0
- package/dist/themes/active.js +12 -0
- package/dist/themes/daisyUI.d.ts +2 -0
- package/dist/themes/daisyUI.js +47 -0
- package/dist/themes/default.d.ts +2 -0
- package/dist/themes/default.js +57 -0
- package/dist/themes/iconify.d.ts +2 -0
- package/dist/themes/iconify.js +33 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/package.json +28 -32
- package/dist/DataTable.doc.d.ts +0 -81
- package/dist/DataTable.doc.js +0 -81
- package/dist/cells/ActionsCell.doc.d.ts +0 -28
- package/dist/cells/ActionsCell.doc.js +0 -28
- package/dist/cells/ButtonCell.doc.d.ts +0 -9
- package/dist/cells/ButtonCell.doc.js +0 -9
- package/dist/cells/CheckboxCell.doc.d.ts +0 -6
- package/dist/cells/CheckboxCell.doc.js +0 -6
- package/dist/cells/InputCell.doc.d.ts +0 -6
- package/dist/cells/InputCell.doc.js +0 -6
- package/dist/cells/MultiSelectCell.doc.d.ts +0 -8
- package/dist/cells/MultiSelectCell.doc.js +0 -8
- package/dist/cells/NumberInputCell.doc.d.ts +0 -6
- package/dist/cells/NumberInputCell.doc.js +0 -6
- package/dist/cells/RangeCell.doc.d.ts +0 -7
- package/dist/cells/RangeCell.doc.js +0 -7
- package/dist/cells/RatingCell.doc.d.ts +0 -7
- package/dist/cells/RatingCell.doc.js +0 -7
- package/dist/cells/RatingCell.svelte +0 -13
- package/dist/cells/RatingCell.svelte.d.ts +0 -22
- package/dist/cells/SelectCell.doc.d.ts +0 -8
- package/dist/cells/SelectCell.doc.js +0 -8
- package/dist/cells/SpinCell.doc.d.ts +0 -13
- package/dist/cells/SpinCell.doc.js +0 -13
- package/dist/cells/TabWrapper.doc.d.ts +0 -5
- package/dist/cells/TabWrapper.doc.js +0 -5
- package/dist/cells/ToggleCell.doc.d.ts +0 -6
- package/dist/cells/ToggleCell.doc.js +0 -6
- package/dist/cells/ToggleCell.svelte +0 -21
- package/dist/cells/ToggleCell.svelte.d.ts +0 -23
|
@@ -1,109 +1,176 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type {
|
|
3
|
+
ActionEvent,
|
|
4
|
+
ColumnConfig,
|
|
5
|
+
DataCellChangedEvent,
|
|
6
|
+
DataCellDragEvent,
|
|
7
|
+
DataCellDropEvent,
|
|
8
|
+
DataCellEvent,
|
|
9
|
+
DataCellMouseEvent,
|
|
10
|
+
} from './common';
|
|
11
|
+
import {
|
|
12
|
+
defaultCellRenderer,
|
|
13
|
+
evalCellDropBoolean,
|
|
14
|
+
evalRowBoolean,
|
|
15
|
+
getDataTableContext,
|
|
16
|
+
joinPartClasses,
|
|
17
|
+
} from './common';
|
|
18
|
+
import { activeTheme } from './themes/active';
|
|
19
|
+
|
|
20
|
+
interface Props {
|
|
21
|
+
column: ColumnConfig;
|
|
22
|
+
item: any;
|
|
23
|
+
isCellFocused: boolean;
|
|
24
|
+
onaction?: (event: ActionEvent) => void;
|
|
25
|
+
onbutton?: (event: DataCellEvent) => void;
|
|
26
|
+
oncellchanged?: (event: DataCellChangedEvent) => void;
|
|
27
|
+
oncelldragend?: (event: DataCellDragEvent) => void;
|
|
28
|
+
oncelldragstart?: (event: DataCellDragEvent) => void;
|
|
29
|
+
oncelldropped?: (event: DataCellDropEvent) => void;
|
|
30
|
+
onclick?: (event: DataCellMouseEvent) => void;
|
|
31
|
+
onenterpressed?: (event: DataCellEvent) => void;
|
|
32
|
+
onnexttab?: (event: DataCellEvent) => void;
|
|
33
|
+
onprevtab?: (event: DataCellEvent) => void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
let {
|
|
37
|
+
column,
|
|
38
|
+
item,
|
|
39
|
+
isCellFocused,
|
|
40
|
+
onaction,
|
|
41
|
+
onbutton,
|
|
42
|
+
oncellchanged,
|
|
43
|
+
oncelldragend,
|
|
44
|
+
oncelldragstart,
|
|
45
|
+
oncelldropped,
|
|
46
|
+
onclick,
|
|
47
|
+
onenterpressed,
|
|
48
|
+
onnexttab,
|
|
49
|
+
onprevtab,
|
|
50
|
+
}: Props = $props();
|
|
51
|
+
|
|
52
|
+
const context = getDataTableContext();
|
|
53
|
+
const tableTheme = context.theme || {};
|
|
54
|
+
|
|
55
|
+
const baseTDClass = $derived(joinPartClasses(
|
|
56
|
+
'dataCell',
|
|
57
|
+
'td', [
|
|
58
|
+
activeTheme,
|
|
59
|
+
tableTheme,
|
|
60
|
+
column.theme,
|
|
61
|
+
],
|
|
62
|
+
isCellFocused,
|
|
63
|
+
));
|
|
64
|
+
|
|
65
|
+
const click = (event: MouseEvent) => {
|
|
66
|
+
onclick?.({
|
|
67
|
+
...event,
|
|
68
|
+
column,
|
|
69
|
+
item,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const dragEnd = (event: DragEvent) => {
|
|
74
|
+
oncelldragend?.({
|
|
75
|
+
...event,
|
|
76
|
+
sourceColumn: column,
|
|
77
|
+
sourceItem: item,
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const dragOver = (event: DragEvent) => {
|
|
82
|
+
const { draggedColumn, draggedItem} = context;
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
const canDrop = evalCellDropBoolean(draggedItem, draggedColumn, item, column.allowCellDrop);
|
|
85
|
+
|
|
86
|
+
if (!canDrop) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
event.preventDefault();
|
|
91
|
+
if (event.dataTransfer) {
|
|
92
|
+
event.dataTransfer.dropEffect = 'move';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const dragStart = (dragEvent: DragEvent) => {
|
|
97
|
+
oncelldragstart?.({
|
|
98
|
+
...dragEvent,
|
|
99
|
+
sourceColumn: column,
|
|
100
|
+
sourceItem: item,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const drop = (event: DragEvent) => {
|
|
105
|
+
const { draggedColumn, draggedItem} = context;
|
|
106
|
+
if (!draggedItem || !draggedColumn) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const canDrop = evalCellDropBoolean(draggedItem, draggedColumn, item, column.allowCellDrop);
|
|
111
|
+
if (!canDrop) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
event.preventDefault();
|
|
116
|
+
|
|
117
|
+
oncelldropped?.({
|
|
118
|
+
...event,
|
|
119
|
+
sourceColumn: draggedColumn,
|
|
120
|
+
sourceItem: draggedItem,
|
|
121
|
+
targetColumn: column,
|
|
122
|
+
targetItem: item,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// const getClass = $derived((value: any) => column.tdClassGetter ? column.tdClassGetter(item, column, value, isCellFocused, baseTDClass) : baseTDClass);
|
|
127
|
+
|
|
62
128
|
</script>
|
|
63
129
|
|
|
64
|
-
{#await (column.cellRenderer || defaultCellRenderer)(column, item)}
|
|
65
|
-
<
|
|
66
|
-
{:then { dataValue, displayValue }}
|
|
67
|
-
<
|
|
130
|
+
{#await (column.cellRenderer || defaultCellRenderer)(column, item, isCellFocused, baseTDClass)}
|
|
131
|
+
<td class={baseTDClass}></td>
|
|
132
|
+
{:then { dataValue, displayValue, focusComponentConfig, tdClass, viewComponentConfig }}
|
|
133
|
+
<td
|
|
68
134
|
draggable={evalRowBoolean(item, column.allowCellDrag)}
|
|
69
|
-
|
|
70
|
-
|
|
135
|
+
class={tdClass || baseTDClass}
|
|
136
|
+
onclick={click}
|
|
137
|
+
ondragend={dragEnd}
|
|
138
|
+
ondragover={dragOver}
|
|
139
|
+
ondragstart={dragStart}
|
|
140
|
+
ondrop={drop}
|
|
71
141
|
>
|
|
72
|
-
{#if !!column.allowCellDrag || !!column.allowCellDrop}
|
|
73
|
-
<span style="display:none" bind:this={span}></span>
|
|
74
|
-
{/if}
|
|
75
142
|
{#if column.viewComponent}
|
|
76
|
-
<
|
|
77
|
-
this={column.viewComponent}
|
|
143
|
+
<column.viewComponent
|
|
78
144
|
{column}
|
|
79
145
|
{item}
|
|
80
146
|
value={dataValue}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
{
|
|
147
|
+
{onaction}
|
|
148
|
+
{onbutton}
|
|
149
|
+
{oncellchanged}
|
|
150
|
+
onclick={click}
|
|
151
|
+
{onenterpressed}
|
|
152
|
+
{onprevtab}
|
|
153
|
+
{onnexttab}
|
|
154
|
+
{...(viewComponentConfig || column.viewComponentConfig)}
|
|
88
155
|
/>
|
|
89
156
|
{:else if column.focusComponent && isCellFocused}
|
|
90
|
-
<
|
|
91
|
-
this={column.focusComponent}
|
|
157
|
+
<column.focusComponent
|
|
92
158
|
{column}
|
|
93
159
|
{item}
|
|
94
160
|
value={dataValue}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
{
|
|
161
|
+
{onaction}
|
|
162
|
+
{onbutton}
|
|
163
|
+
{oncellchanged}
|
|
164
|
+
onclick={click}
|
|
165
|
+
{onenterpressed}
|
|
166
|
+
{onprevtab}
|
|
167
|
+
{onnexttab}
|
|
168
|
+
{...(focusComponentConfig || column.focusComponentConfig)}
|
|
102
169
|
/>
|
|
103
170
|
{:else}
|
|
104
171
|
{displayValue}
|
|
105
172
|
{/if}
|
|
106
|
-
</
|
|
173
|
+
</td>
|
|
107
174
|
{:catch}
|
|
108
|
-
<
|
|
175
|
+
<td class={baseTDClass}></td>
|
|
109
176
|
{/await}
|
|
@@ -1,28 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
cellDragStart: CustomEvent<any>;
|
|
17
|
-
cellDropped: CustomEvent<any>;
|
|
18
|
-
} & {
|
|
19
|
-
[evt: string]: CustomEvent<any>;
|
|
20
|
-
};
|
|
21
|
-
slots: {};
|
|
22
|
-
};
|
|
23
|
-
export type DataTableDataCellProps = typeof __propDef.props;
|
|
24
|
-
export type DataTableDataCellEvents = typeof __propDef.events;
|
|
25
|
-
export type DataTableDataCellSlots = typeof __propDef.slots;
|
|
26
|
-
export default class DataTableDataCell extends SvelteComponent<DataTableDataCellProps, DataTableDataCellEvents, DataTableDataCellSlots> {
|
|
1
|
+
import type { ActionEvent, ColumnConfig, DataCellChangedEvent, DataCellDragEvent, DataCellDropEvent, DataCellEvent, DataCellMouseEvent } from './common';
|
|
2
|
+
interface Props {
|
|
3
|
+
column: ColumnConfig;
|
|
4
|
+
item: any;
|
|
5
|
+
isCellFocused: boolean;
|
|
6
|
+
onaction?: (event: ActionEvent) => void;
|
|
7
|
+
onbutton?: (event: DataCellEvent) => void;
|
|
8
|
+
oncellchanged?: (event: DataCellChangedEvent) => void;
|
|
9
|
+
oncelldragend?: (event: DataCellDragEvent) => void;
|
|
10
|
+
oncelldragstart?: (event: DataCellDragEvent) => void;
|
|
11
|
+
oncelldropped?: (event: DataCellDropEvent) => void;
|
|
12
|
+
onclick?: (event: DataCellMouseEvent) => void;
|
|
13
|
+
onenterpressed?: (event: DataCellEvent) => void;
|
|
14
|
+
onnexttab?: (event: DataCellEvent) => void;
|
|
15
|
+
onprevtab?: (event: DataCellEvent) => void;
|
|
27
16
|
}
|
|
28
|
-
|
|
17
|
+
declare const DataTableDataCell: import("svelte").Component<Props, {}, "">;
|
|
18
|
+
type DataTableDataCell = ReturnType<typeof DataTableDataCell>;
|
|
19
|
+
export default DataTableDataCell;
|
|
@@ -1,25 +1,67 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
getDataTableContext,
|
|
4
|
+
getPartIcon,
|
|
5
|
+
joinPartClasses,
|
|
6
|
+
} from './common';
|
|
7
|
+
import type { ColumnConfig } from './common';
|
|
8
|
+
import { activeTheme } from './themes/active';
|
|
9
|
+
|
|
10
|
+
import DataTableIcon from './DataTableIcon.svelte';
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
column: ColumnConfig;
|
|
14
|
+
isSorted?: boolean;
|
|
15
|
+
onclick?: (event: MouseEvent) => void;
|
|
16
|
+
reverseSort: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
column,
|
|
21
|
+
isSorted,
|
|
22
|
+
onclick,
|
|
23
|
+
reverseSort,
|
|
24
|
+
}: Props = $props();
|
|
25
|
+
|
|
26
|
+
const tableTheme = getDataTableContext()?.theme || {};
|
|
27
|
+
|
|
28
|
+
const getClasses = (element: string) => joinPartClasses(
|
|
29
|
+
'headerCell',
|
|
30
|
+
element, [
|
|
31
|
+
activeTheme,
|
|
32
|
+
tableTheme,
|
|
33
|
+
column.theme,
|
|
34
|
+
],
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
const getIcon = (propName: string) => getPartIcon(
|
|
38
|
+
'headerCell',
|
|
39
|
+
propName, [
|
|
40
|
+
activeTheme,
|
|
41
|
+
tableTheme,
|
|
42
|
+
column.theme,
|
|
43
|
+
],
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
const thClass = $derived(getClasses('th'))
|
|
47
|
+
const spanClass = $derived(getClasses('span'));
|
|
48
|
+
const titleSpanClass = $derived(getClasses('titleSpan'))
|
|
49
|
+
const sortAscendingIcon = $derived(getIcon('sortAscending'));
|
|
50
|
+
const sortDescendingIcon = $derived(getIcon('sortDescending'));
|
|
11
51
|
</script>
|
|
12
52
|
|
|
13
|
-
<
|
|
14
|
-
class={
|
|
15
|
-
|
|
53
|
+
<th
|
|
54
|
+
class={thClass}
|
|
55
|
+
{onclick}
|
|
16
56
|
>
|
|
17
|
-
{
|
|
18
|
-
{#if
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
57
|
+
<span class={spanClass}>
|
|
58
|
+
{#if isSorted}
|
|
59
|
+
{#if reverseSort}
|
|
60
|
+
<DataTableIcon icon={sortDescendingIcon}/>
|
|
61
|
+
{:else}
|
|
62
|
+
<DataTableIcon icon={sortAscendingIcon}/>
|
|
63
|
+
{/if}
|
|
22
64
|
{/if}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
</
|
|
65
|
+
<span class={titleSpanClass}>{column.title}</span>
|
|
66
|
+
</span>
|
|
67
|
+
</th>
|
|
@@ -1,24 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
isSorted: boolean;
|
|
8
|
-
defaultSortAscendingIcon: ConstructorOfATypedSvelteComponent;
|
|
9
|
-
defaultSortDescendingIcon: ConstructorOfATypedSvelteComponent;
|
|
10
|
-
thClass: string;
|
|
11
|
-
};
|
|
12
|
-
events: {
|
|
13
|
-
click: MouseEvent;
|
|
14
|
-
} & {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
};
|
|
17
|
-
slots: {};
|
|
18
|
-
};
|
|
19
|
-
export type DataTableHeaderCellProps = typeof __propDef.props;
|
|
20
|
-
export type DataTableHeaderCellEvents = typeof __propDef.events;
|
|
21
|
-
export type DataTableHeaderCellSlots = typeof __propDef.slots;
|
|
22
|
-
export default class DataTableHeaderCell extends SvelteComponent<DataTableHeaderCellProps, DataTableHeaderCellEvents, DataTableHeaderCellSlots> {
|
|
1
|
+
import type { ColumnConfig } from './common';
|
|
2
|
+
interface Props {
|
|
3
|
+
column: ColumnConfig;
|
|
4
|
+
isSorted?: boolean;
|
|
5
|
+
onclick?: (event: MouseEvent) => void;
|
|
6
|
+
reverseSort: boolean;
|
|
23
7
|
}
|
|
24
|
-
|
|
8
|
+
declare const DataTableHeaderCell: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type DataTableHeaderCell = ReturnType<typeof DataTableHeaderCell>;
|
|
10
|
+
export default DataTableHeaderCell;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import Icon from '@iconify/svelte';
|
|
4
|
+
|
|
5
|
+
import type { IconifyProps, IconProp } from './common';
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
classes?: string;
|
|
9
|
+
icon: IconProp;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const { classes, icon }: Props = $props();
|
|
13
|
+
|
|
14
|
+
const iconType = $derived(typeof icon);
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
{#if iconType === 'string'}
|
|
18
|
+
<span class={classes}>{icon}</span>
|
|
19
|
+
{:else if iconType === 'object'}
|
|
20
|
+
<Icon class={classes} {...(icon as IconifyProps)} />
|
|
21
|
+
{:else}
|
|
22
|
+
<!-- Assuming icon is a Svelte component -->
|
|
23
|
+
{@const SvelteComponent = icon as Component<any, any, any>}
|
|
24
|
+
<SvelteComponent class={classes}/>
|
|
25
|
+
{/if}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Component } from 'svelte';
|
|
2
|
+
import type { IconProp } from './common';
|
|
3
|
+
interface Props {
|
|
4
|
+
classes?: string;
|
|
5
|
+
icon: IconProp;
|
|
6
|
+
}
|
|
7
|
+
declare const DataTableIcon: Component<Props, {}, "">;
|
|
8
|
+
type DataTableIcon = ReturnType<typeof DataTableIcon>;
|
|
9
|
+
export default DataTableIcon;
|