pinpoints 0.1.4
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/LICENSE +22 -0
- package/README.md +187 -0
- package/out/browser/browserSessionManager.d.ts +19 -0
- package/out/browser/browserSessionManager.d.ts.map +1 -0
- package/out/browser/browserSessionManager.js +169 -0
- package/out/browser/browserSessionManager.js.map +1 -0
- package/out/cli/index.d.ts +3 -0
- package/out/cli/index.d.ts.map +1 -0
- package/out/cli/index.js +564 -0
- package/out/cli/index.js.map +1 -0
- package/out/core/pickerToolbar.d.ts +9 -0
- package/out/core/pickerToolbar.d.ts.map +1 -0
- package/out/core/pickerToolbar.js +475 -0
- package/out/core/pickerToolbar.js.map +1 -0
- package/out/export/contextFormatter.d.ts +9 -0
- package/out/export/contextFormatter.d.ts.map +1 -0
- package/out/export/contextFormatter.js +151 -0
- package/out/export/contextFormatter.js.map +1 -0
- package/out/extension.d.ts +4 -0
- package/out/extension.d.ts.map +1 -0
- package/out/extension.js +95 -0
- package/out/extension.js.map +1 -0
- package/out/extraction/domExtractor.d.ts +10 -0
- package/out/extraction/domExtractor.d.ts.map +1 -0
- package/out/extraction/domExtractor.js +72 -0
- package/out/extraction/domExtractor.js.map +1 -0
- package/out/extraction/layoutExtractor.d.ts +11 -0
- package/out/extraction/layoutExtractor.d.ts.map +1 -0
- package/out/extraction/layoutExtractor.js +107 -0
- package/out/extraction/layoutExtractor.js.map +1 -0
- package/out/extraction/redactor.d.ts +9 -0
- package/out/extraction/redactor.d.ts.map +1 -0
- package/out/extraction/redactor.js +78 -0
- package/out/extraction/redactor.js.map +1 -0
- package/out/extraction/screenshotExtractor.d.ts +7 -0
- package/out/extraction/screenshotExtractor.d.ts.map +1 -0
- package/out/extraction/screenshotExtractor.js +104 -0
- package/out/extraction/screenshotExtractor.js.map +1 -0
- package/out/extraction/selectorExtractor.d.ts +16 -0
- package/out/extraction/selectorExtractor.d.ts.map +1 -0
- package/out/extraction/selectorExtractor.js +172 -0
- package/out/extraction/selectorExtractor.js.map +1 -0
- package/out/extraction/styleExtractor.d.ts +10 -0
- package/out/extraction/styleExtractor.d.ts.map +1 -0
- package/out/extraction/styleExtractor.js +96 -0
- package/out/extraction/styleExtractor.js.map +1 -0
- package/out/picker/pickerController.d.ts +33 -0
- package/out/picker/pickerController.d.ts.map +1 -0
- package/out/picker/pickerController.js +979 -0
- package/out/picker/pickerController.js.map +1 -0
- package/out/schemas/index.d.ts +418 -0
- package/out/schemas/index.d.ts.map +1 -0
- package/out/schemas/index.js +128 -0
- package/out/schemas/index.js.map +1 -0
- package/out/source/sourceLocator.d.ts +7 -0
- package/out/source/sourceLocator.d.ts.map +1 -0
- package/out/source/sourceLocator.js +37 -0
- package/out/source/sourceLocator.js.map +1 -0
- package/out/source/sourceMapResolver.d.ts +17 -0
- package/out/source/sourceMapResolver.d.ts.map +1 -0
- package/out/source/sourceMapResolver.js +204 -0
- package/out/source/sourceMapResolver.js.map +1 -0
- package/out/source/workspaceGrep.d.ts +30 -0
- package/out/source/workspaceGrep.d.ts.map +1 -0
- package/out/source/workspaceGrep.js +237 -0
- package/out/source/workspaceGrep.js.map +1 -0
- package/out/testPaste.d.ts +1 -0
- package/out/testPaste.d.ts.map +1 -0
- package/out/testPaste.js +3 -0
- package/out/testPaste.js.map +1 -0
- package/out/ui/statusBarManager.d.ts +14 -0
- package/out/ui/statusBarManager.d.ts.map +1 -0
- package/out/ui/statusBarManager.js +89 -0
- package/out/ui/statusBarManager.js.map +1 -0
- package/package.json +132 -0
- package/resources/fonts/icons.css +19 -0
- package/resources/fonts/icons.html +69 -0
- package/resources/fonts/icons.json +3 -0
- package/resources/fonts/icons.ts +13 -0
- package/resources/fonts/icons.woff +0 -0
- package/resources/icon.png +0 -0
- package/resources/icons/pinpoint-logo.svg +4 -0
- package/resources/logo.svg +97 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextFormatter.js","sourceRoot":"","sources":["../../src/export/contextFormatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAOjC,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,iBA8D9D;AAED,wBAAgB,UAAU,SAKzB"}
|
package/out/extension.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.activate = activate;
|
|
37
|
+
exports.deactivate = deactivate;
|
|
38
|
+
const vscode = __importStar(require("vscode"));
|
|
39
|
+
const pickerController_1 = require("./picker/pickerController");
|
|
40
|
+
const statusBarManager_1 = require("./ui/statusBarManager");
|
|
41
|
+
let pickerController;
|
|
42
|
+
let statusBarManager;
|
|
43
|
+
async function activate(context) {
|
|
44
|
+
console.log('PinPoint extension activated');
|
|
45
|
+
// Initialize managers
|
|
46
|
+
statusBarManager = new statusBarManager_1.StatusBarManager();
|
|
47
|
+
pickerController = new pickerController_1.PickerController(context);
|
|
48
|
+
// Register commands
|
|
49
|
+
const startPickerCmd = vscode.commands.registerCommand('pinpoint.startPicker', async () => {
|
|
50
|
+
if (!pickerController)
|
|
51
|
+
return;
|
|
52
|
+
try {
|
|
53
|
+
statusBarManager?.update('starting', '$(loading~spin) Starting picker...');
|
|
54
|
+
await pickerController.startPicker();
|
|
55
|
+
statusBarManager?.update('active', '$(circle-filled~spin) Picker active');
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
vscode.window.showErrorMessage(`Failed to start picker: ${error}`);
|
|
59
|
+
statusBarManager?.update('idle', '$(circle-outline) PinPoint');
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const stopPickerCmd = vscode.commands.registerCommand('pinpoint.stopPicker', async () => {
|
|
63
|
+
if (!pickerController)
|
|
64
|
+
return;
|
|
65
|
+
try {
|
|
66
|
+
await pickerController.stopPicker();
|
|
67
|
+
statusBarManager?.update('idle', '$(circle-outline) PinPoint');
|
|
68
|
+
vscode.window.showInformationMessage('Picker stopped');
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
vscode.window.showErrorMessage(`Failed to stop picker: ${error}`);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
const clearSelectionCmd = vscode.commands.registerCommand('pinpoint.clearSelection', async () => {
|
|
75
|
+
if (!pickerController)
|
|
76
|
+
return;
|
|
77
|
+
pickerController.clearSelection();
|
|
78
|
+
vscode.window.showInformationMessage('Selection cleared');
|
|
79
|
+
});
|
|
80
|
+
context.subscriptions.push(startPickerCmd, stopPickerCmd, clearSelectionCmd);
|
|
81
|
+
// Show welcome message
|
|
82
|
+
const hasSeenWelcome = context.globalState.get('pinpoint.seenWelcome');
|
|
83
|
+
if (!hasSeenWelcome) {
|
|
84
|
+
vscode.window.showInformationMessage('PinPoint: Hover and click UI elements to capture context for Claude');
|
|
85
|
+
context.globalState.update('pinpoint.seenWelcome', true);
|
|
86
|
+
}
|
|
87
|
+
statusBarManager?.show();
|
|
88
|
+
}
|
|
89
|
+
function deactivate() {
|
|
90
|
+
console.log('PinPoint extension deactivating');
|
|
91
|
+
if (pickerController) {
|
|
92
|
+
pickerController.cleanup();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,4BA8DC;AAED,gCAKC;AA5ED,+CAAiC;AACjC,gEAA6D;AAC7D,4DAAyD;AAEzD,IAAI,gBAA8C,CAAC;AACnD,IAAI,gBAA8C,CAAC;AAE5C,KAAK,UAAU,QAAQ,CAAC,OAAgC;IAC7D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,sBAAsB;IACtB,gBAAgB,GAAG,IAAI,mCAAgB,EAAE,CAAC;IAC1C,gBAAgB,GAAG,IAAI,mCAAgB,CAAC,OAAO,CAAC,CAAC;IAEjD,oBAAoB;IACpB,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CACpD,sBAAsB,EACtB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC9B,IAAI,CAAC;YACH,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,oCAAoC,CAAC,CAAC;YAC3E,MAAM,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACrC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;YACnE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CACnD,qBAAqB,EACrB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC9B,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;YACpC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CACvD,yBAAyB,EACzB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC9B,gBAAgB,CAAC,cAAc,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,aAAa,CAAC,IAAI,CACxB,cAAc,EACd,aAAa,EACb,iBAAiB,CAClB,CAAC;IAEF,uBAAuB;IACvB,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACvE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAClC,qEAAqE,CACtE,CAAC;QACF,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,SAAgB,UAAU;IACxB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,IAAI,gBAAgB,EAAE,CAAC;QACrB,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as puppeteer from 'puppeteer-core';
|
|
2
|
+
import { DomContext } from '../schemas';
|
|
3
|
+
export declare class DomExtractor {
|
|
4
|
+
extract(elementHandle: puppeteer.ElementHandle, contextRadius?: number): Promise<DomContext>;
|
|
5
|
+
private getOuterHTML;
|
|
6
|
+
private getText;
|
|
7
|
+
private cleanHTML;
|
|
8
|
+
private truncateText;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=domExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/domExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,YAAY;IACjB,OAAO,CACX,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,UAAU,CAAC;YAqCR,YAAY;YAcZ,OAAO;IAQrB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DomExtractor = void 0;
|
|
4
|
+
class DomExtractor {
|
|
5
|
+
async extract(elementHandle, contextRadius = 1) {
|
|
6
|
+
const html = await this.getOuterHTML(elementHandle);
|
|
7
|
+
const text = await this.getText(elementHandle);
|
|
8
|
+
const parents = [];
|
|
9
|
+
// Get parent HTMLs up to contextRadius levels
|
|
10
|
+
for (let i = 0; i < contextRadius; i++) {
|
|
11
|
+
const parentHandle = await elementHandle.evaluateHandle((el) => el.parentElement);
|
|
12
|
+
if (!parentHandle || parentHandle.asElement() === null) {
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const parentHtml = await this.getOuterHTML(parentHandle);
|
|
17
|
+
parents.push({
|
|
18
|
+
html: parentHtml,
|
|
19
|
+
level: i + 1,
|
|
20
|
+
});
|
|
21
|
+
// Move up the tree
|
|
22
|
+
elementHandle = parentHandle;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
element: {
|
|
30
|
+
html: this.cleanHTML(html),
|
|
31
|
+
text: text ? this.truncateText(text, 200) : undefined,
|
|
32
|
+
},
|
|
33
|
+
parents: parents.length > 0 ? parents : undefined,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async getOuterHTML(elementHandle) {
|
|
37
|
+
return await elementHandle.evaluate((el) => {
|
|
38
|
+
// Get outer HTML but limit depth for parents
|
|
39
|
+
let html = el.outerHTML;
|
|
40
|
+
// Limit HTML length
|
|
41
|
+
if (html.length > 2000) {
|
|
42
|
+
html = html.substring(0, 2000) + '...';
|
|
43
|
+
}
|
|
44
|
+
return html;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async getText(elementHandle) {
|
|
48
|
+
return await elementHandle.evaluate((el) => {
|
|
49
|
+
// Get visible text content
|
|
50
|
+
const text = el.textContent?.trim() || '';
|
|
51
|
+
return text;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
cleanHTML(html) {
|
|
55
|
+
// Remove data URLs and large inline content
|
|
56
|
+
html = html.replace(/data:[^,]*,[^"'\s]*/g, '[data-url]');
|
|
57
|
+
// Remove inline styles that are too long
|
|
58
|
+
html = html.replace(/style="[^"]{200,}"/g, 'style="[truncated]"');
|
|
59
|
+
// Remove event handlers
|
|
60
|
+
html = html.replace(/on\w+="[^"]*"/g, '');
|
|
61
|
+
return html;
|
|
62
|
+
}
|
|
63
|
+
truncateText(text, maxLength) {
|
|
64
|
+
if (text.length <= maxLength) {
|
|
65
|
+
return text;
|
|
66
|
+
}
|
|
67
|
+
const remaining = text.length - maxLength;
|
|
68
|
+
return `${text.substring(0, maxLength)}... (+${remaining} more chars)`;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.DomExtractor = DomExtractor;
|
|
72
|
+
//# sourceMappingURL=domExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domExtractor.js","sourceRoot":"","sources":["../../src/extraction/domExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as puppeteer from 'puppeteer-core';
|
|
2
|
+
import { Layout } from '../schemas';
|
|
3
|
+
export declare class LayoutExtractor {
|
|
4
|
+
extract(elementHandle: puppeteer.ElementHandle, page: puppeteer.Page): Promise<Layout>;
|
|
5
|
+
private getBoundingBox;
|
|
6
|
+
private getParentBoundingBox;
|
|
7
|
+
private getScrollOffset;
|
|
8
|
+
private getViewport;
|
|
9
|
+
private getDevicePixelRatio;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=layoutExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/layoutExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAe,MAAM,YAAY,CAAC;AAEjD,qBAAa,eAAe;IACpB,OAAO,CACX,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,IAAI,EAAE,SAAS,CAAC,IAAI,GACnB,OAAO,CAAC,MAAM,CAAC;YAgBJ,cAAc;YAiBd,oBAAoB;YAoCpB,eAAe;YAgBf,WAAW;YAgBX,mBAAmB;CAQlC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LayoutExtractor = void 0;
|
|
4
|
+
class LayoutExtractor {
|
|
5
|
+
async extract(elementHandle, page) {
|
|
6
|
+
const bbox = await this.getBoundingBox(elementHandle);
|
|
7
|
+
const parentBbox = await this.getParentBoundingBox(elementHandle);
|
|
8
|
+
const scroll = await this.getScrollOffset(page);
|
|
9
|
+
const viewport = await this.getViewport(page);
|
|
10
|
+
const dpr = await this.getDevicePixelRatio(page);
|
|
11
|
+
return {
|
|
12
|
+
bbox,
|
|
13
|
+
parentBbox: parentBbox || undefined,
|
|
14
|
+
scrollOffset: scroll,
|
|
15
|
+
viewport,
|
|
16
|
+
devicePixelRatio: dpr,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
async getBoundingBox(elementHandle) {
|
|
20
|
+
const box = await elementHandle.boundingBox();
|
|
21
|
+
if (!box) {
|
|
22
|
+
throw new Error('Element is not visible or has no bounding box');
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
top: Math.round(box.y),
|
|
26
|
+
left: Math.round(box.x),
|
|
27
|
+
width: Math.round(box.width),
|
|
28
|
+
height: Math.round(box.height),
|
|
29
|
+
right: Math.round(box.x + box.width),
|
|
30
|
+
bottom: Math.round(box.y + box.height),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async getParentBoundingBox(elementHandle) {
|
|
34
|
+
try {
|
|
35
|
+
const parentBox = await elementHandle.evaluate((el) => {
|
|
36
|
+
const parent = el.parentElement;
|
|
37
|
+
if (!parent) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const rect = parent.getBoundingClientRect();
|
|
41
|
+
return {
|
|
42
|
+
top: rect.top,
|
|
43
|
+
left: rect.left,
|
|
44
|
+
width: rect.width,
|
|
45
|
+
height: rect.height,
|
|
46
|
+
right: rect.right,
|
|
47
|
+
bottom: rect.bottom,
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
if (!parentBox) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
top: Math.round(parentBox.top),
|
|
55
|
+
left: Math.round(parentBox.left),
|
|
56
|
+
width: Math.round(parentBox.width),
|
|
57
|
+
height: Math.round(parentBox.height),
|
|
58
|
+
right: Math.round(parentBox.right),
|
|
59
|
+
bottom: Math.round(parentBox.bottom),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async getScrollOffset(page) {
|
|
67
|
+
try {
|
|
68
|
+
const offset = await page.evaluate(() => ({
|
|
69
|
+
x: window.scrollX,
|
|
70
|
+
y: window.scrollY,
|
|
71
|
+
}));
|
|
72
|
+
return {
|
|
73
|
+
x: Math.round(offset.x),
|
|
74
|
+
y: Math.round(offset.y),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async getViewport(page) {
|
|
82
|
+
try {
|
|
83
|
+
const viewport = await page.evaluate(() => ({
|
|
84
|
+
width: window.innerWidth,
|
|
85
|
+
height: window.innerHeight,
|
|
86
|
+
}));
|
|
87
|
+
return {
|
|
88
|
+
width: Math.round(viewport.width),
|
|
89
|
+
height: Math.round(viewport.height),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async getDevicePixelRatio(page) {
|
|
97
|
+
try {
|
|
98
|
+
const dpr = await page.evaluate(() => window.devicePixelRatio);
|
|
99
|
+
return dpr || 1;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return 1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.LayoutExtractor = LayoutExtractor;
|
|
107
|
+
//# sourceMappingURL=layoutExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutExtractor.js","sourceRoot":"","sources":["../../src/extraction/layoutExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MaxContext } from '../schemas';
|
|
2
|
+
export declare class Redactor {
|
|
3
|
+
private readonly MAX_TEXT_LENGTH;
|
|
4
|
+
private readonly MAX_HTML_LENGTH;
|
|
5
|
+
redact(context: MaxContext): MaxContext;
|
|
6
|
+
private redactHtml;
|
|
7
|
+
private truncateText;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=redactor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactor.d.ts","sourceRoot":"","sources":["../../src/extraction/redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IAExC,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAwDvC,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Redactor = void 0;
|
|
4
|
+
class Redactor {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.MAX_TEXT_LENGTH = 500;
|
|
7
|
+
this.MAX_HTML_LENGTH = 1500;
|
|
8
|
+
}
|
|
9
|
+
redact(context) {
|
|
10
|
+
const redacted = JSON.parse(JSON.stringify(context));
|
|
11
|
+
// Track what was redacted
|
|
12
|
+
const redaction = {
|
|
13
|
+
truncatedFields: [],
|
|
14
|
+
removed: [],
|
|
15
|
+
};
|
|
16
|
+
// Redact DOM text content
|
|
17
|
+
if (redacted.dom.element.text) {
|
|
18
|
+
if (redacted.dom.element.text.length > this.MAX_TEXT_LENGTH) {
|
|
19
|
+
redacted.dom.element.text = this.truncateText(redacted.dom.element.text);
|
|
20
|
+
redaction.truncatedFields.push('dom.element.text');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Redact parent HTML
|
|
24
|
+
if (redacted.dom.parents) {
|
|
25
|
+
redacted.dom.parents = redacted.dom.parents.map((parent) => ({
|
|
26
|
+
...parent,
|
|
27
|
+
html: this.redactHtml(parent.html),
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
// Redact element HTML
|
|
31
|
+
redacted.dom.element.html = this.redactHtml(redacted.dom.element.html);
|
|
32
|
+
// Redact identity text
|
|
33
|
+
if (redacted.identity.text && redacted.identity.text.length > this.MAX_TEXT_LENGTH) {
|
|
34
|
+
redacted.identity.text = this.truncateText(redacted.identity.text);
|
|
35
|
+
redaction.truncatedFields.push('identity.text');
|
|
36
|
+
}
|
|
37
|
+
// Remove sensitive data attributes
|
|
38
|
+
if (redacted.identity.dataAttributes) {
|
|
39
|
+
const sensitivePatterns = [
|
|
40
|
+
/password/i,
|
|
41
|
+
/secret/i,
|
|
42
|
+
/token/i,
|
|
43
|
+
/api[_-]?key/i,
|
|
44
|
+
/auth/i,
|
|
45
|
+
];
|
|
46
|
+
Object.keys(redacted.identity.dataAttributes).forEach((key) => {
|
|
47
|
+
if (sensitivePatterns.some((pattern) => pattern.test(key))) {
|
|
48
|
+
delete redacted.identity.dataAttributes[key];
|
|
49
|
+
redaction.removed.push(`dataAttributes.${key}`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
redacted.redaction = redaction;
|
|
54
|
+
return redacted;
|
|
55
|
+
}
|
|
56
|
+
redactHtml(html) {
|
|
57
|
+
// Remove data URLs
|
|
58
|
+
html = html.replace(/data:[^,]*,[^"'\s]*/g, '[data-url]');
|
|
59
|
+
// Truncate large style attributes
|
|
60
|
+
html = html.replace(/style="[^"]{200,}"/g, 'style="[truncated]"');
|
|
61
|
+
// Remove event handlers
|
|
62
|
+
html = html.replace(/on\w+="[^"]*"/g, '');
|
|
63
|
+
// Truncate if too long
|
|
64
|
+
if (html.length > this.MAX_HTML_LENGTH) {
|
|
65
|
+
html = html.substring(0, this.MAX_HTML_LENGTH) + '...</html>';
|
|
66
|
+
}
|
|
67
|
+
return html;
|
|
68
|
+
}
|
|
69
|
+
truncateText(text) {
|
|
70
|
+
if (text.length <= this.MAX_TEXT_LENGTH) {
|
|
71
|
+
return text;
|
|
72
|
+
}
|
|
73
|
+
const remaining = text.length - this.MAX_TEXT_LENGTH;
|
|
74
|
+
return `${text.substring(0, this.MAX_TEXT_LENGTH)}...(+${remaining} more chars)`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.Redactor = Redactor;
|
|
78
|
+
//# sourceMappingURL=redactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../src/extraction/redactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as puppeteer from 'puppeteer-core';
|
|
2
|
+
import { Screenshot } from '../schemas';
|
|
3
|
+
export declare class ScreenshotExtractor {
|
|
4
|
+
extract(elementHandle: puppeteer.ElementHandle, tempDir: string): Promise<Screenshot>;
|
|
5
|
+
extractWithPadding(elementHandle: puppeteer.ElementHandle, tempDir: string, padding?: number): Promise<Screenshot>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=screenshotExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshotExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/screenshotExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAI5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,mBAAmB;IACxB,OAAO,CACX,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC;IA6BhB,kBAAkB,CACtB,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAW,GACnB,OAAO,CAAC,UAAU,CAAC;CAuCvB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ScreenshotExtractor = void 0;
|
|
40
|
+
const jimp_1 = __importDefault(require("jimp"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
class ScreenshotExtractor {
|
|
44
|
+
async extract(elementHandle, tempDir) {
|
|
45
|
+
const timestamp = Date.now();
|
|
46
|
+
const filename = `element-${timestamp}.png`;
|
|
47
|
+
const filepath = path.join(tempDir, filename);
|
|
48
|
+
try {
|
|
49
|
+
// Ensure temp directory exists
|
|
50
|
+
if (!fs.existsSync(tempDir)) {
|
|
51
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
// Take element screenshot using Puppeteer
|
|
54
|
+
const screenshotBuffer = await elementHandle.screenshot({
|
|
55
|
+
type: 'png',
|
|
56
|
+
});
|
|
57
|
+
// Save to file
|
|
58
|
+
fs.writeFileSync(filepath, screenshotBuffer);
|
|
59
|
+
// Return screenshot object with path
|
|
60
|
+
return {
|
|
61
|
+
path: filepath,
|
|
62
|
+
mimeType: 'image/png',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new Error(`Failed to capture element screenshot: ${error}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async extractWithPadding(elementHandle, tempDir, padding = 16) {
|
|
70
|
+
const timestamp = Date.now();
|
|
71
|
+
const filename = `element-${timestamp}.png`;
|
|
72
|
+
const filepath = path.join(tempDir, filename);
|
|
73
|
+
try {
|
|
74
|
+
if (!fs.existsSync(tempDir)) {
|
|
75
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
// Get element screenshot
|
|
78
|
+
// Get element screenshot
|
|
79
|
+
const screenshotUint8 = await elementHandle.screenshot({
|
|
80
|
+
type: 'png',
|
|
81
|
+
});
|
|
82
|
+
let finalBuffer = Buffer.from(screenshotUint8);
|
|
83
|
+
// Use jimp to add padding
|
|
84
|
+
if (padding > 0) {
|
|
85
|
+
const image = await jimp_1.default.read(finalBuffer);
|
|
86
|
+
const imageWidth = image.getWidth();
|
|
87
|
+
const imageHeight = image.getHeight();
|
|
88
|
+
const paddedImage = new jimp_1.default(imageWidth + (padding * 2), imageHeight + (padding * 2), 0xffffff1a);
|
|
89
|
+
paddedImage.composite(image, padding, padding);
|
|
90
|
+
finalBuffer = await paddedImage.getBufferAsync(jimp_1.default.MIME_PNG);
|
|
91
|
+
}
|
|
92
|
+
fs.writeFileSync(filepath, finalBuffer);
|
|
93
|
+
return {
|
|
94
|
+
path: filepath,
|
|
95
|
+
mimeType: 'image/png',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw new Error(`Failed to capture element screenshot with padding: ${error}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.ScreenshotExtractor = ScreenshotExtractor;
|
|
104
|
+
//# sourceMappingURL=screenshotExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshotExtractor.js","sourceRoot":"","sources":["../../src/extraction/screenshotExtractor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAwB;AACxB,2CAA6B;AAC7B,uCAAyB;AAGzB,MAAa,mBAAmB;IAC9B,KAAK,CAAC,OAAO,CACX,aAAsC,EACtC,OAAe;QAEf,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,SAAS,MAAM,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,+BAA+B;YAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,0CAA0C;YAC1C,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC;gBACtD,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YAEH,eAAe;YACf,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAE7C,qCAAqC;YACrC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,WAAW;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,aAAsC,EACtC,OAAe,EACf,UAAkB,EAAE;QAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,SAAS,MAAM,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,yBAAyB;YACzB,yBAAyB;YACzB,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC;gBACrD,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE/C,0BAA0B;YAC1B,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,KAAK,GAAG,MAAM,cAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBAEtC,MAAM,WAAW,GAAG,IAAI,cAAI,CAAC,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAClG,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAE/C,WAAW,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,cAAI,CAAC,QAAQ,CAAQ,CAAC;YACvE,CAAC;YAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAExC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,WAAW;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sDAAsD,KAAK,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;CACF;AA5ED,kDA4EC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as puppeteer from 'puppeteer-core';
|
|
2
|
+
import { Selector } from '../schemas';
|
|
3
|
+
export declare class SelectorExtractor {
|
|
4
|
+
extract(elementHandle: puppeteer.ElementHandle): Promise<{
|
|
5
|
+
primary: Selector;
|
|
6
|
+
alternates?: Selector[];
|
|
7
|
+
}>;
|
|
8
|
+
private tryDataAttributes;
|
|
9
|
+
private tryStableId;
|
|
10
|
+
private isUnstableId;
|
|
11
|
+
private tryRoleAriaLabel;
|
|
12
|
+
private tryStableClassCombo;
|
|
13
|
+
private tryPositionBased;
|
|
14
|
+
private getCssPath;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=selectorExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectorExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/selectorExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,iBAAiB;IACtB,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;YAmDhG,iBAAiB;YAsBjB,WAAW;IAoBzB,OAAO,CAAC,YAAY;YAmBN,gBAAgB;YAkBhB,mBAAmB;YA6BnB,gBAAgB;YAahB,UAAU;CAgCzB"}
|