@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.
Files changed (55) hide show
  1. package/DESIGN.md +6 -1
  2. package/README.md +69 -6
  3. package/dist/Composer.d.ts +19 -2
  4. package/dist/Composer.d.ts.map +1 -1
  5. package/dist/Composer.js +36 -10
  6. package/dist/Composer.js.map +1 -1
  7. package/dist/EditCard.d.ts +52 -0
  8. package/dist/EditCard.d.ts.map +1 -0
  9. package/dist/EditCard.js +360 -0
  10. package/dist/EditCard.js.map +1 -0
  11. package/dist/ResultCard.d.ts +2 -1
  12. package/dist/ResultCard.d.ts.map +1 -1
  13. package/dist/ResultCard.js +19 -63
  14. package/dist/ResultCard.js.map +1 -1
  15. package/dist/icons.d.ts +27 -0
  16. package/dist/icons.d.ts.map +1 -0
  17. package/dist/icons.js +50 -0
  18. package/dist/icons.js.map +1 -0
  19. package/dist/index.d.ts +3 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +2 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/media-actions.d.ts +15 -0
  24. package/dist/media-actions.d.ts.map +1 -0
  25. package/dist/media-actions.js +47 -0
  26. package/dist/media-actions.js.map +1 -0
  27. package/dist/page-slide.d.ts +32 -0
  28. package/dist/page-slide.d.ts.map +1 -0
  29. package/dist/page-slide.js +43 -0
  30. package/dist/page-slide.js.map +1 -0
  31. package/dist/primitives/Pagination.d.ts +3 -1
  32. package/dist/primitives/Pagination.d.ts.map +1 -1
  33. package/dist/primitives/Pagination.js +2 -2
  34. package/dist/primitives/Pagination.js.map +1 -1
  35. package/dist/regions.d.ts +3 -0
  36. package/dist/regions.d.ts.map +1 -0
  37. package/dist/regions.js +7 -0
  38. package/dist/regions.js.map +1 -0
  39. package/dist/style.css +507 -82
  40. package/dist/useComposer.d.ts +22 -1
  41. package/dist/useComposer.d.ts.map +1 -1
  42. package/dist/useComposer.js +126 -24
  43. package/dist/useComposer.js.map +1 -1
  44. package/package.json +3 -3
  45. package/src/Composer.tsx +101 -13
  46. package/src/EditCard.tsx +688 -0
  47. package/src/ResultCard.tsx +60 -125
  48. package/src/icons.tsx +115 -0
  49. package/src/index.ts +8 -0
  50. package/src/media-actions.ts +45 -0
  51. package/src/page-slide.tsx +82 -0
  52. package/src/primitives/Pagination.tsx +4 -2
  53. package/src/regions.ts +7 -0
  54. package/src/style.css +507 -82
  55. package/src/useComposer.ts +147 -18
