@lavalogic/scoria 0.38.10 → 0.38.12
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 +46 -46
- package/dist/Components/AccordionGroupButton.svelte +76 -76
- package/dist/Components/Action.svelte +136 -136
- package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +702 -702
- package/dist/Components/Base/BaseModal.svelte +125 -125
- package/dist/Components/Base/ContextWrapper.svelte +72 -72
- package/dist/Components/Base/Pagination.svelte +198 -198
- package/dist/Components/Base/Snippets.svelte +36 -36
- package/dist/Components/BigRadioSet.svelte +38 -38
- package/dist/Components/Bubble.svelte +101 -101
- package/dist/Components/Button.svelte +209 -209
- package/dist/Components/Checkbox.svelte +86 -86
- package/dist/Components/Contexts/ContextMenu.svelte +164 -164
- package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
- package/dist/Components/Contexts/ContextMenuOption.svelte +60 -60
- package/dist/Components/Contexts/ToastContainer.svelte +65 -65
- package/dist/Components/Contexts/Tooltip.svelte +37 -37
- package/dist/Components/DataMatrixIcon.svelte +112 -112
- package/dist/Components/DateInput.svelte +148 -148
- package/dist/Components/DatePicker.svelte +300 -300
- package/dist/Components/DesktopModal.svelte +90 -90
- package/dist/Components/Dial.svelte +204 -204
- package/dist/Components/DimensionInput.svelte +170 -170
- package/dist/Components/DragMenu/DragMenuHolder.svelte +119 -119
- package/dist/Components/DragMenu/DraggableCard.svelte +77 -77
- package/dist/Components/FileCard.svelte +24 -24
- package/dist/Components/FileUpload.svelte +236 -236
- package/dist/Components/GridInputSet.svelte +29 -29
- package/dist/Components/HorizontalTabGroup.svelte +82 -82
- package/dist/Components/HorizontalTabGroupButton.svelte +44 -44
- package/dist/Components/Icon.svelte +128 -128
- package/dist/Components/Icons.js +357 -357
- package/dist/Components/LoadingAnimation.svelte +29 -29
- package/dist/Components/LoadingModal.svelte +45 -45
- package/dist/Components/LoadingOverlay.svelte +25 -25
- package/dist/Components/Modal.svelte +258 -258
- package/dist/Components/MultiSelect.svelte +220 -220
- package/dist/Components/Nav/NavServiceMenuList.svelte +43 -43
- package/dist/Components/Nav/NavTab.svelte +62 -62
- package/dist/Components/Nav/ServicesNav.svelte +80 -80
- package/dist/Components/NumberInput.svelte +157 -157
- package/dist/Components/PageHeading.svelte +25 -25
- package/dist/Components/PasswordInput.svelte +88 -88
- package/dist/Components/Portal.svelte +36 -36
- package/dist/Components/QuerySelect.svelte +366 -366
- package/dist/Components/SingleSelect.svelte +250 -250
- package/dist/Components/StepButton.svelte +70 -70
- package/dist/Components/StepForm.svelte +140 -140
- package/dist/Components/Switch.svelte +69 -69
- package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +51 -51
- package/dist/Components/Table/Body/Rows/ColumnList.svelte +59 -59
- package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +79 -79
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +120 -120
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +105 -105
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +87 -87
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +126 -126
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +159 -159
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +246 -246
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +216 -216
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +179 -179
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +197 -197
- package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +190 -190
- package/dist/Components/Table/Body/Rows/TableRow.svelte +290 -290
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte +41 -41
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +30 -30
- package/dist/Components/Table/Misc/FilterInput.svelte +37 -16
- package/dist/Components/Table/Misc/SidePanel.svelte +35 -35
- package/dist/Components/Table/Misc/TableConfigurationModal.svelte +71 -0
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +100 -100
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +107 -107
- package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +225 -0
- package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte.d.ts +26 -0
- package/dist/Components/Table/Misc/UpdateViewOptionsModalProps.d.ts +21 -0
- package/dist/Components/Table/Misc/UpdateViewOptionsModalProps.js +1 -0
- package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +49 -1
- package/dist/Components/Table/Types/Context/TableContext.svelte.js +142 -1
- package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +2 -2
- package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +20 -2
- package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +9 -1
- package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +1 -1
- package/dist/Components/Table/Types/DataRepository/IRemoteDataRepository.d.ts +1 -1
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +1 -1
- package/dist/Components/Table/Types/Persistence/DatatableView.d.ts +25 -0
- package/dist/Components/Test/TestContextConsumer.svelte +13 -13
- package/dist/Components/TextArea.svelte +130 -130
- package/dist/Components/TextInput.svelte +176 -176
- package/dist/Components/ThreeStateRadio.svelte +131 -131
- package/dist/Components/Touch/BoolCard.svelte +45 -45
- package/dist/Components/Touch/DateModal.svelte +209 -209
- package/dist/Components/Touch/EditCard.svelte +59 -59
- package/dist/Components/Touch/InfoCard.svelte +31 -31
- package/dist/Components/Touch/InfoTextCard.svelte +28 -28
- package/dist/Components/Touch/ModalExplanation.svelte +17 -17
- package/dist/Components/Touch/NumberKeyboard.svelte +225 -225
- package/dist/Components/Touch/NumberModal.svelte +79 -79
- package/dist/Components/Touch/PlusMinusCard.svelte +46 -46
- package/dist/Components/Touch/SummaryCard.svelte +93 -93
- package/dist/Components/Touch/TextAreaModal.svelte +95 -95
- package/dist/Components/Touch/TextModal.svelte +106 -106
- package/dist/Components/Touch/TouchCard.svelte +33 -33
- package/dist/Components/Touch/TouchModal.svelte +274 -274
- package/dist/Components/Touch/UtilityButton.svelte +109 -109
- package/dist/Components/VerticalTabGroup.svelte +79 -79
- package/dist/Components/VerticalTabGroupButton.svelte +58 -58
- package/dist/Helpers/Datamatrix.d.ts +19 -19
- package/dist/Helpers/Datamatrix.js +291 -291
- package/dist/Types/Examples/ExampleModal.svelte +35 -35
- package/dist/index.d.ts +1 -1
- package/dist/scss/_basics.scss +12 -12
- package/dist/scss/_colours.scss +134 -134
- 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,32 +1,32 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script
|
|
4
|
-
lang="ts"
|
|
5
|
-
generics="T extends object, IdType extends Primitive"
|
|
6
|
-
>
|
|
7
|
-
import { getContext } from 'svelte';
|
|
8
|
-
import { TableContext } from '../Types/Context/TableContext.svelte.js';
|
|
9
|
-
import type { Primitive } from '../Types/Context/TableInitOptions.js';
|
|
10
|
-
|
|
11
|
-
const tableContext = getContext<TableContext<T, IdType>>(TableContext.identifier);
|
|
12
|
-
|
|
13
|
-
const checked: boolean = $derived(
|
|
14
|
-
tableContext.dataRepo.data.length > 0 ? tableContext.allSelectedInCurrentPage : false
|
|
15
|
-
);
|
|
16
|
-
</script>
|
|
17
|
-
|
|
18
|
-
<div class="checkbox-cell">
|
|
19
|
-
<label aria-label="Select all rows on this page">
|
|
20
|
-
<input
|
|
21
|
-
aria-label="Select all rows on this page"
|
|
22
|
-
onchange={tableContext.selectAllInCurrentPage}
|
|
23
|
-
type="checkbox"
|
|
24
|
-
{checked}
|
|
25
|
-
disabled={tableContext.showSelectedOnly}
|
|
26
|
-
/>
|
|
27
|
-
</label>
|
|
28
|
-
</div>
|
|
29
|
-
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script
|
|
4
|
+
lang="ts"
|
|
5
|
+
generics="T extends object, IdType extends Primitive"
|
|
6
|
+
>
|
|
7
|
+
import { getContext } from 'svelte';
|
|
8
|
+
import { TableContext } from '../Types/Context/TableContext.svelte.js';
|
|
9
|
+
import type { Primitive } from '../Types/Context/TableInitOptions.js';
|
|
10
|
+
|
|
11
|
+
const tableContext = getContext<TableContext<T, IdType>>(TableContext.identifier);
|
|
12
|
+
|
|
13
|
+
const checked: boolean = $derived(
|
|
14
|
+
tableContext.dataRepo.data.length > 0 ? tableContext.allSelectedInCurrentPage : false
|
|
15
|
+
);
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<div class="checkbox-cell">
|
|
19
|
+
<label aria-label="Select all rows on this page">
|
|
20
|
+
<input
|
|
21
|
+
aria-label="Select all rows on this page"
|
|
22
|
+
onchange={tableContext.selectAllInCurrentPage}
|
|
23
|
+
type="checkbox"
|
|
24
|
+
{checked}
|
|
25
|
+
disabled={tableContext.showSelectedOnly}
|
|
26
|
+
/>
|
|
27
|
+
</label>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
30
|
<style>input[type=checkbox] {
|
|
31
31
|
height: var(--checkbox-height);
|
|
32
32
|
padding: 1rem;
|
|
@@ -54,4 +54,4 @@ label {
|
|
|
54
54
|
|
|
55
55
|
label {
|
|
56
56
|
cursor: pointer;
|
|
57
|
-
}</style>
|
|
57
|
+
}</style>
|
|
@@ -124,31 +124,52 @@
|
|
|
124
124
|
console.debug(`${def.id}: `, 'has query');
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
untrack(
|
|
127
|
+
untrack(() => {
|
|
128
128
|
try {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
if (filteringStateValue == undefined) {
|
|
130
|
+
// Filter cleared externally (saved view applied with an
|
|
131
|
+
// empty filter, or "Clear All" hit). Drop the typeahead
|
|
132
|
+
// echo so the next selection isn't masked by a stale
|
|
133
|
+
// cache, and clear the local value so the chip clears.
|
|
132
134
|
if (def.debug) {
|
|
133
|
-
console.debug(
|
|
135
|
+
console.debug(
|
|
136
|
+
`${def.id}: filtering state value was undefined`,
|
|
137
|
+
$state.snapshot(tableContext.paginationRepo?.filtering)
|
|
138
|
+
);
|
|
134
139
|
}
|
|
135
|
-
|
|
140
|
+
value = null;
|
|
141
|
+
tableContext.queryValues.delete(def);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
136
144
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
if (def.debug) {
|
|
146
|
+
console.debug(`${def.id}: query values:`, tableContext.queryValues.snapshot());
|
|
147
|
+
}
|
|
148
|
+
// Prefer the typeahead echo — it carries the real label
|
|
149
|
+
// from the option the user clicked. Fall back to the saved
|
|
150
|
+
// primitive (the usual case after applying a saved view)
|
|
151
|
+
// so the chip is at least visible; QuerySelect's own
|
|
152
|
+
// `$effect.pre` adds a placeholder option keyed on the
|
|
153
|
+
// primitive so it renders.
|
|
154
|
+
const cached = tableContext.queryValues.get(def);
|
|
155
|
+
if (def.debug) {
|
|
156
|
+
console.debug(`${def.id}: cached value:`, $state.snapshot(cached));
|
|
157
|
+
}
|
|
158
|
+
if (cached != null) {
|
|
159
|
+
value = cached;
|
|
160
|
+
} else if (customFilter.valueAsObject === true) {
|
|
161
|
+
value = {
|
|
162
|
+
value: filteringStateValue,
|
|
163
|
+
label: String(filteringStateValue),
|
|
164
|
+
};
|
|
165
|
+
} else {
|
|
166
|
+
value = filteringStateValue;
|
|
146
167
|
}
|
|
147
168
|
} catch (e) {
|
|
148
169
|
console.warn(e);
|
|
149
170
|
value = null;
|
|
150
171
|
}
|
|
151
|
-
})
|
|
172
|
+
});
|
|
152
173
|
} else if (isSelect) {
|
|
153
174
|
if (def.debug) {
|
|
154
175
|
console.debug(`${def.id}: is select (not query)`);
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script
|
|
4
|
-
lang="ts"
|
|
5
|
-
module
|
|
6
|
-
>
|
|
7
|
-
import { quintOut } from 'svelte/easing';
|
|
8
|
-
import { slide } from 'svelte/transition';
|
|
9
|
-
import { Delay } from '../../../Delay/Delay.js';
|
|
10
|
-
import { usePrefersReducedMotion } from '../../../Helpers/prefersReducedMotion.svelte.js';
|
|
11
|
-
import { ToolbarPosition } from '../Types/Toolbar/ToolbarPosition.js';
|
|
12
|
-
import type { SidePanelProps } from './SidePanelProps.js';
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
<script lang="ts">
|
|
16
|
-
const { toolbarPosition, onkeydown, ariaLabel, children }: SidePanelProps = $props();
|
|
17
|
-
const reducedMotion = usePrefersReducedMotion();
|
|
18
|
-
const slideDuration = $derived(reducedMotion.matches ? 0 : Delay.Default);
|
|
19
|
-
</script>
|
|
20
|
-
|
|
21
|
-
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
22
|
-
<div
|
|
23
|
-
class="side-panel"
|
|
24
|
-
class:left={toolbarPosition === ToolbarPosition.Left}
|
|
25
|
-
class:right={toolbarPosition === ToolbarPosition.Right}
|
|
26
|
-
aria-label={ariaLabel}
|
|
27
|
-
{onkeydown}
|
|
28
|
-
transition:slide={{ duration: slideDuration, easing: quintOut, axis: 'x' }}
|
|
29
|
-
>
|
|
30
|
-
<div class="side-content">
|
|
31
|
-
{#if children}{@render children()}{/if}
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script
|
|
4
|
+
lang="ts"
|
|
5
|
+
module
|
|
6
|
+
>
|
|
7
|
+
import { quintOut } from 'svelte/easing';
|
|
8
|
+
import { slide } from 'svelte/transition';
|
|
9
|
+
import { Delay } from '../../../Delay/Delay.js';
|
|
10
|
+
import { usePrefersReducedMotion } from '../../../Helpers/prefersReducedMotion.svelte.js';
|
|
11
|
+
import { ToolbarPosition } from '../Types/Toolbar/ToolbarPosition.js';
|
|
12
|
+
import type { SidePanelProps } from './SidePanelProps.js';
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<script lang="ts">
|
|
16
|
+
const { toolbarPosition, onkeydown, ariaLabel, children }: SidePanelProps = $props();
|
|
17
|
+
const reducedMotion = usePrefersReducedMotion();
|
|
18
|
+
const slideDuration = $derived(reducedMotion.matches ? 0 : Delay.Default);
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
22
|
+
<div
|
|
23
|
+
class="side-panel"
|
|
24
|
+
class:left={toolbarPosition === ToolbarPosition.Left}
|
|
25
|
+
class:right={toolbarPosition === ToolbarPosition.Right}
|
|
26
|
+
aria-label={ariaLabel}
|
|
27
|
+
{onkeydown}
|
|
28
|
+
transition:slide={{ duration: slideDuration, easing: quintOut, axis: 'x' }}
|
|
29
|
+
>
|
|
30
|
+
<div class="side-content">
|
|
31
|
+
{#if children}{@render children()}{/if}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
35
|
<style>.side-panel {
|
|
36
36
|
display: flex;
|
|
37
37
|
flex-shrink: 0;
|
|
@@ -51,4 +51,4 @@
|
|
|
51
51
|
flex-flow: column nowrap;
|
|
52
52
|
flex: 1;
|
|
53
53
|
width: 400px;
|
|
54
|
-
}</style>
|
|
54
|
+
}</style>
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
import type { DatatableViewKind } from '../Types/Persistence/DatatableViewKind.js';
|
|
23
23
|
import ShareViewModal from './ShareViewModal.svelte';
|
|
24
24
|
import type { TableConfigurationModalProps } from './TableConfigurationModalProps.js';
|
|
25
|
+
import UpdateViewOptionsModal from './UpdateViewOptionsModal.svelte';
|
|
25
26
|
|
|
26
27
|
const tableContext = getContext<TableContext<T, IdType>>(TableContext.identifier);
|
|
27
28
|
|
|
@@ -60,6 +61,26 @@
|
|
|
60
61
|
// to; the modal closes itself on Cancel / Save.
|
|
61
62
|
let sharingView = $state<DatatableView | null>(null);
|
|
62
63
|
|
|
64
|
+
// The view whose Update Options modal is currently open. `null` when
|
|
65
|
+
// no options modal is rendered. Same pattern as `sharingView`.
|
|
66
|
+
let updatingOptionsView = $state<DatatableView | null>(null);
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Overwrite a saved view's stored body with the table's current
|
|
70
|
+
* live state. Triggered by the "Save Layout" / "Save Filter"
|
|
71
|
+
* button on an owner card - the typical flow is "apply view A,
|
|
72
|
+
* tweak the columns / filters, then click Save on A". Refreshes
|
|
73
|
+
* the saved-views list afterwards so the card label and dropdown
|
|
74
|
+
* pick up the new body, and surfaces any failure in the inline
|
|
75
|
+
* error banner.
|
|
76
|
+
*/
|
|
77
|
+
function saveLiveStateInto(view: DatatableView): void {
|
|
78
|
+
void guard(async () => {
|
|
79
|
+
await tableContext.saveLiveStateIntoView(view);
|
|
80
|
+
await tableContext.refreshSavedViews();
|
|
81
|
+
}, `Could not save changes to "${view.name}". Please try again.`);
|
|
82
|
+
}
|
|
83
|
+
|
|
63
84
|
// Whether remote saved views are available at all. A table created
|
|
64
85
|
// without `datatableUuid` / `remoteLayouts` opts out of remote views;
|
|
65
86
|
// the modal then renders a graceful "unavailable" empty state and
|
|
@@ -358,6 +379,39 @@
|
|
|
358
379
|
applyView(view);
|
|
359
380
|
}}>Apply</Button
|
|
360
381
|
>
|
|
382
|
+
<!--
|
|
383
|
+
"Save Layout" / "Save Filter" overwrites THIS saved
|
|
384
|
+
view's stored body with the table's current live state.
|
|
385
|
+
Typical flow: user applies the view, tweaks the
|
|
386
|
+
columns or filter inputs, then clicks Save to make
|
|
387
|
+
the tweaks part of the saved view. Distinct from
|
|
388
|
+
"Save a new …" (which always creates a fresh record).
|
|
389
|
+
-->
|
|
390
|
+
<Button
|
|
391
|
+
variant={Variant.Secondary}
|
|
392
|
+
size={Size.MediumSmall}
|
|
393
|
+
nowrap
|
|
394
|
+
iconLeft={{ name: 'circle-tick', size: Size.Small }}
|
|
395
|
+
onclick={() => {
|
|
396
|
+
saveLiveStateInto(view);
|
|
397
|
+
}}>Save {sectionNoun}</Button
|
|
398
|
+
>
|
|
399
|
+
<!--
|
|
400
|
+
"Update Options" opens a dedicated modal that edits
|
|
401
|
+
the view's name and sharing visibility (private /
|
|
402
|
+
public). Kept separate from the inline body-save
|
|
403
|
+
above so a quick name fix never accidentally
|
|
404
|
+
overwrites the saved layout / filter.
|
|
405
|
+
-->
|
|
406
|
+
<Button
|
|
407
|
+
variant={Variant.Secondary}
|
|
408
|
+
size={Size.MediumSmall}
|
|
409
|
+
nowrap
|
|
410
|
+
iconLeft={{ name: 'edit', size: Size.Small }}
|
|
411
|
+
onclick={() => {
|
|
412
|
+
updatingOptionsView = view;
|
|
413
|
+
}}>Update Options</Button
|
|
414
|
+
>
|
|
361
415
|
<Button
|
|
362
416
|
variant={Variant.Secondary}
|
|
363
417
|
size={Size.MediumSmall}
|
|
@@ -570,6 +624,23 @@
|
|
|
570
624
|
/>
|
|
571
625
|
{/if}
|
|
572
626
|
|
|
627
|
+
<!--
|
|
628
|
+
Update-Options dialog stacked the same way as the Share dialog.
|
|
629
|
+
After a successful Save we refresh the saved views so the My-* card
|
|
630
|
+
picks up the new name / visibility immediately.
|
|
631
|
+
-->
|
|
632
|
+
{#if updatingOptionsView}
|
|
633
|
+
<UpdateViewOptionsModal
|
|
634
|
+
view={updatingOptionsView}
|
|
635
|
+
onclose={() => {
|
|
636
|
+
updatingOptionsView = null;
|
|
637
|
+
}}
|
|
638
|
+
onsaved={async () => {
|
|
639
|
+
await tableContext.refreshSavedViews();
|
|
640
|
+
}}
|
|
641
|
+
/>
|
|
642
|
+
{/if}
|
|
643
|
+
|
|
573
644
|
<style>.empty-state {
|
|
574
645
|
display: flex;
|
|
575
646
|
flex-flow: column nowrap;
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
<svelte:options runes />
|
|
2
|
-
|
|
3
|
-
<script
|
|
4
|
-
lang="ts"
|
|
5
|
-
generics="T extends object, IdType extends Primitive"
|
|
6
|
-
>
|
|
7
|
-
import Checkbox from '../../Checkbox.svelte';
|
|
8
|
-
import { Size } from '../../../Types/Internal/Size.js';
|
|
9
|
-
import { getContext } from 'svelte';
|
|
10
|
-
import type { Primitive } from '../Types/Context/TableInitOptions.js';
|
|
11
|
-
import { TableContext } from '../Types/Context/TableContext.svelte.js';
|
|
12
|
-
|
|
13
|
-
const tableContext = getContext<TableContext<T, IdType>>(TableContext.identifier);
|
|
14
|
-
|
|
15
|
-
const onCompactChange = (e: Event & { currentTarget: EventTarget & HTMLInputElement }) => {
|
|
16
|
-
tableContext.setIsCompact(e.currentTarget.checked);
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
const onSingleClickChange = (e: Event & { currentTarget: EventTarget & HTMLInputElement }) => {
|
|
20
|
-
tableContext.setSingleClickEditing(e.currentTarget.checked);
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const onAlternateRowColoursChange = (
|
|
24
|
-
e: Event & { currentTarget: EventTarget & HTMLInputElement }
|
|
25
|
-
) => {
|
|
26
|
-
tableContext.setAlternateRowColours(e.currentTarget.checked);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const onChangeColourOnHoverChange = (
|
|
30
|
-
e: Event & { currentTarget: EventTarget & HTMLInputElement }
|
|
31
|
-
) => {
|
|
32
|
-
tableContext.setChangeColourOnHover(e.currentTarget.checked);
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const onCopyWithHeadersChange = (
|
|
36
|
-
e: Event & { currentTarget: EventTarget & HTMLInputElement }
|
|
37
|
-
) => {
|
|
38
|
-
tableContext.setCopyWithHeaders(e.currentTarget.checked);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const onCommaSeparatedCopyChange = (
|
|
42
|
-
e: Event & { currentTarget: EventTarget & HTMLInputElement }
|
|
43
|
-
) => {
|
|
44
|
-
tableContext.setCommaSeparatedCopy(e.currentTarget.checked);
|
|
45
|
-
};
|
|
46
|
-
</script>
|
|
47
|
-
|
|
48
|
-
<section class="side-panel-section">
|
|
49
|
-
<header class="side-panel-header">
|
|
50
|
-
<h2>Settings</h2>
|
|
51
|
-
</header>
|
|
52
|
-
<div class="side-panel-body">
|
|
53
|
-
<Checkbox
|
|
54
|
-
label="Compact"
|
|
55
|
-
size={Size.MediumSmall}
|
|
56
|
-
id={`is-compact-${tableContext.tableName}`}
|
|
57
|
-
value={tableContext.isCompact}
|
|
58
|
-
onchange={onCompactChange}
|
|
59
|
-
/>
|
|
60
|
-
<Checkbox
|
|
61
|
-
label="Single Click Editing"
|
|
62
|
-
size={Size.MediumSmall}
|
|
63
|
-
id={`single-click-editing-${tableContext.tableName}`}
|
|
64
|
-
value={tableContext.singleClickEditing}
|
|
65
|
-
onchange={onSingleClickChange}
|
|
66
|
-
/>
|
|
67
|
-
<Checkbox
|
|
68
|
-
label="Alternate Row Colours"
|
|
69
|
-
size={Size.MediumSmall}
|
|
70
|
-
id={`alternate-row-colours-${tableContext.tableName}`}
|
|
71
|
-
value={tableContext.alternateRowColours}
|
|
72
|
-
onchange={onAlternateRowColoursChange}
|
|
73
|
-
/>
|
|
74
|
-
<Checkbox
|
|
75
|
-
label="Change Colour on Hover"
|
|
76
|
-
size={Size.MediumSmall}
|
|
77
|
-
id={`change-colour-on-hover-${tableContext.tableName}`}
|
|
78
|
-
value={tableContext.changeColourOnHover}
|
|
79
|
-
onchange={onChangeColourOnHoverChange}
|
|
80
|
-
/>
|
|
81
|
-
{#if tableContext.allowCopy}
|
|
82
|
-
<Checkbox
|
|
83
|
-
label="Include Headers When Copying"
|
|
84
|
-
size={Size.MediumSmall}
|
|
85
|
-
id={`copy-with-headers-${tableContext.tableName}`}
|
|
86
|
-
value={tableContext.copyWithHeaders}
|
|
87
|
-
onchange={onCopyWithHeadersChange}
|
|
88
|
-
/>
|
|
89
|
-
<Checkbox
|
|
90
|
-
label="Copy as Comma Separated Values"
|
|
91
|
-
size={Size.MediumSmall}
|
|
92
|
-
id={`comma-separated-copy-${tableContext.tableName}`}
|
|
93
|
-
value={tableContext.commaSeparatedCopy}
|
|
94
|
-
onchange={onCommaSeparatedCopyChange}
|
|
95
|
-
/>
|
|
96
|
-
{/if}
|
|
97
|
-
</div>
|
|
98
|
-
</section>
|
|
99
|
-
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
3
|
+
<script
|
|
4
|
+
lang="ts"
|
|
5
|
+
generics="T extends object, IdType extends Primitive"
|
|
6
|
+
>
|
|
7
|
+
import Checkbox from '../../Checkbox.svelte';
|
|
8
|
+
import { Size } from '../../../Types/Internal/Size.js';
|
|
9
|
+
import { getContext } from 'svelte';
|
|
10
|
+
import type { Primitive } from '../Types/Context/TableInitOptions.js';
|
|
11
|
+
import { TableContext } from '../Types/Context/TableContext.svelte.js';
|
|
12
|
+
|
|
13
|
+
const tableContext = getContext<TableContext<T, IdType>>(TableContext.identifier);
|
|
14
|
+
|
|
15
|
+
const onCompactChange = (e: Event & { currentTarget: EventTarget & HTMLInputElement }) => {
|
|
16
|
+
tableContext.setIsCompact(e.currentTarget.checked);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const onSingleClickChange = (e: Event & { currentTarget: EventTarget & HTMLInputElement }) => {
|
|
20
|
+
tableContext.setSingleClickEditing(e.currentTarget.checked);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const onAlternateRowColoursChange = (
|
|
24
|
+
e: Event & { currentTarget: EventTarget & HTMLInputElement }
|
|
25
|
+
) => {
|
|
26
|
+
tableContext.setAlternateRowColours(e.currentTarget.checked);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const onChangeColourOnHoverChange = (
|
|
30
|
+
e: Event & { currentTarget: EventTarget & HTMLInputElement }
|
|
31
|
+
) => {
|
|
32
|
+
tableContext.setChangeColourOnHover(e.currentTarget.checked);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const onCopyWithHeadersChange = (
|
|
36
|
+
e: Event & { currentTarget: EventTarget & HTMLInputElement }
|
|
37
|
+
) => {
|
|
38
|
+
tableContext.setCopyWithHeaders(e.currentTarget.checked);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const onCommaSeparatedCopyChange = (
|
|
42
|
+
e: Event & { currentTarget: EventTarget & HTMLInputElement }
|
|
43
|
+
) => {
|
|
44
|
+
tableContext.setCommaSeparatedCopy(e.currentTarget.checked);
|
|
45
|
+
};
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<section class="side-panel-section">
|
|
49
|
+
<header class="side-panel-header">
|
|
50
|
+
<h2>Settings</h2>
|
|
51
|
+
</header>
|
|
52
|
+
<div class="side-panel-body">
|
|
53
|
+
<Checkbox
|
|
54
|
+
label="Compact"
|
|
55
|
+
size={Size.MediumSmall}
|
|
56
|
+
id={`is-compact-${tableContext.tableName}`}
|
|
57
|
+
value={tableContext.isCompact}
|
|
58
|
+
onchange={onCompactChange}
|
|
59
|
+
/>
|
|
60
|
+
<Checkbox
|
|
61
|
+
label="Single Click Editing"
|
|
62
|
+
size={Size.MediumSmall}
|
|
63
|
+
id={`single-click-editing-${tableContext.tableName}`}
|
|
64
|
+
value={tableContext.singleClickEditing}
|
|
65
|
+
onchange={onSingleClickChange}
|
|
66
|
+
/>
|
|
67
|
+
<Checkbox
|
|
68
|
+
label="Alternate Row Colours"
|
|
69
|
+
size={Size.MediumSmall}
|
|
70
|
+
id={`alternate-row-colours-${tableContext.tableName}`}
|
|
71
|
+
value={tableContext.alternateRowColours}
|
|
72
|
+
onchange={onAlternateRowColoursChange}
|
|
73
|
+
/>
|
|
74
|
+
<Checkbox
|
|
75
|
+
label="Change Colour on Hover"
|
|
76
|
+
size={Size.MediumSmall}
|
|
77
|
+
id={`change-colour-on-hover-${tableContext.tableName}`}
|
|
78
|
+
value={tableContext.changeColourOnHover}
|
|
79
|
+
onchange={onChangeColourOnHoverChange}
|
|
80
|
+
/>
|
|
81
|
+
{#if tableContext.allowCopy}
|
|
82
|
+
<Checkbox
|
|
83
|
+
label="Include Headers When Copying"
|
|
84
|
+
size={Size.MediumSmall}
|
|
85
|
+
id={`copy-with-headers-${tableContext.tableName}`}
|
|
86
|
+
value={tableContext.copyWithHeaders}
|
|
87
|
+
onchange={onCopyWithHeadersChange}
|
|
88
|
+
/>
|
|
89
|
+
<Checkbox
|
|
90
|
+
label="Copy as Comma Separated Values"
|
|
91
|
+
size={Size.MediumSmall}
|
|
92
|
+
id={`comma-separated-copy-${tableContext.tableName}`}
|
|
93
|
+
value={tableContext.commaSeparatedCopy}
|
|
94
|
+
onchange={onCommaSeparatedCopyChange}
|
|
95
|
+
/>
|
|
96
|
+
{/if}
|
|
97
|
+
</div>
|
|
98
|
+
</section>
|
|
99
|
+
|
|
100
100
|
<style>.side-panel-section {
|
|
101
101
|
display: flex;
|
|
102
102
|
flex-flow: column nowrap;
|
|
@@ -147,4 +147,4 @@
|
|
|
147
147
|
gap: 0.75rem;
|
|
148
148
|
align-items: center;
|
|
149
149
|
box-sizing: border-box;
|
|
150
|
-
}</style>
|
|
150
|
+
}</style>
|