@lavalogic/scoria 0.40.13 → 0.40.15

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 (143) hide show
  1. package/README.md +58 -58
  2. package/dist/Components/AccordionGroup.svelte +35 -46
  3. package/dist/Components/AccordionGroupButton.svelte +68 -76
  4. package/dist/Components/Action.svelte +103 -135
  5. package/dist/Components/AlertModal.svelte +171 -190
  6. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +614 -697
  7. package/dist/Components/Base/BaseModal.svelte +90 -116
  8. package/dist/Components/Base/ContextWrapper.svelte +67 -72
  9. package/dist/Components/Base/Pagination.svelte +173 -196
  10. package/dist/Components/Base/Snippets.svelte +34 -36
  11. package/dist/Components/BigRadioSet.svelte +36 -38
  12. package/dist/Components/Bubble.svelte +78 -101
  13. package/dist/Components/Button.svelte +175 -208
  14. package/dist/Components/Checkbox.svelte +75 -86
  15. package/dist/Components/CollapsibleCard.svelte +72 -87
  16. package/dist/Components/CollapsibleMenuGroup.svelte +53 -57
  17. package/dist/Components/ConditionBuilder/ConditionBuilder.svelte +39 -64
  18. package/dist/Components/Contexts/ContextMenu.svelte +141 -156
  19. package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
  20. package/dist/Components/Contexts/ContextMenuOption.svelte +53 -60
  21. package/dist/Components/Contexts/Toast.svelte +81 -86
  22. package/dist/Components/Contexts/ToastContainer.svelte +58 -62
  23. package/dist/Components/Contexts/Tooltip.svelte +36 -37
  24. package/dist/Components/DataMatrixIcon.svelte +95 -108
  25. package/dist/Components/DateInput.svelte +118 -146
  26. package/dist/Components/DatePicker.svelte +255 -294
  27. package/dist/Components/DesktopModal.svelte +70 -90
  28. package/dist/Components/Dial.svelte +167 -197
  29. package/dist/Components/DimensionInput.svelte +124 -169
  30. package/dist/Components/DragMenu/DragMenuHolder.svelte +98 -114
  31. package/dist/Components/DragMenu/DraggableCard.svelte +64 -76
  32. package/dist/Components/FileCard.svelte +21 -24
  33. package/dist/Components/FileUpload.svelte +190 -225
  34. package/dist/Components/GridInput.svelte +159 -196
  35. package/dist/Components/GridInputSet.svelte +24 -29
  36. package/dist/Components/HorizontalTabGroup.svelte +73 -89
  37. package/dist/Components/HorizontalTabGroupButton.svelte +40 -44
  38. package/dist/Components/Icon.svelte +99 -128
  39. package/dist/Components/Icons.js +357 -357
  40. package/dist/Components/InfoAlert.svelte +35 -38
  41. package/dist/Components/LoadingAnimation.svelte +691 -755
  42. package/dist/Components/LoadingModal.svelte +36 -44
  43. package/dist/Components/LoadingOverlay.svelte +22 -26
  44. package/dist/Components/Modal.svelte +204 -254
  45. package/dist/Components/MultiSelect.svelte +186 -216
  46. package/dist/Components/Nav/Nav.svelte +94 -110
  47. package/dist/Components/Nav/NavServiceMenuList.svelte +57 -61
  48. package/dist/Components/Nav/NavTab.svelte +58 -62
  49. package/dist/Components/Nav/ServiceMenuItem.svelte +103 -111
  50. package/dist/Components/Nav/ServicesNav.svelte +72 -79
  51. package/dist/Components/NumberInput.svelte +121 -155
  52. package/dist/Components/OptionCards.svelte +62 -73
  53. package/dist/Components/PageHeading.svelte +23 -25
  54. package/dist/Components/PasswordInput.svelte +69 -88
  55. package/dist/Components/PopoverButton.svelte +151 -0
  56. package/dist/Components/PopoverButton.svelte.d.ts +9 -0
  57. package/dist/Components/PopoverButtonProps.d.ts +21 -0
  58. package/dist/Components/PopoverButtonProps.js +1 -0
  59. package/dist/Components/Portal.svelte +29 -35
  60. package/dist/Components/ProgressBubble.svelte +91 -106
  61. package/dist/Components/QuerySelect.svelte +260 -346
  62. package/dist/Components/SidebarPanel.svelte +34 -36
  63. package/dist/Components/SingleSelect.svelte +196 -244
  64. package/dist/Components/StepButton.svelte +65 -70
  65. package/dist/Components/StepForm.svelte +115 -135
  66. package/dist/Components/Switch.svelte +57 -69
  67. package/dist/Components/Table/ARCHITECTURE.md +298 -298
  68. package/dist/Components/Table/Body/QuickSearchCell.svelte +578 -655
  69. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +42 -51
  70. package/dist/Components/Table/Body/Rows/ColumnList.svelte +42 -58
  71. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +403 -442
  72. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +51 -78
  73. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +165 -184
  74. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +110 -123
  75. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +134 -160
  76. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +190 -231
  77. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +82 -104
  78. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +52 -87
  79. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +122 -150
  80. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +132 -159
  81. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +190 -236
  82. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +173 -211
  83. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +204 -244
  84. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +140 -177
  85. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +188 -217
  86. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +173 -193
  87. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +166 -187
  88. package/dist/Components/Table/Body/Rows/TableRow.svelte +245 -288
  89. package/dist/Components/Table/Body/TableBody.svelte +141 -154
  90. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +35 -41
  91. package/dist/Components/Table/Headers/SelectAllHeader.svelte +24 -30
  92. package/dist/Components/Table/Headers/TableHead.svelte +348 -402
  93. package/dist/Components/Table/Misc/ColumnPanel.svelte +37 -39
  94. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +35 -39
  95. package/dist/Components/Table/Misc/FilterInput.svelte +556 -619
  96. package/dist/Components/Table/Misc/FilterPanel.svelte +170 -183
  97. package/dist/Components/Table/Misc/FilterPanelModal.svelte +25 -31
  98. package/dist/Components/Table/Misc/ShareViewModal.svelte +252 -281
  99. package/dist/Components/Table/Misc/SidePanel.svelte +32 -35
  100. package/dist/Components/Table/Misc/TableConfigurationModal.svelte +574 -629
  101. package/dist/Components/Table/Misc/TableFooter.svelte +326 -332
  102. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +134 -140
  103. package/dist/Components/Table/Misc/TableSidebar.svelte +183 -198
  104. package/dist/Components/Table/Misc/TableViewDropdown.svelte +83 -103
  105. package/dist/Components/Table/Misc/ToolboxPanel.svelte +83 -100
  106. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +88 -107
  107. package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +163 -190
  108. package/dist/Components/Table/NestedTable.svelte +102 -128
  109. package/dist/Components/Table/Table.svelte +531 -663
  110. package/dist/Components/Test/TestContextConsumer.svelte +11 -13
  111. package/dist/Components/TextArea.svelte +95 -130
  112. package/dist/Components/TextInput.svelte +125 -176
  113. package/dist/Components/ThreeStateRadio.svelte +111 -130
  114. package/dist/Components/Touch/BoolCard.svelte +33 -45
  115. package/dist/Components/Touch/DateModal.svelte +164 -204
  116. package/dist/Components/Touch/EditCard.svelte +48 -59
  117. package/dist/Components/Touch/InfoCard.svelte +28 -31
  118. package/dist/Components/Touch/InfoTextCard.svelte +26 -28
  119. package/dist/Components/Touch/ModalExplanation.svelte +15 -17
  120. package/dist/Components/Touch/NumberKeyboard.svelte +181 -218
  121. package/dist/Components/Touch/NumberModal.svelte +59 -79
  122. package/dist/Components/Touch/PlusMinusCard.svelte +43 -46
  123. package/dist/Components/Touch/SelectModal.svelte +111 -126
  124. package/dist/Components/Touch/SummaryCard.svelte +80 -93
  125. package/dist/Components/Touch/TextAreaModal.svelte +72 -94
  126. package/dist/Components/Touch/TextModal.svelte +77 -105
  127. package/dist/Components/Touch/TouchCard.svelte +31 -33
  128. package/dist/Components/Touch/TouchModal.svelte +214 -270
  129. package/dist/Components/Touch/UtilityButton.svelte +88 -109
  130. package/dist/Components/VerticalTabGroup.svelte +60 -78
  131. package/dist/Components/VerticalTabGroupButton.svelte +54 -58
  132. package/dist/Helpers/Datamatrix.d.ts +19 -19
  133. package/dist/Helpers/Datamatrix.js +291 -291
  134. package/dist/Types/Examples/ExampleModal.svelte +31 -35
  135. package/dist/index.d.ts +2 -0
  136. package/dist/index.js +1 -0
  137. package/dist/scss/_basics.scss +12 -12
  138. package/dist/scss/_colours.scss +134 -134
  139. package/dist/scss/_mixins.scss +3392 -3392
  140. package/dist/scss/_motion.scss +57 -57
  141. package/dist/scss/_sizing.scss +85 -85
  142. package/dist/scss/_transitions.scss +8 -8
  143. package/package.json +1 -1
