@lavalogic/scoria 0.40.28 → 0.40.29
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/dist/Components/AccordionGroup.svelte +1 -1
- package/dist/Components/AlertModal.svelte +3 -2
- package/dist/Components/Base/Pagination.svelte +20 -12
- package/dist/Components/Base/PaginationProps.d.ts +5 -0
- package/dist/Components/Base/Snippets.svelte +4 -3
- package/dist/Components/Button.svelte +9 -8
- package/dist/Components/Checkbox.svelte +2 -2
- package/dist/Components/ChipsInput.svelte +6 -6
- package/dist/Components/CollapsibleCard.svelte +3 -3
- package/dist/Components/ConditionBuilder/ConditionBuilder.svelte +7 -6
- package/dist/Components/Contexts/ContextMenu.svelte +3 -2
- package/dist/Components/Contexts/Toast.svelte +4 -3
- package/dist/Components/Contexts/ToastContainer.svelte +6 -5
- package/dist/Components/Contexts/Tooltip.svelte +2 -2
- package/dist/Components/DataMatrixIcon.svelte +4 -3
- package/dist/Components/DateInput.svelte +25 -26
- package/dist/Components/DesktopModal.svelte +1 -1
- package/dist/Components/DimensionInput.svelte +30 -31
- package/dist/Components/DragMenu/DragMenuHolder.svelte +6 -6
- package/dist/Components/DragMenu/DraggableCard.svelte +3 -3
- package/dist/Components/FileCard.svelte +3 -2
- package/dist/Components/FileUpload.svelte +24 -25
- package/dist/Components/GridInput.svelte +2 -2
- package/dist/Components/HorizontalTabGroup.svelte +1 -1
- package/dist/Components/Icon.svelte +8 -2
- package/dist/Components/IconProps.d.ts +7 -0
- package/dist/Components/Icons.js +365 -365
- package/dist/Components/LoadingAnimation.svelte +50 -30
- package/dist/Components/LoadingAnimation.svelte.d.ts +1 -1
- package/dist/Components/LoadingModal.svelte +3 -2
- package/dist/Components/Modal.svelte +9 -9
- package/dist/Components/MultiSelect.svelte +37 -18
- package/dist/Components/MultiSelectCommonProps.d.ts +15 -1
- package/dist/Components/Nav/Nav.svelte +13 -13
- package/dist/Components/Nav/ServiceMenuItem.svelte +2 -0
- package/dist/Components/Nav/ServicesNav.svelte +6 -6
- package/dist/Components/NumberInput.svelte +25 -26
- package/dist/Components/PasswordInput.svelte +25 -24
- package/dist/Components/PopoverButton.svelte +8 -8
- package/dist/Components/QuerySelect.svelte +33 -16
- package/dist/Components/QuerySelectProps.d.ts +10 -1
- package/dist/Components/ResourceCalendar/ResourceCalendar.svelte +23 -22
- package/dist/Components/SidebarPanel.svelte +1 -1
- package/dist/Components/SingleSelect.svelte +30 -15
- package/dist/Components/SingleSelectCommonProps.d.ts +10 -1
- package/dist/Components/StepForm.svelte +6 -5
- package/dist/Components/Switch.svelte +5 -5
- package/dist/Components/Table/Body/QuickSearchCell.svelte +363 -351
- package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +5 -6
- package/dist/Components/Table/Body/Rows/ColumnList.svelte +3 -2
- package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +7 -6
- package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +6 -7
- package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +8 -7
- package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +11 -9
- package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +7 -8
- package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +5 -5
- package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +3 -2
- package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +3 -3
- package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +5 -4
- package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +9 -6
- package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +4 -4
- package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +4 -4
- package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +3 -3
- package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +9 -7
- package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +7 -6
- package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +6 -7
- package/dist/Components/Table/Body/Rows/TableRow.svelte +6 -5
- package/dist/Components/Table/Body/TableBody.svelte +2 -2
- package/dist/Components/Table/Headers/HighlightAllHeader.svelte +3 -2
- package/dist/Components/Table/Headers/SelectAllHeader.svelte +4 -3
- package/dist/Components/Table/Headers/TableHead.svelte +6 -5
- package/dist/Components/Table/Misc/ColumnPanel.svelte +5 -4
- package/dist/Components/Table/Misc/ColumnPanelModal.svelte +5 -4
- package/dist/Components/Table/Misc/FilterInput.svelte +23 -14
- package/dist/Components/Table/Misc/FilterPanel.svelte +12 -11
- package/dist/Components/Table/Misc/FilterPanelModal.svelte +3 -2
- package/dist/Components/Table/Misc/ShareViewModal.svelte +25 -15
- package/dist/Components/Table/Misc/SidePanel.svelte +2 -2
- package/dist/Components/Table/Misc/TableConfigurationModal.svelte +50 -40
- package/dist/Components/Table/Misc/TableFooter.svelte +18 -12
- package/dist/Components/Table/Misc/TableHorizontalBar.svelte +8 -7
- package/dist/Components/Table/Misc/TableSidebar.svelte +8 -7
- package/dist/Components/Table/Misc/TableViewDropdown.svelte +6 -2
- package/dist/Components/Table/Misc/ToolboxPanel.svelte +8 -7
- package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +9 -8
- package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +23 -14
- package/dist/Components/Table/Misc/numberDateFilterTypes.d.ts +7 -4
- package/dist/Components/Table/Misc/numberDateFilterTypes.js +27 -15
- package/dist/Components/Table/Misc/stringFilterTypes.d.ts +7 -3
- package/dist/Components/Table/Misc/stringFilterTypes.js +26 -16
- package/dist/Components/Table/NestedTable.svelte +4 -0
- package/dist/Components/Table/Table.svelte +19 -18
- package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +2 -1
- package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +2 -1
- package/dist/Components/Table/Types/Context/ClipboardState.svelte.js +3 -2
- package/dist/Components/Table/Types/Context/ViewState.svelte.js +5 -2
- package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +6 -0
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +8 -0
- package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +14 -0
- package/dist/Components/Table/Types/Public/CreateTableOptions.d.ts +3 -0
- package/dist/Components/Table/createTable.svelte.js +3 -0
- package/dist/Components/TextArea.svelte +24 -23
- package/dist/Components/TextInput.svelte +25 -26
- package/dist/Components/ThreeStateRadio.svelte +21 -16
- package/dist/Components/Touch/BoolCard.svelte +2 -2
- package/dist/Components/Touch/DateModal.svelte +5 -4
- package/dist/Components/Touch/EditCard.svelte +7 -7
- package/dist/Components/Touch/NumberKeyboard.svelte +3 -2
- package/dist/Components/Touch/NumberModal.svelte +4 -3
- package/dist/Components/Touch/PlusMinusCard.svelte +6 -5
- package/dist/Components/Touch/SelectModal.svelte +5 -4
- package/dist/Components/Touch/SummaryCard.svelte +9 -9
- package/dist/Components/Touch/TextAreaModal.svelte +4 -3
- package/dist/Components/Touch/TextModal.svelte +4 -3
- package/dist/Components/Touch/TouchCard.svelte +4 -3
- package/dist/Components/Touch/TouchModal.svelte +9 -8
- package/dist/Components/VerticalTabGroup.svelte +5 -4
- package/dist/Contexts/AlertContext.svelte.d.ts +8 -5
- package/dist/Contexts/AlertContext.svelte.js +10 -9
- package/dist/Helpers/Helpers.svelte.d.ts +23 -2
- package/dist/Helpers/Helpers.svelte.js +37 -9
- package/dist/Strings/locale.d.ts +19 -0
- package/dist/Strings/locale.js +27 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/scss/_mixins.scss +3406 -3392
- package/package.json +14 -7
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
<script
|
|
4
4
|
lang="ts"
|
|
5
5
|
generics="T extends object, IdType extends Primitive"
|
|
6
|
-
>import {
|
|
6
|
+
>import { m as i18n } from "../../../paraglide/messages.js";
|
|
7
|
+
import { devCatch } from "../../../Helpers/Helpers.svelte.js";
|
|
7
8
|
import { Colour } from "../../../scss/colours.js";
|
|
8
9
|
import { Size } from "../../../Types/Internal/Size.js";
|
|
9
10
|
import { getContext } from "svelte";
|
|
@@ -18,7 +19,7 @@ const backgroundColour = $derived.by(() => {
|
|
|
18
19
|
<div class="highlight-header">
|
|
19
20
|
<div class="wrapper">
|
|
20
21
|
<Action
|
|
21
|
-
label=
|
|
22
|
+
label={i18n['scoria.action.highlight_all_rows']()}
|
|
22
23
|
{backgroundColour}
|
|
23
24
|
hoverBackgroundColour={Colour['$brand-dark']}
|
|
24
25
|
size={Size.FillWidth}
|
|
@@ -3,16 +3,17 @@
|
|
|
3
3
|
<script
|
|
4
4
|
lang="ts"
|
|
5
5
|
generics="T extends object, IdType extends Primitive"
|
|
6
|
-
>import {
|
|
6
|
+
>import { m as i18n } from "../../../paraglide/messages.js";
|
|
7
|
+
import { getContext } from "svelte";
|
|
7
8
|
import { TableContext } from "../Types/Context/TableContext.svelte.js";
|
|
8
9
|
const tableContext = getContext(TableContext.identifier);
|
|
9
10
|
const checked = $derived(tableContext.dataRepo.data.length > 0 ? tableContext.allSelectedInCurrentPage : false);
|
|
10
11
|
</script>
|
|
11
12
|
|
|
12
13
|
<div class="checkbox-cell">
|
|
13
|
-
<label aria-label=
|
|
14
|
+
<label aria-label={i18n['scoria.label.select_all_rows']()}>
|
|
14
15
|
<input
|
|
15
|
-
aria-label=
|
|
16
|
+
aria-label={i18n['scoria.label.select_all_rows']()}
|
|
16
17
|
onchange={tableContext.selectAllInCurrentPage}
|
|
17
18
|
type="checkbox"
|
|
18
19
|
{checked}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
module
|
|
5
5
|
lang="ts"
|
|
6
6
|
>import Icon from "../../Icon.svelte";
|
|
7
|
+
import { m as i18n } from "../../../paraglide/messages.js";
|
|
7
8
|
import { TooltipContext } from "../../../Contexts/TooltipContext.svelte.js";
|
|
8
9
|
import { Delay } from "../../../Delay/Delay.js";
|
|
9
10
|
import { Colour } from "../../../scss/colours.js";
|
|
@@ -159,7 +160,7 @@ function showtooltip(e, columnDef) {
|
|
|
159
160
|
return;
|
|
160
161
|
}
|
|
161
162
|
tooltipContext.showTooltip({
|
|
162
|
-
text:
|
|
163
|
+
text: i18n["scoria.action.show_column"]({ name: typeof columnDef.header === "string" ? columnDef.header : columnDef.id }),
|
|
163
164
|
arrow: Side.Bottom,
|
|
164
165
|
delay: Delay.Default,
|
|
165
166
|
rect
|
|
@@ -263,7 +264,7 @@ const currentDropTargetId = $derived(currentDropTarget?.closest("[role=\"columnh
|
|
|
263
264
|
ondrop={onDrop}
|
|
264
265
|
>
|
|
265
266
|
{#if !header.isPlaceholder}
|
|
266
|
-
<div class="margin-
|
|
267
|
+
<div class="margin-inline-end">
|
|
267
268
|
{#if header.column.getCanSort()}
|
|
268
269
|
<button
|
|
269
270
|
onmouseenter={(e) => {
|
|
@@ -362,7 +363,7 @@ const currentDropTargetId = $derived(currentDropTarget?.closest("[role=\"columnh
|
|
|
362
363
|
position: relative;
|
|
363
364
|
min-width: 0;
|
|
364
365
|
color: #000000;
|
|
365
|
-
border-
|
|
366
|
+
border-inline-end: solid 1px #cbd4da;
|
|
366
367
|
border-bottom: solid 1px #cbd4da;
|
|
367
368
|
}
|
|
368
369
|
|
|
@@ -403,7 +404,7 @@ const currentDropTargetId = $derived(currentDropTarget?.closest("[role=\"columnh
|
|
|
403
404
|
z-index: 11;
|
|
404
405
|
}
|
|
405
406
|
|
|
406
|
-
.margin-
|
|
407
|
+
.margin-inline-end {
|
|
407
408
|
display: flex;
|
|
408
409
|
width: 100%;
|
|
409
410
|
height: 100%;
|
|
@@ -507,5 +508,5 @@ div.th::after {
|
|
|
507
508
|
.highlight-column {
|
|
508
509
|
width: 20px;
|
|
509
510
|
overflow: hidden;
|
|
510
|
-
border-
|
|
511
|
+
border-inline-end: solid 1px #cbd4da;
|
|
511
512
|
}</style>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<svelte:options runes />
|
|
2
2
|
|
|
3
|
-
<script lang="ts">import
|
|
3
|
+
<script lang="ts">import { m as i18n } from "../../../paraglide/messages.js";
|
|
4
|
+
import ColumnList from "../Body/Rows/ColumnList.svelte";
|
|
4
5
|
import TextInput from "../../TextInput.svelte";
|
|
5
6
|
import { Size } from "../../../Types/Internal/Size.js";
|
|
6
7
|
import TableViewDropdown from "./TableViewDropdown.svelte";
|
|
@@ -9,7 +10,7 @@ let searchValue = $state("");
|
|
|
9
10
|
|
|
10
11
|
<section class="side-panel-section">
|
|
11
12
|
<header class="side-panel-header">
|
|
12
|
-
<h2>
|
|
13
|
+
<h2>{i18n['scoria.action.modify_columns']()}</h2>
|
|
13
14
|
</header>
|
|
14
15
|
|
|
15
16
|
<div class="toolbar">
|
|
@@ -20,7 +21,7 @@ let searchValue = $state("");
|
|
|
20
21
|
<TextInput
|
|
21
22
|
bind:value={searchValue}
|
|
22
23
|
leftIcon={{ name: 'search', size: Size.Medium }}
|
|
23
|
-
placeholder=
|
|
24
|
+
placeholder={i18n['scoria.label.search_columns']()}
|
|
24
25
|
onkeydown={() => {
|
|
25
26
|
// Override the TextInput default `passthrough` keydown so the
|
|
26
27
|
// input does not blur on every alphanumeric keystroke (which
|
|
@@ -110,7 +111,7 @@ let searchValue = $state("");
|
|
|
110
111
|
/* Horizontal padding aligned with FilterPanel's `.side-panel-body`
|
|
111
112
|
so the column-list cards leave the same gutter before the panel's
|
|
112
113
|
right border as the filter chips do, and the SidePanel's
|
|
113
|
-
`border-
|
|
114
|
+
`border-inline-end` stays visible between the content and the toolbar
|
|
114
115
|
icons. Vertical padding is 0 because `.column-list` provides
|
|
115
116
|
its own 0.5rem padding (which doubles up to a 1.5rem gap from
|
|
116
117
|
the toolbar above and the footer below). */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<svelte:options runes />
|
|
2
2
|
|
|
3
|
-
<script lang="ts">import
|
|
3
|
+
<script lang="ts">import { m as i18n } from "../../../paraglide/messages.js";
|
|
4
|
+
import DesktopModal from "../../DesktopModal.svelte";
|
|
4
5
|
import ColumnList from "../Body/Rows/ColumnList.svelte";
|
|
5
6
|
import TextInput from "../../TextInput.svelte";
|
|
6
7
|
import { Size } from "../../../Types/Internal/Size.js";
|
|
@@ -9,16 +10,16 @@ let searchValue = $state("");
|
|
|
9
10
|
</script>
|
|
10
11
|
|
|
11
12
|
<DesktopModal
|
|
12
|
-
headerLabel=
|
|
13
|
+
headerLabel={i18n['scoria.action.modify_columns']()}
|
|
13
14
|
onclose={() => onclose?.()}
|
|
14
|
-
buttons={[{ label: '
|
|
15
|
+
buttons={[{ label: i18n['scoria.action.close'](), callback: () => onclose?.() }]}
|
|
15
16
|
>
|
|
16
17
|
<div class="flex">
|
|
17
18
|
<div class="column-panel top">
|
|
18
19
|
<TextInput
|
|
19
20
|
bind:value={searchValue}
|
|
20
21
|
leftIcon={{ name: 'search', size: Size.Medium }}
|
|
21
|
-
placeholder=
|
|
22
|
+
placeholder={i18n['scoria.label.search_columns']()}
|
|
22
23
|
onkeydown={() => {
|
|
23
24
|
// Override the TextInput default `passthrough` keydown so
|
|
24
25
|
// the input does not blur on every alphanumeric keystroke
|
|
@@ -13,6 +13,7 @@ import TextInput from "../../TextInput.svelte";
|
|
|
13
13
|
import DateModal from "../../Touch/DateModal.svelte";
|
|
14
14
|
import { hasQuery } from "../TableHelpers.svelte.js";
|
|
15
15
|
import { devCatch, isDateTuple, isNumericArray } from "../../../Helpers/Helpers.svelte.js";
|
|
16
|
+
import { m as i18n } from "../../../paraglide/messages.js";
|
|
16
17
|
import { getContext, onMount, untrack } from "svelte";
|
|
17
18
|
import { CheckboxDef } from "../Types/Columns/Definitions/Accessors/CheckboxDef.svelte.js";
|
|
18
19
|
import { DateInputDef } from "../Types/Columns/Definitions/Accessors/DateInputDef.svelte.js";
|
|
@@ -203,14 +204,16 @@ onMount(() => {
|
|
|
203
204
|
}
|
|
204
205
|
}
|
|
205
206
|
});
|
|
207
|
+
const numberDateTypes = $derived(numberDateFilterTypes());
|
|
208
|
+
const stringTypes = $derived(stringFilterTypes());
|
|
206
209
|
const filterMode = $derived(tableContext.paginationRepo?.filterModes.get(def.id));
|
|
207
210
|
const selectedNumberFilterType = $derived.by(() => {
|
|
208
211
|
const value = filterMode ?? NumberDateFilterMode.In;
|
|
209
|
-
return
|
|
212
|
+
return numberDateTypes.find((it) => it.value === value) ?? null;
|
|
210
213
|
});
|
|
211
214
|
const selectedStringFilterType = $derived.by(() => {
|
|
212
215
|
const value = filterMode ?? StringFilterMode.Contains;
|
|
213
|
-
return
|
|
216
|
+
return stringTypes.find((it) => it.value === value) ?? null;
|
|
214
217
|
});
|
|
215
218
|
const inputId = $derived(`${tableContext.tableName}-${def.id}-filter-type`);
|
|
216
219
|
let showFromDateModal = $state(false);
|
|
@@ -278,19 +281,23 @@ function generateOnChangePrimitive(_label) {
|
|
|
278
281
|
<Button
|
|
279
282
|
onclick={() => {
|
|
280
283
|
showFromDateModal = true;
|
|
281
|
-
}}>
|
|
284
|
+
}}>{i18n['scoria.label.filter_date_from']({
|
|
285
|
+
date: fromDate?.toLocaleDateString() ?? i18n['scoria.label.any_date'](),
|
|
286
|
+
})}</Button
|
|
282
287
|
>
|
|
283
288
|
|
|
284
289
|
<Button
|
|
285
290
|
onclick={() => {
|
|
286
291
|
showToDateModal = true;
|
|
287
|
-
}}>
|
|
292
|
+
}}>{i18n['scoria.label.filter_date_to']({
|
|
293
|
+
date: toDate?.toLocaleDateString() ?? i18n['scoria.label.any_date'](),
|
|
294
|
+
})}</Button
|
|
288
295
|
>
|
|
289
296
|
</div>
|
|
290
297
|
|
|
291
298
|
{#if showFromDateModal}
|
|
292
299
|
<DateModal
|
|
293
|
-
header=
|
|
300
|
+
header={i18n['scoria.label.edit_date_from']()}
|
|
294
301
|
value={fromDate}
|
|
295
302
|
cancelEditing={() => {
|
|
296
303
|
showFromDateModal = false;
|
|
@@ -305,7 +312,7 @@ function generateOnChangePrimitive(_label) {
|
|
|
305
312
|
{#if showToDateModal}
|
|
306
313
|
<DateModal
|
|
307
314
|
inclusive
|
|
308
|
-
header=
|
|
315
|
+
header={i18n['scoria.label.edit_date_to']()}
|
|
309
316
|
value={toDate}
|
|
310
317
|
cancelEditing={() => {
|
|
311
318
|
showToDateModal = false;
|
|
@@ -343,11 +350,11 @@ function generateOnChangePrimitive(_label) {
|
|
|
343
350
|
collapseSelection
|
|
344
351
|
/>
|
|
345
352
|
{:catch e}
|
|
346
|
-
<span>
|
|
353
|
+
<span>{i18n['scoria.text.error_retrieving_options']({ message: e.message })}</span>
|
|
347
354
|
<Button
|
|
348
355
|
onclick={() => {
|
|
349
356
|
retryOptionsPromise();
|
|
350
|
-
}}>
|
|
357
|
+
}}>{i18n['scoria.action.retry_load']()}</Button
|
|
351
358
|
>
|
|
352
359
|
{/await}
|
|
353
360
|
</div>
|
|
@@ -433,7 +440,7 @@ function generateOnChangePrimitive(_label) {
|
|
|
433
440
|
tableContext.paginationRepo?.filterBy(def.id, value);
|
|
434
441
|
}}
|
|
435
442
|
/>
|
|
436
|
-
|
|
443
|
+
{i18n['scoria.action.no']()}
|
|
437
444
|
</label>
|
|
438
445
|
<label>
|
|
439
446
|
<input
|
|
@@ -444,7 +451,7 @@ function generateOnChangePrimitive(_label) {
|
|
|
444
451
|
tableContext.paginationRepo?.filterBy(def.id, value);
|
|
445
452
|
}}
|
|
446
453
|
/>
|
|
447
|
-
|
|
454
|
+
{i18n['scoria.label.any']()}
|
|
448
455
|
</label>
|
|
449
456
|
<label>
|
|
450
457
|
<input
|
|
@@ -455,7 +462,7 @@ function generateOnChangePrimitive(_label) {
|
|
|
455
462
|
tableContext.paginationRepo?.filterBy(def.id, value);
|
|
456
463
|
}}
|
|
457
464
|
/>
|
|
458
|
-
|
|
465
|
+
{i18n['scoria.action.yes']()}
|
|
459
466
|
</label>
|
|
460
467
|
</div>
|
|
461
468
|
{:else if isNumeric}
|
|
@@ -464,7 +471,8 @@ function generateOnChangePrimitive(_label) {
|
|
|
464
471
|
<SingleSelect
|
|
465
472
|
{label}
|
|
466
473
|
name="Filter Type"
|
|
467
|
-
|
|
474
|
+
placeholder={i18n['scoria.label.select_filter_type']()}
|
|
475
|
+
options={numberDateTypes}
|
|
468
476
|
labelProp="label"
|
|
469
477
|
valueProp="value"
|
|
470
478
|
valueAsObject
|
|
@@ -505,7 +513,7 @@ function generateOnChangePrimitive(_label) {
|
|
|
505
513
|
e.stopPropagation();
|
|
506
514
|
}}
|
|
507
515
|
/>
|
|
508
|
-
<span>
|
|
516
|
+
<span>{i18n['scoria.label.between_and']()}</span>
|
|
509
517
|
<NumberInput
|
|
510
518
|
id={inputId}
|
|
511
519
|
bind:value={valueMax}
|
|
@@ -538,9 +546,10 @@ function generateOnChangePrimitive(_label) {
|
|
|
538
546
|
<div class="left">
|
|
539
547
|
<SingleSelect
|
|
540
548
|
name="Filter Type"
|
|
549
|
+
placeholder={i18n['scoria.label.select_filter_type']()}
|
|
541
550
|
valueAsObject
|
|
542
551
|
{label}
|
|
543
|
-
options={
|
|
552
|
+
options={stringTypes}
|
|
544
553
|
labelProp="label"
|
|
545
554
|
valueProp="value"
|
|
546
555
|
value={selectedStringFilterType}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import TextInput from "../../TextInput.svelte";
|
|
8
8
|
import { Colour, ColourSet } from "../../../scss/colours.js";
|
|
9
9
|
import { Size } from "../../../Types/Internal/Size.js";
|
|
10
|
+
import { m as i18n } from "../../../paraglide/messages.js";
|
|
10
11
|
import { SvelteSet } from "svelte/reactivity";
|
|
11
12
|
import { getContext } from "svelte";
|
|
12
13
|
import { TableContext } from "../Types/Context/TableContext.svelte.js";
|
|
@@ -105,7 +106,7 @@ function noopKeydown(_e) {
|
|
|
105
106
|
|
|
106
107
|
<section class="side-panel-section">
|
|
107
108
|
<header class="side-panel-header">
|
|
108
|
-
<h2>
|
|
109
|
+
<h2>{i18n['scoria.action.advanced_filter']()}</h2>
|
|
109
110
|
</header>
|
|
110
111
|
|
|
111
112
|
<div class="toolbar">
|
|
@@ -115,8 +116,8 @@ function noopKeydown(_e) {
|
|
|
115
116
|
<TableViewDropdown kind="filter" />
|
|
116
117
|
<div class="quick-find">
|
|
117
118
|
<TextInput
|
|
118
|
-
labelTop=
|
|
119
|
-
placeholder=
|
|
119
|
+
labelTop={i18n['scoria.label.quick_find_filter']()}
|
|
120
|
+
placeholder={i18n['scoria.label.filter_placeholder']()}
|
|
120
121
|
bind:value={quickFindValue}
|
|
121
122
|
rightIcon={{ name: 'search', size: Size.Medium }}
|
|
122
123
|
onkeydown={noopKeydown}
|
|
@@ -126,10 +127,10 @@ function noopKeydown(_e) {
|
|
|
126
127
|
|
|
127
128
|
<div class="side-panel-body">
|
|
128
129
|
{#if filterableDefs.length === 0}
|
|
129
|
-
<p class="empty">
|
|
130
|
+
<p class="empty">{i18n['scoria.text.no_filterable_columns']()}</p>
|
|
130
131
|
{:else if matchingDefs.length === 0}
|
|
131
132
|
<p class="empty">
|
|
132
|
-
|
|
133
|
+
{i18n['scoria.text.no_filters_match']({ query: quickFindValue })}
|
|
133
134
|
</p>
|
|
134
135
|
{:else}
|
|
135
136
|
<div class="groups">
|
|
@@ -282,8 +283,8 @@ p.empty {
|
|
|
282
283
|
(combined with the `.group` `overflow: visible` change) the
|
|
283
284
|
header's blue band would leak past the parent's rounded
|
|
284
285
|
corners. */
|
|
285
|
-
border-
|
|
286
|
-
border-
|
|
286
|
+
border-start-start-radius: 4px;
|
|
287
|
+
border-start-end-radius: 4px;
|
|
287
288
|
}
|
|
288
289
|
.group-header h3 {
|
|
289
290
|
margin: 0;
|
|
@@ -296,15 +297,15 @@ p.empty {
|
|
|
296
297
|
border-bottom: none;
|
|
297
298
|
/* When collapsed the header is the only visible row, so it
|
|
298
299
|
has to round all four corners to follow the parent outline. */
|
|
299
|
-
border-
|
|
300
|
-
border-
|
|
300
|
+
border-end-start-radius: 4px;
|
|
301
|
+
border-end-end-radius: 4px;
|
|
301
302
|
}
|
|
302
303
|
|
|
303
304
|
/* Round the bottom of the body so its visual edge follows the
|
|
304
305
|
parent's rounded outline once `overflow: hidden` is gone. */
|
|
305
306
|
.group:not(.collapsed) > .group-body {
|
|
306
|
-
border-
|
|
307
|
-
border-
|
|
307
|
+
border-end-start-radius: 4px;
|
|
308
|
+
border-end-end-radius: 4px;
|
|
308
309
|
}
|
|
309
310
|
|
|
310
311
|
.group-body {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
module
|
|
6
6
|
>import DesktopModal from "../../DesktopModal.svelte";
|
|
7
7
|
import { cssLength } from "../../../Helpers/Helpers.svelte.js";
|
|
8
|
+
import { m as i18n } from "../../../paraglide/messages.js";
|
|
8
9
|
import FilterPanel from "./FilterPanel.svelte";
|
|
9
10
|
</script>
|
|
10
11
|
|
|
@@ -13,9 +14,9 @@ import FilterPanel from "./FilterPanel.svelte";
|
|
|
13
14
|
|
|
14
15
|
<DesktopModal
|
|
15
16
|
width={cssLength('800px')}
|
|
16
|
-
headerLabel=
|
|
17
|
+
headerLabel={i18n['scoria.label.filter_by']()}
|
|
17
18
|
onclose={() => onclose?.()}
|
|
18
|
-
buttons={[{ label: '
|
|
19
|
+
buttons={[{ label: i18n['scoria.action.close'](), callback: () => onclose?.() }]}
|
|
19
20
|
>
|
|
20
21
|
<div class="flex">
|
|
21
22
|
<FilterPanel />
|
|
@@ -9,6 +9,7 @@ import Icon from "../../Icon.svelte";
|
|
|
9
9
|
import InfoAlert from "../../InfoAlert.svelte";
|
|
10
10
|
import MultiSelect from "../../MultiSelect.svelte";
|
|
11
11
|
import { cssLength } from "../../../Helpers/Helpers.svelte.js";
|
|
12
|
+
import { m as i18n } from "../../../paraglide/messages.js";
|
|
12
13
|
import { ColourSet } from "../../../scss/colours.js";
|
|
13
14
|
import { Size } from "../../../Types/Internal/Size.js";
|
|
14
15
|
import { Variant } from "../../../Types/Internal/Variant.js";
|
|
@@ -81,7 +82,7 @@ onMount(() => {
|
|
|
81
82
|
initialIds = new Set(initial.map((u) => u.id));
|
|
82
83
|
const adapter = tableContext.remoteLayouts;
|
|
83
84
|
if (!adapter) {
|
|
84
|
-
errorMessage = "
|
|
85
|
+
errorMessage = i18n["scoria.message.sharing_unavailable"]();
|
|
85
86
|
return;
|
|
86
87
|
}
|
|
87
88
|
loadingUsers = true;
|
|
@@ -92,7 +93,10 @@ onMount(() => {
|
|
|
92
93
|
allUsers = users.filter((u) => u.id !== view.ownerUserId);
|
|
93
94
|
}).catch((e) => {
|
|
94
95
|
console.error("[ShareViewModal] listUsers failed:", e);
|
|
95
|
-
errorMessage = e instanceof Error ?
|
|
96
|
+
errorMessage = e instanceof Error ? i18n["scoria.message.error_detail"]({
|
|
97
|
+
message: i18n["scoria.message.load_users_failed"](),
|
|
98
|
+
detail: e.message
|
|
99
|
+
}) : i18n["scoria.message.load_users_failed"]();
|
|
96
100
|
}).finally(() => {
|
|
97
101
|
loadingUsers = false;
|
|
98
102
|
});
|
|
@@ -105,7 +109,7 @@ function removeFromSelection(userId) {
|
|
|
105
109
|
async function save() {
|
|
106
110
|
const adapter = tableContext.remoteLayouts;
|
|
107
111
|
if (!adapter) {
|
|
108
|
-
errorMessage = "
|
|
112
|
+
errorMessage = i18n["scoria.message.sharing_unavailable"]();
|
|
109
113
|
return;
|
|
110
114
|
}
|
|
111
115
|
if (!dirty) {
|
|
@@ -145,7 +149,10 @@ async function save() {
|
|
|
145
149
|
onclose();
|
|
146
150
|
} catch (e) {
|
|
147
151
|
console.error("[ShareViewModal] save failed:", e);
|
|
148
|
-
errorMessage = e instanceof Error ?
|
|
152
|
+
errorMessage = e instanceof Error ? i18n["scoria.message.error_detail"]({
|
|
153
|
+
message: i18n["scoria.message.update_sharing_failed"](),
|
|
154
|
+
detail: e.message
|
|
155
|
+
}) : i18n["scoria.message.update_sharing_failed"]();
|
|
149
156
|
} finally {
|
|
150
157
|
saving = false;
|
|
151
158
|
}
|
|
@@ -153,8 +160,10 @@ async function save() {
|
|
|
153
160
|
</script>
|
|
154
161
|
|
|
155
162
|
<DesktopModal
|
|
156
|
-
headerLabel={
|
|
157
|
-
headerSubtitle={
|
|
163
|
+
headerLabel={i18n['scoria.label.share_header']({ name: view.name })}
|
|
164
|
+
headerSubtitle={view.kind === 'filter'
|
|
165
|
+
? i18n['scoria.text.share_filter_subtitle']()
|
|
166
|
+
: i18n['scoria.text.share_layout_subtitle']()}
|
|
158
167
|
onclose={() => {
|
|
159
168
|
if (!saving) {
|
|
160
169
|
onclose();
|
|
@@ -164,7 +173,7 @@ async function save() {
|
|
|
164
173
|
minWidth={cssLength('32rem')}
|
|
165
174
|
buttons={[
|
|
166
175
|
{
|
|
167
|
-
label: '
|
|
176
|
+
label: i18n['scoria.action.cancel'](),
|
|
168
177
|
callback: () => {
|
|
169
178
|
if (!saving) {
|
|
170
179
|
onclose();
|
|
@@ -173,7 +182,7 @@ async function save() {
|
|
|
173
182
|
disabled: saving,
|
|
174
183
|
},
|
|
175
184
|
{
|
|
176
|
-
label: saving ? '
|
|
185
|
+
label: saving ? i18n['scoria.action.saving']() : i18n['scoria.action.save'](),
|
|
177
186
|
callback: () => {
|
|
178
187
|
void save();
|
|
179
188
|
},
|
|
@@ -198,11 +207,12 @@ async function save() {
|
|
|
198
207
|
|
|
199
208
|
<div class="picker">
|
|
200
209
|
{#if loadingUsers && allUsers === null}
|
|
201
|
-
<InfoAlert>
|
|
210
|
+
<InfoAlert>{i18n['scoria.message.loading_users']()}</InfoAlert>
|
|
202
211
|
{:else if allUsers !== null}
|
|
203
212
|
<MultiSelect
|
|
204
|
-
label=
|
|
213
|
+
label={i18n['scoria.label.users']()}
|
|
205
214
|
name="User"
|
|
215
|
+
placeholder={i18n['scoria.label.select_user']()}
|
|
206
216
|
options={allUsers as Array<DatatableViewUser>}
|
|
207
217
|
labelProp="displayName"
|
|
208
218
|
valueProp="id"
|
|
@@ -217,9 +227,9 @@ async function save() {
|
|
|
217
227
|
|
|
218
228
|
{#if selected.length === 0}
|
|
219
229
|
<InfoAlert>
|
|
220
|
-
|
|
221
|
-
? '
|
|
222
|
-
: '
|
|
230
|
+
{view.kind === 'filter'
|
|
231
|
+
? i18n['scoria.text.no_users_filter']()
|
|
232
|
+
: i18n['scoria.text.no_users_layout']()}
|
|
223
233
|
</InfoAlert>
|
|
224
234
|
{:else}
|
|
225
235
|
<ul class="user-card-list">
|
|
@@ -240,7 +250,7 @@ async function save() {
|
|
|
240
250
|
reserved no-ops in v1 (see `DatatableView` DTO
|
|
241
251
|
JSDoc); scoria never sets them.
|
|
242
252
|
-->
|
|
243
|
-
<span class="permission-pill">
|
|
253
|
+
<span class="permission-pill">{i18n['scoria.label.subscriber']()}</span>
|
|
244
254
|
<Button
|
|
245
255
|
variant={Variant.Secondary}
|
|
246
256
|
size={Size.MediumSmall}
|
|
@@ -249,7 +259,7 @@ async function save() {
|
|
|
249
259
|
disabled={saving}
|
|
250
260
|
onclick={() => {
|
|
251
261
|
removeFromSelection(user.id);
|
|
252
|
-
}}>
|
|
262
|
+
}}>{i18n['scoria.action.remove']()}</Button
|
|
253
263
|
>
|
|
254
264
|
</div>
|
|
255
265
|
</li>
|
|
@@ -37,11 +37,11 @@ const slideDuration = $derived(reducedMotion.matches ? 0 : Delay.Default);
|
|
|
37
37
|
transition: width 0.2s ease-out;
|
|
38
38
|
}
|
|
39
39
|
.side-panel.left {
|
|
40
|
-
border-
|
|
40
|
+
border-inline-start: solid 2px #cbd4da;
|
|
41
41
|
order: 1;
|
|
42
42
|
}
|
|
43
43
|
.side-panel.right {
|
|
44
|
-
border-
|
|
44
|
+
border-inline-end: solid 2px #cbd4da;
|
|
45
45
|
}
|
|
46
46
|
.side-panel .side-content {
|
|
47
47
|
display: flex;
|