@emamid/svelte-data-table 0.0.22 → 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 +56 -33
  14. package/dist/cells/ActionsCell.svelte.d.ts +9 -47
  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 -48
  20. package/dist/cells/InputCell.svelte.d.ts +14 -25
  21. package/dist/cells/MultiSelectCell.svelte +85 -25
  22. package/dist/cells/MultiSelectCell.svelte.d.ts +15 -26
  23. package/dist/cells/NumberInputCell.svelte +90 -44
  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 -25
  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 -32
  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,109 +1,176 @@
1
- <script>import { createEventDispatcher, onDestroy } from "svelte";
2
- import { TableBodyCell } from "flowbite-svelte";
3
- import {
4
- defaultCellRenderer,
5
- evalCellDropBoolean,
6
- evalRowBoolean,
7
- getDataTableContext
8
- } from "./common.js";
9
- export let column;
10
- export let item;
11
- export let isCellFocused;
12
- const context = getDataTableContext();
13
- let span;
14
- const dispatch = createEventDispatcher();
15
- const dragOverHandler = (event) => {
16
- const { draggedColumn, draggedItem } = context;
17
- event.preventDefault();
18
- const canDrop = evalCellDropBoolean(draggedItem, draggedColumn, item, column.allowCellDrop);
19
- if (canDrop) {
20
- event.preventDefault();
21
- if (event.dataTransfer) {
22
- event.dataTransfer.dropEffect = "move";
23
- }
24
- }
25
- };
26
- const dragStartHandler = (dragEvent) => {
27
- context.draggedColumn = column;
28
- context.draggedItem = item;
29
- dispatch("cellDragStart", {
30
- dragEvent,
31
- sourceColumn: column,
32
- sourceItem: item
33
- });
34
- };
35
- const dropHandler = (event) => {
36
- const { draggedColumn, draggedItem } = context;
37
- const canDrop = evalCellDropBoolean(draggedItem, draggedColumn, item, column.allowCellDrop);
38
- if (canDrop) {
39
- event.preventDefault();
40
- dispatch("cellDropped", {
41
- sourceColumn: draggedColumn,
42
- sourceItem: draggedItem,
43
- targetColumn: column,
44
- targetItem: item
45
- });
46
- }
47
- };
48
- $: {
49
- if (span && span.parentElement) {
50
- span.parentElement.addEventListener("dragover", dragOverHandler);
51
- span.parentElement.addEventListener("dragstart", dragStartHandler);
52
- span.parentElement.addEventListener("drop", dropHandler);
53
- }
54
- }
55
- onDestroy(() => {
56
- if (span && span.parentElement) {
57
- span.parentElement.removeEventListener("dragover", dragOverHandler);
58
- span.parentElement.removeEventListener("dragstart", dragStartHandler);
59
- span.parentElement.removeEventListener("drop", dropHandler);
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
- <TableBodyCell tdClass={column.getTDClass(item, '', isCellFocused)} />
66
- {:then { dataValue, displayValue }}
67
- <TableBodyCell
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
- tdClass={column.getTDClass(item, dataValue, isCellFocused)}
70
- on:click
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
- <svelte:component
77
- this={column.viewComponent}
143
+ <column.viewComponent
78
144
  {column}
79
145
  {item}
80
146
  value={dataValue}
81
- on:action
82
- on:cellChanged
83
- on:click
84
- on:enterPressed
85
- on:prevTab
86
- on:nextTab
87
- {...column.viewComponentConfig}
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
- <svelte:component
91
- this={column.focusComponent}
157
+ <column.focusComponent
92
158
  {column}
93
159
  {item}
94
160
  value={dataValue}
95
- on:action
96
- on:cellChanged
97
- on:click
98
- on:enterPressed
99
- on:prevTab
100
- on:nextTab
101
- {...column.focusComponentConfig}
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
- </TableBodyCell>
173
+ </td>
107
174
  {:catch}
108
- <TableBodyCell tdClass={column.getTDClass(item, '', isCellFocused)} />
175
+ <td class={baseTDClass}></td>
109
176
  {/await}
@@ -1,28 +1,19 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { InternalColumnConfig } from './common.js';
3
- declare const __propDef: {
4
- props: {
5
- column: InternalColumnConfig;
6
- item: any;
7
- isCellFocused: boolean;
8
- };
9
- events: {
10
- click: any;
11
- action: any;
12
- cellChanged: any;
13
- enterPressed: any;
14
- prevTab: any;
15
- nextTab: any;
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
- export {};
17
+ declare const DataTableDataCell: import("svelte").Component<Props, {}, "">;
18
+ type DataTableDataCell = ReturnType<typeof DataTableDataCell>;
19
+ export default DataTableDataCell;
@@ -1,25 +1,67 @@
1
- <script>import { TableHeadCell } from "flowbite-svelte";
2
- import { joinClasses } from "./common.js";
3
- export let column;
4
- export let reverseSort;
5
- export let isSorted;
6
- export let defaultSortAscendingIcon;
7
- export let defaultSortDescendingIcon;
8
- export let thClass;
9
- const sortAscendingIcon = column.sortAscendingIcon || defaultSortAscendingIcon;
10
- const sortDescendingIcon = column.sortDescendingIcon || defaultSortDescendingIcon;
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
- <TableHeadCell
14
- class={joinClasses(thClass || column.thClassOverride, column.thClassAppend)}
15
- on:click
53
+ <th
54
+ class={thClass}
55
+ {onclick}
16
56
  >
17
- {#if isSorted}
18
- {#if reverseSort}
19
- <svelte:component this={sortAscendingIcon} class="inline h-3 w-3" />
20
- {:else}
21
- <svelte:component this={sortDescendingIcon} class="inline h-3 w-3" />
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
- {/if}
24
- <span>{column.title}</span>
25
- </TableHeadCell>
65
+ <span class={titleSpanClass}>{column.title}</span>
66
+ </span>
67
+ </th>
@@ -1,24 +1,10 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { InternalColumnConfig } from './common.js';
3
- declare const __propDef: {
4
- props: {
5
- column: InternalColumnConfig;
6
- reverseSort: boolean;
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
- export {};
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;