@@ -1,200 +1,177 @@
1
- <svelte:options runes />
2
-
3
- <!--
4
- @component
5
- Generic local-collection paginator. Renders a window of items via a
6
- `snippet` plus a control bar with page-number buttons, a jump-to-page
7
- input, and previous/next buttons. The component is generic over
8
- `T extends object` with a `key: keyof T` used as the
9
- `{#each}` key inside the rendered page.
10
-
11
- ### Usage
12
-
13
- ```svelte
14
- <Pagination snippet={itemSnippet} pageSize={20} items={dataWrapper.value} key="id" />
15
- ```
16
-
17
- The `pageButtons` window (up to five numbered buttons) is recomputed
18
- via `$derived`, not via an `$effect`, so the page bar diffs in a
19
- single reactive pass and the keyed `{#each pageButtons as page ...}`
20
- preserves button identity across page changes.
21
- -->
22
- <script
23
- lang="ts"
24
- generics="T extends object"
25
- >
26
- import { autoPluralise, generateWeakId } from '../../Helpers/Helpers.svelte.js';
27
- import { Colour } from '../../scss/colours.js';
28
- import { Side } from '../../Types/Internal/Side.js';
29
- import { Size } from '../../Types/Internal/Size.js';
30
- import { Variant } from '../../Types/Internal/Variant.js';
31
- import Button from '../Button.svelte';
32
- import Icon from '../Icon.svelte';
33
- import NumberInput from '../NumberInput.svelte';
34
- import type { PaginationProps } from './PaginationProps.js';
35
-
36
- const {
37
- items,
38
- key,
39
- pageSize = 20,
40
- snippet,
41
- itemName = 'Item',
42
- border = false,
43
- padding = '1.5rem', // sizing.$regular-padding
44
- gap = '1.5rem', // sizing.$regular-gap
45
- height,
46
- }: PaginationProps<T> = $props();
47
-
48
- const _uuid = generateWeakId();
49
- let pageIndex = $state(0);
50
- const pageValue = $derived(pageIndex + 1);
51
- const startIndex = $derived(pageIndex * pageSize);
52
- const pageItems = $derived(items.slice(startIndex, startIndex + pageSize));
53
-
54
- const lastPage = $derived(Math.ceil(items.length / pageSize));
55
- const lastPageIndex = $derived(lastPage - 1);
56
-
57
- // Debounced jump-to-page handler. Reads the raw event because the
58
- // debounce drives state, not the input value directly; binding to
59
- // `pageValue` would defeat the debounce.
60
- let debounceTimeout = -1;
61
- function onNumberInput(e: Event) {
62
- const value = (e.target as HTMLInputElement).value;
63
- const page = Number(value);
64
-
65
- clearTimeout(debounceTimeout);
66
- if (!isNaN(page)) {
67
- debounceTimeout = setTimeout(() => {
68
- pageIndex = Math.max(page - 1, 0);
69
- }, 400) as unknown as number;
70
- }
1
+ <svelte:options runes />
2
+
3
+ <!--
4
+ @component
5
+ Generic local-collection paginator. Renders a window of items via a
6
+ `snippet` plus a control bar with page-number buttons, a jump-to-page
7
+ input, and previous/next buttons. The component is generic over
8
+ `T extends object` with a `key: keyof T` used as the
9
+ `{#each}` key inside the rendered page.
10
+
11
+ ### Usage
12
+
13
+ ```svelte
14
+ <Pagination snippet={itemSnippet} pageSize={20} items={dataWrapper.value} key="id" />
15
+ ```
16
+
17
+ The `pageButtons` window (up to five numbered buttons) is recomputed
18
+ via `$derived`, not via an `$effect`, so the page bar diffs in a
19
+ single reactive pass and the keyed `{#each pageButtons as page ...}`
20
+ preserves button identity across page changes.
21
+ -->
22
+ <script
23
+ lang="ts"
24
+ generics="T extends object"
25
+ >import { autoPluralise, generateWeakId } from "../../Helpers/Helpers.svelte.js";
26
+ import { Colour } from "../../scss/colours.js";
27
+ import { Side } from "../../Types/Internal/Side.js";
28
+ import { Size } from "../../Types/Internal/Size.js";
29
+ import { Variant } from "../../Types/Internal/Variant.js";
30
+ import Button from "../Button.svelte";
31
+ import Icon from "../Icon.svelte";
32
+ import NumberInput from "../NumberInput.svelte";
33
+ const { items, key, pageSize = 20, snippet, itemName = "Item", border = false, padding = "1.5rem", gap = "1.5rem", height } = $props();
34
+ const _uuid = generateWeakId();
35
+ let pageIndex = $state(0);
36
+ const pageValue = $derived(pageIndex + 1);
37
+ const startIndex = $derived(pageIndex * pageSize);
38
+ const pageItems = $derived(items.slice(startIndex, startIndex + pageSize));
39
+ const lastPage = $derived(Math.ceil(items.length / pageSize));
40
+ const lastPageIndex = $derived(lastPage - 1);
41
+ // Debounced jump-to-page handler. Reads the raw event because the
42
+ // debounce drives state, not the input value directly; binding to
43
+ // `pageValue` would defeat the debounce.
44
+ let debounceTimeout = -1;
45
+ function onNumberInput(e) {
46
+ const value = e.target.value;
47
+ const page = Number(value);
48
+ clearTimeout(debounceTimeout);
49
+ if (!isNaN(page)) {
50
+ debounceTimeout = setTimeout(() => {
51
+ pageIndex = Math.max(page - 1, 0);
52
+ }, 400);
71
53
  }
72
-
73
- /**
74
- * Compute the window of up to five page numbers shown in the
75
- * control bar. Centred on the current page where possible and
76
- * clamped against both ends. Pulled into a stand-alone helper so
77
- * the windowing logic is unit-testable from outside the component.
78
- */
79
- function getPageWindow(
80
- currentIndex: number,
81
- totalPages: number,
82
- windowSize: number
83
- ): Array<number> {
84
- const start = Math.min(totalPages - 2, currentIndex - 1);
85
- const clampedStart = Math.max(1, Math.min(start, totalPages - (windowSize - 1)));
86
- const count = Math.min(totalPages, windowSize);
87
- const out = new Array<number>(count);
88
- for (let i = 0; i < count; i++) {
89
- out[i] = clampedStart + i;
90
- }
91
- return out;
54
+ }
55
+ /**
56
+ * Compute the window of up to five page numbers shown in the
57
+ * control bar. Centred on the current page where possible and
58
+ * clamped against both ends. Pulled into a stand-alone helper so
59
+ * the windowing logic is unit-testable from outside the component.
60
+ */
61
+ function getPageWindow(currentIndex, totalPages, windowSize) {
62
+ const start = Math.min(totalPages - 2, currentIndex - 1);
63
+ const clampedStart = Math.max(1, Math.min(start, totalPages - (windowSize - 1)));
64
+ const count = Math.min(totalPages, windowSize);
65
+ const out = new Array(count);
66
+ for (let i = 0; i < count; i++) {
67
+ out[i] = clampedStart + i;
92
68
  }
93
-
94
- const pageButtons = $derived(getPageWindow(pageIndex, lastPage, 5));
95
- </script>
96
-
97
- <div
98
- class="wrapper"
99
- class:border
100
- style:padding
101
- style:gap
102
- style:height
103
- >
104
- {#each pageItems as item, index (item[key])}
105
- {@render snippet(item, index)}
106
- {/each}
107
- <div class="spread_row bottom_row">
108
- <div class="block">
109
- <span>{items.length} {autoPluralise(itemName, items.length)}</span>
110
- </div>
111
-
112
- <div class="block records-per-page">
113
- <span>Records per Page: {pageSize}</span>
114
- </div>
115
-
116
- <div class="spacer"></div>
117
-
118
- <div
119
- class="scrollable"
120
- role="navigation"
121
- aria-label="Pagination"
122
- >
123
- <div class="block">
124
- <Icon
125
- name="paper"
126
- colour={Colour['$ui-blue-6']}
127
- />
128
- <span>{lastPage} {autoPluralise('Page', lastPage)}</span>
129
- </div>
130
-
131
- <div class="block">
132
- <label for="{_uuid}-jump-to-page"
133
- ><Icon
134
- name="arrow-move-horizontal"
135
- colour={Colour['$ui-blue-6']}
136
- /></label
137
- >
138
-
139
- <label for="{_uuid}-jump-to-page">Jump to page:</label>
140
-
141
- <NumberInput
142
- id="{_uuid}-jump-to-page"
143
- value={pageValue}
144
- oninput={onNumberInput}
145
- />
146
- </div>
147
-
148
- <div class="block nopad page-arrow">
149
- <Button
150
- variant={Variant.Toolbar}
151
- disabled={pageIndex === 0}
152
- side={Side.Bottom}
153
- onclick={() => {
154
- pageIndex = Math.max(pageIndex - 1, 0);
155
- }}
156
- size={Size.FillHeight}
157
- iconLeft={{
158
- name: 'left-close',
159
- size: Size.FillHeight,
160
- }}>Previous Page</Button
161
- >
162
- </div>
163
-
164
- {#each pageButtons as pageNumber (pageNumber)}
165
- <div class="block nopad">
166
- <Button
167
- variant={Variant.Toolbar}
168
- side={Side.Bottom}
169
- size={Size.FillHeight}
170
- toggled={pageIndex + 1 === pageNumber}
171
- label={`Go to page ${pageNumber.toString()}`}
172
- onclick={() => {
173
- pageIndex = pageNumber - 1;
174
- }}>{pageNumber}</Button
175
- >
176
- </div>
177
- {/each}
178
-
179
- <div class="block nopad page-arrow">
180
- <Button
181
- variant={Variant.Toolbar}
182
- side={Side.Bottom}
183
- size={Size.FillHeight}
184
- onclick={() => {
185
- pageIndex = Math.min(pageIndex + 1, lastPageIndex);
186
- }}
187
- disabled={pageIndex == lastPageIndex}
188
- iconRight={{
189
- name: 'right-close',
190
- size: Size.FillHeight,
191
- }}>Next Page</Button
192
- >
193
- </div>
194
- </div>
195
- </div>
196
- </div>
197
-
69
+ return out;
70
+ }
71
+ const pageButtons = $derived(getPageWindow(pageIndex, lastPage, 5));
72
+ </script>
73
+
74
+ <div
75
+ class="wrapper"
76
+ class:border
77
+ style:padding
78
+ style:gap
79
+ style:height
80
+ >
81
+ {#each pageItems as item, index (item[key])}
82
+ {@render snippet(item, index)}
83
+ {/each}
84
+ <div class="spread_row bottom_row">
85
+ <div class="block">
86
+ <span>{items.length} {autoPluralise(itemName, items.length)}</span>
87
+ </div>
88
+
89
+ <div class="block records-per-page">
90
+ <span>Records per Page: {pageSize}</span>
91
+ </div>
92
+
93
+ <div class="spacer"></div>
94
+
95
+ <div
96
+ class="scrollable"
97
+ role="navigation"
98
+ aria-label="Pagination"
99
+ >
100
+ <div class="block">
101
+ <Icon
102
+ name="paper"
103
+ colour={Colour['$ui-blue-6']}
104
+ />
105
+ <span>{lastPage} {autoPluralise('Page', lastPage)}</span>
106
+ </div>
107
+
108
+ <div class="block">
109
+ <label for="{_uuid}-jump-to-page"
110
+ ><Icon
111
+ name="arrow-move-horizontal"
112
+ colour={Colour['$ui-blue-6']}
113
+ /></label
114
+ >
115
+
116
+ <label for="{_uuid}-jump-to-page">Jump to page:</label>
117
+
118
+ <NumberInput
119
+ id="{_uuid}-jump-to-page"
120
+ value={pageValue}
121
+ oninput={onNumberInput}
122
+ />
123
+ </div>
124
+
125
+ <div class="block nopad page-arrow">
126
+ <Button
127
+ variant={Variant.Toolbar}
128
+ disabled={pageIndex === 0}
129
+ side={Side.Bottom}
130
+ onclick={() => {
131
+ pageIndex = Math.max(pageIndex - 1, 0);
132
+ }}
133
+ size={Size.FillHeight}
134
+ iconLeft={{
135
+ name: 'left-close',
136
+ size: Size.FillHeight,
137
+ }}>Previous Page</Button
138
+ >
139
+ </div>
140
+
141
+ {#each pageButtons as pageNumber (pageNumber)}
142
+ <div class="block nopad">
143
+ <Button
144
+ variant={Variant.Toolbar}
145
+ side={Side.Bottom}
146
+ size={Size.FillHeight}
147
+ toggled={pageIndex + 1 === pageNumber}
148
+ label={`Go to page ${pageNumber.toString()}`}
149
+ onclick={() => {
150
+ pageIndex = pageNumber - 1;
151
+ }}>{pageNumber}</Button
152
+ >
153
+ </div>
154
+ {/each}
155
+
156
+ <div class="block nopad page-arrow">
157
+ <Button
158
+ variant={Variant.Toolbar}
159
+ side={Side.Bottom}
160
+ size={Size.FillHeight}
161
+ onclick={() => {
162
+ pageIndex = Math.min(pageIndex + 1, lastPageIndex);
163
+ }}
164
+ disabled={pageIndex == lastPageIndex}
165
+ iconRight={{
166
+ name: 'right-close',
167
+ size: Size.FillHeight,
168
+ }}>Next Page</Button
169
+ >
170
+ </div>
171
+ </div>
172
+ </div>
173
+ </div>
174
+
198
175
  <style>.wrapper {
199
176
  display: flex;
200
177
  flex: 1;
@@ -269,4 +246,4 @@ preserves button identity across page changes.
269
246
  }
270
247
  .spread_row .spacer {
271
248
  flex-grow: 2;
272
- }</style>
249
+ }</style>
@@ -1,36 +1,34 @@
1
- <svelte:options runes />
2
-
3
- <!-- @component
4
- An empty component that only exists to export common snippets
5
- (`pending` and `failed`) for re-use by `{#await}` blocks and other
6
- async-status surfaces. The component itself renders nothing.
7
- -->
8
- <script
9
- lang="ts"
10
- module
11
- >
12
- import { getErrorMessage, loadingText } from '../../Helpers/Helpers.svelte.js';
13
- import Button from '../Button.svelte';
14
-
15
- // The local `{#snippet _pending}` / `{#snippet _failed}` declarations
16
- // must be hoistable references for `export const` to bind to them.
17
- // Svelte 5 currently requires the snippet name to differ from the
18
- // exported binding, so we use an underscore prefix on the local
19
- // declaration and expose the un-prefixed name as the public surface.
20
- export const pending = _pending;
21
- export const failed = _failed;
22
- </script>
23
-
24
- {#snippet _pending()}
25
- {loadingText}
26
- {/snippet}
27
- {#snippet _failed(e: unknown, retry?: () => void)}
28
- Error: {getErrorMessage(e)}
29
- {#if retry}
30
- <Button
31
- onclick={() => {
32
- retry();
33
- }}>Retry</Button
34
- >
35
- {/if}
36
- {/snippet}
1
+ <svelte:options runes />
2
+
3
+ <!-- @component
4
+ An empty component that only exists to export common snippets
5
+ (`pending` and `failed`) for re-use by `{#await}` blocks and other
6
+ async-status surfaces. The component itself renders nothing.
7
+ -->
8
+ <script
9
+ lang="ts"
10
+ module
11
+ >import { getErrorMessage, loadingText } from "../../Helpers/Helpers.svelte.js";
12
+ import Button from "../Button.svelte";
13
+ // The local `{#snippet _pending}` / `{#snippet _failed}` declarations
14
+ // must be hoistable references for `export const` to bind to them.
15
+ // Svelte 5 currently requires the snippet name to differ from the
16
+ // exported binding, so we use an underscore prefix on the local
17
+ // declaration and expose the un-prefixed name as the public surface.
18
+ export const pending = _pending;
19
+ export const failed = _failed;
20
+ </script>
21
+
22
+ {#snippet _pending()}
23
+ {loadingText}
24
+ {/snippet}
25
+ {#snippet _failed(e: unknown, retry?: () => void)}
26
+ Error: {getErrorMessage(e)}
27
+ {#if retry}
28
+ <Button
29
+ onclick={() => {
30
+ retry();
31
+ }}>Retry</Button
32
+ >
33
+ {/if}
34
+ {/snippet}
@@ -1,40 +1,38 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="T"
6
- >
7
- import type { BigRadioOption } from '../Types/Internal/BigRadioOption.js';
8
- import type { BigRadioSetProps } from './BigRadioSetProps.js';
9
- let { name, options, selected = $bindable(), onchange }: BigRadioSetProps<T> = $props();
10
- </script>
11
-
12
- <div
13
- class="wrapper"
14
- role="radiogroup"
15
- >
16
- {#each options as option (option.value)}
17
- <!-- eslint-disable-next-line @typescript-eslint/no-confusing-void-expression -->
18
- {@render radio(option)}
19
- {/each}
20
- </div>
21
-
22
- {#snippet radio(option: BigRadioOption<T>)}
23
- <label class:selected={selected === option.value}>
24
- <input
25
- type="radio"
26
- {name}
27
- bind:group={selected}
28
- value={option.value}
29
- onchange={() => void onchange?.(option.value)}
30
- />
31
- <div class="text">
32
- <h5 class="title">{option.label}</h5>
33
- <p class="note">{option.info}</p>
34
- </div>
35
- </label>
36
- {/snippet}
37
-
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="T"
6
+ >let { name, options, selected = $bindable(), onchange } = $props();
7
+ export {};
8
+ </script>
9
+
10
+ <div
11
+ class="wrapper"
12
+ role="radiogroup"
13
+ >
14
+ {#each options as option (option.value)}
15
+ <!-- eslint-disable-next-line @typescript-eslint/no-confusing-void-expression -->
16
+ {@render radio(option)}
17
+ {/each}
18
+ </div>
19
+
20
+ {#snippet radio(option: BigRadioOption<T>)}
21
+ <label class:selected={selected === option.value}>
22
+ <input
23
+ type="radio"
24
+ {name}
25
+ bind:group={selected}
26
+ value={option.value}
27
+ onchange={() => void onchange?.(option.value)}
28
+ />
29
+ <div class="text">
30
+ <h5 class="title">{option.label}</h5>
31
+ <p class="note">{option.info}</p>
32
+ </div>
33
+ </label>
34
+ {/snippet}
35
+
38
36
  <style>.wrapper {
39
37
  display: flex;
40
38
  flex-flow: row wrap;
@@ -87,4 +85,4 @@ label.selected {
87
85
  }
88
86
  label.selected h5 {
89
87
  color: #ffffff;
90
- }</style>
88
+ }</style>