@midscene/web 0.1.4 → 0.2.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 (28) hide show
  1. package/README.md +7 -0
  2. package/dist/es/index.js +306 -170
  3. package/dist/es/playwright-report.js +22 -15
  4. package/dist/lib/index.js +320 -188
  5. package/dist/lib/playwright-report.js +31 -28
  6. package/dist/script/htmlElement.js +30 -18
  7. package/dist/script/types/htmlElement.d.ts +5 -5
  8. package/dist/types/index.d.ts +18 -12
  9. package/dist/types/playwright-report.d.ts +2 -2
  10. package/dist/visualizer-report/index.html +1 -1
  11. package/dist/visualizer-report/static/css/index.eccd04e1.css +1 -0
  12. package/dist/visualizer-report/static/css/index.eccd04e1.css.map +1 -0
  13. package/dist/visualizer-report/static/js/160.5ac2287a.js +6 -0
  14. package/dist/visualizer-report/static/js/160.5ac2287a.js.map +1 -0
  15. package/dist/visualizer-report/static/js/index.e71be3a2.js +1 -0
  16. package/dist/visualizer-report/static/js/index.e71be3a2.js.map +1 -0
  17. package/dist/visualizer-report/static/js/lib-antd.583c9200.js +141 -0
  18. package/dist/visualizer-report/static/js/lib-antd.583c9200.js.map +1 -0
  19. package/package.json +7 -6
  20. package/dist/visualizer-report/static/css/index.c7751597.css +0 -1
  21. package/dist/visualizer-report/static/css/index.c7751597.css.map +0 -1
  22. package/dist/visualizer-report/static/js/915.d3f73af1.js +0 -6
  23. package/dist/visualizer-report/static/js/915.d3f73af1.js.map +0 -1
  24. package/dist/visualizer-report/static/js/index.ae9a86c5.js +0 -1
  25. package/dist/visualizer-report/static/js/index.ae9a86c5.js.map +0 -1
  26. package/dist/visualizer-report/static/js/lib-antd.55d65804.js +0 -189
  27. package/dist/visualizer-report/static/js/lib-antd.55d65804.js.map +0 -1
  28. /package/dist/visualizer-report/static/js/{915.d3f73af1.js.LICENSE.txt → 160.5ac2287a.js.LICENSE.txt} +0 -0
