@rose42/feedback-capture 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +107 -0
  3. package/dist/clipboard.d.ts +7 -0
  4. package/dist/clipboard.d.ts.map +1 -0
  5. package/dist/clipboard.js +33 -0
  6. package/dist/clipboard.js.map +1 -0
  7. package/dist/context.d.ts +10 -0
  8. package/dist/context.d.ts.map +1 -0
  9. package/dist/context.js +7 -0
  10. package/dist/context.js.map +1 -0
  11. package/dist/crop.d.ts +61 -0
  12. package/dist/crop.d.ts.map +1 -0
  13. package/dist/crop.js +112 -0
  14. package/dist/crop.js.map +1 -0
  15. package/dist/index.d.ts +16 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +11 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/plugins/comment.d.ts +11 -0
  20. package/dist/plugins/comment.d.ts.map +1 -0
  21. package/dist/plugins/comment.js +14 -0
  22. package/dist/plugins/comment.js.map +1 -0
  23. package/dist/plugins/consoleLogs.d.ts +14 -0
  24. package/dist/plugins/consoleLogs.d.ts.map +1 -0
  25. package/dist/plugins/consoleLogs.js +98 -0
  26. package/dist/plugins/consoleLogs.js.map +1 -0
  27. package/dist/plugins/core.d.ts +24 -0
  28. package/dist/plugins/core.d.ts.map +1 -0
  29. package/dist/plugins/core.js +62 -0
  30. package/dist/plugins/core.js.map +1 -0
  31. package/dist/plugins/elementTarget.d.ts +156 -0
  32. package/dist/plugins/elementTarget.d.ts.map +1 -0
  33. package/dist/plugins/elementTarget.js +537 -0
  34. package/dist/plugins/elementTarget.js.map +1 -0
  35. package/dist/plugins/frameBurst.d.ts +60 -0
  36. package/dist/plugins/frameBurst.d.ts.map +1 -0
  37. package/dist/plugins/frameBurst.js +260 -0
  38. package/dist/plugins/frameBurst.js.map +1 -0
  39. package/dist/plugins/index.d.ts +17 -0
  40. package/dist/plugins/index.d.ts.map +1 -0
  41. package/dist/plugins/index.js +9 -0
  42. package/dist/plugins/index.js.map +1 -0
  43. package/dist/plugins/pageContext.d.ts +13 -0
  44. package/dist/plugins/pageContext.d.ts.map +1 -0
  45. package/dist/plugins/pageContext.js +23 -0
  46. package/dist/plugins/pageContext.js.map +1 -0
  47. package/dist/plugins/screenshot.d.ts +34 -0
  48. package/dist/plugins/screenshot.d.ts.map +1 -0
  49. package/dist/plugins/screenshot.js +183 -0
  50. package/dist/plugins/screenshot.js.map +1 -0
  51. package/dist/plugins/version.d.ts +16 -0
  52. package/dist/plugins/version.d.ts.map +1 -0
  53. package/dist/plugins/version.js +21 -0
  54. package/dist/plugins/version.js.map +1 -0
  55. package/dist/session.d.ts +19 -0
  56. package/dist/session.d.ts.map +1 -0
  57. package/dist/session.js +18 -0
  58. package/dist/session.js.map +1 -0
  59. package/dist/source/adapters/compose.d.ts +7 -0
  60. package/dist/source/adapters/compose.d.ts.map +1 -0
  61. package/dist/source/adapters/compose.js +21 -0
  62. package/dist/source/adapters/compose.js.map +1 -0
  63. package/dist/source/adapters/createSourceResolver.d.ts +28 -0
  64. package/dist/source/adapters/createSourceResolver.d.ts.map +1 -0
  65. package/dist/source/adapters/createSourceResolver.js +59 -0
  66. package/dist/source/adapters/createSourceResolver.js.map +1 -0
  67. package/dist/source/adapters/detect.d.ts +22 -0
  68. package/dist/source/adapters/detect.d.ts.map +1 -0
  69. package/dist/source/adapters/detect.js +133 -0
  70. package/dist/source/adapters/detect.js.map +1 -0
  71. package/dist/source/adapters/index.d.ts +18 -0
  72. package/dist/source/adapters/index.d.ts.map +1 -0
  73. package/dist/source/adapters/index.js +10 -0
  74. package/dist/source/adapters/index.js.map +1 -0
  75. package/dist/source/adapters/locator.d.ts +14 -0
  76. package/dist/source/adapters/locator.d.ts.map +1 -0
  77. package/dist/source/adapters/locator.js +69 -0
  78. package/dist/source/adapters/locator.js.map +1 -0
  79. package/dist/source/adapters/next.d.ts +46 -0
  80. package/dist/source/adapters/next.d.ts.map +1 -0
  81. package/dist/source/adapters/next.js +124 -0
  82. package/dist/source/adapters/next.js.map +1 -0
  83. package/dist/source/adapters/nextFlight.d.ts +19 -0
  84. package/dist/source/adapters/nextFlight.d.ts.map +1 -0
  85. package/dist/source/adapters/nextFlight.js +80 -0
  86. package/dist/source/adapters/nextFlight.js.map +1 -0
  87. package/dist/source/adapters/qwik.d.ts +16 -0
  88. package/dist/source/adapters/qwik.d.ts.map +1 -0
  89. package/dist/source/adapters/qwik.js +49 -0
  90. package/dist/source/adapters/qwik.js.map +1 -0
  91. package/dist/source/adapters/react.d.ts +46 -0
  92. package/dist/source/adapters/react.d.ts.map +1 -0
  93. package/dist/source/adapters/react.js +201 -0
  94. package/dist/source/adapters/react.js.map +1 -0
  95. package/dist/source/adapters/svelte.d.ts +23 -0
  96. package/dist/source/adapters/svelte.d.ts.map +1 -0
  97. package/dist/source/adapters/svelte.js +64 -0
  98. package/dist/source/adapters/svelte.js.map +1 -0
  99. package/dist/source/adapters/vue.d.ts +27 -0
  100. package/dist/source/adapters/vue.d.ts.map +1 -0
  101. package/dist/source/adapters/vue.js +76 -0
  102. package/dist/source/adapters/vue.js.map +1 -0
  103. package/dist/source/locateJsx.d.ts +25 -0
  104. package/dist/source/locateJsx.d.ts.map +1 -0
  105. package/dist/source/locateJsx.js +67 -0
  106. package/dist/source/locateJsx.js.map +1 -0
  107. package/dist/source/rankSourceHierarchy.d.ts +25 -0
  108. package/dist/source/rankSourceHierarchy.d.ts.map +1 -0
  109. package/dist/source/rankSourceHierarchy.js +60 -0
  110. package/dist/source/rankSourceHierarchy.js.map +1 -0
  111. package/dist/source/reactSourceResolver.d.ts +3 -0
  112. package/dist/source/reactSourceResolver.d.ts.map +1 -0
  113. package/dist/source/reactSourceResolver.js +3 -0
  114. package/dist/source/reactSourceResolver.js.map +1 -0
  115. package/dist/source/sourceMap.d.ts +41 -0
  116. package/dist/source/sourceMap.d.ts.map +1 -0
  117. package/dist/source/sourceMap.js +235 -0
  118. package/dist/source/sourceMap.js.map +1 -0
  119. package/dist/transport.d.ts +13 -0
  120. package/dist/transport.d.ts.map +1 -0
  121. package/dist/transport.js +37 -0
  122. package/dist/transport.js.map +1 -0
  123. package/dist/types.d.ts +28 -0
  124. package/dist/types.d.ts.map +1 -0
  125. package/dist/types.js +2 -0
  126. package/dist/types.js.map +1 -0
  127. package/package.json +68 -0
