diff --git a/src/components/common/DropdownItem.vue b/src/components/common/DropdownItem.vue index 0ed17b2106..fde69ff272 100644 --- a/src/components/common/DropdownItem.vue +++ b/src/components/common/DropdownItem.vue @@ -54,11 +54,12 @@ defineProps<{ itemClass: string; contentClass: string; item: MenuItem }>() :disabled="toValue(item.disabled) ?? !item.command" @select="item.command?.({ originalEvent: $event, item })" > - - {{ item.label }} + +
+
diff --git a/src/components/common/DropdownMenu.vue b/src/components/common/DropdownMenu.vue index 880a7c4798..f409ba2371 100644 --- a/src/components/common/DropdownMenu.vue +++ b/src/components/common/DropdownMenu.vue @@ -27,7 +27,7 @@ const { itemClass: itemProp, contentClass: contentProp } = defineProps<{ const itemClass = computed(() => cn( - 'm-1 flex cursor-pointer gap-1 rounded-lg p-2 leading-none data-disabled:pointer-events-none data-disabled:text-muted-foreground data-highlighted:bg-secondary-background-hover', + 'm-1 flex cursor-pointer items-center-safe gap-1 rounded-lg p-2 leading-none data-disabled:pointer-events-none data-disabled:text-muted-foreground data-highlighted:bg-secondary-background-hover', itemProp ) ) diff --git a/src/components/common/ScrubableNumberInput.vue b/src/components/common/ScrubableNumberInput.vue index b8a39ecf05..59600507eb 100644 --- a/src/components/common/ScrubableNumberInput.vue +++ b/src/components/common/ScrubableNumberInput.vue @@ -33,19 +33,20 @@ spellcheck="false" @blur="handleBlur" @keyup.enter="handleBlur" - @dragstart.prevent + @keydown.up.prevent="updateValueBy(step)" + @keydown.down.prevent="updateValueBy(-step)" + @keydown.page-up.prevent="updateValueBy(10 * step)" + @keydown.page-down.prevent="updateValueBy(-10 * step)" />
@@ -65,7 +66,7 @@ diff --git a/src/components/ui/button/button.variants.ts b/src/components/ui/button/button.variants.ts index fbf8c42334..ba7101855c 100644 --- a/src/components/ui/button/button.variants.ts +++ b/src/components/ui/button/button.variants.ts @@ -2,7 +2,7 @@ import type { VariantProps } from 'cva' import { cva } from 'cva' export const buttonVariants = cva({ - base: 'relative inline-flex items-center justify-center gap-2 cursor-pointer whitespace-nowrap appearance-none border-none rounded-md text-sm font-medium font-inter transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([width]):not([height])]:size-4 [&_svg]:shrink-0', + base: 'relative inline-flex items-center justify-center gap-2 cursor-pointer touch-manipulation whitespace-nowrap appearance-none border-none rounded-md text-sm font-medium font-inter transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([width]):not([height])]:size-4 [&_svg]:shrink-0', variants: { variant: { secondary: diff --git a/src/locales/en/main.json b/src/locales/en/main.json index 8dd9548992..a0d8ad442a 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -3181,6 +3181,7 @@ "deleteAllAssets": "Delete all assets from this run", "hasCreditCost": "Requires additional credits", "viewGraph": "View node graph", + "mobileNoWorkflow": "This workflow hasn't been built for app mode. Try a different one.", "welcome": { "title": "App Mode", "message": "A simplified view that hides the node graph so you can focus on creating.", diff --git a/src/renderer/extensions/linearMode/LinearControls.vue b/src/renderer/extensions/linearMode/LinearControls.vue index 1b235ff51b..8b550a0ef9 100644 --- a/src/renderer/extensions/linearMode/LinearControls.vue +++ b/src/renderer/extensions/linearMode/LinearControls.vue @@ -120,7 +120,7 @@ function getDropIndicator(node: LGraphNode) { return { iconClass: 'icon-[lucide--image]', imageUrl: buildImageUrl(), - label: t('linearMode.dragAndDropImage'), + label: props.mobile ? undefined : t('linearMode.dragAndDropImage'), onClick: () => node.widgets?.[1]?.callback?.(undefined) } } @@ -206,14 +206,14 @@ defineExpose({ runButtonClick }) diff --git a/src/renderer/extensions/linearMode/MobileDisplay.vue b/src/renderer/extensions/linearMode/MobileDisplay.vue index 87b6695229..18cf232078 100644 --- a/src/renderer/extensions/linearMode/MobileDisplay.vue +++ b/src/renderer/extensions/linearMode/MobileDisplay.vue @@ -8,7 +8,6 @@ import DropdownMenu from '@/components/common/DropdownMenu.vue' import AssetsSidebarTab from '@/components/sidebar/tabs/AssetsSidebarTab.vue' import CurrentUserButton from '@/components/topbar/CurrentUserButton.vue' import Button from '@/components/ui/button/Button.vue' -import Popover from '@/components/ui/Popover.vue' import { useCurrentUser } from '@/composables/auth/useCurrentUser' import { useWorkflowService } from '@/platform/workflow/core/services/workflowService' import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' @@ -76,13 +75,16 @@ function onClick(index: number) { } const workflowsEntries = computed(() => { - return workflowStore.openWorkflows.map((w) => ({ - label: w.filename, - icon: w.activeState?.extra?.linearMode - ? 'icon-[lucide--panels-top-left] bg-primary-background' - : undefined, - command: () => workflowService.openWorkflow(w) - })) + return [ + ...workflowStore.openWorkflows.map((w) => ({ + label: w.filename, + icon: w.activeState?.extra?.linearMode + ? 'icon-[lucide--panels-top-left] bg-primary-background' + : undefined, + command: () => workflowService.openWorkflow(w), + checked: workflowStore.activeWorkflow === w + })) + ] }) const menuEntries = computed(() => [ @@ -157,9 +159,9 @@ const menuEntries = computed(() => [ class="flex h-16 w-full items-center gap-3 border-b border-border-subtle bg-base-background px-4 py-3" > - - +
diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue index 3728e78f9b..08e61a2ea2 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue @@ -121,12 +121,6 @@ const buttonsDisabled = computed(() => { ) }) -function updateValueBy(delta: number) { - const max = filteredProps.value.max ?? Number.MAX_VALUE - const min = filteredProps.value.min ?? -Number.MAX_VALUE - modelValue.value = Math.min(max, Math.max(min, modelValue.value + delta)) -} - const buttonTooltip = computed(() => { if (buttonsDisabled.value) { return 'Increment/decrement disabled: value exceeds JavaScript precision limit (±2^53)' @@ -171,10 +165,6 @@ const inputAriaAttrs = computed(() => ({ :parse-value="parseWidgetValue" :input-attrs="inputAriaAttrs" :class="cn(WidgetInputBaseClass, 'relative flex h-7 grow text-xs')" - @keydown.up.prevent="updateValueBy(stepValue)" - @keydown.down.prevent="updateValueBy(-stepValue)" - @keydown.page-up.prevent="updateValueBy(10 * stepValue)" - @keydown.page-down.prevent="updateValueBy(-10 * stepValue)" >