From 9b05d7cbb7092a41a6e7890c55cea7d386d39c33 Mon Sep 17 00:00:00 2001 From: pythongosssss <125205205+pythongosssss@users.noreply.github.com> Date: Mon, 2 Mar 2026 22:46:45 +0000 Subject: [PATCH] App mode output history UX improvements (#9285) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - replace reka ui list with normal elements due to rekas aggressive autoscrolling and event blocking - rework layout to fix in progress items outside scrollable area - extract feedback component - avoid scroll position changing when adding new items - add left/right keyboard navigation ## Screenshots (if applicable) Showing fixed active items at start image ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9285-App-mode-output-history-UX-improvements-3146d73d3650819a9f97edb41db975cc) by [Unito](https://www.unito.io) --- src/components/ui/TypeformPopoverButton.vue | 5 +- .../extensions/linearMode/LinearFeedback.vue | 42 ++++ .../extensions/linearMode/LinearPreview.vue | 33 ++- .../extensions/linearMode/OutputHistory.vue | 198 ++++++++++-------- src/views/LinearView.vue | 31 +-- 5 files changed, 200 insertions(+), 109 deletions(-) create mode 100644 src/renderer/extensions/linearMode/LinearFeedback.vue diff --git a/src/components/ui/TypeformPopoverButton.vue b/src/components/ui/TypeformPopoverButton.vue index 96fa2c24ca..42f8f471bb 100644 --- a/src/components/ui/TypeformPopoverButton.vue +++ b/src/components/ui/TypeformPopoverButton.vue @@ -5,8 +5,9 @@ import { useTemplateRef } from 'vue' import Popover from '@/components/ui/Popover.vue' import Button from '@/components/ui/button/Button.vue' -defineProps<{ +const { active = true } = defineProps<{ dataTfWidget: string + active?: boolean }>() const feedbackRef = useTemplateRef('feedbackRef') @@ -40,6 +41,6 @@ whenever(feedbackRef, () => { -
+
diff --git a/src/renderer/extensions/linearMode/LinearFeedback.vue b/src/renderer/extensions/linearMode/LinearFeedback.vue new file mode 100644 index 0000000000..48e0142b63 --- /dev/null +++ b/src/renderer/extensions/linearMode/LinearFeedback.vue @@ -0,0 +1,42 @@ + + diff --git a/src/renderer/extensions/linearMode/LinearPreview.vue b/src/renderer/extensions/linearMode/LinearPreview.vue index 797c4a5b7e..5db6ab3c54 100644 --- a/src/renderer/extensions/linearMode/LinearPreview.vue +++ b/src/renderer/extensions/linearMode/LinearPreview.vue @@ -14,6 +14,7 @@ import ImagePreview from '@/renderer/extensions/linearMode/ImagePreview.vue' import LatentPreview from '@/renderer/extensions/linearMode/LatentPreview.vue' import LinearWelcome from '@/renderer/extensions/linearMode/LinearWelcome.vue' import LinearArrange from '@/renderer/extensions/linearMode/LinearArrange.vue' +import LinearFeedback from '@/renderer/extensions/linearMode/LinearFeedback.vue' import OutputHistory from '@/renderer/extensions/linearMode/OutputHistory.vue' import type { OutputSelection } from '@/renderer/extensions/linearMode/linearModeTypes' // Lazy-loaded to avoid pulling THREE.js into the main bundle @@ -33,10 +34,11 @@ const commandStore = useCommandStore() const executionStore = useExecutionStore() const mediaActions = useMediaAssetActions() const queueStore = useQueueStore() -const { mode: appModeValue } = useAppMode() -const { runButtonClick } = defineProps<{ +const { isBuilderMode, isArrangeMode } = useAppMode() +const { runButtonClick, mobile, typeformWidgetId } = defineProps<{ runButtonClick?: (e: Event) => void mobile?: boolean + typeformWidgetId?: string }>() const selectedItem = ref() @@ -165,7 +167,30 @@ async function rerun(e: Event) { :model-url="selectedOutput!.url" /> - + - +
+ + + +
+ diff --git a/src/renderer/extensions/linearMode/OutputHistory.vue b/src/renderer/extensions/linearMode/OutputHistory.vue index 999795e5cb..12bea017bf 100644 --- a/src/renderer/extensions/linearMode/OutputHistory.vue +++ b/src/renderer/extensions/linearMode/OutputHistory.vue @@ -1,7 +1,19 @@ diff --git a/src/views/LinearView.vue b/src/views/LinearView.vue index afcab6a2c2..c910960650 100644 --- a/src/views/LinearView.vue +++ b/src/views/LinearView.vue @@ -71,6 +71,8 @@ function sidePanelMinSize(isBuilder: boolean, isHidden: boolean) { return SIDEBAR_MIN_SIZE } +const TYPEFORM_WIDGET_ID = 'gmVqFi8l' + const bottomLeftRef = useTemplateRef('bottomLeftRef') const bottomRightRef = useTemplateRef('bottomRightRef') const linearWorkflowRef = useTemplateRef('linearWorkflowRef') @@ -104,7 +106,10 @@ const linearWorkflowRef = useTemplateRef('linearWorkflowRef')
- +
- +
-
- -
- {{ t('linearMode.beta') }} - {{ t('linearMode.giveFeedback') }} -
-