@lavalogic/scoria 0.40.31 → 0.40.33

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.
Files changed (137) hide show
  1. package/README.md +58 -58
  2. package/dist/Components/AccordionGroup.svelte +28 -28
  3. package/dist/Components/AccordionGroupButton.svelte +60 -60
  4. package/dist/Components/Action.svelte +48 -48
  5. package/dist/Components/AlertModal.svelte +102 -102
  6. package/dist/Components/Base/ContextWrapper.svelte +45 -45
  7. package/dist/Components/Base/Pagination.svelte +135 -135
  8. package/dist/Components/Base/Snippets.svelte +25 -25
  9. package/dist/Components/BigRadioSet.svelte +34 -34
  10. package/dist/Components/Bubble.svelte +38 -38
  11. package/dist/Components/Button.svelte +83 -83
  12. package/dist/Components/Checkbox.svelte +71 -71
  13. package/dist/Components/CollapsibleCard.svelte +59 -59
  14. package/dist/Components/CollapsibleMenuGroup.svelte +43 -43
  15. package/dist/Components/ConditionBuilder/ConditionBuilder.svelte +101 -101
  16. package/dist/Components/Contexts/ContextMenu.svelte +76 -76
  17. package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
  18. package/dist/Components/Contexts/ContextMenuOption.svelte +38 -38
  19. package/dist/Components/Contexts/Toast.svelte +71 -71
  20. package/dist/Components/Contexts/ToastContainer.svelte +34 -34
  21. package/dist/Components/Contexts/Tooltip.svelte +32 -32
  22. package/dist/Components/DataMatrixIcon.svelte +37 -37
  23. package/dist/Components/DateInput.svelte +80 -80
  24. package/dist/Components/DatePicker.svelte +86 -86
  25. package/dist/Components/DesktopModal.svelte +65 -65
  26. package/dist/Components/Dial.svelte +35 -35
  27. package/dist/Components/DimensionInput.svelte +95 -95
  28. package/dist/Components/DragMenu/DragMenuHolder.svelte +53 -53
  29. package/dist/Components/DragMenu/DraggableCard.svelte +49 -49
  30. package/dist/Components/FileCard.svelte +18 -18
  31. package/dist/Components/FileUpload.svelte +115 -115
  32. package/dist/Components/GridInput.svelte +123 -123
  33. package/dist/Components/GridInputSet.svelte +21 -21
  34. package/dist/Components/HorizontalTabGroup.svelte +54 -54
  35. package/dist/Components/HorizontalTabGroupButton.svelte +32 -32
  36. package/dist/Components/Icon.svelte +68 -68
  37. package/dist/Components/Icons.d.ts +3 -3
  38. package/dist/Components/Icons.js +11 -11
  39. package/dist/Components/InfoAlert.svelte +32 -32
  40. package/dist/Components/LoadingAnimation.svelte +228 -227
  41. package/dist/Components/LoadingModal.svelte +19 -19
  42. package/dist/Components/LoadingOverlay.svelte +20 -20
  43. package/dist/Components/Modal.svelte +127 -127
  44. package/dist/Components/MultiSelect.svelte +126 -126
  45. package/dist/Components/Nav/Nav.svelte +71 -71
  46. package/dist/Components/Nav/NavServiceMenuList.svelte +37 -37
  47. package/dist/Components/Nav/NavTab.svelte +46 -46
  48. package/dist/Components/Nav/ServiceMenuItem.svelte +62 -62
  49. package/dist/Components/Nav/ServicesNav.svelte +50 -50
  50. package/dist/Components/NumberInput.svelte +98 -98
  51. package/dist/Components/OptionCards.svelte +58 -58
  52. package/dist/Components/PageHeading.svelte +21 -21
  53. package/dist/Components/PasswordInput.svelte +61 -61
  54. package/dist/Components/PopoverButton.svelte +53 -53
  55. package/dist/Components/Portal.svelte +7 -7
  56. package/dist/Components/ProgressBubble.svelte +42 -42
  57. package/dist/Components/QuerySelect.svelte +102 -102
  58. package/dist/Components/ResourceCalendar/ResourceCalendar.svelte +241 -241
  59. package/dist/Components/SidebarPanel.svelte +32 -32
  60. package/dist/Components/SingleSelect.svelte +122 -122
  61. package/dist/Components/StepButton.svelte +48 -48
  62. package/dist/Components/StepForm.svelte +58 -58
  63. package/dist/Components/Switch.svelte +43 -43
  64. package/dist/Components/Table/ARCHITECTURE.md +298 -298
  65. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +30 -30
  66. package/dist/Components/Table/Body/Rows/ColumnList.svelte +24 -24
  67. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +165 -165
  68. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +13 -13
  69. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +120 -120
  70. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +81 -81
  71. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +92 -92
  72. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +110 -110
  73. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +54 -54
  74. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +35 -35
  75. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +64 -64
  76. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +82 -82
  77. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +88 -88
  78. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +90 -90
  79. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +96 -96
  80. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +71 -71
  81. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +124 -124
  82. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +91 -91
  83. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +88 -88
  84. package/dist/Components/Table/Body/Rows/TableRow.svelte +127 -127
  85. package/dist/Components/Table/Body/TableBody.svelte +92 -92
  86. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +25 -25
  87. package/dist/Components/Table/Headers/SelectAllHeader.svelte +20 -20
  88. package/dist/Components/Table/Headers/TableHead.svelte +175 -175
  89. package/dist/Components/Table/Misc/ColumnPanel.svelte +32 -32
  90. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +29 -29
  91. package/dist/Components/Table/Misc/FilterInput.svelte +326 -326
  92. package/dist/Components/Table/Misc/FilterPanel.svelte +79 -79
  93. package/dist/Components/Table/Misc/FilterPanelModal.svelte +21 -21
  94. package/dist/Components/Table/Misc/ShareViewModal.svelte +118 -118
  95. package/dist/Components/Table/Misc/SidePanel.svelte +24 -24
  96. package/dist/Components/Table/Misc/TableConfigurationModal.svelte +318 -318
  97. package/dist/Components/Table/Misc/TableFooter.svelte +201 -201
  98. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +112 -112
  99. package/dist/Components/Table/Misc/TableSidebar.svelte +116 -116
  100. package/dist/Components/Table/Misc/TableViewDropdown.svelte +25 -25
  101. package/dist/Components/Table/Misc/ToolboxPanel.svelte +60 -60
  102. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +63 -63
  103. package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +101 -101
  104. package/dist/Components/Table/NestedTable.svelte +29 -29
  105. package/dist/Components/Table/Table.svelte +140 -140
  106. package/dist/Components/Test/TestContextConsumer.svelte +8 -8
  107. package/dist/Components/TextArea.svelte +92 -90
  108. package/dist/Components/TextInput.svelte +128 -117
  109. package/dist/Components/ThreeStateRadio.svelte +101 -101
  110. package/dist/Components/Touch/BoolCard.svelte +27 -27
  111. package/dist/Components/Touch/DateModal.svelte +98 -98
  112. package/dist/Components/Touch/EditCard.svelte +44 -44
  113. package/dist/Components/Touch/InfoCard.svelte +25 -25
  114. package/dist/Components/Touch/InfoTextCard.svelte +22 -22
  115. package/dist/Components/Touch/ModalExplanation.svelte +13 -13
  116. package/dist/Components/Touch/NumberKeyboard.svelte +81 -81
  117. package/dist/Components/Touch/NumberModal.svelte +49 -49
  118. package/dist/Components/Touch/PlusMinusCard.svelte +40 -40
  119. package/dist/Components/Touch/SelectModal.svelte +86 -86
  120. package/dist/Components/Touch/SummaryCard.svelte +74 -74
  121. package/dist/Components/Touch/TextAreaModal.svelte +53 -53
  122. package/dist/Components/Touch/TextModal.svelte +56 -56
  123. package/dist/Components/Touch/TouchCard.svelte +28 -28
  124. package/dist/Components/Touch/TouchModal.svelte +141 -141
  125. package/dist/Components/Touch/UtilityButton.svelte +63 -63
  126. package/dist/Components/VerticalTabGroup.svelte +38 -38
  127. package/dist/Components/VerticalTabGroupButton.svelte +46 -46
  128. package/dist/Helpers/Datamatrix.d.ts +19 -19
  129. package/dist/Helpers/Datamatrix.js +291 -291
  130. package/dist/Types/Examples/ExampleModal.svelte +27 -27
  131. package/dist/paraglide/README.md +1 -1
  132. package/dist/scss/_basics.scss +12 -12
  133. package/dist/scss/_colours.scss +140 -140
  134. package/dist/scss/_motion.scss +57 -57
  135. package/dist/scss/_sizing.scss +85 -85
  136. package/dist/scss/_transitions.scss +8 -8
  137. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- module
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ module
6
6
  >import Action from "../../Action.svelte";
