@chai-ui/react 0.1.0 → 0.2.0
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 +507 -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 +507 -82
- package/src/useComposer.ts +147 -18
package/dist/EditCard.js
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { DEFAULT_MAX_REGIONS } from "@chai-ui/core";
|
|
4
|
+
import { Pagination } from "./primitives/Pagination.js";
|
|
5
|
+
import { AddIcon, CheckSymbolIcon, CloseSymbolIcon, DeleteIcon, DownloadIcon, ExpandIcon, ShareIcon, VisibilityIcon, VisibilityOffIcon, ZoomInIcon, ZoomOutIcon, } from "./icons.js";
|
|
6
|
+
import { downloadFilename, downloadMedia, shareMedia } from "./media-actions.js";
|
|
7
|
+
import { PageSlide, usePageSlide } from "./page-slide.js";
|
|
8
|
+
import { regionColor } from "./regions.js";
|
|
9
|
+
const ZOOM_STEPS = [1, 1.25, 1.5, 2, 3, 4];
|
|
10
|
+
const MIN_SIZE = 0.03;
|
|
11
|
+
const KEY_STEP = 0.01;
|
|
12
|
+
const KEY_STEP_LARGE = 0.05;
|
|
13
|
+
const clamp = (v, min, max) => Math.min(max, Math.max(min, v));
|
|
14
|
+
/** Keeps a box inside the image and at least the minimum size. */
|
|
15
|
+
function fitBox(box) {
|
|
16
|
+
const width = clamp(box.width, MIN_SIZE, 1);
|
|
17
|
+
const height = clamp(box.height, MIN_SIZE, 1);
|
|
18
|
+
return { x: clamp(box.x, 0, 1 - width), y: clamp(box.y, 0, 1 - height), width, height };
|
|
19
|
+
}
|
|
20
|
+
/** A box resized by dragging one corner; the opposite corner stays put. */
|
|
21
|
+
function resizeBox(box, corner, dx, dy) {
|
|
22
|
+
let left = box.x;
|
|
23
|
+
let top = box.y;
|
|
24
|
+
let right = box.x + box.width;
|
|
25
|
+
let bottom = box.y + box.height;
|
|
26
|
+
if (corner === "nw" || corner === "sw")
|
|
27
|
+
left = clamp(left + dx, 0, right - MIN_SIZE);
|
|
28
|
+
else
|
|
29
|
+
right = clamp(right + dx, left + MIN_SIZE, 1);
|
|
30
|
+
if (corner === "nw" || corner === "ne")
|
|
31
|
+
top = clamp(top + dy, 0, bottom - MIN_SIZE);
|
|
32
|
+
else
|
|
33
|
+
bottom = clamp(bottom + dy, top + MIN_SIZE, 1);
|
|
34
|
+
return { x: left, y: top, width: right - left, height: bottom - top };
|
|
35
|
+
}
|
|
36
|
+
/** Pan limits at a zoom level: the image always covers the viewport. */
|
|
37
|
+
function clampPan(pan, zoom, size) {
|
|
38
|
+
return {
|
|
39
|
+
x: clamp(pan.x, size.width - size.width * zoom, 0),
|
|
40
|
+
y: clamp(pan.y, size.height - size.height * zoom, 0),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function nextRegionId() {
|
|
44
|
+
return typeof crypto !== "undefined" && "randomUUID" in crypto
|
|
45
|
+
? crypto.randomUUID()
|
|
46
|
+
: `region-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
47
|
+
}
|
|
48
|
+
/** The lowest number no current region uses, so freed numbers (and colors) come back first. */
|
|
49
|
+
function freeNumber(regions) {
|
|
50
|
+
let n = 1;
|
|
51
|
+
while (regions.some((r) => r.number === n))
|
|
52
|
+
n += 1;
|
|
53
|
+
return n;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The image editing card: the person marks regions on the image, gives each
|
|
57
|
+
* one an instruction, and checks it into the Composer. It shares
|
|
58
|
+
* `ResultCard`'s frame, with region actions where the votes would be.
|
|
59
|
+
*
|
|
60
|
+
* Drop it in with `useComposer`'s `edit`: `{edit && <EditCard {...edit} />}`.
|
|
61
|
+
* Its regions are shared with `Composer` (pass `edit.regions` and
|
|
62
|
+
* `edit.onRegionsChange` there too), and each edit's result comes back here
|
|
63
|
+
* as a new version.
|
|
64
|
+
*
|
|
65
|
+
* - "New region" adds a box with a prompt field. Check adds the region to
|
|
66
|
+
* the Composer; trash removes it. Clicking a region reopens its field.
|
|
67
|
+
* - Drag a region to move it, or a corner to resize it. By keyboard:
|
|
68
|
+
* arrows move the selected region, Shift + arrows resize it.
|
|
69
|
+
* - Zoom keeps the image inside the card; drag (or arrow keys) to pan.
|
|
70
|
+
*/
|
|
71
|
+
export function EditCard({ versions, activeVersion, onActiveVersionChange, regions, onRegionsChange, maxRegions = DEFAULT_MAX_REGIONS, width, alt = "Image being edited", onAction, disabled = false, }) {
|
|
72
|
+
const index = clamp(activeVersion, 0, Math.max(0, versions.length - 1));
|
|
73
|
+
const version = versions[index];
|
|
74
|
+
const ready = version?.status === "done" && Boolean(version.src);
|
|
75
|
+
// A region being drawn, not yet checked into the Composer.
|
|
76
|
+
const [draft, setDraft] = useState(null);
|
|
77
|
+
const [selectedId, setSelectedId] = useState(null);
|
|
78
|
+
const [text, setText] = useState("");
|
|
79
|
+
const [hidden, setHidden] = useState(false);
|
|
80
|
+
const [zoom, setZoom] = useState(1);
|
|
81
|
+
const [pan, setPan] = useState({ x: 0, y: 0 });
|
|
82
|
+
const [size, setSize] = useState({ width: 0, height: 0 });
|
|
83
|
+
const [expanded, setExpanded] = useState(false);
|
|
84
|
+
const drag = useRef(null);
|
|
85
|
+
const viewportRef = useRef(null);
|
|
86
|
+
const fieldRef = useRef(null);
|
|
87
|
+
// Paging slides between versions, and a different version starts clean:
|
|
88
|
+
// no half-drawn region, no zoom.
|
|
89
|
+
const { slide, endSlide } = usePageSlide(version?.id, index, version?.src ?? version?.from);
|
|
90
|
+
const [cleanFor, setCleanFor] = useState(version?.id);
|
|
91
|
+
if (version?.id !== cleanFor) {
|
|
92
|
+
setCleanFor(version?.id);
|
|
93
|
+
setDraft(null);
|
|
94
|
+
setSelectedId(null);
|
|
95
|
+
setZoom(1);
|
|
96
|
+
setPan({ x: 0, y: 0 });
|
|
97
|
+
}
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
const el = viewportRef.current;
|
|
100
|
+
if (!el)
|
|
101
|
+
return;
|
|
102
|
+
const observer = new ResizeObserver(([entry]) => {
|
|
103
|
+
if (entry)
|
|
104
|
+
setSize({ width: entry.contentRect.width, height: entry.contentRect.height });
|
|
105
|
+
});
|
|
106
|
+
observer.observe(el);
|
|
107
|
+
return () => observer.disconnect();
|
|
108
|
+
}, []);
|
|
109
|
+
// A region being drawn takes a free number, even if the regions changed
|
|
110
|
+
// since it was started (so checking it in can't duplicate a number).
|
|
111
|
+
const shownDraft = draft && regions.some((r) => r.number === draft.number) ? { ...draft, number: freeNumber(regions) } : draft;
|
|
112
|
+
const all = shownDraft ? [...regions, shownDraft] : regions;
|
|
113
|
+
const selected = all.find((r) => r.id === selectedId) ?? null;
|
|
114
|
+
const isDraft = selected != null && selected.id === draft?.id;
|
|
115
|
+
const canCheck = selected != null && text.trim().length > 0 && (isDraft || text.trim() !== selected.prompt);
|
|
116
|
+
const atCap = all.length >= maxRegions;
|
|
117
|
+
const anyRegions = all.length > 0 || (version?.regions.length ?? 0) > 0;
|
|
118
|
+
// The field opens focused, so a new region can be described straight away.
|
|
119
|
+
useEffect(() => {
|
|
120
|
+
if (selectedId)
|
|
121
|
+
fieldRef.current?.focus();
|
|
122
|
+
}, [selectedId]);
|
|
123
|
+
// The field grows with its text instead of scrolling it out of view.
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
const el = fieldRef.current;
|
|
126
|
+
if (!el)
|
|
127
|
+
return;
|
|
128
|
+
el.style.height = "auto";
|
|
129
|
+
el.style.height = `${el.scrollHeight}px`;
|
|
130
|
+
}, [text, selectedId]);
|
|
131
|
+
function select(region) {
|
|
132
|
+
setSelectedId(region?.id ?? null);
|
|
133
|
+
setText(region?.prompt ?? "");
|
|
134
|
+
}
|
|
135
|
+
function setBox(id, box) {
|
|
136
|
+
if (draft?.id === id)
|
|
137
|
+
setDraft({ ...draft, box });
|
|
138
|
+
else
|
|
139
|
+
onRegionsChange(regions.map((r) => (r.id === id ? { ...r, box } : r)));
|
|
140
|
+
}
|
|
141
|
+
function addRegion() {
|
|
142
|
+
// Centered in the part of the image in view, so it's visible when zoomed in.
|
|
143
|
+
const viewW = 1 / zoom;
|
|
144
|
+
const viewH = 1 / zoom;
|
|
145
|
+
const centerX = size.width ? (-pan.x / (size.width * zoom)) + viewW / 2 : 0.5;
|
|
146
|
+
const centerY = size.height ? (-pan.y / (size.height * zoom)) + viewH / 2 : 0.5;
|
|
147
|
+
const box = fitBox({ x: centerX - (0.3 * viewW) / 2, y: centerY - (0.2 * viewH) / 2, width: 0.3 * viewW, height: 0.2 * viewH });
|
|
148
|
+
const region = { id: nextRegionId(), number: freeNumber(regions), box, prompt: "" };
|
|
149
|
+
setDraft(region);
|
|
150
|
+
setHidden(false);
|
|
151
|
+
select(region);
|
|
152
|
+
}
|
|
153
|
+
function check() {
|
|
154
|
+
if (!selected || !canCheck)
|
|
155
|
+
return;
|
|
156
|
+
const prompt = text.trim();
|
|
157
|
+
if (isDraft) {
|
|
158
|
+
onRegionsChange([...regions, { ...selected, prompt }]);
|
|
159
|
+
setDraft(null);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
onRegionsChange(regions.map((r) => (r.id === selected.id ? { ...r, prompt } : r)));
|
|
163
|
+
}
|
|
164
|
+
select(null);
|
|
165
|
+
}
|
|
166
|
+
function remove() {
|
|
167
|
+
if (!selected)
|
|
168
|
+
return;
|
|
169
|
+
if (isDraft)
|
|
170
|
+
setDraft(null);
|
|
171
|
+
else
|
|
172
|
+
onRegionsChange(regions.filter((r) => r.id !== selected.id));
|
|
173
|
+
select(null);
|
|
174
|
+
}
|
|
175
|
+
function clearAll() {
|
|
176
|
+
setDraft(null);
|
|
177
|
+
select(null);
|
|
178
|
+
onRegionsChange([]);
|
|
179
|
+
}
|
|
180
|
+
function zoomTo(next) {
|
|
181
|
+
// Zooms around the middle of the view, so what's centered stays centered.
|
|
182
|
+
const cx = size.width / 2;
|
|
183
|
+
const cy = size.height / 2;
|
|
184
|
+
const ratio = next / zoom;
|
|
185
|
+
setPan(clampPan({ x: cx - (cx - pan.x) * ratio, y: cy - (cy - pan.y) * ratio }, next, size));
|
|
186
|
+
setZoom(next);
|
|
187
|
+
}
|
|
188
|
+
const zoomIndex = ZOOM_STEPS.indexOf(zoom);
|
|
189
|
+
// --- Pointer: move and resize regions, pan the zoomed image ---
|
|
190
|
+
// Moves and releases bubble to the viewport, even while a region or
|
|
191
|
+
// handle holds the pointer capture, so the viewport handles them all.
|
|
192
|
+
function startRegionDrag(e, region, kind) {
|
|
193
|
+
if (disabled || e.button !== 0)
|
|
194
|
+
return;
|
|
195
|
+
e.stopPropagation();
|
|
196
|
+
e.currentTarget.setPointerCapture(e.pointerId);
|
|
197
|
+
drag.current = { kind, id: region.id, x: e.clientX, y: e.clientY, box: region.box, moved: false };
|
|
198
|
+
if (region.id !== selectedId)
|
|
199
|
+
select(region);
|
|
200
|
+
}
|
|
201
|
+
function startPan(e) {
|
|
202
|
+
if (e.button !== 0)
|
|
203
|
+
return;
|
|
204
|
+
if (zoom > 1)
|
|
205
|
+
e.currentTarget.setPointerCapture(e.pointerId);
|
|
206
|
+
drag.current = { kind: "pan", x: e.clientX, y: e.clientY, pan, moved: false };
|
|
207
|
+
}
|
|
208
|
+
function handlePointerMove(e) {
|
|
209
|
+
const d = drag.current;
|
|
210
|
+
if (!d || !size.width)
|
|
211
|
+
return;
|
|
212
|
+
const dxPx = e.clientX - d.x;
|
|
213
|
+
const dyPx = e.clientY - d.y;
|
|
214
|
+
if (Math.abs(dxPx) + Math.abs(dyPx) > 2)
|
|
215
|
+
d.moved = true;
|
|
216
|
+
if (d.kind === "pan") {
|
|
217
|
+
if (zoom > 1)
|
|
218
|
+
setPan(clampPan({ x: d.pan.x + dxPx, y: d.pan.y + dyPx }, zoom, size));
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const dx = dxPx / (size.width * zoom);
|
|
222
|
+
const dy = dyPx / (size.height * zoom);
|
|
223
|
+
setBox(d.id, d.kind === "move" ? fitBox({ ...d.box, x: d.box.x + dx, y: d.box.y + dy }) : resizeBox(d.box, d.kind, dx, dy));
|
|
224
|
+
}
|
|
225
|
+
function handlePointerUp() {
|
|
226
|
+
const d = drag.current;
|
|
227
|
+
drag.current = null;
|
|
228
|
+
// A click on the image itself (not a drag) closes the open field.
|
|
229
|
+
if (d?.kind === "pan" && !d.moved)
|
|
230
|
+
select(null);
|
|
231
|
+
}
|
|
232
|
+
// --- Keyboard ---
|
|
233
|
+
function handleRegionKey(e, region) {
|
|
234
|
+
const step = e.altKey ? KEY_STEP_LARGE : KEY_STEP;
|
|
235
|
+
const arrows = {
|
|
236
|
+
ArrowLeft: [-step, 0],
|
|
237
|
+
ArrowRight: [step, 0],
|
|
238
|
+
ArrowUp: [0, -step],
|
|
239
|
+
ArrowDown: [0, step],
|
|
240
|
+
};
|
|
241
|
+
const delta = arrows[e.key];
|
|
242
|
+
if (delta) {
|
|
243
|
+
e.preventDefault();
|
|
244
|
+
e.stopPropagation();
|
|
245
|
+
const [dx, dy] = delta;
|
|
246
|
+
setBox(region.id, e.shiftKey ? resizeBox(region.box, "se", dx, dy) : fitBox({ ...region.box, x: region.box.x + dx, y: region.box.y + dy }));
|
|
247
|
+
}
|
|
248
|
+
else if (e.key === "Delete" || e.key === "Backspace") {
|
|
249
|
+
e.preventDefault();
|
|
250
|
+
if (region.id === draft?.id)
|
|
251
|
+
setDraft(null);
|
|
252
|
+
else
|
|
253
|
+
onRegionsChange(regions.filter((r) => r.id !== region.id));
|
|
254
|
+
select(null);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function handleViewportKey(e) {
|
|
258
|
+
if (e.target !== e.currentTarget || zoom <= 1)
|
|
259
|
+
return;
|
|
260
|
+
const step = 40;
|
|
261
|
+
const arrows = { ArrowLeft: [step, 0], ArrowRight: [-step, 0], ArrowUp: [0, step], ArrowDown: [0, -step] };
|
|
262
|
+
const delta = arrows[e.key];
|
|
263
|
+
if (!delta)
|
|
264
|
+
return;
|
|
265
|
+
e.preventDefault();
|
|
266
|
+
setPan(clampPan({ x: pan.x + delta[0], y: pan.y + delta[1] }, zoom, size));
|
|
267
|
+
}
|
|
268
|
+
function handleFieldKey(e) {
|
|
269
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
270
|
+
e.preventDefault();
|
|
271
|
+
check();
|
|
272
|
+
}
|
|
273
|
+
else if (e.key === "Escape") {
|
|
274
|
+
e.preventDefault();
|
|
275
|
+
if (isDraft)
|
|
276
|
+
setDraft(null);
|
|
277
|
+
select(null);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// --- Media actions ---
|
|
281
|
+
const handleDownload = async () => {
|
|
282
|
+
if (!version?.src)
|
|
283
|
+
return;
|
|
284
|
+
await downloadMedia(version.src, downloadFilename(version.id, "image", version.src));
|
|
285
|
+
onAction?.("download", version);
|
|
286
|
+
};
|
|
287
|
+
const handleShare = async () => {
|
|
288
|
+
if (!version?.src)
|
|
289
|
+
return;
|
|
290
|
+
await shareMedia(version.src);
|
|
291
|
+
onAction?.("share", version);
|
|
292
|
+
};
|
|
293
|
+
// --- Layout ---
|
|
294
|
+
// The field sits above its region, or below it when there isn't room above.
|
|
295
|
+
const popover = selected && !hidden && size.width
|
|
296
|
+
? (() => {
|
|
297
|
+
const left = selected.box.x * size.width * zoom + pan.x;
|
|
298
|
+
const top = selected.box.y * size.height * zoom + pan.y;
|
|
299
|
+
const bottom = (selected.box.y + selected.box.height) * size.height * zoom + pan.y;
|
|
300
|
+
// Below only when it clears the controls along the image's bottom edge.
|
|
301
|
+
const reserved = versions.length > 1 ? 100 : 56;
|
|
302
|
+
const fitsBelow = bottom + 8 + POPOVER_HEIGHT <= size.height - reserved;
|
|
303
|
+
const above = top > POPOVER_HEIGHT + 16 || !fitsBelow;
|
|
304
|
+
return {
|
|
305
|
+
left: clamp(left, 8, Math.max(8, size.width - POPOVER_WIDTH - 8)),
|
|
306
|
+
top: above ? Math.max(top - 8, POPOVER_HEIGHT + 8) : bottom + 8,
|
|
307
|
+
above,
|
|
308
|
+
};
|
|
309
|
+
})()
|
|
310
|
+
: null;
|
|
311
|
+
if (!version)
|
|
312
|
+
return null;
|
|
313
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "chai-edit-card", style: width != null ? { "--chai-edit-card-width": `${width}px` } : undefined, children: _jsxs("div", { ref: viewportRef, className: `chai-edit-card__viewport${zoom > 1 ? " chai-edit-card__viewport--zoomed" : ""}`, role: "group", "aria-label": zoom > 1 ? `Image, zoomed to ${Math.round(zoom * 100)}%. Arrow keys move around.` : "Image", tabIndex: zoom > 1 ? 0 : undefined, onPointerDown: startPan, onPointerMove: handlePointerMove, onPointerUp: handlePointerUp, onPointerCancel: handlePointerUp, onKeyDown: handleViewportKey, children: [_jsx(PageSlide, { slide: slide, onEnd: endSlide, children: _jsxs("div", { className: "chai-edit-card__layer", style: { transform: `translate(${pan.x}px, ${pan.y}px) scale(${zoom})`, "--chai-edit-zoom": zoom }, children: [version.src || version.from ? (_jsx("img", { className: "chai-edit-card__image", src: version.src ?? version.from, alt: alt, draggable: false })) : (_jsx("div", { className: "chai-edit-card__placeholder" })), !hidden &&
|
|
314
|
+
version.regions.map((r) => (_jsx("span", { className: "chai-edit-card__region chai-edit-card__region--applied", style: boxStyle(r), "aria-hidden": "true" }, `applied-${r.id}`))), !hidden &&
|
|
315
|
+
ready &&
|
|
316
|
+
all.map((r) => (_jsx(RegionShape, { region: r, selected: r.id === selectedId, draft: r.id === draft?.id, disabled: disabled, onDragStart: startRegionDrag, onSelect: select, onKeyDown: handleRegionKey }, r.id)))] }) }), version.status !== "done" && (_jsx("div", { className: "chai-edit-card__status", role: "status", children: version.status === "queued" || version.status === "running" ? (_jsx("span", { className: "chai-edit-card__spinner", role: "img", "aria-label": "Editing" })) : (_jsx("p", { className: "chai-edit-card__status-text", children: version.status === "cancelled" ? "Stopped" : (version.error ?? "Something went wrong.") })) })), _jsxs("div", { className: "chai-card-top chai-card-top--start", onPointerDown: (e) => e.stopPropagation(), children: [_jsx("button", { type: "button", className: "chai-card-top-btn", "aria-label": "Zoom in", title: "Zoom in", disabled: !ready || zoomIndex >= ZOOM_STEPS.length - 1, onClick: () => zoomTo(ZOOM_STEPS[zoomIndex + 1]), children: _jsx(ZoomInIcon, {}) }), _jsxs("span", { className: "chai-edit-card__zoom-level", "aria-live": "polite", children: [Math.round(zoom * 100), "%"] }), _jsx("button", { type: "button", className: "chai-card-top-btn", "aria-label": "Zoom out", title: "Zoom out", disabled: !ready || zoomIndex <= 0, onClick: () => zoomTo(ZOOM_STEPS[zoomIndex - 1]), children: _jsx(ZoomOutIcon, {}) })] }), _jsxs("div", { className: "chai-card-top chai-card-top--end", onPointerDown: (e) => e.stopPropagation(), children: [_jsx("button", { type: "button", className: "chai-card-top-btn", "aria-label": "Download", title: "Download", disabled: disabled || !ready, onClick: handleDownload, children: _jsx(DownloadIcon, {}) }), _jsx("button", { type: "button", className: "chai-card-top-btn", "aria-label": "Share", title: "Share", disabled: disabled || !ready, onClick: handleShare, children: _jsx(ShareIcon, {}) }), _jsx("button", { type: "button", className: "chai-card-top-btn", "aria-label": "Expand", title: "Expand", disabled: !ready, onClick: () => setExpanded(true), children: _jsx(ExpandIcon, {}) })] }), _jsxs("div", { className: "chai-card-bottom", onPointerDown: (e) => e.stopPropagation(), children: [versions.length > 1 && (_jsx("div", { className: "chai-card-pager", children: _jsx(Pagination, { count: versions.length, index: index, onChange: onActiveVersionChange, label: "Versions", itemLabel: "Version", disabled: disabled }) })), _jsxs("div", { className: "chai-card-actions", children: [_jsxs("div", { className: "chai-card-chips", children: [_jsxs("button", { type: "button", className: "chai-card-chip", disabled: disabled || !ready || atCap, title: atCap ? `This model takes up to ${maxRegions} regions` : undefined, onClick: addRegion, children: [_jsx(AddIcon, {}), "New region"] }), _jsxs("button", { type: "button", className: "chai-card-chip", disabled: disabled || all.length === 0, onClick: clearAll, children: [_jsx(CloseSymbolIcon, {}), "Clear regions"] })] }), _jsx("button", { type: "button", className: "chai-card-round", "aria-label": hidden ? "Show regions" : "Hide regions", title: hidden ? "Show regions" : "Hide regions", disabled: !anyRegions, onClick: () => {
|
|
317
|
+
setHidden(!hidden);
|
|
318
|
+
select(null);
|
|
319
|
+
}, children: hidden ? _jsx(VisibilityOffIcon, {}) : _jsx(VisibilityIcon, {}) })] })] }), popover && selected && (_jsxs("div", { className: `chai-edit-card__popover${popover.above ? " chai-edit-card__popover--above" : ""}`, style: { left: popover.left, top: popover.top }, role: "dialog", "aria-label": `Region ${selected.number}`, onPointerDown: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "chai-edit-card__popover-header", children: [_jsxs("span", { className: "chai-edit-card__popover-title", children: ["Region ", selected.number] }), _jsx("button", { type: "button", className: "chai-card-top-btn", "aria-label": "Add region to prompt", title: "Add region to prompt", disabled: disabled || !canCheck, onClick: check, children: _jsx(CheckSymbolIcon, {}) }), _jsx("button", { type: "button", className: "chai-card-top-btn", "aria-label": "Delete region", title: "Delete region", disabled: disabled, onClick: remove, children: _jsx(DeleteIcon, {}) })] }), _jsx("textarea", { ref: fieldRef, className: "chai-edit-card__field", value: text, rows: 1, placeholder: "What should change here?", "aria-label": `Instruction for region ${selected.number}`, disabled: disabled, onChange: (e) => setText(e.target.value), onKeyDown: handleFieldKey })] }))] }) }), expanded && version.src && (_jsx(ExpandedImage, { src: version.src, alt: alt, onClose: () => setExpanded(false) }))] }));
|
|
320
|
+
}
|
|
321
|
+
const POPOVER_WIDTH = 220;
|
|
322
|
+
/** A typical height for the instruction panel (title row and a two-line field), for placing it. */
|
|
323
|
+
const POPOVER_HEIGHT = 96;
|
|
324
|
+
const CORNERS = ["nw", "ne", "sw", "se"];
|
|
325
|
+
/** One region on the image: a button to select, move or delete it, its number badge, and corner handles while selected. */
|
|
326
|
+
function RegionShape({ region, selected, draft, disabled, onDragStart, onSelect, onKeyDown, }) {
|
|
327
|
+
const name = `Region ${region.number}`;
|
|
328
|
+
return (_jsxs("div", { className: `chai-edit-card__region${selected ? " chai-edit-card__region--selected" : ""}${draft ? " chai-edit-card__region--draft" : ""}`, style: boxStyle(region), children: [_jsx("button", { type: "button", className: "chai-edit-card__region-body", "aria-label": `${name}${region.prompt ? `: ${region.prompt}` : ", no instruction yet"}. Arrow keys move it, Shift and arrow keys resize it.`, "aria-pressed": selected, disabled: disabled, onPointerDown: (e) => onDragStart(e, region, "move"), onClick: () => onSelect(region), onKeyDown: (e) => onKeyDown(e, region) }), _jsx("span", { className: "chai-edit-card__badge", "aria-hidden": "true", children: region.number }), selected &&
|
|
329
|
+
CORNERS.map((corner) => (_jsx("span", { className: `chai-edit-card__handle chai-edit-card__handle--${corner}`, "aria-hidden": "true", onPointerDown: (e) => onDragStart(e, region, corner) }, corner)))] }));
|
|
330
|
+
}
|
|
331
|
+
function boxStyle(r) {
|
|
332
|
+
return {
|
|
333
|
+
left: `${r.box.x * 100}%`,
|
|
334
|
+
top: `${r.box.y * 100}%`,
|
|
335
|
+
width: `${r.box.width * 100}%`,
|
|
336
|
+
height: `${r.box.height * 100}%`,
|
|
337
|
+
"--chai-region-color": regionColor(r.number),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/** The full-size image in a modal dialog: focus moves in, Escape closes, and focus returns to Expand. */
|
|
341
|
+
function ExpandedImage({ src, alt, onClose }) {
|
|
342
|
+
const closeRef = useRef(null);
|
|
343
|
+
useEffect(() => {
|
|
344
|
+
const opener = document.activeElement;
|
|
345
|
+
closeRef.current?.focus();
|
|
346
|
+
return () => opener?.focus();
|
|
347
|
+
}, []);
|
|
348
|
+
return (_jsxs("div", { className: "chai-result-card__expand-overlay", role: "dialog", "aria-modal": "true", "aria-label": "Expanded image", onKeyDown: (e) => {
|
|
349
|
+
if (e.key === "Escape") {
|
|
350
|
+
e.stopPropagation();
|
|
351
|
+
onClose();
|
|
352
|
+
}
|
|
353
|
+
else if (e.key === "Tab") {
|
|
354
|
+
// One control inside: keep focus on it.
|
|
355
|
+
e.preventDefault();
|
|
356
|
+
closeRef.current?.focus();
|
|
357
|
+
}
|
|
358
|
+
}, children: [_jsx("div", { className: "chai-result-card__expand-scrim", role: "presentation", onClick: onClose }), _jsxs("div", { className: "chai-result-card__expand-frame", children: [_jsx("img", { className: "chai-result-card__image", src: src, alt: alt }), _jsx("button", { ref: closeRef, type: "button", className: "chai-result-card__collapse", "aria-label": "Collapse", onClick: onClose, children: _jsx(CloseSymbolIcon, {}) })] })] }));
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=EditCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditCard.js","sourceRoot":"","sources":["../src/EditCard.tsx"],"names":[],"mappings":"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"}
|
package/dist/ResultCard.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
|
-
import type
|
|
2
|
+
import { type ModelOption, type Result } from "@chai-ui/core";
|
|
3
3
|
/** One row in the "more" (⋯) menu, for app-specific actions (e.g. "Flag content"). ResultCard can't implement any of them — every one of these just fires `onAction` with this `id`. */
|
|
4
4
|
export interface ResultCardMoreAction {
|
|
5
5
|
id: string;
|
|
@@ -52,4 +52,5 @@ export interface ResultCardProps {
|
|
|
52
52
|
disabled?: boolean;
|
|
53
53
|
}
|
|
54
54
|
export declare function ResultCard({ results, width, textMaxHeight, prompt, altText, models, getVote, onAction, moreActions, disabled, }: ResultCardProps): import("react").JSX.Element | null;
|
|
55
|
+
/** Self-drawn corner-bracket mark, not a recalled/traced icon-set glyph (the mock has no "expand" asset to trace — see this section's own header comment) — four independent strokes, deliberately simple so its geometry is obviously correct rather than a compound path that's hard to eyeball. */
|
|
55
56
|
//# sourceMappingURL=ResultCard.d.ts.map
|
package/dist/ResultCard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResultCard.d.ts","sourceRoot":"","sources":["../src/ResultCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACxF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ResultCard.d.ts","sourceRoot":"","sources":["../src/ResultCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACxF,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAsDhF,wLAAwL;AACxL,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,oGAAoG;IACpG,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4KAA4K;IAC5K,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,mJAAmJ;IACnJ,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,CAAC;IAC7C;;;;;;;;OAQG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,4KAA4K;IAC5K,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,KAAK,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,GACT,EAAE,eAAe,sCA0TjB;AA8dD,sSAAsS"}
|