@gorbulevsv/table 0.0.0-stage → 0.0.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.
- package/README.md +110 -2
- package/dist/assets/favicon.svg +1 -0
- package/dist/components/PageTitle.svelte +13 -0
- package/dist/components/PageTitle.svelte.d.ts +5 -0
- package/dist/components/Table.svelte +104 -0
- package/dist/components/Table.svelte.d.ts +19 -0
- package/dist/components/TableHeader.svelte +71 -0
- package/dist/components/TableHeader.svelte.d.ts +15 -0
- package/dist/components/TableRow.svelte +28 -0
- package/dist/components/TableRow.svelte.d.ts +10 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/models/ITableFilter.d.ts +6 -0
- package/dist/models/ITableFilter.js +1 -0
- package/dist/remotes/fake.remote.d.ts +6 -0
- package/dist/remotes/fake.remote.js +23 -0
- package/dist/scripts/store.svelte.d.ts +6 -0
- package/dist/scripts/store.svelte.js +3 -0
- package/package.json +71 -6
package/README.md
CHANGED
|
@@ -1,3 +1,111 @@
|
|
|
1
|
-
|
|
1
|
+
## Svelte TABLE
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Sveltekit компонент таблицы с оформлением на **Bootstrap 6**.
|
|
4
|
+
|
|
5
|
+
Добавьте `<Table />` на свою страницу.
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
|
|
9
|
+
У компонента есть параметры:
|
|
10
|
+
|
|
11
|
+
- `title` - заголовок таблицы (опционально),
|
|
12
|
+
- `data` - данные, передаваемые в таблицу в формате массива объектов, например:
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
let data = [{
|
|
16
|
+
uid: 1,
|
|
17
|
+
name: 'Serge',
|
|
18
|
+
email: 'sergify@rr.r',
|
|
19
|
+
status: 'ok'
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
uid: 2,
|
|
23
|
+
name: 'Helen',
|
|
24
|
+
email: 'helen@rr.r',
|
|
25
|
+
status: 'go'
|
|
26
|
+
}]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
, с нужным вам количеством полей,
|
|
30
|
+
|
|
31
|
+
- `titles` - заголовки колонок таблицы (опционально), если не указывать, то значения берутся из ключей объектов **data**,
|
|
32
|
+
- `grows` - массив **grow** значений (опционально), для задания каждой колонке доли ширины в таблице, например:
|
|
33
|
+
|
|
34
|
+
`[2,1,1,1]`,
|
|
35
|
+
если не указывать, то значения устанавливаются равными единице,
|
|
36
|
+
|
|
37
|
+
-`_class` и `_style` - для задания классов и стилей оформления в формате:
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
{ table?: string; header?: string; row?: string }
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
, где `table`, `header`, `row` оформляют всю таблицу, заголовки столбцов или строки таблицы соответственно.
|
|
44
|
+
|
|
45
|
+
Пример:
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
let data = [
|
|
49
|
+
{
|
|
50
|
+
uid: 1,
|
|
51
|
+
name: 'Serge',
|
|
52
|
+
email: 'sergify@rr.r',
|
|
53
|
+
status: 'ok'
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
uid: 2,
|
|
57
|
+
name: 'Helen',
|
|
58
|
+
email: 'helen@rr.r',
|
|
59
|
+
status: 'go'
|
|
60
|
+
}
|
|
61
|
+
];
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```html
|
|
65
|
+
<table {data} grows="{[2,1,1,1]}" />
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
|
|
70
|
+
Вы можете отрендерить в ячейке таблицы сниппеты. Например, в качестве **status** предыдущего **data**, мы хотим добавить кнопку с указанием значения **name** из тойже **data**, т.е. хотим сделать как здесь:
|
|
71
|
+
|
|
72
|
+

|
|
73
|
+
|
|
74
|
+
тогда:
|
|
75
|
+
|
|
76
|
+
- создаём сниппет:
|
|
77
|
+
|
|
78
|
+
```html
|
|
79
|
+
{#snippet block(ob: { name: string })}
|
|
80
|
+
<button class="btn">{ob.name}</button>
|
|
81
|
+
{/snippet}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
- и меняем в **data** **status** на название сниппета **block**, т.е.
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
let data = [
|
|
88
|
+
{
|
|
89
|
+
uid: 1,
|
|
90
|
+
name: 'Serge',
|
|
91
|
+
email: 'sergify@rr.r',
|
|
92
|
+
status: block
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
uid: 2,
|
|
96
|
+
name: 'Helen',
|
|
97
|
+
email: 'helen@rr.r',
|
|
98
|
+
status: block
|
|
99
|
+
}
|
|
100
|
+
];
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
В сниппете в параметрах нужно указывать объект, а не отдельный параметр. Т.е. нужно
|
|
104
|
+
|
|
105
|
+
`{#snippet block(ob: { name: string })}`,
|
|
106
|
+
|
|
107
|
+
а не
|
|
108
|
+
|
|
109
|
+
`{#snippet block(name: string)}` (этот вариант не сработает), т.к. внутри `<Table />` это рендерится как ~ `{@render cell?.(data[i])}`, где `data[i]` это объект вроде `{uid: 2, name: 'Helen', email: 'helen@rr.r', status: block}`
|
|
110
|
+
|
|
111
|
+
Данные для подстановки в сниппет, берутся из объекта **data** (соответствующей ячейки).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.157 22.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282 29.608A29.92 29.92 0 0 0 8.764 49.65a31.5 31.5 0 0 0 3.108 20.231 30 30 0 0 0-4.477 11.183 31.9 31.9 0 0 0 5.448 24.116c10.402 14.887 30.942 19.297 45.791 9.835l26.083-16.624A29.92 29.92 0 0 0 98.235 78.35a31.53 31.53 0 0 0-3.105-20.232 30 30 0 0 0 4.474-11.182 31.88 31.88 0 0 0-5.447-24.116" style="fill:#ff3e00"/><path d="M45.817 106.582a20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.503 18 18 0 0 1 .624-2.435l.49-1.498 1.337.981a33.6 33.6 0 0 0 10.203 5.098l.97.294-.09.968a5.85 5.85 0 0 0 1.052 3.878 6.24 6.24 0 0 0 6.695 2.485 5.8 5.8 0 0 0 1.603-.704L69.27 76.28a5.43 5.43 0 0 0 2.45-3.631 5.8 5.8 0 0 0-.987-4.371 6.24 6.24 0 0 0-6.698-2.487 5.7 5.7 0 0 0-1.6.704l-9.953 6.345a19 19 0 0 1-5.296 2.326 20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.502 17.99 17.99 0 0 1 8.13-12.052l26.081-16.623a19 19 0 0 1 5.3-2.329 20.72 20.72 0 0 1 22.237 8.243 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-.624 2.435l-.49 1.498-1.337-.98a33.6 33.6 0 0 0-10.203-5.1l-.97-.294.09-.968a5.86 5.86 0 0 0-1.052-3.878 6.24 6.24 0 0 0-6.696-2.485 5.8 5.8 0 0 0-1.602.704L37.73 51.72a5.42 5.42 0 0 0-2.449 3.63 5.79 5.79 0 0 0 .986 4.372 6.24 6.24 0 0 0 6.698 2.486 5.8 5.8 0 0 0 1.602-.704l9.952-6.342a19 19 0 0 1 5.295-2.328 20.72 20.72 0 0 1 22.237 8.242 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-8.13 12.053l-26.081 16.622a19 19 0 0 1-5.3 2.328" style="fill:#fff"/></svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { STORE } from '#lib/scripts/store.svelte.ts';
|
|
3
|
+
import { onDestroy, onMount } from 'svelte';
|
|
4
|
+
|
|
5
|
+
let { children } = $props();
|
|
6
|
+
|
|
7
|
+
onMount(() => {
|
|
8
|
+
STORE.pageTitle = children;
|
|
9
|
+
});
|
|
10
|
+
onDestroy(() => {
|
|
11
|
+
STORE.pageTitle = null;
|
|
12
|
+
});
|
|
13
|
+
</script>
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import TableHeader from '#lib/components/TableHeader.svelte';
|
|
3
|
+
import TableRow from '#lib/components/TableRow.svelte';
|
|
4
|
+
import type { ITableFilter } from '#lib/models/ITableFilter.ts';
|
|
5
|
+
|
|
6
|
+
interface IProps {
|
|
7
|
+
title?: string;
|
|
8
|
+
data: any[];
|
|
9
|
+
titles?: string[];
|
|
10
|
+
grows?: number[];
|
|
11
|
+
_class?: { table?: string; header?: string; row?: string };
|
|
12
|
+
_style?: { table?: string; header?: string; row?: string };
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let { title, data, titles, grows, _class, _style }: IProps = $props();
|
|
16
|
+
|
|
17
|
+
let dataState = $state(data.map((v) => Object.values(v)));
|
|
18
|
+
let titlesState = $state(titles || Object.keys(data[0]).map((v) => v));
|
|
19
|
+
let growsState = $state(grows || Object.keys(dataState[0]).map((v) => 1));
|
|
20
|
+
|
|
21
|
+
let filter: ITableFilter = $state({
|
|
22
|
+
sort: {
|
|
23
|
+
i: 0,
|
|
24
|
+
direction: 'down'
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
let dataStateFiltered = $derived.by(() => {
|
|
28
|
+
try {
|
|
29
|
+
if (filter.sort.direction === 'down') {
|
|
30
|
+
return [...dataState].sort((a, b) =>
|
|
31
|
+
String(a[filter.sort.i]).localeCompare(String(b[filter.sort.i]))
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
if (filter.sort.direction === 'up') {
|
|
35
|
+
return [...dataState].sort((a, b) =>
|
|
36
|
+
String(b[filter.sort.i]).localeCompare(String(a[filter.sort.i]))
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
} catch (error) {
|
|
40
|
+
return [...dataState];
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
function onPrev(i: number, titles: string[], array: any[][]) {
|
|
45
|
+
if (i > 0) {
|
|
46
|
+
[titles[i], titles[i - 1]] = [titles[i - 1], titles[i]];
|
|
47
|
+
[growsState[i], growsState[i - 1]] = [growsState[i - 1], growsState[i]];
|
|
48
|
+
for (const row of array) {
|
|
49
|
+
[row[i], row[i - 1]] = [row[i - 1], row[i]];
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
[titles[i], titles[array.length]] = [titles[array.length], titles[i]];
|
|
53
|
+
[growsState[i], growsState[array.length]] = [growsState[array.length], growsState[i]];
|
|
54
|
+
for (const row of array) {
|
|
55
|
+
[row[i], row[array.length]] = [row[array.length], row[i]];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function onNext(i: number, titles: string[], array: any[][]) {
|
|
60
|
+
if (i > array.length - 1) {
|
|
61
|
+
[titles[i], titles[0]] = [titles[0], titles[i]];
|
|
62
|
+
[growsState[i], growsState[0]] = [growsState[0], growsState[i]];
|
|
63
|
+
for (const row of array) {
|
|
64
|
+
[row[i], row[0]] = [row[0], row[i]];
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
[titles[i], titles[i + 1]] = [titles[i + 1], titles[i]];
|
|
68
|
+
[growsState[i], growsState[i + 1]] = [growsState[i + 1], growsState[i]];
|
|
69
|
+
for (const row of array) {
|
|
70
|
+
[row[i], row[i + 1]] = [row[i + 1], row[i]];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
</script>
|
|
75
|
+
|
|
76
|
+
<div>
|
|
77
|
+
<h4 class="ms-1 mb-3">{title}</h4>
|
|
78
|
+
<div class="rounded-3 overflow-hidden {_class?.table}" style={_style?.table}>
|
|
79
|
+
<TableHeader
|
|
80
|
+
data={titlesState}
|
|
81
|
+
grows={growsState}
|
|
82
|
+
{filter}
|
|
83
|
+
onClickPrev={(i) => onPrev(i, titlesState, dataState)}
|
|
84
|
+
onClickNext={(i) => onNext(i, titlesState, dataState)}
|
|
85
|
+
onChangeGrow={(i, value) => (growsState[i] = value)}
|
|
86
|
+
onClickSort={(i) => {
|
|
87
|
+
if (filter.sort.i != i) filter.sort = { i: i, direction: 'down' };
|
|
88
|
+
else filter.sort = { i: i, direction: filter.sort.direction === 'down' ? 'up' : 'down' };
|
|
89
|
+
}}
|
|
90
|
+
_class={_class?.header}
|
|
91
|
+
_style={_style?.header}
|
|
92
|
+
/>
|
|
93
|
+
|
|
94
|
+
{#each dataStateFiltered as row, i}
|
|
95
|
+
<TableRow
|
|
96
|
+
data={row}
|
|
97
|
+
grows={growsState}
|
|
98
|
+
_class={_class?.row}
|
|
99
|
+
_style={_style?.row}
|
|
100
|
+
titles={titlesState}
|
|
101
|
+
/>
|
|
102
|
+
{/each}
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface IProps {
|
|
2
|
+
title?: string;
|
|
3
|
+
data: any[];
|
|
4
|
+
titles?: string[];
|
|
5
|
+
grows?: number[];
|
|
6
|
+
_class?: {
|
|
7
|
+
table?: string;
|
|
8
|
+
header?: string;
|
|
9
|
+
row?: string;
|
|
10
|
+
};
|
|
11
|
+
_style?: {
|
|
12
|
+
table?: string;
|
|
13
|
+
header?: string;
|
|
14
|
+
row?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
declare const Table: import("svelte").Component<IProps, {}, "">;
|
|
18
|
+
type Table = ReturnType<typeof Table>;
|
|
19
|
+
export default Table;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ITableFilter } from '#lib/models/ITableFilter.ts';
|
|
3
|
+
|
|
4
|
+
interface IProps {
|
|
5
|
+
data: any;
|
|
6
|
+
grows: number[];
|
|
7
|
+
filter: ITableFilter;
|
|
8
|
+
onClickPrev?: (i: number) => void;
|
|
9
|
+
onClickNext?: (i: number) => void;
|
|
10
|
+
onChangeGrow?: (i: number, value: number) => void;
|
|
11
|
+
onClickSort?: (i: number) => void;
|
|
12
|
+
_class?: string;
|
|
13
|
+
_style?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
data,
|
|
18
|
+
grows,
|
|
19
|
+
filter,
|
|
20
|
+
onClickPrev,
|
|
21
|
+
onClickNext,
|
|
22
|
+
onChangeGrow,
|
|
23
|
+
onClickSort,
|
|
24
|
+
_class = 'bg-2 px-3 py-1 fw-bold',
|
|
25
|
+
_style
|
|
26
|
+
}: IProps = $props();
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<div class="d-flex align-items-strech w-100">
|
|
30
|
+
{#each data as cell, i}
|
|
31
|
+
<div
|
|
32
|
+
class="d-flex align-items-center gap-1 text-wrap {_class}"
|
|
33
|
+
style="flex: {grows?.[i]} {grows?.[i]} 0%; {_style}"
|
|
34
|
+
>
|
|
35
|
+
{@html cell}
|
|
36
|
+
<div class="d-flex align-items-center gap-0" style="gap:3px">
|
|
37
|
+
<button title="вперёд" class="btn btn-xs rounded-3 p-1" onclick={() => onClickPrev?.(i)}>
|
|
38
|
+
<i class="bi bi-chevron-left"></i>
|
|
39
|
+
</button>
|
|
40
|
+
<button title="назад" class="btn btn-xs rounded-3 p-1" onclick={() => onClickNext?.(i)}>
|
|
41
|
+
<i class="bi bi-chevron-right"></i>
|
|
42
|
+
</button>
|
|
43
|
+
<button
|
|
44
|
+
title="доля ширины таблицы"
|
|
45
|
+
class="btn btn-xs rounded-3 py-1 px-2"
|
|
46
|
+
data-bs-toggle="menu"
|
|
47
|
+
>
|
|
48
|
+
{grows?.[i]}
|
|
49
|
+
</button>
|
|
50
|
+
<div class="menu border-0 rounded-3 shadow-sm">
|
|
51
|
+
{#each new Array(10) as _, value}
|
|
52
|
+
<button class="menu-item fs-xs rounded-3" onclick={() => onChangeGrow?.(i, value + 1)}>
|
|
53
|
+
{value + 1}
|
|
54
|
+
</button>
|
|
55
|
+
{/each}
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="flex-grow-1 d-flex align-items-center justify-content-end">
|
|
59
|
+
<button title="" class="btn-icon btn-xs rounded-3" onclick={() => onClickSort?.(i)}>
|
|
60
|
+
{#if filter.sort.i === i && filter.sort.direction === 'down'}
|
|
61
|
+
<i title="по убыванию" class="bi bi-chevron-down"></i>
|
|
62
|
+
{:else if filter.sort.i === i && filter.sort.direction === 'up'}
|
|
63
|
+
<i title="по возрастанию" class="bi bi-chevron-up"></i>
|
|
64
|
+
{:else}
|
|
65
|
+
<i title="сортировать" class="bi bi-chevron-expand"></i>
|
|
66
|
+
{/if}
|
|
67
|
+
</button>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
{/each}
|
|
71
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ITableFilter } from '#lib/models/ITableFilter.ts';
|
|
2
|
+
interface IProps {
|
|
3
|
+
data: any;
|
|
4
|
+
grows: number[];
|
|
5
|
+
filter: ITableFilter;
|
|
6
|
+
onClickPrev?: (i: number) => void;
|
|
7
|
+
onClickNext?: (i: number) => void;
|
|
8
|
+
onChangeGrow?: (i: number, value: number) => void;
|
|
9
|
+
onClickSort?: (i: number) => void;
|
|
10
|
+
_class?: string;
|
|
11
|
+
_style?: string;
|
|
12
|
+
}
|
|
13
|
+
declare const TableHeader: import("svelte").Component<IProps, {}, "">;
|
|
14
|
+
type TableHeader = ReturnType<typeof TableHeader>;
|
|
15
|
+
export default TableHeader;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
interface IProps {
|
|
3
|
+
data: any;
|
|
4
|
+
grows: number[];
|
|
5
|
+
_class?: string;
|
|
6
|
+
_style?: string;
|
|
7
|
+
titles: string[];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
let { data, grows, _class = 'bg-1 px-3 py-1 bg-50', _style, titles }: IProps = $props();
|
|
11
|
+
// Объединяем в один объект titles - то будут keys, и data - это будут values
|
|
12
|
+
const renderedData = $derived(Object.fromEntries(titles.map((k, i) => [k, data[i]])));
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<div class="d-flex align-items-strech w-100">
|
|
16
|
+
{#each data as cell, i}
|
|
17
|
+
<div
|
|
18
|
+
class="d-flex align-items-center gap-1 text-wrap {_class}"
|
|
19
|
+
style="flex: {grows?.[i]} {grows?.[i]} 0%; {_style}"
|
|
20
|
+
>
|
|
21
|
+
{#if typeof cell !== 'function'}
|
|
22
|
+
{@html cell}
|
|
23
|
+
{:else}
|
|
24
|
+
{@render cell?.(renderedData)}
|
|
25
|
+
{/if}
|
|
26
|
+
</div>
|
|
27
|
+
{/each}
|
|
28
|
+
</div>
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { query } from '$app/server';
|
|
2
|
+
export const getData = query(async () => {
|
|
3
|
+
return [
|
|
4
|
+
{
|
|
5
|
+
uid: crypto.randomUUID(),
|
|
6
|
+
name: 'Serge',
|
|
7
|
+
email: 'sergify@rr.r',
|
|
8
|
+
status: "<div class='badge bg-info bg-20'>start</div>"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
uid: crypto.randomUUID(),
|
|
12
|
+
name: 'Helen',
|
|
13
|
+
email: 'helen@rr.r',
|
|
14
|
+
status: 'go'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
uid: crypto.randomUUID(),
|
|
18
|
+
name: 'Max',
|
|
19
|
+
email: 'max@rr.r',
|
|
20
|
+
status: 'go'
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,71 @@
|
|
|
1
|
-
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@gorbulevsv/table",
|
|
3
|
+
"version": "0.0.11",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"keywords": [
|
|
8
|
+
"gorbulevsv",
|
|
9
|
+
"sveltekit",
|
|
10
|
+
"svelte",
|
|
11
|
+
"table"
|
|
12
|
+
],
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"@sveltejs/kit": "^3.0.0",
|
|
15
|
+
"svelte": "^5.0.0"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"svelte": "./dist/index.js",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./components/*": {
|
|
27
|
+
"types": "./dist/components/*.d.ts",
|
|
28
|
+
"svelte": "./dist/components/*.svelte",
|
|
29
|
+
"default": "./dist/components/*.svelte"
|
|
30
|
+
},
|
|
31
|
+
"./package.json": "./package.json"
|
|
32
|
+
},
|
|
33
|
+
"sideEffects": [
|
|
34
|
+
"**/*.css"
|
|
35
|
+
],
|
|
36
|
+
"svelte": "./dist/index.js",
|
|
37
|
+
"types": "./dist/index.d.ts",
|
|
38
|
+
"type": "module",
|
|
39
|
+
"scripts": {
|
|
40
|
+
"dev": "vite dev",
|
|
41
|
+
"build": "vite build && npm run prepack",
|
|
42
|
+
"preview": "vite preview",
|
|
43
|
+
"prepare": "svelte-kit sync || echo ''",
|
|
44
|
+
"prepack": "svelte-kit sync && svelte-package && publint",
|
|
45
|
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
46
|
+
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
47
|
+
"lint": "prettier --check .",
|
|
48
|
+
"format": "prettier --write ."
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@sveltejs/adapter-auto": "^8.0.0",
|
|
52
|
+
"@sveltejs/kit": "^3.0.0",
|
|
53
|
+
"@sveltejs/package": "^2.5.8",
|
|
54
|
+
"@sveltejs/vite-plugin-svelte": "^7.2.0",
|
|
55
|
+
"prettier": "^3.8.3",
|
|
56
|
+
"prettier-plugin-svelte": "^4.1.0",
|
|
57
|
+
"publint": "^0.3.21",
|
|
58
|
+
"svelte": "^5.57.2",
|
|
59
|
+
"svelte-check": "^4.6.0",
|
|
60
|
+
"typescript": "^6.0.3",
|
|
61
|
+
"vite": "^8.3.0"
|
|
62
|
+
},
|
|
63
|
+
"imports": {
|
|
64
|
+
"#lib": "./src/lib/index.js",
|
|
65
|
+
"#lib/*": "./src/lib/*"
|
|
66
|
+
},
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"bootstrap": "^6.0.0-alpha.1",
|
|
69
|
+
"bootstrap-icons": "^1.13.2"
|
|
70
|
+
}
|
|
71
|
+
}
|