fix: Model upload UI improvements (#7938)

## Summary

Polishing improvements for the model upload (BYOM) experience.

## Changes

- **HoneyToast z-index**: Increased from `z-50` to `z-9999` so the
ModelImportProgressDialog appears above modal backdrops
- **VideoHelpDialog**: Removed pixel-based max-width constraint, now
uses `90vw` to fill more of the viewport
- **UploadModelDialog responsive layout**: Added `max-height: 90vh` and
scrollable content area to prevent footer buttons from underflowing on
small screens
- **URL validity indicator**: Added green checkmark icon inside the URL
input when a valid Civitai or HuggingFace URL is entered

## Testing

- Open the model upload dialog and verify buttons remain accessible on
small viewport heights
- Enter a valid Civitai/HuggingFace URL and confirm the green checkmark
appears
- Open the help video and verify it uses more of the viewport
- Start a model download and verify the progress toast appears above any
open modals

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7938-fix-Model-upload-UI-improvements-2e46d73d365081a292f5fda70c6db0f5)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This commit is contained in:
Alexander Brown
2026-01-09 19:25:34 -08:00
committed by GitHub
parent c8e181c841
commit 4b095f3701
8 changed files with 110 additions and 66 deletions

View File

@@ -104,10 +104,10 @@ function closeDialog() {
</Button>
<Popover
ref="filterPopoverRef"
append-to="body"
:dismissable="true"
:close-on-escape="true"
unstyled
:base-z-index="9999"
:pt="{
root: { class: 'absolute z-50' },
content: {
@@ -171,22 +171,24 @@ function closeDialog() {
<template #footer="{ toggle }">
<div
class="flex h-12 items-center justify-between border-t border-border-default px-4"
class="flex h-12 items-center justify-between gap-2 border-t border-border-default px-4"
>
<div class="flex items-center gap-2 text-sm">
<div class="flex min-w-0 flex-1 items-center gap-2 text-sm">
<template v-if="isInProgress">
<i
class="icon-[lucide--loader-circle] size-4 animate-spin text-muted-foreground"
class="icon-[lucide--loader-circle] size-4 flex-shrink-0 animate-spin text-muted-foreground"
/>
<span class="font-bold text-base-foreground">{{
currentJobName
}}</span>
<span
class="min-w-0 flex-1 truncate font-bold text-base-foreground"
>
{{ currentJobName }}
</span>
</template>
<template v-else-if="failedJobs.length > 0">
<i
class="icon-[lucide--circle-alert] size-4 text-destructive-background"
class="icon-[lucide--circle-alert] size-4 flex-shrink-0 text-destructive-background"
/>
<span class="font-bold text-base-foreground">
<span class="min-w-0 truncate font-bold text-base-foreground">
{{
t('progressToast.downloadsFailed', {
count: failedJobs.length
@@ -195,15 +197,20 @@ function closeDialog() {
</span>
</template>
<template v-else>
<i class="icon-[lucide--check-circle] size-4 text-jade-600" />
<span class="font-bold text-base-foreground">
<i
class="icon-[lucide--check-circle] size-4 flex-shrink-0 text-jade-600"
/>
<span class="min-w-0 truncate font-bold text-base-foreground">
{{ t('progressToast.allDownloadsCompleted') }}
</span>
</template>
</div>
<div class="flex items-center gap-2">
<span v-if="isInProgress" class="text-sm text-muted-foreground">
<div class="flex flex-shrink-0 items-center gap-2">
<span
v-if="isInProgress"
class="whitespace-nowrap text-sm text-muted-foreground"
>
{{
t('progressToast.progressCount', {
completed: completedCount,