Join pre/prompt/post for Comfy, stop zero-size generates snapping to a small square, and give the phone library a real closeable preview.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-09-02 20:29:44 -05:00
co-authored by Cursor
parent d471d1bdd6
commit 369eb595d7
11 changed files with 76 additions and 28 deletions
+25 -2
View File
@@ -200,8 +200,23 @@
</template>
</section>
<aside class="glass w-full shrink-0 overflow-y-auto rounded-3xl p-4 sm:p-5 lg:h-full lg:w-[22rem]">
<aside
class="glass overflow-y-auto p-4 sm:p-5"
:class="focused
? 'fixed inset-0 z-[60] rounded-none lg:static lg:z-auto lg:h-full lg:w-[22rem] lg:shrink-0 lg:rounded-3xl'
: 'hidden w-full shrink-0 rounded-3xl lg:block lg:h-full lg:w-[22rem]'"
>
<template v-if="focused">
<div class="mb-3 flex items-center justify-between lg:hidden">
<p class="text-sm text-zinc-400">Preview</p>
<button
type="button"
class="rounded-full border border-white/20 bg-zinc-950 px-3 py-1.5 text-sm text-amber-100"
@click="clearFocus"
>
Close
</button>
</div>
<div class="relative overflow-hidden rounded-2xl bg-zinc-900">
<span v-if="detailsHidden" class="sensitive-glow block aspect-video w-full" />
<video
@@ -494,7 +509,7 @@ const previewVideo = computed(() => {
const previewStillSrc = computed(() => {
if (focused.value?.kind !== 'still' || !focused.value.stillGroup) return ''
const id = focusedPartId.value || focused.value.stillGroup.head.id
return `/api/library/stills/${id}?thumb=1`
return `/api/library/stills/${id}`
})
const focusedParts = computed(() => {
if (focused.value?.kind === 'clip') return focused.value.group?.parts || []
@@ -719,6 +734,13 @@ function clearSelection() {
lastSelectedKey.value = ''
}
function clearFocus() {
focusedKey.value = ''
focusedPartId.value = ''
detailsHidden.value = false
cancelRename()
}
function selectAll() {
selectedKeys.value = entries.value.map(entry => entry.key)
lastSelectedKey.value = selectedKeys.value.at(-1) || ''
@@ -978,6 +1000,7 @@ function onKey(event: KeyboardEvent) {
if (event.key === 'Escape') {
if (pendingDelete.value) pendingDelete.value = null
else if (renaming.value) cancelRename()
else if (focusedKey.value) clearFocus()
else clearSelection()
}
if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'a' && !renaming.value) {