@graview/primitives 0.1.64 → 0.1.65

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 (127) hide show
  1. package/README.md +1 -1
  2. package/dist/app-bar.js +1 -1
  3. package/dist/app-bar.js.map +1 -1
  4. package/dist/chat.js +1 -1
  5. package/dist/chat.js.map +1 -1
  6. package/dist/find.js +3 -3
  7. package/dist/find.js.map +1 -1
  8. package/dist/first-look.js +1 -1
  9. package/dist/first-look.js.map +1 -1
  10. package/dist/here.d.ts +1 -1
  11. package/dist/here.js +2 -2
  12. package/dist/here.js.map +1 -1
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +4 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/inline-ai-menu.d.ts +4 -2
  18. package/dist/inline-ai-menu.d.ts.map +1 -1
  19. package/dist/inline-ai-menu.js +34 -8
  20. package/dist/inline-ai-menu.js.map +1 -1
  21. package/dist/kind-stop.d.ts.map +1 -1
  22. package/dist/kind-stop.js +204 -21
  23. package/dist/kind-stop.js.map +1 -1
  24. package/dist/lines-key.d.ts.map +1 -1
  25. package/dist/lines-key.js +22 -2
  26. package/dist/lines-key.js.map +1 -1
  27. package/dist/map-panel.js +98 -6
  28. package/dist/map-panel.js.map +1 -1
  29. package/dist/menu-rank.d.ts +25 -0
  30. package/dist/menu-rank.d.ts.map +1 -0
  31. package/dist/menu-rank.js +56 -0
  32. package/dist/menu-rank.js.map +1 -0
  33. package/dist/menu-told-door.d.ts +17 -0
  34. package/dist/menu-told-door.d.ts.map +1 -0
  35. package/dist/menu-told-door.js +49 -0
  36. package/dist/menu-told-door.js.map +1 -0
  37. package/dist/menu-told.d.ts +37 -0
  38. package/dist/menu-told.d.ts.map +1 -0
  39. package/dist/menu-told.js +66 -0
  40. package/dist/menu-told.js.map +1 -0
  41. package/dist/menu-words.d.ts +15 -0
  42. package/dist/menu-words.d.ts.map +1 -0
  43. package/dist/menu-words.js +28 -0
  44. package/dist/menu-words.js.map +1 -0
  45. package/dist/pages.d.ts +2 -0
  46. package/dist/pages.d.ts.map +1 -1
  47. package/dist/pages.js +2 -0
  48. package/dist/pages.js.map +1 -1
  49. package/dist/quick-ask-desk.d.ts +16 -0
  50. package/dist/quick-ask-desk.d.ts.map +1 -1
  51. package/dist/quick-ask-desk.js +20 -0
  52. package/dist/quick-ask-desk.js.map +1 -1
  53. package/dist/quick-ask-door.d.ts.map +1 -1
  54. package/dist/quick-ask-door.js +5 -0
  55. package/dist/quick-ask-door.js.map +1 -1
  56. package/dist/quick-ask-plan.d.ts +52 -0
  57. package/dist/quick-ask-plan.d.ts.map +1 -0
  58. package/dist/quick-ask-plan.js +112 -0
  59. package/dist/quick-ask-plan.js.map +1 -0
  60. package/dist/quick-ask.d.ts.map +1 -1
  61. package/dist/quick-ask.js +341 -19
  62. package/dist/quick-ask.js.map +1 -1
  63. package/dist/scene-css.d.ts.map +1 -1
  64. package/dist/scene-css.js +16 -6
  65. package/dist/scene-css.js.map +1 -1
  66. package/dist/scene-places.d.ts +3 -2
  67. package/dist/scene-places.d.ts.map +1 -1
  68. package/dist/scene-places.js +47 -8
  69. package/dist/scene-places.js.map +1 -1
  70. package/dist/scene.d.ts +2 -0
  71. package/dist/scene.d.ts.map +1 -1
  72. package/dist/scene.js +2 -0
  73. package/dist/scene.js.map +1 -1
  74. package/dist/section-better.d.ts +38 -0
  75. package/dist/section-better.d.ts.map +1 -0
  76. package/dist/section-better.js +411 -0
  77. package/dist/section-better.js.map +1 -0
  78. package/dist/section-door.d.ts +32 -0
  79. package/dist/section-door.d.ts.map +1 -0
  80. package/dist/section-door.js +32 -0
  81. package/dist/section-door.js.map +1 -0
  82. package/dist/section-menu.d.ts +18 -0
  83. package/dist/section-menu.d.ts.map +1 -0
  84. package/dist/section-menu.js +76 -0
  85. package/dist/section-menu.js.map +1 -0
  86. package/dist/section-outline.d.ts +8 -0
  87. package/dist/section-outline.d.ts.map +1 -0
  88. package/dist/section-outline.js +48 -0
  89. package/dist/section-outline.js.map +1 -0
  90. package/dist/section-words.d.ts +24 -0
  91. package/dist/section-words.d.ts.map +1 -0
  92. package/dist/section-words.js +91 -0
  93. package/dist/section-words.js.map +1 -0
  94. package/dist/shell.d.ts.map +1 -1
  95. package/dist/shell.js +2 -1
  96. package/dist/shell.js.map +1 -1
  97. package/dist/subject.js +2 -2
  98. package/dist/subject.js.map +1 -1
  99. package/dist/told-card.d.ts +66 -0
  100. package/dist/told-card.d.ts.map +1 -0
  101. package/dist/told-card.js +197 -0
  102. package/dist/told-card.js.map +1 -0
  103. package/dist/told-listed.d.ts +14 -0
  104. package/dist/told-listed.d.ts.map +1 -0
  105. package/dist/told-listed.js +46 -0
  106. package/dist/told-listed.js.map +1 -0
  107. package/dist/told-panel-door.d.ts +17 -0
  108. package/dist/told-panel-door.d.ts.map +1 -0
  109. package/dist/told-panel-door.js +6 -0
  110. package/dist/told-panel-door.js.map +1 -0
  111. package/dist/told-panel.d.ts +19 -0
  112. package/dist/told-panel.d.ts.map +1 -0
  113. package/dist/told-panel.js +83 -0
  114. package/dist/told-panel.js.map +1 -0
  115. package/dist/told-ui.d.ts +5 -0
  116. package/dist/told-ui.d.ts.map +1 -0
  117. package/dist/told-ui.js +12 -0
  118. package/dist/told-ui.js.map +1 -0
  119. package/dist/workbench/ai-entries.d.ts.map +1 -1
  120. package/dist/workbench/ai-entries.js +23 -2
  121. package/dist/workbench/ai-entries.js.map +1 -1
  122. package/dist/workbench/back-out.js +1 -1
  123. package/dist/workbench/back-out.js.map +1 -1
  124. package/dist/workbench/inspector.d.ts.map +1 -1
  125. package/dist/workbench/inspector.js +218 -18
  126. package/dist/workbench/inspector.js.map +1 -1
  127. package/package.json +6 -6