@@ -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":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAA6D,MAAM,OAAO,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAsD,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EACL,OAAO,EACP,eAAe,EACf,eAAe,EACf,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAqC3C,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,cAAc,GAAG,IAAI,CAAC;AAQ5B,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAEvF,kEAAkE;AAClE,SAAS,MAAM,CAAC,GAAc;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC1F,CAAC;AAED,2EAA2E;AAC3E,SAAS,SAAS,CAAC,GAAc,EAAE,MAAiC,EAAE,EAAU,EAAE,EAAU;IAC1F,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACjB,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;IAC9B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;QAAE,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;;QAChF,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;QAAE,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;;QAC/E,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACxE,CAAC;AAED,wEAAwE;AACxE,SAAS,QAAQ,CAAC,GAAQ,EAAE,IAAY,EAAE,IAAU;IAClD,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM;QAC5D,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;QACrB,CAAC,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,+FAA+F;AAC/F,SAAS,UAAU,CAAC,OAAqB;IACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,CAAC,IAAI,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,aAAa,EACb,qBAAqB,EACrB,OAAO,EACP,eAAe,EACf,UAAU,GAAG,mBAAmB,EAChC,KAAK,EACL,GAAG,GAAG,oBAAoB,EAC1B,QAAQ,EACR,QAAQ,GAAG,KAAK,GACF;IACd,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjE,2DAA2D;IAC3D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAoB,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IAEnD,wEAAwE;IACxE,iCAAiC;IACjC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5F,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,OAAO,EAAE,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC7B,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,CAAC,CAAC,CAAC,CAAC;QACX,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,KAAK;gBAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,UAAU,GACd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9G,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC;IAC9D,MAAM,OAAO,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,EAAE,CAAC;IAC9D,MAAM,QAAQ,GAAG,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5G,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC;IACvC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAExE,2EAA2E;IAC3E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU;YAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,qEAAqE;IACrE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,IAAI,CAAC;IAC3C,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAEvB,SAAS,MAAM,CAAC,MAAyB;QACvC,aAAa,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,MAAM,CAAC,EAAU,EAAE,GAAc;QACxC,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE;YAAE,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;;YAC7C,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,SAAS,SAAS;QAChB,6EAA6E;QAC7E,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;QACvB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAChF,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;QAChI,MAAM,MAAM,GAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAChG,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,MAAM,CAAC,MAAM,CAAC,CAAC;IACjB,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;YAAE,OAAO;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,OAAO,EAAE,CAAC;YACZ,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACvD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,SAAS,MAAM;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,IAAI,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;;YACvB,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,SAAS,QAAQ;QACf,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,eAAe,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,SAAS,MAAM,CAAC,IAAY;QAC1B,0EAA0E;QAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,iEAAiE;IACjE,oEAAoE;IACpE,sEAAsE;IAEtE,SAAS,eAAe,CAAC,CAAe,EAAE,MAAkB,EAAE,IAAc;QAC1E,IAAI,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACvC,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAClG,IAAI,MAAM,CAAC,EAAE,KAAK,UAAU;YAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS,QAAQ,CAAC,CAAe;QAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC3B,IAAI,IAAI,GAAG,CAAC;YAAE,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAChF,CAAC;IAED,SAAS,iBAAiB,CAAC,CAAe;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;QACxD,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACrB,IAAI,IAAI,GAAG,CAAC;gBAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9H,CAAC;IAED,SAAS,eAAe;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,kEAAkE;QAClE,IAAI,CAAC,EAAE,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,mBAAmB;IAEnB,SAAS,eAAe,CAAC,CAAgB,EAAE,MAAkB;QAC3D,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClD,MAAM,MAAM,GAAqC;YAC/C,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrB,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACrB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;YACnB,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;SACrB,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9I,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACvD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,EAAE;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;;gBACvC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,iBAAiB,CAAC,CAAgC;QACzD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,IAAI,IAAI,IAAI,CAAC;YAAE,OAAO;QACtD,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,MAAM,GAAqC,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7I,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,SAAS,cAAc,CAAC,CAAqC;QAC3D,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC9B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,wBAAwB;IAExB,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC,OAAO,EAAE,GAAG;YAAE,OAAO;QAC1B,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACrF,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC,OAAO,EAAE,GAAG;YAAE,OAAO;QAC1B,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,iBAAiB;IAEjB,4EAA4E;IAC5E,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK;QAC/C,CAAC,CAAC,CAAC,GAAG,EAAE;YACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;YACnF,wEAAwE;YACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,cAAc,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACxE,MAAM,KAAK,GAAG,GAAG,GAAG,cAAc,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;YACtD,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;gBACjE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC/D,KAAK;aACN,CAAC;QACJ,CAAC,CAAC,EAAE;QACN,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACL,8BACE,cACE,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAE,EAAE,wBAAwB,EAAE,GAAG,KAAK,IAAI,EAAoB,CAAC,CAAC,CAAC,SAAS,YAEhG,eACE,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,2BAA2B,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,EAAE,EAC3F,IAAI,EAAC,OAAO,gBACA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,EACvG,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAClC,aAAa,EAAE,QAAQ,EACvB,aAAa,EAAE,iBAAiB,EAChC,WAAW,EAAE,eAAe,EAC5B,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,iBAAiB,aAE5B,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,YACxC,eACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,EAAE,SAAS,EAAE,aAAa,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,aAAa,IAAI,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAmB,aAElH,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7B,cAAK,SAAS,EAAC,uBAAuB,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,GAAI,CACxG,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,6BAA6B,GAAG,CAChD,EAEA,CAAC,MAAM;wCACN,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACzB,eAEE,SAAS,EAAC,wDAAwD,EAClE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,iBACN,MAAM,IAHb,WAAW,CAAC,CAAC,EAAE,EAAE,CAItB,CACH,CAAC,EAEH,CAAC,MAAM;wCACN,KAAK;wCACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACb,KAAC,WAAW,IAEV,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,UAAU,EAC7B,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,EAAE,EACzB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,eAAe,EAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,eAAe,IAPrB,CAAC,CAAC,EAAE,CAQT,CACH,CAAC,IACA,GACM,EAEX,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,CAC5B,cAAK,SAAS,EAAC,wBAAwB,EAAC,IAAI,EAAC,QAAQ,YAClD,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAC7D,eAAM,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,KAAK,gBAAY,SAAS,GAAG,CAC7E,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,6BAA6B,YACvC,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,uBAAuB,CAAC,GACtF,CACL,GACG,CACP,EAGD,eAAK,SAAS,EAAC,oCAAoC,EAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aAC3F,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,gBAClB,SAAS,EACpB,KAAK,EAAC,SAAS,EACf,QAAQ,EAAE,CAAC,KAAK,IAAI,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EACtD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,CAAE,CAAC,YAEjD,KAAC,UAAU,KAAG,GACP,EACT,gBAAM,SAAS,EAAC,4BAA4B,eAAW,QAAQ,aAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,SAClB,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,gBAClB,UAAU,EACrB,KAAK,EAAC,UAAU,EAChB,QAAQ,EAAE,CAAC,KAAK,IAAI,SAAS,IAAI,CAAC,EAClC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,CAAE,CAAC,YAEjD,KAAC,WAAW,KAAG,GACR,IACL,EAEN,eAAK,SAAS,EAAC,kCAAkC,EAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aACzF,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,mBAAmB,gBAAY,UAAU,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,YAC9I,KAAC,YAAY,KAAG,GACT,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,mBAAmB,gBAAY,OAAO,EAAC,KAAK,EAAC,OAAO,EAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,YACrI,KAAC,SAAS,KAAG,GACN,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,mBAAmB,gBAAY,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,YACvI,KAAC,UAAU,KAAG,GACP,IACL,EAKN,eAAK,SAAS,EAAC,kBAAkB,EAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aACxE,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,UAAU,IAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,QAAQ,EAAE,QAAQ,GAAI,GAC1I,CACP,EACD,eAAK,SAAS,EAAC,mBAAmB,aAChC,eAAK,SAAS,EAAC,iBAAiB,aAC9B,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,gBAAgB,EAC1B,QAAQ,EAAE,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,EACrC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,0BAA0B,UAAU,UAAU,CAAC,CAAC,CAAC,SAAS,EACzE,OAAO,EAAE,SAAS,aAElB,KAAC,OAAO,KAAG,kBAEJ,EACT,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gBAAgB,EAAC,QAAQ,EAAE,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,aACxG,KAAC,eAAe,KAAG,qBAEZ,IACL,EAEN,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,iBAAiB,gBACf,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,EACpD,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,EAC/C,QAAQ,EAAE,CAAC,UAAU,EACrB,OAAO,EAAE,GAAG,EAAE;gDACZ,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;gDACnB,MAAM,CAAC,IAAI,CAAC,CAAC;4CACf,CAAC,YAEA,MAAM,CAAC,CAAC,CAAC,KAAC,iBAAiB,KAAG,CAAC,CAAC,CAAC,KAAC,cAAc,KAAG,GAC7C,IACL,IACF,EAEL,OAAO,IAAI,QAAQ,IAAI,CACtB,eACE,SAAS,EAAE,0BAA0B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,EAAE,EAAE,EAC7F,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAC/C,IAAI,EAAC,QAAQ,gBACD,UAAU,QAAQ,CAAC,MAAM,EAAE,EACvC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aAEzC,eAAK,SAAS,EAAC,gCAAgC,aAC7C,gBAAM,SAAS,EAAC,+BAA+B,wBAAS,QAAQ,CAAC,MAAM,IAAQ,EAC/E,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,gBAClB,sBAAsB,EACjC,KAAK,EAAC,sBAAsB,EAC5B,QAAQ,EAAE,QAAQ,IAAI,CAAC,QAAQ,EAC/B,OAAO,EAAE,KAAK,YAEd,KAAC,eAAe,KAAG,GACZ,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,gBAClB,eAAe,EAC1B,KAAK,EAAC,eAAe,EACrB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,YAEf,KAAC,UAAU,KAAG,GACP,IACL,EACN,mBACE,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,IAAI,EACX,IAAI,EAAE,CAAC,EACP,WAAW,EAAC,0BAA0B,gBAC1B,0BAA0B,QAAQ,CAAC,MAAM,EAAE,EACvD,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACxC,SAAS,EAAE,cAAc,GACzB,IACE,CACP,IACG,GAEF,EAGL,QAAQ,IAAI,OAAO,CAAC,GAAG,IAAI,CAC1B,KAAC,aAAa,IAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,GAAI,CACjF,IACA,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,mGAAmG;AACnG,MAAM,cAAc,GAAG,EAAE,CAAC;AAG1B,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAElD,2HAA2H;AAC3H,SAAS,WAAW,CAAC,EACnB,MAAM,EACN,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,SAAS,GASV;IACC,MAAM,IAAI,GAAG,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC;IACvC,OAAO,CACL,eACE,SAAS,EAAE,yBAAyB,QAAQ,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,EAAE,EACzI,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,aAEvB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,gBAC3B,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,sBAAsB,uDAAuD,kBAC5H,QAAQ,EACtB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EACpD,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC/B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,GACtC,EACF,eAAM,SAAS,EAAC,uBAAuB,iBAAa,MAAM,YACvD,MAAM,CAAC,MAAM,GACT,EACN,QAAQ;gBACP,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACtB,eAEE,SAAS,EAAE,kDAAkD,MAAM,EAAE,iBACzD,MAAM,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAH/C,MAAM,CAIX,CACH,CAAC,IACA,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,CAAa;IAC7B,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG;QACzB,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG;QACxB,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG;QAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG;QAChC,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;KAC5B,CAAC;AACrB,CAAC;AAED,yGAAyG;AACzG,SAAS,aAAa,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAqD;IAC7F,MAAM,QAAQ,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAmC,CAAC;QAC5D,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,eACE,SAAS,EAAC,kCAAkC,EAC5C,IAAI,EAAC,QAAQ,gBACF,MAAM,gBACN,gBAAgB,EAC3B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACf,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACvB,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBAC3B,wCAAwC;gBACxC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC,aAED,cAAK,SAAS,EAAC,gCAAgC,EAAC,IAAI,EAAC,cAAc,EAAC,OAAO,EAAE,OAAO,GAAI,EACxF,eAAK,SAAS,EAAC,gCAAgC,aAC7C,cAAK,SAAS,EAAC,yBAAyB,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAI,EAC/D,iBAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,4BAA4B,gBAAY,UAAU,EAAC,OAAO,EAAE,OAAO,YAChH,KAAC,eAAe,KAAG,GACZ,IACL,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
- import type { ModelOption, Result } from "@chai-ui/core";
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
@@ -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,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA2DzD,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,sCAwVjB"}
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"}