@bexis2/bexis2-core-ui 0.2.22 → 0.2.23
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 +14 -6
- package/dist/TableView.svelte +1 -1
- package/dist/components/CodeEditor/CodeEditor.svelte +87 -0
- package/dist/components/CodeEditor/CodeEditor.svelte.d.ts +28 -0
- package/dist/components/ListView.svelte +5 -5
- package/dist/components/Table/Table.svelte +14 -10
- package/dist/components/Table/TablePagination.svelte +38 -38
- package/dist/components/file/FileIcon.svelte +45 -45
- package/dist/components/file/FileInfo.svelte +13 -13
- package/dist/components/file/FileUploader.svelte +1 -1
- package/dist/components/form/Checkbox.svelte +13 -13
- package/dist/components/form/CheckboxKvPList.svelte +16 -16
- package/dist/components/form/CheckboxList.svelte +10 -10
- package/dist/components/form/DateInput.svelte +13 -13
- package/dist/components/form/DropdownKvP.svelte +54 -54
- package/dist/components/form/InputContainer.svelte +20 -20
- package/dist/components/form/MultiSelect.svelte +178 -178
- package/dist/components/form/NumberInput.svelte +14 -14
- package/dist/components/form/TextArea.svelte +13 -13
- package/dist/components/form/TextInput.svelte +14 -14
- package/dist/components/page/Alert.svelte +28 -28
- package/dist/components/page/BackToTop.svelte +30 -30
- package/dist/components/page/Docs.svelte +22 -22
- package/dist/components/page/ErrorMessage.svelte +8 -8
- package/dist/components/page/Footer.svelte +5 -5
- package/dist/components/page/Header.svelte +5 -5
- package/dist/components/page/HelpPopUp.svelte +30 -30
- package/dist/components/page/PageCaller.js +19 -19
- package/dist/components/page/Spinner.svelte +14 -14
- package/dist/components/page/breadcrumb/Breadcrumb.svelte +19 -19
- package/dist/components/page/menu/MenuDataCaller.js +10 -10
- package/dist/css/core.ui.postcss +17 -17
- package/dist/css/themes/theme-bexis2.css +96 -96
- package/dist/css/themes/theme-crimson.css +101 -101
- package/dist/css/themes/theme-gold-nouveau.css +140 -140
- package/dist/css/themes/theme-hamlindigo.css +112 -112
- package/dist/css/themes/theme-modern.css +127 -127
- package/dist/css/themes/theme-rocket.css +119 -119
- package/dist/css/themes/theme-sahara.css +128 -128
- package/dist/css/themes/theme-seafoam.css +122 -122
- package/dist/css/themes/theme-seasonal.css +115 -115
- package/dist/css/themes/theme-skeleton.css +118 -118
- package/dist/css/themes/theme-vintage.css +125 -125
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/dist/models/Models.d.ts +2 -0
- package/dist/services/BaseCaller.js +16 -16
- package/package.json +7 -1
- package/src/lib/TableView.svelte +1 -1
- package/src/lib/components/CodeEditor/CodeEditor.svelte +94 -0
- package/src/lib/components/{file → File}/FileIcon.svelte +45 -45
- package/src/lib/components/{file → File}/FileInfo.svelte +13 -13
- package/src/lib/components/{file → File}/FileUploader.svelte +1 -1
- package/src/lib/components/ListView.svelte +11 -11
- package/src/lib/components/Table/Table.svelte +14 -10
- package/src/lib/components/Table/TablePagination.svelte +61 -61
- package/src/lib/components/Table/filter.ts +141 -141
- package/src/lib/components/form/Checkbox.svelte +24 -24
- package/src/lib/components/form/CheckboxKvPList.svelte +29 -29
- package/src/lib/components/form/CheckboxList.svelte +21 -21
- package/src/lib/components/form/DateInput.svelte +25 -25
- package/src/lib/components/form/DropdownKvP.svelte +54 -54
- package/src/lib/components/form/InputContainer.svelte +36 -36
- package/src/lib/components/form/MultiSelect.svelte +178 -178
- package/src/lib/components/form/NumberInput.svelte +28 -28
- package/src/lib/components/form/TextArea.svelte +26 -26
- package/src/lib/components/form/TextInput.svelte +26 -26
- package/src/lib/components/page/Alert.svelte +41 -41
- package/src/lib/components/page/BackToTop.svelte +30 -30
- package/src/lib/components/page/Docs.svelte +46 -46
- package/src/lib/components/page/ErrorMessage.svelte +10 -10
- package/src/lib/components/page/Footer.svelte +18 -18
- package/src/lib/components/page/Header.svelte +18 -18
- package/src/lib/components/page/HelpPopUp.svelte +72 -72
- package/src/lib/components/page/PageCaller.js +19 -19
- package/src/lib/components/page/Spinner.svelte +20 -20
- package/src/lib/components/page/breadcrumb/Breadcrumb.svelte +39 -39
- package/src/lib/components/page/menu/MenuDataCaller.js +10 -10
- package/src/lib/css/core.ui.postcss +17 -17
- package/src/lib/css/themes/theme-bexis2.css +96 -96
- package/src/lib/css/themes/theme-crimson.css +101 -101
- package/src/lib/css/themes/theme-gold-nouveau.css +140 -140
- package/src/lib/css/themes/theme-hamlindigo.css +112 -112
- package/src/lib/css/themes/theme-modern.css +127 -127
- package/src/lib/css/themes/theme-rocket.css +119 -119
- package/src/lib/css/themes/theme-sahara.css +128 -128
- package/src/lib/css/themes/theme-seafoam.css +122 -122
- package/src/lib/css/themes/theme-seasonal.css +115 -115
- package/src/lib/css/themes/theme-skeleton.css +118 -118
- package/src/lib/css/themes/theme-vintage.css +125 -125
- package/src/lib/index.ts +7 -0
- package/src/lib/models/Models.ts +2 -0
- package/src/lib/models/Page.ts +40 -40
- package/src/lib/services/Api.ts +55 -55
- package/src/lib/services/BaseCaller.js +16 -16
- package/src/lib/stores/apiStores.ts +31 -31
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { createEventDispatcher } from 'svelte';
|
|
3
|
+
|
|
4
|
+
import CodeMirror from 'svelte-codemirror-editor';
|
|
5
|
+
import Fa from 'svelte-fa/src/fa.svelte';
|
|
6
|
+
import { html } from '@codemirror/lang-html';
|
|
7
|
+
import { javascript } from '@codemirror/lang-javascript';
|
|
8
|
+
import { json } from '@codemirror/lang-json';
|
|
9
|
+
import { oneDark } from '@codemirror/theme-one-dark';
|
|
10
|
+
import { Modal, modalStore } from '@skeletonlabs/skeleton';
|
|
11
|
+
import { faMoon, faSave, faSun } from '@fortawesome/free-regular-svg-icons';
|
|
12
|
+
import { faArrowRotateLeft, faXmark } from '@fortawesome/free-solid-svg-icons';
|
|
13
|
+
import type { ThemeSpec } from 'svelte-codemirror-editor';
|
|
14
|
+
import type { ModalSettings } from '@skeletonlabs/skeleton';
|
|
15
|
+
|
|
16
|
+
export let title = '';
|
|
17
|
+
export let initialValue = '';
|
|
18
|
+
export let value = initialValue;
|
|
19
|
+
export let language = 'html';
|
|
20
|
+
export let dark = true;
|
|
21
|
+
export let toggle = true;
|
|
22
|
+
export let styles: ThemeSpec = {
|
|
23
|
+
'&': {
|
|
24
|
+
borderRadius: '0.5rem',
|
|
25
|
+
width: '100%'
|
|
26
|
+
},
|
|
27
|
+
'.cm-scroller': {
|
|
28
|
+
borderRadius: '0.5rem'
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const dispatch = createEventDispatcher();
|
|
33
|
+
|
|
34
|
+
const modal: ModalSettings = {
|
|
35
|
+
type: 'confirm',
|
|
36
|
+
title: 'Reset',
|
|
37
|
+
body: 'Unsaved changes will be lost. Are you sure you want to continue?',
|
|
38
|
+
response: (r: boolean) => (r ? (value = initialValue) : null)
|
|
39
|
+
};
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<div class="items-center justify-center">
|
|
43
|
+
<h1 class="h1 font-semibold text-primary-500 mb-3">{title}</h1>
|
|
44
|
+
<slot />
|
|
45
|
+
<div class="grid gap-1 w-full h-full mt-5">
|
|
46
|
+
<div class="rounded-lg shadow-lg w-full">
|
|
47
|
+
<CodeMirror
|
|
48
|
+
bind:value
|
|
49
|
+
lang={language === 'html'
|
|
50
|
+
? html({ selfClosingTags: true })
|
|
51
|
+
: language === 'js'
|
|
52
|
+
? javascript()
|
|
53
|
+
: json()}
|
|
54
|
+
theme={dark ? oneDark : null}
|
|
55
|
+
class="flex w-full"
|
|
56
|
+
{styles}
|
|
57
|
+
/>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<div class="flex justify-between gap-2 items-center mt-3">
|
|
62
|
+
<div class="flex gap-2">
|
|
63
|
+
<button
|
|
64
|
+
class="btn variant-filled-warning"
|
|
65
|
+
on:click|preventDefault={() => modalStore.trigger(modal)}
|
|
66
|
+
><Fa icon={faArrowRotateLeft} /></button
|
|
67
|
+
>{#if toggle}
|
|
68
|
+
<button
|
|
69
|
+
class="btn border"
|
|
70
|
+
class:bg-slate-700={dark}
|
|
71
|
+
class:bg-white={!dark}
|
|
72
|
+
on:click|preventDefault={() => (dark = !dark)}
|
|
73
|
+
>
|
|
74
|
+
{#if dark}
|
|
75
|
+
<Fa icon={faMoon} color="white" />
|
|
76
|
+
{:else}
|
|
77
|
+
<Fa icon={faSun} color="black" />
|
|
78
|
+
{/if}
|
|
79
|
+
</button>
|
|
80
|
+
{/if}
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<div class="flex gap-2">
|
|
84
|
+
<button class="btn variant-filled-warning" on:click={() => dispatch('cancel')}
|
|
85
|
+
><Fa icon={faXmark} /></button
|
|
86
|
+
>
|
|
87
|
+
<button class="btn variant-filled-primary" on:click={() => dispatch('save')}
|
|
88
|
+
><Fa icon={faSave} /></button
|
|
89
|
+
>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<Modal />
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import Fa from 'svelte-fa';
|
|
3
|
-
import { faFileAudio } from '@fortawesome/free-regular-svg-icons';
|
|
4
|
-
import { faFileVideo } from '@fortawesome/free-regular-svg-icons';
|
|
5
|
-
import { faFileWord } from '@fortawesome/free-regular-svg-icons';
|
|
6
|
-
import { faFilePdf } from '@fortawesome/free-regular-svg-icons';
|
|
7
|
-
import { faFileExcel } from '@fortawesome/free-regular-svg-icons';
|
|
8
|
-
import { faFileAlt } from '@fortawesome/free-regular-svg-icons';
|
|
9
|
-
import { faFileImage } from '@fortawesome/free-regular-svg-icons';
|
|
10
|
-
import { faFileArchive } from '@fortawesome/free-regular-svg-icons';
|
|
11
|
-
|
|
12
|
-
export let type = '';
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
{#if type.includes('excel') || type.includes('spreadsheetml')}
|
|
16
|
-
<Fa icon={faFileExcel} />
|
|
17
|
-
{/if}
|
|
18
|
-
|
|
19
|
-
{#if type.includes('text')}
|
|
20
|
-
<Fa icon={faFileAlt} />
|
|
21
|
-
{/if}
|
|
22
|
-
|
|
23
|
-
{#if type.includes('image')}
|
|
24
|
-
<Fa icon={faFileImage} />
|
|
25
|
-
{/if}
|
|
26
|
-
|
|
27
|
-
{#if type.includes('audio')}
|
|
28
|
-
<Fa icon={faFileAudio} />
|
|
29
|
-
{/if}
|
|
30
|
-
|
|
31
|
-
{#if type.includes('video')}
|
|
32
|
-
<Fa icon={faFileVideo} />
|
|
33
|
-
{/if}
|
|
34
|
-
|
|
35
|
-
{#if type.includes('word')}
|
|
36
|
-
<Fa icon={faFileWord} />
|
|
37
|
-
{/if}
|
|
38
|
-
|
|
39
|
-
{#if type.includes('pdf')}
|
|
40
|
-
<Fa icon={faFilePdf} />
|
|
41
|
-
{/if}
|
|
42
|
-
|
|
43
|
-
{#if type.includes('zip')}
|
|
44
|
-
<Fa icon={faFileArchive} />
|
|
45
|
-
{/if}
|
|
1
|
+
<script>
|
|
2
|
+
import Fa from 'svelte-fa';
|
|
3
|
+
import { faFileAudio } from '@fortawesome/free-regular-svg-icons';
|
|
4
|
+
import { faFileVideo } from '@fortawesome/free-regular-svg-icons';
|
|
5
|
+
import { faFileWord } from '@fortawesome/free-regular-svg-icons';
|
|
6
|
+
import { faFilePdf } from '@fortawesome/free-regular-svg-icons';
|
|
7
|
+
import { faFileExcel } from '@fortawesome/free-regular-svg-icons';
|
|
8
|
+
import { faFileAlt } from '@fortawesome/free-regular-svg-icons';
|
|
9
|
+
import { faFileImage } from '@fortawesome/free-regular-svg-icons';
|
|
10
|
+
import { faFileArchive } from '@fortawesome/free-regular-svg-icons';
|
|
11
|
+
|
|
12
|
+
export let type = '';
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
{#if type.includes('excel') || type.includes('spreadsheetml')}
|
|
16
|
+
<Fa icon={faFileExcel} />
|
|
17
|
+
{/if}
|
|
18
|
+
|
|
19
|
+
{#if type.includes('text')}
|
|
20
|
+
<Fa icon={faFileAlt} />
|
|
21
|
+
{/if}
|
|
22
|
+
|
|
23
|
+
{#if type.includes('image')}
|
|
24
|
+
<Fa icon={faFileImage} />
|
|
25
|
+
{/if}
|
|
26
|
+
|
|
27
|
+
{#if type.includes('audio')}
|
|
28
|
+
<Fa icon={faFileAudio} />
|
|
29
|
+
{/if}
|
|
30
|
+
|
|
31
|
+
{#if type.includes('video')}
|
|
32
|
+
<Fa icon={faFileVideo} />
|
|
33
|
+
{/if}
|
|
34
|
+
|
|
35
|
+
{#if type.includes('word')}
|
|
36
|
+
<Fa icon={faFileWord} />
|
|
37
|
+
{/if}
|
|
38
|
+
|
|
39
|
+
{#if type.includes('pdf')}
|
|
40
|
+
<Fa icon={faFilePdf} />
|
|
41
|
+
{/if}
|
|
42
|
+
|
|
43
|
+
{#if type.includes('zip')}
|
|
44
|
+
<Fa icon={faFileArchive} />
|
|
45
|
+
{/if}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import FileIcon from './FileIcon.svelte';
|
|
3
|
-
|
|
4
|
-
export let name = '';
|
|
5
|
-
export let type = '';
|
|
6
|
-
// export let description;
|
|
7
|
-
export let size = '';
|
|
8
|
-
</script>
|
|
9
|
-
|
|
10
|
-
<div style="font-size:{size}">
|
|
11
|
-
<FileIcon {type} />
|
|
12
|
-
{name}
|
|
13
|
-
</div>
|
|
1
|
+
<script>
|
|
2
|
+
import FileIcon from './FileIcon.svelte';
|
|
3
|
+
|
|
4
|
+
export let name = '';
|
|
5
|
+
export let type = '';
|
|
6
|
+
// export let description;
|
|
7
|
+
export let size = '';
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<div style="font-size:{size}">
|
|
11
|
+
<FileIcon {type} />
|
|
12
|
+
{name}
|
|
13
|
+
</div>
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
<b style="font-size:xx-large"><Fa icon={faFileUpload} /></b>
|
|
169
169
|
<span
|
|
170
170
|
><b>Drag 'n' drop some files here, or click to select files</b>
|
|
171
|
-
<b>max file : {model.maxSize} mb</b></span
|
|
171
|
+
<b>(max file size: {model.maxSize} mb)</b></span
|
|
172
172
|
>
|
|
173
173
|
<p>
|
|
174
174
|
{#if model.accept}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
type x = {
|
|
3
|
-
name: string;
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
let result: x = { name: 'david' };
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
<h1>MyList</h1>
|
|
10
|
-
{result.name}
|
|
11
|
-
<b>from bexis-lib</b>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
type x = {
|
|
3
|
+
name: string;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
let result: x = { name: 'david' };
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<h1>MyList</h1>
|
|
10
|
+
{result.name}
|
|
11
|
+
<b>from bexis-lib</b>
|
|
@@ -27,9 +27,10 @@
|
|
|
27
27
|
height = null,
|
|
28
28
|
optionsComponent,
|
|
29
29
|
defaultPageSize = 10,
|
|
30
|
-
|
|
30
|
+
toggle = false,
|
|
31
|
+
pageSizes = [5, 10, 15, 20],
|
|
32
|
+
fitToScreen = true
|
|
31
33
|
} = config;
|
|
32
|
-
let fitToScreen = true;
|
|
33
34
|
|
|
34
35
|
type AccessorType = keyof (typeof $data)[number];
|
|
35
36
|
|
|
@@ -164,7 +165,7 @@
|
|
|
164
165
|
const { filterValue } = pluginStates.tableFilter;
|
|
165
166
|
</script>
|
|
166
167
|
|
|
167
|
-
<div class="grid gap-2 overflow-auto" class:w-
|
|
168
|
+
<div class="grid gap-2 overflow-auto" class:w-fit={!fitToScreen} class:w-full={fitToScreen}>
|
|
168
169
|
<div class="table-container">
|
|
169
170
|
{#if $data.length > 0}
|
|
170
171
|
<input
|
|
@@ -174,13 +175,16 @@
|
|
|
174
175
|
placeholder="Search rows..."
|
|
175
176
|
/>
|
|
176
177
|
{/if}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
178
|
+
|
|
179
|
+
{#if toggle}
|
|
180
|
+
<SlideToggle
|
|
181
|
+
name="slider-label"
|
|
182
|
+
active="bg-primary-500"
|
|
183
|
+
size="sm"
|
|
184
|
+
checked={fitToScreen}
|
|
185
|
+
on:change={() => (fitToScreen = !fitToScreen)}>Fit to screen</SlideToggle
|
|
186
|
+
>
|
|
187
|
+
{/if}
|
|
184
188
|
|
|
185
189
|
<div class="overflow-auto" style="height: {height}px">
|
|
186
190
|
<table {...$tableAttrs} class="table table-compact bg-tertiary-200 overflow-clip">
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import Fa from 'svelte-fa/src/fa.svelte';
|
|
3
|
-
import {
|
|
4
|
-
faAnglesRight,
|
|
5
|
-
faAngleRight,
|
|
6
|
-
faAnglesLeft,
|
|
7
|
-
faAngleLeft
|
|
8
|
-
} from '@fortawesome/free-solid-svg-icons';
|
|
9
|
-
|
|
10
|
-
export let pageConfig;
|
|
11
|
-
export let pageSizes;
|
|
12
|
-
|
|
13
|
-
const { pageIndex, pageCount, pageSize, hasNextPage, hasPreviousPage } = pageConfig;
|
|
14
|
-
|
|
15
|
-
const goToFirstPage = () => ($pageIndex = 0);
|
|
16
|
-
const goToLastPage = () => ($pageIndex = $pageCount - 1);
|
|
17
|
-
const goToNextPage = () => ($pageIndex += 1);
|
|
18
|
-
const goToPreviousPage = () => ($pageIndex -= 1);
|
|
19
|
-
|
|
20
|
-
$: goToFirstPageDisabled = !$pageIndex;
|
|
21
|
-
$: goToLastPageDisabled = $pageIndex == $pageCount - 1;
|
|
22
|
-
$: goToNextPageDisabled = !$hasNextPage;
|
|
23
|
-
$: goToPreviousPageDisabled = !$hasPreviousPage;
|
|
24
|
-
</script>
|
|
25
|
-
|
|
26
|
-
<div class="flex justify-center gap-1">
|
|
27
|
-
<button
|
|
28
|
-
class="btn btn-sm variant-filled-primary"
|
|
29
|
-
on:click|preventDefault={goToFirstPage}
|
|
30
|
-
disabled={goToFirstPageDisabled}
|
|
31
|
-
>
|
|
32
|
-
<Fa icon={faAnglesLeft} /></button
|
|
33
|
-
>
|
|
34
|
-
<button
|
|
35
|
-
class="btn btn-sm variant-filled-primary"
|
|
36
|
-
on:click|preventDefault={goToPreviousPage}
|
|
37
|
-
disabled={goToPreviousPageDisabled}><Fa icon={faAngleLeft} /></button
|
|
38
|
-
>
|
|
39
|
-
|
|
40
|
-
<select
|
|
41
|
-
name="pageSize"
|
|
42
|
-
id="pageSize"
|
|
43
|
-
class="select variant-filled-primary w-min font-bold"
|
|
44
|
-
bind:value={$pageSize}
|
|
45
|
-
>
|
|
46
|
-
{#each pageSizes as size}
|
|
47
|
-
<option value={size}>{size}</option>
|
|
48
|
-
{/each}
|
|
49
|
-
</select>
|
|
50
|
-
|
|
51
|
-
<button
|
|
52
|
-
class="btn btn-sm variant-filled-primary"
|
|
53
|
-
on:click|preventDefault={goToNextPage}
|
|
54
|
-
disabled={goToNextPageDisabled}><Fa icon={faAngleRight} /></button
|
|
55
|
-
>
|
|
56
|
-
<button
|
|
57
|
-
class="btn btn-sm variant-filled-primary"
|
|
58
|
-
on:click|preventDefault={goToLastPage}
|
|
59
|
-
disabled={goToLastPageDisabled}><Fa icon={faAnglesRight} /></button
|
|
60
|
-
>
|
|
61
|
-
</div>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Fa from 'svelte-fa/src/fa.svelte';
|
|
3
|
+
import {
|
|
4
|
+
faAnglesRight,
|
|
5
|
+
faAngleRight,
|
|
6
|
+
faAnglesLeft,
|
|
7
|
+
faAngleLeft
|
|
8
|
+
} from '@fortawesome/free-solid-svg-icons';
|
|
9
|
+
|
|
10
|
+
export let pageConfig;
|
|
11
|
+
export let pageSizes;
|
|
12
|
+
|
|
13
|
+
const { pageIndex, pageCount, pageSize, hasNextPage, hasPreviousPage } = pageConfig;
|
|
14
|
+
|
|
15
|
+
const goToFirstPage = () => ($pageIndex = 0);
|
|
16
|
+
const goToLastPage = () => ($pageIndex = $pageCount - 1);
|
|
17
|
+
const goToNextPage = () => ($pageIndex += 1);
|
|
18
|
+
const goToPreviousPage = () => ($pageIndex -= 1);
|
|
19
|
+
|
|
20
|
+
$: goToFirstPageDisabled = !$pageIndex;
|
|
21
|
+
$: goToLastPageDisabled = $pageIndex == $pageCount - 1;
|
|
22
|
+
$: goToNextPageDisabled = !$hasNextPage;
|
|
23
|
+
$: goToPreviousPageDisabled = !$hasPreviousPage;
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<div class="flex justify-center gap-1">
|
|
27
|
+
<button
|
|
28
|
+
class="btn btn-sm variant-filled-primary"
|
|
29
|
+
on:click|preventDefault={goToFirstPage}
|
|
30
|
+
disabled={goToFirstPageDisabled}
|
|
31
|
+
>
|
|
32
|
+
<Fa icon={faAnglesLeft} /></button
|
|
33
|
+
>
|
|
34
|
+
<button
|
|
35
|
+
class="btn btn-sm variant-filled-primary"
|
|
36
|
+
on:click|preventDefault={goToPreviousPage}
|
|
37
|
+
disabled={goToPreviousPageDisabled}><Fa icon={faAngleLeft} /></button
|
|
38
|
+
>
|
|
39
|
+
|
|
40
|
+
<select
|
|
41
|
+
name="pageSize"
|
|
42
|
+
id="pageSize"
|
|
43
|
+
class="select variant-filled-primary w-min font-bold"
|
|
44
|
+
bind:value={$pageSize}
|
|
45
|
+
>
|
|
46
|
+
{#each pageSizes as size}
|
|
47
|
+
<option value={size}>{size}</option>
|
|
48
|
+
{/each}
|
|
49
|
+
</select>
|
|
50
|
+
|
|
51
|
+
<button
|
|
52
|
+
class="btn btn-sm variant-filled-primary"
|
|
53
|
+
on:click|preventDefault={goToNextPage}
|
|
54
|
+
disabled={goToNextPageDisabled}><Fa icon={faAngleRight} /></button
|
|
55
|
+
>
|
|
56
|
+
<button
|
|
57
|
+
class="btn btn-sm variant-filled-primary"
|
|
58
|
+
on:click|preventDefault={goToLastPage}
|
|
59
|
+
disabled={goToLastPageDisabled}><Fa icon={faAnglesRight} /></button
|
|
60
|
+
>
|
|
61
|
+
</div>
|