@lavalogic/scoria 0.40.13 → 0.40.15
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 +58 -58
- package/dist/Components/AccordionGroup.svelte +35 -46
- package/dist/Components/AccordionGroupButton.svelte +68 -76
- package/dist/Components/Action.svelte +103 -135
- package/dist/Components/AlertModal.svelte +171 -190
- package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +614 -697
- package/dist/Components/Base/BaseModal.svelte +90 -116
- package/dist/Components/Base/ContextWrapper.svelte +67 -72
- package/dist/Components/Base/Pagination.svelte +173 -196
- package/dist/Components/Base/Snippets.svelte +34 -36
- package/dist/Components/BigRadioSet.svelte +36 -38
- package/dist/Components/Bubble.svelte +78 -101
- package/dist/Components/Button.svelte +175 -208
- package/dist/Components/Checkbox.svelte +75 -86
- package/dist/Components/CollapsibleCard.svelte +72 -87
- package/dist/Components/CollapsibleMenuGroup.svelte +53 -57
- package/dist/Components/ConditionBuilder/ConditionBuilder.svelte +39 -64
- package/dist/Components/Contexts/ContextMenu.svelte +141 -156
- package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
- package/dist/Components/Contexts/ContextMenuOption.svelte +53 -60
- package/dist/Components/Contexts/Toast.svelte +81 -86
- package/dist/Components/Contexts/ToastContainer.svelte +58 -62
- package/dist/Components/Contexts/Tooltip.svelte +36 -37
- package/dist/Components/DataMatrixIcon.svelte +95 -108
- package/dist/Components/DateInput.svelte +118 -146
- package/dist/Components/DatePicker.svelte +255 -294
- package/dist/Components/DesktopModal.svelte +70 -90
- package/dist/Components/Dial.svelte +167 -197
- package/dist/Components/DimensionInput.svelte +124 -169
- package/dist/Components/DragMenu/DragMenuHolder.svelte +98 -114
- package/dist/Components/DragMenu/DraggableCard.svelte +64 -76
- package/dist/Components/FileCard.svelte +21 -24
- package/dist/Components/FileUpload.svelte +190 -225
- package/dist/Components/GridInput.svelte +159 -196
- package/dist/Components/GridInputSet.svelte +24 -29
- package/dist/Components/HorizontalTabGroup.svelte +73 -89
- package/dist/Components/HorizontalTabGroupButton.svelte +40 -44
- package/dist/Components/Icon.svelte +99 -128
- package/dist/Components/Icons.js +357 -357
- package/dist/Components/InfoAlert.svelte +35 -38
- package/dist/Components/LoadingAnimation.svelte +691 -755
- package/dist/Components/LoadingModal.svelte +36 -44
- package/dist/Components/LoadingOverlay.svelte +22 -26
- package/dist/Components/Modal.svelte +204 -254
- package/dist/Components/MultiSelect.svelte +186 -216
- package/dist/Components/Nav/Nav.svelte +94 -110
- package/dist/Components/Nav/NavServiceMenuList.svelte +57 -61
- package/dist/Components/Nav/NavTab.svelte +58 -62
- package/dist/Components/Nav/ServiceMenuItem.svelte +103 -111
- package/dist/Components/Nav/ServicesNav.svelte +72 -79
- package/dist/Components/NumberInput.svelte +121 -155
- package/dist/Components/OptionCards.svelte +62 -73
- package/dist/Components/PageHeading.svelte +23 -25
- package/dist/Components/PasswordInput.svelte +69 -88
- package/dist/Components/PopoverButton.svelte +151 -0
- package/dist/Components/PopoverButton.svelte.d.ts +9 -0
- package/dist/Components/PopoverButtonProps.d.ts +21 -0
- package/dist/Components/PopoverButtonProps.js +1 -0
- package/dist/Components/Portal.svelte +29 -35
- package/dist/Components/ProgressBubble.svelte +91 -106
- package/dist/Components/QuerySelect.svelte +260 -346
- package/dist/Components/SidebarPanel.svelte +34 -36
- package/dist/Components/SingleSelect.svelte +196 -244
- package/dist/Components/StepButton.svelte +65 -70
- package/dist/Components/StepForm.svelte +115 -135
- package/dist/Components/Switch.svelte +57 -69
- package/dist/Components/Table/ARCHITECTURE.md +298 -298
- package/dist/Components/Table/Body/QuickSearchCell.svelte +578 -655
- package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +42 -51
- package/dist/Components/Table/Body/Rows/ColumnList.svelte +42 -58
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +403 -442
- package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +51 -78
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +165 -184
- package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +110 -123
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +134 -160
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +190 -231
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +82 -104
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +52 -87
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +122 -150
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +132 -159
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +190 -236
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +173 -211
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +204 -244
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +140 -177
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +188 -217
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +173 -193
- package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +166 -187
- package/dist/Components/Table/Body/Rows/TableRow.svelte +245 -288
- package/dist/Components/Table/Body/TableBody.svelte +141 -154
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte +35 -41
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +24 -30
- package/dist/Components/Table/Headers/TableHead.svelte +348 -402
- package/dist/Components/Table/Misc/ColumnPanel.svelte +37 -39
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte +35 -39
- package/dist/Components/Table/Misc/FilterInput.svelte +556 -619
- package/dist/Components/Table/Misc/FilterPanel.svelte +170 -183
- package/dist/Components/Table/Misc/FilterPanelModal.svelte +25 -31
- package/dist/Components/Table/Misc/ShareViewModal.svelte +252 -281
- package/dist/Components/Table/Misc/SidePanel.svelte +32 -35
- package/dist/Components/Table/Misc/TableConfigurationModal.svelte +574 -629
- package/dist/Components/Table/Misc/TableFooter.svelte +326 -332
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte +134 -140
- package/dist/Components/Table/Misc/TableSidebar.svelte +183 -198
- package/dist/Components/Table/Misc/TableViewDropdown.svelte +83 -103
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +83 -100
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +88 -107
- package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +163 -190
- package/dist/Components/Table/NestedTable.svelte +102 -128
- package/dist/Components/Table/Table.svelte +531 -663
- package/dist/Components/Test/TestContextConsumer.svelte +11 -13
- package/dist/Components/TextArea.svelte +95 -130
- package/dist/Components/TextInput.svelte +125 -176
- package/dist/Components/ThreeStateRadio.svelte +111 -130
- package/dist/Components/Touch/BoolCard.svelte +33 -45
- package/dist/Components/Touch/DateModal.svelte +164 -204
- package/dist/Components/Touch/EditCard.svelte +48 -59
- package/dist/Components/Touch/InfoCard.svelte +28 -31
- package/dist/Components/Touch/InfoTextCard.svelte +26 -28
- package/dist/Components/Touch/ModalExplanation.svelte +15 -17
- package/dist/Components/Touch/NumberKeyboard.svelte +181 -218
- package/dist/Components/Touch/NumberModal.svelte +59 -79
- package/dist/Components/Touch/PlusMinusCard.svelte +43 -46
- package/dist/Components/Touch/SelectModal.svelte +111 -126
- package/dist/Components/Touch/SummaryCard.svelte +80 -93
- package/dist/Components/Touch/TextAreaModal.svelte +72 -94
- package/dist/Components/Touch/TextModal.svelte +77 -105
- package/dist/Components/Touch/TouchCard.svelte +31 -33
- package/dist/Components/Touch/TouchModal.svelte +214 -270
- package/dist/Components/Touch/UtilityButton.svelte +88 -109
- package/dist/Components/VerticalTabGroup.svelte +60 -78
- package/dist/Components/VerticalTabGroupButton.svelte +54 -58
- package/dist/Helpers/Datamatrix.d.ts +19 -19
- package/dist/Helpers/Datamatrix.js +291 -291
- package/dist/Types/Examples/ExampleModal.svelte +31 -35
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/scss/_basics.scss +12 -12
- package/dist/scss/_colours.scss +134 -134
- package/dist/scss/_mixins.scss +3392 -3392
- package/dist/scss/_motion.scss +57 -57
- package/dist/scss/_sizing.scss +85 -85
- package/dist/scss/_transitions.scss +8 -8
- package/package.json +1 -1
|
@@ -1,200 +1,177 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<!--
|
|
4
|
-
@component
|
|
5
|
-
Generic local-collection paginator. Renders a window of items via a
|
|
6
|
-
`snippet` plus a control bar with page-number buttons, a jump-to-page
|
|
7
|
-
input, and previous/next buttons. The component is generic over
|
|
8
|
-
`T extends object` with a `key: keyof T` used as the
|
|
9
|
-
`{#each}` key inside the rendered page.
|
|
10
|
-
|
|
11
|
-
### Usage
|
|
12
|
-
|
|
13
|
-
```svelte
|
|
14
|
-
<Pagination snippet={itemSnippet} pageSize={20} items={dataWrapper.value} key="id" />
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
The `pageButtons` window (up to five numbered buttons) is recomputed
|
|
18
|
-
via `$derived`, not via an `$effect`, so the page bar diffs in a
|
|
19
|
-
single reactive pass and the keyed `{#each pageButtons as page ...}`
|
|
20
|
-
preserves button identity across page changes.
|
|
21
|
-
-->
|
|
22
|
-
<script
|
|
23
|
-
lang="ts"
|
|
24
|
-
generics="T extends object"
|
|
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
|
-
const lastPage = $derived(Math.ceil(items.length / pageSize));
|
|
55
|
-
const lastPageIndex = $derived(lastPage - 1);
|
|
56
|
-
|
|
57
|
-
// Debounced jump-to-page handler. Reads the raw event because the
|
|
58
|
-
// debounce drives state, not the input value directly; binding to
|
|
59
|
-
// `pageValue` would defeat the debounce.
|
|
60
|
-
let debounceTimeout = -1;
|
|
61
|
-
function onNumberInput(e: Event) {
|
|
62
|
-
const value = (e.target as HTMLInputElement).value;
|
|
63
|
-
const page = Number(value);
|
|
64
|
-
|
|
65
|
-
clearTimeout(debounceTimeout);
|
|
66
|
-
if (!isNaN(page)) {
|
|
67
|
-
debounceTimeout = setTimeout(() => {
|
|
68
|
-
pageIndex = Math.max(page - 1, 0);
|
|
69
|
-
}, 400) as unknown as number;
|
|
70
|
-
}
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
@component
|
|
5
|
+
Generic local-collection paginator. Renders a window of items via a
|
|
6
|
+
`snippet` plus a control bar with page-number buttons, a jump-to-page
|
|
7
|
+
input, and previous/next buttons. The component is generic over
|
|
8
|
+
`T extends object` with a `key: keyof T` used as the
|
|
9
|
+
`{#each}` key inside the rendered page.
|
|
10
|
+
|
|
11
|
+
### Usage
|
|
12
|
+
|
|
13
|
+
```svelte
|
|
14
|
+
<Pagination snippet={itemSnippet} pageSize={20} items={dataWrapper.value} key="id" />
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The `pageButtons` window (up to five numbered buttons) is recomputed
|
|
18
|
+
via `$derived`, not via an `$effect`, so the page bar diffs in a
|
|
19
|
+
single reactive pass and the keyed `{#each pageButtons as page ...}`
|
|
20
|
+
preserves button identity across page changes.
|
|
21
|
+
-->
|
|
22
|
+
<script
|
|
23
|
+
lang="ts"
|
|
24
|
+
generics="T extends object"
|
|
25
|
+
>import { autoPluralise, generateWeakId } from "../../Helpers/Helpers.svelte.js";
|
|
26
|
+
import { Colour } from "../../scss/colours.js";
|
|
27
|
+
import { Side } from "../../Types/Internal/Side.js";
|
|
28
|
+
import { Size } from "../../Types/Internal/Size.js";
|
|
29
|
+
import { Variant } from "../../Types/Internal/Variant.js";
|
|
30
|
+
import Button from "../Button.svelte";
|
|
31
|
+
import Icon from "../Icon.svelte";
|
|
32
|
+
import NumberInput from "../NumberInput.svelte";
|
|
33
|
+
const { items, key, pageSize = 20, snippet, itemName = "Item", border = false, padding = "1.5rem", gap = "1.5rem", height } = $props();
|
|
34
|
+
const _uuid = generateWeakId();
|
|
35
|
+
let pageIndex = $state(0);
|
|
36
|
+
const pageValue = $derived(pageIndex + 1);
|
|
37
|
+
const startIndex = $derived(pageIndex * pageSize);
|
|
38
|
+
const pageItems = $derived(items.slice(startIndex, startIndex + pageSize));
|
|
39
|
+
const lastPage = $derived(Math.ceil(items.length / pageSize));
|
|
40
|
+
const lastPageIndex = $derived(lastPage - 1);
|
|
41
|
+
// Debounced jump-to-page handler. Reads the raw event because the
|
|
42
|
+
// debounce drives state, not the input value directly; binding to
|
|
43
|
+
// `pageValue` would defeat the debounce.
|
|
44
|
+
let debounceTimeout = -1;
|
|
45
|
+
function onNumberInput(e) {
|
|
46
|
+
const value = e.target.value;
|
|
47
|
+
const page = Number(value);
|
|
48
|
+
clearTimeout(debounceTimeout);
|
|
49
|
+
if (!isNaN(page)) {
|
|
50
|
+
debounceTimeout = setTimeout(() => {
|
|
51
|
+
pageIndex = Math.max(page - 1, 0);
|
|
52
|
+
}, 400);
|
|
71
53
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const count = Math.min(totalPages, windowSize);
|
|
87
|
-
const out = new Array<number>(count);
|
|
88
|
-
for (let i = 0; i < count; i++) {
|
|
89
|
-
out[i] = clampedStart + i;
|
|
90
|
-
}
|
|
91
|
-
return out;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Compute the window of up to five page numbers shown in the
|
|
57
|
+
* control bar. Centred on the current page where possible and
|
|
58
|
+
* clamped against both ends. Pulled into a stand-alone helper so
|
|
59
|
+
* the windowing logic is unit-testable from outside the component.
|
|
60
|
+
*/
|
|
61
|
+
function getPageWindow(currentIndex, totalPages, windowSize) {
|
|
62
|
+
const start = Math.min(totalPages - 2, currentIndex - 1);
|
|
63
|
+
const clampedStart = Math.max(1, Math.min(start, totalPages - (windowSize - 1)));
|
|
64
|
+
const count = Math.min(totalPages, windowSize);
|
|
65
|
+
const out = new Array(count);
|
|
66
|
+
for (let i = 0; i < count; i++) {
|
|
67
|
+
out[i] = clampedStart + i;
|
|
92
68
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
class
|
|
100
|
-
|
|
101
|
-
style:
|
|
102
|
-
style:
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
</div>
|
|
197
|
-
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
const pageButtons = $derived(getPageWindow(pageIndex, lastPage, 5));
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
<div
|
|
75
|
+
class="wrapper"
|
|
76
|
+
class:border
|
|
77
|
+
style:padding
|
|
78
|
+
style:gap
|
|
79
|
+
style:height
|
|
80
|
+
>
|
|
81
|
+
{#each pageItems as item, index (item[key])}
|
|
82
|
+
{@render snippet(item, index)}
|
|
83
|
+
{/each}
|
|
84
|
+
<div class="spread_row bottom_row">
|
|
85
|
+
<div class="block">
|
|
86
|
+
<span>{items.length} {autoPluralise(itemName, items.length)}</span>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<div class="block records-per-page">
|
|
90
|
+
<span>Records per Page: {pageSize}</span>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div class="spacer"></div>
|
|
94
|
+
|
|
95
|
+
<div
|
|
96
|
+
class="scrollable"
|
|
97
|
+
role="navigation"
|
|
98
|
+
aria-label="Pagination"
|
|
99
|
+
>
|
|
100
|
+
<div class="block">
|
|
101
|
+
<Icon
|
|
102
|
+
name="paper"
|
|
103
|
+
colour={Colour['$ui-blue-6']}
|
|
104
|
+
/>
|
|
105
|
+
<span>{lastPage} {autoPluralise('Page', lastPage)}</span>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<div class="block">
|
|
109
|
+
<label for="{_uuid}-jump-to-page"
|
|
110
|
+
><Icon
|
|
111
|
+
name="arrow-move-horizontal"
|
|
112
|
+
colour={Colour['$ui-blue-6']}
|
|
113
|
+
/></label
|
|
114
|
+
>
|
|
115
|
+
|
|
116
|
+
<label for="{_uuid}-jump-to-page">Jump to page:</label>
|
|
117
|
+
|
|
118
|
+
<NumberInput
|
|
119
|
+
id="{_uuid}-jump-to-page"
|
|
120
|
+
value={pageValue}
|
|
121
|
+
oninput={onNumberInput}
|
|
122
|
+
/>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<div class="block nopad page-arrow">
|
|
126
|
+
<Button
|
|
127
|
+
variant={Variant.Toolbar}
|
|
128
|
+
disabled={pageIndex === 0}
|
|
129
|
+
side={Side.Bottom}
|
|
130
|
+
onclick={() => {
|
|
131
|
+
pageIndex = Math.max(pageIndex - 1, 0);
|
|
132
|
+
}}
|
|
133
|
+
size={Size.FillHeight}
|
|
134
|
+
iconLeft={{
|
|
135
|
+
name: 'left-close',
|
|
136
|
+
size: Size.FillHeight,
|
|
137
|
+
}}>Previous Page</Button
|
|
138
|
+
>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
{#each pageButtons as pageNumber (pageNumber)}
|
|
142
|
+
<div class="block nopad">
|
|
143
|
+
<Button
|
|
144
|
+
variant={Variant.Toolbar}
|
|
145
|
+
side={Side.Bottom}
|
|
146
|
+
size={Size.FillHeight}
|
|
147
|
+
toggled={pageIndex + 1 === pageNumber}
|
|
148
|
+
label={`Go to page ${pageNumber.toString()}`}
|
|
149
|
+
onclick={() => {
|
|
150
|
+
pageIndex = pageNumber - 1;
|
|
151
|
+
}}>{pageNumber}</Button
|
|
152
|
+
>
|
|
153
|
+
</div>
|
|
154
|
+
{/each}
|
|
155
|
+
|
|
156
|
+
<div class="block nopad page-arrow">
|
|
157
|
+
<Button
|
|
158
|
+
variant={Variant.Toolbar}
|
|
159
|
+
side={Side.Bottom}
|
|
160
|
+
size={Size.FillHeight}
|
|
161
|
+
onclick={() => {
|
|
162
|
+
pageIndex = Math.min(pageIndex + 1, lastPageIndex);
|
|
163
|
+
}}
|
|
164
|
+
disabled={pageIndex == lastPageIndex}
|
|
165
|
+
iconRight={{
|
|
166
|
+
name: 'right-close',
|
|
167
|
+
size: Size.FillHeight,
|
|
168
|
+
}}>Next Page</Button
|
|
169
|
+
>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
198
175
|
<style>.wrapper {
|
|
199
176
|
display: flex;
|
|
200
177
|
flex: 1;
|
|
@@ -269,4 +246,4 @@ preserves button identity across page changes.
|
|
|
269
246
|
}
|
|
270
247
|
.spread_row .spacer {
|
|
271
248
|
flex-grow: 2;
|
|
272
|
-
}</style>
|
|
249
|
+
}</style>
|
|
@@ -1,36 +1,34 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<!-- @component
|
|
4
|
-
An empty component that only exists to export common snippets
|
|
5
|
-
(`pending` and `failed`) for re-use by `{#await}` blocks and other
|
|
6
|
-
async-status surfaces. The component itself renders nothing.
|
|
7
|
-
-->
|
|
8
|
-
<script
|
|
9
|
-
lang="ts"
|
|
10
|
-
module
|
|
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
|
-
{/if}
|
|
36
|
-
{/snippet}
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<!-- @component
|
|
4
|
+
An empty component that only exists to export common snippets
|
|
5
|
+
(`pending` and `failed`) for re-use by `{#await}` blocks and other
|
|
6
|
+
async-status surfaces. The component itself renders nothing.
|
|
7
|
+
-->
|
|
8
|
+
<script
|
|
9
|
+
lang="ts"
|
|
10
|
+
module
|
|
11
|
+
>import { getErrorMessage, loadingText } from "../../Helpers/Helpers.svelte.js";
|
|
12
|
+
import Button from "../Button.svelte";
|
|
13
|
+
// The local `{#snippet _pending}` / `{#snippet _failed}` declarations
|
|
14
|
+
// must be hoistable references for `export const` to bind to them.
|
|
15
|
+
// Svelte 5 currently requires the snippet name to differ from the
|
|
16
|
+
// exported binding, so we use an underscore prefix on the local
|
|
17
|
+
// declaration and expose the un-prefixed name as the public surface.
|
|
18
|
+
export const pending = _pending;
|
|
19
|
+
export const failed = _failed;
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
{#snippet _pending()}
|
|
23
|
+
{loadingText}
|
|
24
|
+
{/snippet}
|
|
25
|
+
{#snippet _failed(e: unknown, retry?: () => void)}
|
|
26
|
+
Error: {getErrorMessage(e)}
|
|
27
|
+
{#if retry}
|
|
28
|
+
<Button
|
|
29
|
+
onclick={() => {
|
|
30
|
+
retry();
|
|
31
|
+
}}>Retry</Button
|
|
32
|
+
>
|
|
33
|
+
{/if}
|
|
34
|
+
{/snippet}
|
|
@@ -1,40 +1,38 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script
|
|
4
|
-
lang="ts"
|
|
5
|
-
generics="T"
|
|
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
|
-
{/snippet}
|
|
37
|
-
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script
|
|
4
|
+
lang="ts"
|
|
5
|
+
generics="T"
|
|
6
|
+
>let { name, options, selected = $bindable(), onchange } = $props();
|
|
7
|
+
export {};
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<div
|
|
11
|
+
class="wrapper"
|
|
12
|
+
role="radiogroup"
|
|
13
|
+
>
|
|
14
|
+
{#each options as option (option.value)}
|
|
15
|
+
<!-- eslint-disable-next-line @typescript-eslint/no-confusing-void-expression -->
|
|
16
|
+
{@render radio(option)}
|
|
17
|
+
{/each}
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
{#snippet radio(option: BigRadioOption<T>)}
|
|
21
|
+
<label class:selected={selected === option.value}>
|
|
22
|
+
<input
|
|
23
|
+
type="radio"
|
|
24
|
+
{name}
|
|
25
|
+
bind:group={selected}
|
|
26
|
+
value={option.value}
|
|
27
|
+
onchange={() => void onchange?.(option.value)}
|
|
28
|
+
/>
|
|
29
|
+
<div class="text">
|
|
30
|
+
<h5 class="title">{option.label}</h5>
|
|
31
|
+
<p class="note">{option.info}</p>
|
|
32
|
+
</div>
|
|
33
|
+
</label>
|
|
34
|
+
{/snippet}
|
|
35
|
+
|
|
38
36
|
<style>.wrapper {
|
|
39
37
|
display: flex;
|
|
40
38
|
flex-flow: row wrap;
|
|
@@ -87,4 +85,4 @@ label.selected {
|
|
|
87
85
|
}
|
|
88
86
|
label.selected h5 {
|
|
89
87
|
color: #ffffff;
|
|
90
|
-
}</style>
|
|
88
|
+
}</style>
|