@browserbasehq/stagehand 1.0.3 → 1.1.0-alpha.1
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/README.md +10 -5
- package/dist/evals/index.eval.js +1075 -0
- package/dist/evals/index.eval.js.map +1 -0
- package/dist/evals/playground.js +112 -0
- package/dist/evals/playground.js.map +1 -0
- package/dist/evals/utils.js +52 -0
- package/dist/evals/utils.js.map +1 -0
- package/dist/examples/2048.js +108 -0
- package/dist/examples/2048.js.map +1 -0
- package/dist/examples/debugUrl.js +35 -0
- package/dist/examples/debugUrl.js.map +1 -0
- package/dist/examples/example.js +37 -0
- package/dist/examples/example.js.map +1 -0
- package/dist/index.d.ts +22 -6
- package/dist/index.js +629 -152
- package/dist/lib/browserbase.js +56 -0
- package/dist/lib/browserbase.js.map +1 -0
- package/dist/lib/cache.js +78 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/dom/debug.js +119 -0
- package/dist/lib/dom/debug.js.map +1 -0
- package/dist/lib/dom/index.js +20 -0
- package/dist/lib/dom/index.js.map +1 -0
- package/dist/lib/dom/process.js +396 -0
- package/dist/lib/dom/process.js.map +1 -0
- package/dist/lib/dom/utils.js +28 -0
- package/dist/lib/dom/utils.js.map +1 -0
- package/dist/lib/index.js +978 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/inference.js +226 -0
- package/dist/lib/inference.js.map +1 -0
- package/dist/lib/llm/AnthropicClient.js +150 -0
- package/dist/lib/llm/AnthropicClient.js.map +1 -0
- package/dist/lib/llm/LLMClient.js +12 -0
- package/dist/lib/llm/LLMClient.js.map +1 -0
- package/dist/lib/llm/LLMProvider.js +34 -0
- package/dist/lib/llm/LLMProvider.js.map +1 -0
- package/dist/lib/llm/OpenAIClient.js +69 -0
- package/dist/lib/llm/OpenAIClient.js.map +1 -0
- package/dist/lib/prompt.js +288 -0
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/vision.js +194 -0
- package/dist/lib/vision.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.processDom = processDom;
|
|
13
|
+
exports.processAllOfDom = processAllOfDom;
|
|
14
|
+
exports.scrollToHeight = scrollToHeight;
|
|
15
|
+
exports.processElements = processElements;
|
|
16
|
+
function processDom(chunksSeen) {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const { chunk, chunksArray } = yield pickChunk(chunksSeen);
|
|
19
|
+
const { outputString, selectorMap } = yield processElements(chunk);
|
|
20
|
+
console.log(`Stagehand (Browser Process): Extracted dom elements:\n${outputString}`);
|
|
21
|
+
return {
|
|
22
|
+
outputString,
|
|
23
|
+
selectorMap,
|
|
24
|
+
chunk,
|
|
25
|
+
chunks: chunksArray,
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function processAllOfDom() {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
console.log("Stagehand (Browser Process): Processing all of DOM");
|
|
32
|
+
const viewportHeight = window.innerHeight;
|
|
33
|
+
const documentHeight = document.documentElement.scrollHeight;
|
|
34
|
+
const totalChunks = Math.ceil(documentHeight / viewportHeight);
|
|
35
|
+
let index = 0;
|
|
36
|
+
const results = [];
|
|
37
|
+
for (let chunk = 0; chunk < totalChunks; chunk++) {
|
|
38
|
+
const result = yield processElements(chunk, true, index);
|
|
39
|
+
results.push(result);
|
|
40
|
+
index += Object.keys(result.selectorMap).length;
|
|
41
|
+
}
|
|
42
|
+
yield scrollToHeight(0);
|
|
43
|
+
const allOutputString = results.map((result) => result.outputString).join("");
|
|
44
|
+
const allSelectorMap = results.reduce((acc, result) => (Object.assign(Object.assign({}, acc), result.selectorMap)), {});
|
|
45
|
+
console.log(`Stagehand (Browser Process): All dom elements: ${allOutputString}`);
|
|
46
|
+
return {
|
|
47
|
+
outputString: allOutputString,
|
|
48
|
+
selectorMap: allSelectorMap,
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function scrollToHeight(height) {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
window.scrollTo({ top: height, left: 0, behavior: "smooth" });
|
|
55
|
+
// Wait for scrolling to finish using the scrollend event
|
|
56
|
+
yield new Promise((resolve) => {
|
|
57
|
+
let scrollEndTimer;
|
|
58
|
+
const handleScrollEnd = () => {
|
|
59
|
+
clearTimeout(scrollEndTimer);
|
|
60
|
+
scrollEndTimer = window.setTimeout(() => {
|
|
61
|
+
window.removeEventListener("scroll", handleScrollEnd);
|
|
62
|
+
resolve();
|
|
63
|
+
}, 200);
|
|
64
|
+
};
|
|
65
|
+
window.addEventListener("scroll", handleScrollEnd, { passive: true });
|
|
66
|
+
handleScrollEnd();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function processElements(chunk_1) {
|
|
71
|
+
return __awaiter(this, arguments, void 0, function* (chunk, scrollToChunk = true, indexOffset = 0) {
|
|
72
|
+
console.time("processElements:total");
|
|
73
|
+
const viewportHeight = window.innerHeight;
|
|
74
|
+
const chunkHeight = viewportHeight * chunk;
|
|
75
|
+
// Calculate the maximum scrollable offset
|
|
76
|
+
const maxScrollTop = document.documentElement.scrollHeight - window.innerHeight;
|
|
77
|
+
// Adjust the offsetTop to not exceed the maximum scrollable offset
|
|
78
|
+
const offsetTop = Math.min(chunkHeight, maxScrollTop);
|
|
79
|
+
if (scrollToChunk) {
|
|
80
|
+
console.time("processElements:scroll");
|
|
81
|
+
yield scrollToHeight(offsetTop);
|
|
82
|
+
console.timeEnd("processElements:scroll");
|
|
83
|
+
}
|
|
84
|
+
const candidateElements = [];
|
|
85
|
+
const DOMQueue = [...document.body.childNodes];
|
|
86
|
+
const xpathCache = new Map();
|
|
87
|
+
console.log("Stagehand (Browser Process): Generating candidate elements");
|
|
88
|
+
console.time("processElements:findCandidates");
|
|
89
|
+
while (DOMQueue.length > 0) {
|
|
90
|
+
const element = DOMQueue.pop();
|
|
91
|
+
let shouldAddElement = false;
|
|
92
|
+
if (element && isElementNode(element)) {
|
|
93
|
+
const childrenCount = element.childNodes.length;
|
|
94
|
+
// Always traverse child nodes
|
|
95
|
+
for (let i = childrenCount - 1; i >= 0; i--) {
|
|
96
|
+
const child = element.childNodes[i];
|
|
97
|
+
DOMQueue.push(child);
|
|
98
|
+
}
|
|
99
|
+
// Check if element is interactive
|
|
100
|
+
if (isInteractiveElement(element)) {
|
|
101
|
+
if (isActive(element) && isVisible(element)) {
|
|
102
|
+
shouldAddElement = true;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (isLeafElement(element)) {
|
|
106
|
+
if (isActive(element) && isVisible(element)) {
|
|
107
|
+
shouldAddElement = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (element && isTextNode(element) && isTextVisible(element)) {
|
|
112
|
+
shouldAddElement = true;
|
|
113
|
+
}
|
|
114
|
+
if (shouldAddElement) {
|
|
115
|
+
candidateElements.push(element);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
console.timeEnd("processElements:findCandidates");
|
|
119
|
+
const selectorMap = {};
|
|
120
|
+
let outputString = "";
|
|
121
|
+
console.log(`Stagehand (Browser Process): Processing candidate elements: ${candidateElements.length}`);
|
|
122
|
+
console.time("processElements:processCandidates");
|
|
123
|
+
candidateElements.forEach((element, index) => {
|
|
124
|
+
var _a, _b;
|
|
125
|
+
let xpath = xpathCache.get(element);
|
|
126
|
+
if (!xpath) {
|
|
127
|
+
xpath = generateXPath(element);
|
|
128
|
+
xpathCache.set(element, xpath);
|
|
129
|
+
}
|
|
130
|
+
if (isTextNode(element)) {
|
|
131
|
+
const textContent = (_a = element.textContent) === null || _a === void 0 ? void 0 : _a.trim();
|
|
132
|
+
if (textContent) {
|
|
133
|
+
outputString += `${index + indexOffset}:${textContent}\n`;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (isElementNode(element)) {
|
|
137
|
+
const tagName = element.tagName.toLowerCase();
|
|
138
|
+
const attributes = collectEssentialAttributes(element);
|
|
139
|
+
const openingTag = `<${tagName}${attributes ? " " + attributes : ""}>`;
|
|
140
|
+
const closingTag = `</${tagName}>`;
|
|
141
|
+
const textContent = ((_b = element.textContent) === null || _b === void 0 ? void 0 : _b.trim()) || "";
|
|
142
|
+
outputString += `${index + indexOffset}:${openingTag}${textContent}${closingTag}\n`;
|
|
143
|
+
}
|
|
144
|
+
selectorMap[index + indexOffset] = xpath;
|
|
145
|
+
});
|
|
146
|
+
console.timeEnd("processElements:processCandidates");
|
|
147
|
+
console.timeEnd("processElements:total");
|
|
148
|
+
return {
|
|
149
|
+
outputString,
|
|
150
|
+
selectorMap,
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Collects essential attributes from an element.
|
|
156
|
+
* @param element The DOM element.
|
|
157
|
+
* @returns A string of formatted attributes.
|
|
158
|
+
*/
|
|
159
|
+
function collectEssentialAttributes(element) {
|
|
160
|
+
const essentialAttributes = [
|
|
161
|
+
"id",
|
|
162
|
+
"class",
|
|
163
|
+
"href",
|
|
164
|
+
"src",
|
|
165
|
+
"aria-label",
|
|
166
|
+
"aria-name",
|
|
167
|
+
"aria-role",
|
|
168
|
+
"aria-description",
|
|
169
|
+
"aria-expanded",
|
|
170
|
+
"aria-haspopup",
|
|
171
|
+
];
|
|
172
|
+
const attrs = essentialAttributes
|
|
173
|
+
.map((attr) => {
|
|
174
|
+
const value = element.getAttribute(attr);
|
|
175
|
+
return value ? `${attr}="${value}"` : "";
|
|
176
|
+
})
|
|
177
|
+
.filter((attr) => attr !== "");
|
|
178
|
+
// Collect data- attributes
|
|
179
|
+
Array.from(element.attributes).forEach((attr) => {
|
|
180
|
+
if (attr.name.startsWith("data-")) {
|
|
181
|
+
attrs.push(`${attr.name}="${attr.value}"`);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
return attrs.join(" ");
|
|
185
|
+
}
|
|
186
|
+
window.processDom = processDom;
|
|
187
|
+
window.processAllOfDom = processAllOfDom;
|
|
188
|
+
window.processElements = processElements;
|
|
189
|
+
window.scrollToHeight = scrollToHeight;
|
|
190
|
+
function generateXPath(element) {
|
|
191
|
+
if (isElementNode(element) && element.id) {
|
|
192
|
+
return `//*[@id='${element.id}']`;
|
|
193
|
+
}
|
|
194
|
+
const parts = [];
|
|
195
|
+
while (element && (isTextNode(element) || isElementNode(element))) {
|
|
196
|
+
let index = 0;
|
|
197
|
+
let hasSameTypeSiblings = false;
|
|
198
|
+
const siblings = element.parentElement
|
|
199
|
+
? Array.from(element.parentElement.childNodes)
|
|
200
|
+
: [];
|
|
201
|
+
for (let i = 0; i < siblings.length; i++) {
|
|
202
|
+
const sibling = siblings[i];
|
|
203
|
+
if (sibling.nodeType === element.nodeType &&
|
|
204
|
+
sibling.nodeName === element.nodeName) {
|
|
205
|
+
index = index + 1;
|
|
206
|
+
hasSameTypeSiblings = true;
|
|
207
|
+
if (sibling.isSameNode(element)) {
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// text "nodes" are selected differently than elements with xPaths
|
|
213
|
+
if (element.nodeName !== "#text") {
|
|
214
|
+
const tagName = element.nodeName.toLowerCase();
|
|
215
|
+
const pathIndex = hasSameTypeSiblings ? `[${index}]` : "";
|
|
216
|
+
parts.unshift(`${tagName}${pathIndex}`);
|
|
217
|
+
}
|
|
218
|
+
element = element.parentElement;
|
|
219
|
+
}
|
|
220
|
+
return parts.length ? `/${parts.join("/")}` : "";
|
|
221
|
+
}
|
|
222
|
+
const leafElementDenyList = ["SVG", "IFRAME", "SCRIPT", "STYLE", "LINK"];
|
|
223
|
+
const interactiveElementTypes = [
|
|
224
|
+
"A",
|
|
225
|
+
"BUTTON",
|
|
226
|
+
"DETAILS",
|
|
227
|
+
"EMBED",
|
|
228
|
+
"INPUT",
|
|
229
|
+
"LABEL",
|
|
230
|
+
"MENU",
|
|
231
|
+
"MENUITEM",
|
|
232
|
+
"OBJECT",
|
|
233
|
+
"SELECT",
|
|
234
|
+
"TEXTAREA",
|
|
235
|
+
"SUMMARY",
|
|
236
|
+
];
|
|
237
|
+
const interactiveRoles = [
|
|
238
|
+
"button",
|
|
239
|
+
"menu",
|
|
240
|
+
"menuitem",
|
|
241
|
+
"link",
|
|
242
|
+
"checkbox",
|
|
243
|
+
"radio",
|
|
244
|
+
"slider",
|
|
245
|
+
"tab",
|
|
246
|
+
"tabpanel",
|
|
247
|
+
"textbox",
|
|
248
|
+
"combobox",
|
|
249
|
+
"grid",
|
|
250
|
+
"listbox",
|
|
251
|
+
"option",
|
|
252
|
+
"progressbar",
|
|
253
|
+
"scrollbar",
|
|
254
|
+
"searchbox",
|
|
255
|
+
"switch",
|
|
256
|
+
"tree",
|
|
257
|
+
"treeitem",
|
|
258
|
+
"spinbutton",
|
|
259
|
+
"tooltip",
|
|
260
|
+
];
|
|
261
|
+
const interactiveAriaRoles = ["menu", "menuitem", "button"];
|
|
262
|
+
function isElementNode(node) {
|
|
263
|
+
return node.nodeType === Node.ELEMENT_NODE;
|
|
264
|
+
}
|
|
265
|
+
function isTextNode(node) {
|
|
266
|
+
var _a;
|
|
267
|
+
// Trim all white space and ensure the text node is non-empty
|
|
268
|
+
const trimmedText = (_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim().replace(/\s/g, "");
|
|
269
|
+
return node.nodeType === Node.TEXT_NODE && trimmedText !== "";
|
|
270
|
+
}
|
|
271
|
+
/*
|
|
272
|
+
* Checks if an element is visible and therefore relevant for LLMs to consider. We check:
|
|
273
|
+
* - Size
|
|
274
|
+
* - Display properties
|
|
275
|
+
* - Opacity
|
|
276
|
+
* If the element is a child of a previously hidden element, it should not be included, so we don't consider downstream effects of a parent element here
|
|
277
|
+
*/
|
|
278
|
+
const isVisible = (element) => {
|
|
279
|
+
const rect = element.getBoundingClientRect();
|
|
280
|
+
// Ensure the element is within the viewport
|
|
281
|
+
if (rect.width === 0 ||
|
|
282
|
+
rect.height === 0 ||
|
|
283
|
+
rect.top < 0 ||
|
|
284
|
+
rect.top > window.innerHeight) {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
if (!isTopElement(element, rect)) {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
const visible = element.checkVisibility({
|
|
291
|
+
checkOpacity: true,
|
|
292
|
+
checkVisibilityCSS: true,
|
|
293
|
+
});
|
|
294
|
+
return visible;
|
|
295
|
+
};
|
|
296
|
+
const isTextVisible = (element) => {
|
|
297
|
+
const range = document.createRange();
|
|
298
|
+
range.selectNodeContents(element);
|
|
299
|
+
const rect = range.getBoundingClientRect();
|
|
300
|
+
if (rect.width === 0 ||
|
|
301
|
+
rect.height === 0 ||
|
|
302
|
+
rect.top < 0 ||
|
|
303
|
+
rect.top > window.innerHeight) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
const parent = element.parentElement;
|
|
307
|
+
if (!parent) {
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
if (!isTopElement(parent, rect)) {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
const visible = parent.checkVisibility({
|
|
314
|
+
checkOpacity: true,
|
|
315
|
+
checkVisibilityCSS: true,
|
|
316
|
+
});
|
|
317
|
+
return visible;
|
|
318
|
+
};
|
|
319
|
+
function isTopElement(elem, rect) {
|
|
320
|
+
const points = [
|
|
321
|
+
{ x: rect.left + rect.width * 0.25, y: rect.top + rect.height * 0.25 },
|
|
322
|
+
{ x: rect.left + rect.width * 0.75, y: rect.top + rect.height * 0.25 },
|
|
323
|
+
{ x: rect.left + rect.width * 0.25, y: rect.top + rect.height * 0.75 },
|
|
324
|
+
{ x: rect.left + rect.width * 0.75, y: rect.top + rect.height * 0.75 },
|
|
325
|
+
{ x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 },
|
|
326
|
+
];
|
|
327
|
+
return points.some((point) => {
|
|
328
|
+
const topEl = document.elementFromPoint(point.x, point.y);
|
|
329
|
+
let current = topEl;
|
|
330
|
+
while (current && current !== document.body) {
|
|
331
|
+
if (current.isSameNode(elem)) {
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
current = current.parentElement;
|
|
335
|
+
}
|
|
336
|
+
return false;
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
const isActive = (element) => {
|
|
340
|
+
if (element.hasAttribute("disabled") ||
|
|
341
|
+
element.hasAttribute("hidden") ||
|
|
342
|
+
element.getAttribute("aria-disabled") === "true") {
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
return true;
|
|
346
|
+
};
|
|
347
|
+
const isInteractiveElement = (element) => {
|
|
348
|
+
const elementType = element.tagName;
|
|
349
|
+
const elementRole = element.getAttribute("role");
|
|
350
|
+
const elementAriaRole = element.getAttribute("aria-role");
|
|
351
|
+
return ((elementType && interactiveElementTypes.includes(elementType)) ||
|
|
352
|
+
(elementRole && interactiveRoles.includes(elementRole)) ||
|
|
353
|
+
(elementAriaRole && interactiveAriaRoles.includes(elementAriaRole)));
|
|
354
|
+
};
|
|
355
|
+
const isLeafElement = (element) => {
|
|
356
|
+
if (element.textContent === "") {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
if (element.childNodes.length === 0) {
|
|
360
|
+
return !leafElementDenyList.includes(element.tagName);
|
|
361
|
+
}
|
|
362
|
+
// This case ensures that extra context will be included for simple element nodes that contain only text
|
|
363
|
+
if (element.childNodes.length === 1 && isTextNode(element.childNodes[0])) {
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
return false;
|
|
367
|
+
};
|
|
368
|
+
function pickChunk(chunksSeen) {
|
|
369
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
370
|
+
const viewportHeight = window.innerHeight;
|
|
371
|
+
const documentHeight = document.documentElement.scrollHeight;
|
|
372
|
+
const chunks = Math.ceil(documentHeight / viewportHeight);
|
|
373
|
+
const chunksArray = Array.from({ length: chunks }, (_, i) => i);
|
|
374
|
+
const chunksRemaining = chunksArray.filter((chunk) => {
|
|
375
|
+
return !chunksSeen.includes(chunk);
|
|
376
|
+
});
|
|
377
|
+
const currentScrollPosition = window.scrollY;
|
|
378
|
+
const closestChunk = chunksRemaining.reduce((closest, current) => {
|
|
379
|
+
const currentChunkTop = viewportHeight * current;
|
|
380
|
+
const closestChunkTop = viewportHeight * closest;
|
|
381
|
+
return Math.abs(currentScrollPosition - currentChunkTop) <
|
|
382
|
+
Math.abs(currentScrollPosition - closestChunkTop)
|
|
383
|
+
? current
|
|
384
|
+
: closest;
|
|
385
|
+
}, chunksRemaining[0]);
|
|
386
|
+
const chunk = closestChunk;
|
|
387
|
+
if (chunk === undefined) {
|
|
388
|
+
throw new Error(`No chunks remaining to check: ${chunksRemaining}`);
|
|
389
|
+
}
|
|
390
|
+
return {
|
|
391
|
+
chunk,
|
|
392
|
+
chunksArray,
|
|
393
|
+
};
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../lib/dom/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
function waitForDomSettle() {
|
|
11
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
12
|
+
return new Promise((resolve) => {
|
|
13
|
+
const createTimeout = () => {
|
|
14
|
+
return setTimeout(() => {
|
|
15
|
+
resolve();
|
|
16
|
+
}, 2000);
|
|
17
|
+
};
|
|
18
|
+
let timeout = createTimeout();
|
|
19
|
+
const observer = new MutationObserver(() => {
|
|
20
|
+
clearTimeout(timeout);
|
|
21
|
+
timeout = createTimeout();
|
|
22
|
+
});
|
|
23
|
+
observer.observe(window.document.body, { childList: true, subtree: true });
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
window.waitForDomSettle = waitForDomSettle;
|
|
28
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/dom/utils.ts"],"names":[],"mappings":";;;;;;;;;AAAA,SAAe,gBAAgB;;QAC7B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,aAAa,GAAG,GAAG,EAAE;gBACzB,OAAO,UAAU,CAAC,GAAG,EAAE;oBACrB,OAAO,EAAE,CAAC;gBACZ,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC,CAAC;YACF,IAAI,OAAO,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;gBACzC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,GAAG,aAAa,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC;CAAA;AAED,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC"}
|