@@ -2243,23 +2243,22 @@ __export(reporter_exports, {
2243
2243
  module.exports = __toCommonJS(reporter_exports);
2244
2244
 
2245
2245
  // src/playwright/reporter/util.ts
2246
- var import_path2 = __toESM(require("path"));
2247
- var import_assert2 = __toESM(require("assert"));
2248
- var import_os = __toESM(require("os"));
2249
- var import_fs_extra = __toESM(require_lib());
2246
+ var import_node_assert2 = __toESM(require("assert"));
2247
+ var import_node_os = __toESM(require("os"));
2248
+ var import_node_path2 = __toESM(require("path"));
2250
2249
 
2251
2250
  // src/common/utils.ts
2252
- var import_fs = __toESM(require("fs"));
2253
- var import_assert = __toESM(require("assert"));
2254
- var import_path = __toESM(require("path"));
2251
+ var import_node_assert = __toESM(require("assert"));
2252
+ var import_node_fs = __toESM(require("fs"));
2253
+ var import_node_path = __toESM(require("path"));
2255
2254
  var import_image = require("@midscene/core/image");
2256
2255
  var import_utils = require("@midscene/core/utils");
2257
2256
  function findNearestPackageJson(dir) {
2258
- const packageJsonPath = import_path.default.join(dir, "package.json");
2259
- if (import_fs.default.existsSync(packageJsonPath)) {
2257
+ const packageJsonPath = import_node_path.default.join(dir, "package.json");
2258
+ if (import_node_fs.default.existsSync(packageJsonPath)) {
2260
2259
  return dir;
2261
2260
  }
2262
- const parentDir = import_path.default.dirname(dir);
2261
+ const parentDir = import_node_path.default.dirname(dir);
2263
2262
  if (parentDir === dir) {
2264
2263
  return null;
2265
2264
  }
@@ -2267,19 +2266,22 @@ function findNearestPackageJson(dir) {
2267
2266
  }
2268
2267
 
2269
2268
  // src/playwright/reporter/util.ts
2269
+ var import_fs_extra = __toESM(require_lib());
2270
2270
  function generateTestData(testDataList2) {
2271
- const filterDataList = testDataList2.reduce((res, testData) => {
2272
- if (res.find((item) => item.testId === testData.testId)) {
2273
- return res;
2274
- } else {
2271
+ const filterDataList = testDataList2.reduce(
2272
+ (res, testData) => {
2273
+ if (res.find((item) => item.testId === testData.testId)) {
2274
+ return res;
2275
+ }
2275
2276
  return [...res, testData];
2276
- }
2277
- }, []);
2277
+ },
2278
+ []
2279
+ );
2278
2280
  const reportDir = findNearestPackageJson(__dirname);
2279
- (0, import_assert2.default)(reportDir, `can't get reportDir from ${__dirname}`);
2280
- const targetReportDir = import_path2.default.join(process.cwd(), "midscene_run", "report");
2281
- const reportHtmlDir = import_path2.default.join(reportDir, `dist/visualizer-report`);
2282
- const tempDir = import_path2.default.join(import_os.default.tmpdir(), "temp-folder");
2281
+ (0, import_node_assert2.default)(reportDir, `can't get reportDir from ${__dirname}`);
2282
+ const targetReportDir = import_node_path2.default.join(process.cwd(), "midscene_run", "report");
2283
+ const reportHtmlDir = import_node_path2.default.join(reportDir, "dist/visualizer-report");
2284
+ const tempDir = import_node_path2.default.join(import_node_os.default.tmpdir(), "temp-folder");
2283
2285
  try {
2284
2286
  import_fs_extra.default.copySync(reportHtmlDir, tempDir);
2285
2287
  import_fs_extra.default.moveSync(tempDir, targetReportDir, { overwrite: true });
@@ -2287,7 +2289,7 @@ function generateTestData(testDataList2) {
2287
2289
  console.error("An error occurred while copying the folder.", err);
2288
2290
  }
2289
2291
  try {
2290
- import_fs_extra.default.removeSync(import_path2.default.join(targetReportDir, "public"));
2292
+ import_fs_extra.default.removeSync(import_node_path2.default.join(targetReportDir, "public"));
2291
2293
  } catch (err) {
2292
2294
  console.error("An error occurred while deleting the folder.", err);
2293
2295
  }
@@ -2295,14 +2297,14 @@ function generateTestData(testDataList2) {
2295
2297
  const { dumpPath } = testData;
2296
2298
  if (dumpPath) {
2297
2299
  const srcFile = dumpPath.split("/").pop();
2298
- (0, import_assert2.default)(srcFile, `Failed to get source file name from ${dumpPath}`);
2299
- const destFile = import_path2.default.join(targetReportDir, "public", srcFile);
2300
+ (0, import_node_assert2.default)(srcFile, `Failed to get source file name from ${dumpPath}`);
2301
+ const destFile = import_node_path2.default.join(targetReportDir, "public", srcFile);
2300
2302
  import_fs_extra.default.copySync(dumpPath, destFile);
2301
2303
  }
2302
2304
  }
2303
2305
  try {
2304
2306
  import_fs_extra.default.outputFileSync(
2305
- import_path2.default.join(targetReportDir, "public", "test-data-list.json"),
2307
+ import_node_path2.default.join(targetReportDir, "public", "test-data-list.json"),
2306
2308
  JSON.stringify({ "test-list": filterDataList })
2307
2309
  );
2308
2310
  } catch (err) {
@@ -2317,7 +2319,7 @@ function logger(...message) {
2317
2319
  console.log("Midscene e2e report:", ...message);
2318
2320
  }
2319
2321
  }
2320
- var MidSceneReporter = class {
2322
+ var MidsceneReporter = class {
2321
2323
  async onBegin(config, suite) {
2322
2324
  const suites = suite.allTests();
2323
2325
  logger(`Starting the run with ${suites.length} tests`);
@@ -2333,7 +2335,7 @@ var MidSceneReporter = class {
2333
2335
  return false;
2334
2336
  });
2335
2337
  aiActionTestData.forEach((testData) => {
2336
- const parseData = JSON.parse(testData.description);
2338
+ const parseData = JSON.parse((testData == null ? void 0 : testData.description) || "{}");
2337
2339
  if (parseData.testId === test.id && !testDataList.find((item) => item.testId === test.id)) {
2338
2340
  testDataList.push({
2339
2341
  testId: test.id,
@@ -2352,8 +2354,9 @@ var MidSceneReporter = class {
2352
2354
  generateTestData(testDataList);
2353
2355
  console.log(
2354
2356
  "\x1B[32m%s\x1B[0m",
2355
- `MidScene report has been generated. Run "npx http-server ./midscene_run/report -p 9888 -o -s" to view.`
2357
+ `Midscene report has been generated.
2358
+ Run "npx http-server ./midscene_run/report -o -s -c-1" to view.`
2356
2359
  );
2357
2360
  }
2358
2361
  };
2359
- var reporter_default = MidSceneReporter;
2362
+ var reporter_default = MidsceneReporter;
@@ -580,6 +580,20 @@ var midscene_element_inspector = (() => {
580
580
  extractTextWithPositionDFS: () => extractTextWithPositionDFS
581
581
  });
582
582
 
583
+ // src/extractor/constants.ts
584
+ var TEXT_SIZE_THRESHOLD = 9;
585
+
586
+ // src/extractor/dom-util.ts
587
+ function isInputElement(node) {
588
+ return node instanceof HTMLElement && node.tagName.toLowerCase() === "input";
589
+ }
590
+ function isButtonElement(node) {
591
+ return node instanceof HTMLElement && node.tagName.toLowerCase() === "button";
592
+ }
593
+ function isImgElement(node) {
594
+ return node instanceof HTMLElement && node.tagName.toLowerCase() === "img";
595
+ }
596
+
583
597
  // src/extractor/util.ts
584
598
  var import_js_sha256 = __toESM(require_sha256());
585
599
  function logger(..._msg) {
@@ -701,20 +715,6 @@ var midscene_element_inspector = (() => {
701
715
  }
702
716
  window.generateHash = generateHash;
703
717
 
704
- // src/extractor/constants.ts
705
- var TEXT_SIZE_THRESHOLD = 9;
706
-
707
- // src/extractor/dom-util.ts
708
- function isInputElement(node) {
709
- return node instanceof HTMLElement && node.tagName.toLowerCase() === "input";
710
- }
711
- function isButtonElement(node) {
712
- return node instanceof HTMLElement && node.tagName.toLowerCase() === "button";
713
- }
714
- function isImgElement(node) {
715
- return node instanceof HTMLElement && node.tagName.toLowerCase() === "img";
716
- }
717
-
718
718
  // src/extractor/extractor.ts
719
719
  var container = document.body;
720
720
  function generateId(numberId) {
@@ -758,7 +758,10 @@ var midscene_element_inspector = (() => {
758
758
  }),
759
759
  content: attributes.placeholder || "",
760
760
  rect,
761
- center: [Math.round(rect.left + rect.width / 2), Math.round(rect.top + rect.height / 2)]
761
+ center: [
762
+ Math.round(rect.left + rect.width / 2),
763
+ Math.round(rect.top + rect.height / 2)
764
+ ]
762
765
  });
763
766
  return;
764
767
  }
@@ -778,7 +781,10 @@ var midscene_element_inspector = (() => {
778
781
  }),
779
782
  content,
780
783
  rect,
781
- center: [Math.round(rect.left + rect.width / 2), Math.round(rect.top + rect.height / 2)]
784
+ center: [
785
+ Math.round(rect.left + rect.width / 2),
786
+ Math.round(rect.top + rect.height / 2)
787
+ ]
782
788
  });
783
789
  return;
784
790
  }
@@ -796,7 +802,10 @@ var midscene_element_inspector = (() => {
796
802
  }),
797
803
  content: "",
798
804
  rect,
799
- center: [Math.round(rect.left + rect.width / 2), Math.round(rect.top + rect.height / 2)]
805
+ center: [
806
+ Math.round(rect.left + rect.width / 2),
807
+ Math.round(rect.top + rect.height / 2)
808
+ ]
800
809
  });
801
810
  return;
802
811
  }
@@ -817,7 +826,10 @@ var midscene_element_inspector = (() => {
817
826
  nodeType: "TEXT Node" /* TEXT */
818
827
  }),
819
828
  locator: selector,
820
- center: [Math.round(rect.left + rect.width / 2), Math.round(rect.top + rect.height / 2)],
829
+ center: [
830
+ Math.round(rect.left + rect.width / 2),
831
+ Math.round(rect.top + rect.height / 2)
832
+ ],
821
833
  // attributes,
822
834
  content: text,
823
835
  rect
@@ -1,15 +1,15 @@
1
1
  declare enum NodeType {
2
- 'INPUT' = "INPUT Node",
3
- 'BUTTON' = "BUTTON Node",
4
- 'IMG' = "IMG Node",
5
- 'TEXT' = "TEXT Node"
2
+ INPUT = "INPUT Node",
3
+ BUTTON = "BUTTON Node",
4
+ IMG = "IMG Node",
5
+ TEXT = "TEXT Node"
6
6
  }
7
7
 
8
8
  interface ElementInfo {
9
9
  id: string;
10
10
  indexId: string;
11
11
  nodeHashId: string;
12
- locator: string | void;
12
+ locator: string | undefined;
13
13
  attributes: {
14
14
  nodeType: NodeType;
15
15
  [key: string]: string;
@@ -1,17 +1,17 @@
1
- import { Page } from 'playwright';
2
1
  import { TestInfo } from '@playwright/test';
3
- import Insight, { BaseElement, Rect, UIContext, PlanningAction, AIElementParseResponse, ExecutionDump, InsightExtractParam, GroupedActionDump } from '@midscene/core';
2
+ import { Page } from 'playwright';
4
3
  import { Page as Page$1 } from 'puppeteer';
4
+ import Insight, { BaseElement, Rect, UIContext, PlanningAction, AIElementParseResponse, ExecutionDump, InsightExtractParam, InsightAssertionResponse, GroupedActionDump } from '@midscene/core';
5
+
6
+ type WebPage = Page | Page$1;
5
7
 
6
8
  declare enum NodeType {
7
- 'INPUT' = "INPUT Node",
8
- 'BUTTON' = "BUTTON Node",
9
- 'IMG' = "IMG Node",
10
- 'TEXT' = "TEXT Node"
9
+ INPUT = "INPUT Node",
10
+ BUTTON = "BUTTON Node",
11
+ IMG = "IMG Node",
12
+ TEXT = "TEXT Node"
11
13
  }
12
14
 
13
- type WebPage = Page | Page$1;
14
-
15
15
  declare class WebElementInfo implements BaseElement {
16
16
  content: string;
17
17
  locator: string;
@@ -20,7 +20,7 @@ declare class WebElementInfo implements BaseElement {
20
20
  page: WebPage;
21
21
  id: string;
22
22
  attributes: {
23
- ['nodeType']: NodeType;
23
+ nodeType: NodeType;
24
24
  [key: string]: string;
25
25
  };
26
26
  constructor({ content, rect, page, locator, id, attributes, }: {
@@ -30,7 +30,7 @@ declare class WebElementInfo implements BaseElement {
30
30
  locator: string;
31
31
  id: string;
32
32
  attributes: {
33
- ['nodeType']: NodeType;
33
+ nodeType: NodeType;
34
34
  [key: string]: string;
35
35
  };
36
36
  });
@@ -119,6 +119,7 @@ declare class PageTaskExecutor {
119
119
  private convertPlanToExecutable;
120
120
  action(userPrompt: string): Promise<void>;
121
121
  query(demand: InsightExtractParam): Promise<any>;
122
+ assert(assertion: string): Promise<InsightAssertionResponse>;
122
123
  }
123
124
 
124
125
  declare const PlaywrightAiFixture: () => {
@@ -131,6 +132,9 @@ declare const PlaywrightAiFixture: () => {
131
132
  aiQuery: ({ page }: {
132
133
  page: Page;
133
134
  }, use: any, testInfo: TestInfo) => Promise<void>;
135
+ aiAssert: ({ page }: {
136
+ page: Page;
137
+ }, use: any, testInfo: TestInfo) => Promise<void>;
134
138
  };
135
139
  type PlayWrightAiFixtureType = {
136
140
  ai: <T = any>(prompt: string, opts?: {
@@ -138,6 +142,7 @@ type PlayWrightAiFixtureType = {
138
142
  }) => Promise<T>;
139
143
  aiAction: (taskPrompt: string) => ReturnType<PageTaskExecutor['action']>;
140
144
  aiQuery: <T = any>(demand: any) => Promise<T>;
145
+ aiAssert: (assertion: string, errorMsg?: string) => Promise<void>;
141
146
  };
142
147
 
143
148
  declare class PageAgent {
@@ -145,8 +150,8 @@ declare class PageAgent {
145
150
  dumps: GroupedActionDump[];
146
151
  testId: string;
147
152
  dumpFile?: string;
148
- actionAgent: PageTaskExecutor;
149
- constructor(page: WebPage, opts: {
153
+ taskExecutor: PageTaskExecutor;
154
+ constructor(page: WebPage, opts?: {
150
155
  testId?: string;
151
156
  taskFile?: string;
152
157
  cache?: AiTaskCache;
@@ -155,6 +160,7 @@ declare class PageAgent {
155
160
  writeOutActionDumps(): void;
156
161
  aiAction(taskPrompt: string): Promise<void>;
157
162
  aiQuery(demand: any): Promise<any>;
163
+ aiAssert(assertion: string, msg?: string): Promise<void>;
158
164
  ai(taskPrompt: string, type?: string): Promise<any>;
159
165
  }
160
166
 
@@ -1,10 +1,10 @@
1
1
  import { Reporter, FullConfig, Suite, TestCase, TestResult, FullResult } from '@playwright/test/reporter';
2
2
 
3
- declare class MidSceneReporter implements Reporter {
3
+ declare class MidsceneReporter implements Reporter {
4
4
  onBegin(config: FullConfig, suite: Suite): Promise<void>;
5
5
  onTestBegin(test: TestCase, _result: TestResult): void;
6
6
  onTestEnd(test: TestCase, result: TestResult): void;
7
7
  onEnd(result: FullResult): void;
8
8
  }
9
9
 
10
- export { MidSceneReporter as default };
10
+ export { MidsceneReporter as default };
@@ -1 +1 @@
1
- <!doctype html><html><head><title></title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no,viewport-fit=cover,minimum-scale=1,maximum-scale=1,user-scalable=no"><meta http-equiv="x-ua-compatible" content="ie=edge"><meta name="renderer" content="webkit"><meta name="layoutmode" content="standard"><meta name="imagemode" content="force"><meta name="wap-font-scale" content="no"><meta name="format-detection" content="telephone=no"><script defer="defer">(()=>{"use strict";var e={},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var u=t[n]={exports:{}};return e[n].call(u.exports,u,u.exports,r),u.exports}r.m=e,r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};r.t=function(n,o){if(1&o&&(n=this(n)),8&o||"object"==typeof n&&n&&(4&o&&n.__esModule||16&o&&"function"==typeof n.then))return n;var u=Object.create(null);r.r(u);var i={};e=e||[null,t({}),t([]),t(t)];for(var a=2&o&&n;"object"==typeof a&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((function(e){i[e]=function(){return n[e]}}));return i.default=function(){return n},r.d(u,i),u}})(),r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.f={},r.e=function(e){return Promise.all(Object.keys(r.f).reduce((function(t,n){return r.f[n](e,t),t}),[]))},r.u=function(e){return"static/js/async/"+e+"."+{16:"8b96d0ce",212:"b25a2c30",353:"78fcb703",399:"84fa60a7",453:"782b249a",544:"ee973964",983:"ef821e39"}[e]+".js"},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},(()=>{var e={},t="@midscene/visualizer-report:";r.l=function(n,o,u,i){if(e[n])e[n].push(o);else{if(void 0!==u)for(var a,c,f=document.getElementsByTagName("script"),l=0;l<f.length;l++){var s=f[l];if(s.getAttribute("src")==n||s.getAttribute("data-webpack")==t+u){a=s;break}}!a&&(c=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",t+u),a.src=n),e[n]=[o];var d=function(t,r){a.onerror=a.onload=null,clearTimeout(p);var o=e[n];if(delete e[n],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((function(e){return e(r)})),t)return t(r)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=d.bind(null,a.onerror),a.onload=d.bind(null,a.onload),c&&document.head.appendChild(a)}}})(),r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e=[];r.O=function(t,n,o,u){if(!n){var i=1/0;for(l=0;l<e.length;l++){n=e[l][0],o=e[l][1],u=e[l][2];for(var a=!0,c=0;c<n.length;c++)(!1&u||i>=u)&&Object.keys(r.O).every((function(e){return r.O[e](n[c])}))?n.splice(c--,1):(a=!1,u<i&&(i=u));if(a){e.splice(l--,1);var f=o();void 0!==f&&(t=f)}}return t}u=u||0;for(var l=e.length;l>0&&e[l-1][2]>u;l--)e[l]=e[l-1];e[l]=[n,o,u]}})(),r.p="/",r.rv=function(){return"1.0.0-alpha.5"},(()=>{var e={242:0};r.f.j=function(t,n){var o=r.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else if(242!=t){var u=new Promise((function(r,n){o=e[t]=[r,n]}));n.push(o[2]=u);var i=r.p+r.u(t),a=Error();r.l(i,(function(n){if(r.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var u=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;a.message="Loading chunk "+t+" failed.\n("+u+": "+i+")",a.name="ChunkLoadError",a.type=u,a.request=i,o[1](a)}}),"chunk-"+t,t)}else e[t]=0},r.O.j=function(t){return 0===e[t]};var t=function(t,n){var o,u,i=n[0],a=n[1],c=n[2],f=0;if(i.some((function(t){return 0!==e[t]}))){for(o in a)r.o(a,o)&&(r.m[o]=a[o]);if(c)var l=c(r)}for(t&&t(n);f<i.length;f++)u=i[f],r.o(e,u)&&e[u]&&e[u][0](),e[u]=0;return r.O(l)},n=self.webpackChunk_midscene_visualizer_report=self.webpackChunk_midscene_visualizer_report||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),r.ruid="bundler=rspack@1.0.0-alpha.5"})()</script><script defer="defer" src="/static/js/lib-react.c011fc71.js"></script><script defer="defer" src="/static/js/lib-polyfill.3da3e38e.js"></script><script defer="defer" src="/static/js/lib-antd.55d65804.js"></script><script defer="defer" src="/static/js/lib-router.226970ff.js"></script><script defer="defer" src="/static/js/915.d3f73af1.js"></script><script defer="defer" src="/static/js/index.ae9a86c5.js"></script><link href="/static/css/index.c7751597.css" rel="stylesheet"></head><body><div id="root"><!--<?- html ?>--></div><!--<?- chunksMap.js ?>--><!--<?- SSRDataScript ?>--></body></html>
1
+ <!doctype html><html><head><title></title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no,viewport-fit=cover,minimum-scale=1,maximum-scale=1,user-scalable=no"><meta http-equiv="x-ua-compatible" content="ie=edge"><meta name="renderer" content="webkit"><meta name="layoutmode" content="standard"><meta name="imagemode" content="force"><meta name="wap-font-scale" content="no"><meta name="format-detection" content="telephone=no"><script defer="defer">(()=>{"use strict";var e={},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var u=t[n]={exports:{}};return e[n].call(u.exports,u,u.exports,r),u.exports}r.m=e,r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};r.t=function(n,o){if(1&o&&(n=this(n)),8&o||"object"==typeof n&&n&&(4&o&&n.__esModule||16&o&&"function"==typeof n.then))return n;var u=Object.create(null);r.r(u);var i={};e=e||[null,t({}),t([]),t(t)];for(var a=2&o&&n;"object"==typeof a&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((function(e){i[e]=function(){return n[e]}}));return i.default=function(){return n},r.d(u,i),u}})(),r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.f={},r.e=function(e){return Promise.all(Object.keys(r.f).reduce((function(t,n){return r.f[n](e,t),t}),[]))},r.u=function(e){return"static/js/async/"+e+"."+{16:"8b96d0ce",212:"b25a2c30",353:"78fcb703",399:"84fa60a7",453:"782b249a",544:"ee973964",983:"ef821e39"}[e]+".js"},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},(()=>{var e={},t="@midscene/visualizer-report:";r.l=function(n,o,u,i){if(e[n])e[n].push(o);else{if(void 0!==u)for(var a,c,f=document.getElementsByTagName("script"),l=0;l<f.length;l++){var s=f[l];if(s.getAttribute("src")==n||s.getAttribute("data-webpack")==t+u){a=s;break}}!a&&(c=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",t+u),a.src=n),e[n]=[o];var d=function(t,r){a.onerror=a.onload=null,clearTimeout(p);var o=e[n];if(delete e[n],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((function(e){return e(r)})),t)return t(r)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=d.bind(null,a.onerror),a.onload=d.bind(null,a.onload),c&&document.head.appendChild(a)}}})(),r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e=[];r.O=function(t,n,o,u){if(!n){var i=1/0;for(l=0;l<e.length;l++){n=e[l][0],o=e[l][1],u=e[l][2];for(var a=!0,c=0;c<n.length;c++)(!1&u||i>=u)&&Object.keys(r.O).every((function(e){return r.O[e](n[c])}))?n.splice(c--,1):(a=!1,u<i&&(i=u));if(a){e.splice(l--,1);var f=o();void 0!==f&&(t=f)}}return t}u=u||0;for(var l=e.length;l>0&&e[l-1][2]>u;l--)e[l]=e[l-1];e[l]=[n,o,u]}})(),r.p="/",r.rv=function(){return"1.0.0-alpha.5"},(()=>{var e={242:0};r.f.j=function(t,n){var o=r.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else if(242!=t){var u=new Promise((function(r,n){o=e[t]=[r,n]}));n.push(o[2]=u);var i=r.p+r.u(t),a=Error();r.l(i,(function(n){if(r.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var u=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;a.message="Loading chunk "+t+" failed.\n("+u+": "+i+")",a.name="ChunkLoadError",a.type=u,a.request=i,o[1](a)}}),"chunk-"+t,t)}else e[t]=0},r.O.j=function(t){return 0===e[t]};var t=function(t,n){var o,u,i=n[0],a=n[1],c=n[2],f=0;if(i.some((function(t){return 0!==e[t]}))){for(o in a)r.o(a,o)&&(r.m[o]=a[o]);if(c)var l=c(r)}for(t&&t(n);f<i.length;f++)u=i[f],r.o(e,u)&&e[u]&&e[u][0](),e[u]=0;return r.O(l)},n=self.webpackChunk_midscene_visualizer_report=self.webpackChunk_midscene_visualizer_report||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),r.ruid="bundler=rspack@1.0.0-alpha.5"})()</script><script defer="defer" src="/static/js/lib-react.c011fc71.js"></script><script defer="defer" src="/static/js/lib-polyfill.3da3e38e.js"></script><script defer="defer" src="/static/js/lib-antd.583c9200.js"></script><script defer="defer" src="/static/js/lib-router.226970ff.js"></script><script defer="defer" src="/static/js/160.5ac2287a.js"></script><script defer="defer" src="/static/js/index.e71be3a2.js"></script><link href="/static/css/index.eccd04e1.css" rel="stylesheet"></head><body><div id="root"><!--<?- html ?>--></div><!--<?- chunksMap.js ?>--><!--<?- SSRDataScript ?>--></body></html>
@@ -0,0 +1 @@
1
+ .nav-u66WwU{margin:20px 0;max-width:680px}.container-Hq9bKt{margin:0 auto;max-width:980px}.test-result-pnK7ny{margin-top:40px}.test-details-UpOFMM{border-top:1px solid #ccc;cursor:pointer;margin-top:-1px;padding:20px}.test-details-UpOFMM:hover{background-color:#d3d3d3}.test-info-AphlaH{display:flex}.test-name-us3J87{flex-grow:1;font-size:medium;font-weight:700}.failed-LIeQqO{font-size:small}.test-file-path-BdYiH4{color:#6e7781;margin-top:10px}.test-result{background-color:#f9f9f9;border:1px solid #ccc;border-radius:8px;font-family:Arial,sans-serif;margin:20px;padding:20px}.test-summary{margin-bottom:20px}.test-summary div{margin:5px 0}.test-file,.test-project,.test-status,.test-time{font-weight:700}.test-status.failed{color:red}.test-details{margin-top:20px}.test-name{font-size:1.2em;margin-bottom:10px}.test-duration{color:#555}.ant-collapse-content-box{padding:0!important}body,html{margin:0;padding:0}.rspress-nav{transition:.2s}:root{--modern-sidebar-width:0!important;--modern-aside-width:0!important;--modern-preview-padding:0!important}.modern-doc,.modern-doc-layout{height:100vh;margin:0!important;padding:0!important;width:100%!important}.modern-sidebar,header.w-full{display:none!important}.modern-doc-container{padding:0!important}footer.mt-8{display:none}.page-container{border-bottom:1px solid #e5e5e5;border-top:1px solid #e5e5e5;color:#3b3b3b;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:14px;height:100%}.ant-layout{flex-grow:1;height:100%}.main-right{box-sizing:border-box;display:flex;flex-direction:column;height:100%;width:100%}.main-right .main-content{background:#fff;display:flex;flex-direction:row;flex-grow:1;overflow:hidden}.main-right.uploader-wrapper{box-sizing:border-box;flex-direction:column;justify-content:center;margin:auto;max-width:800px}.main-right.uploader-wrapper .uploader{width:100%}.main-right.uploader-wrapper .demo-loader{margin-top:10px;text-align:center;width:100%}.main-right .main-canvas-container{background:#fff;border-left:1px solid #e5e5e5;flex-grow:1;height:100%;overflow-x:hidden;overflow-y:scroll}.main-right .main-side{box-sizing:border-box;overflow-y:scroll}.main-right .json-content{word-wrap:break-word;white-space:pre-wrap}.detail-side h2{margin-bottom:4px;margin-top:0;padding-top:0}.detail-side .ant-tag{margin-top:2px}.detail-side .meta-kv{padding:10px 10px 14px}.detail-side .meta-kv .meta{box-sizing:border-box;display:flex;flex-direction:row;line-height:1.5;padding:2px 0;width:100%}.detail-side .meta-kv .meta .meta-key{padding-right:16px;text-align:right;width:100px}.detail-side .meta-kv .meta .meta-value{flex:1 1}.detail-side .item-list{cursor:default;margin-bottom:10px;padding:10px 10px}.detail-side .item-list .item{border:1px solid #ddd;border-radius:5px;margin-bottom:10px;padding:16px 10px 10px;position:relative;transition:.1s}.detail-side .item-list .item.item-lite{border:none;padding:0}.detail-side .item-list .item-highlight{color:#fff}.detail-side .item-list .item-highlight .subtitle{color:#ccc}.detail-side .item-list .item-extra{color:#777;position:absolute;right:10px;top:10px}.detail-side .item-list .title-right-padding{padding-right:15px}.detail-side .item-list .title{font-size:18px;font-weight:700;margin-bottom:5px}.detail-side .item-list .title .title-tag{color:#777;display:inline-block;font-size:14px;line-height:18px;margin-left:6px}.detail-side .item-list .subtitle{color:#777;font-size:14px;font-weight:400}.detail-side .item-list .description{margin-top:5px}.detail-side .item-list .description-content{font-size:14px;margin-top:10px;white-space:break-spaces;word-wrap:break-word;margin:0}.detail-side .item-list .element-button:hover{background:#f9483e;color:#fff}.detail-side .item-list .section-button:hover{background:#01204e;color:#fff}.detail-side pre{text-wrap:balance}.detail-side .item-list-space-up{margin-top:10px}.task-list-name{background:#f8f8f8;border-bottom:1px solid #e5e5e5;border-top:1px solid #e5e5e5;font-weight:700;margin-top:-1px;padding:2px 10px}.side-bar{background:#f8f8f8;border-right:1px solid #e5e5e5;display:flex;flex-direction:column;height:100%;justify-content:space-between;overflow:auto;width:100%}.side-bar .brand{cursor:pointer;display:flex;padding:10px 5px}.side-bar .task-meta-section{margin-top:6px}.side-bar .task-meta{color:#777;font-weight:400;padding-left:10px}.side-bar .side-seperator{border-top:1px none}.side-bar .side-seperator.side-seperator-line{border-top:1px solid #e5e5e5}.side-bar .side-seperator.side-seperator-space-up{margin-top:10px}.side-bar .side-seperator.side-seperator-space-down{margin-bottom:10px}.side-bar .side-sub-title{margin-bottom:6px;padding:0 10px}.side-bar .side-item{cursor:pointer;padding:2px 0;transition:.1s}.side-bar .side-item:hover{background:#dcdcdc80}.side-bar .side-item.selected{background:#bfc4da80}.side-bar .side-item .side-item-content{padding:0 10px 0 26px}.side-bar .side-item-name{display:flex;justify-content:space-between;padding:0 10px 0 26px;position:relative}.side-bar .side-item-name .status-icon{color:#aaa;display:inline-block;font-size:10px;left:10px;line-height:10px;margin-top:-5px;position:absolute;top:50%}.side-bar .side-item-name .status-icon-success{color:#2b8243}.side-bar .side-item-name .status-icon-fail{color:#ff0a0a}.side-bar .side-item-name .status-text{color:#777}.side-bar .bottom-controls{padding:10px 10px;text-align:left;text-align:center}.detail-panel{background:#fff;display:flex;flex-direction:column;height:100%;padding:10px}.detail-panel .ant-segmented{padding:0}.detail-panel .view-switcher{flex-shrink:0;margin-bottom:10px}.detail-panel .detail-content{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center}.detail-panel .blackboard{margin:0 auto}.detail-panel .screenshot-item{margin-bottom:10px}.detail-panel .screenshot-item .screenshot-item-title{margin-bottom:5px}.detail-panel .screenshot-item img{border:1px solid #888;max-width:100%}.blackboard .footer{color:#aaa}.blackboard ul{padding-left:0}.blackboard li{list-style:none}.blackboard .bottom-tip{height:30px}.blackboard .bottom-tip-item{color:#aaa;max-width:500px;text-overflow:ellipsis;word-wrap:break-word}.blackboard-filter{margin:10px 0}.blackboard-main-content canvas{border:1px solid #888;width:100%}.global-hover-preview{background:#f8f8f8;border:1px solid #e5e5e5;box-shadow:1px 1px 5px 0 rgba(0,0,0,.2);box-sizing:border-box;display:block;max-height:400px;max-width:400px;overflow:hidden;position:fixed;text-align:center;z-index:10}.global-hover-preview img{height:auto;max-height:400px;max-width:400px;width:auto}.timeline-wrapper{border-bottom:1px solid #e5e5e5;box-sizing:border-box;flex-basis:110px;flex-grow:0;flex-shrink:0;position:relative}.timeline-wrapper,.timeline-wrapper .timeline-canvas-wrapper,.timeline-wrapper canvas{height:100%;width:100%}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/css/index.eccd04e1.css","sources":["webpack://@midscene/visualizer-report/./src/pages/Home.module.css","webpack://@midscene/visualizer-report/./src/pages/TestResult.css","webpack://@midscene/visualizer-report/../visualizer/dist/es/index.css","webpack://@midscene/visualizer-report/../visualizer/dist/es/component/detail-side.css","webpack://@midscene/visualizer-report/../visualizer/dist/es/component/panel-title.css","webpack://@midscene/visualizer-report/../visualizer/dist/es/component/sidebar.css","webpack://@midscene/visualizer-report/../visualizer/dist/es/component/detail-panel.css","webpack://@midscene/visualizer-report/../visualizer/dist/es/component/blackboard.css","webpack://@midscene/visualizer-report/../visualizer/dist/es/component/global-hover-preview.css","webpack://@midscene/visualizer-report/../visualizer/dist/es/component/timeline.css"],"sourcesContent":[".nav {\n /* display: flex;\n justify-content: center; */\n max-width: 680px;\n margin: 20px 0;\n}\n\n.container {\n max-width: 980px;\n margin: 0 auto;\n}\n\n.test-result {\n margin-top: 40px;\n}\n\n\n.test-details {\n margin-top: -1px;\n cursor: pointer;\n padding: 20px;\n border-top: 1px solid #ccc;\n}\n.test-details:hover {\n background-color: #d3d3d3;\n}\n\n.test-info {\n display: flex;\n}\n.test-name{\n flex-grow: 1;\n font-weight: bold;\n font-size: medium;\n}\n\n.failed{\n font-size: small;\n}\n.test-file-path {\n color: #6e7781;\n margin-top: 10px;\n}",".test-result {\n font-family: Arial, sans-serif;\n margin: 20px;\n padding: 20px;\n border: 1px solid #ccc;\n border-radius: 8px;\n background-color: #f9f9f9;\n}\n\n.test-summary {\n margin-bottom: 20px;\n}\n\n.test-summary div {\n margin: 5px 0;\n}\n\n.test-project,\n.test-file,\n.test-status,\n.test-time {\n font-weight: bold;\n}\n\n.test-status.failed {\n color: red;\n}\n\n.test-details {\n margin-top: 20px;\n}\n\n.test-name {\n font-size: 1.2em;\n margin-bottom: 10px;\n}\n\n.test-duration {\n color: #555;\n}\n\n.ant-collapse-content-box {\n padding: 0!important;\n}","html,\nbody {\n padding: 0;\n margin: 0;\n}\n.rspress-nav {\n transition: 0.2s;\n}\n:root {\n --modern-sidebar-width: 0 !important;\n --modern-aside-width: 0 !important;\n --modern-preview-padding: 0 !important;\n}\n.modern-doc-layout,\n.modern-doc {\n width: 100% !important;\n margin: 0 !important;\n padding: 0 !important;\n height: 100vh;\n}\n.modern-sidebar,\nheader.w-full {\n display: none !important;\n}\n.modern-doc-container {\n padding: 0 !important;\n}\nfooter.mt-8 {\n display: none;\n}\n.page-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n color: #3b3b3b;\n font-family:\n -apple-system,\n BlinkMacSystemFont,\n \"Segoe UI\",\n \"Noto Sans\",\n Helvetica,\n Arial,\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\";\n font-size: 14px;\n border-top: 1px solid #E5E5E5;\n border-bottom: 1px solid #E5E5E5;\n}\n.ant-layout {\n flex-grow: 1;\n height: 100%;\n}\n.main-right {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n}\n.main-right .main-content {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n overflow: hidden;\n background: #FFF;\n}\n.main-right.uploader-wrapper {\n box-sizing: border-box;\n margin: auto;\n max-width: 800px;\n flex-direction: column;\n justify-content: center;\n}\n.main-right.uploader-wrapper .uploader {\n width: 100%;\n}\n.main-right.uploader-wrapper .demo-loader {\n width: 100%;\n text-align: center;\n margin-top: 10px;\n}\n.main-right .main-canvas-container {\n flex-grow: 1;\n height: 100%;\n background: #ffffff;\n overflow-x: hidden;\n overflow-y: scroll;\n border-left: 1px solid #E5E5E5;\n}\n.main-right .main-side {\n box-sizing: border-box;\n overflow-y: scroll;\n}\n.main-right .json-content {\n word-wrap: break-word;\n white-space: pre-wrap;\n}\n",".detail-side h2 {\n padding-top: 0;\n margin-top: 0;\n margin-bottom: 4px;\n}\n.detail-side .ant-tag {\n margin-top: 2px;\n}\n.detail-side .meta-kv {\n padding: 10px 10px calc(10px + 4px);\n}\n.detail-side .meta-kv .meta {\n box-sizing: border-box;\n padding: 2px 0;\n width: 100%;\n display: flex;\n flex-direction: row;\n line-height: 1.5;\n}\n.detail-side .meta-kv .meta .meta-key {\n width: 100px;\n text-align: right;\n padding-right: 16px;\n}\n.detail-side .meta-kv .meta .meta-value {\n flex: 1 1;\n}\n.detail-side .item-list {\n padding: 10px 10px;\n cursor: default;\n margin-bottom: 10px;\n}\n.detail-side .item-list .item {\n padding: 16px 10px 10px;\n transition: 0.1s;\n border: 1px solid #DDD;\n border-radius: 5px;\n margin-bottom: 10px;\n position: relative;\n}\n.detail-side .item-list .item.item-lite {\n border: none;\n padding: 0;\n}\n.detail-side .item-list .item-highlight {\n color: #FFF;\n}\n.detail-side .item-list .item-highlight .subtitle {\n color: #CCC;\n}\n.detail-side .item-list .item-extra {\n position: absolute;\n right: 10px;\n top: 10px;\n color: #777;\n}\n.detail-side .item-list .title-right-padding {\n padding-right: 15px;\n}\n.detail-side .item-list .title {\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 5px;\n}\n.detail-side .item-list .title .title-tag {\n display: inline-block;\n margin-left: 6px;\n color: #777;\n font-size: 14px;\n line-height: 18px;\n}\n.detail-side .item-list .subtitle {\n font-weight: normal;\n font-size: 14px;\n color: #777;\n}\n.detail-side .item-list .description {\n margin-top: 5px;\n}\n.detail-side .item-list .description-content {\n font-size: 14px;\n margin-top: 10px;\n white-space: break-spaces;\n word-wrap: break-word;\n margin: 0;\n}\n.detail-side .item-list .element-button:hover {\n color: #fff;\n background: #F9483E;\n}\n.detail-side .item-list .section-button:hover {\n color: #fff;\n background: #01204E;\n}\n.detail-side pre {\n text-wrap: balance;\n}\n.detail-side .item-list-space-up {\n margin-top: 10px;\n}\n",".task-list-name {\n padding: 2px 10px;\n font-weight: bold;\n background: #F8F8F8;\n border-top: 1px solid #E5E5E5;\n border-bottom: 1px solid #E5E5E5;\n margin-top: -1px;\n}\n",".side-bar {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n border-right: 1px solid #E5E5E5;\n overflow: auto;\n background: #F8F8F8;\n}\n.side-bar .brand {\n padding: 10px 5px;\n cursor: pointer;\n display: flex;\n}\n.side-bar .task-meta-section {\n margin-top: 6px;\n}\n.side-bar .task-meta {\n color: #777;\n font-weight: normal;\n padding-left: 10px;\n}\n.side-bar .side-seperator {\n border-top: 1px solid none;\n}\n.side-bar .side-seperator.side-seperator-line {\n border-top: 1px solid #E5E5E5;\n}\n.side-bar .side-seperator.side-seperator-space-up {\n margin-top: 10px;\n}\n.side-bar .side-seperator.side-seperator-space-down {\n margin-bottom: 10px;\n}\n.side-bar .side-sub-title {\n padding: 0 10px;\n margin-bottom: 6px;\n}\n.side-bar .side-item {\n cursor: pointer;\n transition: 0.1s;\n padding: 2px 0;\n}\n.side-bar .side-item:hover {\n background: #dcdcdc80;\n}\n.side-bar .side-item.selected {\n background: #bfc4da80;\n}\n.side-bar .side-item .side-item-content {\n padding: 0 10px 0 calc(10px + 16px);\n}\n.side-bar .side-item-name {\n padding: 0 10px 0 calc(10px + 16px);\n position: relative;\n display: flex;\n justify-content: space-between;\n}\n.side-bar .side-item-name .status-icon {\n position: absolute;\n left: 10px;\n display: inline-block;\n color: #AAA;\n font-size: 10px;\n line-height: 10px;\n top: 50%;\n margin-top: -5px;\n}\n.side-bar .side-item-name .status-icon-success {\n color: #2B8243;\n}\n.side-bar .side-item-name .status-icon-fail {\n color: #ff0a0a;\n}\n.side-bar .side-item-name .status-text {\n color: #777;\n}\n.side-bar .bottom-controls {\n padding: 10px 10px;\n text-align: left;\n text-align: center;\n}\n",".detail-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 10px;\n background: #FFF;\n}\n.detail-panel .ant-segmented {\n padding: 0;\n}\n.detail-panel .view-switcher {\n margin-bottom: 10px;\n flex-shrink: 0;\n}\n.detail-panel .detail-content {\n box-sizing: border-box;\n justify-content: center;\n flex-direction: column;\n display: flex;\n flex-grow: 1;\n}\n.detail-panel .blackboard {\n margin: 0 auto;\n}\n.detail-panel .screenshot-item {\n margin-bottom: 10px;\n}\n.detail-panel .screenshot-item .screenshot-item-title {\n margin-bottom: 5px;\n}\n.detail-panel .screenshot-item img {\n border: 1px solid #888;\n max-width: 100%;\n}\n",".blackboard .footer {\n color: #aaa;\n}\n.blackboard ul {\n padding-left: 0px;\n}\n.blackboard li {\n list-style: none;\n}\n.blackboard .bottom-tip {\n height: 30px;\n}\n.blackboard .bottom-tip-item {\n max-width: 500px;\n color: #AAA;\n text-overflow: ellipsis;\n word-wrap: break-word;\n}\n.blackboard-filter {\n margin: 10px 0;\n}\n.blackboard-main-content canvas {\n width: 100%;\n border: 1px solid #888;\n}\n",".global-hover-preview {\n position: fixed;\n display: block;\n max-width: 400px;\n max-height: 400px;\n overflow: hidden;\n z-index: 10;\n text-align: center;\n border: 1px solid #E5E5E5;\n box-sizing: border-box;\n background: #F8F8F8;\n box-shadow: 1px 1px 5px 0 rgba(0, 0, 0, 0.2);\n}\n.global-hover-preview img {\n max-width: 400px;\n max-height: 400px;\n width: auto;\n height: auto;\n}\n",".timeline-wrapper {\n flex-basis: 110px;\n flex-grow: 0;\n flex-shrink: 0;\n width: 100%;\n height: 100%;\n border-bottom: 1px solid #E5E5E5;\n position: relative;\n box-sizing: border-box;\n}\n.timeline-wrapper .timeline-canvas-wrapper {\n width: 100%;\n height: 100%;\n}\n.timeline-wrapper canvas {\n width: 100%;\n height: 100%;\n}\n"],"names":[],"mappings":"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"}