feat: polish bouquet edit flow (chat UI, pencil overlay, prompt tuning)

* feat: add dynamic artwork copy to upload page

* feat: add pencil overlay for partial bouquet edits

* feat: move edit step hints to description card

* feat: add chat-style edit flow and tighten edit image prompts
This commit is contained in:
Chaewon Lee
2026-06-14 15:14:18 +09:00
committed by GitHub
parent b50f57a6d6
commit 10881ded29
6 changed files with 396 additions and 243 deletions

View File

@@ -4,7 +4,11 @@
import { hydrateDevUpload } from '$lib/dev/hydrateUpload.js';
import { getFlowObject, isDevSeeded } from '$lib/flowerFlow/session.js';
let { primaryFile = $bindable(null), caption = 'build their moodboard!', filledCount = $bindable(0), allFilled = $bindable(false) } = $props();
let {
primaryFile = $bindable(null),
uploadedTiles = $bindable(),
caption = 'build their moodboard!'
} = $props();
let colorFile = $state(null);
let seasonFile = $state(null);
@@ -17,9 +21,21 @@
});
$effect(() => {
const count = [colorFile, seasonFile, characterFile, locationFile].filter(Boolean).length;
filledCount = count;
allFilled = count === 4;
const next = {
color: !!colorFile,
season: !!seasonFile,
character: !!characterFile,
location: !!locationFile
};
if (
uploadedTiles?.color !== next.color ||
uploadedTiles?.season !== next.season ||
uploadedTiles?.character !== next.character ||
uploadedTiles?.location !== next.location
) {
uploadedTiles = next;
}
});
onMount(async () => {

View File

@@ -4,7 +4,8 @@
import { hydrateDevUpload } from '$lib/dev/hydrateUpload.js';
import { getFlowObject, isDevSeeded } from '$lib/flowerFlow/session.js';
let { primaryFile = $bindable(null), caption = 'upload their feed!', filledCount = $bindable(0), allFilled = $bindable(false) } = $props();
let { primaryFile = $bindable(null), hasImage = $bindable(), caption = 'upload their feed!' } =
$props();
let firstFile = $state(null);
@@ -14,8 +15,8 @@
});
$effect(() => {
filledCount = firstFile ? 1 : 0;
allFilled = Boolean(firstFile);
const next = !!firstFile;
if (hasImage !== next) hasImage = next;
});
onMount(async () => {