@@ -0,0 +1,537 @@
1
+ import { rankSourceHierarchy } from "../source/rankSourceHierarchy.js";
2
+ const INTERACTIVE_SELECTOR = "button, a, input, select, textarea, summary, [role='button'], [role='link'], [role='menuitem'], [role='tab'], [role='checkbox'], [role='switch'], [role='option']";
3
+ const MAX_TEXT = 120;
4
+ const DEFAULT_MAX_HTML = 500;
5
+ const MAX_SELECTOR_DEPTH = 6;
6
+ const DEFAULT_PICK_HINT = "Click an element to select it. Esc cancels.";
7
+ /** Box model / positioning / flex-grid — useful for spacing & alignment bugs. */
8
+ export const LAYOUT_STYLE_PROPS = [
9
+ "display",
10
+ "position",
11
+ "top",
12
+ "right",
13
+ "bottom",
14
+ "left",
15
+ "inset",
16
+ "width",
17
+ "height",
18
+ "min-width",
19
+ "min-height",
20
+ "max-width",
21
+ "max-height",
22
+ "margin",
23
+ "margin-top",
24
+ "margin-right",
25
+ "margin-bottom",
26
+ "margin-left",
27
+ "padding",
28
+ "padding-top",
29
+ "padding-right",
30
+ "padding-bottom",
31
+ "padding-left",
32
+ "box-sizing",
33
+ "overflow",
34
+ "overflow-x",
35
+ "overflow-y",
36
+ "z-index",
37
+ "transform",
38
+ "gap",
39
+ "row-gap",
40
+ "column-gap",
41
+ "flex",
42
+ "flex-direction",
43
+ "flex-wrap",
44
+ "flex-grow",
45
+ "flex-shrink",
46
+ "flex-basis",
47
+ "align-items",
48
+ "align-self",
49
+ "align-content",
50
+ "justify-content",
51
+ "justify-items",
52
+ "justify-self",
53
+ "grid",
54
+ "grid-template-columns",
55
+ "grid-template-rows",
56
+ "grid-column",
57
+ "grid-row",
58
+ "place-items",
59
+ "place-content",
60
+ ];
61
+ /** Typography / paint — useful with layout for visual polish bugs. */
62
+ export const COMPUTED_EXTRA_STYLE_PROPS = [
63
+ "font-family",
64
+ "font-size",
65
+ "font-weight",
66
+ "font-style",
67
+ "line-height",
68
+ "letter-spacing",
69
+ "text-align",
70
+ "text-decoration",
71
+ "text-transform",
72
+ "white-space",
73
+ "color",
74
+ "background",
75
+ "background-color",
76
+ "background-image",
77
+ "border",
78
+ "border-radius",
79
+ "border-top",
80
+ "border-right",
81
+ "border-bottom",
82
+ "border-left",
83
+ "box-shadow",
84
+ "opacity",
85
+ "visibility",
86
+ "cursor",
87
+ "pointer-events",
88
+ ];
89
+ const SKIP_STYLE_VALUES = new Set(["", "auto", "normal", "none", "start", "static"]);
90
+ function stylePropsForMode(mode) {
91
+ if (mode === "none")
92
+ return [];
93
+ if (mode === "layout")
94
+ return LAYOUT_STYLE_PROPS;
95
+ return [...LAYOUT_STYLE_PROPS, ...COMPUTED_EXTRA_STYLE_PROPS];
96
+ }
97
+ /**
98
+ * Read a curated subset of `getComputedStyle` for agent-facing feedback.
99
+ * Returns `undefined` when mode is `"none"` or nothing useful was collected.
100
+ */
101
+ export function collectComputedStyles(el, mode = "computed") {
102
+ if (mode === "none" || typeof getComputedStyle !== "function")
103
+ return undefined;
104
+ const props = stylePropsForMode(mode);
105
+ if (props.length === 0)
106
+ return undefined;
107
+ const computed = getComputedStyle(el);
108
+ const out = {};
109
+ for (const prop of props) {
110
+ const value = computed.getPropertyValue(prop).trim();
111
+ if (!value || SKIP_STYLE_VALUES.has(value))
112
+ continue;
113
+ // Drop zero lengths that add noise (e.g. margin-top: 0px) except width/height.
114
+ if (/^(margin|padding|top|right|bottom|left|inset)/.test(prop) &&
115
+ /^-?0(px|%|em|rem)?$/.test(value)) {
116
+ continue;
117
+ }
118
+ out[prop] = value;
119
+ }
120
+ return Object.keys(out).length > 0 ? out : undefined;
121
+ }
122
+ function cssEscapeIdent(value) {
123
+ if (typeof CSS !== "undefined" && typeof CSS.escape === "function") {
124
+ return CSS.escape(value);
125
+ }
126
+ return value.replace(/([ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
127
+ }
128
+ /** Prefer the nearest interactive ancestor for icon / SVG clicks. */
129
+ export function resolveInteractiveTarget(el) {
130
+ if (!(el instanceof Element))
131
+ return el;
132
+ const interactive = el.closest(INTERACTIVE_SELECTOR);
133
+ return interactive ?? el;
134
+ }
135
+ function accessibleName(el) {
136
+ if (!(el instanceof HTMLElement))
137
+ return undefined;
138
+ const labelledBy = el.getAttribute("aria-labelledby");
139
+ if (labelledBy) {
140
+ const parts = labelledBy
141
+ .split(/\s+/)
142
+ .map((id) => document.getElementById(id)?.textContent?.trim())
143
+ .filter(Boolean);
144
+ if (parts.length > 0)
145
+ return parts.join(" ").slice(0, MAX_TEXT);
146
+ }
147
+ const aria = el.getAttribute("aria-label")?.trim();
148
+ if (aria)
149
+ return aria.slice(0, MAX_TEXT);
150
+ if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
151
+ const ph = el.placeholder?.trim();
152
+ if (ph)
153
+ return ph.slice(0, MAX_TEXT);
154
+ }
155
+ if (el instanceof HTMLElement && "title" in el && typeof el.title === "string") {
156
+ const title = el.title.trim();
157
+ if (title)
158
+ return title.slice(0, MAX_TEXT);
159
+ }
160
+ return undefined;
161
+ }
162
+ function textSnippetOf(el) {
163
+ const text = (el.textContent ?? "").replace(/\s+/g, " ").trim();
164
+ if (!text)
165
+ return undefined;
166
+ return text.slice(0, MAX_TEXT);
167
+ }
168
+ function nthOfTypeSelector(el) {
169
+ const tag = el.tagName.toLowerCase();
170
+ const parent = el.parentElement;
171
+ if (!parent)
172
+ return tag;
173
+ const siblings = Array.from(parent.children).filter((c) => c.tagName === el.tagName);
174
+ if (siblings.length <= 1)
175
+ return tag;
176
+ const index = siblings.indexOf(el) + 1;
177
+ return `${tag}:nth-of-type(${index})`;
178
+ }
179
+ /**
180
+ * Build a stable-ish CSS selector: #id → [data-testid] → tag:nth-of-type path.
181
+ */
182
+ export function buildCssSelector(el) {
183
+ if (el.id && !/\s/.test(el.id)) {
184
+ return `#${cssEscapeIdent(el.id)}`;
185
+ }
186
+ const testId = el.getAttribute("data-testid")?.trim() || el.getAttribute("data-test-id")?.trim();
187
+ if (testId) {
188
+ return `[data-testid="${cssEscapeIdent(testId)}"]`;
189
+ }
190
+ const parts = [];
191
+ let current = el;
192
+ let depth = 0;
193
+ while (current && current !== document.documentElement && depth < MAX_SELECTOR_DEPTH) {
194
+ if (current.id && !/\s/.test(current.id)) {
195
+ parts.unshift(`#${cssEscapeIdent(current.id)}`);
196
+ break;
197
+ }
198
+ const test = current.getAttribute("data-testid")?.trim() || current.getAttribute("data-test-id")?.trim();
199
+ if (test) {
200
+ parts.unshift(`[data-testid="${cssEscapeIdent(test)}"]`);
201
+ break;
202
+ }
203
+ parts.unshift(nthOfTypeSelector(current));
204
+ current = current.parentElement;
205
+ depth += 1;
206
+ }
207
+ return parts.join(" > ") || el.tagName.toLowerCase();
208
+ }
209
+ function mergeSourceEnrichment(target, enrichment) {
210
+ const ranked = rankSourceHierarchy(enrichment);
211
+ if (!ranked)
212
+ return target;
213
+ return {
214
+ ...target,
215
+ ...(ranked.component ? { component: ranked.component } : {}),
216
+ ...(ranked.leaf ? { leaf: ranked.leaf } : {}),
217
+ ...(ranked.owners && ranked.owners.length > 0 ? { owners: ranked.owners } : {}),
218
+ };
219
+ }
220
+ /** Snapshot an element into an {@link ElementTarget} (DOM fields only; sync). */
221
+ export function collectElementTarget(el, options = {}) {
222
+ const target = resolveInteractiveTarget(el);
223
+ const rect = target.getBoundingClientRect();
224
+ const id = target.id?.trim() || undefined;
225
+ const role = target.getAttribute("role")?.trim() || undefined;
226
+ const name = accessibleName(target);
227
+ const textSnippet = textSnippetOf(target);
228
+ const includeInnerHTML = options.includeInnerHTML === true;
229
+ const maxHtml = options.maxInnerHTMLLength ?? DEFAULT_MAX_HTML;
230
+ let innerHTMLSnippet;
231
+ if (includeInnerHTML) {
232
+ const html = target.innerHTML.replace(/\s+/g, " ").trim();
233
+ if (html) {
234
+ innerHTMLSnippet = html.length > maxHtml ? `${html.slice(0, maxHtml)}…` : html;
235
+ }
236
+ }
237
+ const styles = collectComputedStyles(target, options.styles ?? "none");
238
+ return {
239
+ selector: buildCssSelector(target),
240
+ tagName: target.tagName.toLowerCase(),
241
+ ...(id ? { id } : {}),
242
+ ...(role ? { role } : {}),
243
+ ...(name ? { name } : {}),
244
+ ...(textSnippet ? { textSnippet } : {}),
245
+ boundingBox: {
246
+ x: rect.x,
247
+ y: rect.y,
248
+ width: rect.width,
249
+ height: rect.height,
250
+ },
251
+ ...(innerHTMLSnippet ? { innerHTMLSnippet } : {}),
252
+ ...(styles ? { styles } : {}),
253
+ viewport: {
254
+ width: window.innerWidth,
255
+ height: window.innerHeight,
256
+ devicePixelRatio: window.devicePixelRatio || 1,
257
+ },
258
+ };
259
+ }
260
+ /**
261
+ * DOM snapshot plus optional {@link ResolveElementSource} enrichment.
262
+ * Resolver errors are swallowed so pick always returns DOM metadata.
263
+ */
264
+ export async function collectElementTargetAsync(el, options = {}) {
265
+ const target = collectElementTarget(el, options);
266
+ if (!options.resolveSource)
267
+ return target;
268
+ try {
269
+ const enrichment = await options.resolveSource(resolveInteractiveTarget(el));
270
+ return mergeSourceEnrichment(target, enrichment);
271
+ }
272
+ catch {
273
+ return target;
274
+ }
275
+ }
276
+ function isIgnored(el, ignoreRoots) {
277
+ if (!el)
278
+ return true;
279
+ for (const root of ignoreRoots) {
280
+ if (root === el || root.contains(el))
281
+ return true;
282
+ }
283
+ return false;
284
+ }
285
+ /**
286
+ * Low-level DevTools-style picker (does not store state).
287
+ * Prefer {@link createElementTargetPlugin} `.pick()` in session flows.
288
+ */
289
+ export function pickElement(options = {}) {
290
+ if (typeof document === "undefined") {
291
+ return Promise.resolve(null);
292
+ }
293
+ const ignoreRoots = options.ignoreRoots ?? [];
294
+ const hintText = options.hint ?? DEFAULT_PICK_HINT;
295
+ return new Promise((resolve) => {
296
+ const overlay = document.createElement("div");
297
+ overlay.id = "feedback-capture-picker";
298
+ overlay.setAttribute("role", "dialog");
299
+ overlay.setAttribute("aria-label", "Pick element");
300
+ overlay.style.cssText = [
301
+ "all: initial",
302
+ "position: fixed",
303
+ "inset: 0",
304
+ "z-index: 2147483646",
305
+ "cursor: crosshair",
306
+ "font-family: ui-sans-serif, system-ui, sans-serif",
307
+ ].join(";");
308
+ const mask = document.createElement("div");
309
+ mask.style.cssText = "position:fixed;inset:0;background:rgba(2,6,23,0.12);pointer-events:none;";
310
+ const highlight = document.createElement("div");
311
+ highlight.style.cssText = [
312
+ "position:fixed",
313
+ "pointer-events:none",
314
+ "border:2px solid #38bdf8",
315
+ "background:rgba(56,189,248,0.15)",
316
+ "border-radius:2px",
317
+ "display:none",
318
+ "box-sizing:border-box",
319
+ "z-index:1",
320
+ ].join(";");
321
+ const label = document.createElement("div");
322
+ label.setAttribute("data-fc-pick-label", "");
323
+ label.style.cssText = [
324
+ "position:fixed",
325
+ "pointer-events:none",
326
+ "z-index:2",
327
+ "max-width:min(420px, calc(100vw - 24px))",
328
+ "padding:4px 8px",
329
+ "border-radius:6px",
330
+ "background:#0f172a",
331
+ "color:#e2e8f0",
332
+ "font-size:12px",
333
+ "line-height:1.3",
334
+ "display:none",
335
+ "box-shadow:0 4px 16px rgba(0,0,0,0.35)",
336
+ ].join(";");
337
+ const HINT_EDGE_PAD = 12;
338
+ /** Flip early so the pill clears header/chrome under the cursor. */
339
+ const HINT_DODGE_PAD = 28;
340
+ const hint = document.createElement("div");
341
+ hint.setAttribute("data-fc-pick-hint", "");
342
+ hint.textContent = hintText;
343
+ hint.style.cssText = [
344
+ "position:fixed",
345
+ "left:50%",
346
+ "transform:translateX(-50%)",
347
+ "z-index:2",
348
+ "pointer-events:none",
349
+ "padding:8px 12px",
350
+ "border-radius:999px",
351
+ "background:rgba(15,23,42,0.82)",
352
+ "color:#e2e8f0",
353
+ "font-size:12px",
354
+ "border:1px solid #334155",
355
+ "box-shadow:0 8px 24px rgba(15,23,42,0.35)",
356
+ "white-space:nowrap",
357
+ "transition:top 120ms ease, bottom 120ms ease, opacity 120ms ease",
358
+ ].join(";");
359
+ overlay.append(mask, highlight, label, hint);
360
+ document.body.appendChild(overlay);
361
+ let settled = false;
362
+ let hoverEl = null;
363
+ let hintEdge = "top";
364
+ const placeHint = (edge) => {
365
+ hintEdge = edge;
366
+ if (edge === "top") {
367
+ hint.style.top = `${HINT_EDGE_PAD}px`;
368
+ hint.style.bottom = "auto";
369
+ }
370
+ else {
371
+ hint.style.bottom = `${HINT_EDGE_PAD}px`;
372
+ hint.style.top = "auto";
373
+ }
374
+ };
375
+ placeHint("top");
376
+ const dodgeHint = (clientX, clientY) => {
377
+ const rect = hint.getBoundingClientRect();
378
+ if (rect.width === 0 && rect.height === 0)
379
+ return;
380
+ const near = clientX >= rect.left - HINT_DODGE_PAD &&
381
+ clientX <= rect.right + HINT_DODGE_PAD &&
382
+ clientY >= rect.top - HINT_DODGE_PAD &&
383
+ clientY <= rect.bottom + HINT_DODGE_PAD;
384
+ if (!near)
385
+ return;
386
+ placeHint(hintEdge === "top" ? "bottom" : "top");
387
+ };
388
+ const finish = (result) => {
389
+ if (settled)
390
+ return;
391
+ settled = true;
392
+ window.removeEventListener("keydown", onKeyDown, true);
393
+ window.removeEventListener("pointermove", onPointerMove, true);
394
+ window.removeEventListener("pointerdown", onPointerDown, true);
395
+ window.removeEventListener("click", onClick, true);
396
+ overlay.remove();
397
+ resolve(result);
398
+ };
399
+ const paintHover = (el) => {
400
+ hoverEl = el;
401
+ if (!el || !(el instanceof Element)) {
402
+ highlight.style.display = "none";
403
+ label.style.display = "none";
404
+ return;
405
+ }
406
+ const rect = el.getBoundingClientRect();
407
+ highlight.style.display = "block";
408
+ highlight.style.left = `${rect.left}px`;
409
+ highlight.style.top = `${rect.top}px`;
410
+ highlight.style.width = `${Math.max(0, rect.width)}px`;
411
+ highlight.style.height = `${Math.max(0, rect.height)}px`;
412
+ const tag = el.tagName.toLowerCase();
413
+ const id = el.id ? `#${el.id}` : "";
414
+ const testId = el.getAttribute("data-testid");
415
+ const desc = testId ? `${tag}[data-testid="${testId}"]` : `${tag}${id}`;
416
+ label.textContent = desc;
417
+ label.style.display = "block";
418
+ const edge = 8;
419
+ const gap = 4;
420
+ const labelH = label.offsetHeight || 22;
421
+ const labelW = label.offsetWidth;
422
+ // Prefer above the highlight; flip below when there isn't room at the top.
423
+ const aboveTop = rect.top - labelH - gap;
424
+ const labelTop = aboveTop >= edge
425
+ ? aboveTop
426
+ : Math.min(rect.bottom + gap, window.innerHeight - labelH - edge);
427
+ const labelLeft = Math.min(Math.max(edge, rect.left), window.innerWidth - labelW - edge);
428
+ label.style.top = `${Math.max(edge, labelTop)}px`;
429
+ label.style.left = `${labelLeft}px`;
430
+ };
431
+ const elementFromPointIgnoringOverlay = (x, y) => {
432
+ overlay.style.pointerEvents = "none";
433
+ const el = document.elementFromPoint(x, y);
434
+ overlay.style.pointerEvents = "auto";
435
+ if (isIgnored(el, ignoreRoots))
436
+ return null;
437
+ if (el && (overlay === el || overlay.contains(el)))
438
+ return null;
439
+ return el;
440
+ };
441
+ const onPointerMove = (event) => {
442
+ dodgeHint(event.clientX, event.clientY);
443
+ const el = elementFromPointIgnoringOverlay(event.clientX, event.clientY);
444
+ paintHover(el);
445
+ };
446
+ const onPointerDown = (event) => {
447
+ event.preventDefault();
448
+ event.stopPropagation();
449
+ };
450
+ const onClick = (event) => {
451
+ event.preventDefault();
452
+ event.stopPropagation();
453
+ const el = hoverEl ?? elementFromPointIgnoringOverlay(event.clientX, event.clientY);
454
+ if (!el)
455
+ return;
456
+ void (async () => {
457
+ try {
458
+ const collected = await collectElementTargetAsync(el, {
459
+ ...(options.includeInnerHTML !== undefined
460
+ ? { includeInnerHTML: options.includeInnerHTML }
461
+ : {}),
462
+ ...(options.maxInnerHTMLLength !== undefined
463
+ ? { maxInnerHTMLLength: options.maxInnerHTMLLength }
464
+ : {}),
465
+ ...(options.styles !== undefined ? { styles: options.styles } : {}),
466
+ ...(options.resolveSource !== undefined
467
+ ? { resolveSource: options.resolveSource }
468
+ : {}),
469
+ });
470
+ finish(collected);
471
+ }
472
+ catch {
473
+ finish(null);
474
+ }
475
+ })();
476
+ };
477
+ const onKeyDown = (event) => {
478
+ if (event.key === "Escape") {
479
+ event.preventDefault();
480
+ event.stopImmediatePropagation();
481
+ finish(null);
482
+ }
483
+ };
484
+ window.addEventListener("keydown", onKeyDown, true);
485
+ window.addEventListener("pointermove", onPointerMove, true);
486
+ window.addEventListener("pointerdown", onPointerDown, true);
487
+ window.addEventListener("click", onClick, true);
488
+ });
489
+ }
490
+ /**
491
+ * Built-in plugin that owns element picking and contributes `envelope.elementTarget`.
492
+ * Register at session init (like console logs); call `pick()` / `clear()` from the UI.
493
+ */
494
+ export function createElementTargetPlugin(options = {}) {
495
+ let target;
496
+ const plugin = {
497
+ id: "elementTarget",
498
+ collect() {
499
+ return target;
500
+ },
501
+ dispose() {
502
+ target = undefined;
503
+ },
504
+ getTarget() {
505
+ return target;
506
+ },
507
+ setTarget(next) {
508
+ target = next;
509
+ },
510
+ clear() {
511
+ target = undefined;
512
+ },
513
+ async pick(pickOptions = {}) {
514
+ const includeInnerHTML = pickOptions.includeInnerHTML ?? options.includeInnerHTML;
515
+ const maxInnerHTMLLength = pickOptions.maxInnerHTMLLength ?? options.maxInnerHTMLLength;
516
+ const styles = pickOptions.styles ?? options.styles;
517
+ const resolveSource = pickOptions.resolveSource ?? options.resolveSource;
518
+ const picked = await pickElement({
519
+ ignoreRoots: pickOptions.ignoreRoots ?? options.getIgnoreRoots?.() ?? [],
520
+ ...(pickOptions.hint !== undefined
521
+ ? { hint: pickOptions.hint }
522
+ : options.hint !== undefined
523
+ ? { hint: options.hint }
524
+ : {}),
525
+ ...(includeInnerHTML !== undefined ? { includeInnerHTML } : {}),
526
+ ...(maxInnerHTMLLength !== undefined ? { maxInnerHTMLLength } : {}),
527
+ ...(styles !== undefined ? { styles } : {}),
528
+ ...(resolveSource !== undefined ? { resolveSource } : {}),
529
+ });
530
+ if (picked)
531
+ target = picked;
532
+ return picked;
533
+ },
534
+ };
535
+ return plugin;
536
+ }
537
+ //# sourceMappingURL=elementTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementTarget.js","sourceRoot":"","sources":["../../src/plugins/elementTarget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /** Shared defaults for multi-image feedback + smart frame burst. */
2
+ export declare const DEFAULT_MAX_IMAGES = 5;
3
+ export declare const DEFAULT_BURST_MAX_DURATION_MS = 5000;
4
+ export declare const DEFAULT_BURST_SAMPLE_FPS = 6;
5
+ export declare const DEFAULT_BURST_MAX_CANDIDATES = 12;
6
+ /** Mean absolute RGB diff / 255; frames below this vs last kept are dropped. */
7
+ export declare const DEFAULT_BURST_DIFF_THRESHOLD = 0.035;
8
+ export declare const DEFAULT_BURST_MIN_SPACING_MS = 180;
9
+ export declare const DEFAULT_BURST_THUMB_WIDTH = 160;
10
+ /** Clamp gallery / burst keep count to 1–10 (default 5). */
11
+ export declare function clampMaxImages(value: number | undefined): number;
12
+ /** One sampled frame with a downscaled grayscale thumb for scoring. */
13
+ export type SampledFrame = {
14
+ dataUrl: string;
15
+ thumb: Uint8ClampedArray;
16
+ thumbWidth: number;
17
+ thumbHeight: number;
18
+ /** ms since recording start */
19
+ t: number;
20
+ };
21
+ /** Frame kept after change detection. */
22
+ export type BurstFrame = {
23
+ dataUrl: string;
24
+ /** Mean absolute difference vs previous kept frame (0..1). First frame is 1. */
25
+ score: number;
26
+ t: number;
27
+ };
28
+ export type SelectChangedFramesOptions = {
29
+ /** Max frames to keep (after first/last + change filter). */
30
+ maxKeep: number;
31
+ diffThreshold?: number;
32
+ minSpacingMs?: number;
33
+ };
34
+ /**
35
+ * Pick visually distinct frames from a burst sample.
36
+ * Always prefers first and last; fills remaining slots by change score with min spacing.
37
+ */
38
+ export declare function selectChangedFrames(frames: readonly SampledFrame[], options: SelectChangedFramesOptions): BurstFrame[];
39
+ export type CaptureFrameBurstOptions = {
40
+ hideElements?: HTMLElement[];
41
+ maxDurationMs?: number;
42
+ sampleFps?: number;
43
+ maxCandidates?: number;
44
+ diffThreshold?: number;
45
+ minSpacingMs?: number;
46
+ /**
47
+ * Called once recording has started. Use `stop()` to end early.
48
+ * `elapsedMs()` is ms since the first sampled frame (0 before).
49
+ */
50
+ onRecording?: (controls: {
51
+ stop: () => void;
52
+ elapsedMs: () => number;
53
+ }) => void;
54
+ };
55
+ /**
56
+ * Record a short tab capture burst, then keep frames that changed.
57
+ * User can stop early via `onRecording({ stop })`; otherwise stops at maxDurationMs.
58
+ */
59
+ export declare function captureFrameBurst(options?: CaptureFrameBurstOptions): Promise<BurstFrame[] | undefined>;
60
+ //# sourceMappingURL=frameBurst.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frameBurst.d.ts","sourceRoot":"","sources":["../../src/plugins/frameBurst.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAClD,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,gFAAgF;AAChF,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAClD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGhE;AAED,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAYF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,OAAO,EAAE,0BAA0B,GAClC,UAAU,EAAE,CA0Cd;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACjF,CAAC;AA4HF;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,CA6EnC"}