@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
- generics="V extends object, VP extends ValueProp<V>"
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="V extends object, VP extends ValueProp<V>"
6
6
  >import { m as i18n } from "../paraglide/messages.js";
7
7
  import { devCatch, generateWeakId, vowels } from "../Helpers/Helpers.svelte.js";
8
8
  import { attachDropdownPortal } from "../Helpers/dropdownPortal.js";
@@ -86,122 +86,122 @@ onMount(() => {
86
86
  function isObject(value) {
87
87
  return value !== null && typeof value === "object";
88
88
  }
89
- </script>
90
-
91
- <div
92
- class="select-wrapper"
93
- class:no-border={borderless}
94
- style={`${width ? `--input-width: ${width};` : ''}${height ? `--input-height: ${height};` : ''} --dropdown-bottom: calc(${dropdownBottom}px + 1px); --sv-min-height: ${minHeight ?? '2rem'};`}
95
- class:invalid={isInvalid}
96
- class:force-upwards={forceUpwards}
97
- bind:this={wrapperRef}
98
- >
99
- {#if label}
100
- <label for={inputId}>
101
- <span
102
- >{label}{#if !required}&nbsp;- <i>{i18n['scoria.label.optional']()}</i>{/if}</span
103
- >
104
- <span class="border"
105
- >{label}{#if !required}&nbsp;- <i>{i18n['scoria.label.optional']()}</i>{/if}</span
106
- >
107
- </label>
108
- {/if}
109
-
110
- <Svelecte
111
- {createFilter}
112
- {disabled}
113
- {name}
114
- onFocus={(target: HTMLInputElement) => {
115
- forceShowDropdown(target);
116
- onfocus?.(target);
117
- }}
118
- bind:this={ref}
119
- {valueAsObject}
120
- {inputId}
121
- {required}
122
- valueField={valueProp}
123
- labelField={labelProp}
124
- virtualList={false}
125
- {options}
126
- {creatable}
127
- searchProps={{ keepSelectionInList: true }}
128
- {onCreateOption}
129
- placeholder={placeholder ?? fallbackPlaceholder}
130
- {lazyDropdown}
131
- value={// eslint-disable-next-line @typescript-eslint/no-explicit-any
132
- currentValue as Array<any>}
133
- onChange={(newValue: V | null) => {
134
- // svelecte always emits the full option object regardless of
135
- // `valueAsObject`. Map to the shape the discriminated variant
136
- // promised: primitive for AsPrimitive, object for AsObject.
137
- if (valueAsObject) {
138
- void (onchange as (v: V | null) => void | Promise<void>)(newValue);
139
- } else {
140
- const primitive = newValue == null ? null : newValue[valueProp];
141
- // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
142
- void (onchange as (v: V[VP] | null) => void | Promise<void>)(primitive);
143
- }
144
- }}
145
- {searchable}
146
- selectOnTab
147
- keepSelectionInList
148
- deselectMode={clearable ? 'toggle' : 'none'}
149
- >
150
- {#snippet option(opt)}<span class="dropdown-item"> {(opt as V)[labelProp]}</span>{/snippet}
151
-
152
- {#snippet append()}
153
- <div class="icons">
154
- {#if clearable && currentValue}
155
- <Action
156
- noTabIndex
157
- onclick={(e: MouseEvent) => {
158
- if (isExpanded) {
159
- e.stopPropagation();
160
- }
161
-
162
- void onchange(null);
163
- }}
164
- {disabled}
165
- colourSet={ColourSet.Auxiliary}
166
- size={Size.Small}
167
- icon={{
168
- name: 'close-menu-cross',
169
- colour: Colour['$ui-blue-10'],
170
- }}
171
- />
172
- {/if}
173
-
174
- <Action
175
- noTabIndex
176
- colourSet={ColourSet.Auxiliary}
177
- size={Size.Small}
178
- {disabled}
179
- icon={{
180
- name: isExpanded ? 'chevron-up' : 'chevron-down',
181
- colour: Colour['$ui-blue-10'],
182
- }}
183
- />
184
- </div>
185
- {/snippet}
186
- {#snippet toggleIcon()}
187
- <div class="nothing"></div>
188
- {/snippet}
189
-
190
- {#snippet selection(/*_selectedOptions: Array<any>*/)}
191
- <span
192
- class="selection"
193
- class:invalid={isInvalid}
194
- >
195
- {#if isObject(selectedValue)}
196
- {selectedValue[labelProp]}
197
- {:else}
198
- {options.find((it) => it[valueProp] === selectedValue)?.[labelProp]}
199
- {/if}
200
- </span>
201
- {/snippet}
202
- </Svelecte>
203
- </div>
204
-
89
+ </script>
90
+
91
+ <div
92
+ class="select-wrapper"
93
+ class:no-border={borderless}
94
+ style={`${width ? `--input-width: ${width};` : ''}${height ? `--input-height: ${height};` : ''} --dropdown-bottom: calc(${dropdownBottom}px + 1px); --sv-min-height: ${minHeight ?? '2rem'};`}
95
+ class:invalid={isInvalid}
96
+ class:force-upwards={forceUpwards}
97
+ bind:this={wrapperRef}
98
+ >
99
+ {#if label}
100
+ <label for={inputId}>
101
+ <span
102
+ >{label}{#if !required}&nbsp;- <i>{i18n['scoria.label.optional']()}</i>{/if}</span
103
+ >
104
+ <span class="border"
105
+ >{label}{#if !required}&nbsp;- <i>{i18n['scoria.label.optional']()}</i>{/if}</span
106
+ >
107
+ </label>
108
+ {/if}
109
+
110
+ <Svelecte
111
+ {createFilter}
112
+ {disabled}
113
+ {name}
114
+ onFocus={(target: HTMLInputElement) => {
115
+ forceShowDropdown(target);
116
+ onfocus?.(target);
117
+ }}
118
+ bind:this={ref}
119
+ {valueAsObject}
120
+ {inputId}
121
+ {required}
122
+ valueField={valueProp}
123
+ labelField={labelProp}
124
+ virtualList={false}
125
+ {options}
126
+ {creatable}
127
+ searchProps={{ keepSelectionInList: true }}
128
+ {onCreateOption}
129
+ placeholder={placeholder ?? fallbackPlaceholder}
130
+ {lazyDropdown}
131
+ value={// eslint-disable-next-line @typescript-eslint/no-explicit-any
132
+ currentValue as Array<any>}
133
+ onChange={(newValue: V | null) => {
134
+ // svelecte always emits the full option object regardless of
135
+ // `valueAsObject`. Map to the shape the discriminated variant
136
+ // promised: primitive for AsPrimitive, object for AsObject.
137
+ if (valueAsObject) {
138
+ void (onchange as (v: V | null) => void | Promise<void>)(newValue);
139
+ } else {
140
+ const primitive = newValue == null ? null : newValue[valueProp];
141
+ // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
142
+ void (onchange as (v: V[VP] | null) => void | Promise<void>)(primitive);
143
+ }
144
+ }}
145
+ {searchable}
146
+ selectOnTab
147
+ keepSelectionInList
148
+ deselectMode={clearable ? 'toggle' : 'none'}
149
+ >
150
+ {#snippet option(opt)}<span class="dropdown-item"> {(opt as V)[labelProp]}</span>{/snippet}
151
+
152
+ {#snippet append()}
153
+ <div class="icons">
154
+ {#if clearable && currentValue}
155
+ <Action
156
+ noTabIndex
157
+ onclick={(e: MouseEvent) => {
158
+ if (isExpanded) {
159
+ e.stopPropagation();
160
+ }
161
+
162
+ void onchange(null);
163
+ }}
164
+ {disabled}
165
+ colourSet={ColourSet.Auxiliary}
166
+ size={Size.Small}
167
+ icon={{
168
+ name: 'close-menu-cross',
169
+ colour: Colour['$ui-blue-10'],
170
+ }}
171
+ />
172
+ {/if}
173
+
174
+ <Action
175
+ noTabIndex
176
+ colourSet={ColourSet.Auxiliary}
177
+ size={Size.Small}
178
+ {disabled}
179
+ icon={{
180
+ name: isExpanded ? 'chevron-up' : 'chevron-down',
181
+ colour: Colour['$ui-blue-10'],
182
+ }}
183
+ />
184
+ </div>
185
+ {/snippet}
186
+ {#snippet toggleIcon()}
187
+ <div class="nothing"></div>
188
+ {/snippet}
189
+
190
+ {#snippet selection(/*_selectedOptions: Array<any>*/)}
191
+ <span
192
+ class="selection"
193
+ class:invalid={isInvalid}
194
+ >
195
+ {#if isObject(selectedValue)}
196
+ {selectedValue[labelProp]}
197
+ {:else}
198
+ {options.find((it) => it[valueProp] === selectedValue)?.[labelProp]}
199
+ {/if}
200
+ </span>
201
+ {/snippet}
202
+ </Svelecte>
203
+ </div>
204
+
205
205
  <style>.select-wrapper {
206
206
  min-width: var(--input-min-width, 12rem);
207
207
  width: var(--input-width, 100%);
@@ -376,4 +376,4 @@ div.icons {
376
376
  }
377
377
  :global(.dropdown-item) .toggle-icon.yes {
378
378
  opacity: 1;
379
- }</style>
379
+ }</style>
@@ -1,8 +1,8 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="Args"
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="Args"
6
6
  >import { useAsyncFlag } from "../Helpers/AsyncFlag.svelte.js";
7
7
  import { useTooltip } from "../Helpers/useTooltip.svelte.js";
8
8
  import { Colour } from "../scss/colours.js";
@@ -20,48 +20,48 @@ const tt = useTooltip({
20
20
  text: () => option.label,
21
21
  arrow: () => Side.Top
22
22
  });
23
- </script>
24
-
25
- <button
26
- class:selected
27
- disabled={disabled.value}
28
- onclick={() => {
29
- option.onclick();
30
- }}
31
- type="button"
32
- class="tab"
33
- class:invalid={!isValid.value}
34
- class:hidden={!visible.value}
35
- onmouseenter={tt.onmouseenter}
36
- onmouseleave={tt.onmouseleave}
37
- >
38
- <div
39
- class="bordered"
40
- class:invalid={!isValid.value}
41
- >
42
- {#if option.iconLeft}
43
- <Icon
44
- {...option.iconLeft}
45
- colour={Colour['$brand-primary']}
46
- />
47
- {/if}
48
- {index + 1}
49
- {#if !isValid.value}
50
- <Icon
51
- name="error"
52
- colour={Colour['$error-border']}
53
- size={Size.Small}
54
- />
55
- {:else if option.iconRight}
56
- <Icon
57
- colour={Colour['$brand-primary']}
58
- size={Size.Small}
59
- {...option.iconRight}
60
- />
61
- {/if}
62
- </div>
63
- </button>
64
-
23
+ </script>
24
+
25
+ <button
26
+ class:selected
27
+ disabled={disabled.value}
28
+ onclick={() => {
29
+ option.onclick();
30
+ }}
31
+ type="button"
32
+ class="tab"
33
+ class:invalid={!isValid.value}
34
+ class:hidden={!visible.value}
35
+ onmouseenter={tt.onmouseenter}
36
+ onmouseleave={tt.onmouseleave}
37
+ >
38
+ <div
39
+ class="bordered"
40
+ class:invalid={!isValid.value}
41
+ >
42
+ {#if option.iconLeft}
43
+ <Icon
44
+ {...option.iconLeft}
45
+ colour={Colour['$brand-primary']}
46
+ />
47
+ {/if}
48
+ {index + 1}
49
+ {#if !isValid.value}
50
+ <Icon
51
+ name="error"
52
+ colour={Colour['$error-border']}
53
+ size={Size.Small}
54
+ />
55
+ {:else if option.iconRight}
56
+ <Icon
57
+ colour={Colour['$brand-primary']}
58
+ size={Size.Small}
59
+ {...option.iconRight}
60
+ />
61
+ {/if}
62
+ </div>
63
+ </button>
64
+
65
65
  <style>button.tab.hidden {
66
66
  display: none !important;
67
67
  }
@@ -102,4 +102,4 @@ const tt = useTooltip({
102
102
  color: #aa1414;
103
103
  border-color: #aa1414;
104
104
  background-color: #f9e9e9;
105
- }</style>
105
+ }</style>
@@ -1,8 +1,8 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="CommonDenominator"
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="CommonDenominator"
6
6
  >import { readJSON } from "../Helpers/Storage.js";
7
7
  import { ColourSet } from "../scss/colours.js";
8
8
  import { Size } from "../Types/Internal/Size.js";
@@ -66,58 +66,58 @@ $effect(() => {
66
66
  });
67
67
  }
68
68
  });
69
- </script>
70
-
71
- <div
72
- class:noscroll
73
- class="wrapper"
74
- >
75
- <div class="tabs">
76
- {#each steps as option, index (option.label)}
77
- <StepButton
78
- {option}
79
- {index}
80
- selected={currentStep?.label === option.label}
81
- />
82
- {/each}
83
- <div class="divider"></div>
84
-
85
- <div class="steps">
86
- <Button
87
- size={Size.Small}
88
- fullWidth
89
- disabled={!previous}
90
- onclick={() => {
91
- previous?.onclick();
92
- }}
93
- colourSet={ColourSet.Secondary}>{i18n['scoria.action.previous']()}</Button
94
- >
95
- <Button
96
- size={Size.Small}
97
- fullWidth
98
- onclick={() => {
99
- next?.onclick();
100
- }}
101
- disabled={!next}
102
- colourSet={ColourSet.Primary}>{i18n['scoria.action.next']()}</Button
103
- >
104
- </div>
105
- </div>
106
-
107
- <div
108
- class:noscroll
109
- class="content"
110
- >
111
- {#if currentStep}
112
- {@render currentStep.content(currentStep.args)}
113
- {:else}
114
- <div class="wrapper bg">
115
- <span class="red">{noStepMessage}</span>
116
- </div>
117
- {/if}
118
- </div>
119
- </div>
120
-
69
+ </script>
70
+
71
+ <div
72
+ class:noscroll
73
+ class="wrapper"
74
+ >
75
+ <div class="tabs">
76
+ {#each steps as option, index (option.label)}
77
+ <StepButton
78
+ {option}
79
+ {index}
80
+ selected={currentStep?.label === option.label}
81
+ />
82
+ {/each}
83
+ <div class="divider"></div>
84
+
85
+ <div class="steps">
86
+ <Button
87
+ size={Size.Small}
88
+ fullWidth
89
+ disabled={!previous}
90
+ onclick={() => {
91
+ previous?.onclick();
92
+ }}
93
+ colourSet={ColourSet.Secondary}>{i18n['scoria.action.previous']()}</Button
94
+ >
95
+ <Button
96
+ size={Size.Small}
97
+ fullWidth
98
+ onclick={() => {
99
+ next?.onclick();
100
+ }}
101
+ disabled={!next}
102
+ colourSet={ColourSet.Primary}>{i18n['scoria.action.next']()}</Button
103
+ >
104
+ </div>
105
+ </div>
106
+
107
+ <div
108
+ class:noscroll
109
+ class="content"
110
+ >
111
+ {#if currentStep}
112
+ {@render currentStep.content(currentStep.args)}
113
+ {:else}
114
+ <div class="wrapper bg">
115
+ <span class="red">{noStepMessage}</span>
116
+ </div>
117
+ {/if}
118
+ </div>
119
+ </div>
120
+
121
121
  <style>.bg {
122
122
  padding: 1.5rem;
123
123
  background-color: #f9e9e9;
@@ -173,4 +173,4 @@ $effect(() => {
173
173
  }
174
174
  .wrapper .content.noscroll {
175
175
  overflow: visible;
176
- }</style>
176
+ }</style>
@@ -1,5 +1,5 @@
1
- <svelte:options runes />
2
-
1
+ <svelte:options runes />
2
+
3
3
  <script lang="ts">import { generateWeakId } from "../Helpers/Helpers.svelte.js";
4
4
  let { value = $bindable(false), id = generateWeakId(), label, disabled, isValid, onchange } = $props();
5
5
  let mirror = $state();
@@ -14,46 +14,46 @@ const toggle = () => {
14
14
  mirror.dispatchEvent(new Event("change", { bubbles: true }));
15
15
  }
16
16
  };
17
- </script>
18
-
19
- <div class="switch-wrapper">
20
- <button
21
- {id}
22
- class="text-label"
23
- class:invalid={isValid === false}
24
- type="button"
25
- role="switch"
26
- aria-checked={value}
27
- aria-label={label}
28
- onclick={toggle}
29
- {disabled}
30
- >
31
- <span>{label}</span>
32
-
33
- <div class="switch">
34
- <div
35
- class="switch-inner"
36
- class:on={value}
37
- >
38
- <div
39
- class="track"
40
- class:on={value}
41
- ></div>
42
- </div>
43
- </div>
44
- </button>
45
-
46
- <input
47
- name={id}
48
- {onchange}
49
- type="checkbox"
50
- tabindex="-1"
51
- aria-hidden="true"
52
- checked={value}
53
- bind:this={mirror}
54
- />
55
- </div>
56
-
17
+ </script>
18
+
19
+ <div class="switch-wrapper">
20
+ <button
21
+ {id}
22
+ class="text-label"
23
+ class:invalid={isValid === false}
24
+ type="button"
25
+ role="switch"
26
+ aria-checked={value}
27
+ aria-label={label}
28
+ onclick={toggle}
29
+ {disabled}
30
+ >
31
+ <span>{label}</span>
32
+
33
+ <div class="switch">
34
+ <div
35
+ class="switch-inner"
36
+ class:on={value}
37
+ >
38
+ <div
39
+ class="track"
40
+ class:on={value}
41
+ ></div>
42
+ </div>
43
+ </div>
44
+ </button>
45
+
46
+ <input
47
+ name={id}
48
+ {onchange}
49
+ type="checkbox"
50
+ tabindex="-1"
51
+ aria-hidden="true"
52
+ checked={value}
53
+ bind:this={mirror}
54
+ />
55
+ </div>
56
+
57
57
  <style>.switch-wrapper {
58
58
  display: contents;
59
59
  }
@@ -162,4 +162,4 @@ const toggle = () => {
162
162
 
163
163
  input {
164
164
  display: none;
165
- }</style>
165
+ }</style>