@chai-ui/react 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +6 -1
- package/README.md +69 -6
- package/dist/Composer.d.ts +19 -2
- package/dist/Composer.d.ts.map +1 -1
- package/dist/Composer.js +36 -10
- package/dist/Composer.js.map +1 -1
- package/dist/EditCard.d.ts +52 -0
- package/dist/EditCard.d.ts.map +1 -0
- package/dist/EditCard.js +360 -0
- package/dist/EditCard.js.map +1 -0
- package/dist/ResultCard.d.ts +2 -1
- package/dist/ResultCard.d.ts.map +1 -1
- package/dist/ResultCard.js +19 -63
- package/dist/ResultCard.js.map +1 -1
- package/dist/icons.d.ts +27 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +50 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/media-actions.d.ts +15 -0
- package/dist/media-actions.d.ts.map +1 -0
- package/dist/media-actions.js +47 -0
- package/dist/media-actions.js.map +1 -0
- package/dist/page-slide.d.ts +32 -0
- package/dist/page-slide.d.ts.map +1 -0
- package/dist/page-slide.js +43 -0
- package/dist/page-slide.js.map +1 -0
- package/dist/primitives/Pagination.d.ts +3 -1
- package/dist/primitives/Pagination.d.ts.map +1 -1
- package/dist/primitives/Pagination.js +2 -2
- package/dist/primitives/Pagination.js.map +1 -1
- package/dist/regions.d.ts +3 -0
- package/dist/regions.d.ts.map +1 -0
- package/dist/regions.js +7 -0
- package/dist/regions.js.map +1 -0
- package/dist/style.css +508 -82
- package/dist/useComposer.d.ts +22 -1
- package/dist/useComposer.d.ts.map +1 -1
- package/dist/useComposer.js +126 -24
- package/dist/useComposer.js.map +1 -1
- package/package.json +3 -3
- package/src/Composer.tsx +101 -13
- package/src/EditCard.tsx +688 -0
- package/src/ResultCard.tsx +60 -125
- package/src/icons.tsx +115 -0
- package/src/index.ts +8 -0
- package/src/media-actions.ts +45 -0
- package/src/page-slide.tsx +82 -0
- package/src/primitives/Pagination.tsx +4 -2
- package/src/regions.ts +7 -0
- package/src/style.css +508 -82
- package/src/useComposer.ts +147 -18
package/dist/useComposer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
2
|
-
import { createMockEngine, createRun, deriveGenerationUseCase, cancelResult, failResult, isAbortError, mockEngine, normalizeGenerationError, resolveResult, routeModel, startResult, streamResult, } from "@chai-ui/core";
|
|
2
|
+
import { buildRegionEditPrompt, createMockEngine, createRun, deriveGenerationUseCase, cancelResult, failResult, isAbortError, mockEngine, normalizeGenerationError, PRECISE_EDIT_MODELS, resolveResult, routeModel, ROUTING_MODEL_ID, startResult, streamResult, } from "@chai-ui/core";
|
|
3
3
|
import { reasoningModelFor, useReasoning } from "./ChaiProvider.js";
|
|
4
4
|
import { useLatest } from "./use-latest.js";
|
|
5
5
|
/** A result's `modelId` when nothing was picked: the engine runs its own default model. */
|
|
@@ -26,6 +26,34 @@ export function useComposer(options = {}) {
|
|
|
26
26
|
const [runs, setRuns] = useState([]);
|
|
27
27
|
const [enhancing, setEnhancing] = useState(false);
|
|
28
28
|
const [routing, setRouting] = useState(false);
|
|
29
|
+
// Edit mode. Each edit's runs are kept (not replaced by the next submit),
|
|
30
|
+
// since every result is a version of the image the person can page back to.
|
|
31
|
+
const editImage = options.editImage?.kind === "image" ? options.editImage : null;
|
|
32
|
+
const [editRuns, setEditRuns] = useState([]);
|
|
33
|
+
const [regions, setRegions] = useState([]);
|
|
34
|
+
const [activeVersion, setActiveVersion] = useState(0);
|
|
35
|
+
// Another image starts over. Reset while rendering, not in an effect (the rules of React).
|
|
36
|
+
const [editSource, setEditSource] = useState(editImage?.src ?? null);
|
|
37
|
+
if ((editImage?.src ?? null) !== editSource) {
|
|
38
|
+
setEditSource(editImage?.src ?? null);
|
|
39
|
+
setEditRuns([]);
|
|
40
|
+
setRegions([]);
|
|
41
|
+
setActiveVersion(0);
|
|
42
|
+
}
|
|
43
|
+
const versions = useMemo(() => editImage
|
|
44
|
+
? [
|
|
45
|
+
{ id: "original", src: editImage.src, status: "done", regions: [] },
|
|
46
|
+
...editRuns.flatMap((run) => run.results.map((r) => ({
|
|
47
|
+
id: r.id,
|
|
48
|
+
src: r.output?.src,
|
|
49
|
+
from: run.request.attachments[0]?.src,
|
|
50
|
+
status: r.status,
|
|
51
|
+
regions: run.request.params.regions ?? [],
|
|
52
|
+
error: r.error?.message,
|
|
53
|
+
}))),
|
|
54
|
+
]
|
|
55
|
+
: [], [editImage, editRuns]);
|
|
56
|
+
const editRef = useLatest({ versions, activeVersion, editRuns });
|
|
29
57
|
// Each submit gets an id, so routing that settles after a newer submit is dropped.
|
|
30
58
|
const submitId = useRef(0);
|
|
31
59
|
// Aborts the current submit's engine calls: on `cancel()`, and when a newer
|
|
@@ -45,40 +73,83 @@ export function useComposer(options = {}) {
|
|
|
45
73
|
: undefined
|
|
46
74
|
: provided, [reasoningEngine, reasoningModel, provided]);
|
|
47
75
|
const reasoningRef = useLatest(reasoning);
|
|
48
|
-
|
|
76
|
+
// One request per selection. An edit runs on the image version showing
|
|
77
|
+
// in the EditCard (the original until an edit lands) and carries its regions.
|
|
78
|
+
const buildRequest = useCallback((payload, selection) => {
|
|
49
79
|
const opts = optionsRef.current;
|
|
50
80
|
const reasoning = reasoningRef.current;
|
|
81
|
+
const isText = selection.useCase.kind === "text";
|
|
82
|
+
const isEdit = Boolean(selection.useCase.edit && opts.editImage?.kind === "image");
|
|
83
|
+
const { versions, activeVersion } = editRef.current;
|
|
84
|
+
const shown = versions[activeVersion];
|
|
85
|
+
const editFrom = shown?.status === "done" && shown.src ? shown.src : opts.editImage?.src;
|
|
86
|
+
const attachments = isEdit && editFrom ? [{ src: editFrom, kind: "image" }] : payload.attachments;
|
|
87
|
+
// Nothing picked: text uses the builder's text model when there is
|
|
88
|
+
// one; otherwise the engine runs its own default. Never a silent no-op.
|
|
89
|
+
const fallback = isText ? (opts.textModel ?? (reasoning && reasoningModelFor(reasoning, attachments))) : undefined;
|
|
90
|
+
const params = payload.aspectRatio && !isEdit ? { aspectRatio: payload.aspectRatio } : {};
|
|
91
|
+
if (isEdit)
|
|
92
|
+
params.regions = payload.regions ?? [];
|
|
93
|
+
const request = {
|
|
94
|
+
mode: deriveGenerationUseCase(selection.useCase, attachments),
|
|
95
|
+
prompt: payload.value,
|
|
96
|
+
attachments,
|
|
97
|
+
modelIds: selection.modelIds.length > 0 ? selection.modelIds : [fallback ?? DEFAULT_MODEL_ID],
|
|
98
|
+
params,
|
|
99
|
+
};
|
|
100
|
+
const engine = isText
|
|
101
|
+
? (opts.textEngine ?? reasoning?.engine ?? mockTextEngine)
|
|
102
|
+
: (opts.engineByKind?.[selection.useCase.kind] ?? opts.engine ?? mockEngine);
|
|
103
|
+
return { request, engine, isEdit };
|
|
104
|
+
}, [optionsRef, reasoningRef, editRef]);
|
|
105
|
+
// Edit placeholders from routing waits, dropped from the history when the
|
|
106
|
+
// next real runs start (including ones a newer submit abandoned).
|
|
107
|
+
const placeholderIds = useRef(new Set());
|
|
108
|
+
const start = useCallback((payload, signal) => {
|
|
109
|
+
const opts = optionsRef.current;
|
|
51
110
|
const newRuns = payload.selections.map((selection) => {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
// one; otherwise the engine runs its own default. Never a silent no-op.
|
|
55
|
-
const fallback = isText ? (opts.textModel ?? (reasoning && reasoningModelFor(reasoning, payload.attachments))) : undefined;
|
|
56
|
-
const request = {
|
|
57
|
-
mode: deriveGenerationUseCase(selection.useCase, payload.attachments),
|
|
58
|
-
prompt: payload.value,
|
|
59
|
-
attachments: payload.attachments,
|
|
60
|
-
modelIds: selection.modelIds.length > 0 ? selection.modelIds : [fallback ?? DEFAULT_MODEL_ID],
|
|
61
|
-
params: payload.aspectRatio ? { aspectRatio: payload.aspectRatio } : {},
|
|
62
|
-
};
|
|
63
|
-
const engine = isText
|
|
64
|
-
? (opts.textEngine ?? reasoning?.engine ?? mockTextEngine)
|
|
65
|
-
: (opts.engineByKind?.[selection.useCase.kind] ?? opts.engine ?? mockEngine);
|
|
66
|
-
return { run: createRun(request), engine };
|
|
111
|
+
const { request, engine, isEdit } = buildRequest(payload, selection);
|
|
112
|
+
return { run: createRun(request), engine, isEdit, models: selection.models ?? [] };
|
|
67
113
|
});
|
|
68
114
|
setRuns(newRuns.map((r) => r.run));
|
|
115
|
+
const newEditRuns = newRuns.filter((r) => r.isEdit).map((r) => r.run);
|
|
116
|
+
const placeholders = placeholderIds.current;
|
|
117
|
+
const kept = editRef.current.editRuns.filter((r) => !placeholders.has(r.id));
|
|
118
|
+
if (newEditRuns.length > 0) {
|
|
119
|
+
// Show the first new version, and start the next edit with no regions:
|
|
120
|
+
// these ones now belong to the versions they made.
|
|
121
|
+
setEditRuns([...kept, ...newEditRuns]);
|
|
122
|
+
setActiveVersion(1 + kept.reduce((n, r) => n + r.results.length, 0));
|
|
123
|
+
setRegions([]);
|
|
124
|
+
}
|
|
125
|
+
else if (placeholders.size > 0) {
|
|
126
|
+
setEditRuns(kept);
|
|
127
|
+
}
|
|
128
|
+
placeholderIds.current = new Set();
|
|
69
129
|
// Results settle independently and out of order — each update only
|
|
70
130
|
// ever touches its own run, and only if that run is still current. A
|
|
71
131
|
// run from an earlier submit is no longer in state (and its calls were
|
|
72
132
|
// aborted), so a late result can't clobber the newer ones.
|
|
73
|
-
const update = (runId, fn) =>
|
|
74
|
-
|
|
133
|
+
const update = (runId, fn) => {
|
|
134
|
+
const apply = (prev) => (prev.some((r) => r.id === runId) ? prev.map((r) => (r.id === runId ? fn(r) : r)) : prev);
|
|
135
|
+
setRuns(apply);
|
|
136
|
+
setEditRuns(apply);
|
|
137
|
+
};
|
|
138
|
+
for (const { run: newRun, engine, isEdit, models } of newRuns) {
|
|
75
139
|
opts.onRun?.(newRun);
|
|
76
140
|
for (const result of newRun.results) {
|
|
77
141
|
update(newRun.id, (r) => startResult(r, result.id));
|
|
142
|
+
// An edit's prompt depends on the model: one with box support gets
|
|
143
|
+
// boxes, any other gets the regions described in words.
|
|
144
|
+
const regions = newRun.request.params.regions ?? [];
|
|
145
|
+
const model = models.find((m) => m.id === result.modelId) ?? PRECISE_EDIT_MODELS.find((m) => m.id === result.modelId);
|
|
146
|
+
const prompt = isEdit
|
|
147
|
+
? (opts.editPrompt ?? defaultEditPrompt)({ prompt: newRun.request.prompt, regions, model })
|
|
148
|
+
: newRun.request.prompt;
|
|
78
149
|
void engine
|
|
79
150
|
.generate({
|
|
80
151
|
modelId: result.modelId === DEFAULT_MODEL_ID ? undefined : result.modelId,
|
|
81
|
-
prompt
|
|
152
|
+
prompt,
|
|
82
153
|
attachments: newRun.request.attachments,
|
|
83
154
|
// Text engines that stream fill `output` in while still "running".
|
|
84
155
|
onText: (text) => update(newRun.id, (r) => streamResult(r, result.id, text)),
|
|
@@ -95,7 +166,7 @@ export function useComposer(options = {}) {
|
|
|
95
166
|
});
|
|
96
167
|
}
|
|
97
168
|
}
|
|
98
|
-
}, [optionsRef,
|
|
169
|
+
}, [optionsRef, buildRequest, editRef]);
|
|
99
170
|
const submit = useCallback((payload) => {
|
|
100
171
|
const id = ++submitId.current;
|
|
101
172
|
controller.current?.abort();
|
|
@@ -111,6 +182,22 @@ export function useComposer(options = {}) {
|
|
|
111
182
|
if (!reasoning)
|
|
112
183
|
warnNoReasoningOnce();
|
|
113
184
|
setRouting(true);
|
|
185
|
+
// Runs exist from the moment of submit, so a result card shows progress
|
|
186
|
+
// while the reasoning model chooses. Their results read "Choosing model".
|
|
187
|
+
const placeholders = payload.selections.map((sel) => {
|
|
188
|
+
const { request, isEdit } = buildRequest(payload, sel);
|
|
189
|
+
const modelIds = sel.models.length > 0 ? [ROUTING_MODEL_ID] : request.modelIds;
|
|
190
|
+
return { run: createRun({ ...request, modelIds }), isEdit };
|
|
191
|
+
});
|
|
192
|
+
setRuns(placeholders.map((p) => p.run));
|
|
193
|
+
const editPlaceholders = placeholders.filter((p) => p.isEdit).map((p) => p.run);
|
|
194
|
+
if (editPlaceholders.length > 0) {
|
|
195
|
+
const editRuns = editRef.current.editRuns.filter((r) => !placeholderIds.current.has(r.id));
|
|
196
|
+
for (const r of editPlaceholders)
|
|
197
|
+
placeholderIds.current.add(r.id);
|
|
198
|
+
setEditRuns([...editRuns, ...editPlaceholders]);
|
|
199
|
+
setActiveVersion(1 + editRuns.reduce((n, r) => n + r.results.length, 0));
|
|
200
|
+
}
|
|
114
201
|
void Promise.all(payload.selections.map((sel) => sel.models.length === 0
|
|
115
202
|
? Promise.resolve(null)
|
|
116
203
|
: routeModel({
|
|
@@ -145,7 +232,7 @@ export function useComposer(options = {}) {
|
|
|
145
232
|
})),
|
|
146
233
|
}, signal);
|
|
147
234
|
});
|
|
148
|
-
}, [start, optionsRef, reasoningRef]);
|
|
235
|
+
}, [start, buildRequest, optionsRef, reasoningRef, editRef]);
|
|
149
236
|
/**
|
|
150
237
|
* Stops the current submit: wire it to Composer's `onAbort`. Its
|
|
151
238
|
* unfinished results turn `"cancelled"` right away, and each engine
|
|
@@ -157,7 +244,9 @@ export function useComposer(options = {}) {
|
|
|
157
244
|
controller.current?.abort();
|
|
158
245
|
controller.current = null;
|
|
159
246
|
setRouting(false);
|
|
160
|
-
|
|
247
|
+
const cancelAll = (prev) => prev.map((run) => run.results.reduce((acc, r) => cancelResult(acc, r.id), run));
|
|
248
|
+
setRuns(cancelAll);
|
|
249
|
+
setEditRuns(cancelAll);
|
|
161
250
|
}, []);
|
|
162
251
|
const run = runs[0] ?? null;
|
|
163
252
|
// `undefined` (not a no-op function) when unconfigured, so a consumer
|
|
@@ -179,7 +268,20 @@ export function useComposer(options = {}) {
|
|
|
179
268
|
}
|
|
180
269
|
};
|
|
181
270
|
}, [reasoning, options.enhancePrompt, run?.request.mode]);
|
|
182
|
-
|
|
271
|
+
/** Props for an `EditCard` (spread them in), and `regions` for `Composer`. `null` when there's no `editImage`. */
|
|
272
|
+
const edit = editImage
|
|
273
|
+
? {
|
|
274
|
+
versions,
|
|
275
|
+
activeVersion: Math.min(activeVersion, versions.length - 1),
|
|
276
|
+
onActiveVersionChange: setActiveVersion,
|
|
277
|
+
regions,
|
|
278
|
+
onRegionsChange: setRegions,
|
|
279
|
+
}
|
|
280
|
+
: null;
|
|
281
|
+
return { run, runs, submit, cancel, enhance, enhancing, routing, edit };
|
|
282
|
+
}
|
|
283
|
+
function defaultEditPrompt({ prompt, regions, model }) {
|
|
284
|
+
return buildRegionEditPrompt({ prompt, regions, format: model?.regionFormat });
|
|
183
285
|
}
|
|
184
286
|
let warnedNoReasoning = false;
|
|
185
287
|
function warnNoReasoningOnce() {
|
package/dist/useComposer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useComposer.js","sourceRoot":"","sources":["../src/useComposer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useComposer.js","sourceRoot":"","sources":["../src/useComposer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chai-ui/react",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "CHAI UI React components — smart, drop-in UI for AI apps: Composer, Media Analyzer, Result Card, and the useComposer hook.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "kazarazat",
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
"@fontsource/roboto": "^5.3.0",
|
|
49
49
|
"@lit/react": "^1.0.8",
|
|
50
50
|
"@material/web": "^2.5.0",
|
|
51
|
-
"@chai-ui/
|
|
52
|
-
"@chai-ui/
|
|
51
|
+
"@chai-ui/core": "0.2.1",
|
|
52
|
+
"@chai-ui/tokens": "0.2.1"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@material-symbols/svg-400": "^0.47.5",
|
package/src/Composer.tsx
CHANGED
|
@@ -2,8 +2,9 @@ import { useEffect, useRef, useState, type ChangeEvent } from "react";
|
|
|
2
2
|
import { createComponent } from "@lit/react";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { MdFab } from "@material/web/fab/fab.js";
|
|
5
|
-
import type { DroppedMedia, ModelOption, ParameterOption, MediaKind } from "@chai-ui/core";
|
|
5
|
+
import type { DroppedMedia, EditRegion, ModelOption, ParameterOption, MediaKind } from "@chai-ui/core";
|
|
6
6
|
import { SearchMenu } from "./primitives/SearchMenu.js";
|
|
7
|
+
import { regionColor } from "./regions.js";
|
|
7
8
|
|
|
8
9
|
/** See primitives/Toggle.tsx for why `createComponent` is used instead of raw JSX on custom-element tags. */
|
|
9
10
|
const MdFabElement = createComponent({
|
|
@@ -60,11 +61,20 @@ export type ComposerAttachMenuAction = "add-media" | "create-image" | "create-vi
|
|
|
60
61
|
export interface ComposerUseCase {
|
|
61
62
|
kind: MediaKind;
|
|
62
63
|
label: string;
|
|
64
|
+
/**
|
|
65
|
+
* An edit of the attached image rather than a new one: no aspect ratio,
|
|
66
|
+
* region chips when `regions` is set, and a submit needs only an image and
|
|
67
|
+
* either a prompt or a region. Images only for now.
|
|
68
|
+
*/
|
|
69
|
+
edit?: boolean;
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
/** A plain text request — what a submit means when no use case is picked, unless the builder sets `defaultUseCase`. */
|
|
66
73
|
export const TEXT_USE_CASE: ComposerUseCase = { kind: "text", label: "Text" };
|
|
67
74
|
|
|
75
|
+
/** Editing the attached image, the attach menu's "Edit image". Pair it with `useComposer`'s `editImage` and an `EditCard`. */
|
|
76
|
+
export const EDIT_IMAGE_USE_CASE: ComposerUseCase = { kind: "image", label: "Edit image", edit: true };
|
|
77
|
+
|
|
68
78
|
/** One use case to run and the models picked for it. Empty `modelIds` means the engine's default model. */
|
|
69
79
|
export interface ComposerSelection {
|
|
70
80
|
useCase: ComposerUseCase;
|
|
@@ -95,12 +105,15 @@ export interface ComposerSubmitPayload {
|
|
|
95
105
|
selections: ComposerSelection[];
|
|
96
106
|
/** When true, the model is chosen at submit (`useComposer` routes among each selection's `models`), not by the picks. */
|
|
97
107
|
autoSelectModel: boolean;
|
|
108
|
+
/** An edit's marked regions, each with its own instruction. Empty unless the use case is an edit. */
|
|
109
|
+
regions?: EditRegion[];
|
|
98
110
|
}
|
|
99
111
|
|
|
100
112
|
export interface ComposerProps {
|
|
101
113
|
/** The prompt text. Controlled — Composer owns no text state of its own. */
|
|
102
114
|
value: string;
|
|
103
115
|
onChange: (value: string) => void;
|
|
116
|
+
/** Defaults to "Describe media to create", or edit wording when the use case is an edit. */
|
|
104
117
|
placeholder?: string;
|
|
105
118
|
/** The prompt field's accessible name, read by screen readers. Defaults to `placeholder`, which disappears once the person types. */
|
|
106
119
|
promptLabel?: string;
|
|
@@ -202,6 +215,12 @@ export interface ComposerProps {
|
|
|
202
215
|
/** Fires when the stop icon is clicked while `submitting` is true. See `submitting`'s own doc comment for why this — not `submitting` alone — is what actually shows the stop icon. */
|
|
203
216
|
onAbort?: () => void;
|
|
204
217
|
onAttachMenuSelect?: (action: ComposerAttachMenuAction) => void;
|
|
218
|
+
/**
|
|
219
|
+
* An edit's regions (from `useComposer`'s `edit`), shown as colored chips
|
|
220
|
+
* while the use case is an edit. Removing a chip removes its region.
|
|
221
|
+
*/
|
|
222
|
+
regions?: EditRegion[];
|
|
223
|
+
onRegionsChange?: (next: EditRegion[]) => void;
|
|
205
224
|
disabled?: boolean;
|
|
206
225
|
}
|
|
207
226
|
|
|
@@ -218,7 +237,7 @@ export interface ComposerProps {
|
|
|
218
237
|
export function Composer({
|
|
219
238
|
value,
|
|
220
239
|
onChange,
|
|
221
|
-
placeholder
|
|
240
|
+
placeholder,
|
|
222
241
|
promptLabel,
|
|
223
242
|
attachments = [],
|
|
224
243
|
onAttachmentsChange,
|
|
@@ -250,21 +269,35 @@ export function Composer({
|
|
|
250
269
|
submitting = false,
|
|
251
270
|
onAbort,
|
|
252
271
|
onAttachMenuSelect,
|
|
272
|
+
regions = [],
|
|
273
|
+
onRegionsChange,
|
|
253
274
|
disabled = false,
|
|
254
275
|
}: ComposerProps) {
|
|
255
|
-
|
|
276
|
+
// What the person picked, and what actually runs: with nothing picked,
|
|
277
|
+
// the builder's default use case (a text request unless they chose
|
|
278
|
+
// otherwise), so a typed prompt always goes somewhere.
|
|
279
|
+
const pickedUseCases = multiSelectUseCases ? useCases : useCase ? [useCase] : [];
|
|
280
|
+
const activeUseCases = pickedUseCases.length > 0 ? pickedUseCases : [defaultUseCase];
|
|
281
|
+
// An edit needs an image, then a change: a prompt for the whole image, a
|
|
282
|
+
// region with its own instruction, or both.
|
|
283
|
+
const editing = activeUseCases.some((u) => u.edit);
|
|
284
|
+
const hasImage = attachments.some((a) => a.kind === "image");
|
|
285
|
+
const hasContent = editing
|
|
286
|
+
? hasImage && (value.trim().length > 0 || regions.length > 0)
|
|
287
|
+
: value.trim().length > 0 || attachments.length > 0;
|
|
256
288
|
const isSubmitDisabled = submitError ? disabled : (submitDisabled ?? (disabled || !hasContent));
|
|
289
|
+
const effectivePlaceholder =
|
|
290
|
+
placeholder ??
|
|
291
|
+
(editing
|
|
292
|
+
? hasImage
|
|
293
|
+
? "Describe a change across the whole image, or leave this empty"
|
|
294
|
+
: "Attach an image to edit"
|
|
295
|
+
: "Describe media to create");
|
|
257
296
|
// The stop icon only appears with somewhere for its click to go — without
|
|
258
297
|
// `onAbort`, `submitting` just disables the FAB instead (below), same as
|
|
259
298
|
// it would with no opt-in wired at all.
|
|
260
299
|
const showStop = submitting && Boolean(onAbort);
|
|
261
300
|
const selectedAspect = aspectRatios?.find((o) => o.value === aspectRatio) ?? null;
|
|
262
|
-
|
|
263
|
-
// What the person picked, and what actually runs: with nothing picked,
|
|
264
|
-
// the builder's default use case (a text request unless they chose
|
|
265
|
-
// otherwise), so a typed prompt always goes somewhere.
|
|
266
|
-
const pickedUseCases = multiSelectUseCases ? useCases : useCase ? [useCase] : [];
|
|
267
|
-
const activeUseCases = pickedUseCases.length > 0 ? pickedUseCases : [defaultUseCase];
|
|
268
301
|
const multiModel = multiSelectModels || multiSelectUseCases;
|
|
269
302
|
const pickedModelIds = multiModel ? modelIds : modelId ? [modelId] : [];
|
|
270
303
|
// One menu section per use case with multi-use-case select; otherwise one flat roster.
|
|
@@ -279,7 +312,8 @@ export function Composer({
|
|
|
279
312
|
pickedModels.length > 1
|
|
280
313
|
? `${pickedModels.length} models`
|
|
281
314
|
: pickedModels[0]?.label ?? (autoSelectModel ? "Auto-select" : "Select models");
|
|
282
|
-
|
|
315
|
+
// An edit keeps the source image's shape.
|
|
316
|
+
const showAspectRatio = activeUseCases.some((u) => !u.edit && (u.kind === "image" || u.kind === "video"));
|
|
283
317
|
|
|
284
318
|
function toggleModel(id: string) {
|
|
285
319
|
if (!multiModel) return onModelChange?.(id);
|
|
@@ -424,14 +458,28 @@ export function Composer({
|
|
|
424
458
|
</div>
|
|
425
459
|
)}
|
|
426
460
|
|
|
461
|
+
{editing && regions.length > 0 && (
|
|
462
|
+
<ul className="chai-composer__regions" aria-label="Edit regions">
|
|
463
|
+
{regions.map((r) => (
|
|
464
|
+
<li key={r.id}>
|
|
465
|
+
<RegionChip
|
|
466
|
+
region={r}
|
|
467
|
+
onRemove={onRegionsChange ? () => onRegionsChange(regions.filter((x) => x.id !== r.id)) : undefined}
|
|
468
|
+
disabled={disabled}
|
|
469
|
+
/>
|
|
470
|
+
</li>
|
|
471
|
+
))}
|
|
472
|
+
</ul>
|
|
473
|
+
)}
|
|
474
|
+
|
|
427
475
|
<div className="chai-composer__field">
|
|
428
476
|
<textarea
|
|
429
477
|
ref={textareaRef}
|
|
430
478
|
className={`chai-composer__input chai-composer__type${animating ? " chai-composer__input--revealing" : ""}`}
|
|
431
479
|
value={value}
|
|
432
480
|
onChange={(e) => onChange(e.target.value)}
|
|
433
|
-
placeholder={
|
|
434
|
-
aria-label={promptLabel ??
|
|
481
|
+
placeholder={effectivePlaceholder}
|
|
482
|
+
aria-label={promptLabel ?? effectivePlaceholder}
|
|
435
483
|
rows={1}
|
|
436
484
|
disabled={disabled || animating}
|
|
437
485
|
/>
|
|
@@ -607,6 +655,7 @@ export function Composer({
|
|
|
607
655
|
aspectRatio,
|
|
608
656
|
selections,
|
|
609
657
|
autoSelectModel,
|
|
658
|
+
regions: editing ? regions : [],
|
|
610
659
|
});
|
|
611
660
|
}
|
|
612
661
|
}}
|
|
@@ -630,7 +679,7 @@ const ATTACH_MENU_ITEMS: {
|
|
|
630
679
|
{ action: "add-media", label: "Add media", icon: <AttachFileIcon />, divider: true },
|
|
631
680
|
{ action: "create-image", label: "Create image", icon: <ImageIcon /> },
|
|
632
681
|
{ action: "create-video", label: "Create video", icon: <VideocamIcon /> },
|
|
633
|
-
{ action: "edit-media", label: "Edit
|
|
682
|
+
{ action: "edit-media", label: "Edit image", icon: <ContentCutIcon /> },
|
|
634
683
|
];
|
|
635
684
|
|
|
636
685
|
/**
|
|
@@ -778,6 +827,45 @@ function UseCaseChip({
|
|
|
778
827
|
);
|
|
779
828
|
}
|
|
780
829
|
|
|
830
|
+
/**
|
|
831
|
+
* One edit region, in its region color: a numbered badge matching the box on
|
|
832
|
+
* the image, its name, and the same hover-revealed remove as the use-case
|
|
833
|
+
* chip. The instruction itself lives on the image, not here.
|
|
834
|
+
*/
|
|
835
|
+
function RegionChip({
|
|
836
|
+
region,
|
|
837
|
+
onRemove,
|
|
838
|
+
disabled,
|
|
839
|
+
}: {
|
|
840
|
+
region: EditRegion;
|
|
841
|
+
onRemove?: () => void;
|
|
842
|
+
disabled?: boolean;
|
|
843
|
+
}) {
|
|
844
|
+
const name = `Region ${region.number}`;
|
|
845
|
+
return (
|
|
846
|
+
<span
|
|
847
|
+
className="chai-composer__chip chai-composer__chip--region"
|
|
848
|
+
style={{ "--chai-region-color": regionColor(region.number) } as React.CSSProperties}
|
|
849
|
+
>
|
|
850
|
+
<span className="chai-composer__region-badge" aria-hidden="true">
|
|
851
|
+
{region.number}
|
|
852
|
+
</span>
|
|
853
|
+
{name}
|
|
854
|
+
{onRemove && (
|
|
855
|
+
<button
|
|
856
|
+
type="button"
|
|
857
|
+
className="chai-composer__chip-remove"
|
|
858
|
+
onClick={onRemove}
|
|
859
|
+
disabled={disabled}
|
|
860
|
+
aria-label={`Remove ${name}`}
|
|
861
|
+
>
|
|
862
|
+
<CloseIcon />
|
|
863
|
+
</button>
|
|
864
|
+
)}
|
|
865
|
+
</span>
|
|
866
|
+
);
|
|
867
|
+
}
|
|
868
|
+
|
|
781
869
|
function kindIcon(kind: MediaKind) {
|
|
782
870
|
switch (kind) {
|
|
783
871
|
case "video":
|