@lavalogic/scoria 0.38.10 → 0.38.12

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 (115) hide show
  1. package/README.md +58 -58
  2. package/dist/Components/AccordionGroup.svelte +46 -46
  3. package/dist/Components/AccordionGroupButton.svelte +76 -76
  4. package/dist/Components/Action.svelte +136 -136
  5. package/dist/Components/AppointmentCalendar/AppointmentCalendar.svelte +702 -702
  6. package/dist/Components/Base/BaseModal.svelte +125 -125
  7. package/dist/Components/Base/ContextWrapper.svelte +72 -72
  8. package/dist/Components/Base/Pagination.svelte +198 -198
  9. package/dist/Components/Base/Snippets.svelte +36 -36
  10. package/dist/Components/BigRadioSet.svelte +38 -38
  11. package/dist/Components/Bubble.svelte +101 -101
  12. package/dist/Components/Button.svelte +209 -209
  13. package/dist/Components/Checkbox.svelte +86 -86
  14. package/dist/Components/Contexts/ContextMenu.svelte +164 -164
  15. package/dist/Components/Contexts/ContextMenuDivider.svelte +15 -15
  16. package/dist/Components/Contexts/ContextMenuOption.svelte +60 -60
  17. package/dist/Components/Contexts/ToastContainer.svelte +65 -65
  18. package/dist/Components/Contexts/Tooltip.svelte +37 -37
  19. package/dist/Components/DataMatrixIcon.svelte +112 -112
  20. package/dist/Components/DateInput.svelte +148 -148
  21. package/dist/Components/DatePicker.svelte +300 -300
  22. package/dist/Components/DesktopModal.svelte +90 -90
  23. package/dist/Components/Dial.svelte +204 -204
  24. package/dist/Components/DimensionInput.svelte +170 -170
  25. package/dist/Components/DragMenu/DragMenuHolder.svelte +119 -119
  26. package/dist/Components/DragMenu/DraggableCard.svelte +77 -77
  27. package/dist/Components/FileCard.svelte +24 -24
  28. package/dist/Components/FileUpload.svelte +236 -236
  29. package/dist/Components/GridInputSet.svelte +29 -29
  30. package/dist/Components/HorizontalTabGroup.svelte +82 -82
  31. package/dist/Components/HorizontalTabGroupButton.svelte +44 -44
  32. package/dist/Components/Icon.svelte +128 -128
  33. package/dist/Components/Icons.js +357 -357
  34. package/dist/Components/LoadingAnimation.svelte +29 -29
  35. package/dist/Components/LoadingModal.svelte +45 -45
  36. package/dist/Components/LoadingOverlay.svelte +25 -25
  37. package/dist/Components/Modal.svelte +258 -258
  38. package/dist/Components/MultiSelect.svelte +220 -220
  39. package/dist/Components/Nav/NavServiceMenuList.svelte +43 -43
  40. package/dist/Components/Nav/NavTab.svelte +62 -62
  41. package/dist/Components/Nav/ServicesNav.svelte +80 -80
  42. package/dist/Components/NumberInput.svelte +157 -157
  43. package/dist/Components/PageHeading.svelte +25 -25
  44. package/dist/Components/PasswordInput.svelte +88 -88
  45. package/dist/Components/Portal.svelte +36 -36
  46. package/dist/Components/QuerySelect.svelte +366 -366
  47. package/dist/Components/SingleSelect.svelte +250 -250
  48. package/dist/Components/StepButton.svelte +70 -70
  49. package/dist/Components/StepForm.svelte +140 -140
  50. package/dist/Components/Switch.svelte +69 -69
  51. package/dist/Components/Table/Body/Rows/ColumnHighlight.svelte +51 -51
  52. package/dist/Components/Table/Body/Rows/ColumnList.svelte +59 -59
  53. package/dist/Components/Table/Body/Rows/Columns/AccessorComponent.svelte +79 -79
  54. package/dist/Components/Table/Body/Rows/Columns/ExpandCell.svelte +120 -120
  55. package/dist/Components/Table/Body/Rows/Columns/ProgressCell.svelte +105 -105
  56. package/dist/Components/Table/Body/Rows/Columns/TableAction.svelte +87 -87
  57. package/dist/Components/Table/Body/Rows/Columns/TableCheckbox.svelte +126 -126
  58. package/dist/Components/Table/Body/Rows/Columns/TableColumn.svelte +159 -159
  59. package/dist/Components/Table/Body/Rows/Columns/TableDatePicker.svelte +246 -246
  60. package/dist/Components/Table/Body/Rows/Columns/TableNumberInput.svelte +216 -216
  61. package/dist/Components/Table/Body/Rows/Columns/TableRowSelectionCheckbox.svelte +179 -179
  62. package/dist/Components/Table/Body/Rows/Columns/TableTextInput.svelte +197 -197
  63. package/dist/Components/Table/Body/Rows/Columns/ValidityCell.svelte +190 -190
  64. package/dist/Components/Table/Body/Rows/TableRow.svelte +290 -290
  65. package/dist/Components/Table/Headers/HighlightAllHeader.svelte +41 -41
  66. package/dist/Components/Table/Headers/SelectAllHeader.svelte +30 -30
  67. package/dist/Components/Table/Misc/FilterInput.svelte +37 -16
  68. package/dist/Components/Table/Misc/SidePanel.svelte +35 -35
  69. package/dist/Components/Table/Misc/TableConfigurationModal.svelte +71 -0
  70. package/dist/Components/Table/Misc/ToolboxPanel.svelte +100 -100
  71. package/dist/Components/Table/Misc/ToolboxPanelModal.svelte +107 -107
  72. package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte +225 -0
  73. package/dist/Components/Table/Misc/UpdateViewOptionsModal.svelte.d.ts +26 -0
  74. package/dist/Components/Table/Misc/UpdateViewOptionsModalProps.d.ts +21 -0
  75. package/dist/Components/Table/Misc/UpdateViewOptionsModalProps.js +1 -0
  76. package/dist/Components/Table/Types/Context/TableContext.svelte.d.ts +49 -1
  77. package/dist/Components/Table/Types/Context/TableContext.svelte.js +142 -1
  78. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.d.ts +2 -2
  79. package/dist/Components/Table/Types/DataRepository/BuiltInRemoteRepository.svelte.js +20 -2
  80. package/dist/Components/Table/Types/DataRepository/IDataRepository.d.ts +9 -1
  81. package/dist/Components/Table/Types/DataRepository/ILocalDataRepository.d.ts +1 -1
  82. package/dist/Components/Table/Types/DataRepository/IRemoteDataRepository.d.ts +1 -1
  83. package/dist/Components/Table/Types/DataRepository/TableDataRepository.svelte.d.ts +1 -1
  84. package/dist/Components/Table/Types/Persistence/DatatableView.d.ts +25 -0
  85. package/dist/Components/Test/TestContextConsumer.svelte +13 -13
  86. package/dist/Components/TextArea.svelte +130 -130
  87. package/dist/Components/TextInput.svelte +176 -176
  88. package/dist/Components/ThreeStateRadio.svelte +131 -131
  89. package/dist/Components/Touch/BoolCard.svelte +45 -45
  90. package/dist/Components/Touch/DateModal.svelte +209 -209
  91. package/dist/Components/Touch/EditCard.svelte +59 -59
  92. package/dist/Components/Touch/InfoCard.svelte +31 -31
  93. package/dist/Components/Touch/InfoTextCard.svelte +28 -28
  94. package/dist/Components/Touch/ModalExplanation.svelte +17 -17
  95. package/dist/Components/Touch/NumberKeyboard.svelte +225 -225
  96. package/dist/Components/Touch/NumberModal.svelte +79 -79
  97. package/dist/Components/Touch/PlusMinusCard.svelte +46 -46
  98. package/dist/Components/Touch/SummaryCard.svelte +93 -93
  99. package/dist/Components/Touch/TextAreaModal.svelte +95 -95
  100. package/dist/Components/Touch/TextModal.svelte +106 -106
  101. package/dist/Components/Touch/TouchCard.svelte +33 -33
  102. package/dist/Components/Touch/TouchModal.svelte +274 -274
  103. package/dist/Components/Touch/UtilityButton.svelte +109 -109
  104. package/dist/Components/VerticalTabGroup.svelte +79 -79
  105. package/dist/Components/VerticalTabGroupButton.svelte +58 -58
  106. package/dist/Helpers/Datamatrix.d.ts +19 -19
  107. package/dist/Helpers/Datamatrix.js +291 -291
  108. package/dist/Types/Examples/ExampleModal.svelte +35 -35
  109. package/dist/index.d.ts +1 -1
  110. package/dist/scss/_basics.scss +12 -12
  111. package/dist/scss/_colours.scss +134 -134
  112. package/dist/scss/_motion.scss +57 -57
  113. package/dist/scss/_sizing.scss +85 -85
  114. package/dist/scss/_transitions.scss +8 -8
  115. package/package.json +1 -1
