@speedkit/cli 2.38.0 → 2.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +21 -5
- package/dist/commands/build-parameter-query.d.ts +1 -1
- package/dist/commands/build-prewarm-query.d.ts +1 -1
- package/dist/commands/config/edit.d.ts +6 -0
- package/dist/commands/config/edit.js +23 -0
- package/dist/commands/deploy.d.ts +1 -1
- package/dist/commands/document-handler.d.ts +1 -1
- package/dist/commands/find-pops.js +0 -1
- package/dist/commands/onboarding.d.ts +1 -1
- package/dist/commands/onboarding.js +1 -1
- package/dist/commands/prewarm.d.ts +1 -1
- package/dist/commands/pull.d.ts +1 -1
- package/dist/dummy.spec.js +2 -3
- package/dist/helpers/build-query-helper.js +5 -6
- package/dist/helpers/file-helper.js +2 -3
- package/dist/helpers/get-parsed-config.js +3 -4
- package/dist/helpers/is-directory.js +1 -2
- package/dist/helpers/is-file.js +1 -2
- package/dist/helpers/logging-helper.js +3 -4
- package/dist/helpers/normalize.d.ts +0 -1
- package/dist/helpers/normalize.js +4 -5
- package/dist/helpers/race.js +1 -2
- package/dist/helpers/safe.js +1 -2
- package/dist/helpers/scrape.js +1 -1
- package/dist/helpers/speed-kit-rule-to-reg-exp.js +1 -2
- package/dist/models/cli-parameters.d.ts +1 -1
- package/dist/services/athena/athena-service-factory.js +1 -1
- package/dist/services/athena/athena-service.d.ts +3 -1
- package/dist/services/athena/athena-service.js +14 -2
- package/dist/services/config-api-service.d.ts +1 -1
- package/dist/services/config-api-service.js +1 -0
- package/dist/services/integration-api/file-reader.d.ts +0 -1
- package/dist/services/onboarding/browser/extension/devtools-extension-api.d.ts +7 -0
- package/dist/services/onboarding/browser/extension/devtools-extension-api.js +16 -0
- package/dist/services/onboarding/browser/extension/extension-validator.d.ts +10 -0
- package/dist/services/onboarding/browser/extension/extension-validator.js +71 -0
- package/dist/services/onboarding/dashboard/index.d.ts +1 -0
- package/dist/services/onboarding/dashboard/index.js +23 -22
- package/dist/services/onboarding/dashboard/request-diff-service.d.ts +2 -1
- package/dist/services/onboarding/dashboard/request-diff-service.js +34 -6
- package/dist/services/onboarding/error/browser-extension-error.d.ts +5 -0
- package/dist/services/onboarding/error/browser-extension-error.js +12 -0
- package/dist/services/onboarding/fetch-event-handler.js +13 -14
- package/dist/services/onboarding/onboarding-model.d.ts +33 -3
- package/dist/services/onboarding/onboarding-model.js +32 -5
- package/dist/services/onboarding/onboarding-service-factory.d.ts +1 -0
- package/dist/services/onboarding/onboarding-service-factory.js +22 -4
- package/dist/services/onboarding/onboarding-service.d.ts +3 -3
- package/dist/services/onboarding/onboarding-service.js +35 -30
- package/dist/services/onboarding/todo-collector.d.ts +2 -2
- package/dist/services/onboarding/todo-collector.js +1 -1
- package/dist/services/prewarm/assets/asset-api-client.js +0 -1
- package/oclif.manifest.json +25 -1
- package/package.json +19 -19
- package/dist/services/onboarding/dashboard/frontend-dist/assets/index-e3bd4f6e.css +0 -1
- package/dist/services/onboarding/dashboard/frontend-dist/assets/main-215271c2.js +0 -9
- package/dist/services/onboarding/dashboard/frontend-dist/index.html +0 -18
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.OnboardingService = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const puppeteer_extra_1 = tslib_1.__importDefault(require("puppeteer-extra"));
|
|
6
|
-
const
|
|
6
|
+
const onboarding_model_1 = require("./onboarding-model");
|
|
7
7
|
const cli_1 = require("../cli");
|
|
8
8
|
const safe_1 = require("../../helpers/safe");
|
|
9
9
|
/**
|
|
@@ -15,15 +15,15 @@ class OnboardingService {
|
|
|
15
15
|
fetchEventHandler;
|
|
16
16
|
fileWatcher;
|
|
17
17
|
cli;
|
|
18
|
-
|
|
18
|
+
developmentToolsMessages;
|
|
19
19
|
reinstallOnNextNavigate = false;
|
|
20
|
-
constructor(browserContext, customerConfig, fetchEventHandler, fileWatcher, cli,
|
|
20
|
+
constructor(browserContext, customerConfig, fetchEventHandler, fileWatcher, cli, developmentToolsMessages) {
|
|
21
21
|
this.browserContext = browserContext;
|
|
22
22
|
this.customerConfig = customerConfig;
|
|
23
23
|
this.fetchEventHandler = fetchEventHandler;
|
|
24
24
|
this.fileWatcher = fileWatcher;
|
|
25
25
|
this.cli = cli;
|
|
26
|
-
this.
|
|
26
|
+
this.developmentToolsMessages = developmentToolsMessages;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* prepare puppeteerBrowser, add eventListeners and start
|
|
@@ -33,10 +33,6 @@ class OnboardingService {
|
|
|
33
33
|
const browser = await this.prepareBrowser();
|
|
34
34
|
const page = await this.preparePage(browser);
|
|
35
35
|
this.cli.endAction(cli_1.CliActionStatus.COMPLETED);
|
|
36
|
-
if (this.browserContext.startParameterDashboard) {
|
|
37
|
-
const { goto } = await browser.newPage();
|
|
38
|
-
await goto("http://skonboarding.local/");
|
|
39
|
-
}
|
|
40
36
|
await this.navigate(page, `${this.customerConfig.scope}speed-kit-install.html?url=${this.customerConfig.scope}`);
|
|
41
37
|
}
|
|
42
38
|
async prepareBrowser() {
|
|
@@ -52,7 +48,7 @@ class OnboardingService {
|
|
|
52
48
|
await this.fetchEventHandler.handleRequestFetchEvents(target);
|
|
53
49
|
}
|
|
54
50
|
}
|
|
55
|
-
browser.on(
|
|
51
|
+
browser.on(onboarding_model_1.BROWSER_EVENTS.DISCONNECTED, () => {
|
|
56
52
|
this.cli.writeError("Browser disconnected, shutting down");
|
|
57
53
|
process.exit(-1);
|
|
58
54
|
});
|
|
@@ -60,14 +56,18 @@ class OnboardingService {
|
|
|
60
56
|
}
|
|
61
57
|
async preparePage(browser) {
|
|
62
58
|
const page = await this.findPage(browser);
|
|
63
|
-
await this.prepareCleanState(page);
|
|
59
|
+
await (0, safe_1.safe)(this.prepareCleanState(page));
|
|
64
60
|
this.registerFileWatcher(page);
|
|
65
61
|
this.registerReinstallSpeedKitOnNavigate(page);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
await (0, safe_1.safe)(page.evaluate(`window.skOnboarding = ${JSON.stringify(tasks)}`));
|
|
62
|
+
this.developmentToolsMessages.addMessage({
|
|
63
|
+
id: "cli",
|
|
64
|
+
data: `config loaded for app "${this.customerConfig.app}"`,
|
|
70
65
|
});
|
|
66
|
+
const messages = this.developmentToolsMessages.messages;
|
|
67
|
+
await page.evaluateOnNewDocument((messages) => {
|
|
68
|
+
// @ts-expect-error unknown method getSkCliMessages
|
|
69
|
+
window.skCliMessages = messages;
|
|
70
|
+
}, messages);
|
|
71
71
|
return page;
|
|
72
72
|
}
|
|
73
73
|
async findPage(browser) {
|
|
@@ -80,27 +80,33 @@ class OnboardingService {
|
|
|
80
80
|
return browser.newPage();
|
|
81
81
|
}
|
|
82
82
|
async prepareCleanState(page) {
|
|
83
|
-
const
|
|
84
|
-
pageClient.on("ServiceWorker.workerRegistrationUpdated", ({ registrations, }) => {
|
|
85
|
-
for (const registration of registrations) {
|
|
86
|
-
if (registration.isDeleted) {
|
|
87
|
-
this.cli.writeWarning((0, chalk_1.default) `{yellow Unregistered Service Worker} at {bold ${registration.scopeURL}} (${registration.registrationId})`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
});
|
|
83
|
+
const cdpSession = await page.target().createCDPSession();
|
|
91
84
|
// cleanUp old serviceWorkers
|
|
92
|
-
await
|
|
93
|
-
await
|
|
85
|
+
await cdpSession.send("ServiceWorker.enable");
|
|
86
|
+
await cdpSession.send("ServiceWorker.unregister", {
|
|
94
87
|
scopeURL: this.browserContext.domain,
|
|
95
88
|
});
|
|
96
89
|
// clear storage for a clean start
|
|
97
|
-
await
|
|
98
|
-
await
|
|
90
|
+
await cdpSession.send("Storage.clearCookies");
|
|
91
|
+
await cdpSession.send("Storage.clearDataForOrigin", {
|
|
99
92
|
origin: this.browserContext.domain,
|
|
100
93
|
storageTypes: "all",
|
|
101
94
|
});
|
|
102
|
-
await
|
|
103
|
-
await
|
|
95
|
+
await cdpSession.send("Emulation.clearDeviceMetricsOverride");
|
|
96
|
+
await cdpSession.send("Emulation.clearGeolocationOverride");
|
|
97
|
+
(0, safe_1.safe)(() => {
|
|
98
|
+
cdpSession.on(onboarding_model_1.CDP_SESSION.EVENTS.SERVICE_WORKER.REGISTRATION_UPDATED, ({ registrations, }) => {
|
|
99
|
+
for (const registration of registrations) {
|
|
100
|
+
if (registration.isDeleted) {
|
|
101
|
+
this.developmentToolsMessages.addMessage({
|
|
102
|
+
id: "serviceWorker",
|
|
103
|
+
data: `Unregistered Service Worker at ${registration.scopeURL} id: ${registration.registrationId}`,
|
|
104
|
+
});
|
|
105
|
+
this.cli.writeWarning(`${this.cli.style.yellow("Unregistered Service Worker")} at ${this.cli.style.bold(registration.scopeURL)} (${registration.registrationId})`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
104
110
|
}
|
|
105
111
|
async reinstallSpeedKit(page, pathname) {
|
|
106
112
|
const url = new URL(page.url());
|
|
@@ -129,8 +135,7 @@ class OnboardingService {
|
|
|
129
135
|
}
|
|
130
136
|
async navigate(page, pathname) {
|
|
131
137
|
const goto = new URL(pathname, `${this.browserContext.domain}`);
|
|
132
|
-
await page.goto(goto.toString());
|
|
133
|
-
await page.bringToFront();
|
|
138
|
+
await (0, safe_1.safe)(page.goto(goto.toString()));
|
|
134
139
|
}
|
|
135
140
|
}
|
|
136
141
|
exports.OnboardingService = OnboardingService;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InstallResourceInterface } from "../integration-api/integration-api-model";
|
|
2
2
|
export type task = {
|
|
3
3
|
todo: string;
|
|
4
4
|
context: string;
|
|
@@ -11,7 +11,7 @@ export type task = {
|
|
|
11
11
|
*/
|
|
12
12
|
export declare class TodoCollector {
|
|
13
13
|
private files;
|
|
14
|
-
constructor(files:
|
|
14
|
+
constructor(files: InstallResourceInterface[]);
|
|
15
15
|
getOpenTasks(): task[];
|
|
16
16
|
lineNumber(needle: string, haystack: string): number;
|
|
17
17
|
lineNumberByIndex(index: number, string: string): number;
|
package/oclif.manifest.json
CHANGED
|
@@ -686,7 +686,31 @@
|
|
|
686
686
|
"commands",
|
|
687
687
|
"wpt-launcher.js"
|
|
688
688
|
]
|
|
689
|
+
},
|
|
690
|
+
"config:edit": {
|
|
691
|
+
"aliases": [],
|
|
692
|
+
"args": {},
|
|
693
|
+
"description": "Edit cli config",
|
|
694
|
+
"examples": [
|
|
695
|
+
"$ sk config edit"
|
|
696
|
+
],
|
|
697
|
+
"flags": {},
|
|
698
|
+
"hasDynamicHelp": false,
|
|
699
|
+
"hiddenAliases": [],
|
|
700
|
+
"id": "config:edit",
|
|
701
|
+
"pluginAlias": "@speedkit/cli",
|
|
702
|
+
"pluginName": "@speedkit/cli",
|
|
703
|
+
"pluginType": "core",
|
|
704
|
+
"strict": true,
|
|
705
|
+
"enableJsonFlag": false,
|
|
706
|
+
"isESM": false,
|
|
707
|
+
"relativePath": [
|
|
708
|
+
"dist",
|
|
709
|
+
"commands",
|
|
710
|
+
"config",
|
|
711
|
+
"edit.js"
|
|
712
|
+
]
|
|
689
713
|
}
|
|
690
714
|
},
|
|
691
|
-
"version": "2.
|
|
715
|
+
"version": "2.40.0"
|
|
692
716
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speedkit/cli",
|
|
3
3
|
"description": "Speed Kit CLI",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.40.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Baqend.com",
|
|
7
7
|
"email": "info@baqend.com"
|
|
@@ -22,8 +22,7 @@
|
|
|
22
22
|
"scripts": {
|
|
23
23
|
"prepare": "husky install",
|
|
24
24
|
"prebuild": "shx rm -rf dist",
|
|
25
|
-
"build": "tsc -b && copyfiles -u 1 src/**/*hbs ./dist && copyfiles -u 1 src/**/*js ./dist
|
|
26
|
-
"build:dashboard": "copyfiles -u 1 src/services/onboarding/dashboard/frontend-dist/**/*.html dist && copyfiles -u 1 src/services/onboarding/dashboard/frontend-dist/**/*.js dist && copyfiles -u 1 src/services/onboarding/dashboard/frontend-dist/**/*.css dist",
|
|
25
|
+
"build": "tsc -b && copyfiles -u 1 src/**/*hbs ./dist && copyfiles -u 1 src/**/*js ./dist",
|
|
27
26
|
"postbuild": "oclif manifest && oclif readme",
|
|
28
27
|
"prepack": "npm run build",
|
|
29
28
|
"test": "mocha --config ./.mocharc.cjs --reporter mocha-junit-reporter --reporter-options mochaFile=junit.xml",
|
|
@@ -83,21 +82,22 @@
|
|
|
83
82
|
"domhandler": "5.0.3",
|
|
84
83
|
"domutils": "^3.1",
|
|
85
84
|
"dotenv": "^16.4",
|
|
86
|
-
"esbuild": "^0.20",
|
|
87
85
|
"extract-zip": "^2.0.1",
|
|
88
|
-
"fs-extra": "^
|
|
89
|
-
"handlebars": "^4.7",
|
|
86
|
+
"fs-extra": "^11.2.0",
|
|
87
|
+
"handlebars": "^4.7.8",
|
|
90
88
|
"htmlparser2": "8.0",
|
|
91
89
|
"json2csv": "^6.0.0-alpha.2",
|
|
92
|
-
"node-fetch": "^2.
|
|
90
|
+
"node-fetch": "^2.7.0",
|
|
93
91
|
"parse5": "7.1",
|
|
94
92
|
"parse5-htmlparser2-tree-adapter": "7.0.0",
|
|
95
|
-
"puppeteer": "^
|
|
96
|
-
"puppeteer-core": "^22.
|
|
97
|
-
"puppeteer-extra": "^3.3",
|
|
98
|
-
"puppeteer-extra-plugin-user-preferences": "^2.4",
|
|
93
|
+
"puppeteer": "^22.6.5",
|
|
94
|
+
"puppeteer-core": "^22.6.5",
|
|
95
|
+
"puppeteer-extra": "^3.3.6",
|
|
96
|
+
"puppeteer-extra-plugin-user-preferences": "^2.4.1",
|
|
99
97
|
"strip-comments": "^2.0.1",
|
|
100
|
-
"uuid": "^
|
|
98
|
+
"uuid": "^9.0.1",
|
|
99
|
+
"esbuild": "^0.20.2",
|
|
100
|
+
"ts-node": "^10.9.2"
|
|
101
101
|
},
|
|
102
102
|
"devDependencies": {
|
|
103
103
|
"@commitlint/cli": "^17.7.1",
|
|
@@ -109,10 +109,10 @@
|
|
|
109
109
|
"@types/fs-extra": "^9.0.13",
|
|
110
110
|
"@types/mocha": "^10.0",
|
|
111
111
|
"@types/mock-fs": "^4.13.4",
|
|
112
|
-
"@types/node": "^
|
|
113
|
-
"@types/uuid": "^
|
|
112
|
+
"@types/node": "^20.12.7",
|
|
113
|
+
"@types/uuid": "^9.0.8",
|
|
114
114
|
"@typescript-eslint/eslint-plugin": "^7.2.0",
|
|
115
|
-
"chai": "^4.4",
|
|
115
|
+
"chai": "^4.4.1",
|
|
116
116
|
"copyfiles": "^2.4.1",
|
|
117
117
|
"eslint": "^8.57",
|
|
118
118
|
"eslint-config-prettier": "^9.1",
|
|
@@ -124,16 +124,16 @@
|
|
|
124
124
|
"memfs": "^4.8.0",
|
|
125
125
|
"mocha": "^10.1.0",
|
|
126
126
|
"mocha-junit-reporter": "^2.2.1",
|
|
127
|
+
"mock-fs": "^5.2.0",
|
|
127
128
|
"nock": "^13.5",
|
|
128
129
|
"nyc": "^15.1.0",
|
|
129
|
-
"oclif": "^4.
|
|
130
|
+
"oclif": "^4.8.8",
|
|
130
131
|
"shx": "^0.3.4",
|
|
131
132
|
"ts-mocha": "^10.0.0",
|
|
132
|
-
"ts-node": "^10.9",
|
|
133
133
|
"ts-sinon": "^2.0.2",
|
|
134
134
|
"tslib": "^2.6",
|
|
135
|
-
"typescript": "^5.4",
|
|
136
|
-
"typescript-json-serializer": "^
|
|
135
|
+
"typescript": "^5.4.5",
|
|
136
|
+
"typescript-json-serializer": "^6.0.1"
|
|
137
137
|
},
|
|
138
138
|
"lint-staged": {
|
|
139
139
|
"*.ts": [
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins-Regular;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root{--red: #ff4c3f;--red-dimmed: #bb382e;--green: #10af80;--greenOpacity: RGBA(12, 217, 149, .16);--blue: #0568fd;--blue-dimmed: #034cb9;--disabled: #6b7c96;--disabled-dimmed: #525f73;--fontPrimary: #282c39;--fontSecondary: #6b7c96;--backgroundPrimary: #fff;--backgroundSecondary: #eef2f7;--borderPrimary: #d8e1ed;--borderSecondary: #d8e1ed;--whiteOpacity: RGBA(255, 255, 255, .6);--tableFontPrimary: var(--fontPrimary);--tableFontSecondary: var(--fontSecondary);--tableBackgroundPrimary: var(--backgroundPrimary);--tableBackgroundSecondary: #f7f8fb;--tableBackgroundTernary: var(--backgroundSecondary);--tableBorder: #d8e1ed;--hover: var(--backgroundSecondary);--input-background: var(--backgroundPrimary);font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;color-scheme:light dark;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}@media (prefers-contrast: more){:root{--fontSecondary: #282c39;--backgroundPrimary: #fff;--backgroundSecondary: #d8e1ed;--borderPrimary: #6b7c96;--borderSecondary: #6b7c96;--buttonPrimary: #0568fd;--buttonSecondary: #282c39;--whiteOpacity: RGBA(255, 255, 255, 1)}}@font-face{font-family:Lato;font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(/fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:Lato-Bold;font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(/fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:local("Poppins Regular"),local("Poppins-Regular"),url(/fonts/Poppins-Regular.ttf) format("truetype")}@font-face{font-family:Poppins-SemiBold;font-style:normal;font-weight:600;src:local("Poppins SemiBold"),local("Poppins-SemiBold"),url(/fonts/Poppins-SemiBold.ttf) format("truetype")}a{font-weight:500;text-decoration:inherit}a:hover{color:var(--blue-dimmed)}body{margin:0;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-y-\[0\.185rem\]{top:.185rem;bottom:.185rem}.left-1\/2-2{left:calc(50% - 2px)}.left-\[2px\]{left:2px}.top-\[0\]{top:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.-ml-8{margin-left:-2rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.mr-auto{margin-right:auto}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.min-h-screen{min-height:100vh}.w-1\/12{width:8.333333%}.w-1\/2{width:50%}.w-2\/12{width:16.666667%}.w-7\/12{width:58.333333%}.w-full{width:100%}.w-sidebar{width:clamp(60px,80px,130px)}.min-w-full{min-width:100%}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-between{align-content:space-between}.content-evenly{align-content:space-evenly}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-evenly{justify-content:space-evenly}.overflow-hidden{overflow:hidden}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-bq-blue{border-color:var(--blue)}.border-bq-sec-border{border-color:var(--borderSecondary)}.border-bq-table-border{border-color:var(--tableBorder)}.border-b-bq-table-border{border-bottom-color:var(--tableBorder)}.bg-bq-blue{background-color:var(--blue)}.bg-bq-grey-light{--tw-bg-opacity: 1;background-color:rgb(242 244 246 / var(--tw-bg-opacity))}.bg-bq-prim-background{background-color:var(--backgroundPrimary)}.bg-bq-sec-background{background-color:var(--backgroundSecondary)}.bg-bq-table-background-prim{background-color:var(--tableBackgroundPrimary)}.bg-bq-table-background-sec{background-color:var(--tableBackgroundSecondary)}.bg-green-200{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity))}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-\[0\.185rem\]{padding:.185rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.font-bold{font-family:Poppins-SemiBold}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-clamp font-size{-d-e-f-a-u-l-t:clamp(.8rem,.425rem + 3vw,2rem);s:clamp(.3rem,.3438rem + 1.25vw,.8rem);m:clamp(.5rem,.3438rem + 1.25vw,1rem);xl:clamp(1rem,.6875rem + 2.5vw,2rem)}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.capitalize{text-transform:capitalize}.text-bq-blue{color:var(--blue)}.text-bq-prim-font{color:var(--fontPrimary)}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.opacity-60{opacity:.6}.shadow{--tw-shadow: 0px 1px 4px 0px #282C3914;--tw-shadow-colored: 0px 1px 4px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}*:disabled{cursor:default}*:disabled:disabled{opacity:.5}@media (prefers-color-scheme: dark){html{--fontPrimary: #e1e8f0;--fontSecondary: #8493ad;--backgroundPrimary: #282c39;--backgroundSecondary: #121212;--borderPrimary: #2e373e;--borderSecondary: #4a5a65;--buttonPrimary: #0568fd;--buttonSecondary: #d8e1ed;--whiteOpacity: RGBA(255, 255, 255, .06);--hover: #393f51;--tableFontPrimary: #d8e1ed;--tableFontSecondary: rgba(216 225 237, .6);--tableBackgroundPrimary: var(--backgroundPrimary);--tableBackgroundSecondary: #21242d;--tableBackgroundTernary: #1d1f26;--tableBorder: #333a4b;--input-background: var(--backgroundSecondary);color-scheme:dark}}.g-input:focus-within{margin:-1px;border-width:2px;border-color:var(--blue)}.g-content-divider{margin-top:1.25rem;margin-bottom:1.25rem;border-width:1px;border-left-width:0px;border-right-width:0px;border-bottom-width:0px;border-color:var(--borderPrimary)}#app{height:100%;width:100%}.tabs-component{margin-bottom:1rem;display:flex;flex-direction:column;padding-left:.5rem;padding-right:.5rem}.tabs-component-tabs{margin-bottom:-.5rem;display:flex}.tabs-component-tabs .tabs-component-tab-a{display:block;background-color:var(--backgroundSecondary);padding:.5rem .75rem;color:var(--fontSecondary)}.tabs-component-tabs .tabs-component-tab-a.is-active,.tabs-component-tabs .tabs-component-tab-a:hover{background-color:var(--backgroundPrimary);color:var(--fontPrimary)}.tabs-component-panels{padding:.5rem;color:var(--fontPrimary)}.router-link-exact-active{background-color:var(--tableBackgroundSecondary)}.hover\:scale-95:hover{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-blue-200:hover{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity))}.hover\:outline:hover{outline-style:solid}.hover\:outline-bq-blue-dimmed:hover{outline-color:var(--blue-dimmed)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.datatable{border-collapse:collapse;table-layout:fixed}.data-table th{text-align:left}.datatable tr:nth-child(odd) textarea,.datatable tr:nth-child(odd) input,.datatable tr:nth-child(odd){background-color:var(--tableBackgroundPrimary)}.datatable tr:nth-child(2n) textarea,.datatable tr:nth-child(2n) input,.datatable tr:nth-child(2n){background-color:var(--tableBackgroundSecondary)}.datatable td{padding:.25rem}.datatable tr textarea.identical,.datatable tr input.identical{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity))}.datatable tr textarea.diff,.datatable tr input.diff{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity))}
|