mirror of
https://github.com/nexu-io/open-design.git
synced 2026-09-20 06:15:06 +08:00
265aa51630
* feat(web): make Studio discovery visual and inline Move clarification forms into the chat flow, add artifact-aware visual style choices, and keep follow-up actions hidden until discovery is complete. * feat(web): keep clarification entirely in chat Remove the legacy Questions workspace tab, preserve discovery analytics in the inline form, and keep Skip, Submit, and answered summaries in one conversation flow. * docs: split Studio Chat input and response work Frame visual discovery as the input-side initiative and record response aggregation as a separately reviewed follow-up so the current PR stays bounded. * docs: reorganize Studio Chat experience plans Separate the overall journey, visual discovery, and response architecture so each scope can be reviewed and delivered independently. * docs: define first-artifact satisfaction prompt Limit the feedback prompt to the first successful previewable artifact so it gathers a useful signal without interrupting every iteration. * docs: keep Studio Chat plans independent Preserve the existing discovery proposal as one document and keep response architecture as a separate review surface without an extra master layer. * fix(web): preserve inline discovery behavior Keep visual direction single-select while restoring custom input, optional auto-continue, analytics, and current end-to-end coverage for the inline flow. * fix(web): preserve files when skipping discovery step * fix(web): exclude skipped file answers * fix(web): align inline discovery with slim prompt Preserve the latest discovery contract while keeping inline forms, uploads, drafts, and schema-driven visual selections consistent after the rebase. * feat(web): add style catalog preview images * fix(web): clarify discovery form completion * fix(web): preserve question form context * fix(web): time out unanswered question forms * test(web): cover inline question form next steps * fix(web): roll back partial inline uploads * ci: trigger validation after rebase * fix(web): unlock blocked inline question submits * fix(web): retain previewless visual answers * fix(web): load visual style previews from R2 * fix(web): clean blocked inline uploads * test(web): expect R2 style preview assets * feat(web): show full visual style catalog * fix(web): keep inline question answers consistent --------- Co-authored-by: xiaoche-hub <298951296+xiaoche-hub@users.noreply.github.com>
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import { playwrightUiScenarios } from '../../resources/playwright.ts';
|
|
|
|
export type ScenarioKind = 'prototype' | 'deck' | 'hyperframes' | 'image' | 'audio' | 'template' | 'workspace';
|
|
|
|
export interface MockArtifactScenario {
|
|
identifier: string;
|
|
title: string;
|
|
html: string;
|
|
fileName: string;
|
|
heading: string;
|
|
}
|
|
|
|
export interface ExpectedScenarioFile {
|
|
kind?: string;
|
|
name: string;
|
|
previewText?: string;
|
|
}
|
|
|
|
export interface UiScenario {
|
|
id: string;
|
|
title: string;
|
|
kind: ScenarioKind;
|
|
flow?:
|
|
| 'standard'
|
|
| 'design-system-selection'
|
|
| 'example-use-prompt'
|
|
| 'conversation-persistence'
|
|
| 'file-mention'
|
|
| 'deep-link-preview'
|
|
| 'file-upload-send'
|
|
| 'design-files-upload'
|
|
| 'design-files-delete'
|
|
| 'design-files-tab-persistence'
|
|
| 'conversation-delete-recovery'
|
|
| 'question-form-single-selection'
|
|
| 'question-form-submit-persistence'
|
|
| 'generation-does-not-create-extra-file'
|
|
| 'comment-attachment-flow'
|
|
| 'deck-pagination-next-prev-correctness'
|
|
| 'deck-pagination-per-file-isolated'
|
|
| 'uploaded-image-renders-in-preview'
|
|
| 'python-source-preview'
|
|
| 'hyperframes-project-routing'
|
|
| 'image-project-routing'
|
|
| 'video-project-routing'
|
|
| 'audio-project-routing'
|
|
| 'live-artifact-project-routing'
|
|
| 'plugin-create-import';
|
|
automated: boolean;
|
|
description: string;
|
|
create: {
|
|
projectName: string;
|
|
tab?: 'prototype' | 'live-artifact' | 'deck' | 'template' | 'media' | 'other';
|
|
mediaSurface?: 'image' | 'video' | 'audio';
|
|
videoModel?: string;
|
|
audioKind?: 'speech' | 'sfx';
|
|
};
|
|
prompt: string;
|
|
secondaryPrompt?: string;
|
|
mockArtifact?: MockArtifactScenario;
|
|
expectedProjectMetadata?: Record<string, unknown>;
|
|
expectedRunRequest?: Record<string, unknown>;
|
|
expectedFiles?: ExpectedScenarioFile[];
|
|
expectedPreviewText?: string;
|
|
notes?: string[];
|
|
}
|
|
|
|
export function automatedUiScenarios(): UiScenario[] {
|
|
return playwrightUiScenarios.filter((scenario) => scenario.automated);
|
|
}
|