@svadmin/ui 0.72.0 → 0.74.0

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 (276) hide show
  1. package/README.md +62 -22
  2. package/THIRD_PARTY_NOTICES.md +52 -0
  3. package/dist/app.css +8488 -6297
  4. package/dist/app.theme.css +8514 -6374
  5. package/dist/class-properties.generated.d.ts +1 -0
  6. package/dist/class-properties.generated.js +2 -0
  7. package/dist/classnames.d.ts +8 -0
  8. package/dist/classnames.js +26 -0
  9. package/dist/component-registry.d.ts +14977 -0
  10. package/dist/component-registry.js +216 -0
  11. package/dist/components/AboutSettings.svelte +7 -1
  12. package/dist/components/AboutSettings.svelte.d.ts +4 -1
  13. package/dist/components/ActivityFeed.svelte +9 -3
  14. package/dist/components/ActivityFeed.svelte.d.ts +3 -0
  15. package/dist/components/AdminApp.svelte +19 -10
  16. package/dist/components/AdminApp.svelte.d.ts +6 -0
  17. package/dist/components/ApiSettings.svelte +41 -5
  18. package/dist/components/ApprovalCenter.svelte +283 -0
  19. package/dist/components/ApprovalCenter.svelte.d.ts +10 -0
  20. package/dist/components/AuditLogViewer.svelte +3 -1
  21. package/dist/components/AutoForm.svelte +53 -9
  22. package/dist/components/AutoForm.svelte.d.ts +3 -0
  23. package/dist/components/AutoTable.svelte +846 -43
  24. package/dist/components/AutoTable.svelte.d.ts +22 -1
  25. package/dist/components/BoundRecordDetailDrawer.svelte +17 -2
  26. package/dist/components/BoundRecordDetailDrawer.svelte.d.ts +4 -0
  27. package/dist/components/Breadcrumbs.svelte +11 -1
  28. package/dist/components/CancelTaskButton.svelte +12 -42
  29. package/dist/components/ColorPicker.svelte +73 -0
  30. package/dist/components/ColorPicker.svelte.d.ts +15 -0
  31. package/dist/components/ComboboxField.svelte +143 -34
  32. package/dist/components/ComboboxField.svelte.d.ts +4 -2
  33. package/dist/components/CreatePage.svelte +4 -0
  34. package/dist/components/CreatePage.svelte.d.ts +2 -0
  35. package/dist/components/DashboardView.svelte +99 -0
  36. package/dist/components/DashboardView.svelte.d.ts +14 -0
  37. package/dist/components/DatePicker.svelte +10 -0
  38. package/dist/components/DatePicker.svelte.d.ts +6 -0
  39. package/dist/components/DateRangeInput.svelte +155 -0
  40. package/dist/components/DateRangeInput.svelte.d.ts +35 -0
  41. package/dist/components/DateRangePicker.svelte +10 -0
  42. package/dist/components/DateRangePicker.svelte.d.ts +6 -0
  43. package/dist/components/DateTimeInput.svelte +134 -0
  44. package/dist/components/DateTimeInput.svelte.d.ts +27 -0
  45. package/dist/components/DateTimePicker.svelte +10 -0
  46. package/dist/components/DateTimePicker.svelte.d.ts +6 -0
  47. package/dist/components/DevTools.svelte +36 -28
  48. package/dist/components/DevframePanel.svelte +123 -0
  49. package/dist/components/DevframePanel.svelte.d.ts +3 -0
  50. package/dist/components/EditPage.svelte +4 -0
  51. package/dist/components/EditPage.svelte.d.ts +2 -0
  52. package/dist/components/ErrorSummary.svelte +52 -0
  53. package/dist/components/ErrorSummary.svelte.d.ts +14 -0
  54. package/dist/components/FieldRenderer.svelte +172 -99
  55. package/dist/components/FileUpload.svelte +412 -0
  56. package/dist/components/FileUpload.svelte.d.ts +43 -0
  57. package/dist/components/FilterBuilder.svelte +244 -265
  58. package/dist/components/FilterBuilder.svelte.d.ts +3 -0
  59. package/dist/components/FilterCollectionInput.svelte +80 -0
  60. package/dist/components/FilterCollectionInput.svelte.d.ts +10 -0
  61. package/dist/components/GanttChart.svelte +66 -14
  62. package/dist/components/GanttChart.svelte.d.ts +6 -0
  63. package/dist/components/Header.svelte +18 -2
  64. package/dist/components/ImportWizard.svelte +509 -100
  65. package/dist/components/ImportWizard.svelte.d.ts +11 -0
  66. package/dist/components/JsonSchemaForm.svelte +322 -98
  67. package/dist/components/JsonSchemaForm.svelte.d.ts +18 -1
  68. package/dist/components/KanbanBoard.svelte +195 -40
  69. package/dist/components/KanbanBoard.svelte.d.ts +9 -2
  70. package/dist/components/Layout.svelte +4 -3
  71. package/dist/components/LazyAutoForm.svelte +28 -0
  72. package/dist/components/LazyAutoForm.svelte.d.ts +8 -0
  73. package/dist/components/LazyAutoTable.svelte +28 -0
  74. package/dist/components/LazyAutoTable.svelte.d.ts +8 -0
  75. package/dist/components/LazySettingsPage.svelte +28 -0
  76. package/dist/components/LazySettingsPage.svelte.d.ts +8 -0
  77. package/dist/components/LazyShowPage.svelte +28 -0
  78. package/dist/components/LazyShowPage.svelte.d.ts +8 -0
  79. package/dist/components/LazyTaskQueueDrawer.svelte.d.ts +1 -1
  80. package/dist/components/ListPage.svelte +9 -1
  81. package/dist/components/ListPage.svelte.d.ts +5 -0
  82. package/dist/components/LoginPage.svelte +2 -2
  83. package/dist/components/MoneyInput.svelte +25 -0
  84. package/dist/components/MoneyInput.svelte.d.ts +20 -0
  85. package/dist/components/MultiTabKeepAlive.svelte +11 -6
  86. package/dist/components/NotificationsSettings.svelte +69 -2
  87. package/dist/components/NotificationsSettings.svelte.d.ts +25 -1
  88. package/dist/components/NumberInput.svelte +25 -0
  89. package/dist/components/NumberInput.svelte.d.ts +19 -0
  90. package/dist/components/NumericInput.svelte +110 -0
  91. package/dist/components/NumericInput.svelte.d.ts +23 -0
  92. package/dist/components/PercentInput.svelte +25 -0
  93. package/dist/components/PercentInput.svelte.d.ts +20 -0
  94. package/dist/components/PermissionMatrix.svelte +20 -1
  95. package/dist/components/PivotExportButton.svelte +157 -0
  96. package/dist/components/PivotExportButton.svelte.d.ts +16 -0
  97. package/dist/components/PivotTable.svelte +229 -74
  98. package/dist/components/PivotTable.svelte.d.ts +19 -2
  99. package/dist/components/QuickEditDrawer.svelte +4 -1
  100. package/dist/components/QuickEditDrawer.svelte.d.ts +2 -0
  101. package/dist/components/RadioGroup.svelte +121 -0
  102. package/dist/components/RadioGroup.svelte.d.ts +43 -0
  103. package/dist/components/RangeSlider.svelte +127 -0
  104. package/dist/components/RangeSlider.svelte.d.ts +22 -0
  105. package/dist/components/Rate.svelte +121 -0
  106. package/dist/components/Rate.svelte.d.ts +16 -0
  107. package/dist/components/RecordDetailDrawer.svelte +6 -2
  108. package/dist/components/RecordDetailDrawer.svelte.d.ts +4 -0
  109. package/dist/components/RelationPicker.svelte +341 -0
  110. package/dist/components/RelationPicker.svelte.d.ts +26 -0
  111. package/dist/components/ResourceOperationsPage.svelte +25 -19
  112. package/dist/components/ResourceOperationsPage.svelte.d.ts +5 -1
  113. package/dist/components/RetryTaskButton.svelte +12 -42
  114. package/dist/components/SecuritySettings.svelte +29 -5
  115. package/dist/components/SegmentedControl.svelte +145 -0
  116. package/dist/components/SegmentedControl.svelte.d.ts +38 -0
  117. package/dist/components/SettingsPage.svelte +3 -1
  118. package/dist/components/SettingsPage.svelte.d.ts +1 -0
  119. package/dist/components/ShowInferencer.svelte +4 -2
  120. package/dist/components/ShowInferencer.svelte.d.ts +2 -0
  121. package/dist/components/ShowPage.svelte +25 -6
  122. package/dist/components/ShowPage.svelte.d.ts +5 -0
  123. package/dist/components/Sidebar.svelte +5 -5
  124. package/dist/components/Slider.svelte +100 -0
  125. package/dist/components/Slider.svelte.d.ts +19 -0
  126. package/dist/components/SpreadsheetView.svelte +1037 -124
  127. package/dist/components/SpreadsheetView.svelte.d.ts +19 -0
  128. package/dist/components/StepsForm.svelte +5 -5
  129. package/dist/components/SvarAutoTable.svelte +39 -0
  130. package/dist/components/SvarAutoTable.svelte.d.ts +13 -0
  131. package/dist/components/SvarDataGrid.svelte +362 -0
  132. package/dist/components/SvarDataGrid.svelte.d.ts +57 -0
  133. package/dist/components/SvarGridCell.svelte +10 -0
  134. package/dist/components/SvarGridCell.svelte.d.ts +7 -0
  135. package/dist/components/SvarResourceRead.svelte +50 -0
  136. package/dist/components/SvarResourceRead.svelte.d.ts +23 -0
  137. package/dist/components/SvarResourceTable.svelte +63 -0
  138. package/dist/components/SvarResourceTable.svelte.d.ts +42 -0
  139. package/dist/components/SvarResourceTableView.svelte +364 -0
  140. package/dist/components/SvarResourceTableView.svelte.d.ts +4 -0
  141. package/dist/components/TagsInput.svelte +178 -0
  142. package/dist/components/TagsInput.svelte.d.ts +17 -0
  143. package/dist/components/TaskQueueDrawer.svelte +72 -16
  144. package/dist/components/TimePicker.svelte +10 -0
  145. package/dist/components/TimePicker.svelte.d.ts +6 -0
  146. package/dist/components/TreeSelect.svelte +440 -46
  147. package/dist/components/TreeSelect.svelte.d.ts +6 -1
  148. package/dist/components/TreeTable.svelte +484 -82
  149. package/dist/components/TreeTable.svelte.d.ts +24 -1
  150. package/dist/components/TwoFactorAuthPage.svelte +85 -48
  151. package/dist/components/TwoFactorAuthPage.svelte.d.ts +12 -1
  152. package/dist/components/VirtualTable.svelte +116 -20
  153. package/dist/components/VirtualTable.svelte.d.ts +5 -0
  154. package/dist/components/account/CompanyProfilePage.svelte +74 -38
  155. package/dist/components/account/GetStartedPage.svelte +2 -1
  156. package/dist/components/account/ImportMembersPage.svelte +22 -167
  157. package/dist/components/account/ImportMembersPage.svelte.d.ts +4 -1
  158. package/dist/components/account/MemberDirectory.svelte +156 -0
  159. package/dist/components/account/MemberDirectory.svelte.d.ts +19 -0
  160. package/dist/components/account/MembersStarterPage.svelte +9 -55
  161. package/dist/components/account/MembersStarterPage.svelte.d.ts +5 -1
  162. package/dist/components/account/SecurityLogPage.svelte +4 -1
  163. package/dist/components/account/SettingsPlainPage.svelte +7 -38
  164. package/dist/components/account/SettingsPlainPage.svelte.d.ts +4 -1
  165. package/dist/components/account/SettingsSidebarPage.svelte +7 -20
  166. package/dist/components/account/TeamMembersPage.svelte +4 -20
  167. package/dist/components/account/TeamMembersPage.svelte.d.ts +5 -1
  168. package/dist/components/account/UserProfilePage.svelte +3 -25
  169. package/dist/components/account/UserProfilePage.svelte.d.ts +17 -2
  170. package/dist/components/auto-table-grid.d.ts +26 -0
  171. package/dist/components/auto-table-grid.js +1 -0
  172. package/dist/components/buttons/ExportButton.svelte +56 -12
  173. package/dist/components/buttons/ExportButton.svelte.d.ts +11 -0
  174. package/dist/components/content/ContentPageHeader.svelte +12 -9
  175. package/dist/components/content/ContentPageShell.svelte +6 -9
  176. package/dist/components/content/FileBrowser.svelte +35 -0
  177. package/dist/components/content/FileBrowser.svelte.d.ts +14 -0
  178. package/dist/components/content/MetricBlock.svelte +10 -13
  179. package/dist/components/content/NetworkTable.svelte +3 -3
  180. package/dist/components/content/NetworkTable.svelte.d.ts +1 -0
  181. package/dist/components/content/PageToolbar.svelte +6 -10
  182. package/dist/components/content/ReferenceNotice.svelte +5 -0
  183. package/dist/components/content/ReferenceNotice.svelte.d.ts +18 -0
  184. package/dist/components/content/SectionHeader.svelte +8 -13
  185. package/dist/components/content/SettingsFieldRow.svelte +9 -23
  186. package/dist/components/content/SettingsGroup.svelte +11 -27
  187. package/dist/components/content/StatusBadge.svelte +3 -8
  188. package/dist/components/content/WorkspaceLayout.svelte +8 -12
  189. package/dist/components/enterprise/filter-tree.d.ts +48 -0
  190. package/dist/components/enterprise/filter-tree.js +224 -0
  191. package/dist/components/enterprise/json-schema-form.d.ts +39 -0
  192. package/dist/components/enterprise/json-schema-form.js +195 -0
  193. package/dist/components/enterprise/recursive-schema-form.d.ts +30 -0
  194. package/dist/components/enterprise/recursive-schema-form.js +196 -0
  195. package/dist/components/enterprise/spreadsheet-formula.d.ts +12 -0
  196. package/dist/components/enterprise/spreadsheet-formula.js +245 -0
  197. package/dist/components/export-reference.d.ts +2 -0
  198. package/dist/components/export-reference.js +9 -0
  199. package/dist/components/fieldComponentMap.js +2 -0
  200. package/dist/components/fields/DateField.svelte +12 -12
  201. package/dist/components/fields/date-display.d.ts +6 -0
  202. package/dist/components/fields/date-display.js +24 -0
  203. package/dist/components/fields/date-field-value.d.ts +2 -0
  204. package/dist/components/fields/date-field-value.js +13 -0
  205. package/dist/components/json-schema-form-state.d.ts +37 -0
  206. package/dist/components/json-schema-form-state.js +168 -0
  207. package/dist/components/network/TeamCrewTablePage.svelte +6 -1
  208. package/dist/components/network/UserCardsNFTPage.svelte +2 -0
  209. package/dist/components/profile/PublicProfilePage.svelte +2 -0
  210. package/dist/components/record-detail.svelte.d.ts +3 -0
  211. package/dist/components/record-detail.svelte.js +10 -4
  212. package/dist/components/saved-list-views.d.ts +74 -1
  213. package/dist/components/saved-list-views.js +191 -3
  214. package/dist/components/svar-grid-cells.d.ts +14 -0
  215. package/dist/components/svar-grid-cells.js +2 -0
  216. package/dist/components/svar-grid-contract.d.ts +80 -0
  217. package/dist/components/svar-grid-contract.js +159 -0
  218. package/dist/components/svar-grid-interactions.d.ts +54 -0
  219. package/dist/components/svar-grid-interactions.js +174 -0
  220. package/dist/components/svar-grid-loading.d.ts +40 -0
  221. package/dist/components/svar-grid-loading.js +180 -0
  222. package/dist/components/svar-grid-operations.d.ts +37 -0
  223. package/dist/components/svar-grid-operations.js +186 -0
  224. package/dist/components/svar-grid-panes.d.ts +34 -0
  225. package/dist/components/svar-grid-panes.js +66 -0
  226. package/dist/components/svar-grid-resource-loading.d.ts +18 -0
  227. package/dist/components/svar-grid-resource-loading.js +68 -0
  228. package/dist/components/svar-grid-resource-session.svelte.d.ts +29 -0
  229. package/dist/components/svar-grid-resource-session.svelte.js +61 -0
  230. package/dist/components/table-contract.d.ts +12 -1
  231. package/dist/components/task-action.svelte.d.ts +13 -0
  232. package/dist/components/task-action.svelte.js +73 -0
  233. package/dist/components/ui/DesignSystemShowcase.svelte +164 -0
  234. package/dist/components/ui/DesignSystemShowcase.svelte.d.ts +3 -0
  235. package/dist/components/ui/badge/badge-variants.d.ts +3 -2
  236. package/dist/components/ui/badge/badge-variants.js +2 -1
  237. package/dist/components/ui/badge/badge.svelte +3 -0
  238. package/dist/components/ui/badge/badge.svelte.d.ts +1 -0
  239. package/dist/components/ui/button/button-variants.d.ts +5 -4
  240. package/dist/components/ui/button/button-variants.js +7 -2
  241. package/dist/components/ui/checkbox/checkbox.svelte +5 -1
  242. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +5 -1
  243. package/dist/components/ui/input/input.svelte +8 -6
  244. package/dist/components/ui/input/input.svelte.d.ts +4 -1
  245. package/dist/components/ui/select/select.svelte +4 -1
  246. package/dist/components/ui/select/select.svelte.d.ts +2 -1
  247. package/dist/components/ui/textarea/textarea.svelte +2 -1
  248. package/dist/components.css +3110 -0
  249. package/dist/date-input-policy.d.ts +4 -0
  250. package/dist/date-input-policy.js +35 -0
  251. package/dist/design-contract.d.ts +13 -0
  252. package/dist/design-contract.js +11 -0
  253. package/dist/design-system-components.d.ts +100 -0
  254. package/dist/design-system-components.js +101 -0
  255. package/dist/design-system.d.ts +15 -0
  256. package/dist/design-system.js +7 -0
  257. package/dist/devtools-bridge.d.ts +80 -0
  258. package/dist/devtools-bridge.js +92 -0
  259. package/dist/index.d.ts +50 -1
  260. package/dist/index.js +32 -2
  261. package/dist/page-chrome.css +12 -49
  262. package/dist/recipes.d.ts +960 -0
  263. package/dist/recipes.js +264 -0
  264. package/dist/rendering/index.d.ts +87 -0
  265. package/dist/rendering/index.js +117 -0
  266. package/dist/styles/aliases.css +49 -0
  267. package/dist/styles/compatibility.epilogue.css +384 -0
  268. package/dist/styles/compatibility.prelude.css +5513 -0
  269. package/dist/styles/conditional-states.css +28 -0
  270. package/dist/styles/conditional-utilities.css +22 -0
  271. package/dist/tree-table-model.d.ts +24 -0
  272. package/dist/tree-table-model.js +111 -0
  273. package/dist/utils.d.ts +1 -1
  274. package/dist/utils.js +1 -1
  275. package/package.json +40 -10
  276. package/styles-compatibility.json +12 -0
