@lavalogic/scoria 0.40.28 → 0.40.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/Components/AccordionGroup.svelte +1 -1
  2. package/dist/Components/AlertModal.svelte +3 -2
  3. package/dist/Components/Base/Pagination.svelte +20 -12
  4. package/dist/Components/Base/PaginationProps.d.ts +5 -0
  5. package/dist/Components/Base/Snippets.svelte +4 -3
  6. package/dist/Components/Button.svelte +9 -8
  7. package/dist/Components/Checkbox.svelte +2 -2
  8. package/dist/Components/ChipsInput.svelte +6 -6
  9. package/dist/Components/CollapsibleCard.svelte +3 -3
  10. package/dist/Components/ConditionBuilder/ConditionBuilder.svelte +7 -6
  11. package/dist/Components/Contexts/ContextMenu.svelte +3 -2
  12. package/dist/Components/Contexts/Toast.svelte +4 -3
  13. package/dist/Components/Contexts/ToastContainer.svelte +6 -5
  14. package/dist/Components/Contexts/Tooltip.svelte +2 -2
  15. package/dist/Components/DataMatrixIcon.svelte +4 -3
  16. package/dist/Components/DateInput.svelte +25 -26
  17. package/dist/Components/DesktopModal.svelte +1 -1
  18. package/dist/Components/DimensionInput.svelte +30 -31
  19. package/dist/Components/DragMenu/DragMenuHolder.svelte +6 -6
  20. package/dist/Components/DragMenu/DraggableCard.svelte +3 -3
  21. package/dist/Components/FileCard.svelte +3 -2
  22. package/dist/Components/FileUpload.svelte +24 -25
  23. package/dist/Components/GridInput.svelte +2 -2
  24. package/dist/Components/HorizontalTabGroup.svelte +1 -1
  25. package/dist/Components/Icon.svelte +8 -2
  26. package/dist/Components/IconProps.d.ts +7 -0
  27. package/dist/Components/Icons.js +365 -365
  28. package/dist/Components/LoadingAnimation.svelte +50 -30
  29. package/dist/Components/LoadingAnimation.svelte.d.ts +1 -1
  30. package/dist/Components/LoadingModal.svelte +3 -2
  31. package/dist/Components/Modal.svelte +9 -9
  32. package/dist/Components/MultiSelect.svelte +37 -18
  33. package/dist/Components/MultiSelectCommonProps.d.ts +15 -1
  34. package/dist/Components/Nav/Nav.svelte +13 -13
  35. package/dist/Components/Nav/ServiceMenuItem.svelte +2 -0
  36. package/dist/Components/Nav/ServicesNav.svelte +6 -6
  37. package/dist/Components/NumberInput.svelte +25 -26
  38. package/dist/Components/PasswordInput.svelte +25 -24
  39. package/dist/Components/PopoverButton.svelte +8 -8
  40. package/dist/Components/QuerySelect.svelte +33 -16
  41. package/dist/Components/QuerySelectProps.d.ts +10 -1
  42. package/dist/Components/ResourceCalendar/ResourceCalendar.svelte +23 -22
  43. package/dist/Components/SidebarPanel.svelte +1 -1
  44. package/dist/Components/SingleSelect.svelte +30 -15
  45. package/dist/Components/SingleSelectCommonProps.d.ts +10 -1
  46. package/dist/Components/StepForm.svelte +6 -5
  47. package/dist/Components/Switch.svelte +5 -5
  48. package/dist/Components/Table/Body/QuickSearchCell.svelte +363 -351
  49. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +5 -6
  50. package/dist/Components/Table/Body/Rows/ColumnList.svelte +3 -2
  51. package/dist/Components/Table/Body/Rows/ColumnListRow.svelte +7 -6
  52. package/dist/Components/Table/Body/Rows/Columns/ActionsCell.svelte +6 -7
  53. package/dist/Components/Table/Body/Rows/Columns/BubbleCell.svelte +8 -7
  54. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +11 -9
  55. package/dist/Components/Table/Body/Rows/Columns/FocusableImmutableCell.svelte +7 -8
  56. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +5 -5
  57. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +3 -2
  58. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +3 -3
  59. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +5 -4
  60. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +9 -6
  61. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +4 -4
  62. package/dist/Components/Table/Body/Rows/Columns/TableQuerySelect.svelte +4 -4
  63. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +3 -3
  64. package/dist/Components/Table/Body/Rows/Columns/TableSelect.svelte +9 -7
  65. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +7 -6
  66. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +6 -7
  67. package/dist/Components/Table/Body/Rows/TableRow.svelte +6 -5
  68. package/dist/Components/Table/Body/TableBody.svelte +2 -2
  69. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +3 -2
  70. package/dist/Components/Table/Headers/SelectAllHeader.svelte +4 -3
  71. package/dist/Components/Table/Headers/TableHead.svelte +6 -5
  72. package/dist/Components/Table/Misc/ColumnPanel.svelte +5 -4
  73. package/dist/Components/Table/Misc/ColumnPanelModal.svelte +5 -4
  74. package/dist/Components/Table/Misc/FilterInput.svelte +23 -14
  75. package/dist/Components/Table/Misc/FilterPanel.svelte +12 -11
  76. package/dist/Components/Table/Misc/FilterPanelModal.svelte +3 -2
  77. package/dist/Components/Table/Misc/ShareViewModal.svelte +25 -15
  78. package/dist/Components/Table/Misc/SidePanel.svelte +2 -2
  79. package/dist/Components/Table/Misc/TableConfigurationModal.svelte +50 -40
  80. package/dist/Components/Table/Misc/TableFooter.svelte +18 -12
  81. package/dist/Components/Table/Misc/TableHorizontalBar.svelte +8 -7
  82. package/dist/Components/Table/Misc/TableSidebar.svelte +8 -7
  83. package/dist/Components/Table/Misc/TableViewDropdown.svelte +6 -2
  84. package/dist/Components/Table/Misc/ToolboxPanel.svelte +8 -7
  85. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +9 -8
  86. package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +23 -14
  87. package/dist/Components/Table/Misc/numberDateFilterTypes.d.ts +7 -4
  88. package/dist/Components/Table/Misc/numberDateFilterTypes.js +27 -15
  89. package/dist/Components/Table/Misc/stringFilterTypes.d.ts +7 -3
  90. package/dist/Components/Table/Misc/stringFilterTypes.js +26 -16
  91. package/dist/Components/Table/NestedTable.svelte +4 -0
  92. package/dist/Components/Table/Table.svelte +19 -18
  93. package/dist/Components/Table/Types/Columns/Definitions/Actions/ActionsDef.svelte.js +2 -1
  94. package/dist/Components/Table/Types/Columns/Definitions/RowSelection/RowSelectionDef.svelte.js +2 -1
  95. package/dist/Components/Table/Types/Context/ClipboardState.svelte.js +3 -2
  96. package/dist/Components/Table/Types/Context/ViewState.svelte.js +5 -2
  97. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +6 -0
  98. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +8 -0
  99. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.js +14 -0
  100. package/dist/Components/Table/Types/Public/CreateTableOptions.d.ts +3 -0
  101. package/dist/Components/Table/createTable.svelte.js +3 -0
  102. package/dist/Components/TextArea.svelte +24 -23
  103. package/dist/Components/TextInput.svelte +25 -26
  104. package/dist/Components/ThreeStateRadio.svelte +21 -16
  105. package/dist/Components/Touch/BoolCard.svelte +2 -2
  106. package/dist/Components/Touch/DateModal.svelte +5 -4
  107. package/dist/Components/Touch/EditCard.svelte +7 -7
  108. package/dist/Components/Touch/NumberKeyboard.svelte +3 -2
  109. package/dist/Components/Touch/NumberModal.svelte +4 -3
  110. package/dist/Components/Touch/PlusMinusCard.svelte +6 -5
  111. package/dist/Components/Touch/SelectModal.svelte +5 -4
  112. package/dist/Components/Touch/SummaryCard.svelte +9 -9
  113. package/dist/Components/Touch/TextAreaModal.svelte +4 -3
  114. package/dist/Components/Touch/TextModal.svelte +4 -3
  115. package/dist/Components/Touch/TouchCard.svelte +4 -3
  116. package/dist/Components/Touch/TouchModal.svelte +9 -8
  117. package/dist/Components/VerticalTabGroup.svelte +5 -4
  118. package/dist/Contexts/AlertContext.svelte.d.ts +8 -5
  119. package/dist/Contexts/AlertContext.svelte.js +10 -9
  120. package/dist/Helpers/Helpers.svelte.d.ts +23 -2
  121. package/dist/Helpers/Helpers.svelte.js +37 -9
  122. package/dist/Strings/locale.d.ts +19 -0
  123. package/dist/Strings/locale.js +27 -0
  124. package/dist/index.d.ts +1 -0
  125. package/dist/index.js +1 -0
  126. package/dist/scss/_mixins.scss +3406 -3392
  127. package/package.json +14 -7