7
7
  import Button from "../../Button.svelte";
8
8
  import Icon from "../../Icon.svelte";
@@ -18,11 +18,11 @@ import { Variant } from "../../../Types/Internal/Variant.js";
18
18
  import { getContext, tick } from "svelte";
19
19
  import { TableContext } from "../Types/Context/TableContext.svelte.js";
20
20
  import { FilterType } from "../Types/Filtering/FilterType.js";
21
- </script>
22
-
23
- <script
24
- lang="ts"
25
- generics="T extends object, IdType extends Primitive"
21
+ </script>
22
+
23
+ <script
24
+ lang="ts"
25
+ generics="T extends object, IdType extends Primitive"
26
26
  >let { onkeydown } = $props();
27
27
  const tableContext = getContext(TableContext.identifier);
28
28
  const alertContext = getContext(AlertContext.identifier);
@@ -147,196 +147,196 @@ $effect(() => {
147
147
  });
148
148
  let hasNoSelectedItems = $derived(tableContext.selectedItems.size == 0);
149
149
  let selectedItemIconColour = $derived(hasNoSelectedItems ? Colour["$ui-blue-4"] : Colour["$ui-blue-10"]);
150
- </script>
151
-
152
- <!-- svelte-ignore a11y_no_static_element_interactions -->
153
- <div
154
- class="spread_row bottom_row"
155
- class:limited={tableContext.limitFooter}
156
- onkeydown={(e) => {
157
- e.stopPropagation();
158
- onkeydown?.(e);
159
- }}
160
- >
161
- <div class="block">
162
- <span
163
- >{tableContext.dataRepo.filterType === FilterType.Real
164
- ? i18n['scoria.text.actioning_loaded']()
165
- : i18n['scoria.text.actioning_all']()}</span
166
- >
167
- </div>
168
-
169
- <div class="block">
170
- <span
171
- >{i18n['scoria.text.records_selected']({ count: tableContext.selectedItems.size })}</span
172
- >
173
- <Action
174
- size={Size.FillHeight}
175
- disabled={hasNoSelectedItems}
176
- colourSet={ColourSet.Auxiliary}
177
- icon={{
178
- name: 'assessment',
179
- size: Size.Medium,
180
- colour: tableContext.showSelectedOnly ? Colour['$brand-primary'] : selectedItemIconColour,
181
- }}
182
- onclick={() => {
183
- tableContext.showSelectedOnly = !tableContext.showSelectedOnly;
184
- }}
185
- />
186
- <Action
187
- size={Size.FillHeight}
188
- disabled={hasNoSelectedItems}
189
- colourSet={ColourSet.Auxiliary}
190
- icon={{
191
- name: 'eraser',
192
- size: Size.Medium,
193
- colour: selectedItemIconColour,
194
- }}
195
- onclick={() => {
196
- alertContext.prompt(i18n['scoria.prompt.clear_selection'](), {
197
- onYes: () => {
198
- tableContext.showSelectedOnly = false;
199
- tableContext.resetSelectedItems();
200
- },
201
- });
202
- }}
203
- />
204
- </div>
205
-
206
- <div class="block">
207
- <span>{i18n['scoria.text.row_count']({ count: tableContext.paginationRepo?.totalRows ?? 0 })}</span>
208
- </div>
209
-
210
- {#if tableContext.paginationRepo}
211
- <!-- forceUpwards={!nested} -->
212
- <div class="block records-per-page">
213
- <span>{i18n['scoria.label.records_per_page']()}</span>
214
- <!-- label="Records per Page:" -->
215
- <SingleSelect
216
- lazyDropdown
217
- name="Page Size"
218
- placeholder={i18n['scoria.label.select_page_size']()}
219
- borderless
220
- creatable
221
- createFilter={(value: string) => {
222
- const parsed = parseInt(value);
223
- return !(parsed >= 1 && parsed <= 500);
224
- }}
225
- onCreateOption={(newSize: SelectOption<number>) => {
226
- newSize.value = Math.max(Math.min(newSize.value, 500), 1);
227
-
228
- const found = pageSizes.find((size) => size.value === newSize.value);
229
-
230
- if (found) {
231
- currentSize = found;
232
- } else {
233
- createOption(newSize);
234
- }
235
-
236
- tableContext.paginationRepo?.setPageSize(newSize.value);
237
- }}
238
- value={currentSize}
239
- options={pageSizes}
240
- labelProp="label"
241
- valueProp="value"
242
- valueAsObject
243
- onchange={(newSelection: SelectOption<number> | null) => {
244
- if (newSelection?.value) {
245
- tableContext.paginationRepo?.setPageSize(newSelection.value);
246
- }
247
- }}
248
- />
249
- </div>
250
-
251
- <div class="spacer"></div>
252
- <!-- {/* TODO switch to a lib element for this */} -->
253
-
254
- <div class="scrollable">
255
- <div class="block">
256
- <Icon
257
- name="paper"
258
- colour={Colour['$ui-blue-6']}
259
- />
260
- <span>{i18n['scoria.text.page_count']({ count: tableContext.lastPage })}</span>
261
- </div>
262
-
263
- <div class="block">
264
- <label for="{tableContext.tableName}-jump-to-page"
265
- ><Icon
266
- name="arrow-move-horizontal"
267
- colour={Colour['$ui-blue-6']}
268
- /></label
269
- >
270
-
271
- <label for="{tableContext.tableName}-jump-to-page">{i18n['scoria.label.jump_to_page']()}</label>
272
-
273
- <NumberInput
274
- id="{tableContext.tableName}-jump-to-page"
275
- value={pageValue}
276
- oninput={onNumberInput}
277
- onfocus={(e) => {
278
- // Select the existing value so typing replaces it, instead of
279
- // appending to it (typing "5" on a "4" otherwise yields "45").
280
- (e.target as HTMLInputElement).select();
281
- }}
282
- disabled={tableContext.showSelectedOnly}
283
- />
284
- </div>
285
-
286
- <div class="block nopad page-arrow">
287
- <Button
288
- variant={Variant.Toolbar}
289
- disabled={tableContext.showSelectedOnly ||
290
- tableContext.paginationRepo.paginationState.pageIndex === 0}
291
- side={Side.Bottom}
292
- onclick={() => {
293
- tableContext.paginationRepo?.prevPage();
294
- }}
295
- size={Size.FillHeight}
296
- iconLeft={{
297
- name: 'left-close',
298
- size: Size.FillHeight,
299
- }}>{i18n['scoria.action.previous_page']()}</Button
300
- >
301
- </div>
302
-
303
- {#key pageButtons}
304
- {#each pageButtons as pageNumber (pageNumber)}
305
- <div class="block nopad">
306
- <Button
307
- variant={Variant.Toolbar}
308
- disabled={tableContext.showSelectedOnly}
309
- side={Side.Bottom}
310
- size={Size.FillHeight}
311
- toggled={tableContext.paginationRepo.paginationState.pageIndex === pageNumber - 1}
312
- onclick={() => {
313
- tableContext.paginationRepo?.setPage(pageNumber);
314
- }}>{pageNumber}</Button
315
- >
316
- </div>
317
- {/each}
318
- {/key}
319
-
320
- <div class="block nopad page-arrow">
321
- <Button
322
- variant={Variant.Toolbar}
323
- side={Side.Bottom}
324
- size={Size.FillHeight}
325
- onclick={() => {
326
- tableContext.paginationRepo?.nextPage();
327
- }}
328
- disabled={tableContext.showSelectedOnly ||
329
- tableContext.paginationRepo.paginationState.pageIndex + 1 >= tableContext.lastPage}
330
- iconRight={{
331
- name: 'right-close',
332
- size: Size.FillHeight,
333
- }}>{i18n['scoria.action.next_page']()}</Button
334
- >
335
- </div>
336
- </div>
337
- {/if}
338
- </div>
339
-
150
+ </script>
151
+
152
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
153
+ <div
154
+ class="spread_row bottom_row"
155
+ class:limited={tableContext.limitFooter}
156
+ onkeydown={(e) => {
157
+ e.stopPropagation();
158
+ onkeydown?.(e);
159
+ }}
160
+ >
161
+ <div class="block">
162
+ <span
163
+ >{tableContext.dataRepo.filterType === FilterType.Real
164
+ ? i18n['scoria.text.actioning_loaded']()
165
+ : i18n['scoria.text.actioning_all']()}</span
166
+ >
167
+ </div>
168
+
169
+ <div class="block">
170
+ <span
171
+ >{i18n['scoria.text.records_selected']({ count: tableContext.selectedItems.size })}</span
172
+ >
173
+ <Action
174
+ size={Size.FillHeight}
175
+ disabled={hasNoSelectedItems}
176
+ colourSet={ColourSet.Auxiliary}
177
+ icon={{
178
+ name: 'assessment',
179
+ size: Size.Medium,
180
+ colour: tableContext.showSelectedOnly ? Colour['$brand-primary'] : selectedItemIconColour,
181
+ }}
182
+ onclick={() => {
183
+ tableContext.showSelectedOnly = !tableContext.showSelectedOnly;
184
+ }}
185
+ />
186
+ <Action
187
+ size={Size.FillHeight}
188
+ disabled={hasNoSelectedItems}
189
+ colourSet={ColourSet.Auxiliary}
190
+ icon={{
191
+ name: 'eraser',
192
+ size: Size.Medium,
193
+ colour: selectedItemIconColour,
194
+ }}
195
+ onclick={() => {
196
+ alertContext.prompt(i18n['scoria.prompt.clear_selection'](), {
197
+ onYes: () => {
198
+ tableContext.showSelectedOnly = false;
199
+ tableContext.resetSelectedItems();
200
+ },
201
+ });
202
+ }}
203
+ />
204
+ </div>
205
+
206
+ <div class="block">
207
+ <span>{i18n['scoria.text.row_count']({ count: tableContext.paginationRepo?.totalRows ?? 0 })}</span>
208
+ </div>
209
+
210
+ {#if tableContext.paginationRepo}
211
+ <!-- forceUpwards={!nested} -->
212
+ <div class="block records-per-page">
213
+ <span>{i18n['scoria.label.records_per_page']()}</span>
214
+ <!-- label="Records per Page:" -->
215
+ <SingleSelect
216
+ lazyDropdown
217
+ name="Page Size"
218
+ placeholder={i18n['scoria.label.select_page_size']()}
219
+ borderless
220
+ creatable
221
+ createFilter={(value: string) => {
222
+ const parsed = parseInt(value);
223
+ return !(parsed >= 1 && parsed <= 500);
224
+ }}
225
+ onCreateOption={(newSize: SelectOption<number>) => {
226
+ newSize.value = Math.max(Math.min(newSize.value, 500), 1);
227
+
228
+ const found = pageSizes.find((size) => size.value === newSize.value);
229
+
230
+ if (found) {
231
+ currentSize = found;
232
+ } else {
233
+ createOption(newSize);
234
+ }
235
+
236
+ tableContext.paginationRepo?.setPageSize(newSize.value);
237
+ }}
238
+ value={currentSize}
239
+ options={pageSizes}
240
+ labelProp="label"
241
+ valueProp="value"
242
+ valueAsObject
243
+ onchange={(newSelection: SelectOption<number> | null) => {
244
+ if (newSelection?.value) {
245
+ tableContext.paginationRepo?.setPageSize(newSelection.value);
246
+ }
247
+ }}
248
+ />
249
+ </div>
250
+
251
+ <div class="spacer"></div>
252
+ <!-- {/* TODO switch to a lib element for this */} -->
253
+
254
+ <div class="scrollable">
255
+ <div class="block">
256
+ <Icon
257
+ name="paper"
258
+ colour={Colour['$ui-blue-6']}
259
+ />
260
+ <span>{i18n['scoria.text.page_count']({ count: tableContext.lastPage })}</span>
261
+ </div>
262
+
263
+ <div class="block">
264
+ <label for="{tableContext.tableName}-jump-to-page"
265
+ ><Icon
266
+ name="arrow-move-horizontal"
267
+ colour={Colour['$ui-blue-6']}
268
+ /></label
269
+ >
270
+
271
+ <label for="{tableContext.tableName}-jump-to-page">{i18n['scoria.label.jump_to_page']()}</label>
272
+
273
+ <NumberInput
274
+ id="{tableContext.tableName}-jump-to-page"
275
+ value={pageValue}
276
+ oninput={onNumberInput}
277
+ onfocus={(e) => {
278
+ // Select the existing value so typing replaces it, instead of
279
+ // appending to it (typing "5" on a "4" otherwise yields "45").
280
+ (e.target as HTMLInputElement).select();
281
+ }}
282
+ disabled={tableContext.showSelectedOnly}
283
+ />
284
+ </div>
285
+
286
+ <div class="block nopad page-arrow">
287
+ <Button
288
+ variant={Variant.Toolbar}
289
+ disabled={tableContext.showSelectedOnly ||
290
+ tableContext.paginationRepo.paginationState.pageIndex === 0}
291
+ side={Side.Bottom}
292
+ onclick={() => {
293
+ tableContext.paginationRepo?.prevPage();
294
+ }}
295
+ size={Size.FillHeight}
296
+ iconLeft={{
297
+ name: 'left-close',
298
+ size: Size.FillHeight,
299
+ }}>{i18n['scoria.action.previous_page']()}</Button
300
+ >
301
+ </div>
302
+
303
+ {#key pageButtons}
304
+ {#each pageButtons as pageNumber (pageNumber)}
305
+ <div class="block nopad">
306
+ <Button
307
+ variant={Variant.Toolbar}
308
+ disabled={tableContext.showSelectedOnly}
309
+ side={Side.Bottom}
310
+ size={Size.FillHeight}
311
+ toggled={tableContext.paginationRepo.paginationState.pageIndex === pageNumber - 1}
312
+ onclick={() => {
313
+ tableContext.paginationRepo?.setPage(pageNumber);
314
+ }}>{pageNumber}</Button
315
+ >
316
+ </div>
317
+ {/each}
318
+ {/key}
319
+
320
+ <div class="block nopad page-arrow">
321
+ <Button
322
+ variant={Variant.Toolbar}
323
+ side={Side.Bottom}
324
+ size={Size.FillHeight}
325
+ onclick={() => {
326
+ tableContext.paginationRepo?.nextPage();
327
+ }}
328
+ disabled={tableContext.showSelectedOnly ||
329
+ tableContext.paginationRepo.paginationState.pageIndex + 1 >= tableContext.lastPage}
330
+ iconRight={{
331
+ name: 'right-close',
332
+ size: Size.FillHeight,
333
+ }}>{i18n['scoria.action.next_page']()}</Button
334
+ >
335
+ </div>
336
+ </div>
337
+ {/if}
338
+ </div>
339
+
340
340
  <style>.spread_row {
341
341
  border-top: solid 1px #cbd4da;
342
342
  overflow: visible;
@@ -409,4 +409,4 @@ let selectedItemIconColour = $derived(hasNoSelectedItems ? Colour["$ui-blue-4"]
409
409
  }
410
410
  .spread_row .spacer {
411
411
  flex-grow: 2;
412
- }</style>
412
+ }</style>
@@ -1,8 +1,8 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="T extends object, IdType extends Primitive"
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="T extends object, IdType extends Primitive"
6
6
  >import Button from "../../Button.svelte";
7
7
  import { devCatch } from "../../../Helpers/Helpers.svelte.js";
8
8
  import { m as i18n } from "../../../paraglide/messages.js";
@@ -26,112 +26,112 @@ const panels = {
26
26
  };
27
27
  let expandedPanel = $state(null);
28
28
  let ExpandedPanelElement = $derived(expandedPanel ? panels[expandedPanel] : null);
29
- </script>
30
-
31
- {#if ExpandedPanelElement != null}
32
- <ExpandedPanelElement
33
- onclose={() => {
34
- expandedPanel = null;
35
- }}
36
- />
37
- {/if}
38
- <div class="sidebar">
39
- <Button
40
- side={Side.Bottom}
41
- onclick={() => {
42
- tableContext.toggleQuickFiltering();
43
- }}
44
- toggled={tableContext.showQuickFiltering}
45
- size={Size.Small}
46
- disabled={!tableContext.allowQuickFiltering}
47
- variant={Variant.Toolbar}
48
- iconTop={{
49
- name: 'assessment',
50
- }}>{i18n['scoria.action.quick_filter']()}</Button
51
- >
52
- <Button
53
- side={Side.Bottom}
54
- disabled={!tableContext.allowAdvancedFiltering}
55
- toggled={expandedPanel === ExpandedPanel.Filter}
56
- onclick={() => {
57
- expandedPanel = expandedPanel === ExpandedPanel.Filter ? null : ExpandedPanel.Filter;
58
- }}
59
- size={Size.Small}
60
- variant={Variant.Toolbar}
61
- iconTop={{
62
- name: 'filter-bars',
63
- }}>{i18n['scoria.action.advanced_filter']()}</Button
64
- >
65
- <Button
66
- side={Side.Bottom}
67
- onclick={() => {
68
- expandedPanel = expandedPanel === ExpandedPanel.Column ? null : ExpandedPanel.Column;
69
- }}
70
- size={Size.Small}
71
- variant={Variant.Toolbar}
72
- toggled={expandedPanel === ExpandedPanel.Column}
73
- iconTop={{
74
- name: 'columns',
75
- }}>{i18n['scoria.action.modify_columns']()}</Button
76
- >
77
- <Button
78
- size={Size.Small}
79
- side={Side.Bottom}
80
- toggled={expandedPanel === ExpandedPanel.Toolbox}
81
- onclick={() => {
82
- expandedPanel = expandedPanel === ExpandedPanel.Toolbox ? null : ExpandedPanel.Toolbox;
83
- }}
84
- variant={Variant.Toolbar}
85
- iconTop={{
86
- name: 'category',
87
- }}>{i18n['scoria.action.toolbox']()}</Button
88
- >
89
- <Button
90
- size={Size.Small}
91
- side={Side.Bottom}
92
- toggled={expandedPanel === ExpandedPanel.Configuration}
93
- onclick={() => {
94
- expandedPanel =
95
- expandedPanel === ExpandedPanel.Configuration ? null : ExpandedPanel.Configuration;
96
- }}
97
- variant={Variant.Toolbar}
98
- iconTop={{
99
- name: 'setting-cog',
100
- }}>{i18n['scoria.action.table_configuration']()}</Button
101
- >
102
- {#if tableContext.dataRepo.addEmptyRow}
103
- <Button
104
- size={Size.Small}
105
- side={Side.Bottom}
106
- onclick={() => {
107
- tableContext.dataRepo.addEmptyRow?.();
108
- }}
109
- variant={Variant.Toolbar}
110
- iconTop={{
111
- name: 'plus',
112
- }}>{i18n['scoria.action.add_row']()}</Button
113
- >
114
- {/if}
115
-
116
- {#if tableContext.paginationRepo?.reload}
117
- <Button
118
- side={Side.Bottom}
119
- onclick={() => {
120
- tableContext.paginationRepo?.reload?.().catch(devCatch);
121
- }}
122
- toggled={tableContext.dataRepo.isLoading}
123
- size={Size.Small}
124
- disabled={!tableContext.allowQuickFiltering}
125
- variant={Variant.Toolbar}
126
- iconTop={{
127
- name: 'refresh',
128
- }}>{i18n['scoria.action.refresh']()}</Button
129
- >
130
- {/if}
131
-
132
- <div class="filler"></div>
133
- </div>
134
-
29
+ </script>
30
+
31
+ {#if ExpandedPanelElement != null}
32
+ <ExpandedPanelElement
33
+ onclose={() => {
34
+ expandedPanel = null;
35
+ }}
36
+ />
37
+ {/if}
38
+ <div class="sidebar">
39
+ <Button
40
+ side={Side.Bottom}
41
+ onclick={() => {
42
+ tableContext.toggleQuickFiltering();
43
+ }}
44
+ toggled={tableContext.showQuickFiltering}
45
+ size={Size.Small}
46
+ disabled={!tableContext.allowQuickFiltering}
47
+ variant={Variant.Toolbar}
48
+ iconTop={{
49
+ name: 'assessment',
50
+ }}>{i18n['scoria.action.quick_filter']()}</Button
51
+ >
52
+ <Button
53
+ side={Side.Bottom}
54
+ disabled={!tableContext.allowAdvancedFiltering}
55
+ toggled={expandedPanel === ExpandedPanel.Filter}
56
+ onclick={() => {
57
+ expandedPanel = expandedPanel === ExpandedPanel.Filter ? null : ExpandedPanel.Filter;
58
+ }}
59
+ size={Size.Small}
60
+ variant={Variant.Toolbar}
61
+ iconTop={{
62
+ name: 'filter-bars',
63
+ }}>{i18n['scoria.action.advanced_filter']()}</Button
64
+ >
65
+ <Button
66
+ side={Side.Bottom}
67
+ onclick={() => {
68
+ expandedPanel = expandedPanel === ExpandedPanel.Column ? null : ExpandedPanel.Column;
69
+ }}
70
+ size={Size.Small}
71
+ variant={Variant.Toolbar}
72
+ toggled={expandedPanel === ExpandedPanel.Column}
73
+ iconTop={{
74
+ name: 'columns',
75
+ }}>{i18n['scoria.action.modify_columns']()}</Button
76
+ >
77
+ <Button
78
+ size={Size.Small}
79
+ side={Side.Bottom}
80
+ toggled={expandedPanel === ExpandedPanel.Toolbox}
81
+ onclick={() => {
82
+ expandedPanel = expandedPanel === ExpandedPanel.Toolbox ? null : ExpandedPanel.Toolbox;
83
+ }}
84
+ variant={Variant.Toolbar}
85
+ iconTop={{
86
+ name: 'category',
87
+ }}>{i18n['scoria.action.toolbox']()}</Button
88
+ >
89
+ <Button
90
+ size={Size.Small}
91
+ side={Side.Bottom}
92
+ toggled={expandedPanel === ExpandedPanel.Configuration}
93
+ onclick={() => {
94
+ expandedPanel =
95
+ expandedPanel === ExpandedPanel.Configuration ? null : ExpandedPanel.Configuration;
96
+ }}
97
+ variant={Variant.Toolbar}
98
+ iconTop={{
99
+ name: 'setting-cog',
100
+ }}>{i18n['scoria.action.table_configuration']()}</Button
101
+ >
102
+ {#if tableContext.dataRepo.addEmptyRow}
103
+ <Button
104
+ size={Size.Small}
105
+ side={Side.Bottom}
106
+ onclick={() => {
107
+ tableContext.dataRepo.addEmptyRow?.();
108
+ }}
109
+ variant={Variant.Toolbar}
110
+ iconTop={{
111
+ name: 'plus',
112
+ }}>{i18n['scoria.action.add_row']()}</Button
113
+ >
114
+ {/if}
115
+
116
+ {#if tableContext.paginationRepo?.reload}
117
+ <Button
118
+ side={Side.Bottom}
119
+ onclick={() => {
120
+ tableContext.paginationRepo?.reload?.().catch(devCatch);
121
+ }}
122
+ toggled={tableContext.dataRepo.isLoading}
123
+ size={Size.Small}
124
+ disabled={!tableContext.allowQuickFiltering}
125
+ variant={Variant.Toolbar}
126
+ iconTop={{
127
+ name: 'refresh',
128
+ }}>{i18n['scoria.action.refresh']()}</Button
129
+ >
130
+ {/if}
131
+
132
+ <div class="filler"></div>
133
+ </div>
134
+
135
135
  <style>.sidebar {
136
136
  flex-flow: row nowrap;
137
137
  text-orientation: sideways;
@@ -150,4 +150,4 @@ let ExpandedPanelElement = $derived(expandedPanel ? panels[expandedPanel] : null
150
150
  .sidebar .filler {
151
151
  flex-grow: 2;
152
152
  background-color: #ffffff;
153
- }</style>
153
+ }</style>