@lavalogic/scoria 0.40.32 → 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 (135) 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/InfoAlert.svelte +32 -32
  38. package/dist/Components/LoadingAnimation.svelte +228 -227
  39. package/dist/Components/LoadingModal.svelte +19 -19
  40. package/dist/Components/LoadingOverlay.svelte +20 -20
  41. package/dist/Components/Modal.svelte +127 -127
  42. package/dist/Components/MultiSelect.svelte +126 -126
  43. package/dist/Components/Nav/Nav.svelte +71 -71
  44. package/dist/Components/Nav/NavServiceMenuList.svelte +37 -37
  45. package/dist/Components/Nav/NavTab.svelte +46 -46
  46. package/dist/Components/Nav/ServiceMenuItem.svelte +62 -62
  47. package/dist/Components/Nav/ServicesNav.svelte +50 -50
  48. package/dist/Components/NumberInput.svelte +98 -98
  49. package/dist/Components/OptionCards.svelte +58 -58
  50. package/dist/Components/PageHeading.svelte +21 -21
  51. package/dist/Components/PasswordInput.svelte +61 -61
  52. package/dist/Components/PopoverButton.svelte +53 -53
  53. package/dist/Components/Portal.svelte +7 -7
  54. package/dist/Components/ProgressBubble.svelte +42 -42
  55. package/dist/Components/QuerySelect.svelte +102 -102
  56. package/dist/Components/ResourceCalendar/ResourceCalendar.svelte +241 -241
  57. package/dist/Components/SidebarPanel.svelte +32 -32
  58. package/dist/Components/SingleSelect.svelte +122 -122
  59. package/dist/Components/StepButton.svelte +48 -48
  60. package/dist/Components/StepForm.svelte +58 -58
  61. package/dist/Components/Switch.svelte +43 -43
  62. package/dist/Components/Table/ARCHITECTURE.md +298 -298
  63. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +30 -30
  64. package/dist/Components/Table/Body/Rows/ColumnList.svelte +24 -24
  65. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +165 -165
  66. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +13 -13
  67. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +120 -120
  68. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +81 -81
  69. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +92 -92
  70. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +110 -110
  71. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +54 -54
  72. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +35 -35
  73. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +64 -64
  74. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +82 -82
  75. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +88 -88
  76. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +90 -90
  77. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +96 -96
  78. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +71 -71
  79. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +124 -124
  80. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +91 -91
  81. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +88 -88
  82. package/dist/Components/Table/Body/Rows/TableRow.svelte +127 -127
  83. package/dist/Components/Table/Body/TableBody.svelte +92 -92
  84. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +25 -25
  85. package/dist/Components/Table/Headers/SelectAllHeader.svelte +20 -20
  86. package/dist/Components/Table/Headers/TableHead.svelte +175 -175
  87. package/dist/Components/Table/Misc/ColumnPanel.svelte +32 -32
  88. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +29 -29
  89. package/dist/Components/Table/Misc/FilterInput.svelte +326 -326
  90. package/dist/Components/Table/Misc/FilterPanel.svelte +79 -79
  91. package/dist/Components/Table/Misc/FilterPanelModal.svelte +21 -21
  92. package/dist/Components/Table/Misc/ShareViewModal.svelte +118 -118
  93. package/dist/Components/Table/Misc/SidePanel.svelte +24 -24
  94. package/dist/Components/Table/Misc/TableConfigurationModal.svelte +318 -318
  95. package/dist/Components/Table/Misc/TableFooter.svelte +201 -201
  96. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +112 -112
  97. package/dist/Components/Table/Misc/TableSidebar.svelte +116 -116
  98. package/dist/Components/Table/Misc/TableViewDropdown.svelte +25 -25
  99. package/dist/Components/Table/Misc/ToolboxPanel.svelte +60 -60
  100. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +63 -63
  101. package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +101 -101
  102. package/dist/Components/Table/NestedTable.svelte +29 -29
  103. package/dist/Components/Table/Table.svelte +140 -140
  104. package/dist/Components/Test/TestContextConsumer.svelte +8 -8
  105. package/dist/Components/TextArea.svelte +92 -90
  106. package/dist/Components/TextInput.svelte +128 -117
  107. package/dist/Components/ThreeStateRadio.svelte +101 -101
  108. package/dist/Components/Touch/BoolCard.svelte +27 -27
  109. package/dist/Components/Touch/DateModal.svelte +98 -98
  110. package/dist/Components/Touch/EditCard.svelte +44 -44
  111. package/dist/Components/Touch/InfoCard.svelte +25 -25
  112. package/dist/Components/Touch/InfoTextCard.svelte +22 -22
  113. package/dist/Components/Touch/ModalExplanation.svelte +13 -13
  114. package/dist/Components/Touch/NumberKeyboard.svelte +81 -81
  115. package/dist/Components/Touch/NumberModal.svelte +49 -49
  116. package/dist/Components/Touch/PlusMinusCard.svelte +40 -40
  117. package/dist/Components/Touch/SelectModal.svelte +86 -86
  118. package/dist/Components/Touch/SummaryCard.svelte +74 -74
  119. package/dist/Components/Touch/TextAreaModal.svelte +53 -53
  120. package/dist/Components/Touch/TextModal.svelte +56 -56
  121. package/dist/Components/Touch/TouchCard.svelte +28 -28
  122. package/dist/Components/Touch/TouchModal.svelte +141 -141
  123. package/dist/Components/Touch/UtilityButton.svelte +63 -63
  124. package/dist/Components/VerticalTabGroup.svelte +38 -38
  125. package/dist/Components/VerticalTabGroupButton.svelte +46 -46
  126. package/dist/Helpers/Datamatrix.d.ts +19 -19
  127. package/dist/Helpers/Datamatrix.js +291 -291
  128. package/dist/Types/Examples/ExampleModal.svelte +27 -27
  129. package/dist/paraglide/README.md +1 -1
  130. package/dist/scss/_basics.scss +12 -12
  131. package/dist/scss/_colours.scss +140 -140
  132. package/dist/scss/_motion.scss +57 -57
  133. package/dist/scss/_sizing.scss +85 -85
  134. package/dist/scss/_transitions.scss +8 -8
  135. 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>