diff --git a/frontend/src/lib/components/AutosaveIndicator.svelte b/frontend/src/lib/components/AutosaveIndicator.svelte
index 42608781fd..46e79382fe 100644
--- a/frontend/src/lib/components/AutosaveIndicator.svelte
+++ b/frontend/src/lib/components/AutosaveIndicator.svelte
@@ -1,6 +1,6 @@
+ {#if hintLabel}
+
+ {#key hintFlashKey}
+
+ {/key}
+ {/if}
{#snippet trigger()}
-
+
{#if syncState === 'saving' || syncState === 'pending'}
{:else}
-
+
{/if}
{/snippet}
@@ -124,6 +212,21 @@
All changes are saved as a draft on the server. The draft is per-user — your teammates'
editors keep their own.
+ {#if othersDraftsCount > 0}
+
+
+ Other users are working on this {kindLabel}.
+
+
+ See others' drafts
+
+
+ {/if}
{#if showResetAction}
{/if}
- {/snippet}
+ {/snippet}
{#if label}
-
{label}
+
{label}
{/if}
-
\ No newline at end of file
+
+
+
diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte
index c3be99558c..2ea61f3c18 100644
--- a/frontend/src/lib/components/FlowBuilder.svelte
+++ b/frontend/src/lib/components/FlowBuilder.svelte
@@ -125,6 +125,9 @@
onHistoryRestore,
onNavigate,
onResetToDeployed,
+ loadedFromDraft = false,
+ othersDraftsCount = 0,
+ onOpenOthersDrafts,
onTestJob
}: FlowBuilderProps = $props()
@@ -1088,6 +1091,9 @@
path={liveEditorDraftStoragePath}
draftOnly={newFlow}
{onResetToDeployed}
+ {loadedFromDraft}
+ {othersDraftsCount}
+ {onOpenOthersDrafts}
/>
{/if}
diff --git a/frontend/src/lib/components/ScriptBuilder.svelte b/frontend/src/lib/components/ScriptBuilder.svelte
index a6c891689a..e042b1fbf2 100644
--- a/frontend/src/lib/components/ScriptBuilder.svelte
+++ b/frontend/src/lib/components/ScriptBuilder.svelte
@@ -130,7 +130,10 @@
disableAi,
initialTestPanelCollapsed = false,
initialPathChosen = false,
- onResetToDeployed
+ onResetToDeployed,
+ loadedFromDraft = false,
+ othersDraftsCount = 0,
+ onOpenOthersDrafts
}: ScriptBuilderProps = $props()
export function getInitialAndModifiedValues(): SavedAndModifiedValue {
@@ -1894,6 +1897,9 @@
path={userDraftPath}
draftOnly={(savedScript as any)?.no_deployed === true}
{onResetToDeployed}
+ {loadedFromDraft}
+ {othersDraftsCount}
+ {onOpenOthersDrafts}
/>
{/if}
diff --git a/frontend/src/lib/components/apps/editor/AppEditor.svelte b/frontend/src/lib/components/apps/editor/AppEditor.svelte
index ce6ac233a2..335126f8ec 100644
--- a/frontend/src/lib/components/apps/editor/AppEditor.svelte
+++ b/frontend/src/lib/components/apps/editor/AppEditor.svelte
@@ -79,7 +79,10 @@
gotoFn = (path: string, opt?: Record