diff --git a/frontend/src/lib/assets/app.css b/frontend/src/lib/assets/app.css
index 6a386c559d..2787103d5b 100644
--- a/frontend/src/lib/assets/app.css
+++ b/frontend/src/lib/assets/app.css
@@ -4,10 +4,21 @@
@tailwind utilities;
@layer base {
- *,
- ::before,
- ::after {
- @apply dark:border-gray-600;
+
+ /* Light mode: default border color */
+ .border, .border-t, .border-r, .border-b, .border-l,
+ .border-x, .border-y,
+ .divide-x > :not([hidden]) ~ :not([hidden]),
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
+ border-color: #e5e7eb; /* gray-200 */
+ }
+
+ /* Dark mode: change border color */
+ .dark .border, .dark .border-t, .dark .border-r, .dark .border-b, .dark .border-l,
+ .dark .border-x, .dark .border-y,
+ .dark .divide-x > :not([hidden]) ~ :not([hidden]),
+ .dark .divide-y > :not([hidden]) ~ :not([hidden]) {
+ border-color: #4b5563; /* gray-700 */
}
/* Chrome, Edge, and Safari */
@@ -82,6 +93,18 @@
}
}
+.driver-popover-title {
+ @apply leading-6 !text-primary !text-base;
+}
+
+.driver-popover-description {
+ @apply !text-secondary !text-sm;
+}
+
+.driver-popover {
+ @apply p-6 !bg-surface !max-w-2xl;
+}
+
.splitpanes--vertical > .splitpanes__pane {
transition: none !important;
}
@@ -165,3 +188,4 @@ svelte-virtual-list-contents > * + * {
rgba(0, 0, 192, 0.6) 20px
);
}
+
diff --git a/frontend/src/lib/components/FlowBuilderTutorials.svelte b/frontend/src/lib/components/FlowBuilderTutorials.svelte
index 3f483a4ff9..f482081157 100644
--- a/frontend/src/lib/components/FlowBuilderTutorials.svelte
+++ b/frontend/src/lib/components/FlowBuilderTutorials.svelte
@@ -81,17 +81,3 @@
You need to create a new flow before starting the tutorial.
-
-
diff --git a/frontend/src/lib/components/FlowHistoryJobPicker.svelte b/frontend/src/lib/components/FlowHistoryJobPicker.svelte
index 5a9a661a74..293a4af24c 100644
--- a/frontend/src/lib/components/FlowHistoryJobPicker.svelte
+++ b/frontend/src/lib/components/FlowHistoryJobPicker.svelte
@@ -8,6 +8,7 @@
export let path: string
export let selected: string | undefined = undefined
+ export let selectInitial: boolean = false
const dispatch = createEventDispatcher()
async function loadInitial() {
@@ -19,7 +20,9 @@
perPage: 1
})
if (jobs.length > 0) {
- dispatch('select', { jobId: jobs[0].id, initial: true })
+ if (selectInitial) {
+ dispatch('select', { jobId: jobs[0].id, initial: true })
+ }
} else {
dispatch('nohistory')
}
diff --git a/frontend/src/lib/components/FlowPreviewContent.svelte b/frontend/src/lib/components/FlowPreviewContent.svelte
index 448e6e89b4..5829d4c8a3 100644
--- a/frontend/src/lib/components/FlowPreviewContent.svelte
+++ b/frontend/src/lib/components/FlowPreviewContent.svelte
@@ -26,12 +26,18 @@
export let jobId: string | undefined = undefined
export let job: Job | undefined = undefined
- let selectedJobStep: string | undefined = undefined
- let branchOrIterationN: number = 0
- let restartBranchNames: [number, string][] = []
+ export let initial: boolean = false
- let selectedJobStepIsTopLevel: boolean | undefined = undefined
- let selectedJobStepType: 'single' | 'forloop' | 'branchall' = 'single'
+ export let selectedJobStep: string | undefined = undefined
+ export let selectedJobStepIsTopLevel: boolean | undefined = undefined
+ export let selectedJobStepType: 'single' | 'forloop' | 'branchall' = 'single'
+ export let rightColumnSelect: 'timeline' | 'node_status' | 'node_definition' | 'user_states' =
+ 'timeline'
+
+ export let branchOrIterationN: number = 0
+ export let scrollTop: number = 0
+
+ let restartBranchNames: [number, string][] = []
let isRunning: boolean = false
let jobProgressReset: () => void
@@ -59,7 +65,6 @@
const dispatch = createEventDispatcher()
let renderCount: number = 0
- let initial: boolean = false
let schemaFormWithArgPicker: SchemaFormWithArgPicker | undefined = undefined
let currentJobId: string | undefined = undefined
@@ -210,6 +215,19 @@
}
})
}
+
+ let scrollableDiv: HTMLDivElement | undefined = undefined
+ function handleScroll() {
+ scrollTop = scrollableDiv?.scrollTop ?? 0
+ }
+
+ $: scrollableDiv && onScrollableDivChange()
+
+ function onScrollableDivChange() {
+ if (scrollTop != 0 && scrollableDiv) {
+ scrollableDiv.scrollTop = scrollTop
+ }
+ }