@@ -1,199 +1,199 @@
1
- <svelte:options runes />
2
-
3
- <script
4
- lang="ts"
5
- generics="T extends object, FilterValueType, RowIdType extends Primitive"
6
- >
7
- import { dev } from '$app/environment';
8
-
9
- import { TableContext } from '../../../Types/Context/TableContext.svelte.js';
10
- import { type Primitive } from '../../../Types/Context/TableInitOptions.js';
11
- import TextInput from '../../../../TextInput.svelte';
12
- import { devCatch, loadingText } from '../../../../../Helpers/Helpers.svelte.js';
13
- import { InputVariant } from '../../../../../Types/Internal/InputVariant.js';
14
- import { Validity } from '../../../../../Types/Internal/Validity.js';
15
- import { getContext, tick } from 'svelte';
16
- import { useAsyncEditable } from './_helpers/useAsyncEditable.svelte.js';
17
- import type { TableTextInputProps } from './TableTextInputProps.js';
18
-
19
- const { cell }: TableTextInputProps<T, FilterValueType> = $props();
20
-
21
- const value = $derived(cell.getValue());
22
-
23
- const visibleValue = $derived(
24
- cell.column.columnDef.getDisplayValue?.(cell.row.original, cell.row.originalIndex) ?? value
25
- );
26
-
27
- let tempTextValue: string = $state('');
28
-
29
- let tdref = $state<HTMLElement | undefined>();
30
- let inputRef = $state<HTMLInputElement | undefined>();
31
-
32
- const tableContext = getContext<TableContext<T, RowIdType>>(TableContext.identifier);
33
-
34
- /**
35
- * `discard` is set by the Escape keydown so the subsequent `onBlur`
36
- * fires the focus-restore but does NOT commit the cell value. It is
37
- * cell-specific (TableTextInput is the only cell with discard-on-Escape
38
- * for blur commits) and therefore stays inline rather than moving into
39
- * the shared `useAsyncEditable` helper.
40
- */
41
- let discard = false;
42
-
43
- function onBlur(): void {
44
- if (!discard && (value as string | undefined)?.trim() !== tempTextValue.trim()) {
45
- tableContext
46
- .onEditCell(cell.row.original, editable.focusDetails.coordinates, tempTextValue)
47
- .catch(devCatch);
48
- }
49
-
50
- if (!tableContext.singleClickEditing) {
51
- tableContext.focusStartIsBeingEdited = false;
52
- }
53
- discard = false;
54
- }
55
-
56
- const editable = useAsyncEditable<T, RowIdType>({
57
- cell: () => cell,
58
- onEnterEdit: () => {
59
- const v = value;
60
- if (typeof v == 'object' && v instanceof Promise) {
61
- v.then((awaited: unknown) => {
62
- tempTextValue = awaited?.toString() ?? '';
63
- }).catch(devCatch);
64
- } else {
65
- tempTextValue = v?.toString() ?? '';
66
- }
67
- },
68
- onLeaveEdit: () => {
69
- onBlur();
70
- },
71
- onAfterEnterEdit: () => {
72
- inputRef?.select();
73
- },
74
- });
75
-
76
- function handleInputKeydown(e: KeyboardEvent) {
77
- switch (e.key) {
78
- case 'Escape': {
79
- e.preventDefault();
80
- e.stopPropagation();
81
- discard = true;
82
- editable.leaveEditingViaKeyboard(tdref);
83
- break;
84
- }
85
- case 'Enter':
86
- e.preventDefault();
87
- e.stopPropagation();
88
- editable.leaveEditingViaKeyboard(tdref);
89
- break;
90
- default: {
91
- //ignore other keys
92
- break;
93
- }
94
- }
95
- }
96
-
97
- function onInputFocus(e: FocusEvent) {
98
- (e.target as HTMLInputElement).scrollIntoView({
99
- behavior: 'instant',
100
- block: 'nearest',
101
- inline: 'nearest',
102
- });
103
- }
104
-
105
- /**
106
- * Effect wires the `edit` custom event with proper cleanup on tdref
107
- * remount or component unmount (replaces the previous `prevTdRef` pattern
108
- * that accumulated listeners; P2 workorder finding). The listener wiring
109
- * lives in the shared `useAsyncEditable` helper.
110
- */
111
- $effect(() => editable.attachEditListener(tdref));
112
- </script>
113
-
114
- {#if editable.isBeingEdited}
115
- <div class="input-cell">
116
- <TextInput
117
- id={`${tableContext.tableName}-cell-${cell.row.visibleIndex}-${cell.column.id}`}
118
- onkeydown={handleInputKeydown}
119
- variant={InputVariant.Table}
120
- bind:value={tempTextValue}
121
- onfocus={onInputFocus}
122
- bind:inputRef
123
- onblur={onBlur}
124
- />
125
- <!-- HACK this onBlur is now being called by an effect because otherwise it fires twice -->
126
- </div>
127
- {:else}
128
- <!-- svelte-ignore a11y_mouse_events_have_key_events -->
129
- <!-- svelte-ignore a11y_no_static_element_interactions -->
130
- <div
131
- id={`${tableContext.tableName}-cell-${cell.row.visibleIndex}-${cell.column.id}`}
132
- style={editable.focusDetails.outline}
133
- onmousedown={(e) => {
134
- // start focus only on left click
135
- if (e.button === 0) {
136
- if (e.shiftKey) {
137
- e.preventDefault();
138
- tableContext.setFocusEnd(editable.focusDetails.coordinates);
139
- } else {
140
- tableContext.startFocus(editable.focusDetails.coordinates);
141
- }
142
- }
143
- }}
144
- onmouseover={() => {
145
- if (tableContext.isMousingDown) {
146
- tableContext.setFocusEnd(editable.focusDetails.coordinates);
147
- }
148
- }}
149
- bind:this={tdref}
150
- tabIndex="0"
151
- class:editable={editable.editable}
152
- class="focusable"
153
- class:multifocus={editable.focusDetails.isMultiFocused}
154
- class:multifocus-start={editable.focusDetails.isMultiFocusStart}
155
- class:info={editable.validity == Validity.Info}
156
- class:success={editable.validity == Validity.Valid}
157
- class:warning={editable.validity == Validity.Warning}
158
- class:error={editable.validity == Validity.Invalid}
159
- onmouseup={() => {
160
- const wasHandled = editable.handleSingleClickFocus();
161
- if (wasHandled) {
162
- tick()
163
- .then(() => {
164
- inputRef?.focus();
165
- })
166
- .catch(devCatch);
167
- } else {
168
- tableContext.endFocus(editable.focusDetails.coordinates);
169
- }
170
- }}
171
- ondblclick={() => {
172
- const wasHandled = editable.handleDoubleClickFocus();
173
- if (wasHandled) {
174
- tick()
175
- .then(() => {
176
- inputRef?.focus();
177
- })
178
- .catch(devCatch);
179
- }
180
- }}
181
- >
182
- {#await visibleValue}
183
- {loadingText}
184
- {:then value}
185
- {value}
186
- {:catch error}
187
- {#if dev}
188
- error: {error}
189
- <!-- eslint-disable-next-line svelte/no-at-debug-tags -->
190
- {@debug error}
191
- {/if}
192
- Error getting value
193
- {/await}
194
- </div>
195
- {/if}
196
-
1
+ <svelte:options runes />
2
+
3
+ <script
4
+ lang="ts"
5
+ generics="T extends object, FilterValueType, RowIdType extends Primitive"
6
+ >
7
+ import { dev } from '$app/environment';
8
+
9
+ import { TableContext } from '../../../Types/Context/TableContext.svelte.js';
10
+ import { type Primitive } from '../../../Types/Context/TableInitOptions.js';
11
+ import TextInput from '../../../../TextInput.svelte';
12
+ import { devCatch, loadingText } from '../../../../../Helpers/Helpers.svelte.js';
13
+ import { InputVariant } from '../../../../../Types/Internal/InputVariant.js';
14
+ import { Validity } from '../../../../../Types/Internal/Validity.js';
15
+ import { getContext, tick } from 'svelte';
16
+ import { useAsyncEditable } from './_helpers/useAsyncEditable.svelte.js';
17
+ import type { TableTextInputProps } from './TableTextInputProps.js';
18
+
19
+ const { cell }: TableTextInputProps<T, FilterValueType> = $props();
20
+
21
+ const value = $derived(cell.getValue());
22
+
23
+ const visibleValue = $derived(
24
+ cell.column.columnDef.getDisplayValue?.(cell.row.original, cell.row.originalIndex) ?? value
25
+ );
26
+
27
+ let tempTextValue: string = $state('');
28
+
29
+ let tdref = $state<HTMLElement | undefined>();
30
+ let inputRef = $state<HTMLInputElement | undefined>();
31
+
32
+ const tableContext = getContext<TableContext<T, RowIdType>>(TableContext.identifier);
33
+
34
+ /**
35
+ * `discard` is set by the Escape keydown so the subsequent `onBlur`
36
+ * fires the focus-restore but does NOT commit the cell value. It is
37
+ * cell-specific (TableTextInput is the only cell with discard-on-Escape
38
+ * for blur commits) and therefore stays inline rather than moving into
39
+ * the shared `useAsyncEditable` helper.
40
+ */
41
+ let discard = false;
42
+
43
+ function onBlur(): void {
44
+ if (!discard && (value as string | undefined)?.trim() !== tempTextValue.trim()) {
45
+ tableContext
46
+ .onEditCell(cell.row.original, editable.focusDetails.coordinates, tempTextValue)
47
+ .catch(devCatch);
48
+ }
49
+
50
+ if (!tableContext.singleClickEditing) {
51
+ tableContext.focusStartIsBeingEdited = false;
52
+ }
53
+ discard = false;
54
+ }
55
+
56
+ const editable = useAsyncEditable<T, RowIdType>({
57
+ cell: () => cell,
58
+ onEnterEdit: () => {
59
+ const v = value;
60
+ if (typeof v == 'object' && v instanceof Promise) {
61
+ v.then((awaited: unknown) => {
62
+ tempTextValue = awaited?.toString() ?? '';
63
+ }).catch(devCatch);
64
+ } else {
65
+ tempTextValue = v?.toString() ?? '';
66
+ }
67
+ },
68
+ onLeaveEdit: () => {
69
+ onBlur();
70
+ },
71
+ onAfterEnterEdit: () => {
72
+ inputRef?.select();
73
+ },
74
+ });
75
+
76
+ function handleInputKeydown(e: KeyboardEvent) {
77
+ switch (e.key) {
78
+ case 'Escape': {
79
+ e.preventDefault();
80
+ e.stopPropagation();
81
+ discard = true;
82
+ editable.leaveEditingViaKeyboard(tdref);
83
+ break;
84
+ }
85
+ case 'Enter':
86
+ e.preventDefault();
87
+ e.stopPropagation();
88
+ editable.leaveEditingViaKeyboard(tdref);
89
+ break;
90
+ default: {
91
+ //ignore other keys
92
+ break;
93
+ }
94
+ }
95
+ }
96
+
97
+ function onInputFocus(e: FocusEvent) {
98
+ (e.target as HTMLInputElement).scrollIntoView({
99
+ behavior: 'instant',
100
+ block: 'nearest',
101
+ inline: 'nearest',
102
+ });
103
+ }
104
+
105
+ /**
106
+ * Effect wires the `edit` custom event with proper cleanup on tdref
107
+ * remount or component unmount (replaces the previous `prevTdRef` pattern
108
+ * that accumulated listeners; P2 workorder finding). The listener wiring
109
+ * lives in the shared `useAsyncEditable` helper.
110
+ */
111
+ $effect(() => editable.attachEditListener(tdref));
112
+ </script>
113
+
114
+ {#if editable.isBeingEdited}
115
+ <div class="input-cell">
116
+ <TextInput
117
+ id={`${tableContext.tableName}-cell-${cell.row.visibleIndex}-${cell.column.id}`}
118
+ onkeydown={handleInputKeydown}
119
+ variant={InputVariant.Table}
120
+ bind:value={tempTextValue}
121
+ onfocus={onInputFocus}
122
+ bind:inputRef
123
+ onblur={onBlur}
124
+ />
125
+ <!-- HACK this onBlur is now being called by an effect because otherwise it fires twice -->
126
+ </div>
127
+ {:else}
128
+ <!-- svelte-ignore a11y_mouse_events_have_key_events -->
129
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
130
+ <div
131
+ id={`${tableContext.tableName}-cell-${cell.row.visibleIndex}-${cell.column.id}`}
132
+ style={editable.focusDetails.outline}
133
+ onmousedown={(e) => {
134
+ // start focus only on left click
135
+ if (e.button === 0) {
136
+ if (e.shiftKey) {
137
+ e.preventDefault();
138
+ tableContext.setFocusEnd(editable.focusDetails.coordinates);
139
+ } else {
140
+ tableContext.startFocus(editable.focusDetails.coordinates);
141
+ }
142
+ }
143
+ }}
144
+ onmouseover={() => {
145
+ if (tableContext.isMousingDown) {
146
+ tableContext.setFocusEnd(editable.focusDetails.coordinates);
147
+ }
148
+ }}
149
+ bind:this={tdref}
150
+ tabIndex="0"
151
+ class:editable={editable.editable}
152
+ class="focusable"
153
+ class:multifocus={editable.focusDetails.isMultiFocused}
154
+ class:multifocus-start={editable.focusDetails.isMultiFocusStart}
155
+ class:info={editable.validity == Validity.Info}
156
+ class:success={editable.validity == Validity.Valid}
157
+ class:warning={editable.validity == Validity.Warning}
158
+ class:error={editable.validity == Validity.Invalid}
159
+ onmouseup={() => {
160
+ const wasHandled = editable.handleSingleClickFocus();
161
+ if (wasHandled) {
162
+ tick()
163
+ .then(() => {
164
+ inputRef?.focus();
165
+ })
166
+ .catch(devCatch);
167
+ } else {
168
+ tableContext.endFocus(editable.focusDetails.coordinates);
169
+ }
170
+ }}
171
+ ondblclick={() => {
172
+ const wasHandled = editable.handleDoubleClickFocus();
173
+ if (wasHandled) {
174
+ tick()
175
+ .then(() => {
176
+ inputRef?.focus();
177
+ })
178
+ .catch(devCatch);
179
+ }
180
+ }}
181
+ >
182
+ {#await visibleValue}
183
+ {loadingText}
184
+ {:then value}
185
+ {value}
186
+ {:catch error}
187
+ {#if dev}
188
+ error: {error}
189
+ <!-- eslint-disable-next-line svelte/no-at-debug-tags -->
190
+ {@debug error}
191
+ {/if}
192
+ Error getting value
193
+ {/await}
194
+ </div>
195
+ {/if}
196
+
197
197
  <style>.focusable,
198
198
  .checkbox-cell,
199
199
  .input-cell,
@@ -260,4 +260,4 @@
260
260
  .input-cell {
261
261
  padding: unset;
262
262
  box-sizing: border-box;
263
- }</style>
263
+ }</style>