@slowcook-ai/review-overlay 0.11.0 → 0.13.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/dist/primitives.d.ts +4 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +9 -0
- package/dist/primitives.js.map +1 -0
- package/dist/react/breadcrumbs.d.ts +14 -0
- package/dist/react/breadcrumbs.d.ts.map +1 -0
- package/dist/react/breadcrumbs.js +51 -0
- package/dist/react/breadcrumbs.js.map +1 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/review-shell.d.ts +78 -0
- package/dist/react/review-shell.d.ts.map +1 -0
- package/dist/react/review-shell.js +261 -0
- package/dist/react/review-shell.js.map +1 -0
- package/dist/react/review-widget.d.ts +6 -36
- package/dist/react/review-widget.d.ts.map +1 -1
- package/dist/react/review-widget.js +3 -172
- package/dist/react/review-widget.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ReviewShell, localStorageStore, type ReviewShellProps, type ReviewComment, type ReviewCommentMeta, type CommentStore, type Corner, } from "./react/review-shell.js";
|
|
2
|
+
export { usePrefersDark, detectPageDark, pillTheme, sheetTheme } from "./react/theme.js";
|
|
3
|
+
export { installBreadcrumbRecorder, breadcrumbs, pushBreadcrumb, clearBreadcrumbs, type Breadcrumb } from "./react/breadcrumbs.js";
|
|
4
|
+
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,MAAM,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// ── @slowcook-ai/review-overlay/primitives ──────────────────────────────────
|
|
2
|
+
// The SHELL PRIMITIVES: generic, workflow-free review-surface building blocks.
|
|
3
|
+
// OSS-specific shells (the vibe/plate LCR overlay, the Refine ReviewWidget)
|
|
4
|
+
// and external consumers (dash's RefinePill → pm-/brand-assistant loop) build
|
|
5
|
+
// on these. Nothing here knows about GitHub, PRs, stories, or agents.
|
|
6
|
+
export { ReviewShell, localStorageStore, } from "./react/review-shell.js";
|
|
7
|
+
export { usePrefersDark, detectPageDark, pillTheme, sheetTheme } from "./react/theme.js";
|
|
8
|
+
export { installBreadcrumbRecorder, breadcrumbs, pushBreadcrumb, clearBreadcrumbs } from "./react/breadcrumbs.js";
|
|
9
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,sEAAsE;AACtE,OAAO,EACL,WAAW,EACX,iBAAiB,GAMlB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAmB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Breadcrumb {
|
|
2
|
+
t: number;
|
|
3
|
+
kind: "fetch" | "error" | "route" | "mark";
|
|
4
|
+
msg: string;
|
|
5
|
+
status?: number;
|
|
6
|
+
requestId?: string;
|
|
7
|
+
ms?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function pushBreadcrumb(b: Omit<Breadcrumb, "t">): void;
|
|
10
|
+
export declare function breadcrumbs(): Breadcrumb[];
|
|
11
|
+
export declare function clearBreadcrumbs(): void;
|
|
12
|
+
/** install once — patches fetch + console.error + history. Idempotent. */
|
|
13
|
+
export declare function installBreadcrumbRecorder(): void;
|
|
14
|
+
//# sourceMappingURL=breadcrumbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/react/breadcrumbs.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,IAAI,CAG7D;AAED,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAAqB;AAChE,wBAAgB,gBAAgB,IAAI,IAAI,CAAc;AAEtD,0EAA0E;AAC1E,wBAAgB,yBAAyB,IAAI,IAAI,CA8BhD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const RING = 80;
|
|
2
|
+
let buf = [];
|
|
3
|
+
let installed = false;
|
|
4
|
+
export function pushBreadcrumb(b) {
|
|
5
|
+
buf.push({ t: Date.now(), ...b });
|
|
6
|
+
if (buf.length > RING)
|
|
7
|
+
buf = buf.slice(-RING);
|
|
8
|
+
}
|
|
9
|
+
export function breadcrumbs() { return [...buf]; }
|
|
10
|
+
export function clearBreadcrumbs() { buf = []; }
|
|
11
|
+
/** install once — patches fetch + console.error + history. Idempotent. */
|
|
12
|
+
export function installBreadcrumbRecorder() {
|
|
13
|
+
if (installed || typeof window === "undefined")
|
|
14
|
+
return;
|
|
15
|
+
installed = true;
|
|
16
|
+
const origFetch = window.fetch.bind(window);
|
|
17
|
+
window.fetch = async (...args) => {
|
|
18
|
+
const started = Date.now();
|
|
19
|
+
const url = typeof args[0] === "string" ? args[0] : args[0].url ?? String(args[0]);
|
|
20
|
+
const method = (args[1]?.method ?? (typeof args[0] !== "string" ? args[0].method : "GET") ?? "GET").toUpperCase();
|
|
21
|
+
try {
|
|
22
|
+
const res = await origFetch(...args);
|
|
23
|
+
// only breadcrumb our own API (avoid noise from assets/3rd-party)
|
|
24
|
+
if (/\/(dash-)?api\//.test(url)) {
|
|
25
|
+
pushBreadcrumb({ kind: "fetch", msg: `${method} ${path(url)}`, status: res.status, requestId: res.headers.get("x-request-id") ?? undefined, ms: Date.now() - started });
|
|
26
|
+
}
|
|
27
|
+
return res;
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
pushBreadcrumb({ kind: "fetch", msg: `${method} ${path(url)} — network error`, ms: Date.now() - started });
|
|
31
|
+
throw e;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const origErr = console.error.bind(console);
|
|
35
|
+
console.error = (...a) => { try {
|
|
36
|
+
pushBreadcrumb({ kind: "error", msg: a.map(String).join(" ").slice(0, 300) });
|
|
37
|
+
}
|
|
38
|
+
catch { /* ignore */ } origErr(...a); };
|
|
39
|
+
const record = () => pushBreadcrumb({ kind: "route", msg: location.pathname + location.search });
|
|
40
|
+
const push = history.pushState.bind(history);
|
|
41
|
+
history.pushState = (...a) => { const r = push(...a); record(); return r; };
|
|
42
|
+
window.addEventListener("popstate", record);
|
|
43
|
+
record();
|
|
44
|
+
}
|
|
45
|
+
function path(url) { try {
|
|
46
|
+
return new URL(url, location.origin).pathname;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return url;
|
|
50
|
+
} }
|
|
51
|
+
//# sourceMappingURL=breadcrumbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumbs.js","sourceRoot":"","sources":["../../src/react/breadcrumbs.ts"],"names":[],"mappings":"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"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { SlowcookReviewOverlay, type SlowcookReviewOverlayProps } from "./overlay.js";
|
|
2
2
|
export { ReviewWidget, type ReviewWidgetProps, type ReviewComment, type Corner } from "./review-widget.js";
|
|
3
|
+
export { ReviewShell, localStorageStore, type ReviewShellProps, type ReviewCommentMeta, type CommentStore } from "./review-shell.js";
|
|
3
4
|
export { usePrefersDark, detectPageDark, pillTheme, sheetTheme } from "./theme.js";
|
|
4
5
|
export { useScenarioCommentStats, type UseScenarioCommentStatsArgs } from "./use-scenario-comment-stats.js";
|
|
5
6
|
export { useStoryMarker, readCurrentStory } from "./use-story-marker.js";
|
|
7
|
+
export { installBreadcrumbRecorder, breadcrumbs, pushBreadcrumb, clearBreadcrumbs, type Breadcrumb } from "./breadcrumbs.js";
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,KAAK,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrI,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,KAAK,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/react/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { SlowcookReviewOverlay } from "./overlay.js";
|
|
2
2
|
export { ReviewWidget } from "./review-widget.js";
|
|
3
|
+
export { ReviewShell, localStorageStore } from "./review-shell.js";
|
|
3
4
|
export { usePrefersDark, detectPageDark, pillTheme, sheetTheme } from "./theme.js";
|
|
4
5
|
export { useScenarioCommentStats } from "./use-scenario-comment-stats.js";
|
|
5
6
|
export { useStoryMarker, readCurrentStory } from "./use-story-marker.js";
|
|
7
|
+
export { installBreadcrumbRecorder, breadcrumbs, pushBreadcrumb, clearBreadcrumbs } from "./breadcrumbs.js";
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAmC,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,YAAY,EAA2D,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAoC,MAAM,iCAAiC,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAmC,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,YAAY,EAA2D,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAoE,MAAM,mBAAmB,CAAC;AACrI,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAoC,MAAM,iCAAiC,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type ReactNode, type JSX } from "react";
|
|
2
|
+
/** where comments persist — injectable; localStorage by default. */
|
|
3
|
+
export interface CommentStore {
|
|
4
|
+
load(): ReviewComment[];
|
|
5
|
+
save(comments: ReviewComment[]): void;
|
|
6
|
+
}
|
|
7
|
+
export declare const localStorageStore: (key: string) => CommentStore;
|
|
8
|
+
export interface ReviewComment {
|
|
9
|
+
id: string;
|
|
10
|
+
node: string;
|
|
11
|
+
label: string;
|
|
12
|
+
text: string;
|
|
13
|
+
author: string;
|
|
14
|
+
createdAt: number;
|
|
15
|
+
url?: string;
|
|
16
|
+
remoteId?: string | number;
|
|
17
|
+
}
|
|
18
|
+
/** 0.12.0 — external per-comment state supplied by the host (agent replies,
|
|
19
|
+
* lifecycle status like "applied"), keyed by comment id. */
|
|
20
|
+
export interface ReviewCommentMeta {
|
|
21
|
+
status?: string;
|
|
22
|
+
replies?: {
|
|
23
|
+
author: string;
|
|
24
|
+
text: string;
|
|
25
|
+
createdAt?: number;
|
|
26
|
+
}[];
|
|
27
|
+
url?: string;
|
|
28
|
+
}
|
|
29
|
+
export type Corner = "bottom-left" | "bottom-right" | "top-left" | "top-right";
|
|
30
|
+
export interface ReviewShellProps {
|
|
31
|
+
/** Gate (a): whether the current persona/user may review/chat here. When false
|
|
32
|
+
* the widget renders nothing. */
|
|
33
|
+
enabled?: boolean;
|
|
34
|
+
/** Gate (b): hide the widget when the page has NO reviewable context (no nodes
|
|
35
|
+
* carrying `anchorAttribute`). Default true — the pill only appears where there
|
|
36
|
+
* is actually something to review. */
|
|
37
|
+
requireTargets?: boolean;
|
|
38
|
+
/** Pill title, e.g. "Refine". */
|
|
39
|
+
title?: string;
|
|
40
|
+
/** Brand accent for the pill, markers, highlight (dash coral by default). */
|
|
41
|
+
accent?: string;
|
|
42
|
+
/** Pill glyph/icon. */
|
|
43
|
+
icon?: ReactNode;
|
|
44
|
+
/** Initial corner (draggable thereafter). */
|
|
45
|
+
corner?: Corner;
|
|
46
|
+
/** The two mode labels — [browse, comment]. */
|
|
47
|
+
toggleLabels?: [string, string];
|
|
48
|
+
/** Attribute carrying the semantic node id (default `data-review-node`). */
|
|
49
|
+
anchorAttribute?: string;
|
|
50
|
+
/** Attribute carrying the human label (default `data-review-label`). */
|
|
51
|
+
labelAttribute?: string;
|
|
52
|
+
author?: string;
|
|
53
|
+
/** comment persistence — inject your own; defaults to localStorage. */
|
|
54
|
+
store?: CommentStore;
|
|
55
|
+
accessory?: ReactNode;
|
|
56
|
+
/** 0.12.0 — transport hook: called when a comment is posted. May return a
|
|
57
|
+
* remote id/url (e.g. a GitHub issue) merged into the stored comment. */
|
|
58
|
+
onComment?: (c: ReviewComment) => void | Promise<void | {
|
|
59
|
+
url?: string;
|
|
60
|
+
remoteId?: string | number;
|
|
61
|
+
}>;
|
|
62
|
+
/** 0.12.0 — per-comment external state (replies/status), keyed by comment id. */
|
|
63
|
+
meta?: Record<string, ReviewCommentMeta>;
|
|
64
|
+
/** 0.12.0 — extra per-comment UI (e.g. a before/after diff toggle). */
|
|
65
|
+
renderCommentExtra?: (c: ReviewComment) => ReactNode;
|
|
66
|
+
/** 0.12.0 — sidebar footer slot (e.g. a final-approval action). */
|
|
67
|
+
sidebarFooter?: ReactNode;
|
|
68
|
+
/** 0.12.1 — first-appearance choreography: the pill is born CENTER-stage,
|
|
69
|
+
* and 1s later a deliberate meteor streaks across the page and strikes it;
|
|
70
|
+
* after a beat the pill settles to its corner. Runs ONCE (persisted under
|
|
71
|
+
* `storageKey`), honors prefers-reduced-motion, and any user interaction
|
|
72
|
+
* cuts straight to the settled state. */
|
|
73
|
+
intro?: {
|
|
74
|
+
storageKey?: string;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export declare function ReviewShell(props: ReviewShellProps): JSX.Element | null;
|
|
78
|
+
//# sourceMappingURL=review-shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-shell.d.ts","sourceRoot":"","sources":["../../src/react/review-shell.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAwC,KAAK,SAAS,EAAsB,KAAK,GAAG,EAA0C,MAAM,OAAO,CAAC;AAgBnJ,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,aAAa,EAAE,CAAC;IACxB,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;CACvC;AAED,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,YAG9C,CAAC;AAEH,MAAM,WAAW,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAAE;AAEtK;6DAC6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AACD,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAC/B;sCACkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;2CAEuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;8EAC0E;IAC1E,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IACtG,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,SAAS,CAAC;IACrD,mEAAmE;IACnE,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B;;;;8CAI0C;IAC1C,KAAK,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC;AAmDD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAoMvE"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// ReviewWidget — the context-free floating review shell, decoupled from the LCR
|
|
3
|
+
// overlay's EPSS/CSS-selector machinery. It anchors comments to SEMANTIC NODES
|
|
4
|
+
// (an attribute, default `data-review-node`) instead of DOM selectors, so it suits
|
|
5
|
+
// structured, mutating content (a PRD passage, an invariant, a budget knob) that
|
|
6
|
+
// re-renders and reorders. Same reusable abstractions as the LCR pill — floating +
|
|
7
|
+
// draggable chrome, a configurable mode toggle, anchored markers + a sidebar list,
|
|
8
|
+
// an accessory slot, host-theme awareness — minus anything mock/EPSS-specific.
|
|
9
|
+
//
|
|
10
|
+
// First consumer: dash's coral "Refine" pill (PM requirement review). Next: QA on a
|
|
11
|
+
// real backend. The LCR mock-review overlay stays as-is for vibe/plate.
|
|
12
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
13
|
+
import { createPortal } from "react-dom";
|
|
14
|
+
import { usePrefersDark, sheetTheme } from "./theme.js";
|
|
15
|
+
import { clampPillPosition } from "../selector.js";
|
|
16
|
+
import { CometSheen } from "./comet.js";
|
|
17
|
+
import { installBreadcrumbRecorder } from "./breadcrumbs.js";
|
|
18
|
+
export const localStorageStore = (key) => ({
|
|
19
|
+
load: () => { try {
|
|
20
|
+
const r = localStorage.getItem(key);
|
|
21
|
+
return r ? JSON.parse(r) : [];
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return [];
|
|
25
|
+
} },
|
|
26
|
+
save: (v) => { try {
|
|
27
|
+
localStorage.setItem(key, JSON.stringify(v));
|
|
28
|
+
}
|
|
29
|
+
catch { /* ignore */ } },
|
|
30
|
+
});
|
|
31
|
+
const DASH_CORAL = "#FF6B6B";
|
|
32
|
+
const Z = 2147483000;
|
|
33
|
+
const attrSel = (attr, val) => `[${attr}="${val.replace(/(["\\])/g, "\\$1")}"]`;
|
|
34
|
+
const flash = (el, color) => { const prev = el.style.outline; el.style.transition = "outline .15s"; el.style.outline = `2px solid ${color}`; el.style.outlineOffset = "2px"; setTimeout(() => { el.style.outline = prev; }, 1100); };
|
|
35
|
+
const ago = (t) => { const s = Math.floor((Date.now() - t) / 1000); if (s < 60)
|
|
36
|
+
return "just now"; if (s < 3600)
|
|
37
|
+
return `${Math.floor(s / 60)}m ago`; if (s < 86400)
|
|
38
|
+
return `${Math.floor(s / 3600)}h ago`; return `${Math.floor(s / 86400)}d ago`; };
|
|
39
|
+
/** 0.12.1 — the intro meteor: a DELIBERATE streak from the upper-left sky to
|
|
40
|
+
* the pill's heart, with a tapering glow trail and a strike burst. Pure CSS
|
|
41
|
+
* motion-path animation; deterministic (no randomness — it AIMS). */
|
|
42
|
+
function IntroMeteor({ target, accent }) {
|
|
43
|
+
const w = typeof window !== "undefined" ? window.innerWidth : 1200;
|
|
44
|
+
const start = { x: -140, y: Math.round((typeof window !== "undefined" ? window.innerHeight : 800) * 0.06) };
|
|
45
|
+
// one gentle arc: control point above the direct line for a falling feel
|
|
46
|
+
const cp = { x: Math.round((start.x + target.x) / 2 + w * 0.06), y: Math.max(-40, Math.round(Math.min(start.y, target.y) - 120)) };
|
|
47
|
+
const path = `M ${start.x} ${start.y} Q ${cp.x} ${cp.y} ${target.x} ${target.y}`;
|
|
48
|
+
const anim = `
|
|
49
|
+
@keyframes rs-meteor-fly { 0% { offset-distance: 0%; opacity: 0; } 8% { opacity: 1; } 88% { opacity: 1; } 100% { offset-distance: 100%; opacity: 0; } }
|
|
50
|
+
@keyframes rs-meteor-trail { 0% { stroke-dashoffset: 1000; opacity: 0; } 10% { opacity: .9; } 70% { opacity: .55; } 100% { stroke-dashoffset: 0; opacity: 0; } }
|
|
51
|
+
@keyframes rs-strike-ring { 0% { transform: translate(-50%,-50%) scale(.2); opacity: .95; } 100% { transform: translate(-50%,-50%) scale(3.4); opacity: 0; } }
|
|
52
|
+
@keyframes rs-strike-glow { 0% { opacity: 0; } 12% { opacity: .9; } 100% { opacity: 0; } }`;
|
|
53
|
+
return (_jsxs("div", { "aria-hidden": true, style: { position: "fixed", inset: 0, pointerEvents: "none", zIndex: Z + 8, overflow: "hidden" }, children: [_jsx("style", { children: anim }), _jsxs("svg", { width: "100%", height: "100%", style: { position: "absolute", inset: 0 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "rs-meteor-grad", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [_jsx("stop", { offset: "0%", stopColor: accent, stopOpacity: "0" }), _jsx("stop", { offset: "70%", stopColor: accent, stopOpacity: "0.55" }), _jsx("stop", { offset: "100%", stopColor: "#fff", stopOpacity: "0.95" })] }) }), _jsx("path", { d: path, fill: "none", stroke: "url(#rs-meteor-grad)", strokeWidth: 3.5, strokeLinecap: "round", strokeDasharray: "1000", style: { animation: "rs-meteor-trail 1.05s cubic-bezier(.5,0,.9,.6) forwards" } })] }), _jsx("div", { style: {
|
|
54
|
+
position: "absolute", width: 14, height: 14, borderRadius: 999, background: "#fff",
|
|
55
|
+
boxShadow: `0 0 10px 3px #fff, 0 0 26px 12px ${accent}, 0 0 70px 30px ${accent}55`,
|
|
56
|
+
offsetPath: `path('${path}')`, offsetRotate: "0deg",
|
|
57
|
+
animation: "rs-meteor-fly 1.05s cubic-bezier(.5,0,.9,.6) forwards",
|
|
58
|
+
} }), _jsx("div", { style: { position: "absolute", left: target.x, top: target.y, width: 56, height: 56, borderRadius: 999, border: `2.5px solid ${accent}`, transform: "translate(-50%,-50%) scale(.2)", opacity: 0, animation: "rs-strike-ring .75s ease-out 1s forwards" } }), _jsx("div", { style: { position: "absolute", left: target.x, top: target.y, width: 120, height: 120, borderRadius: 999, transform: "translate(-50%,-50%)", background: `radial-gradient(circle, ${accent}66 0%, transparent 70%)`, opacity: 0, animation: "rs-strike-glow .9s ease-out 1s forwards" } })] }));
|
|
59
|
+
}
|
|
60
|
+
export function ReviewShell(props) {
|
|
61
|
+
const { enabled = true, requireTargets = true, title = "Refine", accent = DASH_CORAL, icon = "✎", onComment, meta, renderCommentExtra, sidebarFooter, intro, store = localStorageStore("review-shell-comments"), corner = "bottom-left", toggleLabels = ["Read", "Comment"], anchorAttribute = "data-review-node", labelAttribute = "data-review-label", author = "PM", accessory, } = props;
|
|
62
|
+
const pillRef = useRef(null);
|
|
63
|
+
const dark = usePrefersDark();
|
|
64
|
+
const S = sheetTheme(dark);
|
|
65
|
+
const [comments, setComments] = useState(() => (typeof window !== "undefined" ? store.load() : []));
|
|
66
|
+
const persist = (next) => { setComments(next); store.save(next); };
|
|
67
|
+
const [mode, setMode] = useState("read");
|
|
68
|
+
const [listOpen, setListOpen] = useState(false);
|
|
69
|
+
const [hover, setHover] = useState(null);
|
|
70
|
+
const [composer, setComposer] = useState(null);
|
|
71
|
+
const [pos, setPos] = useState(null);
|
|
72
|
+
const [, setTick] = useState(0);
|
|
73
|
+
// 0.12.1 first-appearance intro: idle → staged (center) → strike (meteor) → settling → done
|
|
74
|
+
const introKey = intro?.storageKey ?? "review-shell-intro-seen";
|
|
75
|
+
const reduceMotion = typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
76
|
+
const wantsIntro = !!intro && !reduceMotion && (() => { try {
|
|
77
|
+
return !localStorage.getItem(introKey);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return false;
|
|
81
|
+
} })();
|
|
82
|
+
const [introPhase, setIntroPhase] = useState(wantsIntro ? "staged" : "done");
|
|
83
|
+
const finishIntro = () => {
|
|
84
|
+
try {
|
|
85
|
+
localStorage.setItem(introKey, String(Date.now()));
|
|
86
|
+
}
|
|
87
|
+
catch { /* ignore */ }
|
|
88
|
+
setIntroPhase("done");
|
|
89
|
+
};
|
|
90
|
+
const sel = `[${anchorAttribute}]`;
|
|
91
|
+
const isSelf = (el) => !!el?.closest?.("[data-review-widget]");
|
|
92
|
+
useEffect(() => { installBreadcrumbRecorder(); }, []);
|
|
93
|
+
// Initial pill position: center-stage during the intro, else the chosen corner.
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (pos || typeof window === "undefined")
|
|
96
|
+
return;
|
|
97
|
+
const m = 16, w = 250, h = 44;
|
|
98
|
+
if (introPhase === "staged") {
|
|
99
|
+
setPos({ x: Math.round(window.innerWidth / 2 - w / 2), y: Math.round(window.innerHeight / 2 - h / 2) });
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const x = corner.includes("left") ? m : window.innerWidth - w - m;
|
|
103
|
+
const y = corner.includes("top") ? m : window.innerHeight - h - m;
|
|
104
|
+
setPos({ x, y });
|
|
105
|
+
}, [corner, pos, introPhase]);
|
|
106
|
+
// intro choreography: 1s on stage → the meteor strikes (1.05s flight) →
|
|
107
|
+
// a beat to admire → settle to the corner.
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if (introPhase === "staged") {
|
|
110
|
+
const t = setTimeout(() => setIntroPhase("strike"), 1000);
|
|
111
|
+
return () => clearTimeout(t);
|
|
112
|
+
}
|
|
113
|
+
if (introPhase === "strike") {
|
|
114
|
+
const t = setTimeout(() => setIntroPhase("settling"), 2400);
|
|
115
|
+
return () => clearTimeout(t);
|
|
116
|
+
}
|
|
117
|
+
if (introPhase === "settling") {
|
|
118
|
+
const m = 16, w = 250, h = 44;
|
|
119
|
+
const x = corner.includes("left") ? m : window.innerWidth - w - m;
|
|
120
|
+
const y = corner.includes("top") ? m : window.innerHeight - h - m;
|
|
121
|
+
setPos({ x, y });
|
|
122
|
+
const t = setTimeout(() => finishIntro(), 800);
|
|
123
|
+
return () => clearTimeout(t);
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
127
|
+
}, [introPhase, corner]);
|
|
128
|
+
// Keep the pill on-screen if the window resizes smaller (0.10.1).
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
if (typeof window === "undefined")
|
|
131
|
+
return;
|
|
132
|
+
const onResize = () => setPos((p) => (p ? clampToViewport(p) : p));
|
|
133
|
+
window.addEventListener("resize", onResize);
|
|
134
|
+
return () => window.removeEventListener("resize", onResize);
|
|
135
|
+
}, []);
|
|
136
|
+
// Comment-mode interactions: hover-highlight a node, click to open the composer.
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
if (!enabled || mode !== "comment") {
|
|
139
|
+
setHover(null);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const move = (e) => {
|
|
143
|
+
if (isSelf(e.target)) {
|
|
144
|
+
setHover(null);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const el = e.target?.closest?.(sel);
|
|
148
|
+
setHover(el ? { rect: el.getBoundingClientRect(), label: el.getAttribute(labelAttribute) || el.getAttribute(anchorAttribute) || "" } : null);
|
|
149
|
+
};
|
|
150
|
+
const click = (e) => {
|
|
151
|
+
if (isSelf(e.target))
|
|
152
|
+
return;
|
|
153
|
+
const el = e.target?.closest?.(sel);
|
|
154
|
+
if (!el)
|
|
155
|
+
return;
|
|
156
|
+
e.preventDefault();
|
|
157
|
+
e.stopPropagation();
|
|
158
|
+
setComposer({ node: el.getAttribute(anchorAttribute), label: el.getAttribute(labelAttribute) || el.getAttribute(anchorAttribute) });
|
|
159
|
+
};
|
|
160
|
+
document.addEventListener("pointermove", move, true);
|
|
161
|
+
document.addEventListener("click", click, true);
|
|
162
|
+
return () => { document.removeEventListener("pointermove", move, true); document.removeEventListener("click", click, true); };
|
|
163
|
+
}, [enabled, mode, sel, anchorAttribute, labelAttribute]);
|
|
164
|
+
// Reposition markers on scroll/resize/route (interval covers SPA nav).
|
|
165
|
+
useEffect(() => {
|
|
166
|
+
if (!enabled)
|
|
167
|
+
return;
|
|
168
|
+
const bump = () => setTick((t) => t + 1);
|
|
169
|
+
window.addEventListener("scroll", bump, true);
|
|
170
|
+
window.addEventListener("resize", bump);
|
|
171
|
+
const iv = setInterval(bump, 600);
|
|
172
|
+
return () => { window.removeEventListener("scroll", bump, true); window.removeEventListener("resize", bump); clearInterval(iv); };
|
|
173
|
+
}, [enabled]);
|
|
174
|
+
const byNode = useMemo(() => {
|
|
175
|
+
const m = new Map();
|
|
176
|
+
for (const c of comments) {
|
|
177
|
+
const a = m.get(c.node);
|
|
178
|
+
if (a)
|
|
179
|
+
a.push(c);
|
|
180
|
+
else
|
|
181
|
+
m.set(c.node, [c]);
|
|
182
|
+
}
|
|
183
|
+
return m;
|
|
184
|
+
}, [comments]);
|
|
185
|
+
if (!enabled || typeof document === "undefined")
|
|
186
|
+
return null;
|
|
187
|
+
// Gate (b): nothing to review on this page → don't show the pill. (Recomputed on
|
|
188
|
+
// the marker-scan tick, so it follows SPA navigation.)
|
|
189
|
+
if (requireTargets && !document.querySelector(sel))
|
|
190
|
+
return null;
|
|
191
|
+
// Live marker rects (recomputed each render; `setTick` drives re-render).
|
|
192
|
+
const markers = [];
|
|
193
|
+
byNode.forEach((list, node) => {
|
|
194
|
+
const el = document.querySelector(attrSel(anchorAttribute, node));
|
|
195
|
+
if (!el)
|
|
196
|
+
return;
|
|
197
|
+
const r = el.getBoundingClientRect();
|
|
198
|
+
if (r.width === 0 && r.height === 0)
|
|
199
|
+
return;
|
|
200
|
+
markers.push({ node, count: list.length, x: r.right - 7, y: r.top + 7 });
|
|
201
|
+
});
|
|
202
|
+
const addComment = (text) => {
|
|
203
|
+
if (!composer || !text.trim())
|
|
204
|
+
return;
|
|
205
|
+
const c = { id: `c_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`, node: composer.node, label: composer.label, text: text.trim(), author, createdAt: Date.now() };
|
|
206
|
+
persist([c, ...comments]);
|
|
207
|
+
setComposer(null);
|
|
208
|
+
if (onComment) {
|
|
209
|
+
void Promise.resolve(onComment(c)).then((ref) => {
|
|
210
|
+
if (ref && (ref.url || ref.remoteId !== undefined)) {
|
|
211
|
+
setComments((cur) => { const next = cur.map((x) => x.id === c.id ? { ...x, url: ref.url, remoteId: ref.remoteId } : x); store.save(next); return next; });
|
|
212
|
+
}
|
|
213
|
+
}).catch(() => { });
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const gotoNode = (node) => {
|
|
217
|
+
const el = document.querySelector(attrSel(anchorAttribute, node));
|
|
218
|
+
if (el) {
|
|
219
|
+
el.scrollIntoView({ block: "center", behavior: "smooth" });
|
|
220
|
+
flash(el, accent);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
const seg = (active) => ({ padding: "3px 10px", borderRadius: 7, fontSize: 12, fontWeight: 700, cursor: "pointer", background: active ? accent : "transparent", color: active ? "#1a1a1a" : S.fgDim });
|
|
224
|
+
return createPortal(_jsxs("div", { "data-review-widget": "", style: { position: "fixed", inset: 0, zIndex: Z, pointerEvents: "none" }, children: [introPhase === "strike" && pos && (_jsx(IntroMeteor, { target: { x: pos.x + 125, y: pos.y + 22 }, accent: accent })), mode === "comment" && hover && (_jsx("div", { style: { position: "fixed", left: hover.rect.left - 3, top: hover.rect.top - 3, width: hover.rect.width + 6, height: hover.rect.height + 6, border: `2px solid ${accent}`, borderRadius: 6, background: `${accent}14`, pointerEvents: "none", zIndex: Z + 1 }, children: _jsxs("span", { style: { position: "absolute", top: -20, left: 0, fontSize: 10, fontWeight: 700, color: "#1a1a1a", background: accent, borderRadius: 4, padding: "1px 6px", whiteSpace: "nowrap" }, children: ["\uD83D\uDCAC ", hover.label] }) })), markers.map((m) => (_jsx("button", { onClick: () => { setListOpen(true); gotoNode(m.node); }, style: { position: "fixed", left: m.x, top: m.y, transform: "translate(-50%, -50%)", width: 18, height: 18, borderRadius: 999, background: accent, color: "#1a1a1a", border: "1.5px solid #fff", fontSize: 10, fontWeight: 800, cursor: "pointer", pointerEvents: "auto", zIndex: Z + 1, display: "flex", alignItems: "center", justifyContent: "center", boxShadow: "0 2px 6px rgba(0,0,0,.35)" }, title: `${m.count} comment${m.count > 1 ? "s" : ""}`, children: m.count }, m.node))), pos && (_jsxs("div", { ref: pillRef, style: { position: "fixed", left: pos.x, top: pos.y, display: "flex", alignItems: "center", gap: 8, padding: "6px 8px 6px 10px", borderRadius: 999, background: S.sheet, border: `1px solid ${S.border}`,
|
|
225
|
+
boxShadow: introPhase === "strike" ? `0 6px 20px rgba(0,0,0,.35), 0 0 34px 6px ${accent}88` : "0 6px 20px rgba(0,0,0,.35)",
|
|
226
|
+
pointerEvents: "auto", zIndex: Z + 9, fontFamily: "system-ui, sans-serif", userSelect: "none",
|
|
227
|
+
transform: introPhase === "staged" || introPhase === "strike" ? "scale(1.25)" : "scale(1)",
|
|
228
|
+
transition: introPhase === "settling" ? "left .8s cubic-bezier(.22,.8,.36,1), top .8s cubic-bezier(.22,.8,.36,1), transform .8s cubic-bezier(.22,.8,.36,1), box-shadow .8s ease" : introPhase === "strike" ? "box-shadow .25s ease 1s, transform .3s cubic-bezier(.34,1.56,.64,1) 1s" : undefined,
|
|
229
|
+
}, onPointerDownCapture: () => { if (introPhase !== "done")
|
|
230
|
+
finishIntro(); }, children: [_jsx(CometSheen, { pillRef: pillRef, radius: 999 }), _jsxs("span", { onPointerDown: (e) => startDrag(e, pos, setPos), title: "Drag to move", style: { display: "flex", alignItems: "center", gap: 6, cursor: "grab", color: S.fg }, children: [_jsx("span", { style: { width: 18, height: 18, borderRadius: 999, background: accent, color: "#1a1a1a", display: "flex", alignItems: "center", justifyContent: "center", fontSize: 11, fontWeight: 800 }, children: icon }), _jsx("span", { style: { fontSize: 12.5, fontWeight: 800 }, children: title })] }), _jsxs("span", { style: { display: "flex", gap: 2, background: dark ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.05)", borderRadius: 9, padding: 2 }, children: [_jsx("button", { onClick: () => setMode("read"), style: seg(mode === "read"), children: toggleLabels[0] }), _jsx("button", { onClick: () => setMode("comment"), style: seg(mode === "comment"), children: toggleLabels[1] })] }), _jsxs("button", { onClick: () => setListOpen((o) => !o), title: "All comments", style: { display: "flex", alignItems: "center", gap: 4, background: "transparent", border: `1px solid ${S.border}`, borderRadius: 8, color: S.fgDim, cursor: "pointer", fontSize: 12, padding: "3px 8px" }, children: ["\uD83D\uDDE8 ", comments.length] }), accessory] })), composer && _jsx(Composer, { label: composer.label, S: S, accent: accent, onSubmit: addComment, onCancel: () => setComposer(null) }), listOpen && _jsx(Sidebar, { comments: comments, title: title, S: S, accent: accent, onClose: () => setListOpen(false), onDelete: (id) => persist(comments.filter((c) => c.id !== id)), onGoto: gotoNode, meta: meta, renderExtra: renderCommentExtra, footer: sidebarFooter })] }), document.body);
|
|
231
|
+
}
|
|
232
|
+
// 0.10.1 — keep a pill inside the viewport. A fixed pill dragged (or left by a
|
|
233
|
+
// resize) off-screen is unreachable — you can't scroll to fixed chrome. Clamp so a
|
|
234
|
+
// sliver always stays visible and grabbable.
|
|
235
|
+
function clampToViewport(p) {
|
|
236
|
+
if (typeof window === "undefined")
|
|
237
|
+
return p;
|
|
238
|
+
const { left, top } = clampPillPosition(p.x, p.y, window.innerWidth, window.innerHeight);
|
|
239
|
+
return { x: left, y: top };
|
|
240
|
+
}
|
|
241
|
+
function startDrag(e, pos, setPos) {
|
|
242
|
+
e.preventDefault();
|
|
243
|
+
const sx = e.clientX, sy = e.clientY, ox = pos.x, oy = pos.y;
|
|
244
|
+
const move = (ev) => setPos(clampToViewport({ x: ox + ev.clientX - sx, y: oy + ev.clientY - sy }));
|
|
245
|
+
const up = () => { document.removeEventListener("pointermove", move); document.removeEventListener("pointerup", up); };
|
|
246
|
+
document.addEventListener("pointermove", move);
|
|
247
|
+
document.addEventListener("pointerup", up);
|
|
248
|
+
}
|
|
249
|
+
function Composer({ label, S, accent, onSubmit, onCancel }) {
|
|
250
|
+
const [text, setText] = useState("");
|
|
251
|
+
return (_jsx("div", { style: { position: "fixed", inset: 0, background: "rgba(0,0,0,0.35)", display: "flex", alignItems: "center", justifyContent: "center", pointerEvents: "auto", zIndex: Z + 5 }, onClick: onCancel, children: _jsxs("div", { onClick: (e) => e.stopPropagation(), style: { width: 420, maxWidth: "92vw", background: S.sheet, color: S.fg, border: `1px solid ${S.border}`, borderRadius: 12, padding: 16, boxShadow: "0 20px 60px rgba(0,0,0,.45)", fontFamily: "system-ui, sans-serif" }, children: [_jsxs("div", { style: { fontSize: 11, fontWeight: 700, textTransform: "uppercase", letterSpacing: 0.4, color: accent, marginBottom: 8 }, children: ["Comment on \u00B7 ", label] }), _jsx("textarea", { autoFocus: true, value: text, onChange: (e) => setText(e.target.value), rows: 4, placeholder: "What should change here? (an AI will draft the edit \u2014 coming next)", style: { width: "100%", boxSizing: "border-box", fontSize: 13.5, padding: 10, borderRadius: 8, border: `1px solid ${S.inputBorder}`, background: S.input, color: S.fg, fontFamily: "inherit", resize: "vertical" } }), _jsxs("div", { style: { display: "flex", gap: 8, justifyContent: "flex-end", marginTop: 10 }, children: [_jsx("button", { onClick: onCancel, style: { padding: "7px 14px", borderRadius: 8, border: `1px solid ${S.border}`, background: "transparent", color: S.fgDim, cursor: "pointer", font: "inherit", fontWeight: 600 }, children: "Cancel" }), _jsx("button", { onClick: () => onSubmit(text), disabled: !text.trim(), style: { padding: "7px 14px", borderRadius: 8, border: "none", background: accent, color: "#1a1a1a", cursor: text.trim() ? "pointer" : "not-allowed", opacity: text.trim() ? 1 : 0.5, font: "inherit", fontWeight: 700 }, children: "Comment" })] })] }) }));
|
|
252
|
+
}
|
|
253
|
+
function Sidebar({ comments, title, S, accent, onClose, onDelete, onGoto, meta, renderExtra, footer }) {
|
|
254
|
+
return (_jsxs("div", { style: { position: "fixed", top: 0, right: 0, bottom: 0, width: 340, maxWidth: "90vw", background: S.sheet, color: S.fg, borderLeft: `1px solid ${S.border}`, boxShadow: "-12px 0 40px rgba(0,0,0,.4)", pointerEvents: "auto", zIndex: Z + 4, display: "flex", flexDirection: "column", fontFamily: "system-ui, sans-serif", fontSize: 13 }, children: [_jsxs("div", { style: { padding: "13px 16px", borderBottom: `1px solid ${S.border}`, display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [_jsxs("span", { style: { fontWeight: 700 }, children: [title, " comments (", comments.length, ")"] }), _jsx("button", { onClick: onClose, "aria-label": "Close", style: { background: "transparent", border: "none", color: S.fgDim, cursor: "pointer", fontSize: 18, lineHeight: 1 }, children: "\u00D7" })] }), _jsx("div", { style: { overflow: "auto", flex: 1, padding: 10 }, children: comments.length === 0 ? (_jsxs("div", { style: { padding: 16, opacity: 0.6, textAlign: "center", fontSize: 12 }, children: ["No comments yet. Switch to ", _jsx("b", { style: { color: accent }, children: "Comment" }), " and click a labelled part of the page."] })) : comments.map((c) => (_jsxs("div", { style: { background: "rgba(127,127,127,0.06)", border: `1px solid ${S.border}`, borderRadius: 8, padding: 10, marginBottom: 8 }, children: [_jsxs("button", { onClick: () => onGoto(c.node), style: { display: "block", textAlign: "left", width: "100%", background: "transparent", border: "none", cursor: "pointer", color: accent, fontSize: 10.5, fontWeight: 700, textTransform: "uppercase", letterSpacing: 0.3, padding: 0, marginBottom: 4 }, children: ["\uD83D\uDCCD ", c.label] }), _jsx("div", { style: { fontSize: 13, color: S.fg, lineHeight: 1.4 }, children: c.text }), (() => {
|
|
255
|
+
const m = meta?.[c.id];
|
|
256
|
+
if (!m && !c.url)
|
|
257
|
+
return null;
|
|
258
|
+
return (_jsxs("div", { style: { marginTop: 6 }, children: [(m?.status || c.url || m?.url) && (_jsxs("div", { style: { display: "flex", gap: 6, alignItems: "center", marginBottom: 4 }, children: [m?.status && _jsx("span", { style: { fontSize: 9.5, fontWeight: 800, textTransform: "uppercase", letterSpacing: 0.4, padding: "1px 7px", borderRadius: 999, background: m.status === "applied" ? "#1f6f3f" : "rgba(127,127,127,.2)", color: m.status === "applied" ? "#c6f0d4" : S.fgDim }, children: m.status }), (m?.url ?? c.url) && _jsx("a", { href: m?.url ?? c.url, target: "_blank", rel: "noreferrer", style: { fontSize: 10.5, color: accent, textDecoration: "none" }, children: "thread \u2197" })] })), (m?.replies ?? []).map((r, i) => (_jsxs("div", { style: { borderLeft: `2px solid ${accent}55`, paddingLeft: 8, marginBottom: 5, fontSize: 12, lineHeight: 1.45, color: S.fg }, children: [_jsxs("span", { style: { fontSize: 10, color: S.fgDim }, children: ["@", r.author] }), _jsx("br", {}), r.text] }, i)))] }));
|
|
259
|
+
})(), renderExtra?.(c), _jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginTop: 6 }, children: [_jsxs("span", { style: { fontSize: 10.5, color: S.fgDim }, children: ["@", c.author, " \u00B7 ", ago(c.createdAt)] }), _jsx("button", { onClick: () => onDelete(c.id), style: { background: "transparent", border: "none", color: S.fgDim, cursor: "pointer", fontSize: 11 }, children: "Delete" })] })] }, c.id))) }), footer && _jsx("div", { style: { padding: 12, borderTop: `1px solid ${S.border}` }, children: footer })] }));
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=review-shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-shell.js","sourceRoot":"","sources":["../../src/react/review-shell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
text: string;
|
|
7
|
-
author: string;
|
|
8
|
-
createdAt: number;
|
|
9
|
-
}
|
|
10
|
-
export type Corner = "bottom-left" | "bottom-right" | "top-left" | "top-right";
|
|
11
|
-
export interface ReviewWidgetProps {
|
|
12
|
-
/** Gate (a): whether the current persona/user may review/chat here. When false
|
|
13
|
-
* the widget renders nothing. */
|
|
14
|
-
enabled?: boolean;
|
|
15
|
-
/** Gate (b): hide the widget when the page has NO reviewable context (no nodes
|
|
16
|
-
* carrying `anchorAttribute`). Default true — the pill only appears where there
|
|
17
|
-
* is actually something to review. */
|
|
18
|
-
requireTargets?: boolean;
|
|
19
|
-
/** Pill title, e.g. "Refine". */
|
|
20
|
-
title?: string;
|
|
21
|
-
/** Brand accent for the pill, markers, highlight (dash coral by default). */
|
|
22
|
-
accent?: string;
|
|
23
|
-
/** Pill glyph/icon. */
|
|
24
|
-
icon?: ReactNode;
|
|
25
|
-
/** Initial corner (draggable thereafter). */
|
|
26
|
-
corner?: Corner;
|
|
27
|
-
/** The two mode labels — [browse, comment]. */
|
|
28
|
-
toggleLabels?: [string, string];
|
|
29
|
-
/** Attribute carrying the semantic node id (default `data-review-node`). */
|
|
30
|
-
anchorAttribute?: string;
|
|
31
|
-
/** Attribute carrying the human label (default `data-review-label`). */
|
|
32
|
-
labelAttribute?: string;
|
|
33
|
-
author?: string;
|
|
34
|
-
/** localStorage key for the (v1) internal comment store. */
|
|
1
|
+
import type { JSX } from "react";
|
|
2
|
+
import { type ReviewShellProps } from "./review-shell.js";
|
|
3
|
+
export type { ReviewComment, ReviewCommentMeta, Corner, CommentStore } from "./review-shell.js";
|
|
4
|
+
export interface ReviewWidgetProps extends Omit<ReviewShellProps, "store"> {
|
|
5
|
+
/** localStorage key for the internal comment store. */
|
|
35
6
|
storageKey?: string;
|
|
36
|
-
accessory?: ReactNode;
|
|
37
7
|
}
|
|
38
|
-
export declare function ReviewWidget(
|
|
8
|
+
export declare function ReviewWidget({ storageKey, ...rest }: ReviewWidgetProps): JSX.Element | null;
|
|
39
9
|
//# sourceMappingURL=review-widget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-widget.d.ts","sourceRoot":"","sources":["../../src/react/review-widget.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review-widget.d.ts","sourceRoot":"","sources":["../../src/react/review-widget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAkC,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1F,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEhG,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACxE,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,UAA8C,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAE/H"}
|
|
@@ -1,174 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// (an attribute, default `data-review-node`) instead of DOM selectors, so it suits
|
|
5
|
-
// structured, mutating content (a PRD passage, an invariant, a budget knob) that
|
|
6
|
-
// re-renders and reorders. Same reusable abstractions as the LCR pill — floating +
|
|
7
|
-
// draggable chrome, a configurable mode toggle, anchored markers + a sidebar list,
|
|
8
|
-
// an accessory slot, host-theme awareness — minus anything mock/EPSS-specific.
|
|
9
|
-
//
|
|
10
|
-
// First consumer: dash's coral "Refine" pill (PM requirement review). Next: QA on a
|
|
11
|
-
// real backend. The LCR mock-review overlay stays as-is for vibe/plate.
|
|
12
|
-
import { useEffect, useMemo, useRef, useState } from "react";
|
|
13
|
-
import { createPortal } from "react-dom";
|
|
14
|
-
import { usePrefersDark, sheetTheme } from "./theme.js";
|
|
15
|
-
import { clampPillPosition } from "../selector.js";
|
|
16
|
-
import { CometSheen } from "./comet.js";
|
|
17
|
-
const DASH_CORAL = "#FF6B6B";
|
|
18
|
-
const Z = 2147483000;
|
|
19
|
-
const load = (k) => { try {
|
|
20
|
-
const r = localStorage.getItem(k);
|
|
21
|
-
return r ? JSON.parse(r) : [];
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return [];
|
|
25
|
-
} };
|
|
26
|
-
const save = (k, v) => { try {
|
|
27
|
-
localStorage.setItem(k, JSON.stringify(v));
|
|
28
|
-
}
|
|
29
|
-
catch { /* ignore */ } };
|
|
30
|
-
const attrSel = (attr, val) => `[${attr}="${val.replace(/(["\\])/g, "\\$1")}"]`;
|
|
31
|
-
const flash = (el, color) => { const prev = el.style.outline; el.style.transition = "outline .15s"; el.style.outline = `2px solid ${color}`; el.style.outlineOffset = "2px"; setTimeout(() => { el.style.outline = prev; }, 1100); };
|
|
32
|
-
const ago = (t) => { const s = Math.floor((Date.now() - t) / 1000); if (s < 60)
|
|
33
|
-
return "just now"; if (s < 3600)
|
|
34
|
-
return `${Math.floor(s / 60)}m ago`; if (s < 86400)
|
|
35
|
-
return `${Math.floor(s / 3600)}h ago`; return `${Math.floor(s / 86400)}d ago`; };
|
|
36
|
-
export function ReviewWidget(props) {
|
|
37
|
-
const { enabled = true, requireTargets = true, title = "Refine", accent = DASH_CORAL, icon = "✎", corner = "bottom-left", toggleLabels = ["Read", "Comment"], anchorAttribute = "data-review-node", labelAttribute = "data-review-label", author = "PM", storageKey = "slowcook.review-widget.comments", accessory, } = props;
|
|
38
|
-
const pillRef = useRef(null);
|
|
39
|
-
const dark = usePrefersDark();
|
|
40
|
-
const S = sheetTheme(dark);
|
|
41
|
-
const [comments, setComments] = useState(() => (typeof window !== "undefined" ? load(storageKey) : []));
|
|
42
|
-
const persist = (next) => { setComments(next); save(storageKey, next); };
|
|
43
|
-
const [mode, setMode] = useState("read");
|
|
44
|
-
const [listOpen, setListOpen] = useState(false);
|
|
45
|
-
const [hover, setHover] = useState(null);
|
|
46
|
-
const [composer, setComposer] = useState(null);
|
|
47
|
-
const [pos, setPos] = useState(null);
|
|
48
|
-
const [, setTick] = useState(0);
|
|
49
|
-
const sel = `[${anchorAttribute}]`;
|
|
50
|
-
const isSelf = (el) => !!el?.closest?.("[data-review-widget]");
|
|
51
|
-
// Initial pill position from the chosen corner.
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
if (pos || typeof window === "undefined")
|
|
54
|
-
return;
|
|
55
|
-
const m = 16, w = 250, h = 44;
|
|
56
|
-
const x = corner.includes("left") ? m : window.innerWidth - w - m;
|
|
57
|
-
const y = corner.includes("top") ? m : window.innerHeight - h - m;
|
|
58
|
-
setPos({ x, y });
|
|
59
|
-
}, [corner, pos]);
|
|
60
|
-
// Keep the pill on-screen if the window resizes smaller (0.10.1).
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
if (typeof window === "undefined")
|
|
63
|
-
return;
|
|
64
|
-
const onResize = () => setPos((p) => (p ? clampToViewport(p) : p));
|
|
65
|
-
window.addEventListener("resize", onResize);
|
|
66
|
-
return () => window.removeEventListener("resize", onResize);
|
|
67
|
-
}, []);
|
|
68
|
-
// Comment-mode interactions: hover-highlight a node, click to open the composer.
|
|
69
|
-
useEffect(() => {
|
|
70
|
-
if (!enabled || mode !== "comment") {
|
|
71
|
-
setHover(null);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const move = (e) => {
|
|
75
|
-
if (isSelf(e.target)) {
|
|
76
|
-
setHover(null);
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const el = e.target?.closest?.(sel);
|
|
80
|
-
setHover(el ? { rect: el.getBoundingClientRect(), label: el.getAttribute(labelAttribute) || el.getAttribute(anchorAttribute) || "" } : null);
|
|
81
|
-
};
|
|
82
|
-
const click = (e) => {
|
|
83
|
-
if (isSelf(e.target))
|
|
84
|
-
return;
|
|
85
|
-
const el = e.target?.closest?.(sel);
|
|
86
|
-
if (!el)
|
|
87
|
-
return;
|
|
88
|
-
e.preventDefault();
|
|
89
|
-
e.stopPropagation();
|
|
90
|
-
setComposer({ node: el.getAttribute(anchorAttribute), label: el.getAttribute(labelAttribute) || el.getAttribute(anchorAttribute) });
|
|
91
|
-
};
|
|
92
|
-
document.addEventListener("pointermove", move, true);
|
|
93
|
-
document.addEventListener("click", click, true);
|
|
94
|
-
return () => { document.removeEventListener("pointermove", move, true); document.removeEventListener("click", click, true); };
|
|
95
|
-
}, [enabled, mode, sel, anchorAttribute, labelAttribute]);
|
|
96
|
-
// Reposition markers on scroll/resize/route (interval covers SPA nav).
|
|
97
|
-
useEffect(() => {
|
|
98
|
-
if (!enabled)
|
|
99
|
-
return;
|
|
100
|
-
const bump = () => setTick((t) => t + 1);
|
|
101
|
-
window.addEventListener("scroll", bump, true);
|
|
102
|
-
window.addEventListener("resize", bump);
|
|
103
|
-
const iv = setInterval(bump, 600);
|
|
104
|
-
return () => { window.removeEventListener("scroll", bump, true); window.removeEventListener("resize", bump); clearInterval(iv); };
|
|
105
|
-
}, [enabled]);
|
|
106
|
-
const byNode = useMemo(() => {
|
|
107
|
-
const m = new Map();
|
|
108
|
-
for (const c of comments) {
|
|
109
|
-
const a = m.get(c.node);
|
|
110
|
-
if (a)
|
|
111
|
-
a.push(c);
|
|
112
|
-
else
|
|
113
|
-
m.set(c.node, [c]);
|
|
114
|
-
}
|
|
115
|
-
return m;
|
|
116
|
-
}, [comments]);
|
|
117
|
-
if (!enabled || typeof document === "undefined")
|
|
118
|
-
return null;
|
|
119
|
-
// Gate (b): nothing to review on this page → don't show the pill. (Recomputed on
|
|
120
|
-
// the marker-scan tick, so it follows SPA navigation.)
|
|
121
|
-
if (requireTargets && !document.querySelector(sel))
|
|
122
|
-
return null;
|
|
123
|
-
// Live marker rects (recomputed each render; `setTick` drives re-render).
|
|
124
|
-
const markers = [];
|
|
125
|
-
byNode.forEach((list, node) => {
|
|
126
|
-
const el = document.querySelector(attrSel(anchorAttribute, node));
|
|
127
|
-
if (!el)
|
|
128
|
-
return;
|
|
129
|
-
const r = el.getBoundingClientRect();
|
|
130
|
-
if (r.width === 0 && r.height === 0)
|
|
131
|
-
return;
|
|
132
|
-
markers.push({ node, count: list.length, x: r.right - 7, y: r.top + 7 });
|
|
133
|
-
});
|
|
134
|
-
const addComment = (text) => {
|
|
135
|
-
if (!composer || !text.trim())
|
|
136
|
-
return;
|
|
137
|
-
persist([{ id: `c_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`, node: composer.node, label: composer.label, text: text.trim(), author, createdAt: Date.now() }, ...comments]);
|
|
138
|
-
setComposer(null);
|
|
139
|
-
};
|
|
140
|
-
const gotoNode = (node) => {
|
|
141
|
-
const el = document.querySelector(attrSel(anchorAttribute, node));
|
|
142
|
-
if (el) {
|
|
143
|
-
el.scrollIntoView({ block: "center", behavior: "smooth" });
|
|
144
|
-
flash(el, accent);
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
const seg = (active) => ({ padding: "3px 10px", borderRadius: 7, fontSize: 12, fontWeight: 700, cursor: "pointer", background: active ? accent : "transparent", color: active ? "#1a1a1a" : S.fgDim });
|
|
148
|
-
return createPortal(_jsxs("div", { "data-review-widget": "", style: { position: "fixed", inset: 0, zIndex: Z, pointerEvents: "none" }, children: [mode === "comment" && hover && (_jsx("div", { style: { position: "fixed", left: hover.rect.left - 3, top: hover.rect.top - 3, width: hover.rect.width + 6, height: hover.rect.height + 6, border: `2px solid ${accent}`, borderRadius: 6, background: `${accent}14`, pointerEvents: "none", zIndex: Z + 1 }, children: _jsxs("span", { style: { position: "absolute", top: -20, left: 0, fontSize: 10, fontWeight: 700, color: "#1a1a1a", background: accent, borderRadius: 4, padding: "1px 6px", whiteSpace: "nowrap" }, children: ["\uD83D\uDCAC ", hover.label] }) })), markers.map((m) => (_jsx("button", { onClick: () => { setListOpen(true); gotoNode(m.node); }, style: { position: "fixed", left: m.x, top: m.y, transform: "translate(-50%, -50%)", width: 18, height: 18, borderRadius: 999, background: accent, color: "#1a1a1a", border: "1.5px solid #fff", fontSize: 10, fontWeight: 800, cursor: "pointer", pointerEvents: "auto", zIndex: Z + 1, display: "flex", alignItems: "center", justifyContent: "center", boxShadow: "0 2px 6px rgba(0,0,0,.35)" }, title: `${m.count} comment${m.count > 1 ? "s" : ""}`, children: m.count }, m.node))), pos && (_jsxs("div", { ref: pillRef, style: { position: "fixed", left: pos.x, top: pos.y, display: "flex", alignItems: "center", gap: 8, padding: "6px 8px 6px 10px", borderRadius: 999, background: S.sheet, border: `1px solid ${S.border}`, boxShadow: "0 6px 20px rgba(0,0,0,.35)", pointerEvents: "auto", zIndex: Z + 2, fontFamily: "system-ui, sans-serif", userSelect: "none" }, children: [_jsx(CometSheen, { pillRef: pillRef, radius: 999 }), _jsxs("span", { onPointerDown: (e) => startDrag(e, pos, setPos), title: "Drag to move", style: { display: "flex", alignItems: "center", gap: 6, cursor: "grab", color: S.fg }, children: [_jsx("span", { style: { width: 18, height: 18, borderRadius: 999, background: accent, color: "#1a1a1a", display: "flex", alignItems: "center", justifyContent: "center", fontSize: 11, fontWeight: 800 }, children: icon }), _jsx("span", { style: { fontSize: 12.5, fontWeight: 800 }, children: title })] }), _jsxs("span", { style: { display: "flex", gap: 2, background: dark ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.05)", borderRadius: 9, padding: 2 }, children: [_jsx("button", { onClick: () => setMode("read"), style: seg(mode === "read"), children: toggleLabels[0] }), _jsx("button", { onClick: () => setMode("comment"), style: seg(mode === "comment"), children: toggleLabels[1] })] }), _jsxs("button", { onClick: () => setListOpen((o) => !o), title: "All comments", style: { display: "flex", alignItems: "center", gap: 4, background: "transparent", border: `1px solid ${S.border}`, borderRadius: 8, color: S.fgDim, cursor: "pointer", fontSize: 12, padding: "3px 8px" }, children: ["\uD83D\uDDE8 ", comments.length] }), accessory] })), composer && _jsx(Composer, { label: composer.label, S: S, accent: accent, onSubmit: addComment, onCancel: () => setComposer(null) }), listOpen && _jsx(Sidebar, { comments: comments, title: title, S: S, accent: accent, onClose: () => setListOpen(false), onDelete: (id) => persist(comments.filter((c) => c.id !== id)), onGoto: gotoNode })] }), document.body);
|
|
149
|
-
}
|
|
150
|
-
// 0.10.1 — keep a pill inside the viewport. A fixed pill dragged (or left by a
|
|
151
|
-
// resize) off-screen is unreachable — you can't scroll to fixed chrome. Clamp so a
|
|
152
|
-
// sliver always stays visible and grabbable.
|
|
153
|
-
function clampToViewport(p) {
|
|
154
|
-
if (typeof window === "undefined")
|
|
155
|
-
return p;
|
|
156
|
-
const { left, top } = clampPillPosition(p.x, p.y, window.innerWidth, window.innerHeight);
|
|
157
|
-
return { x: left, y: top };
|
|
158
|
-
}
|
|
159
|
-
function startDrag(e, pos, setPos) {
|
|
160
|
-
e.preventDefault();
|
|
161
|
-
const sx = e.clientX, sy = e.clientY, ox = pos.x, oy = pos.y;
|
|
162
|
-
const move = (ev) => setPos(clampToViewport({ x: ox + ev.clientX - sx, y: oy + ev.clientY - sy }));
|
|
163
|
-
const up = () => { document.removeEventListener("pointermove", move); document.removeEventListener("pointerup", up); };
|
|
164
|
-
document.addEventListener("pointermove", move);
|
|
165
|
-
document.addEventListener("pointerup", up);
|
|
166
|
-
}
|
|
167
|
-
function Composer({ label, S, accent, onSubmit, onCancel }) {
|
|
168
|
-
const [text, setText] = useState("");
|
|
169
|
-
return (_jsx("div", { style: { position: "fixed", inset: 0, background: "rgba(0,0,0,0.35)", display: "flex", alignItems: "center", justifyContent: "center", pointerEvents: "auto", zIndex: Z + 5 }, onClick: onCancel, children: _jsxs("div", { onClick: (e) => e.stopPropagation(), style: { width: 420, maxWidth: "92vw", background: S.sheet, color: S.fg, border: `1px solid ${S.border}`, borderRadius: 12, padding: 16, boxShadow: "0 20px 60px rgba(0,0,0,.45)", fontFamily: "system-ui, sans-serif" }, children: [_jsxs("div", { style: { fontSize: 11, fontWeight: 700, textTransform: "uppercase", letterSpacing: 0.4, color: accent, marginBottom: 8 }, children: ["Comment on \u00B7 ", label] }), _jsx("textarea", { autoFocus: true, value: text, onChange: (e) => setText(e.target.value), rows: 4, placeholder: "What should change here? (an AI will draft the edit \u2014 coming next)", style: { width: "100%", boxSizing: "border-box", fontSize: 13.5, padding: 10, borderRadius: 8, border: `1px solid ${S.inputBorder}`, background: S.input, color: S.fg, fontFamily: "inherit", resize: "vertical" } }), _jsxs("div", { style: { display: "flex", gap: 8, justifyContent: "flex-end", marginTop: 10 }, children: [_jsx("button", { onClick: onCancel, style: { padding: "7px 14px", borderRadius: 8, border: `1px solid ${S.border}`, background: "transparent", color: S.fgDim, cursor: "pointer", font: "inherit", fontWeight: 600 }, children: "Cancel" }), _jsx("button", { onClick: () => onSubmit(text), disabled: !text.trim(), style: { padding: "7px 14px", borderRadius: 8, border: "none", background: accent, color: "#1a1a1a", cursor: text.trim() ? "pointer" : "not-allowed", opacity: text.trim() ? 1 : 0.5, font: "inherit", fontWeight: 700 }, children: "Comment" })] })] }) }));
|
|
170
|
-
}
|
|
171
|
-
function Sidebar({ comments, title, S, accent, onClose, onDelete, onGoto }) {
|
|
172
|
-
return (_jsxs("div", { style: { position: "fixed", top: 0, right: 0, bottom: 0, width: 340, maxWidth: "90vw", background: S.sheet, color: S.fg, borderLeft: `1px solid ${S.border}`, boxShadow: "-12px 0 40px rgba(0,0,0,.4)", pointerEvents: "auto", zIndex: Z + 4, display: "flex", flexDirection: "column", fontFamily: "system-ui, sans-serif", fontSize: 13 }, children: [_jsxs("div", { style: { padding: "13px 16px", borderBottom: `1px solid ${S.border}`, display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [_jsxs("span", { style: { fontWeight: 700 }, children: [title, " comments (", comments.length, ")"] }), _jsx("button", { onClick: onClose, "aria-label": "Close", style: { background: "transparent", border: "none", color: S.fgDim, cursor: "pointer", fontSize: 18, lineHeight: 1 }, children: "\u00D7" })] }), _jsx("div", { style: { overflow: "auto", flex: 1, padding: 10 }, children: comments.length === 0 ? (_jsxs("div", { style: { padding: 16, opacity: 0.6, textAlign: "center", fontSize: 12 }, children: ["No comments yet. Switch to ", _jsx("b", { style: { color: accent }, children: "Comment" }), " and click a labelled part of the page."] })) : comments.map((c) => (_jsxs("div", { style: { background: "rgba(127,127,127,0.06)", border: `1px solid ${S.border}`, borderRadius: 8, padding: 10, marginBottom: 8 }, children: [_jsxs("button", { onClick: () => onGoto(c.node), style: { display: "block", textAlign: "left", width: "100%", background: "transparent", border: "none", cursor: "pointer", color: accent, fontSize: 10.5, fontWeight: 700, textTransform: "uppercase", letterSpacing: 0.3, padding: 0, marginBottom: 4 }, children: ["\uD83D\uDCCD ", c.label] }), _jsx("div", { style: { fontSize: 13, color: S.fg, lineHeight: 1.4 }, children: c.text }), _jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginTop: 6 }, children: [_jsxs("span", { style: { fontSize: 10.5, color: S.fgDim }, children: ["@", c.author, " \u00B7 ", ago(c.createdAt)] }), _jsx("button", { onClick: () => onDelete(c.id), style: { background: "transparent", border: "none", color: S.fgDim, cursor: "pointer", fontSize: 11 }, children: "Delete" })] })] }, c.id))) })] }));
|
|
1
|
+
import { ReviewShell, localStorageStore } from "./review-shell.js";
|
|
2
|
+
export function ReviewWidget({ storageKey = "slowcook.review-widget.comments", ...rest }) {
|
|
3
|
+
return ReviewShell({ ...rest, store: localStorageStore(storageKey) });
|
|
173
4
|
}
|
|
174
5
|
//# sourceMappingURL=review-widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-widget.js","sourceRoot":"","sources":["../../src/react/review-widget.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,mFAAmF;AACnF,iFAAiF;AACjF,mFAAmF;AACnF,mFAAmF;AACnF,+EAA+E;AAC/E,EAAE;AACF,oFAAoF;AACpF,wEAAwE;AACxE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAwF,MAAM,OAAO,CAAC;AACnJ,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiCxC,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,MAAM,CAAC,GAAG,UAAU,CAAC;AAErB,MAAM,IAAI,GAAG,CAAC,CAAS,EAAmB,EAAE,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,OAAO,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC;AAAC,CAAC,CAAC,CAAC,CAAC;AACrK,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAkB,EAAE,EAAE,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/H,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC;AAChG,MAAM,KAAK,GAAG,CAAC,EAAe,EAAE,KAAa,EAAE,EAAE,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,aAAa,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1P,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;IAAE,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;IAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK;IAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE9P,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EACJ,OAAO,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,KAAK,GAAG,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,GAAG,GAAG,EACxF,MAAM,GAAG,aAAa,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1D,eAAe,GAAG,kBAAkB,EAAE,cAAc,GAAG,mBAAmB,EAC1E,MAAM,GAAG,IAAI,EAAE,UAAU,GAAG,iCAAiC,EAAE,SAAS,GACzE,GAAG,KAAK,CAAC;IACV,MAAM,OAAO,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzH,MAAM,OAAO,GAAG,CAAC,IAAqB,EAAE,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAqB,MAAM,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA0C,IAAI,CAAC,CAAC;IAClF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAyC,IAAI,CAAC,CAAC;IACvF,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAkC,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,IAAI,eAAe,GAAG,CAAC;IACnC,MAAM,MAAM,GAAG,CAAC,EAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,sBAAsB,CAAC,CAAC;IAE/E,gDAAgD;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QACjD,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAElB,kEAAkE;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,iFAAiF;IACjF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,CAAC,CAAe,EAAE,EAAE;YAC/B,IAAI,MAAM,CAAC,CAAC,CAAC,MAAiB,CAAC,EAAE,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC5D,MAAM,EAAE,GAAI,CAAC,CAAC,MAAkB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAuB,CAAC;YACvE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/I,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,CAAa,EAAE,EAAE;YAC9B,IAAI,MAAM,CAAC,CAAC,CAAC,MAAiB,CAAC;gBAAE,OAAO;YACxC,MAAM,EAAE,GAAI,CAAC,CAAC,MAAkB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAuB,CAAC;YACvE,IAAI,CAAC,EAAE;gBAAE,OAAO;YAChB,CAAC,CAAC,cAAc,EAAE,CAAC;YAAC,CAAC,CAAC,eAAe,EAAE,CAAC;YACxC,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,eAAe,CAAE,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,eAAe,CAAE,EAAE,CAAC,CAAC;QACxI,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACrD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;IAE1D,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,MAAM,CAAC,GAAG,IAAI,GAAG,EAA2B,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,CAAC;gBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;gBAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACjG,OAAO,CAAC,CAAC;IACX,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,IAAI,CAAC,OAAO,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC7D,iFAAiF;IACjF,uDAAuD;IACvD,IAAI,cAAc,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhE,0EAA0E;IAC1E,MAAM,OAAO,GAA4D,EAAE,CAAC;IAC5E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAuB,CAAC;QACxF,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;QACtC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC1L,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAuB,CAAC;QACxF,IAAI,EAAE,EAAE,CAAC;YAAC,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;IAC5F,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,MAAe,EAAiB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAE/N,OAAO,YAAY,CACjB,qCAAwB,EAAE,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,aAEhG,IAAI,KAAK,SAAS,IAAI,KAAK,IAAI,CAC9B,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,aAAa,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,YAChQ,gBAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,8BAAM,KAAK,CAAC,KAAK,IAAQ,GAC7M,CACP,EAGA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,iBAAqB,OAAO,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1E,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,uBAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,2BAA2B,EAAE,EAClY,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,YAAG,CAAC,CAAC,KAAK,IAFnD,CAAC,CAAC,IAAI,CAEuD,CAC3E,CAAC,EAGD,GAAG,IAAI,CACN,eAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,EAAE,aACnW,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAI,EAC7C,gBAAM,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,aAC/J,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,YAAG,IAAI,GAAQ,EAC9M,eAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,YAAG,KAAK,GAAQ,IAC3D,EACP,gBAAM,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,kBAAkB,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,aACrI,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,YAAG,YAAY,CAAC,CAAC,CAAC,GAAU,EAC/F,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,YAAG,YAAY,CAAC,CAAC,CAAC,GAAU,IAChG,EACP,kBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAC,cAAc,EACjE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,8BACtM,QAAQ,CAAC,MAAM,IACZ,EACR,SAAS,IACN,CACP,EAGA,QAAQ,IAAI,KAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAI,EAG9H,QAAQ,IAAI,KAAC,OAAO,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAI,IACjM,EACN,QAAQ,CAAC,IAAI,CACd,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,mFAAmF;AACnF,6CAA6C;AAC7C,SAAS,eAAe,CAAC,CAA2B;IAClD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACzF,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,SAAS,CAAC,CAAoB,EAAE,GAA6B,EAAE,MAA6C;IACnH,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,CAAC,EAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACjH,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvH,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAA4H;IAClL,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CACL,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,YACnM,eAAK,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,6BAA6B,EAAE,UAAU,EAAE,uBAAuB,EAAE,aAChQ,eAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,mCAAgB,KAAK,IAAO,EACzJ,mBAAU,SAAS,QAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,EAAC,yEAAoE,EAClK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAI,EACxN,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,aAChF,iBAAQ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,uBAAiB,EAC5N,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,wBAAkB,IACrS,IACF,GACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAuL;IAC7P,OAAO,CACL,eAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,uBAAuB,EAAE,QAAQ,EAAE,EAAE,EAAE,aAC9U,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,aACjJ,gBAAM,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAG,KAAK,iBAAa,QAAQ,CAAC,MAAM,SAAS,EAC7E,iBAAQ,OAAO,EAAE,OAAO,gBAAa,OAAO,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,uBAAY,IACzK,EACN,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,YACnD,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,4CAA6B,YAAG,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAa,+CAA6C,CAC/L,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtB,eAAgB,KAAK,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAC7I,kBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,8BAAM,CAAC,CAAC,KAAK,IAAU,EACtT,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,YAAG,CAAC,CAAC,IAAI,GAAO,EAC1E,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,aAClG,gBAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAI,CAAC,CAAC,MAAM,cAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAQ,EACxF,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,uBAAiB,IACzJ,KANE,CAAC,CAAC,EAAE,CAOR,CACP,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"review-widget.js","sourceRoot":"","sources":["../../src/react/review-widget.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAyB,MAAM,mBAAmB,CAAC;AAQ1F,MAAM,UAAU,YAAY,CAAC,EAAE,UAAU,GAAG,iCAAiC,EAAE,GAAG,IAAI,EAAqB;IACzG,OAAO,WAAW,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slowcook-ai/review-overlay",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "Floating review overlay for slowcook mock previews — element-anchored comments, screenshot, viewport metadata; submits to the mockup PR via PAT. Mounted into the mock app's root layout. Plate parses the comments back out for amendments.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "aminazar",
|
|
@@ -32,6 +32,10 @@
|
|
|
32
32
|
"./react": {
|
|
33
33
|
"types": "./dist/react/index.d.ts",
|
|
34
34
|
"import": "./dist/react/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./primitives": {
|
|
37
|
+
"types": "./dist/primitives.d.ts",
|
|
38
|
+
"import": "./dist/primitives.js"
|
|
35
39
|
}
|
|
36
40
|
},
|
|
37
41
|
"files": [
|
|
@@ -49,7 +53,7 @@
|
|
|
49
53
|
"jsdom": "^29.1.1",
|
|
50
54
|
"react": "^19.2.7",
|
|
51
55
|
"react-dom": "^19.2.7",
|
|
52
|
-
"@slowcook-ai/core": "^0.
|
|
56
|
+
"@slowcook-ai/core": "^0.17.0"
|
|
53
57
|
},
|
|
54
58
|
"publishConfig": {
|
|
55
59
|
"access": "public"
|