@bexis2/bexis2-core-ui 0.0.30 → 0.1.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.
- package/README.md +41 -0
- package/dist/components/Table/Table.svelte +132 -94
- package/dist/components/Table/Table.svelte.d.ts +2 -0
- package/dist/components/Table/TableFilter.svelte +50 -5
- package/dist/components/Table/TablePagination.svelte +1 -1
- package/dist/components/Table/filter.js +43 -3
- package/dist/components/form/DropdownKvP.svelte +17 -2
- package/dist/components/form/DropdownKvP.svelte.d.ts +2 -0
- package/dist/components/form/NumberInput.svelte +2 -0
- package/dist/components/form/NumberInput.svelte.d.ts +1 -0
- package/dist/components/form/TextArea.svelte +2 -0
- package/dist/components/form/TextArea.svelte.d.ts +1 -0
- package/dist/components/form/TextInput.svelte +2 -0
- package/dist/components/form/TextInput.svelte.d.ts +1 -0
- package/dist/components/page/Alert.svelte +39 -0
- package/dist/components/page/Alert.svelte.d.ts +22 -0
- package/dist/components/spinner/Spinner.svelte +11 -1
- package/dist/components/spinner/Spinner.svelte.d.ts +9 -13
- package/dist/css/themes/theme-bexis2.css +3 -3
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -1
- package/dist/models/Enums.d.ts +5 -0
- package/dist/models/Enums.js +6 -0
- package/dist/models/Models.d.ts +18 -0
- package/package.json +1 -1
- package/src/lib/components/Table/Table.svelte +230 -184
- package/src/lib/components/Table/TableFilter.svelte +50 -5
- package/src/lib/components/Table/TablePagination.svelte +1 -1
- package/src/lib/components/Table/filter.ts +141 -94
- package/src/lib/components/form/DropdownKvP.svelte +17 -2
- package/src/lib/components/form/NumberInput.svelte +2 -0
- package/src/lib/components/form/TextArea.svelte +2 -0
- package/src/lib/components/form/TextInput.svelte +3 -0
- package/src/lib/components/page/Alert.svelte +46 -0
- package/src/lib/components/spinner/Spinner.svelte +14 -1
- package/src/lib/css/themes/theme-bexis2.css +3 -3
- package/src/lib/index.ts +9 -3
- package/src/lib/models/Enums.ts +6 -0
- package/src/lib/models/Models.ts +102 -78
|
@@ -67,6 +67,32 @@
|
|
|
67
67
|
value: 'ends',
|
|
68
68
|
label: 'Ends with'
|
|
69
69
|
}
|
|
70
|
+
],
|
|
71
|
+
date: [
|
|
72
|
+
{
|
|
73
|
+
value: 'ison',
|
|
74
|
+
label: 'Is on'
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
value: 'isstartingfrom',
|
|
78
|
+
label: 'Is starting from'
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
value: 'isafter',
|
|
82
|
+
label: 'Is after'
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
value: 'isuntil',
|
|
86
|
+
label: 'Is until'
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
value: 'isbefore',
|
|
90
|
+
label: 'Is before'
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
value: 'isnoton',
|
|
94
|
+
label: 'Is not on'
|
|
95
|
+
}
|
|
70
96
|
]
|
|
71
97
|
};
|
|
72
98
|
|
|
@@ -78,7 +104,12 @@
|
|
|
78
104
|
placement: 'bottom-start'
|
|
79
105
|
};
|
|
80
106
|
|
|
81
|
-
|
|
107
|
+
let type: string = typeof $values[0];
|
|
108
|
+
if (type === 'object') {
|
|
109
|
+
if ($values[0] instanceof Date) {
|
|
110
|
+
type = 'date';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
82
113
|
</script>
|
|
83
114
|
|
|
84
115
|
<form class="">
|
|
@@ -95,7 +126,7 @@
|
|
|
95
126
|
<div class="card p-3 absolute grid gap-2 shadow-lg z-10 w-min">
|
|
96
127
|
<button
|
|
97
128
|
class="btn variant-filled-primary btn-sm"
|
|
98
|
-
type="
|
|
129
|
+
type="button"
|
|
99
130
|
on:click|preventDefault={() => {
|
|
100
131
|
firstOption = 'isequal';
|
|
101
132
|
firstValue = undefined;
|
|
@@ -126,13 +157,20 @@
|
|
|
126
157
|
bind:value={firstValue}
|
|
127
158
|
on:click|stopPropagation
|
|
128
159
|
/>
|
|
129
|
-
{:else}
|
|
160
|
+
{:else if type === 'string'}
|
|
130
161
|
<input
|
|
131
162
|
type="text"
|
|
132
163
|
class="input p-1 border border-primary-500"
|
|
133
164
|
bind:value={firstValue}
|
|
134
165
|
on:click|stopPropagation
|
|
135
166
|
/>
|
|
167
|
+
{:else}
|
|
168
|
+
<input
|
|
169
|
+
type="date"
|
|
170
|
+
class="input p-1 border border-primary-500"
|
|
171
|
+
bind:value={firstValue}
|
|
172
|
+
on:click|stopPropagation
|
|
173
|
+
/>
|
|
136
174
|
{/if}
|
|
137
175
|
</div>
|
|
138
176
|
<label for="" class="label normal-case">And</label>
|
|
@@ -154,18 +192,25 @@
|
|
|
154
192
|
bind:value={secondValue}
|
|
155
193
|
on:click|stopPropagation
|
|
156
194
|
/>
|
|
157
|
-
{:else}
|
|
195
|
+
{:else if type === 'string'}
|
|
158
196
|
<input
|
|
159
197
|
type="text"
|
|
160
198
|
class="input p-1 border border-primary-500"
|
|
161
199
|
bind:value={secondValue}
|
|
162
200
|
on:click|stopPropagation
|
|
163
201
|
/>
|
|
202
|
+
{:else}
|
|
203
|
+
<input
|
|
204
|
+
type="date"
|
|
205
|
+
class="input p-1 border border-primary-500"
|
|
206
|
+
bind:value={secondValue}
|
|
207
|
+
on:click|stopPropagation
|
|
208
|
+
/>
|
|
164
209
|
{/if}
|
|
165
210
|
</div>
|
|
166
211
|
<button
|
|
167
212
|
class="btn variant-filled-primary btn-sm"
|
|
168
|
-
type="
|
|
213
|
+
type="button"
|
|
169
214
|
on:click|preventDefault={() => {
|
|
170
215
|
active = firstValue?.toString().length > 0 || secondValue?.toString().length > 0;
|
|
171
216
|
$filterValue = [firstOption, firstValue, secondOption, secondValue];
|
|
@@ -1,94 +1,141 @@
|
|
|
1
|
-
import type { ColumnFilterFn } from 'svelte-headless-table/lib/plugins';
|
|
2
|
-
import type { TableFilterFn } from 'svelte-headless-table/lib/plugins/addTableFilter';
|
|
3
|
-
|
|
4
|
-
const textFilter = (filterOption, filterValue, value) => {
|
|
5
|
-
switch (filterOption) {
|
|
6
|
-
case 'isequal':
|
|
7
|
-
return value.toLowerCase() === filterValue.toLowerCase();
|
|
8
|
-
case 'isnotequal':
|
|
9
|
-
return value.toLowerCase() !== filterValue.toLowerCase();
|
|
10
|
-
case 'starts':
|
|
11
|
-
return value.toLowerCase().startsWith(filterValue.toLowerCase());
|
|
12
|
-
case 'ends':
|
|
13
|
-
return value.toLowerCase().endsWith(filterValue.toLowerCase());
|
|
14
|
-
case 'contains':
|
|
15
|
-
return value.toLowerCase().includes(filterValue.toLowerCase());
|
|
16
|
-
case 'notcontains':
|
|
17
|
-
return !value.toLowerCase().includes(filterValue.toLowerCase());
|
|
18
|
-
default:
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const numberFilter = (filterOption, filterValue, value) => {
|
|
24
|
-
switch (filterOption) {
|
|
25
|
-
case 'isequal':
|
|
26
|
-
return value === filterValue;
|
|
27
|
-
case 'isnotequal':
|
|
28
|
-
return value !== filterValue;
|
|
29
|
-
case 'isgreater':
|
|
30
|
-
return value > filterValue;
|
|
31
|
-
case 'isless':
|
|
32
|
-
return value < filterValue;
|
|
33
|
-
case 'isgreaterorequal':
|
|
34
|
-
return value >= filterValue;
|
|
35
|
-
case 'islessorequal':
|
|
36
|
-
return value <= filterValue;
|
|
37
|
-
default:
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
) {
|
|
66
|
-
return
|
|
67
|
-
} else if (
|
|
68
|
-
(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
) {
|
|
72
|
-
return
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
1
|
+
import type { ColumnFilterFn } from 'svelte-headless-table/lib/plugins';
|
|
2
|
+
import type { TableFilterFn } from 'svelte-headless-table/lib/plugins/addTableFilter';
|
|
3
|
+
|
|
4
|
+
const textFilter = (filterOption, filterValue, value) => {
|
|
5
|
+
switch (filterOption) {
|
|
6
|
+
case 'isequal':
|
|
7
|
+
return value.toLowerCase() === filterValue.toLowerCase();
|
|
8
|
+
case 'isnotequal':
|
|
9
|
+
return value.toLowerCase() !== filterValue.toLowerCase();
|
|
10
|
+
case 'starts':
|
|
11
|
+
return value.toLowerCase().startsWith(filterValue.toLowerCase());
|
|
12
|
+
case 'ends':
|
|
13
|
+
return value.toLowerCase().endsWith(filterValue.toLowerCase());
|
|
14
|
+
case 'contains':
|
|
15
|
+
return value.toLowerCase().includes(filterValue.toLowerCase());
|
|
16
|
+
case 'notcontains':
|
|
17
|
+
return !value.toLowerCase().includes(filterValue.toLowerCase());
|
|
18
|
+
default:
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const numberFilter = (filterOption, filterValue, value) => {
|
|
24
|
+
switch (filterOption) {
|
|
25
|
+
case 'isequal':
|
|
26
|
+
return value === filterValue;
|
|
27
|
+
case 'isnotequal':
|
|
28
|
+
return value !== filterValue;
|
|
29
|
+
case 'isgreater':
|
|
30
|
+
return value > filterValue;
|
|
31
|
+
case 'isless':
|
|
32
|
+
return value < filterValue;
|
|
33
|
+
case 'isgreaterorequal':
|
|
34
|
+
return value >= filterValue;
|
|
35
|
+
case 'islessorequal':
|
|
36
|
+
return value <= filterValue;
|
|
37
|
+
default:
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const dateFilter = (filterOption, filterValue, value) => {
|
|
43
|
+
const filter = new Date(filterValue);
|
|
44
|
+
|
|
45
|
+
switch (filterOption) {
|
|
46
|
+
case 'ison':
|
|
47
|
+
return value === filter;
|
|
48
|
+
case 'isstartingfrom':
|
|
49
|
+
return value >= filter;
|
|
50
|
+
case 'isafter':
|
|
51
|
+
return value > filter;
|
|
52
|
+
case 'isuntil':
|
|
53
|
+
return value <= filter;
|
|
54
|
+
case 'isbefore':
|
|
55
|
+
return value < filter;
|
|
56
|
+
case 'isnoton':
|
|
57
|
+
return value !== filter;
|
|
58
|
+
default:
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const numericFilter: ColumnFilterFn = ({ filterValue, value }) => {
|
|
64
|
+
const [firstFilterOption, firstFilterValue, secondFilterOption, secondFilterValue] = filterValue;
|
|
65
|
+
if (firstFilterValue == null && !secondFilterValue == null) {
|
|
66
|
+
return true;
|
|
67
|
+
} else if (
|
|
68
|
+
(firstFilterOption == null || firstFilterValue == null) &&
|
|
69
|
+
secondFilterOption != null &&
|
|
70
|
+
secondFilterValue != null
|
|
71
|
+
) {
|
|
72
|
+
return numberFilter(secondFilterOption, secondFilterValue, value);
|
|
73
|
+
} else if (
|
|
74
|
+
(secondFilterOption == null || secondFilterValue == null) &&
|
|
75
|
+
firstFilterOption != null &&
|
|
76
|
+
firstFilterValue != null
|
|
77
|
+
) {
|
|
78
|
+
return numberFilter(firstFilterOption, firstFilterValue, value);
|
|
79
|
+
}
|
|
80
|
+
return (
|
|
81
|
+
numberFilter(firstFilterOption, firstFilterValue, value) &&
|
|
82
|
+
numberFilter(secondFilterOption, secondFilterValue, value)
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const stringFilter: ColumnFilterFn = ({ filterValue, value }) => {
|
|
87
|
+
const [firstFilterOption, firstFilterValue, secondFilterOption, secondFilterValue] = filterValue;
|
|
88
|
+
if (!firstFilterValue?.length && !secondFilterValue?.length) {
|
|
89
|
+
return true;
|
|
90
|
+
} else if (
|
|
91
|
+
(!firstFilterOption || !firstFilterValue) &&
|
|
92
|
+
secondFilterOption &&
|
|
93
|
+
secondFilterValue?.length
|
|
94
|
+
) {
|
|
95
|
+
return textFilter(secondFilterOption, secondFilterValue, value);
|
|
96
|
+
} else if (
|
|
97
|
+
(!secondFilterOption || !secondFilterValue?.length) &&
|
|
98
|
+
firstFilterOption &&
|
|
99
|
+
firstFilterValue?.length
|
|
100
|
+
) {
|
|
101
|
+
return textFilter(firstFilterOption, firstFilterValue, value);
|
|
102
|
+
}
|
|
103
|
+
return (
|
|
104
|
+
textFilter(firstFilterOption, firstFilterValue, value) &&
|
|
105
|
+
textFilter(secondFilterOption, secondFilterValue, value)
|
|
106
|
+
);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const dateTypeFilter: ColumnFilterFn = ({ filterValue, value }) => {
|
|
110
|
+
const [firstFilterOption, firstFilterValue, secondFilterOption, secondFilterValue] = filterValue;
|
|
111
|
+
if (!firstFilterValue && !secondFilterValue) {
|
|
112
|
+
return true;
|
|
113
|
+
} else if ((!firstFilterOption || !firstFilterValue) && secondFilterOption && secondFilterValue) {
|
|
114
|
+
return dateFilter(secondFilterOption, secondFilterValue, value);
|
|
115
|
+
} else if ((!secondFilterOption || !secondFilterValue) && firstFilterOption && firstFilterValue) {
|
|
116
|
+
return dateFilter(firstFilterOption, firstFilterValue, value);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return (
|
|
120
|
+
dateFilter(firstFilterOption, firstFilterValue, value) &&
|
|
121
|
+
dateFilter(secondFilterOption, secondFilterValue, value)
|
|
122
|
+
);
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export const columnFilter: ColumnFilterFn = ({ filterValue, value }) => {
|
|
126
|
+
if (typeof value === 'string') {
|
|
127
|
+
return stringFilter({ filterValue, value });
|
|
128
|
+
} else if (typeof value === 'number') {
|
|
129
|
+
return numericFilter({ filterValue, value });
|
|
130
|
+
} else if (typeof value === 'object' && value instanceof Date) {
|
|
131
|
+
return dateTypeFilter({ filterValue, value });
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export const searchFilter: TableFilterFn = ({ filterValue, value }) => {
|
|
137
|
+
if (value.toLowerCase().includes(filterValue.toLowerCase())) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
};
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
export let invalid = false;
|
|
10
10
|
export let feedback = [''];
|
|
11
11
|
export let required = false;
|
|
12
|
+
export let targetIsComplex = false;
|
|
12
13
|
|
|
13
14
|
$: selected = null;
|
|
14
15
|
|
|
@@ -17,12 +18,26 @@
|
|
|
17
18
|
|
|
18
19
|
function updatedSelectedValue(selection) {
|
|
19
20
|
if (selection != null) {
|
|
20
|
-
|
|
21
|
+
if(targetIsComplex)
|
|
22
|
+
{
|
|
23
|
+
selected = selection.id;
|
|
24
|
+
}
|
|
25
|
+
else
|
|
26
|
+
{
|
|
27
|
+
selected = selection
|
|
28
|
+
}
|
|
21
29
|
}
|
|
22
30
|
}
|
|
23
31
|
|
|
24
32
|
function updatedTarget(id) {
|
|
25
|
-
|
|
33
|
+
if(targetIsComplex)
|
|
34
|
+
{
|
|
35
|
+
target = source.find((opt) => opt.id === id);
|
|
36
|
+
}
|
|
37
|
+
else
|
|
38
|
+
{
|
|
39
|
+
target = id;
|
|
40
|
+
}
|
|
26
41
|
}
|
|
27
42
|
</script>
|
|
28
43
|
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
export let invalid: boolean = false;
|
|
10
10
|
export let required: boolean = false;
|
|
11
11
|
export let feedback: string[] = [''];
|
|
12
|
+
export let placeholder: string = "";
|
|
12
13
|
</script>
|
|
13
14
|
|
|
14
15
|
<InputContainer {label} {feedback} {required}>
|
|
@@ -20,5 +21,6 @@
|
|
|
20
21
|
class:input-error={invalid}
|
|
21
22
|
bind:value
|
|
22
23
|
on:input
|
|
24
|
+
{placeholder}
|
|
23
25
|
/>
|
|
24
26
|
</InputContainer>
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
export let invalid: boolean = false;
|
|
10
10
|
export let required: boolean = false;
|
|
11
11
|
export let feedback: string[] = [''];
|
|
12
|
+
export let placeholder: string = "";
|
|
12
13
|
</script>
|
|
13
14
|
|
|
14
15
|
<InputContainer {label} {feedback} {required}>
|
|
@@ -19,5 +20,6 @@
|
|
|
19
20
|
class:input-error={invalid}
|
|
20
21
|
bind:value
|
|
21
22
|
on:input
|
|
23
|
+
{placeholder}
|
|
22
24
|
/>
|
|
23
25
|
</InputContainer>
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
export let invalid: boolean = false;
|
|
10
10
|
export let required: boolean = false;
|
|
11
11
|
export let feedback: string[] = [''];
|
|
12
|
+
export let placeholder: string ="";
|
|
13
|
+
|
|
12
14
|
</script>
|
|
13
15
|
|
|
14
16
|
<InputContainer {label} {feedback} {required}>
|
|
@@ -20,5 +22,6 @@
|
|
|
20
22
|
class:input-error={invalid}
|
|
21
23
|
bind:value
|
|
22
24
|
on:input
|
|
25
|
+
{placeholder}
|
|
23
26
|
/>
|
|
24
27
|
</InputContainer>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
|
|
3
|
+
import Fa from 'svelte-fa';
|
|
4
|
+
|
|
5
|
+
import { faXmark } from '@fortawesome/free-solid-svg-icons';
|
|
6
|
+
|
|
7
|
+
import {fade} from 'svelte/transition'
|
|
8
|
+
|
|
9
|
+
export let title:string = "";
|
|
10
|
+
export let message:string = "";
|
|
11
|
+
export let cssClass:string= "";
|
|
12
|
+
export let deleteBtn:boolean = true;
|
|
13
|
+
|
|
14
|
+
$:show = true;
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
</script>
|
|
18
|
+
{#if show}
|
|
19
|
+
|
|
20
|
+
<aside class="alert {cssClass}" transition:fade|local={{ duration: 100 }}>
|
|
21
|
+
<!-- Icon -->
|
|
22
|
+
<!-- <div>(icon)</div> -->
|
|
23
|
+
<!-- Message -->
|
|
24
|
+
<div class="alert-message">
|
|
25
|
+
|
|
26
|
+
{#if title}
|
|
27
|
+
<h3 class="h3">{title}</h3>
|
|
28
|
+
{/if}
|
|
29
|
+
<p>{message}
|
|
30
|
+
<slot></slot>
|
|
31
|
+
</p>
|
|
32
|
+
</div>
|
|
33
|
+
<!-- Actions -->
|
|
34
|
+
<div class="alert-actions">
|
|
35
|
+
<slot name="actions"/>
|
|
36
|
+
|
|
37
|
+
{#if deleteBtn}
|
|
38
|
+
<button class="btn hover:text-primary-100" on:click={()=>show = false}>
|
|
39
|
+
<Fa icon={faXmark} />
|
|
40
|
+
</button>
|
|
41
|
+
{/if}
|
|
42
|
+
|
|
43
|
+
</div>
|
|
44
|
+
</aside>
|
|
45
|
+
|
|
46
|
+
{/if}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Position } from "$lib/models/Enums";
|
|
3
|
+
|
|
4
|
+
export let textCss = "text-secundary-500"
|
|
5
|
+
export let label = "";
|
|
6
|
+
export let position:Position = Position.start
|
|
7
|
+
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<div class="flex justify-{position} items-{position} h-full w-full gap-5 pt-2">
|
|
1
11
|
<div
|
|
2
|
-
class="inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]
|
|
12
|
+
class="inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite] {textCss}"
|
|
3
13
|
role="status"
|
|
4
14
|
>
|
|
5
15
|
<span
|
|
@@ -7,3 +17,6 @@
|
|
|
7
17
|
>Loading...</span
|
|
8
18
|
>
|
|
9
19
|
</div>
|
|
20
|
+
<span>{label}</span>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
--theme-rounded-container: 4px;
|
|
9
9
|
--theme-border-base: 1px;
|
|
10
10
|
/* =~= Theme On-X Colors =~= */
|
|
11
|
-
--on-primary:
|
|
12
|
-
--on-secondary:
|
|
11
|
+
--on-primary: 255 255 255;
|
|
12
|
+
--on-secondary: 255 255 255;
|
|
13
13
|
--on-tertiary: 0 0 0;
|
|
14
|
-
--on-success:
|
|
14
|
+
--on-success: 255 255 255;
|
|
15
15
|
--on-warning: 255 255 255;
|
|
16
16
|
--on-error: 255 255 255;
|
|
17
17
|
--on-surface: 0 0 0;
|
package/src/lib/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import FileUploader from './components/file/FileUploader.svelte';
|
|
|
9
9
|
//page
|
|
10
10
|
import Spinner from './components/spinner/Spinner.svelte';
|
|
11
11
|
import Page from './components/page/Page.svelte';
|
|
12
|
+
import Alert from './components/page/Alert.svelte';
|
|
12
13
|
|
|
13
14
|
// input
|
|
14
15
|
import Checkbox from './components/form/Checkbox.svelte';
|
|
@@ -43,7 +44,7 @@ export {
|
|
|
43
44
|
export { FileInfo, FileIcon, FileUploader };
|
|
44
45
|
|
|
45
46
|
//others
|
|
46
|
-
export { ListView, TableView, Spinner, Page };
|
|
47
|
+
export { ListView, TableView, Spinner, Page, Alert };
|
|
47
48
|
|
|
48
49
|
//Api
|
|
49
50
|
export { Api } from './services/Api.js';
|
|
@@ -54,8 +55,13 @@ export type {
|
|
|
54
55
|
user,
|
|
55
56
|
Input,
|
|
56
57
|
FileUploaderModel,
|
|
57
|
-
Link
|
|
58
|
-
|
|
58
|
+
Link,
|
|
59
|
+
ListItem,
|
|
60
|
+
KvP
|
|
61
|
+
} from './models/Models.js';
|
|
62
|
+
|
|
63
|
+
//enum
|
|
64
|
+
export { Position } from './models/Enums';
|
|
59
65
|
|
|
60
66
|
// Table
|
|
61
67
|
export { Table, TableFilter, columnFilter, searchFilter };
|