@lavalogic/scoria 0.34.0 → 0.35.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 +58 -58
- package/dist/Components/AccordionGroup.svelte +42 -42
- package/dist/Components/AccordionGroupButton.svelte +99 -99
- package/dist/Components/Action.svelte +138 -138
- package/dist/Components/AlertModal.svelte +125 -125
- package/dist/Components/Base/ContextWrapper.svelte +50 -50
- package/dist/Components/Base/Pagination.svelte +190 -190
- package/dist/Components/Base/Snippets.svelte +29 -29
- package/dist/Components/BigRadioSet.svelte +29 -29
- package/dist/Components/Bubble.svelte +77 -77
- package/dist/Components/Button.svelte +197 -197
- package/dist/Components/Checkbox.svelte +68 -68
- package/dist/Components/CollapsibleCard.svelte +70 -70
- package/dist/Components/Contexts/ContextMenu.svelte +157 -157
- package/dist/Components/Contexts/ContextMenuDivider.svelte +11 -11
- package/dist/Components/Contexts/ContextMenuOption.svelte +52 -52
- package/dist/Components/Contexts/Toast.svelte +61 -61
- package/dist/Components/Contexts/ToastContainer.svelte +46 -46
- package/dist/Components/Contexts/Tooltip.svelte +26 -26
- package/dist/Components/DataMatrixIcon.svelte +41 -41
- package/dist/Components/DateInput.svelte +109 -109
- package/dist/Components/DatePicker.svelte +312 -312
- package/dist/Components/DesktopModal.svelte +106 -106
- package/dist/Components/Dial.svelte +151 -151
- package/dist/Components/DimensionInput.svelte +184 -184
- package/dist/Components/DragMenu/DragMenuHolder.svelte +106 -106
- package/dist/Components/DragMenu/DraggableCard.svelte +41 -41
- package/dist/Components/FileCard.svelte +20 -20
- package/dist/Components/FileUpload.svelte +196 -196
- package/dist/Components/GridInput.svelte +190 -190
- package/dist/Components/GridInputSet.svelte +22 -22
- package/dist/Components/HorizontalTabGroup.svelte +78 -78
- package/dist/Components/HorizontalTabGroupButton.svelte +96 -96
- package/dist/Components/Icon.svelte +97 -97
- package/dist/Components/Icons.js +357 -357
- package/dist/Components/LoadingAnimation.svelte +32 -32
- package/dist/Components/LoadingModal.svelte +47 -47
- package/dist/Components/LoadingOverlay.svelte +27 -27
- package/dist/Components/Modal.svelte +251 -251
- package/dist/Components/MultiSelect.svelte +197 -197
- package/dist/Components/Nav/Nav.svelte +97 -97
- package/dist/Components/Nav/NavServiceMenuList.svelte +34 -34
- package/dist/Components/Nav/NavTab.svelte +91 -91
- package/dist/Components/Nav/ServiceMenuItem.svelte +91 -91
- package/dist/Components/Nav/ServicesNav.svelte +53 -53
- package/dist/Components/NumberInput.svelte +144 -144
- package/dist/Components/PageHeading.svelte +36 -36
- package/dist/Components/PasswordInput.svelte +73 -73
- package/dist/Components/Portal.svelte +25 -25
- package/dist/Components/ProgressBubble.svelte +80 -80
- package/dist/Components/QuerySelect.svelte +411 -411
- package/dist/Components/SingleSelect.svelte +261 -261
- package/dist/Components/StepButton.svelte +120 -120
- package/dist/Components/StepForm.svelte +108 -108
- package/dist/Components/Switch.svelte +36 -36
- package/dist/Components/Table/Body/QuickSearchCell.svelte +632 -632
- package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +30 -30
- package/dist/Components/Table/Body/Rows/ColumnList.svelte +56 -56
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +179 -179
- package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +49 -49
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +180 -180
- package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +102 -102
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +119 -119
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +114 -114
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +96 -96
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +72 -72
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +131 -131
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +144 -144
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +238 -238
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +358 -358
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +338 -338
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +183 -183
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +309 -309
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +369 -369
- package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +170 -170
- package/dist/Components/Table/Body/Rows/TableRow.svelte +259 -259
- package/dist/Components/Table/Body/TableBody.svelte +67 -67
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte +39 -39
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +28 -28
- package/dist/Components/Table/Headers/TableHead.svelte +260 -260
- package/dist/Components/Table/Misc/ColumnPanel.svelte +78 -78
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte +99 -99
- package/dist/Components/Table/Misc/FilterInput.svelte +556 -556
- package/dist/Components/Table/Misc/FilterPanel.svelte +46 -46
- package/dist/Components/Table/Misc/FilterPanelModal.svelte +67 -67
- package/dist/Components/Table/Misc/SidePanel.svelte +32 -32
- package/dist/Components/Table/Misc/TableFooter.svelte +304 -304
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte +156 -156
- package/dist/Components/Table/Misc/TableSidebar.svelte +176 -176
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +77 -77
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +91 -91
- package/dist/Components/Table/NestedTable.svelte +84 -84
- package/dist/Components/Table/Table.svelte +492 -492
- package/dist/Components/Test/TestContextConsumer.svelte +13 -13
- package/dist/Components/TextArea.svelte +108 -108
- package/dist/Components/TextInput.svelte +147 -147
- package/dist/Components/ThreeStateRadio.svelte +124 -124
- package/dist/Components/Touch/BoolCard.svelte +52 -52
- package/dist/Components/Touch/DateModal.svelte +217 -217
- package/dist/Components/Touch/EditCard.svelte +52 -52
- package/dist/Components/Touch/InfoCard.svelte +24 -24
- package/dist/Components/Touch/InfoTextCard.svelte +21 -21
- package/dist/Components/Touch/ModalExplanation.svelte +20 -20
- package/dist/Components/Touch/NumberKeyboard.svelte +268 -268
- package/dist/Components/Touch/NumberModal.svelte +69 -69
- package/dist/Components/Touch/PlusMinusCard.svelte +50 -50
- package/dist/Components/Touch/SelectModal.svelte +105 -105
- package/dist/Components/Touch/SummaryCard.svelte +65 -65
- package/dist/Components/Touch/TextAreaModal.svelte +86 -86
- package/dist/Components/Touch/TextModal.svelte +123 -123
- package/dist/Components/Touch/TouchCard.svelte +28 -28
- package/dist/Components/Touch/TouchModal.svelte +259 -259
- package/dist/Components/Touch/UtilityButton.svelte +91 -91
- package/dist/Components/VerticalTabGroup.svelte +66 -66
- package/dist/Components/VerticalTabGroupButton.svelte +97 -97
- package/dist/Helpers/Datamatrix.d.ts +10 -10
- package/dist/Helpers/Datamatrix.js +1 -1
- package/dist/Helpers/Helpers.svelte.js +6 -4
- package/dist/Types/Examples/ExampleModal.svelte +34 -34
- package/dist/scss/_basics.scss +12 -12
- package/dist/scss/_colours.scss +134 -134
- package/dist/scss/_mixins.scss +3016 -3016
- package/dist/scss/_sizing.scss +69 -69
- package/dist/scss/_transitions.scss +8 -8
- package/package.json +2 -2
|
@@ -1,192 +1,192 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script
|
|
4
|
-
lang="ts"
|
|
5
|
-
module
|
|
6
|
-
>
|
|
7
|
-
import { dev } from '$app/environment';
|
|
8
|
-
import { loadingText } from '../Helpers/Helpers.svelte.js';
|
|
9
|
-
import type { GridItem } from '../Types/Internal/GridItem.js';
|
|
10
|
-
import type {
|
|
11
|
-
GridMultiSelectItem,
|
|
12
|
-
GridMultiSelectItemAsObject,
|
|
13
|
-
GridMultiSelectItemAsPrimitive,
|
|
14
|
-
} from '../Types/Internal/GridMultiSelectItem.js';
|
|
15
|
-
import type { GridSelectItem } from '../Types/Internal/GridSelectItem.js';
|
|
16
|
-
import type {
|
|
17
|
-
GridSingleSelectItem,
|
|
18
|
-
GridSingleSelectItemAsObject,
|
|
19
|
-
GridSingleSelectItemAsPrimitive,
|
|
20
|
-
} from '../Types/Internal/GridSingleSelectItem.js';
|
|
21
|
-
import type { GridTextItem } from '../Types/Internal/GridTextItem.js';
|
|
22
|
-
import type { ValueProp } from '../Types/Internal/Misc.js';
|
|
23
|
-
import type { GridInputProps } from './GridInputProps.js';
|
|
24
|
-
import MultiSelect from './MultiSelect.svelte';
|
|
25
|
-
import SingleSelect from './SingleSelect.svelte';
|
|
26
|
-
import TextInput from './TextInput.svelte';
|
|
27
|
-
|
|
28
|
-
const textTypes = new Set(['text', 'email', 'tel']);
|
|
29
|
-
</script>
|
|
30
|
-
|
|
31
|
-
<script
|
|
32
|
-
lang="ts"
|
|
33
|
-
generics="V extends object,VP extends ValueProp<V>"
|
|
34
|
-
>
|
|
35
|
-
const { item, first, last }: GridInputProps<V, VP> = $props();
|
|
36
|
-
|
|
37
|
-
let value = $derived(isText(item) ? (item.value ?? '') : '');
|
|
38
|
-
|
|
39
|
-
function isText<V extends object, VP extends ValueProp<V>>(
|
|
40
|
-
item: GridItem<V, VP>
|
|
41
|
-
): item is GridTextItem {
|
|
42
|
-
return item.type == null || textTypes.has(item.type);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function isSelect(item: GridItem<V, VP>): item is GridSelectItem<V, VP> {
|
|
46
|
-
return item.type == 'select';
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function isMultiSelect<A extends object, B extends ValueProp<A>>(
|
|
50
|
-
item: GridSelectItem<A, B>
|
|
51
|
-
): item is GridMultiSelectItem<A, B> {
|
|
52
|
-
return 'multi' in item && item.multi === true;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function isMultiSelectPrimitive<A extends object, B extends ValueProp<A>>(
|
|
56
|
-
item: GridMultiSelectItem<A, B>
|
|
57
|
-
): item is GridMultiSelectItemAsPrimitive<A, B> {
|
|
58
|
-
return 'valueAsObject' in item && !item.valueAsObject;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function isMultiSelectObject<A extends object, B extends ValueProp<A>>(
|
|
62
|
-
item: GridMultiSelectItem<A, B>
|
|
63
|
-
): item is GridMultiSelectItemAsObject<A, B> {
|
|
64
|
-
return 'valueAsObject' in item && item.valueAsObject;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function isSingleSelect<A extends object, B extends ValueProp<A>>(
|
|
68
|
-
item: GridSelectItem<A, B>
|
|
69
|
-
): item is GridSingleSelectItem<A, B> {
|
|
70
|
-
return !('multi' in item) || item.multi === false;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function isSingleSelectPrimitive<A extends object, B extends ValueProp<A>>(
|
|
74
|
-
item: GridSingleSelectItem<A, B>
|
|
75
|
-
): item is GridSingleSelectItemAsPrimitive<A, B> {
|
|
76
|
-
return 'valueAsObject' in item && !item.valueAsObject;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function isSingleSelectObject<A extends object, B extends ValueProp<A>>(
|
|
80
|
-
item: GridSingleSelectItem<A, B>
|
|
81
|
-
): item is GridSingleSelectItemAsObject<A, B> {
|
|
82
|
-
return 'valueAsObject' in item && item.valueAsObject;
|
|
83
|
-
}
|
|
84
|
-
</script>
|
|
85
|
-
|
|
86
|
-
<label
|
|
87
|
-
class:first
|
|
88
|
-
class:last
|
|
89
|
-
>
|
|
90
|
-
<div class="left">
|
|
91
|
-
<span
|
|
92
|
-
class:first
|
|
93
|
-
class:last>{item.label}</span
|
|
94
|
-
>
|
|
95
|
-
</div>
|
|
96
|
-
{#if isText(item)}
|
|
97
|
-
<TextInput
|
|
98
|
-
disabled={item.disabled}
|
|
99
|
-
bind:value
|
|
100
|
-
oninput={() => {
|
|
101
|
-
item.updater(value);
|
|
102
|
-
}}
|
|
103
|
-
required={item.required}
|
|
104
|
-
invalid={item.invalid}
|
|
105
|
-
/>
|
|
106
|
-
{:else if isSelect(item)}
|
|
107
|
-
{#if isMultiSelect(item)}
|
|
108
|
-
{#await item.options}
|
|
109
|
-
{loadingText}
|
|
110
|
-
{:then options}
|
|
111
|
-
{#if isMultiSelectObject<V, VP>(item)}
|
|
112
|
-
<MultiSelect
|
|
113
|
-
name={item.name}
|
|
114
|
-
{options}
|
|
115
|
-
valueAsObject={true}
|
|
116
|
-
labelProp={item.labelProp}
|
|
117
|
-
valueProp={item.valueProp}
|
|
118
|
-
selectedValues={item.value}
|
|
119
|
-
invalid={item.invalid}
|
|
120
|
-
onchange={(v: Array<V>) => {
|
|
121
|
-
item.updater(v);
|
|
122
|
-
}}
|
|
123
|
-
/>
|
|
124
|
-
{:else if isMultiSelectPrimitive(item)}
|
|
125
|
-
<MultiSelect
|
|
126
|
-
name={item.name}
|
|
127
|
-
{options}
|
|
128
|
-
valueAsObject={false}
|
|
129
|
-
labelProp={item.labelProp}
|
|
130
|
-
valueProp={item.valueProp}
|
|
131
|
-
selectedValues={item.value}
|
|
132
|
-
invalid={item.invalid}
|
|
133
|
-
onchange={(v: Array<V>) => {
|
|
134
|
-
const values = v.map((it) => it[item.valueProp]);
|
|
135
|
-
|
|
136
|
-
item.updater(values);
|
|
137
|
-
}}
|
|
138
|
-
/>
|
|
139
|
-
{/if}
|
|
140
|
-
{/await}
|
|
141
|
-
{:else if isSingleSelect(item)}
|
|
142
|
-
{#await item.options}
|
|
143
|
-
{loadingText}
|
|
144
|
-
{:then options}
|
|
145
|
-
{#if isSingleSelectObject(item)}
|
|
146
|
-
<SingleSelect
|
|
147
|
-
{options}
|
|
148
|
-
name={item.name}
|
|
149
|
-
valueAsObject={true}
|
|
150
|
-
labelProp={item.labelProp}
|
|
151
|
-
valueProp={item.valueProp}
|
|
152
|
-
value={item.value}
|
|
153
|
-
required={item.required}
|
|
154
|
-
clearable={!item.required}
|
|
155
|
-
disabled={item.disabled}
|
|
156
|
-
invalid={item.invalid}
|
|
157
|
-
onchange={(v: V | null) => {
|
|
158
|
-
item.updater(v);
|
|
159
|
-
}}
|
|
160
|
-
/>
|
|
161
|
-
{:else if isSingleSelectPrimitive(item)}
|
|
162
|
-
<SingleSelect
|
|
163
|
-
{options}
|
|
164
|
-
name={item.name}
|
|
165
|
-
valueAsObject={false}
|
|
166
|
-
labelProp={item.labelProp}
|
|
167
|
-
valueProp={item.valueProp}
|
|
168
|
-
value={item.value}
|
|
169
|
-
required={item.required}
|
|
170
|
-
clearable={!item.required}
|
|
171
|
-
disabled={item.disabled}
|
|
172
|
-
invalid={item.invalid}
|
|
173
|
-
onchange={(v: V | null) => {
|
|
174
|
-
const x = v == null ? null : v[item.valueProp];
|
|
175
|
-
|
|
176
|
-
item.updater(x);
|
|
177
|
-
}}
|
|
178
|
-
/>
|
|
179
|
-
{/if}
|
|
180
|
-
{/await}
|
|
181
|
-
{/if}
|
|
182
|
-
{:else if dev}
|
|
183
|
-
{@const type = item.type}
|
|
184
|
-
unknown type: {type}
|
|
185
|
-
<!-- eslint-disable-next-line svelte/no-at-debug-tags -->
|
|
186
|
-
{@debug type}
|
|
187
|
-
{/if}
|
|
188
|
-
</label>
|
|
189
|
-
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script
|
|
4
|
+
lang="ts"
|
|
5
|
+
module
|
|
6
|
+
>
|
|
7
|
+
import { dev } from '$app/environment';
|
|
8
|
+
import { loadingText } from '../Helpers/Helpers.svelte.js';
|
|
9
|
+
import type { GridItem } from '../Types/Internal/GridItem.js';
|
|
10
|
+
import type {
|
|
11
|
+
GridMultiSelectItem,
|
|
12
|
+
GridMultiSelectItemAsObject,
|
|
13
|
+
GridMultiSelectItemAsPrimitive,
|
|
14
|
+
} from '../Types/Internal/GridMultiSelectItem.js';
|
|
15
|
+
import type { GridSelectItem } from '../Types/Internal/GridSelectItem.js';
|
|
16
|
+
import type {
|
|
17
|
+
GridSingleSelectItem,
|
|
18
|
+
GridSingleSelectItemAsObject,
|
|
19
|
+
GridSingleSelectItemAsPrimitive,
|
|
20
|
+
} from '../Types/Internal/GridSingleSelectItem.js';
|
|
21
|
+
import type { GridTextItem } from '../Types/Internal/GridTextItem.js';
|
|
22
|
+
import type { ValueProp } from '../Types/Internal/Misc.js';
|
|
23
|
+
import type { GridInputProps } from './GridInputProps.js';
|
|
24
|
+
import MultiSelect from './MultiSelect.svelte';
|
|
25
|
+
import SingleSelect from './SingleSelect.svelte';
|
|
26
|
+
import TextInput from './TextInput.svelte';
|
|
27
|
+
|
|
28
|
+
const textTypes = new Set(['text', 'email', 'tel']);
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<script
|
|
32
|
+
lang="ts"
|
|
33
|
+
generics="V extends object,VP extends ValueProp<V>"
|
|
34
|
+
>
|
|
35
|
+
const { item, first, last }: GridInputProps<V, VP> = $props();
|
|
36
|
+
|
|
37
|
+
let value = $derived(isText(item) ? (item.value ?? '') : '');
|
|
38
|
+
|
|
39
|
+
function isText<V extends object, VP extends ValueProp<V>>(
|
|
40
|
+
item: GridItem<V, VP>
|
|
41
|
+
): item is GridTextItem {
|
|
42
|
+
return item.type == null || textTypes.has(item.type);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function isSelect(item: GridItem<V, VP>): item is GridSelectItem<V, VP> {
|
|
46
|
+
return item.type == 'select';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function isMultiSelect<A extends object, B extends ValueProp<A>>(
|
|
50
|
+
item: GridSelectItem<A, B>
|
|
51
|
+
): item is GridMultiSelectItem<A, B> {
|
|
52
|
+
return 'multi' in item && item.multi === true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function isMultiSelectPrimitive<A extends object, B extends ValueProp<A>>(
|
|
56
|
+
item: GridMultiSelectItem<A, B>
|
|
57
|
+
): item is GridMultiSelectItemAsPrimitive<A, B> {
|
|
58
|
+
return 'valueAsObject' in item && !item.valueAsObject;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function isMultiSelectObject<A extends object, B extends ValueProp<A>>(
|
|
62
|
+
item: GridMultiSelectItem<A, B>
|
|
63
|
+
): item is GridMultiSelectItemAsObject<A, B> {
|
|
64
|
+
return 'valueAsObject' in item && item.valueAsObject;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function isSingleSelect<A extends object, B extends ValueProp<A>>(
|
|
68
|
+
item: GridSelectItem<A, B>
|
|
69
|
+
): item is GridSingleSelectItem<A, B> {
|
|
70
|
+
return !('multi' in item) || item.multi === false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function isSingleSelectPrimitive<A extends object, B extends ValueProp<A>>(
|
|
74
|
+
item: GridSingleSelectItem<A, B>
|
|
75
|
+
): item is GridSingleSelectItemAsPrimitive<A, B> {
|
|
76
|
+
return 'valueAsObject' in item && !item.valueAsObject;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function isSingleSelectObject<A extends object, B extends ValueProp<A>>(
|
|
80
|
+
item: GridSingleSelectItem<A, B>
|
|
81
|
+
): item is GridSingleSelectItemAsObject<A, B> {
|
|
82
|
+
return 'valueAsObject' in item && item.valueAsObject;
|
|
83
|
+
}
|
|
84
|
+
</script>
|
|
85
|
+
|
|
86
|
+
<label
|
|
87
|
+
class:first
|
|
88
|
+
class:last
|
|
89
|
+
>
|
|
90
|
+
<div class="left">
|
|
91
|
+
<span
|
|
92
|
+
class:first
|
|
93
|
+
class:last>{item.label}</span
|
|
94
|
+
>
|
|
95
|
+
</div>
|
|
96
|
+
{#if isText(item)}
|
|
97
|
+
<TextInput
|
|
98
|
+
disabled={item.disabled}
|
|
99
|
+
bind:value
|
|
100
|
+
oninput={() => {
|
|
101
|
+
item.updater(value);
|
|
102
|
+
}}
|
|
103
|
+
required={item.required}
|
|
104
|
+
invalid={item.invalid}
|
|
105
|
+
/>
|
|
106
|
+
{:else if isSelect(item)}
|
|
107
|
+
{#if isMultiSelect(item)}
|
|
108
|
+
{#await item.options}
|
|
109
|
+
{loadingText}
|
|
110
|
+
{:then options}
|
|
111
|
+
{#if isMultiSelectObject<V, VP>(item)}
|
|
112
|
+
<MultiSelect
|
|
113
|
+
name={item.name}
|
|
114
|
+
{options}
|
|
115
|
+
valueAsObject={true}
|
|
116
|
+
labelProp={item.labelProp}
|
|
117
|
+
valueProp={item.valueProp}
|
|
118
|
+
selectedValues={item.value}
|
|
119
|
+
invalid={item.invalid}
|
|
120
|
+
onchange={(v: Array<V>) => {
|
|
121
|
+
item.updater(v);
|
|
122
|
+
}}
|
|
123
|
+
/>
|
|
124
|
+
{:else if isMultiSelectPrimitive(item)}
|
|
125
|
+
<MultiSelect
|
|
126
|
+
name={item.name}
|
|
127
|
+
{options}
|
|
128
|
+
valueAsObject={false}
|
|
129
|
+
labelProp={item.labelProp}
|
|
130
|
+
valueProp={item.valueProp}
|
|
131
|
+
selectedValues={item.value}
|
|
132
|
+
invalid={item.invalid}
|
|
133
|
+
onchange={(v: Array<V>) => {
|
|
134
|
+
const values = v.map((it) => it[item.valueProp]);
|
|
135
|
+
|
|
136
|
+
item.updater(values);
|
|
137
|
+
}}
|
|
138
|
+
/>
|
|
139
|
+
{/if}
|
|
140
|
+
{/await}
|
|
141
|
+
{:else if isSingleSelect(item)}
|
|
142
|
+
{#await item.options}
|
|
143
|
+
{loadingText}
|
|
144
|
+
{:then options}
|
|
145
|
+
{#if isSingleSelectObject(item)}
|
|
146
|
+
<SingleSelect
|
|
147
|
+
{options}
|
|
148
|
+
name={item.name}
|
|
149
|
+
valueAsObject={true}
|
|
150
|
+
labelProp={item.labelProp}
|
|
151
|
+
valueProp={item.valueProp}
|
|
152
|
+
value={item.value}
|
|
153
|
+
required={item.required}
|
|
154
|
+
clearable={!item.required}
|
|
155
|
+
disabled={item.disabled}
|
|
156
|
+
invalid={item.invalid}
|
|
157
|
+
onchange={(v: V | null) => {
|
|
158
|
+
item.updater(v);
|
|
159
|
+
}}
|
|
160
|
+
/>
|
|
161
|
+
{:else if isSingleSelectPrimitive(item)}
|
|
162
|
+
<SingleSelect
|
|
163
|
+
{options}
|
|
164
|
+
name={item.name}
|
|
165
|
+
valueAsObject={false}
|
|
166
|
+
labelProp={item.labelProp}
|
|
167
|
+
valueProp={item.valueProp}
|
|
168
|
+
value={item.value}
|
|
169
|
+
required={item.required}
|
|
170
|
+
clearable={!item.required}
|
|
171
|
+
disabled={item.disabled}
|
|
172
|
+
invalid={item.invalid}
|
|
173
|
+
onchange={(v: V | null) => {
|
|
174
|
+
const x = v == null ? null : v[item.valueProp];
|
|
175
|
+
|
|
176
|
+
item.updater(x);
|
|
177
|
+
}}
|
|
178
|
+
/>
|
|
179
|
+
{/if}
|
|
180
|
+
{/await}
|
|
181
|
+
{/if}
|
|
182
|
+
{:else if dev}
|
|
183
|
+
{@const type = item.type}
|
|
184
|
+
unknown type: {type}
|
|
185
|
+
<!-- eslint-disable-next-line svelte/no-at-debug-tags -->
|
|
186
|
+
{@debug type}
|
|
187
|
+
{/if}
|
|
188
|
+
</label>
|
|
189
|
+
|
|
190
190
|
<style>label {
|
|
191
191
|
display: contents;
|
|
192
192
|
--input-border-radius: 0;
|
|
@@ -205,4 +205,4 @@ label.first {
|
|
|
205
205
|
}
|
|
206
206
|
label.last {
|
|
207
207
|
border-radius: 0 0 4px 4px;
|
|
208
|
-
}</style>
|
|
208
|
+
}</style>
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script lang="ts" generics="V extends object,VP extends ValueProp<V>">
|
|
4
|
-
import type { ValueProp } from '../Types/Internal/Misc.js';
|
|
5
|
-
import GridInput from './GridInput.svelte';
|
|
6
|
-
import type { GridInputSetProps } from './GridInputSetProps.js';
|
|
7
|
-
|
|
8
|
-
const { items, header }: GridInputSetProps<V, VP> = $props();
|
|
9
|
-
|
|
10
|
-
const lastIndex = $derived(items.length - 1);
|
|
11
|
-
</script>
|
|
12
|
-
|
|
13
|
-
<div class="grid">
|
|
14
|
-
{#if header}
|
|
15
|
-
{@render header()}
|
|
16
|
-
{/if}
|
|
17
|
-
{#each items as item, index (item)}
|
|
18
|
-
<GridInput item={items[index]} first={index == 0} last={index == lastIndex} />
|
|
19
|
-
{/each}
|
|
20
|
-
</div>
|
|
21
|
-
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script lang="ts" generics="V extends object,VP extends ValueProp<V>">
|
|
4
|
+
import type { ValueProp } from '../Types/Internal/Misc.js';
|
|
5
|
+
import GridInput from './GridInput.svelte';
|
|
6
|
+
import type { GridInputSetProps } from './GridInputSetProps.js';
|
|
7
|
+
|
|
8
|
+
const { items, header }: GridInputSetProps<V, VP> = $props();
|
|
9
|
+
|
|
10
|
+
const lastIndex = $derived(items.length - 1);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<div class="grid">
|
|
14
|
+
{#if header}
|
|
15
|
+
{@render header()}
|
|
16
|
+
{/if}
|
|
17
|
+
{#each items as item, index (item)}
|
|
18
|
+
<GridInput item={items[index]} first={index == 0} last={index == lastIndex} />
|
|
19
|
+
{/each}
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
22
|
<style>.grid {
|
|
23
23
|
display: grid;
|
|
24
24
|
grid-template-columns: [label] 16rem [value] 1fr;
|
|
@@ -26,4 +26,4 @@
|
|
|
26
26
|
border: solid 1px #ced2d6;
|
|
27
27
|
border-radius: 4px;
|
|
28
28
|
background-color: #ced2d6;
|
|
29
|
-
}</style>
|
|
29
|
+
}</style>
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script
|
|
4
|
-
lang="ts"
|
|
5
|
-
generics="CommonDenominator"
|
|
6
|
-
>
|
|
7
|
-
import { ellipses } from '../Helpers/Helpers.svelte.js';
|
|
8
|
-
import { Colour } from '../scss/colours.js';
|
|
9
|
-
import HorizontalTabGroupButton from './HorizontalTabGroupButton.svelte';
|
|
10
|
-
import type { HorizontalTabGroupProps } from './HorizontalTabGroupProps.js';
|
|
11
|
-
import TextInput from './TextInput.svelte';
|
|
12
|
-
let {
|
|
13
|
-
// name: _name, //FIXME why is this not implemented?
|
|
14
|
-
tabComponent,
|
|
15
|
-
tabs,
|
|
16
|
-
selected,
|
|
17
|
-
noRadius = false,
|
|
18
|
-
grow = false,
|
|
19
|
-
filterable = false,
|
|
20
|
-
filterFn,
|
|
21
|
-
}: HorizontalTabGroupProps<CommonDenominator> = $props();
|
|
22
|
-
|
|
23
|
-
// svelte-ignore state_referenced_locally
|
|
24
|
-
let filteredTabs = $state(tabs);
|
|
25
|
-
|
|
26
|
-
$effect(() => {
|
|
27
|
-
const term = searchValue;
|
|
28
|
-
const id = setTimeout(() => {
|
|
29
|
-
filteredTabs = filterFn ? tabs.filter((t) => filterFn(t, term)) : tabs;
|
|
30
|
-
}, 300);
|
|
31
|
-
return () => {
|
|
32
|
-
clearTimeout(id);
|
|
33
|
-
};
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
let searchValue = $state('');
|
|
37
|
-
</script>
|
|
38
|
-
|
|
39
|
-
<div
|
|
40
|
-
class="wrapper"
|
|
41
|
-
class:no-radius={noRadius}
|
|
42
|
-
class:grow
|
|
43
|
-
>
|
|
44
|
-
<div class="tabs">
|
|
45
|
-
<div class="sticky">
|
|
46
|
-
{#if filterable}
|
|
47
|
-
<div class="searchbar">
|
|
48
|
-
<TextInput
|
|
49
|
-
bind:value={searchValue}
|
|
50
|
-
placeholder="Search any keyword to find matches{ellipses}"
|
|
51
|
-
rightIcon={{ name: 'search-1', colour: Colour['$ui-blue-4'] }}
|
|
52
|
-
/>
|
|
53
|
-
</div>
|
|
54
|
-
{/if}
|
|
55
|
-
</div>
|
|
56
|
-
{#if tabComponent}
|
|
57
|
-
{#each filteredTabs as option (option)}
|
|
58
|
-
{@render tabComponent(option, selected === option)}
|
|
59
|
-
{/each}
|
|
60
|
-
{:else}
|
|
61
|
-
{#each filteredTabs as option (option)}
|
|
62
|
-
<HorizontalTabGroupButton
|
|
63
|
-
{option}
|
|
64
|
-
noRadius={noRadius || filterable}
|
|
65
|
-
selected={selected === option}
|
|
66
|
-
/>
|
|
67
|
-
{/each}
|
|
68
|
-
{/if}
|
|
69
|
-
</div>
|
|
70
|
-
|
|
71
|
-
<div class="content">
|
|
72
|
-
{#if selected}
|
|
73
|
-
{@render selected.content(selected.args)}
|
|
74
|
-
{/if}
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script
|
|
4
|
+
lang="ts"
|
|
5
|
+
generics="CommonDenominator"
|
|
6
|
+
>
|
|
7
|
+
import { ellipses } from '../Helpers/Helpers.svelte.js';
|
|
8
|
+
import { Colour } from '../scss/colours.js';
|
|
9
|
+
import HorizontalTabGroupButton from './HorizontalTabGroupButton.svelte';
|
|
10
|
+
import type { HorizontalTabGroupProps } from './HorizontalTabGroupProps.js';
|
|
11
|
+
import TextInput from './TextInput.svelte';
|
|
12
|
+
let {
|
|
13
|
+
// name: _name, //FIXME why is this not implemented?
|
|
14
|
+
tabComponent,
|
|
15
|
+
tabs,
|
|
16
|
+
selected,
|
|
17
|
+
noRadius = false,
|
|
18
|
+
grow = false,
|
|
19
|
+
filterable = false,
|
|
20
|
+
filterFn,
|
|
21
|
+
}: HorizontalTabGroupProps<CommonDenominator> = $props();
|
|
22
|
+
|
|
23
|
+
// svelte-ignore state_referenced_locally
|
|
24
|
+
let filteredTabs = $state(tabs);
|
|
25
|
+
|
|
26
|
+
$effect(() => {
|
|
27
|
+
const term = searchValue;
|
|
28
|
+
const id = setTimeout(() => {
|
|
29
|
+
filteredTabs = filterFn ? tabs.filter((t) => filterFn(t, term)) : tabs;
|
|
30
|
+
}, 300);
|
|
31
|
+
return () => {
|
|
32
|
+
clearTimeout(id);
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
let searchValue = $state('');
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<div
|
|
40
|
+
class="wrapper"
|
|
41
|
+
class:no-radius={noRadius}
|
|
42
|
+
class:grow
|
|
43
|
+
>
|
|
44
|
+
<div class="tabs">
|
|
45
|
+
<div class="sticky">
|
|
46
|
+
{#if filterable}
|
|
47
|
+
<div class="searchbar">
|
|
48
|
+
<TextInput
|
|
49
|
+
bind:value={searchValue}
|
|
50
|
+
placeholder="Search any keyword to find matches{ellipses}"
|
|
51
|
+
rightIcon={{ name: 'search-1', colour: Colour['$ui-blue-4'] }}
|
|
52
|
+
/>
|
|
53
|
+
</div>
|
|
54
|
+
{/if}
|
|
55
|
+
</div>
|
|
56
|
+
{#if tabComponent}
|
|
57
|
+
{#each filteredTabs as option (option)}
|
|
58
|
+
{@render tabComponent(option, selected === option)}
|
|
59
|
+
{/each}
|
|
60
|
+
{:else}
|
|
61
|
+
{#each filteredTabs as option (option)}
|
|
62
|
+
<HorizontalTabGroupButton
|
|
63
|
+
{option}
|
|
64
|
+
noRadius={noRadius || filterable}
|
|
65
|
+
selected={selected === option}
|
|
66
|
+
/>
|
|
67
|
+
{/each}
|
|
68
|
+
{/if}
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="content">
|
|
72
|
+
{#if selected}
|
|
73
|
+
{@render selected.content(selected.args)}
|
|
74
|
+
{/if}
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
78
|
<style>.searchbar {
|
|
79
79
|
display: flex;
|
|
80
80
|
width: 100%;
|
|
@@ -125,4 +125,4 @@
|
|
|
125
125
|
flex-grow: 1;
|
|
126
126
|
overflow: visible;
|
|
127
127
|
border-radius: 0 4px 0 4px;
|
|
128
|
-
}</style>
|
|
128
|
+
}</style>
|