@@ -0,0 +1,17 @@
1
+ interface Props {
2
+ value?: string[];
3
+ name?: string;
4
+ placeholder?: string;
5
+ separator?: string;
6
+ maxItems?: number;
7
+ disabled?: boolean;
8
+ required?: boolean;
9
+ invalid?: boolean;
10
+ describedby?: string;
11
+ ariaLabel?: string;
12
+ class?: string;
13
+ onchange?: (value: string[]) => void;
14
+ }
15
+ declare const TagsInput: import("svelte").Component<Props, {}, "value">;
16
+ type TagsInput = ReturnType<typeof TagsInput>;
17
+ export default TagsInput;
@@ -1,8 +1,9 @@
1
1
  <script lang="ts">
2
+ import { onDestroy } from 'svelte';
2
3
  import { definedReactiveOptions, definedOptions } from '@svadmin/core/options';
3
4
 
4
5
  import { ListTodo, Loader2, Plus, Search, RefreshCw } from '@lucide/svelte';
5
- import { getTaskProvider, useSubmitTask, useTaskList } from '@svadmin/core';
6
+ import { captureAdminContext, captureAuthSession, useSubmitTask, useTaskList } from '@svadmin/core';
6
7
  import { decodeTaskSubmitOptions } from '@svadmin/core/schema';