@@ -0,0 +1,411 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { layer } from "@graview/core";
3
+ import { compareViewRevision } from "@graview/core/revisions";
4
+ import { useGraview } from "@graview/react/provider";
5
+ import { sectionUnderNow, viewPlaceOf } from "@graview/react/drawing";
6
+ import { reviseSection } from "@graview/tools/section";
7
+ import { interactionId } from "@graview/tools/inline-ai";
8
+ import { retryingImport } from "@graview/core/retry";
9
+ import { lazyModule } from "@graview/react/provider";
10
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
11
+ import { boxOf, SectionOutline } from "./section-outline.js";
12
+ export { SectionOutline };
13
+ import { nameParts, partLines, placeOfSection } from "./section-words.js";
14
+ import { VISUALLY_HIDDEN } from "./primitives/measure.js";
15
+ /*
16
+ * WHAT WAS TOLD (Roadmap f-menu-learns): each revision offered is kept as a
17
+ * telling — the words, the view's section it was said on, the slot that
18
+ * wrote it and how long it took — and how it ended (kept, discarded, undone,
19
+ * refused), with the 👍/👎 strip at the card's foot as on the quick ask's.
20
+ * Fetched apart, never in the way of the card.
21
+ */
22
+ const toldCard = /* @__PURE__ */ lazyModule(retryingImport(() => import("./told-ui.js")));
23
+ const Rate = /* @__PURE__ */ toldCard.part((module, props) => _jsx(module.RateTelling, { ...props }), { quiet: true });
24
+ import "./frame.js"; // A door: tied to what the page drew first (TIED DOORS, packages/primitives/src/frame.ts).
25
+ export function SectionDrawn({ ask, open, close }) {
26
+ if (ask)
27
+ return _jsx(SectionCard, { ask: ask, close: close }, ask.at);
28
+ return open ? _jsx(SectionOutline, { elements: open }) : null;
29
+ }
30
+ const WIDTH = 360;
31
+ const GAP = 12;
32
+ /** The card's place: beside the box where the window has room, else under it, else over it. */
33
+ function placeBeside(card, box) {
34
+ const view = { width: document.documentElement.clientWidth || innerWidth, height: innerHeight };
35
+ const width = Math.min(WIDTH, view.width - 2 * GAP);
36
+ const height = card.getBoundingClientRect().height;
37
+ const clampTop = (wanted) => Math.max(GAP, Math.min(wanted, view.height - height - GAP));
38
+ let left = (view.width - width) / 2;
39
+ let top = clampTop(72);
40
+ if (box && box.width > 0) {
41
+ if (box.right + GAP + width <= view.width - GAP)
42
+ [left, top] = [box.right + GAP, clampTop(box.top)];
43
+ else if (box.left - GAP - width >= GAP)
44
+ [left, top] = [box.left - GAP - width, clampTop(box.top)];
45
+ else {
46
+ left = Math.max(GAP, Math.min(box.left, view.width - width - GAP));
47
+ top = box.bottom + GAP + height <= view.height - GAP ? box.bottom + GAP : clampTop(box.top - GAP - height);
48
+ }
49
+ }
50
+ card.style.left = `${Math.round(left)}px`;
51
+ card.style.top = `${Math.round(top)}px`;
52
+ card.style.width = `${Math.round(width)}px`;
53
+ }
54
+ /** What the view's place shows of a section now: its words, as a person reads them. */
55
+ const shownBy = (elements) => elements
56
+ .map((element) => element.innerText ?? element.textContent ?? "")
57
+ .join(" ")
58
+ .replace(/\s+/g, " ")
59
+ .trim();
60
+ /** A part read for its name: what it is, its classes, its words, where it stands. */
61
+ const readPart = (element) => {
62
+ const box = element.getBoundingClientRect();
63
+ return { tag: (element.getAttribute("data-graview-as") ?? element.localName).toLowerCase(), classes: [...element.classList], text: element.textContent ?? "", box: { left: box.left, top: box.top, width: box.width, height: box.height } };
64
+ };
65
+ /** The parts of a view's drawing a rectangle holds whole, the outermost of them; or the smallest part under a point. */
66
+ function partsIn(root, rect, point) {
67
+ const all = [...root.querySelectorAll("*")].filter((element) => {
68
+ const box = element.getBoundingClientRect();
69
+ return box.width > 0 && box.height > 0;
70
+ });
71
+ if (point) {
72
+ const under = all.filter((element) => {
73
+ const box = element.getBoundingClientRect();
74
+ return rect.left >= box.left && rect.left <= box.right && rect.top >= box.top && rect.top <= box.bottom;
75
+ });
76
+ // The innermost part under the point that has words or a class of its own.
77
+ const deepest = under.filter((element) => !under.some((other) => other !== element && element.contains(other)));
78
+ const picked = deepest[0];
79
+ if (!picked)
80
+ return [];
81
+ for (let at = picked; at && at !== root; at = at.parentElement)
82
+ if (at.classList.length > 0 || /^(h[1-6]|li|a|button|img|p|article|section)$/.test(at.localName))
83
+ return [at];
84
+ return [picked];
85
+ }
86
+ const inside = all.filter((element) => {
87
+ const box = element.getBoundingClientRect();
88
+ return box.left >= rect.left - 2 && box.right <= rect.right + 2 && box.top >= rect.top - 2 && box.bottom <= rect.bottom + 2;
89
+ });
90
+ let outermost = inside.filter((element) => !inside.some((other) => other !== element && other.contains(element)));
91
+ /* One wrapper around several parts the rectangle holds: the parts, which is what a person dragged over ("the three day columns"). */
92
+ while (outermost.length === 1) {
93
+ const children = [...outermost[0].children].filter((child) => inside.includes(child));
94
+ if (children.length < 2)
95
+ break;
96
+ outermost = children;
97
+ }
98
+ return outermost;
99
+ }
100
+ /** The words of a revision's findings that keep it from being offered, and the notes said with it. */
101
+ function judged(handle, before, live, liveRefused, draft, source) {
102
+ const after = draft.drawing();
103
+ const revision = compareViewRevision({ source: before, css: live.css, ...(live.root ? { drawing: live.root } : {}), ...(live.height !== undefined ? { height: live.height } : {}) }, { source, css: after.css, ...(after.root ? { drawing: after.root } : {}), ...(after.height !== undefined ? { height: after.height } : {}) });
104
+ const findings = [];
105
+ for (const one of revision.unstyled)
106
+ findings.push(`The class “${one.class}” is still drawn and no rule styles it now.`);
107
+ for (const one of revision.sectionsMissing)
108
+ findings.push(`“${one.name}” is not drawn any more.`);
109
+ for (const refused of draft.refused())
110
+ if (!liveRefused.includes(refused))
111
+ findings.push(refused);
112
+ const notes = [];
113
+ const height = revision.height;
114
+ if (height && Math.abs(height.ratio) >= 0.1)
115
+ notes.push(`The view is ${Math.abs(Math.round(height.change))} px ${height.change > 0 ? "taller" : "shorter"} (${Math.round(height.before)} → ${Math.round(height.after)}).`);
116
+ void handle;
117
+ return { findings, notes };
118
+ }
119
+ export function SectionCard({ ask, close }) {
120
+ const { ai, aiDesk, principal, keptViews } = useGraview();
121
+ const [section, setSection] = useState(ask.section);
122
+ const place = placeOfSection(ask.section);
123
+ const handle = useRef(viewPlaceOf(place));
124
+ const draft = useRef(null);
125
+ const card = useRef(null);
126
+ const field = useRef(null);
127
+ const [phase, setPhase] = useState(ask.mode === "highlight" ? { at: "highlighting" } : ask.mode === "describe" ? { at: "asking" } : { at: "working" });
128
+ const [words, setWords] = useState("");
129
+ const original = useRef(undefined);
130
+ /* The telling of the revision on offer, kept with the host's door (`ai.told`), and how it ended. */
131
+ const [telling, setTelling] = useState(null);
132
+ const tellingNow = useRef(null);
133
+ const ended = useCallback((outcome) => {
134
+ const now = tellingNow.current;
135
+ if (now && ai.told)
136
+ void toldCard.load().then((module) => module.changeTelling(ai.told, now.id, { outcome }), () => undefined);
137
+ }, [ai.told]);
138
+ /** Keeps what was said and decided as a telling: offered as a draft ("previewed"), or refused. */
139
+ const tell = useCallback((words, on, refused, stages, ms, interaction) => {
140
+ const keeps = ai.told;
141
+ if (!keeps)
142
+ return;
143
+ const slot = stages.at(-1)?.stage === "thinking" ? "full" : stages.length > 0 ? "light" : undefined;
144
+ void toldCard.load().then((module) => {
145
+ const kept = module.keepTelling(keeps, { words, target: { on: "place", place: on.view }, decided: refused ? { type: "refusal" } : { type: "view", section: on.name }, ...(slot ? { slot } : {}), stages: stages.map((one) => ({ stage: one.stage === "thinking" ? "full" : "light", ms: one.ms, model: one.model })), ms, outcome: refused ? "abandoned" : "previewed", interaction }, principal);
146
+ tellingNow.current = kept ?? null;
147
+ setTelling(kept ?? null);
148
+ }, () => undefined);
149
+ }, [ai.told, principal]);
150
+ /* Put away: a draft not kept goes with the card, and the view stands as it was. */
151
+ useEffect(() => () => {
152
+ draft.current?.dispose();
153
+ draft.current = null;
154
+ }, []);
155
+ const entryOf = useCallback((said, outcome, stages, extra = {}) => ({
156
+ id: interactionId(),
157
+ at: new Date().toISOString(),
158
+ by: principal,
159
+ target: { on: "place", place: section.view },
160
+ targetLabel: handle.current?.title ?? section.view,
161
+ ask: { kind: "section", said },
162
+ offered: [],
163
+ outcome,
164
+ stages: stages.map((one) => ({ stage: one.stage, ms: one.ms, model: one.model })),
165
+ usage: stages.flatMap((one) => (one.usage ? [{ tier: one.stage === "light" ? "fast" : "thinking", model: one.model, inputTokens: one.usage.inputTokens, outputTokens: one.usage.outputTokens }] : [])),
166
+ ...extra,
167
+ }), [principal, section.view]);
168
+ /** Revise the section: asked, composed whole, judged as a draft in the view's place, offered or refused. */
169
+ const revise = useCallback(async (mode, said, pointed, on = section) => {
170
+ const view = handle.current;
171
+ const asked = mode === "just" ? `Make “${on.name}” better` : `Make “${on.name}” better: ${said}`;
172
+ if (!view)
173
+ return setPhase({ at: "refused", said: "This view is not drawn here any more." });
174
+ setPhase({ at: "working", ...(pointed ? { pointed } : {}) });
175
+ const before = await view.source();
176
+ if (before === undefined)
177
+ return setPhase({ at: "refused", said: "This view is a whole worker script, and only a plain script's section can be revised here." });
178
+ original.current ??= before;
179
+ const started = Date.now();
180
+ const live = view.drawing();
181
+ const liveRefused = view.refused();
182
+ const theme = await view.theme().catch(() => ({}));
183
+ const result = await reviseSection({
184
+ ai,
185
+ source: before,
186
+ section: on.name,
187
+ mode,
188
+ ...(said ? { words: said } : {}),
189
+ ...(pointed ? { highlighted: [pointed.name, ...pointed.lines] } : {}),
190
+ theme,
191
+ shows: shownBy(on.elements),
192
+ judge: async (source) => {
193
+ draft.current?.dispose();
194
+ draft.current = null;
195
+ const refused = await view.check(source);
196
+ if (refused.length > 0)
197
+ return refused;
198
+ const drawn = view.draft(source);
199
+ draft.current = drawn;
200
+ const { failed } = await drawn.drawn;
201
+ if (failed)
202
+ return [`The view did not draw: ${failed}`];
203
+ await new Promise((settled) => requestAnimationFrame(() => requestAnimationFrame(settled)));
204
+ return judged(view, before, live, liveRefused, drawn, source).findings;
205
+ },
206
+ });
207
+ if (!result.ok) {
208
+ draft.current?.dispose();
209
+ draft.current = null;
210
+ const failed = entryOf(asked, "failed", result.stages, { failed: result.refused });
211
+ aiDesk.record(failed);
212
+ tell(said || asked, on, true, result.stages, Date.now() - started, failed.id);
213
+ return setPhase({ at: "refused", said: result.refused });
214
+ }
215
+ const notes = draft.current ? judged(view, before, live, liveRefused, draft.current, result.source).notes : [];
216
+ const entry = entryOf(asked, "offered", result.stages);
217
+ tell(said || asked, on, false, result.stages, Date.now() - started, entry.id);
218
+ setPhase({ at: "draft", source: result.source, said: result.said, notes: result.repaired ? ["Repaired once after the first try broke the view.", ...notes] : notes, entry });
219
+ }, [ai, aiDesk, entryOf, section, tell]);
220
+ /* Just do it: at once. */
221
+ const began = useRef(false);
222
+ useEffect(() => {
223
+ if (ask.mode !== "just" || began.current)
224
+ return;
225
+ began.current = true;
226
+ void revise("just", "");
227
+ }, [ask.mode, revise]);
228
+ const keep = useCallback(async () => {
229
+ if (phase.at !== "draft" || !keptViews?.revise || !handle.current)
230
+ return;
231
+ const view = handle.current;
232
+ const before = (await view.source()) ?? "";
233
+ setPhase({ at: "keeping", source: phase.source, entry: phase.entry });
234
+ try {
235
+ const answer = await keptViews.revise({ name: view.name, title: view.title, source: phase.source, before, section: section.name, said: phase.said });
236
+ draft.current?.dispose();
237
+ draft.current = null;
238
+ view.draw(phase.source);
239
+ const entry = { ...phase.entry, outcome: "accepted" };
240
+ aiDesk.record(entry);
241
+ ended("accepted");
242
+ setPhase({ at: "kept", source: before, ...(answer && answer.note ? { note: answer.note } : {}), answer, entry });
243
+ }
244
+ catch (error) {
245
+ setPhase({ at: "refused", said: error instanceof Error ? error.message : "The host did not keep it." });
246
+ }
247
+ }, [phase, keptViews, aiDesk, section.name, ended]);
248
+ const discard = useCallback(() => {
249
+ draft.current?.dispose();
250
+ draft.current = null;
251
+ if (phase.at === "draft") {
252
+ aiDesk.record({ ...phase.entry, outcome: "dismissed" });
253
+ ended("declined");
254
+ }
255
+ close();
256
+ }, [phase, aiDesk, close, ended]);
257
+ const undo = useCallback(async () => {
258
+ if (phase.at !== "kept" || !handle.current)
259
+ return;
260
+ const view = handle.current;
261
+ const now = (await view.source()) ?? "";
262
+ try {
263
+ if (phase.answer && typeof phase.answer.undo === "function")
264
+ await phase.answer.undo();
265
+ else
266
+ await keptViews?.revise?.({ name: view.name, title: view.title, source: phase.source, before: now, section: section.name, said: "Put back as it was.", undoes: true });
267
+ view.draw(phase.source === original.current ? undefined : phase.source);
268
+ aiDesk.record({ ...phase.entry, outcome: "dismissed" });
269
+ // A quiet sign, never a 👎.
270
+ ended("undone");
271
+ setPhase({ at: "undone" });
272
+ }
273
+ catch (error) {
274
+ setPhase({ at: "refused", said: error instanceof Error ? error.message : "The host did not put it back." });
275
+ }
276
+ }, [phase, keptViews, aiDesk, section.name, ended]);
277
+ /* Placed beside the section, kept there as the page moves. */
278
+ useLayoutEffect(() => {
279
+ let frame = 0;
280
+ const follow = () => {
281
+ if (card.current) {
282
+ const drafted = place?.querySelector("[data-graview-section-draft]");
283
+ placeBeside(card.current, drafted ? boxOf([drafted]) : boxOf(section.elements) ?? (place ? boxOf([place]) : null));
284
+ }
285
+ frame = requestAnimationFrame(follow);
286
+ };
287
+ follow();
288
+ return () => cancelAnimationFrame(frame);
289
+ }, [section, place]);
290
+ /* The keyboard: in the field when it asks, else on the card's first button. */
291
+ useEffect(() => {
292
+ if (phase.at === "asking")
293
+ field.current?.focus();
294
+ else if (phase.at !== "highlighting")
295
+ card.current?.querySelector("button[data-first]")?.focus();
296
+ }, [phase.at]);
297
+ /* Escape puts it away: a draft is discarded, the keyboard goes back where it was. */
298
+ useEffect(() => {
299
+ const key = (event) => {
300
+ if (event.key !== "Escape")
301
+ return;
302
+ event.preventDefault();
303
+ discard();
304
+ ask.returnTo?.focus?.();
305
+ };
306
+ document.addEventListener("keydown", key);
307
+ return () => document.removeEventListener("keydown", key);
308
+ }, [discard, ask.returnTo]);
309
+ const pointed = phase.at === "asking" || phase.at === "working" ? phase.pointed : undefined;
310
+ if (phase.at === "highlighting") {
311
+ return (_jsx(Highlighter, { place: place, section: section, cancel: close, chose: (elements) => {
312
+ const first = elements[0];
313
+ const under = first ? sectionUnderNow(first) : undefined;
314
+ const on = under ?? section;
315
+ setSection(on);
316
+ setPhase({ at: "asking", pointed: { name: nameParts(elements.map(readPart)), lines: partLines(elements.map(readPart)) } });
317
+ } }));
318
+ }
319
+ const drafted = phase.at === "draft" || phase.at === "keeping";
320
+ const outlined = drafted ? [...(place?.querySelectorAll("[data-graview-section-draft]") ?? [])] : phase.at === "kept" || phase.at === "undone" ? [] : section.elements;
321
+ return (_jsxs(_Fragment, { children: [outlined.length > 0 ? _jsx(SectionOutline, { elements: outlined, label: drafted ? "Draft" : undefined }) : null, _jsxs("div", { ref: card, role: "dialog", "aria-label": `Make “${section.name}” better`, "data-testid": "section-card", "data-section-phase": phase.at, "data-graview-popover": "", style: CARD, children: [_jsxs("p", { style: HEAD, children: ["Make ", _jsxs("strong", { children: ["\u201C", section.name, "\u201D"] }), " better"] }), pointed ? (_jsxs("p", { "data-testid": "section-pointed", style: MUTED, children: ["You pointed at ", pointed.name, "."] })) : null, phase.at === "asking" ? (_jsxs("form", { onSubmit: (event) => {
322
+ event.preventDefault();
323
+ if (words.trim())
324
+ void revise(ask.mode, words.trim(), phase.pointed);
325
+ }, style: { display: "grid", gap: 8 }, children: [_jsx("label", { style: VISUALLY_HIDDEN, htmlFor: "graview-section-words", children: phase.pointed ? "What should change here?" : "What should change?" }), _jsx("input", { id: "graview-section-words", ref: field, "data-testid": "section-words", value: words, onChange: (event) => setWords(event.target.value), placeholder: phase.pointed ? "What should change here?" : "What should change?", style: FIELD }), _jsxs("div", { style: ROW, children: [_jsx("button", { type: "submit", "data-first": "", disabled: !words.trim(), style: PRIMARY, children: "Revise" }), _jsx("button", { type: "button", onClick: close, style: QUIET, children: "Cancel" })] })] })) : null, _jsx("p", { role: "status", "aria-live": "polite", "data-testid": "section-status", style: phase.at === "working" || phase.at === "keeping" ? THINKING : MUTED, children: phase.at === "working" ? `Revising “${section.name}”…` : phase.at === "keeping" ? "Keeping it…" : phase.at === "draft" ? phase.said : phase.at === "kept" ? `Kept.${phase.note ? ` ${phase.note}` : ""}` : phase.at === "undone" ? "Put back as it was." : phase.at === "refused" ? phase.said : "" }), phase.at === "draft" ? (_jsxs(_Fragment, { children: [_jsx("p", { "data-testid": "section-draft-line", style: MUTED, children: "Draft \u2014 shown in place, not kept." }), phase.notes.map((note) => (_jsx("p", { "data-testid": "section-note", style: MUTED, children: note }, note))), _jsxs("div", { style: ROW, children: [_jsx("button", { type: "button", "data-first": "", "data-testid": "section-keep", onClick: () => void keep(), style: PRIMARY, children: "Keep" }), _jsx("button", { type: "button", "data-testid": "section-discard", onClick: discard, style: QUIET, children: "Discard" })] })] })) : null, phase.at === "kept" ? (_jsxs("div", { style: ROW, children: [_jsx("button", { type: "button", "data-first": "", "data-testid": "section-undo", onClick: () => void undo(), style: QUIET, children: "Undo" }), _jsx("button", { type: "button", onClick: close, style: QUIET, children: "Close" })] })) : null, phase.at === "refused" || phase.at === "undone" ? (_jsx("div", { style: ROW, children: _jsx("button", { type: "button", "data-first": "", onClick: close, style: QUIET, children: "Close" }) })) : null, telling && ai.told && phase.at !== "working" && phase.at !== "asking" ? _jsx(Rate, { told: ai.told, telling: telling }) : null] })] }));
326
+ }
327
+ /**
328
+ * HIGHLIGHT AREA: an overlay over the view. A drag draws a rectangle and
329
+ * takes the parts it holds whole; a click takes the part under it; Escape,
330
+ * or "Cancel", puts it away; "The whole section" takes the section itself
331
+ * for a keyboard.
332
+ */
333
+ function Highlighter({ place, section, cancel, chose }) {
334
+ const cover = useRef(null);
335
+ const [drag, setDrag] = useState(null);
336
+ const root = place?.querySelector("[data-worker-view]")?.shadowRoot?.querySelector("[data-graview-view-root]") ?? undefined;
337
+ useLayoutEffect(() => {
338
+ let frame = 0;
339
+ const follow = () => {
340
+ const box = place ? boxOf([place]) : null;
341
+ const at = cover.current;
342
+ /* A little past the view's edges, so a drag can begin outside what it means to take. */
343
+ if (at && box) {
344
+ at.style.left = `${Math.round(box.left - PAD)}px`;
345
+ at.style.top = `${Math.round(box.top - PAD)}px`;
346
+ at.style.width = `${Math.round(box.width + 2 * PAD)}px`;
347
+ at.style.height = `${Math.round(box.height + 2 * PAD)}px`;
348
+ }
349
+ frame = requestAnimationFrame(follow);
350
+ };
351
+ follow();
352
+ return () => cancelAnimationFrame(frame);
353
+ }, [place]);
354
+ useEffect(() => {
355
+ cover.current?.focus();
356
+ }, []);
357
+ const end = (event) => {
358
+ if (!drag || !root)
359
+ return setDrag(null);
360
+ const moved = Math.hypot(event.clientX - drag.x0, event.clientY - drag.y0) > 4;
361
+ const rect = { left: Math.min(drag.x0, event.clientX), top: Math.min(drag.y0, event.clientY), right: Math.max(drag.x0, event.clientX), bottom: Math.max(drag.y0, event.clientY) };
362
+ setDrag(null);
363
+ const parts = partsIn(root, rect, !moved);
364
+ if (parts.length > 0)
365
+ chose(parts);
366
+ };
367
+ const box = drag ? { left: Math.min(drag.x0, drag.x1), top: Math.min(drag.y0, drag.y1), width: Math.abs(drag.x1 - drag.x0), height: Math.abs(drag.y1 - drag.y0) } : null;
368
+ return (_jsxs("div", { ref: cover, tabIndex: -1, role: "application", "aria-label": "Highlight the area to change: drag over it, or click one part", "data-testid": "section-highlighter", "data-graview-popover": "", onKeyDown: (event) => {
369
+ if (event.key === "Escape") {
370
+ event.preventDefault();
371
+ event.stopPropagation();
372
+ cancel();
373
+ }
374
+ },
375
+ /* A drag here draws a rectangle, never a selection of the words under it. */
376
+ onMouseDown: (event) => event.preventDefault(), onPointerDown: (event) => {
377
+ event.preventDefault();
378
+ event.currentTarget.setPointerCapture?.(event.pointerId);
379
+ setDrag({ x0: event.clientX, y0: event.clientY, x1: event.clientX, y1: event.clientY });
380
+ }, onPointerMove: (event) => setDrag((was) => (was ? { ...was, x1: event.clientX, y1: event.clientY } : was)), onPointerUp: end, onPointerCancel: () => setDrag(null), style: COVER, children: [_jsxs("p", { style: COVER_HINT, children: ["Drag over the part to change, or click one \u00B7", " ", _jsx("button", { type: "button", onPointerDown: (event) => event.stopPropagation(), onClick: () => chose(section.elements), style: LINK, children: "The whole section" }), " ", "\u00B7", " ", _jsx("button", { type: "button", onPointerDown: (event) => event.stopPropagation(), onClick: cancel, style: LINK, children: "Cancel" })] }), box ? _jsx("div", { "data-testid": "section-drag", style: { ...DRAG, left: box.left - (cover.current?.getBoundingClientRect().left ?? 0), top: box.top - (cover.current?.getBoundingClientRect().top ?? 0), width: box.width, height: box.height } }) : null] }));
381
+ }
382
+ const CARD = {
383
+ position: "fixed",
384
+ zIndex: layer("popover"),
385
+ boxSizing: "border-box",
386
+ display: "grid",
387
+ gap: 10,
388
+ padding: 12,
389
+ borderRadius: 12,
390
+ border: "1px solid var(--graview-edge)",
391
+ background: "var(--graview-float, var(--graview-panel))",
392
+ color: "var(--graview-ink)",
393
+ boxShadow: "var(--graview-lift-high)",
394
+ maxHeight: "calc(100dvh - 24px)",
395
+ overflowY: "auto",
396
+ fontSize: "0.875rem",
397
+ };
398
+ const HEAD = { margin: 0, fontSize: "0.9375rem" };
399
+ const MUTED = { margin: 0, color: "var(--graview-ink-muted)" };
400
+ const THINKING = { margin: 0, color: "var(--graview-ink)", fontStyle: "italic" };
401
+ const ROW = { display: "flex", flexWrap: "wrap", gap: 8 };
402
+ const FIELD = { boxSizing: "border-box", width: "100%", height: 36, padding: "0 10px", font: "inherit", fontSize: "max(1rem,16px)", color: "var(--graview-ink)", background: "var(--graview-panel)", border: "1px solid var(--graview-edge)", borderRadius: 8 };
403
+ const BUTTON = { minHeight: 36, padding: "0 14px", font: "inherit", borderRadius: 8, cursor: "pointer" };
404
+ const PRIMARY = { ...BUTTON, color: "var(--graview-accent-ink, #fff)", background: "var(--graview-accent)", border: "1px solid var(--graview-accent)" };
405
+ const QUIET = { ...BUTTON, color: "var(--graview-ink)", background: "transparent", border: "1px solid var(--graview-edge)" };
406
+ const LINK = { font: "inherit", color: "inherit", background: "none", border: 0, padding: 0, textDecoration: "underline", cursor: "pointer" };
407
+ const PAD = 12;
408
+ const COVER = { userSelect: "none", WebkitUserSelect: "none", position: "fixed", zIndex: layer("popover"), boxSizing: "border-box", cursor: "crosshair", touchAction: "none", outline: "2px dashed var(--graview-accent)", background: "color-mix(in srgb, var(--graview-accent) 6%, transparent)" };
409
+ const COVER_HINT = { position: "absolute", left: 8, top: 8, margin: 0, padding: "4px 10px", borderRadius: 999, fontSize: "0.8125rem", color: "var(--graview-ink)", background: "var(--graview-float, var(--graview-panel))", border: "1px solid var(--graview-edge)", boxShadow: "var(--graview-lift-low)", cursor: "default" };
410
+ const DRAG = { position: "absolute", border: "2px solid var(--graview-accent)", background: "color-mix(in srgb, var(--graview-accent) 14%, transparent)", borderRadius: 4, pointerEvents: "none" };
411
+ //# sourceMappingURL=section-better.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-better.js","sourceRoot":"","sources":["../src/section-better.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type MenuSectionSource } from "@graview/react/provider";
2
+ import { type ReactNode } from "react";
3
+ /**
4
+ * MAKE THIS SECTION BETTER (Roadmap f-make-this-section-better): the door,
5
+ * as small as a face can carry before it draws.
6
+ *
7
+ * A right-click inside a worker view finds the section under it ("This
8
+ * week", `sectionUnder`) — the menu is headed with its name and the section
9
+ * outlined while the menu is open — and, for a seat that may change the
10
+ * app's views, offers "Make “This week” better": Just do it, Describe
11
+ * changes…, Highlight area…. Each opens the section's card, which revises
12
+ * that section alone, shows the revision as a draft in place, and keeps it
13
+ * through the host's view door (`KeptViews.revise`) on Keep.
14
+ *
15
+ * Nothing of it is fetched before the first right-click inside a view: the
16
+ * menu's section and the door (`section-menu.tsx`) arrive with the section
17
+ * finder, and the menu opens once both are here; the outline, the card and
18
+ * the revision arrive as the menu is prepared. Offered where the host gave
19
+ * a model and did not turn AI off, where its views lend `revise`, where it
20
+ * says this seat may change views (`current().may.views`), and where the
21
+ * view's code is a plain script the page holds.
22
+ */
23
+ export type { SectionAsk, SectionMode } from "./section-menu.js";
24
+ /** "Make “This week” better" on the context menu, or nothing where it is not this seat's to offer. */
25
+ export declare function useSectionBetterSection(): MenuSectionSource | null;
26
+ /** The context menu drawn inside, with "Make this better" in it where it is offered. */
27
+ export declare function SectionBetterSections({ children }: {
28
+ readonly children: ReactNode;
29
+ }): import("react").JSX.Element;
30
+ /** Where the outline and the card are drawn, once the first right-click inside a view has fetched them. */
31
+ export declare function SectionBetterDoor(): import("react").JSX.Element | null;
32
+ //# sourceMappingURL=section-door.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-door.d.ts","sourceRoot":"","sources":["../src/section-door.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,iBAAiB,EAAmB,MAAM,yBAAyB,CAAC;AAE9F,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAYjE,sGAAsG;AACtG,wBAAgB,uBAAuB,IAAI,iBAAiB,GAAG,IAAI,CAKlE;AAID,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAInF;AAED,2GAA2G;AAC3G,wBAAgB,iBAAiB,uCAGhC"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { alsoWhenSectionsArrive, MenuSections } from "@graview/react/drawing";
3
+ import { useGraview } from "@graview/react/provider";
4
+ import { inlineAiOn } from "@graview/tools/frame";
5
+ import { useMemo, useSyncExternalStore } from "react";
6
+ let menu;
7
+ const heard = /* @__PURE__ */ new Set();
8
+ const hear = (listener) => (heard.add(listener), () => void heard.delete(listener));
9
+ const load = () => import("./section-menu.js").then((module) => {
10
+ menu = module;
11
+ heard.forEach((listener) => listener());
12
+ });
13
+ /** "Make “This week” better" on the context menu, or nothing where it is not this seat's to offer. */
14
+ export function useSectionBetterSection() {
15
+ const { ai, aiDesk, keptViews } = useGraview();
16
+ alsoWhenSectionsArrive(load);
17
+ const on = inlineAiOn(ai) && typeof keptViews?.revise === "function";
18
+ return useMemo(() => (on ? (target) => (target.section && menu && keptViews ? menu.sectionFor(target, aiDesk, keptViews) : null) : null), [on, aiDesk, keptViews]);
19
+ }
20
+ const NONE = [];
21
+ /** The context menu drawn inside, with "Make this better" in it where it is offered. */
22
+ export function SectionBetterSections({ children }) {
23
+ const section = useSectionBetterSection();
24
+ const sections = useMemo(() => (section ? [section] : NONE), [section]);
25
+ return _jsx(MenuSections, { sections: sections, children: children });
26
+ }
27
+ /** Where the outline and the card are drawn, once the first right-click inside a view has fetched them. */
28
+ export function SectionBetterDoor() {
29
+ const Door = useSyncExternalStore(hear, () => menu?.SectionDoor, () => undefined);
30
+ return Door ? _jsx(Door, {}) : null;
31
+ }
32
+ //# sourceMappingURL=section-door.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-door.js","sourceRoot":"","sources":["../src/section-door.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAA2C,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAkB,MAAM,OAAO,CAAC;AA0BtE,IAAI,IAAsB,CAAC;AAC3B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,GAAG,EAAc,CAAC;AACpD,MAAM,IAAI,GAAG,CAAC,QAAoB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChG,MAAM,IAAI,GAAG,GAAG,EAAE,CAChB,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;IAC1C,IAAI,GAAG,MAAM,CAAC;IACd,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEL,sGAAsG;AACtG,MAAM,UAAU,uBAAuB;IACrC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAa,CAAC;IAC1D,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,OAAO,SAAS,EAAE,MAAM,KAAK,UAAU,CAAC;IACrE,OAAO,OAAO,CAA2B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAkB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC3M,CAAC;AAED,MAAM,IAAI,GAAiC,EAAE,CAAC;AAE9C,wFAAwF;AACxF,MAAM,UAAU,qBAAqB,CAAC,EAAE,QAAQ,EAAoC;IAClF,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,OAAO,KAAC,YAAY,IAAC,QAAQ,EAAE,QAAQ,YAAG,QAAQ,GAAgB,CAAC;AACrE,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,KAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { KeptViews } from "@graview/core";
2
+ import { type AiDesk, type MenuSection, type MenuTarget, type MenuViewSection } from "@graview/react/provider";
3
+ /** How the card was asked for. */
4
+ export type SectionMode = "just" | "describe" | "highlight";
5
+ /** The card asked for: on which section, how. */
6
+ export interface SectionAsk {
7
+ readonly section: MenuViewSection;
8
+ readonly mode: SectionMode;
9
+ readonly at: number;
10
+ readonly returnTo?: HTMLElement | null;
11
+ }
12
+ /** Opens the section's card on this app's desk; null puts it away. */
13
+ export declare function askSection(desk: AiDesk, ask: Omit<SectionAsk, "at"> | null): void;
14
+ /** "Make “This week” better" for a menu opened on a section, or nothing where it is not this seat's to offer. */
15
+ export declare function sectionFor(target: MenuTarget, aiDesk: AiDesk, keptViews: KeptViews): MenuSection | null;
16
+ /** Where the outline and the card are drawn: nothing at all until a menu is open on a section or a card is asked for. */
17
+ export declare function SectionDoor(): import("react").JSX.Element | null;
18
+ //# sourceMappingURL=section-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-menu.d.ts","sourceRoot":"","sources":["../src/section-menu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1D,OAAO,EAA0B,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAYvI,kCAAkC;AAClC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAE5D,iDAAiD;AACjD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACxC;AAiBD,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAIjF;AASD,iHAAiH;AACjH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,WAAW,GAAG,IAAI,CAiBvG;AAED,yHAAyH;AACzH,wBAAgB,WAAW,uCA8B1B"}