windmill-components 1.542.4 → 1.550.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.
- package/package/common.d.ts +4 -1
- package/package/components/AIAgentLogViewer.svelte +1 -1
- package/package/components/ArgEnum.svelte +14 -5
- package/package/components/ArgInput.svelte +23 -15
- package/package/components/ArgInput.svelte.d.ts +1 -1
- package/package/components/ChannelSelector.svelte +92 -18
- package/package/components/ChannelSelector.svelte.d.ts +2 -0
- package/package/components/ConnectionSection.svelte +12 -1
- package/package/components/Dev.svelte +18 -5
- package/package/components/Dev.svelte.d.ts +23 -1
- package/package/components/DisplayResult.svelte +36 -23
- package/package/components/DropdownV2.svelte +8 -2
- package/package/components/DropdownV2.svelte.d.ts +1 -0
- package/package/components/DynamicInput.svelte +10 -10
- package/package/components/EditableSchemaForm.svelte +21 -7
- package/package/components/EditorSettings.svelte +11 -9
- package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
- package/package/components/FlowHistoryJobPicker.svelte +3 -0
- package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
- package/package/components/FlowJobResult.svelte +5 -5
- package/package/components/FlowLogRow.svelte +2 -2
- package/package/components/FlowLogViewer.svelte +228 -57
- package/package/components/FlowLogViewer.svelte.d.ts +16 -5
- package/package/components/FlowLogViewerWrapper.svelte +56 -3
- package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
- package/package/components/FlowLoopIterationPreview.svelte +4 -4
- package/package/components/FlowMetadata.svelte +3 -4
- package/package/components/FlowMetadata.svelte.d.ts +4 -18
- package/package/components/FlowPreviewContent.svelte +9 -3
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewer.svelte +62 -59
- package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
- package/package/components/FlowStatusViewerInner.svelte +186 -94
- package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
- package/package/components/FlowTimeline.svelte +110 -131
- package/package/components/FlowTimeline.svelte.d.ts +13 -4
- package/package/components/FlowTimelineBar.svelte +227 -0
- package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
- package/package/components/InputTransformForm.svelte +119 -3
- package/package/components/InputTransformForm.svelte.d.ts +3 -0
- package/package/components/InputTransformSchemaForm.svelte +5 -1
- package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
- package/package/components/InstanceSetting.svelte +17 -42
- package/package/components/InstanceSettings.svelte +12 -21
- package/package/components/JobArgs.svelte +15 -16
- package/package/components/JobArgs.svelte.d.ts +4 -18
- package/package/components/JobLoader.svelte +23 -42
- package/package/components/JobLoader.svelte.d.ts +2 -0
- package/package/components/JobStatus.svelte +1 -1
- package/package/components/JobStatus.svelte.d.ts +4 -18
- package/package/components/ModulePreviewResultViewer.svelte +1 -7
- package/package/components/NextcloudSetting.svelte +6 -1
- package/package/components/Password.svelte +7 -11
- package/package/components/Password.svelte.d.ts +5 -20
- package/package/components/PasswordArgInput.svelte +35 -15
- package/package/components/PasswordArgInput.svelte.d.ts +4 -18
- package/package/components/QueuePosition.svelte +6 -2
- package/package/components/RunForm.svelte +5 -14
- package/package/components/S3ArrayHelperButton.svelte +12 -0
- package/package/components/S3ArrayHelperButton.svelte.d.ts +8 -0
- package/package/components/ScriptEditor.svelte +5 -6
- package/package/components/StringTypeNarrowing.svelte +39 -24
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/TeamSelector.svelte +83 -37
- package/package/components/TeamSelector.svelte.d.ts +0 -1
- package/package/components/apps/components/buttons/AppButton.svelte +11 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
- package/package/components/apps/components/display/table/utils.js +1 -1
- package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +0 -2
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppTabs.svelte +116 -71
- package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
- package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
- package/package/components/apps/editor/component/components.d.ts +16 -1
- package/package/components/apps/editor/component/components.js +22 -2
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
- package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
- package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
- package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +6 -0
- package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
- package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
- package/package/components/common/CloseButton.svelte +2 -2
- package/package/components/common/CloseButton.svelte.d.ts +1 -0
- package/package/components/common/layout/List.svelte +3 -7
- package/package/components/common/layout/List.svelte.d.ts +7 -29
- package/package/components/common/popup/PopupV2.svelte +8 -25
- package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
- package/package/components/common/table/ScriptRow.svelte +22 -2
- package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
- package/package/components/copilot/chat/AIChatManager.svelte.js +3 -2
- package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
- package/package/components/copilot/chat/script/core.d.ts +4 -4
- package/package/components/copilot/chat/script/core.js +93 -34
- package/package/components/copilot/lib.d.ts +1 -0
- package/package/components/copilot/lib.js +6 -3
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/flows/FlowProgressBar.svelte +16 -16
- package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
- package/package/components/flows/content/FlowInputsQuick.svelte +3 -2
- package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +24 -1
- package/package/components/flows/flowInfers.js +34 -8
- package/package/components/flows/flowStore.d.ts +4 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
- package/package/components/flows/map/InsertModuleButton.svelte +4 -14
- package/package/components/flows/map/InsertModuleButton.svelte.d.ts +0 -1
- package/package/components/flows/map/InsertModuleInner.svelte +17 -20
- package/package/components/flows/map/MapItem.svelte +1 -1
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +38 -52
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -0
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +27 -15
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
- package/package/components/git_sync/DetectionFlow.svelte +33 -44
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
- package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
- package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
- package/package/components/git_sync/GitSyncSection.svelte +134 -14
- package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
- package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
- package/package/components/graph/model.d.ts +5 -5
- package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
- package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
- package/package/components/home/ItemsList.svelte +1 -1
- package/package/components/jobs/JobProgressBar.svelte +27 -21
- package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
- package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
- package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
- package/package/components/meltComponents/Popover.svelte +3 -2
- package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
- package/package/components/meltComponents/Tooltip.svelte +1 -1
- package/package/components/progressBar/ProgressBar.svelte +39 -53
- package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
- package/package/components/runs/JobsLoader.svelte +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
- package/package/components/schema/AddPropertyV2.svelte +7 -4
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/select/MultiSelect.svelte +2 -2
- package/package/components/select/MultiSelect.svelte.d.ts +1 -0
- package/package/components/settings/WorkspaceUserSettings.svelte +92 -1
- package/package/components/sidebar/MenuLink.svelte +2 -1
- package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
- package/package/components/sidebar/SidebarContent.svelte +27 -27
- package/package/components/table/Cell.svelte +7 -14
- package/package/components/table/Cell.svelte.d.ts +13 -35
- package/package/components/triggers/AddTriggersButton.svelte +1 -0
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
- package/package/components/triggers/websocket/utils.js +1 -0
- package/package/components/workspaceSettings/AISettings.svelte +8 -2
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
- package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
- package/package/components/workspaceSettings/StorageSettings.svelte +123 -51
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +141 -16
- package/package/gen/schemas.gen.js +144 -16
- package/package/gen/services.gen.d.ts +62 -42
- package/package/gen/services.gen.js +131 -82
- package/package/gen/types.gen.d.ts +218 -144
- package/package/hubPaths.json +2 -1
- package/package/services/JobManager.js +10 -7
- package/package/stores.d.ts +1 -0
- package/package/stores.js +6 -3
- package/package/timelineCompute.svelte.d.ts +21 -0
- package/package/timelineCompute.svelte.js +113 -0
- package/package/utils.d.ts +15 -8
- package/package/utils.js +62 -12
- package/package/workspace_settings.d.ts +13 -8
- package/package/workspace_settings.js +46 -11
- package/package.json +2 -2
|
@@ -6,7 +6,7 @@ const activePopover = writable({
|
|
|
6
6
|
</script>
|
|
7
7
|
|
|
8
8
|
<script lang="ts">import { createPopover, createSync, melt } from '@melt-ui/svelte';
|
|
9
|
-
import {
|
|
9
|
+
import { fly } from 'svelte/transition';
|
|
10
10
|
import { X, Minimize2, Maximize2 } from 'lucide-svelte';
|
|
11
11
|
import { debounce, pointerDownOutside } from '../../utils';
|
|
12
12
|
import { twMerge } from 'tailwind-merge';
|
|
@@ -32,6 +32,7 @@ export let disabled = false;
|
|
|
32
32
|
export let documentationLink = undefined;
|
|
33
33
|
export let disableFocusTrap = false;
|
|
34
34
|
export let escapeBehavior = 'close';
|
|
35
|
+
export let enableFlyTransition = false;
|
|
35
36
|
let fullScreen = false;
|
|
36
37
|
const dispatch = createEventDispatcher();
|
|
37
38
|
function clearTimers() {
|
|
@@ -142,7 +143,7 @@ let { debounced: debounceClose, clearDebounce: clearDebounceClose } = debounce((
|
|
|
142
143
|
}}
|
|
143
144
|
on:mouseleave={debounceClose}
|
|
144
145
|
{...$content} use:$content.action
|
|
145
|
-
transition:
|
|
146
|
+
transition:fly={{ duration: enableFlyTransition ? 100 : 0, y: -16 }}
|
|
146
147
|
class={twMerge(
|
|
147
148
|
'relative border rounded-md bg-surface shadow-lg',
|
|
148
149
|
fullScreen
|
|
@@ -35,6 +35,7 @@ declare const Popover: $$__sveltets_2_IsomorphicComponent<{
|
|
|
35
35
|
documentationLink?: string | undefined | undefined;
|
|
36
36
|
disableFocusTrap?: boolean | undefined;
|
|
37
37
|
escapeBehavior?: EscapeBehaviorType | undefined;
|
|
38
|
+
enableFlyTransition?: boolean | undefined;
|
|
38
39
|
isOpen?: boolean | undefined;
|
|
39
40
|
close?: (() => void) | undefined;
|
|
40
41
|
open?: (() => void) | undefined;
|
|
@@ -23,7 +23,7 @@ const { elements: { trigger, content }, states: { open } } = createTooltip({
|
|
|
23
23
|
});
|
|
24
24
|
</script>
|
|
25
25
|
|
|
26
|
-
<span class={$$props.class} {...$trigger} use:$trigger.action>
|
|
26
|
+
<span class={$$props.class} style={$$props.style} {...$trigger} use:$trigger.action>
|
|
27
27
|
<slot />
|
|
28
28
|
</span>
|
|
29
29
|
{#if !$$slots.default}
|
|
@@ -1,65 +1,49 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
1
|
+
<script lang="ts">import { Tween } from 'svelte/motion';
|
|
2
2
|
import { linear } from 'svelte/easing';
|
|
3
3
|
import { twMerge } from 'tailwind-merge';
|
|
4
|
-
|
|
5
|
-
return tweened(initialValue, {
|
|
6
|
-
duration,
|
|
7
|
-
easing: linear
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
export let error = undefined;
|
|
11
|
-
export let index;
|
|
12
|
-
export let subIndex;
|
|
13
|
-
export let subLength;
|
|
14
|
-
export let nextInProgress = false;
|
|
15
|
-
// Used for displaying progress of subjob of flow
|
|
16
|
-
export let subIndexIsPercent = false;
|
|
17
|
-
// Remove padding/margin, border radius and titles
|
|
18
|
-
// Used in individual job test runs
|
|
19
|
-
export let compact = false;
|
|
20
|
-
// Removes `Step 1` and replaces it with `Running`
|
|
21
|
-
export let hideStepTitle = false;
|
|
22
|
-
export let length;
|
|
4
|
+
let { error = undefined, index, subIndex, subLength, nextInProgress = false, subIndexIsPercent = false, compact = false, hideStepTitle = false, length, class: className = '' } = $props();
|
|
23
5
|
let duration = 200;
|
|
24
|
-
let percent =
|
|
6
|
+
let percent = new Tween(0, { duration, easing: linear });
|
|
25
7
|
export function resetP() {
|
|
26
|
-
percent
|
|
8
|
+
percent.set(0, { duration: 0 });
|
|
27
9
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
10
|
+
$effect(() => {
|
|
11
|
+
percent.set((length
|
|
12
|
+
? index / length + (subIndex && subLength ? subIndex / (subLength ?? 1) / length : 0)
|
|
13
|
+
: 0) * 100);
|
|
14
|
+
});
|
|
31
15
|
function getPercent(partIndex, _pct) {
|
|
32
16
|
if (!length) {
|
|
33
17
|
return 0;
|
|
34
18
|
}
|
|
35
|
-
const res = Math.min((
|
|
19
|
+
const res = Math.min((percent.current - (partIndex / length) * 100) * length, 100);
|
|
36
20
|
return res;
|
|
37
21
|
}
|
|
38
|
-
|
|
22
|
+
let finished = $derived(index == length);
|
|
39
23
|
</script>
|
|
40
24
|
|
|
41
|
-
<div class={
|
|
25
|
+
<div class={className}>
|
|
42
26
|
{#if !compact}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
27
|
+
<div
|
|
28
|
+
class="flex justify-between items-end font-medium mb-1 {error != undefined
|
|
29
|
+
? 'text-red-700 dark:text-red-200'
|
|
30
|
+
: 'text-blue-700 dark:text-blue-200'}"
|
|
31
|
+
>
|
|
32
|
+
<span class="text-base">
|
|
33
|
+
{error != undefined
|
|
34
|
+
? 'Error occured'
|
|
35
|
+
: finished
|
|
36
|
+
? 'Done'
|
|
37
|
+
: hideStepTitle
|
|
38
|
+
? `Running`
|
|
39
|
+
: subIndexIsPercent
|
|
40
|
+
? `Step ${index + 1} (${subIndex !== undefined ? `${subIndex}%)` : ''}`
|
|
41
|
+
: `Step ${index + 1}${subIndex !== undefined ? `.${subIndex + 1}` : ''}`}
|
|
42
|
+
</span>
|
|
43
|
+
<span class="text-sm">
|
|
44
|
+
{percent.current.toFixed(0)}%
|
|
45
|
+
</span>
|
|
46
|
+
</div>
|
|
63
47
|
{/if}
|
|
64
48
|
<!-- {#each state as step, index}
|
|
65
49
|
{index} {JSON.stringify(step)}
|
|
@@ -70,10 +54,12 @@ $: finished = index == length;
|
|
|
70
54
|
{getPercent(index)}
|
|
71
55
|
|
|
|
72
56
|
{/each} -->
|
|
73
|
-
<div
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
57
|
+
<div
|
|
58
|
+
class={twMerge(
|
|
59
|
+
'flex w-full bg-gray-200 overflow-hidden',
|
|
60
|
+
compact ? 'rounded-none h-3' : 'rounded-full h-4'
|
|
61
|
+
)}
|
|
62
|
+
>
|
|
77
63
|
{#each new Array(length) as _, partIndex (partIndex)}
|
|
78
64
|
<div class="h-full relative border-white {partIndex === 0 ? '' : 'border-l'} w-full">
|
|
79
65
|
{#if partIndex == index && nextInProgress}
|
|
@@ -89,7 +75,7 @@ $: finished = index == length;
|
|
|
89
75
|
class="absolute left-0 bottom-0 h-full {error == partIndex
|
|
90
76
|
? 'bg-red-400'
|
|
91
77
|
: 'bg-blue-400'}"
|
|
92
|
-
style="width: {getPercent(partIndex,
|
|
78
|
+
style="width: {getPercent(partIndex, percent.current)}%"
|
|
93
79
|
></div>
|
|
94
80
|
{/if}
|
|
95
81
|
</div>
|
|
@@ -1,32 +1,17 @@
|
|
|
1
|
-
interface
|
|
2
|
-
|
|
3
|
-
$$bindings?: Bindings;
|
|
4
|
-
} & Exports;
|
|
5
|
-
(internal: unknown, props: Props & {
|
|
6
|
-
$$events?: Events;
|
|
7
|
-
$$slots?: Slots;
|
|
8
|
-
}): Exports & {
|
|
9
|
-
$set?: any;
|
|
10
|
-
$on?: any;
|
|
11
|
-
};
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
13
|
-
}
|
|
14
|
-
declare const ProgressBar: $$__sveltets_2_IsomorphicComponent<{
|
|
15
|
-
[x: string]: any;
|
|
16
|
-
error?: number | undefined | undefined;
|
|
1
|
+
interface Props {
|
|
2
|
+
error?: number | undefined;
|
|
17
3
|
index: number;
|
|
18
4
|
subIndex: number | undefined;
|
|
19
5
|
subLength: number | undefined;
|
|
20
|
-
nextInProgress?: boolean
|
|
21
|
-
subIndexIsPercent?: boolean
|
|
22
|
-
compact?: boolean
|
|
23
|
-
hideStepTitle?: boolean
|
|
6
|
+
nextInProgress?: boolean;
|
|
7
|
+
subIndexIsPercent?: boolean;
|
|
8
|
+
compact?: boolean;
|
|
9
|
+
hideStepTitle?: boolean;
|
|
24
10
|
length: number;
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
}, {}, {
|
|
11
|
+
class?: string;
|
|
12
|
+
}
|
|
13
|
+
declare const ProgressBar: import("svelte").Component<Props, {
|
|
29
14
|
resetP: () => void;
|
|
30
|
-
},
|
|
31
|
-
type ProgressBar =
|
|
15
|
+
}, "">;
|
|
16
|
+
type ProgressBar = ReturnType<typeof ProgressBar>;
|
|
32
17
|
export default ProgressBar;
|
|
@@ -4,7 +4,7 @@ import { sendUserToast } from '../../toast';
|
|
|
4
4
|
import { workspaceStore } from '../../stores';
|
|
5
5
|
import { tweened } from 'svelte/motion';
|
|
6
6
|
import { subtractDaysFromDateString } from '../../utils';
|
|
7
|
-
let { jobs = $bindable(), user, label = null, worker = null, folder, path, success = undefined, isSkipped = false, showSchedules = true, showFutureJobs = true, argFilter, resultFilter = undefined, schedulePath = undefined, jobKindsCat = undefined, minTs = $bindable(undefined), maxTs = $bindable(undefined), jobKinds = $bindable(
|
|
7
|
+
let { jobs = $bindable(), user, label = null, worker = null, folder, path, success = undefined, isSkipped = false, showSchedules = true, showFutureJobs = true, argFilter, resultFilter = undefined, schedulePath = undefined, jobKindsCat = undefined, minTs = $bindable(undefined), maxTs = $bindable(undefined), jobKinds = $bindable(undefined), queue_count = $bindable(undefined), suspended_count = $bindable(undefined), autoRefresh = true, completedJobs = $bindable(undefined), externalJobs = $bindable(undefined), concurrencyKey, tag, extendedJobs = $bindable(undefined), argError = '', resultError = '', loading = $bindable(false), refreshRate = 5000, syncQueuedRunsCount = true, allWorkspaces = false, computeMinAndMax, lookback = 0, perPage = undefined, allowWildcards = false } = $props();
|
|
8
8
|
let intervalId = $state();
|
|
9
9
|
let sync = true;
|
|
10
10
|
function onParamChanges() {
|
|
@@ -7,9 +7,9 @@ let noWorkerWithTag = $state(false);
|
|
|
7
7
|
let timeout = undefined;
|
|
8
8
|
let visible = true;
|
|
9
9
|
let customTag = $derived.by(() => {
|
|
10
|
-
if (tag
|
|
10
|
+
if (tag?.includes('$workspace') || tag?.includes('$args'))
|
|
11
11
|
return;
|
|
12
|
-
if (tag
|
|
12
|
+
if (tag?.includes('(')) {
|
|
13
13
|
return tag.split('(')[0];
|
|
14
14
|
}
|
|
15
15
|
return tag;
|
|
@@ -34,7 +34,7 @@ async function lookForTag() {
|
|
|
34
34
|
}
|
|
35
35
|
$effect(() => {
|
|
36
36
|
customTag;
|
|
37
|
-
untrack(() => lookForTag());
|
|
37
|
+
untrack(() => timeout && setTimeout(() => lookForTag(), 2500));
|
|
38
38
|
});
|
|
39
39
|
onDestroy(() => {
|
|
40
40
|
visible = false;
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
<script lang="ts">import { modalToSchema } from '../../common';
|
|
2
2
|
import { emptySchema, sendUserToast } from '../../utils';
|
|
3
|
+
import { untrack } from 'svelte';
|
|
3
4
|
import AddPropertyFormV2 from './AddPropertyFormV2.svelte';
|
|
4
|
-
let { schema = $bindable(
|
|
5
|
+
let { schema = $bindable(undefined), trigger, noPopover, onAddNew } = $props();
|
|
5
6
|
export const DEFAULT_PROPERTY = {
|
|
6
7
|
selectedType: 'string',
|
|
7
8
|
description: '',
|
|
8
9
|
name: '',
|
|
9
10
|
required: false
|
|
10
11
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
$effect.pre(() => {
|
|
13
|
+
if (!schema) {
|
|
14
|
+
untrack(() => (schema = emptySchema()));
|
|
15
|
+
}
|
|
16
|
+
});
|
|
14
17
|
// Internal state: bound to args builder modal
|
|
15
18
|
let argError = '';
|
|
16
19
|
let editing = false;
|
|
@@ -46,6 +46,6 @@ declare const PropertyEditor: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
|
46
46
|
[evt: string]: CustomEvent<any>;
|
|
47
47
|
}, {}, {
|
|
48
48
|
focus: () => void;
|
|
49
|
-
}, "description" | "title" | "
|
|
49
|
+
}, "description" | "title" | "pattern" | "properties" | "placeholder" | "extra" | "oneOf" | "format" | "order" | "enum_" | "contentEncoding" | "customErrorMessage" | "itemsType">;
|
|
50
50
|
type PropertyEditor = InstanceType<typeof PropertyEditor>;
|
|
51
51
|
export default PropertyEditor;
|
|
@@ -6,7 +6,7 @@ import CloseButton from '../common/CloseButton.svelte';
|
|
|
6
6
|
import DraggableTags from './DraggableTags.svelte';
|
|
7
7
|
import { Search } from 'lucide-svelte';
|
|
8
8
|
import { twMerge } from 'tailwind-merge';
|
|
9
|
-
let { items, placeholder = 'Select items', value = $bindable(), class: className = '', style, listAutoWidth = true, disabled = false, disablePortal = false, createText, reorderable = true, noItemsMsg, selectedUlClass = '', placeholderClass = '', allowClear = true, onOpen, groupBy, sortBy, onCreateItem } = $props();
|
|
9
|
+
let { items, placeholder = 'Select items', value = $bindable(), class: className = '', style, listAutoWidth = true, disabled = false, disablePortal = false, createText, reorderable = true, noItemsMsg, selectedUlClass = '', placeholderClass = '', allowClear = true, hideMainClearBtn = false, onOpen, groupBy, sortBy, onCreateItem } = $props();
|
|
10
10
|
let filterText = $state('');
|
|
11
11
|
let open = $state(false);
|
|
12
12
|
let wrapperEl = $state();
|
|
@@ -79,7 +79,7 @@ function clearValue() {
|
|
|
79
79
|
/>
|
|
80
80
|
</ul>
|
|
81
81
|
{/if}
|
|
82
|
-
{#if allowClear}
|
|
82
|
+
{#if allowClear && !hideMainClearBtn}
|
|
83
83
|
<CloseButton
|
|
84
84
|
noBg
|
|
85
85
|
class="mr-1 remove-all"
|
|
@@ -54,6 +54,22 @@ let sortedUsers = $derived(() => {
|
|
|
54
54
|
});
|
|
55
55
|
});
|
|
56
56
|
let hasNonManualUsers = $derived((filteredUsers || users || []).some((user) => user.added_via?.source === 'instance_group' || user.added_via?.source === 'domain'));
|
|
57
|
+
// Function to check if a manual user can be converted to a group user
|
|
58
|
+
function canConvertToGroup(user) {
|
|
59
|
+
// User must be manually added (not via instance group or domain)
|
|
60
|
+
if (user.added_via?.source === 'instance_group' || user.added_via?.source === 'domain') {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
// Check if user's email is in any configured instance group
|
|
64
|
+
const userEmail = user.email;
|
|
65
|
+
for (const groupName of autoAddInstanceGroups) {
|
|
66
|
+
const group = instanceGroups.find(g => g.name === groupName);
|
|
67
|
+
if (group && group.emails && group.emails.includes(userEmail)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
57
73
|
async function loadSettings() {
|
|
58
74
|
const settings = await WorkspaceService.getSettings({ workspace: $workspaceStore });
|
|
59
75
|
auto_invite_domain = settings.auto_invite_domain;
|
|
@@ -165,6 +181,20 @@ async function updateGroupRole(groupName, role) {
|
|
|
165
181
|
sendUserToast('Failed to update role', true);
|
|
166
182
|
}
|
|
167
183
|
}
|
|
184
|
+
async function convertUserToGroup(username) {
|
|
185
|
+
try {
|
|
186
|
+
await UserService.convertUserToGroup({
|
|
187
|
+
workspace: $workspaceStore ?? '',
|
|
188
|
+
username
|
|
189
|
+
});
|
|
190
|
+
sendUserToast('User converted to group user');
|
|
191
|
+
listUsers();
|
|
192
|
+
}
|
|
193
|
+
catch (e) {
|
|
194
|
+
console.error('Failed to convert user:', e);
|
|
195
|
+
sendUserToast('Failed to convert user', true);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
168
198
|
let domain = $derived($userStore?.email.split('@')[1]);
|
|
169
199
|
$effect(() => {
|
|
170
200
|
if ($workspaceStore) {
|
|
@@ -188,6 +218,7 @@ onDestroy(() => {
|
|
|
188
218
|
});
|
|
189
219
|
let deleteConfirmedCallback = $state(undefined);
|
|
190
220
|
let removeInstanceGroupConfirmedCallback = $state(undefined);
|
|
221
|
+
let convertConfirmedCallback = $state(undefined);
|
|
191
222
|
async function removeAllInvitesFromDomain() {
|
|
192
223
|
await Promise.all(invites
|
|
193
224
|
.filter((x) => isCloudHosted() ? x.email.endsWith('@' + (auto_invite_domain ?? '')) : true)
|
|
@@ -593,7 +624,8 @@ $effect(() => {
|
|
|
593
624
|
</Head>
|
|
594
625
|
<tbody class="divide-y bg-surface">
|
|
595
626
|
{#if filteredUsers}
|
|
596
|
-
{#each sortedUsers().slice(0, nbDisplayed) as
|
|
627
|
+
{#each sortedUsers().slice(0, nbDisplayed) as user, index (user.email)}
|
|
628
|
+
{@const { email, username, is_admin, operator, disabled, added_via } = user}
|
|
597
629
|
<!-- Add separator between manual users and instance group users -->
|
|
598
630
|
{#if hasNonManualUsers && index > 0 && sortedUsers()[index - 1]?.added_via?.source !== 'instance_group' && added_via?.source === 'instance_group'}
|
|
599
631
|
<tr class="bg-surface-secondary">
|
|
@@ -733,6 +765,40 @@ $effect(() => {
|
|
|
733
765
|
</Button>
|
|
734
766
|
<Tooltip>Cannot remove users synced from instance groups. Either disable the user or remove them from the SCIM group.</Tooltip>
|
|
735
767
|
</div>
|
|
768
|
+
{:else if canConvertToGroup(user)}
|
|
769
|
+
<Button
|
|
770
|
+
color="light"
|
|
771
|
+
variant="contained"
|
|
772
|
+
btnClasses="text-blue-500"
|
|
773
|
+
size="xs"
|
|
774
|
+
spacingSize="xs2"
|
|
775
|
+
on:click={() => {
|
|
776
|
+
convertConfirmedCallback = async () => {
|
|
777
|
+
await convertUserToGroup(username)
|
|
778
|
+
}
|
|
779
|
+
}}
|
|
780
|
+
>
|
|
781
|
+
Convert
|
|
782
|
+
</Button>
|
|
783
|
+
<Button
|
|
784
|
+
color="light"
|
|
785
|
+
variant="contained"
|
|
786
|
+
btnClasses="text-red-500"
|
|
787
|
+
size="xs"
|
|
788
|
+
spacingSize="xs2"
|
|
789
|
+
on:click={() => {
|
|
790
|
+
deleteConfirmedCallback = async () => {
|
|
791
|
+
await UserService.deleteUser({
|
|
792
|
+
workspace: $workspaceStore ?? '',
|
|
793
|
+
username
|
|
794
|
+
})
|
|
795
|
+
sendUserToast('User removed')
|
|
796
|
+
listUsers()
|
|
797
|
+
}
|
|
798
|
+
}}
|
|
799
|
+
>
|
|
800
|
+
Remove
|
|
801
|
+
</Button>
|
|
736
802
|
{:else}
|
|
737
803
|
<Button
|
|
738
804
|
color="light"
|
|
@@ -922,3 +988,28 @@ $effect(() => {
|
|
|
922
988
|
</div>
|
|
923
989
|
</ConfirmationModal>
|
|
924
990
|
</div>
|
|
991
|
+
|
|
992
|
+
<ConfirmationModal
|
|
993
|
+
open={Boolean(convertConfirmedCallback)}
|
|
994
|
+
title="Convert to Group User"
|
|
995
|
+
confirmationText="Convert"
|
|
996
|
+
on:canceled={() => {
|
|
997
|
+
convertConfirmedCallback = undefined
|
|
998
|
+
}}
|
|
999
|
+
on:confirmed={() => {
|
|
1000
|
+
if (convertConfirmedCallback) {
|
|
1001
|
+
convertConfirmedCallback()
|
|
1002
|
+
}
|
|
1003
|
+
convertConfirmedCallback = undefined
|
|
1004
|
+
}}
|
|
1005
|
+
>
|
|
1006
|
+
<div class="flex flex-col w-full space-y-4">
|
|
1007
|
+
<span>Are you sure you want to convert this user to a group user?</span>
|
|
1008
|
+
<span class="text-sm text-secondary">This will:</span>
|
|
1009
|
+
<ul class="text-sm text-secondary list-disc ml-4 space-y-1">
|
|
1010
|
+
<li>Change the user's role based on their instance group configuration</li>
|
|
1011
|
+
<li>Make their role managed through the instance group settings</li>
|
|
1012
|
+
<li>Prevent manual role changes for this user</li>
|
|
1013
|
+
</ul>
|
|
1014
|
+
</div>
|
|
1015
|
+
</ConfirmationModal>
|
|
@@ -5,7 +5,7 @@ import { base } from '$app/paths';
|
|
|
5
5
|
import { triggerableByAI } from '../../actions/triggerableByAI.svelte';
|
|
6
6
|
import { goto } from '$app/navigation';
|
|
7
7
|
import { twMerge } from 'tailwind-merge';
|
|
8
|
-
let { aiId = undefined, aiDescription = undefined, label, href, icon = undefined, isCollapsed, disabled = false, lightMode = false, item = undefined, class: classNames = '' } = $props();
|
|
8
|
+
let { aiId = undefined, aiDescription = undefined, label, href, icon = undefined, isCollapsed, disabled = false, lightMode = false, item = undefined, class: classNames = '', onclick = undefined } = $props();
|
|
9
9
|
let isSelected = $state(false);
|
|
10
10
|
navigating.subscribe(() => {
|
|
11
11
|
if (href === `${base}/`) {
|
|
@@ -28,6 +28,7 @@ navigating.subscribe(() => {
|
|
|
28
28
|
goto(href)
|
|
29
29
|
}
|
|
30
30
|
}}
|
|
31
|
+
{onclick}
|
|
31
32
|
class={twMerge(
|
|
32
33
|
'group flex items-center px-2 py-2 text-sm font-light rounded-md h-8 gap-3',
|
|
33
34
|
isSelected
|
|
@@ -10,6 +10,7 @@ interface Props {
|
|
|
10
10
|
lightMode?: boolean;
|
|
11
11
|
item?: MenubarMenuElements['item'] | undefined;
|
|
12
12
|
class?: string;
|
|
13
|
+
onclick?: (ev: MouseEvent) => any;
|
|
13
14
|
}
|
|
14
15
|
declare const MenuLink: import("svelte").Component<Props, {}, "">;
|
|
15
16
|
type MenuLink = ReturnType<typeof MenuLink>;
|
|
@@ -113,7 +113,12 @@ let mainMenuLinks = $derived([
|
|
|
113
113
|
href: `${base}/runs`,
|
|
114
114
|
icon: Play,
|
|
115
115
|
aiId: 'sidebar-menu-link-runs',
|
|
116
|
-
aiDescription: 'Button to navigate to runs'
|
|
116
|
+
aiDescription: 'Button to navigate to runs',
|
|
117
|
+
onclick: () => {
|
|
118
|
+
setTimeout(() => {
|
|
119
|
+
window.dispatchEvent(new Event('popstate'));
|
|
120
|
+
}, 100);
|
|
121
|
+
}
|
|
117
122
|
},
|
|
118
123
|
{
|
|
119
124
|
label: 'Variables',
|
|
@@ -295,7 +300,7 @@ let secondaryMenuLinks = $derived([
|
|
|
295
300
|
}
|
|
296
301
|
]
|
|
297
302
|
: []),
|
|
298
|
-
...($workspaceStore?.startsWith(
|
|
303
|
+
...($workspaceStore?.startsWith('wm-fork')
|
|
299
304
|
? [
|
|
300
305
|
{
|
|
301
306
|
label: 'Delete Forked Workspace',
|
|
@@ -306,7 +311,7 @@ let secondaryMenuLinks = $derived([
|
|
|
306
311
|
faIcon: undefined
|
|
307
312
|
}
|
|
308
313
|
]
|
|
309
|
-
: [])
|
|
314
|
+
: [])
|
|
310
315
|
],
|
|
311
316
|
disabled: $userStore?.operator
|
|
312
317
|
},
|
|
@@ -508,14 +513,9 @@ let secondaryMenuLinks = $derived([
|
|
|
508
513
|
{/snippet}
|
|
509
514
|
</Menu>
|
|
510
515
|
{:else}
|
|
511
|
-
<MenuSingleItem
|
|
512
|
-
{#snippet
|
|
513
|
-
<
|
|
514
|
-
<MenuButton class="!text-2xs" {...menuLink} {isCollapsed} {trigger} />
|
|
515
|
-
</div>
|
|
516
|
-
{/snippet}
|
|
517
|
-
{#snippet children({ item })}
|
|
518
|
-
<MenuLink class="!text-2xs" {...menuLink} {isCollapsed} {item} />
|
|
516
|
+
<MenuSingleItem>
|
|
517
|
+
{#snippet children({})}
|
|
518
|
+
<MenuLink class="!text-2xs" {...menuLink} {isCollapsed} />
|
|
519
519
|
{/snippet}
|
|
520
520
|
</MenuSingleItem>
|
|
521
521
|
{/if}
|
|
@@ -601,20 +601,20 @@ let secondaryMenuLinks = $derived([
|
|
|
601
601
|
</div>
|
|
602
602
|
</ConfirmationModal>
|
|
603
603
|
|
|
604
|
-
{#if $workspaceStore?.startsWith(
|
|
605
|
-
<ConfirmationModal
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
>
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
</ConfirmationModal>
|
|
604
|
+
{#if $workspaceStore?.startsWith('wm-fork-')}
|
|
605
|
+
<ConfirmationModal
|
|
606
|
+
open={deleteWorkspaceForkModal}
|
|
607
|
+
title="Delete forked workspace"
|
|
608
|
+
confirmationText="Remove"
|
|
609
|
+
on:canceled={() => {
|
|
610
|
+
deleteWorkspaceForkModal = false
|
|
611
|
+
}}
|
|
612
|
+
on:confirmed={() => {
|
|
613
|
+
deleteFork()
|
|
614
|
+
}}
|
|
615
|
+
>
|
|
616
|
+
<div class="flex flex-col w-full space-y-4">
|
|
617
|
+
<span>Are you sure you want to delete this workspace fork? (deleting {$workspaceStore})</span>
|
|
618
|
+
</div>
|
|
619
|
+
</ConfirmationModal>
|
|
620
620
|
{/if}
|
|
@@ -1,22 +1,15 @@
|
|
|
1
1
|
<script lang="ts">import { getContext } from 'svelte';
|
|
2
2
|
import { twMerge } from 'tailwind-merge';
|
|
3
|
-
|
|
4
|
-
export let last = false;
|
|
5
|
-
export let numeric = false;
|
|
6
|
-
export let head = false;
|
|
7
|
-
export let shouldStopPropagation = false;
|
|
8
|
-
export let selected = false;
|
|
9
|
-
export let sticky = false;
|
|
10
|
-
export let wrap = false;
|
|
3
|
+
let { first = false, last = false, numeric = false, head = false, shouldStopPropagation = false, selected = false, sticky = false, wrap = false, children, ...rest } = $props();
|
|
11
4
|
let Tag = head ? 'th' : 'td';
|
|
12
5
|
const { size } = getContext('datatable');
|
|
13
6
|
</script>
|
|
14
7
|
|
|
15
|
-
<!-- svelte-ignore
|
|
8
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
16
9
|
<svelte:element
|
|
17
10
|
this={Tag}
|
|
18
|
-
{
|
|
19
|
-
|
|
11
|
+
{...rest}
|
|
12
|
+
onclick={(e) => {
|
|
20
13
|
if (shouldStopPropagation) e.stopPropagation()
|
|
21
14
|
}}
|
|
22
15
|
class={twMerge(
|
|
@@ -36,14 +29,14 @@ const { size } = getContext('datatable');
|
|
|
36
29
|
size === 'xs' ? 'px-1 py-1.5' : '',
|
|
37
30
|
selected ? 'bg-blue-50 dark:bg-blue-900/50' : '',
|
|
38
31
|
'transition-all',
|
|
39
|
-
|
|
32
|
+
rest.class
|
|
40
33
|
)}
|
|
41
34
|
>
|
|
42
35
|
{#if sticky}
|
|
43
36
|
<div class={twMerge(first ? 'border-r' : ' border-l ')}>
|
|
44
|
-
|
|
37
|
+
{@render children?.()}
|
|
45
38
|
</div>
|
|
46
39
|
{:else}
|
|
47
|
-
|
|
40
|
+
{@render children?.()}
|
|
48
41
|
{/if}
|
|
49
42
|
</svelte:element>
|
|
@@ -1,37 +1,15 @@
|
|
|
1
|
-
interface
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
1
|
+
interface Props {
|
|
2
|
+
first?: boolean;
|
|
3
|
+
last?: boolean;
|
|
4
|
+
numeric?: boolean;
|
|
5
|
+
head?: boolean;
|
|
6
|
+
shouldStopPropagation?: boolean;
|
|
7
|
+
selected?: boolean;
|
|
8
|
+
sticky?: boolean;
|
|
9
|
+
wrap?: boolean;
|
|
10
|
+
children?: import('svelte').Snippet;
|
|
11
|
+
[key: string]: any;
|
|
13
12
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} ? Props extends Record<string, never> ? any : {
|
|
17
|
-
children?: any;
|
|
18
|
-
} : {});
|
|
19
|
-
declare const Cell: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
|
|
20
|
-
[x: string]: any;
|
|
21
|
-
first?: boolean | undefined;
|
|
22
|
-
last?: boolean | undefined;
|
|
23
|
-
numeric?: boolean | undefined;
|
|
24
|
-
head?: boolean | undefined;
|
|
25
|
-
shouldStopPropagation?: boolean | undefined;
|
|
26
|
-
selected?: boolean | undefined;
|
|
27
|
-
sticky?: boolean | undefined;
|
|
28
|
-
wrap?: boolean | undefined;
|
|
29
|
-
}, {
|
|
30
|
-
default: {};
|
|
31
|
-
}>, {
|
|
32
|
-
[evt: string]: CustomEvent<any>;
|
|
33
|
-
}, {
|
|
34
|
-
default: {};
|
|
35
|
-
}, {}, string>;
|
|
36
|
-
type Cell = InstanceType<typeof Cell>;
|
|
13
|
+
declare const Cell: import("svelte").Component<Props, {}, "">;
|
|
14
|
+
type Cell = ReturnType<typeof Cell>;
|
|
37
15
|
export default Cell;
|