@@ -1,8 +1,9 @@
1
1
  <svelte:options runes />
2
2
 
3
- <script lang="ts">import { InputVariant } from "../Types/Internal/InputVariant.js";
3
+ <script lang="ts">import { m as i18n } from "../paraglide/messages.js";
4
+ import { InputVariant } from "../Types/Internal/InputVariant.js";
4
5
  const min = 0;
5
- let { id, x = $bindable(null), y = $bindable(null), z = $bindable(null), max, labelTop = "Dimensions", optional = true, placeholder, required = false, variant = InputVariant.Default, decimal = false, invalid = false, showErrorColours = false, disabled, leftIcon, onblur, onfocus, onkeydown, onchange, inputRefs = $bindable({}), "data-type": dataType } = $props();
6
+ let { id, x = $bindable(null), y = $bindable(null), z = $bindable(null), max, labelTop = i18n["scoria.label.dimensions"](), optional = true, placeholder, required = false, variant = InputVariant.Default, decimal = false, invalid = false, showErrorColours = false, disabled, leftIcon, onblur, onfocus, onkeydown, onchange, inputRefs = $bindable({}), "data-type": dataType } = $props();
6
7
  function clamp(value) {
7
8
  if (isNaN(value)) {
8
9
  return 0;
@@ -42,12 +43,12 @@ const zId = $derived(id ? `${id}-z` : undefined);
42
43
  class:for-default={variant === InputVariant.Default}
43
44
  class:invalid={isInvalid}
44
45
  >{labelTop}{#if optional}
45
- - <span class="optional">optional</span>{/if}</span
46
+ - <span class="optional">{i18n['scoria.label.optional']()}</span>{/if}</span
46
47
  >
47
48
  {#if variant === InputVariant.Default}
48
49
  <span class="border"
49
50
  >{labelTop}{#if optional}
50
- - <span class="optional">optional</span>{/if}</span
51
+ - <span class="optional">{i18n['scoria.label.optional']()}</span>{/if}</span
51
52
  >
52
53
  {/if}
53
54
  <div
@@ -130,8 +131,8 @@ const zId = $derived(id ? `${id}-z` : undefined);
130
131
  font-weight: 400;
131
132
  padding-top: var(--input-padding-top, 0.65rem);
132
133
  padding-bottom: var(--input-padding-bottom, 0.55rem);
133
- padding-left: var(--input-padding-left, 0.75rem);
134
- padding-right: var(--input-padding-right, 0.75rem);
134
+ padding-inline-start: var(--input-padding-inline-start, 0.75rem);
135
+ padding-inline-end: var(--input-padding-inline-end, 0.75rem);
135
136
  border: var(--input-border, solid 1px #cbd4da);
136
137
  color: #3a4952;
137
138
  transition: border-color ease-out 0.15s 0s, background-color ease-out 0.15s 0s, color ease-out 0.15s 0s, fill ease-out 0.15s 0s;
@@ -163,8 +164,8 @@ span.right-label.inset {
163
164
  font-weight: 500;
164
165
  position: absolute;
165
166
  background-color: #f4f7f9;
166
- border-left: solid 1px #cbd4da;
167
- right: 1px;
167
+ border-inline-start: solid 1px #cbd4da;
168
+ inset-inline-end: 1px;
168
169
  top: 1px;
169
170
  bottom: 1px;
170
171
  border-radius: 0 4px 4px 0;
@@ -188,11 +189,11 @@ span.right-label.for-modal {
188
189
 
189
190
  span.for-default {
190
191
  position: absolute;
191
- left: 0.5rem;
192
+ inset-inline-start: 0.5rem;
192
193
  font-size: 0.875rem;
193
194
  user-select: none;
194
- padding-left: 0.5rem;
195
- padding-right: 0.5rem;
195
+ padding-inline-start: 0.5rem;
196
+ padding-inline-end: 0.5rem;
196
197
  line-height: 1rem;
197
198
  padding: 0rem 0.5rem;
198
199
  top: calc(-0.875rem / 2 - 2px);
@@ -206,11 +207,11 @@ span.for-default.invalid {
206
207
 
207
208
  span.border {
208
209
  position: absolute;
209
- left: 0.5rem;
210
+ inset-inline-start: 0.5rem;
210
211
  font-size: 0.875rem;
211
212
  user-select: none;
212
- padding-left: 0.5rem;
213
- padding-right: 0.5rem;
213
+ padding-inline-start: 0.5rem;
214
+ padding-inline-end: 0.5rem;
214
215
  line-height: 1rem;
215
216
  z-index: 1;
216
217
  white-space: nowrap;
@@ -228,11 +229,11 @@ span.border.invalid {
228
229
  }
229
230
 
230
231
  .left-pad {
231
- padding-left: 3rem;
232
+ padding-inline-start: 3rem;
232
233
  }
233
234
 
234
235
  .right-pad {
235
- padding-right: 3rem;
236
+ padding-inline-end: 3rem;
236
237
  }
237
238
 
238
239
  .icon-container {
@@ -247,13 +248,12 @@ span.border.invalid {
247
248
  height: 100%;
248
249
  top: 0;
249
250
  bottom: 0;
250
- left: 0;
251
- right: 0;
251
+ inset-inline: 0;
252
252
  }
253
253
 
254
254
  .error {
255
255
  color: #aa1414;
256
- margin-left: 0.25rem;
256
+ margin-inline-start: 0.25rem;
257
257
  display: block;
258
258
  overflow-x: auto;
259
259
  white-space: nowrap;
@@ -261,7 +261,7 @@ span.border.invalid {
261
261
 
262
262
  .right-icon {
263
263
  position: absolute;
264
- right: 0.5rem;
264
+ inset-inline-end: 0.5rem;
265
265
  top: 50%;
266
266
  translate: 0 -50%;
267
267
  }
@@ -285,8 +285,7 @@ label {
285
285
  position: absolute;
286
286
  top: 0;
287
287
  bottom: 0;
288
- left: 0;
289
- right: 0;
288
+ inset-inline: 0;
290
289
  }
291
290
  .error-wrapper.for-modal {
292
291
  flex: unset;
@@ -308,7 +307,7 @@ label.for-modal span.top-label {
308
307
  z-index: 1;
309
308
  position: absolute;
310
309
  top: 0.45rem;
311
- left: 0.75rem;
310
+ inset-inline-start: 0.75rem;
312
311
  }
313
312
  label.for-modal span.top-label.invalid {
314
313
  color: #aa1414;
@@ -329,17 +328,17 @@ label.for-modal input.for-modal {
329
328
  height: 100%;
330
329
  resize: none;
331
330
  padding-top: 1.44rem;
332
- padding-right: 0.75rem;
331
+ padding-inline-end: 0.75rem;
333
332
  padding-bottom: 0.25rem;
334
- padding-left: 0.75rem;
333
+ padding-inline-start: 0.75rem;
335
334
  font-size: 1.5rem;
336
335
  font-weight: 600;
337
336
  }
338
337
  label.for-modal input.for-modal.left-pad {
339
- padding-left: 3.5rem;
338
+ padding-inline-start: 3.5rem;
340
339
  }
341
340
  label.for-modal input.for-modal.right-pad {
342
- padding-right: 3.5rem;
341
+ padding-inline-end: 3.5rem;
343
342
  }
344
343
  label.for-modal input {
345
344
  height: 3rem;
@@ -376,12 +375,12 @@ span.border {
376
375
  }
377
376
 
378
377
  span.right-label.inset {
379
- border-left-color: transparent;
378
+ border-inline-start-color: transparent;
380
379
  }
381
380
 
382
381
  div.spacer {
383
382
  border: solid 1px #cbd4da;
384
- border-left-color: transparent;
383
+ border-inline-start-color: transparent;
385
384
  border-radius: 0 4px 4px 0;
386
385
  width: 47px;
387
386
  flex-shrink: 0;
@@ -395,9 +394,9 @@ div.spacer {
395
394
  }
396
395
  .icon-container input:first-of-type {
397
396
  border-radius: 4px 0 0 4px;
398
- border-right-color: transparent;
397
+ border-inline-end-color: transparent;
399
398
  }
400
399
  .icon-container input:last-of-type {
401
400
  border-radius: 0;
402
- border-left-color: transparent;
401
+ border-inline-start-color: transparent;
403
402
  }</style>
@@ -102,11 +102,11 @@ const snippet = $derived(customSnippet ?? draggableWithSelect);
102
102
 
103
103
  <style>.top-label {
104
104
  position: absolute;
105
- left: 0.5rem;
105
+ inset-inline-start: 0.5rem;
106
106
  font-size: 0.875rem;
107
107
  user-select: none;
108
- padding-left: 0.5rem;
109
- padding-right: 0.5rem;
108
+ padding-inline-start: 0.5rem;
109
+ padding-inline-end: 0.5rem;
110
110
  line-height: 1rem;
111
111
  padding: 0rem 0.5rem;
112
112
  top: calc(-0.875rem / 2 - 2px);
@@ -120,11 +120,11 @@ const snippet = $derived(customSnippet ?? draggableWithSelect);
120
120
 
121
121
  .top-label-border {
122
122
  position: absolute;
123
- left: 0.5rem;
123
+ inset-inline-start: 0.5rem;
124
124
  font-size: 0.875rem;
125
125
  user-select: none;
126
- padding-left: 0.5rem;
127
- padding-right: 0.5rem;
126
+ padding-inline-start: 0.5rem;
127
+ padding-inline-end: 0.5rem;
128
128
  line-height: 1rem;
129
129
  z-index: 1;
130
130
  white-space: nowrap;
@@ -144,10 +144,10 @@ function fireToggle() {
144
144
  align-items: center;
145
145
  justify-content: center;
146
146
  overflow: hidden;
147
- margin-left: auto;
147
+ margin-inline-start: auto;
148
148
  border: solid 3px #cbd4da;
149
149
  border-radius: 50%;
150
- margin-right: 0.375rem;
150
+ margin-inline-end: 0.375rem;
151
151
  }
152
152
  .card span.row:not(.touch) {
153
153
  height: 1.5rem;
@@ -157,5 +157,5 @@ function fireToggle() {
157
157
  .card span.row.touch {
158
158
  height: 1.75rem;
159
159
  width: 1.75rem;
160
- margin-right: 1rem;
160
+ margin-inline-end: 1rem;
161
161
  }</style>
@@ -1,6 +1,7 @@
1
1
  <svelte:options runes />
2
2
 
3
- <script lang="ts">import Action from "./Action.svelte";
3
+ <script lang="ts">import { m as i18n } from "../paraglide/messages.js";
4
+ import Action from "./Action.svelte";
4
5
  import { Colour } from "../scss/colours.js";
5
6
  const { file, ondelete } = $props();
6
7
  </script>
@@ -13,7 +14,7 @@ const { file, ondelete } = $props();
13
14
  <Action
14
15
  icon={{ name: 'circle-cross' }}
15
16
  backgroundColour={Colour['$transparent-0']}
16
- label="Delete"
17
+ label={i18n['scoria.action.delete']()}
17
18
  onclick={ondelete}
18
19
  />
19
20
  </div>
@@ -1,6 +1,7 @@
1
1
  <svelte:options runes />
2
2
 
3
- <script lang="ts">import { cssLength } from "../Helpers/Helpers.svelte.js";
3
+ <script lang="ts">import { m as i18n } from "../paraglide/messages.js";
4
+ import { cssLength } from "../Helpers/Helpers.svelte.js";
4
5
  import { Colour, ColourSet } from "../scss/colours.js";
5
6
  import { InputVariant } from "../Types/Internal/InputVariant.js";
6
7
  import { Size } from "../Types/Internal/Size.js";
@@ -99,11 +100,11 @@ function ondragleave(e) {
99
100
  <span
100
101
  class="top-label"
101
102
  class:for-default={variant === InputVariant.Default}
102
- >{labelTop}{#if optional}<i>&nbsp;- optional</i>{/if}</span
103
+ >{labelTop}{#if optional}<i>&nbsp;- {i18n['scoria.label.optional']()}</i>{/if}</span
103
104
  >
104
105
  {#if variant === InputVariant.Default}
105
106
  <span class="border"
106
- >{labelTop}{#if optional}<i>&nbsp;- optional</i>{/if}</span
107
+ >{labelTop}{#if optional}<i>&nbsp;- {i18n['scoria.label.optional']()}</i>{/if}</span
107
108
  >
108
109
  {/if}
109
110
  {/if}
@@ -145,7 +146,7 @@ function ondragleave(e) {
145
146
  <div
146
147
  class="file-list"
147
148
  role="list"
148
- aria-label="Selected files"
149
+ aria-label={i18n['scoria.label.selected_files']()}
149
150
  >
150
151
  {#if files.length}
151
152
  {#each files as file, index (file)}
@@ -159,7 +160,7 @@ function ondragleave(e) {
159
160
  {/each}
160
161
  {:else}
161
162
  <p>
162
- Drag and Drop or Click to Upload {#if multiple}multiple documents{:else}a document{/if}
163
+ {#if multiple}{i18n['scoria.text.dropzone_multiple']()}{:else}{i18n['scoria.text.dropzone_single']()}{/if}
163
164
  </p>
164
165
  {/if}
165
166
  </div>
@@ -168,7 +169,7 @@ function ondragleave(e) {
168
169
  colourSet={ColourSet.Secondary}
169
170
  backgroundColour={Colour['$transparent-0']}
170
171
  icon={{ name: 'upload' }}
171
- label="Upload"
172
+ label={i18n['scoria.action.upload']()}
172
173
  size={Size.Medium}
173
174
  onclick={() => {
174
175
  openPicker();
@@ -206,8 +207,8 @@ function ondragleave(e) {
206
207
  font-weight: 400;
207
208
  padding-top: var(--input-padding-top, 0.65rem);
208
209
  padding-bottom: var(--input-padding-bottom, 0.55rem);
209
- padding-left: var(--input-padding-left, 0.75rem);
210
- padding-right: var(--input-padding-right, 0.75rem);
210
+ padding-inline-start: var(--input-padding-inline-start, 0.75rem);
211
+ padding-inline-end: var(--input-padding-inline-end, 0.75rem);
211
212
  border: var(--input-border, solid 1px #cbd4da);
212
213
  color: #3a4952;
213
214
  transition: border-color ease-out 0.15s 0s, background-color ease-out 0.15s 0s, color ease-out 0.15s 0s, fill ease-out 0.15s 0s;
@@ -239,8 +240,8 @@ span.right-label.inset {
239
240
  font-weight: 500;
240
241
  position: absolute;
241
242
  background-color: #f4f7f9;
242
- border-left: solid 1px #cbd4da;
243
- right: 1px;
243
+ border-inline-start: solid 1px #cbd4da;
244
+ inset-inline-end: 1px;
244
245
  top: 1px;
245
246
  bottom: 1px;
246
247
  border-radius: 0 4px 4px 0;
@@ -264,11 +265,11 @@ span.right-label.for-modal {
264
265
 
265
266
  span.for-default {
266
267
  position: absolute;
267
- left: 0.5rem;
268
+ inset-inline-start: 0.5rem;
268
269
  font-size: 0.875rem;
269
270
  user-select: none;
270
- padding-left: 0.5rem;
271
- padding-right: 0.5rem;
271
+ padding-inline-start: 0.5rem;
272
+ padding-inline-end: 0.5rem;
272
273
  line-height: 1rem;
273
274
  padding: 0rem 0.5rem;
274
275
  top: calc(-0.875rem / 2 - 2px);
@@ -282,11 +283,11 @@ span.for-default.invalid {
282
283
 
283
284
  span.border {
284
285
  position: absolute;
285
- left: 0.5rem;
286
+ inset-inline-start: 0.5rem;
286
287
  font-size: 0.875rem;
287
288
  user-select: none;
288
- padding-left: 0.5rem;
289
- padding-right: 0.5rem;
289
+ padding-inline-start: 0.5rem;
290
+ padding-inline-end: 0.5rem;
290
291
  line-height: 1rem;
291
292
  z-index: 1;
292
293
  white-space: nowrap;
@@ -304,11 +305,11 @@ span.border.invalid {
304
305
  }
305
306
 
306
307
  .left-pad {
307
- padding-left: 3rem;
308
+ padding-inline-start: 3rem;
308
309
  }
309
310
 
310
311
  .right-pad {
311
- padding-right: 3rem;
312
+ padding-inline-end: 3rem;
312
313
  }
313
314
 
314
315
  .icon-container {
@@ -323,13 +324,12 @@ span.border.invalid {
323
324
  height: 100%;
324
325
  top: 0;
325
326
  bottom: 0;
326
- left: 0;
327
- right: 0;
327
+ inset-inline: 0;
328
328
  }
329
329
 
330
330
  .error {
331
331
  color: #aa1414;
332
- margin-left: 0.25rem;
332
+ margin-inline-start: 0.25rem;
333
333
  display: block;
334
334
  overflow-x: auto;
335
335
  white-space: nowrap;
@@ -337,7 +337,7 @@ span.border.invalid {
337
337
 
338
338
  .right-icon {
339
339
  position: absolute;
340
- right: 0.5rem;
340
+ inset-inline-end: 0.5rem;
341
341
  top: 50%;
342
342
  translate: 0 -50%;
343
343
  }
@@ -361,8 +361,7 @@ label {
361
361
  position: absolute;
362
362
  top: 0;
363
363
  bottom: 0;
364
- left: 0;
365
- right: 0;
364
+ inset-inline: 0;
366
365
  }
367
366
  .error-wrapper.for-modal {
368
367
  flex: unset;
@@ -383,7 +382,7 @@ div.file-list {
383
382
  flex-grow: 1;
384
383
  gap: 0.375rem;
385
384
  padding: 0.375rem 1.5rem;
386
- padding-right: 4rem;
385
+ padding-inline-end: 4rem;
387
386
  overflow-y: scroll;
388
387
  }
389
388
 
@@ -69,7 +69,7 @@ function isSingleSelectObject(item) {
69
69
  {:else if isSelect(item)}
70
70
  {#if isMultiSelect(item)}
71
71
  {#await item.options}
72
- {loadingText}
72
+ {loadingText()}
73
73
  {:then options}
74
74
  {#if isMultiSelectObject<V, VP>(item)}
75
75
  <MultiSelect
@@ -102,7 +102,7 @@ function isSingleSelectObject(item) {
102
102
  {/await}
103
103
  {:else if isSingleSelect(item)}
104
104
  {#await item.options}
105
- {loadingText}
105
+ {loadingText()}
106
106
  {:then options}
107
107
  {#if isSingleSelectObject(item)}
108
108
  <SingleSelect
@@ -128,7 +128,7 @@ const filteredTabs = $derived(filterFn ? tabs.filter((t) => filterFn(t, debounce
128
128
  gap: 1px;
129
129
  min-width: 10rem;
130
130
  background-color: #e9ecf1;
131
- border-right: solid 1px #cbd4da;
131
+ border-inline-end: solid 1px #cbd4da;
132
132
  overflow: auto;
133
133
  flex-shrink: 0;
134
134
  }
@@ -30,7 +30,7 @@ if (!Object.isFrozen(icons)) {
30
30
  }
31
31
  </script>
32
32
 
33
- <script lang="ts">const { name, size = Size.Medium, label, float = false, variant, invisible, clickable = false, clickableType = "button", zindex = 1, anchorX, anchorY, left, right, top, bottom, colour, onclick, rotate } = $props();
33
+ <script lang="ts">const { name, size = Size.Medium, label, float = false, variant, invisible, clickable = false, clickableType = "button", zindex = 1, anchorX, anchorY, left, right, top, bottom, colour, onclick, rotate, directional = false } = $props();
34
34
  const dim = $derived(sizes[size]);
35
35
  const displayIcon = $derived(icons[name]);
36
36
  // Build the inline style string once per reactive input change rather
@@ -51,6 +51,7 @@ const ariaLabel = $derived(label ?? name.toString());
51
51
  class:absolute={float}
52
52
  {onclick}
53
53
  class:rotate
54
+ class:directional
54
55
  onkeydown={passthrough}
55
56
  aria-label={ariaLabel}
56
57
  >
@@ -84,6 +85,7 @@ const ariaLabel = $derived(label ?? name.toString());
84
85
  width={dim}
85
86
  height={dim}
86
87
  class:rotate
88
+ class:directional
87
89
  viewBox="0 0 {displayIcon.box} {displayIcon.box}"
88
90
  >
89
91
  <!-- eslint-disable-next-line svelte/no-at-html-tags -->
@@ -158,7 +160,7 @@ svg:hover {
158
160
  }
159
161
 
160
162
  .header-icon {
161
- margin-left: auto;
163
+ margin-inline-start: auto;
162
164
  }
163
165
 
164
166
  .fill-height {
@@ -169,4 +171,8 @@ svg:hover {
169
171
  .fill-width {
170
172
  height: max-content;
171
173
  width: 100%;
174
+ }
175
+
176
+ :global([dir='rtl']) .directional {
177
+ transform: scaleX(-1);
172
178
  }</style>
@@ -64,4 +64,11 @@ export interface IconProps {
64
64
  * reduce` see a static icon.
65
65
  */
66
66
  rotate?: boolean;
67
+ /**
68
+ * When true, the icon mirrors horizontally under `[dir='rtl']` via
69
+ * `transform: scaleX(-1)`. Set for icons whose geometry encodes a
70
+ * reading-direction (chevrons, arrows, navigation affordances).
71
+ * Leave false (default) for symmetric or rotational icons.
72
+ */
73
+ directional?: boolean;
67
74
  }