7
8
  import { useTranslation } from '@svadmin/core/i18n';
8
9
  import type { TaskProvider, TaskRecord } from '@svadmin/core';
@@ -25,13 +26,14 @@
25
26
  } from './task-utils.js';
26
27
 
27
28
  const i18n = useTranslation();
29
+ const context = captureAdminContext();
28
30
 
29
31
  type AutoRefreshValue = '0' | '5000' | '15000' | '30000';
30
32
  type TaskTab = 'tasks' | 'dlq';
31
33
 
32
34
  let {
33
35
  open = $bindable(false),
34
- taskProvider = getTaskProvider({ optional: true }) ?? undefined,
36
+ taskProvider,
35
37
  title,
36
38
  initialTab = 'tasks',
37
39
  }: {
@@ -51,6 +53,45 @@
51
53
  let submitBodyText = $state(i18n.t('task.bodyPlaceholder'));
52
54
  let submitError = $state<string | null>(null);
53
55
  let submitOpen = $state(false);
56
+ let submitAttempt = $state.raw<object | null>(null);
57
+ let mounted = true;
58
+ onDestroy(() => { mounted = false; submitAttempt = null; });
59
+ const activeTaskProvider = $derived(taskProvider ?? context.taskProvider);
60
+ const taskScope = $derived({
61
+ provider: activeTaskProvider,
62
+ tenant: context.tenantCacheKey?.__svadminTenant,
63
+ auth: context.authProvider,
64
+ router: context.routerProvider,
65
+ session: captureAuthSession(context.authProvider),
66
+ });
67
+ let previousTaskScope: typeof taskScope | undefined;
68
+ function taskScopesEqual(left: typeof taskScope, right: typeof taskScope): boolean {
69
+ return left.provider === right.provider
70
+ && left.tenant === right.tenant
71
+ && left.auth === right.auth
72
+ && left.router === right.router
73
+ && left.session.cacheKey === right.session.cacheKey
74
+ && left.session.available === right.session.available;
75
+ }
76
+ function taskScopeIsCurrent(origin: typeof taskScope): boolean {
77
+ return mounted && taskScopesEqual(origin, taskScope) && origin.session.isCurrent();
78
+ }
79
+ $effect.pre(() => {
80
+ const scope = taskScope;
81
+ if (previousTaskScope && !taskScopesEqual(previousTaskScope, scope)) {
82
+ selectedTaskId = null;
83
+ submitAttempt = null;
84
+ submitOpen = false;
85
+ resetSubmitForm();
86
+ }
87
+ previousTaskScope = scope;
88
+ });
89
+ $effect.pre(() => {
90
+ if (!open) {
91
+ submitAttempt = null;
92
+ submitOpen = false;
93
+ }
94
+ });
54
95
 
55
96
  const refreshInterval = $derived.by<number | false>(() =>
56
97
  autoRefresh === '0' ? false : Number(autoRefresh),
@@ -59,11 +100,11 @@
59
100
 
60
101
  const taskQuery = useTaskList(definedReactiveOptions({
61
102
  get taskProvider() {
62
- return taskProvider;
103
+ return activeTaskProvider;
63
104
  },
64
105
  get queryOptions() {
65
106
  return {
66
- enabled: !!taskProvider,
107
+ enabled: !!activeTaskProvider,
67
108
  refetchInterval: refreshInterval,
68
109
  refetchIntervalInBackground: true,
69
110
  };
@@ -75,11 +116,11 @@
75
116
  return true;
76
117
  },
77
118
  get taskProvider() {
78
- return taskProvider;
119
+ return activeTaskProvider;
79
120
  },
80
121
  get queryOptions() {
81
122
  return {
82
- enabled: !!taskProvider && !!taskProvider?.listDlq,
123
+ enabled: !!activeTaskProvider && !!activeTaskProvider?.listDlq,
83
124
  refetchInterval: refreshInterval,
84
125
  refetchIntervalInBackground: true,
85
126
  };
@@ -162,7 +203,14 @@
162
203
  submitError = null;
163
204
  }
164
205
 
206
+ function toggleSubmitForm(): void {
207
+ submitAttempt = null;
208
+ submitError = null;
209
+ submitOpen = !submitOpen;
210
+ }
211
+
165
212
  async function handleSubmitTask() {
213
+ if (!open || !submitOpen || submitAttempt || !activeTaskProvider || !taskScope.session.available) return;
166
214
  submitError = null;
167
215
  if (!submitTaskName.trim()) {
168
216
  submitError = i18n.t('validation.required');
@@ -180,25 +228,33 @@
180
228
  }
181
229
  }
182
230
 
231
+ const origin = taskScope;
232
+ const attempt = {};
233
+ submitAttempt = attempt;
234
+ const current = () => submitAttempt === attempt && taskScopeIsCurrent(origin);
183
235
  try {
184
236
  const handle = await submitTask.mutation.mutateAsync(definedOptions({
185
237
  taskName: submitTaskName.trim(),
186
- taskProvider,
238
+ taskProvider: activeTaskProvider,
187
239
  options: definedOptions({
188
240
  body,
189
241
  idempotencyKey: submitIdempotencyKey.trim() || undefined,
190
242
  }),
191
243
  }));
244
+ if (!current()) return;
192
245
  activeTab = 'tasks';
193
246
  selectedTaskId = handle.id;
194
247
  submitOpen = false;
195
248
  resetSubmitForm();
196
- await Promise.all([
249
+ await Promise.allSettled([
197
250
  taskQuery.refetch?.(),
198
251
  dlqQuery.refetch?.(),
199
252
  ]);
200
253
  } catch (error) {
254
+ if (!current()) return;
201
255
  submitError = error instanceof Error ? error.message : i18n.t('task.submitFailed');
256
+ } finally {
257
+ if (submitAttempt === attempt) submitAttempt = null;
202
258
  }
203
259
  }
204
260
 
@@ -249,7 +305,7 @@
249
305
  </div>
250
306
  </div>
251
307
 
252
- {#if !taskProvider}
308
+ {#if !activeTaskProvider}
253
309
  <div class="svadmin-u-60fbb7713999 svadmin-u-36e579c0b41c svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-0478c89a150f svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">
254
310
  {i18n.t('common.configRequired')}
255
311
  </div>
@@ -276,7 +332,7 @@
276
332
  <RefreshCw class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
277
333
  {i18n.t('common.refresh')}
278
334
  </Button>
279
- <Button size="sm" onclick={() => submitOpen = !submitOpen}>
335
+ <Button size="sm" disabled={!taskScope.session.available} onclick={toggleSubmitForm}>
280
336
  <Plus class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
281
337
  {i18n.t('task.submitAction')}
282
338
  </Button>
@@ -327,14 +383,14 @@
327
383
  <Textarea id="task-body" bind:value={submitBodyText} class="svadmin-u-ee15a477cd9c svadmin-u-0e65706bcccd svadmin-u-359090c2d529" />
328
384
  </div>
329
385
  {#if submitError}
330
- <p class="svadmin-u-fc7473ca09eb svadmin-u-811148b13d1e">{submitError}</p>
386
+ <p role="alert" class="svadmin-u-fc7473ca09eb svadmin-u-811148b13d1e">{submitError}</p>
331
387
  {/if}
332
388
  <div class="svadmin-u-60fbb7713999 svadmin-u-1eb5c6df38c1 svadmin-u-77c08e015d14 svadmin-u-77a2a20e90d4">
333
- <Button variant="ghost" onclick={() => { submitOpen = false; submitError = null; }}>
389
+ <Button variant="ghost" onclick={toggleSubmitForm}>
334
390
  {i18n.t('common.cancel')}
335
391
  </Button>
336
- <Button onclick={() => void handleSubmitTask()} disabled={submitTask.mutation.isPending}>
337
- {#if submitTask.mutation.isPending}
392
+ <Button onclick={() => void handleSubmitTask()} disabled={submitAttempt !== null || !taskScope.session.available}>
393
+ {#if submitAttempt !== null}
338
394
  <Loader2 class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c svadmin-u-afbdd13a380e" />
339
395
  {/if}
340
396
  {i18n.t('task.submitAction')}
@@ -346,7 +402,7 @@
346
402
 
347
403
  <TaskList
348
404
  tasks={filteredTasks}
349
- {taskProvider}
405
+ taskProvider={activeTaskProvider}
350
406
  dlq={activeTab === 'dlq'}
351
407
  title={activeTab === 'dlq' ? i18n.t('task.dlqTitle') : i18n.t('task.listTitle')}
352
408
  emptyText={activeTab === 'dlq' ? i18n.t('task.noDlq') : i18n.t('task.noTasks')}
@@ -362,7 +418,7 @@
362
418
  {#if selectedTaskId}
363
419
  <TaskDetails
364
420
  taskId={selectedTaskId}
365
- {taskProvider}
421
+ taskProvider={activeTaskProvider}
366
422
  useProviderData
367
423
  queryOptions={{
368
424
  refetchInterval: refreshInterval,
@@ -0,0 +1,10 @@
1
+ <script lang="ts">
2
+ import type { ComponentProps } from 'svelte';
3
+ import DateTimeInput from './DateTimeInput.svelte';
4
+
5
+ export type TimePickerProps = Omit<ComponentProps<typeof DateTimeInput>, 'mode'>;
6
+
7
+ let props: TimePickerProps = $props();
8
+ </script>
9
+
10
+ <DateTimeInput {...props} mode="time" />
@@ -0,0 +1,6 @@
1
+ import type { ComponentProps } from 'svelte';
2
+ import DateTimeInput from './DateTimeInput.svelte';
3
+ export type TimePickerProps = Omit<ComponentProps<typeof DateTimeInput>, 'mode'>;
4
+ declare const TimePicker: import("svelte").Component<TimePickerProps, {}, "">;
5
+ type TimePicker = ReturnType<typeof TimePicker>;
6
+ export default TimePicker;