diff --git a/docs/helpers/Playwright.md b/docs/helpers/Playwright.md index a65a7bb69..eb9acba61 100644 --- a/docs/helpers/Playwright.md +++ b/docs/helpers/Playwright.md @@ -46,22 +46,22 @@ Type: [object][5] - `url` **[string][8]?** base url of website to be tested - `browser` **(`"chromium"` | `"firefox"` | `"webkit"` | `"electron"`)?** a browser to test on, either: `chromium`, `firefox`, `webkit`, `electron`. Default: chromium. - `show` **[boolean][25]?** show browser window. -- `restart` **([string][8] | [boolean][25])?** restart strategy between tests. Possible values:- 'context' or **false** - restarts [browser context][42] but keeps running browser. Recommended by Playwright team to keep tests isolated. +- `restart` **([string][8] | [boolean][25])?** restart strategy between tests. Possible values:- 'context' or **false** - restarts [browser context][43] but keeps running browser. Recommended by Playwright team to keep tests isolated. - 'browser' or **true** - closes browser and opens it again between tests. - 'session' or 'keep' - keeps browser context and session, but cleans up cookies and localStorage between tests. The fastest option when running tests in windowed mode. Works with `keepCookies` and `keepBrowserState` options. This behavior was default before CodeceptJS 3.1 -- `timeout` **[number][19]?** - [timeout][43] in ms of all Playwright actions . +- `timeout` **[number][19]?** - [timeout][44] in ms of all Playwright actions . - `disableScreenshots` **[boolean][25]?** don't save screenshot on failure. - `emulate` **any?** browser in device emulation mode. - `video` **[boolean][25]?** enables video recording for failed tests; videos are saved into `output/videos` folder - `keepVideoForPassedTests` **[boolean][25]?** save videos for passed tests; videos are saved into `output/videos` folder -- `trace` **[boolean][25]?** record [tracing information][44] with screenshots and snapshots. +- `trace` **[boolean][25]?** record [tracing information][45] with screenshots and snapshots. - `keepTraceForPassedTests` **[boolean][25]?** save trace for passed tests. - `fullPageScreenshots` **[boolean][25]?** make full page screenshots on failure. - `uniqueScreenshotNames` **[boolean][25]?** option to prevent screenshot override if you have scenarios with the same name in different suites. - `keepBrowserState` **[boolean][25]?** keep browser state between tests when `restart` is set to 'session'. - `keepCookies` **[boolean][25]?** keep cookies between tests when `restart` is set to 'session'. - `waitForAction` **[number][19]?** how long to wait after click, doubleClick or PressKey actions in ms. Default: 100. -- `waitForNavigation` **(`"load"` | `"domcontentloaded"` | `"commit"`)?** When to consider navigation succeeded. Possible options: `load`, `domcontentloaded`, `commit`. Choose one of those options is possible. See [Playwright API][40]. +- `waitForNavigation` **(`"load"` | `"domcontentloaded"` | `"commit"`)?** When to consider navigation succeeded. Possible options: `load`, `domcontentloaded`, `commit`. Choose one of those options is possible. See [Playwright API][41]. - `pressKeyDelay` **[number][19]?** Delay between key presses in ms. Used when calling Playwrights page.type(...) in fillField/appendField - `getPageTimeout` **[number][19]?** config option to set maximum navigation time in milliseconds. - `waitForTimeout` **[number][19]?** default wait* timeout in ms. Default: 1000. @@ -74,8 +74,8 @@ Type: [object][5] - `chromium` **[object][5]?** pass additional chromium options - `firefox` **[object][5]?** pass additional firefox options - `electron` **[object][5]?** (pass additional electron options -- `channel` **any?** (While Playwright can operate against the stock Google Chrome and Microsoft Edge browsers available on the machine. In particular, current Playwright version will support Stable and Beta channels of these browsers. See [Google Chrome & Microsoft Edge][45]. -- `ignoreLog` **[Array][9]<[string][8]>?** An array with console message types that are not logged to debug log. Default value is `['warning', 'log']`. E.g. you can set `[]` to log all messages. See all possible [values][46]. +- `channel` **any?** (While Playwright can operate against the stock Google Chrome and Microsoft Edge browsers available on the machine. In particular, current Playwright version will support Stable and Beta channels of these browsers. See [Google Chrome & Microsoft Edge][46]. +- `ignoreLog` **[Array][9]<[string][8]>?** An array with console message types that are not logged to debug log. Default value is `['warning', 'log']`. E.g. you can set `[]` to log all messages. See all possible [values][47]. - `ignoreHTTPSErrors` **[boolean][25]?** Allows access to untrustworthy pages, e.g. to a page with an expired certificate. Default value is `false` - `bypassCSP` **[boolean][25]?** bypass Content Security Policy or CSP - `highlightElement` **[boolean][25]?** highlight the interacting elements. Default: false. Note: only activate under verbose mode (--verbose). @@ -1606,6 +1606,26 @@ I.refreshPage(); Returns **void** automatically synchronized promise through #recorder +### replayFromHar + +Replaying from HAR + +```js + // Replay API requests from HAR. + // Either use a matching response from the HAR, + // or abort the request if nothing matches. + I.replayFromHar('./output/har/something.har', { url: "*/**/api/v1/fruits" }); + I.amOnPage('https://demo.playwright.dev/api-mocking'); + I.see('CodeceptJS'); +``` + +#### Parameters + +- `harFilePath` **[string][8]** Path to recorded HAR file +- `opts` **[object][5]?** [Options for replaying from HAR][35] + +Returns **any** Promise + ### resizeWindow Resize the current window to provided width and height. @@ -2241,7 +2261,7 @@ I.uncheckOption('agree', '//form'); - `context` **([string][8]? | [object][5])** (optional, `null` by default) element located by CSS | XPath | strict locator. - `options` -Returns **void** automatically synchronized promise through #recorder[Additional options][35] for uncheck available as 3rd argument.Examples:```js +Returns **void** automatically synchronized promise through #recorder[Additional options][36] for uncheck available as 3rd argument.Examples:```js // click on element at position I.uncheckOption('Agree', '.signup', { position: { x: 5, y: 5 } }) ```> ⚠️ To avoid flakiness, option `force: true` is set by default @@ -2253,7 +2273,7 @@ Use Playwright API inside a test. First argument is a description of an action. Second argument is async function that gets this helper as parameter. -{ [`page`][36], [`browserContext`][37] [`browser`][38] } objects from Playwright API are available. +{ [`page`][37], [`browserContext`][38] [`browser`][39] } objects from Playwright API are available. ```js I.usePlaywrightTo('emulate offline mode', async ({ browserContext }) => { @@ -2386,7 +2406,7 @@ Returns **void** automatically synchronized promise through #recorder Waits for navigation to finish. By default, it takes configured `waitForNavigation` option. -See [Playwright's reference][39] +See [Playwright's reference][40] #### Parameters @@ -2443,7 +2463,7 @@ Returns **void** automatically synchronized promise through #recorder Waits for page navigates to a new URL or reloads. By default, it takes configured `waitForNavigation` option. -See [Playwright's reference][40] +See [Playwright's reference][41] #### Parameters @@ -2480,7 +2500,7 @@ I.waitForVisible('#popup'); - `locator` **([string][8] | [object][5])** element located by CSS|XPath|strict locator. - `sec` **[number][19]** (optional, `1` by default) time in seconds to wait -Returns **void** automatically synchronized promise through #recorderThis method accepts [React selectors][41]. +Returns **void** automatically synchronized promise through #recorderThis method accepts [React selectors][42]. ### waitInUrl @@ -2613,26 +2633,28 @@ Returns **void** automatically synchronized promise through #recorder [34]: #click -[35]: https://playwright.dev/docs/api/class-elementhandle#element-handle-uncheck +[35]: https://playwright.dev/docs/api/class-page#page-route-from-har + +[36]: https://playwright.dev/docs/api/class-elementhandle#element-handle-uncheck -[36]: https://github.com/microsoft/playwright/blob/main/docs/src/api/class-page.md +[37]: https://github.com/microsoft/playwright/blob/main/docs/src/api/class-page.md -[37]: https://github.com/microsoft/playwright/blob/main/docs/src/api/class-browsercontext.md +[38]: https://github.com/microsoft/playwright/blob/main/docs/src/api/class-browsercontext.md -[38]: https://github.com/microsoft/playwright/blob/main/docs/src/api/class-browser.md +[39]: https://github.com/microsoft/playwright/blob/main/docs/src/api/class-browser.md -[39]: https://playwright.dev/docs/api/class-page?_highlight=waitfornavi#pagewaitfornavigationoptions +[40]: https://playwright.dev/docs/api/class-page?_highlight=waitfornavi#pagewaitfornavigationoptions -[40]: https://playwright.dev/docs/api/class-page#page-wait-for-url +[41]: https://playwright.dev/docs/api/class-page#page-wait-for-url -[41]: https://codecept.io/react +[42]: https://codecept.io/react -[42]: https://playwright.dev/docs/api/class-browsercontext +[43]: https://playwright.dev/docs/api/class-browsercontext -[43]: https://playwright.dev/docs/api/class-page#page-set-default-timeout +[44]: https://playwright.dev/docs/api/class-page#page-set-default-timeout -[44]: https://playwright.dev/docs/trace-viewer +[45]: https://playwright.dev/docs/trace-viewer -[45]: https://playwright.dev/docs/browsers/#google-chrome--microsoft-edge +[46]: https://playwright.dev/docs/browsers/#google-chrome--microsoft-edge -[46]: https://playwright.dev/docs/api/class-consolemessage#console-message-type +[47]: https://playwright.dev/docs/api/class-consolemessage#console-message-type diff --git a/lib/helper/Playwright.js b/lib/helper/Playwright.js index 7f26c6ad2..a1e4204a1 100644 --- a/lib/helper/Playwright.js +++ b/lib/helper/Playwright.js @@ -1089,6 +1089,33 @@ class Playwright extends Helper { return this.page.reload({ timeout: this.options.getPageTimeout, waitUntil: this.options.waitForNavigation }); } + /** + * Replaying from HAR + * + * ```js + * // Replay API requests from HAR. + * // Either use a matching response from the HAR, + * // or abort the request if nothing matches. + * I.replayFromHar('./output/har/something.har', { url: "*\/**\/api/v1/fruits" }); + * I.amOnPage('https://demo.playwright.dev/api-mocking'); + * I.see('CodeceptJS'); + * ``` + * + * @param {string} harFilePath Path to recorded HAR file + * @param {object} [opts] [Options for replaying from HAR](https://playwright.dev/docs/api/class-page#page-route-from-har) + * + * @returns Promise + */ + async replayFromHar(harFilePath, opts) { + const file = path.join(global.codecept_dir, harFilePath); + + if (!fileExists(file)) { + throw new Error(`File at ${file} cannot be found on local system`); + } + + await this.page.routeFromHAR(harFilePath, opts); + } + /** * {{> scrollPageToTop }} */ diff --git a/test/data/sandbox/testHar.har b/test/data/sandbox/testHar.har new file mode 100644 index 000000000..2cceeabc1 --- /dev/null +++ b/test/data/sandbox/testHar.har @@ -0,0 +1,514 @@ +{ + "log": { + "version": "1.2", + "creator": { + "name": "Playwright", + "version": "1.39.0" + }, + "browser": { + "name": "chromium", + "version": "119.0.6045.9" + }, + "pages": [ + { + "startedDateTime": "2023-11-11T14:26:25.604Z", + "id": "page@636ec8b031ed4a6a49b49384476ab1fa", + "title": "Playwright API Mocking demo", + "pageTimings": { + "onContentLoad": 279, + "onLoad": 280 + } + } + ], + "entries": [ + { + "startedDateTime": "2023-11-11T14:26:25.636Z", + "time": 202.825, + "request": { + "method": "GET", + "url": "https://demo.playwright.dev/api-mocking", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": ":authority", "value": "demo.playwright.dev" }, + { "name": ":method", "value": "GET" }, + { "name": ":path", "value": "/api-mocking" }, + { "name": ":scheme", "value": "https" }, + { "name": "accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" }, + { "name": "accept-encoding", "value": "gzip, deflate, br" }, + { "name": "accept-language", "value": "en-GB,en;q=0.9" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"macOS\"" }, + { "name": "sec-fetch-dest", "value": "document" }, + { "name": "sec-fetch-mode", "value": "navigate" }, + { "name": "sec-fetch-site", "value": "none" }, + { "name": "sec-fetch-user", "value": "?1" }, + { "name": "upgrade-insecure-requests", "value": "1" }, + { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" } + ], + "queryString": [], + "headersSize": 684, + "bodySize": 0 + }, + "response": { + "status": 301, + "statusText": "", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": "accept-ranges", "value": "bytes" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "age", "value": "0" }, + { "name": "cache-control", "value": "max-age=600" }, + { "name": "content-length", "value": "162" }, + { "name": "content-type", "value": "text/html" }, + { "name": "date", "value": "Sat, 11 Nov 2023 14:26:25 GMT" }, + { "name": "expires", "value": "Sat, 11 Nov 2023 14:36:25 GMT" }, + { "name": "location", "value": "https://demo.playwright.dev/api-mocking/" }, + { "name": "server", "value": "GitHub.com" }, + { "name": "vary", "value": "Accept-Encoding" }, + { "name": "via", "value": "1.1 varnish" }, + { "name": "x-cache", "value": "MISS" }, + { "name": "x-cache-hits", "value": "0" }, + { "name": "x-fastly-request-id", "value": "86fa7d09986e003db58862413e49305b760328f6" }, + { "name": "x-github-request-id", "value": "DF3A:13C9A:1BBC366:1C37CC4:654F8F11" }, + { "name": "x-proxy-cache", "value": "MISS" }, + { "name": "x-served-by", "value": "cache-fra-etou8220117-FRA" }, + { "name": "x-timer", "value": "S1699712786.744932,VS0,VE100" } + ], + "content": { + "size": -1, + "mimeType": "text/html", + "compression": 0 + }, + "headersSize": 0, + "bodySize": 162, + "redirectURL": "https://demo.playwright.dev/api-mocking/", + "_transferSize": 162 + }, + "cache": {}, + "timings": { "dns": 0, "connect": 47.338, "ssl": 32.931, "send": 0, "wait": 118.878, "receive": 3.678 }, + "pageref": "page@636ec8b031ed4a6a49b49384476ab1fa", + "serverIPAddress": "[2606:50c0:8002::153]", + "_serverPort": 443, + "_securityDetails": { + "protocol": "TLS 1.3", + "subjectName": "demo.playwright.dev", + "issuer": "R3", + "validFrom": 1695585164, + "validTo": 1703361163 + } + }, + { + "startedDateTime": "2023-11-11T14:26:25.807Z", + "time": 21.384, + "request": { + "method": "GET", + "url": "https://demo.playwright.dev/api-mocking/", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": ":authority", "value": "demo.playwright.dev" }, + { "name": ":method", "value": "GET" }, + { "name": ":path", "value": "/api-mocking/" }, + { "name": ":scheme", "value": "https" }, + { "name": "accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" }, + { "name": "accept-encoding", "value": "gzip, deflate, br" }, + { "name": "accept-language", "value": "en-GB,en;q=0.9" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"macOS\"" }, + { "name": "sec-fetch-dest", "value": "document" }, + { "name": "sec-fetch-mode", "value": "navigate" }, + { "name": "sec-fetch-site", "value": "none" }, + { "name": "sec-fetch-user", "value": "?1" }, + { "name": "upgrade-insecure-requests", "value": "1" }, + { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" } + ], + "queryString": [], + "headersSize": 686, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": "accept-ranges", "value": "bytes" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "age", "value": "108" }, + { "name": "cache-control", "value": "max-age=600" }, + { "name": "content-encoding", "value": "gzip" }, + { "name": "content-length", "value": "337" }, + { "name": "content-type", "value": "text/html; charset=utf-8" }, + { "name": "date", "value": "Sat, 11 Nov 2023 14:26:25 GMT" }, + { "name": "etag", "value": "W/\"653816e6-210\"" }, + { "name": "expires", "value": "Sat, 11 Nov 2023 14:21:12 GMT" }, + { "name": "last-modified", "value": "Tue, 24 Oct 2023 19:11:34 GMT" }, + { "name": "server", "value": "GitHub.com" }, + { "name": "vary", "value": "Accept-Encoding" }, + { "name": "via", "value": "1.1 varnish" }, + { "name": "x-cache", "value": "HIT" }, + { "name": "x-cache-hits", "value": "1" }, + { "name": "x-fastly-request-id", "value": "3168ace4dd76a1131c6d645b8a4e517eda1ce67a" }, + { "name": "x-github-request-id", "value": "9130:04F3:4C16F69:4D67A53:654F8B7F" }, + { "name": "x-proxy-cache", "value": "MISS" }, + { "name": "x-served-by", "value": "cache-fra-etou8220117-FRA" }, + { "name": "x-timer", "value": "S1699712786.866208,VS0,VE2" } + ], + "content": { + "size": 528, + "mimeType": "text/html; charset=utf-8", + "compression": 0, + "text": "\n\n \n \n \n \n Playwright API Mocking demo\n \n \n \n \n
\n \n \n\n" + }, + "headersSize": 0, + "bodySize": 562, + "redirectURL": "", + "_transferSize": 562 + }, + "cache": {}, + "timings": { "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 20.369, "receive": 1.015 }, + "pageref": "page@636ec8b031ed4a6a49b49384476ab1fa", + "serverIPAddress": "[2606:50c0:8002::153]", + "_serverPort": 443, + "_securityDetails": { + "protocol": "TLS 1.3", + "subjectName": "demo.playwright.dev", + "issuer": "R3", + "validFrom": 1695585164, + "validTo": 1703361163 + } + }, + { + "startedDateTime": "2023-11-11T14:26:25.838Z", + "time": 41.709, + "request": { + "method": "GET", + "url": "https://demo.playwright.dev/api-mocking/assets/index-c9b211ff.js", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": ":authority", "value": "demo.playwright.dev" }, + { "name": ":method", "value": "GET" }, + { "name": ":path", "value": "/api-mocking/assets/index-c9b211ff.js" }, + { "name": ":scheme", "value": "https" }, + { "name": "accept", "value": "*/*" }, + { "name": "accept-encoding", "value": "gzip, deflate, br" }, + { "name": "accept-language", "value": "en-GB,en;q=0.9" }, + { "name": "origin", "value": "https://demo.playwright.dev" }, + { "name": "referer", "value": "https://demo.playwright.dev/api-mocking/" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"macOS\"" }, + { "name": "sec-fetch-dest", "value": "script" }, + { "name": "sec-fetch-mode", "value": "cors" }, + { "name": "sec-fetch-site", "value": "same-origin" }, + { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" } + ], + "queryString": [], + "headersSize": 641, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": "accept-ranges", "value": "bytes" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "age", "value": "108" }, + { "name": "cache-control", "value": "max-age=600" }, + { "name": "content-encoding", "value": "gzip" }, + { "name": "content-length", "value": "46881" }, + { "name": "content-type", "value": "application/javascript; charset=utf-8" }, + { "name": "date", "value": "Sat, 11 Nov 2023 14:26:25 GMT" }, + { "name": "etag", "value": "W/\"653816e6-23244\"" }, + { "name": "expires", "value": "Sat, 11 Nov 2023 14:21:12 GMT" }, + { "name": "last-modified", "value": "Tue, 24 Oct 2023 19:11:34 GMT" }, + { "name": "server", "value": "GitHub.com" }, + { "name": "vary", "value": "Accept-Encoding" }, + { "name": "via", "value": "1.1 varnish" }, + { "name": "x-cache", "value": "HIT" }, + { "name": "x-cache-hits", "value": "1" }, + { "name": "x-fastly-request-id", "value": "e553e2d6b69014a2d237dbe696dcdbb6c985b0b4" }, + { "name": "x-github-request-id", "value": "D5C4:76AE:29F8A97:2ABA1DF:654F8B7F" }, + { "name": "x-proxy-cache", "value": "MISS" }, + { "name": "x-served-by", "value": "cache-fra-etou8220117-FRA" }, + { "name": "x-timer", "value": "S1699712786.893021,VS0,VE2" } + ], + "content": { + "size": 143940, + "mimeType": "application/javascript; charset=utf-8", + "compression": 96796, + "text": "(function(){const n=document.createElement(\"link\").relList;if(n&&n.supports&&n.supports(\"modulepreload\"))return;for(const l of document.querySelectorAll('link[rel=\"modulepreload\"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type===\"childList\")for(const u of o.addedNodes)u.tagName===\"LINK\"&&u.rel===\"modulepreload\"&&r(u)}).observe(document,{childList:!0,subtree:!0});function t(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin===\"use-credentials\"?o.credentials=\"include\":l.crossOrigin===\"anonymous\"?o.credentials=\"omit\":o.credentials=\"same-origin\",o}function r(l){if(l.ep)return;l.ep=!0;const o=t(l);fetch(l.href,o)}})();function rc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}var Hi={exports:{}},el={},Wi={exports:{}},L={};/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */var Xt=Symbol.for(\"react.element\"),lc=Symbol.for(\"react.portal\"),oc=Symbol.for(\"react.fragment\"),uc=Symbol.for(\"react.strict_mode\"),ic=Symbol.for(\"react.profiler\"),sc=Symbol.for(\"react.provider\"),ac=Symbol.for(\"react.context\"),cc=Symbol.for(\"react.forward_ref\"),fc=Symbol.for(\"react.suspense\"),dc=Symbol.for(\"react.memo\"),pc=Symbol.for(\"react.lazy\"),Du=Symbol.iterator;function mc(e){return e===null||typeof e!=\"object\"?null:(e=Du&&e[Du]||e[\"@@iterator\"],typeof e==\"function\"?e:null)}var Qi={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ki=Object.assign,Yi={};function lt(e,n,t){this.props=e,this.context=n,this.refs=Yi,this.updater=t||Qi}lt.prototype.isReactComponent={};lt.prototype.setState=function(e,n){if(typeof e!=\"object\"&&typeof e!=\"function\"&&e!=null)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,e,n,\"setState\")};lt.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")};function Xi(){}Xi.prototype=lt.prototype;function $o(e,n,t){this.props=e,this.context=n,this.refs=Yi,this.updater=t||Qi}var Ao=$o.prototype=new Xi;Ao.constructor=$o;Ki(Ao,lt.prototype);Ao.isPureReactComponent=!0;var Iu=Array.isArray,Gi=Object.prototype.hasOwnProperty,Vo={current:null},Zi={key:!0,ref:!0,__self:!0,__source:!0};function Ji(e,n,t){var r,l={},o=null,u=null;if(n!=null)for(r in n.ref!==void 0&&(u=n.ref),n.key!==void 0&&(o=\"\"+n.key),n)Gi.call(n,r)&&!Zi.hasOwnProperty(r)&&(l[r]=n[r]);var i=arguments.length-2;if(i===1)l.children=t;else if(1>>1,X=x[H];if(0>>1;Hl(gl,z))ynl(er,gl)?(x[H]=er,x[yn]=z,H=yn):(x[H]=gl,x[vn]=z,H=vn);else if(ynl(er,z))x[H]=er,x[yn]=z,H=yn;else break e}}return N}function l(x,N){var z=x.sortIndex-N.sortIndex;return z!==0?z:x.id-N.id}if(typeof performance==\"object\"&&typeof performance.now==\"function\"){var o=performance;e.unstable_now=function(){return o.now()}}else{var u=Date,i=u.now();e.unstable_now=function(){return u.now()-i}}var s=[],c=[],h=1,m=null,p=3,g=!1,w=!1,k=!1,j=typeof setTimeout==\"function\"?setTimeout:null,f=typeof clearTimeout==\"function\"?clearTimeout:null,a=typeof setImmediate<\"u\"?setImmediate:null;typeof navigator<\"u\"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(x){for(var N=t(c);N!==null;){if(N.callback===null)r(c);else if(N.startTime<=x)r(c),N.sortIndex=N.expirationTime,n(s,N);else break;N=t(c)}}function v(x){if(k=!1,d(x),!w)if(t(s)!==null)w=!0,vl(E);else{var N=t(c);N!==null&&yl(v,N.startTime-x)}}function E(x,N){w=!1,k&&(k=!1,f(P),P=-1),g=!0;var z=p;try{for(d(N),m=t(s);m!==null&&(!(m.expirationTime>N)||x&&!Pe());){var H=m.callback;if(typeof H==\"function\"){m.callback=null,p=m.priorityLevel;var X=H(m.expirationTime<=N);N=e.unstable_now(),typeof X==\"function\"?m.callback=X:m===t(s)&&r(s),d(N)}else r(s);m=t(s)}if(m!==null)var bt=!0;else{var vn=t(c);vn!==null&&yl(v,vn.startTime-N),bt=!1}return bt}finally{m=null,p=z,g=!1}}var C=!1,_=null,P=-1,B=5,T=-1;function Pe(){return!(e.unstable_now()-Tx||125H?(x.sortIndex=z,n(c,x),t(s)===null&&x===t(c)&&(k?(f(P),P=-1):k=!0,yl(v,z-H))):(x.sortIndex=X,n(s,x),w||g||(w=!0,vl(E))),x},e.unstable_shouldYield=Pe,e.unstable_wrapCallback=function(x){var N=p;return function(){var z=p;p=N;try{return x.apply(this,arguments)}finally{p=z}}}})(ns);es.exports=ns;var Pc=es.exports;/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */var ts=Tt,ye=Pc;function y(e){for(var n=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,t=1;t\"u\"||typeof window.document>\"u\"||typeof window.document.createElement>\"u\"),Kl=Object.prototype.hasOwnProperty,Nc=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Fu={},Uu={};function zc(e){return Kl.call(Uu,e)?!0:Kl.call(Fu,e)?!1:Nc.test(e)?Uu[e]=!0:(Fu[e]=!0,!1)}function Lc(e,n,t,r){if(t!==null&&t.type===0)return!1;switch(typeof n){case\"function\":case\"symbol\":return!0;case\"boolean\":return r?!1:t!==null?!t.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!==\"data-\"&&e!==\"aria-\");default:return!1}}function Tc(e,n,t,r){if(n===null||typeof n>\"u\"||Lc(e,n,t,r))return!0;if(r)return!1;if(t!==null)switch(t.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function se(e,n,t,r,l,o,u){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=o,this.removeEmptyString=u}var b={};\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(e){b[e]=new se(e,0,!1,e,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(e){var n=e[0];b[n]=new se(n,1,!1,e[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(e){b[e]=new se(e,2,!1,e.toLowerCase(),null,!1,!1)});[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(e){b[e]=new se(e,2,!1,e,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(e){b[e]=new se(e,3,!1,e.toLowerCase(),null,!1,!1)});[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(e){b[e]=new se(e,3,!0,e,null,!1,!1)});[\"capture\",\"download\"].forEach(function(e){b[e]=new se(e,4,!1,e,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(e){b[e]=new se(e,6,!1,e,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(e){b[e]=new se(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ho=/[\\-:]([a-z])/g;function Wo(e){return e[1].toUpperCase()}\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(e){var n=e.replace(Ho,Wo);b[n]=new se(n,1,!1,e,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(e){var n=e.replace(Ho,Wo);b[n]=new se(n,1,!1,e,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(e){var n=e.replace(Ho,Wo);b[n]=new se(n,1,!1,e,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(e){b[e]=new se(e,1,!1,e.toLowerCase(),null,!1,!1)});b.xlinkHref=new se(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(e){b[e]=new se(e,1,!1,e.toLowerCase(),null,!0,!0)});function Qo(e,n,t,r){var l=b.hasOwnProperty(n)?b[n]:null;(l!==null?l.type!==0:r||!(2i||l[u]!==o[i]){var s=`\n`+l[u].replace(\" at new \",\" at \");return e.displayName&&s.includes(\"\")&&(s=s.replace(\"\",e.displayName)),s}while(1<=u&&0<=i);break}}}finally{Sl=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:\"\")?yt(e):\"\"}function Rc(e){switch(e.tag){case 5:return yt(e.type);case 16:return yt(\"Lazy\");case 13:return yt(\"Suspense\");case 19:return yt(\"SuspenseList\");case 0:case 2:case 15:return e=El(e.type,!1),e;case 11:return e=El(e.type.render,!1),e;case 1:return e=El(e.type,!0),e;default:return\"\"}}function Zl(e){if(e==null)return null;if(typeof e==\"function\")return e.displayName||e.name||null;if(typeof e==\"string\")return e;switch(e){case Dn:return\"Fragment\";case Mn:return\"Portal\";case Yl:return\"Profiler\";case Ko:return\"StrictMode\";case Xl:return\"Suspense\";case Gl:return\"SuspenseList\"}if(typeof e==\"object\")switch(e.$$typeof){case os:return(e.displayName||\"Context\")+\".Consumer\";case ls:return(e._context.displayName||\"Context\")+\".Provider\";case Yo:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||\"\",e=e!==\"\"?\"ForwardRef(\"+e+\")\":\"ForwardRef\"),e;case Xo:return n=e.displayName||null,n!==null?n:Zl(e.type)||\"Memo\";case Ze:n=e._payload,e=e._init;try{return Zl(e(n))}catch{}}return null}function Oc(e){var n=e.type;switch(e.tag){case 24:return\"Cache\";case 9:return(n.displayName||\"Context\")+\".Consumer\";case 10:return(n._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return e=n.render,e=e.displayName||e.name||\"\",n.displayName||(e!==\"\"?\"ForwardRef(\"+e+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return n;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Zl(n);case 8:return n===Ko?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";case 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n==\"function\")return n.displayName||n.name||null;if(typeof n==\"string\")return n}return null}function fn(e){switch(typeof e){case\"boolean\":case\"number\":case\"string\":case\"undefined\":return e;case\"object\":return e;default:return\"\"}}function is(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()===\"input\"&&(n===\"checkbox\"||n===\"radio\")}function Mc(e){var n=is(e)?\"checked\":\"value\",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),r=\"\"+e[n];if(!e.hasOwnProperty(n)&&typeof t<\"u\"&&typeof t.get==\"function\"&&typeof t.set==\"function\"){var l=t.get,o=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return l.call(this)},set:function(u){r=\"\"+u,o.call(this,u)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return r},setValue:function(u){r=\"\"+u},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function rr(e){e._valueTracker||(e._valueTracker=Mc(e))}function ss(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r=\"\";return e&&(r=is(e)?e.checked?\"true\":\"false\":e.value),e=r,e!==t?(n.setValue(e),!0):!1}function Tr(e){if(e=e||(typeof document<\"u\"?document:void 0),typeof e>\"u\")return null;try{return e.activeElement||e.body}catch{return e.body}}function Jl(e,n){var t=n.checked;return A({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??e._wrapperState.initialChecked})}function Au(e,n){var t=n.defaultValue==null?\"\":n.defaultValue,r=n.checked!=null?n.checked:n.defaultChecked;t=fn(n.value!=null?n.value:t),e._wrapperState={initialChecked:r,initialValue:t,controlled:n.type===\"checkbox\"||n.type===\"radio\"?n.checked!=null:n.value!=null}}function as(e,n){n=n.checked,n!=null&&Qo(e,\"checked\",n,!1)}function ql(e,n){as(e,n);var t=fn(n.value),r=n.type;if(t!=null)r===\"number\"?(t===0&&e.value===\"\"||e.value!=t)&&(e.value=\"\"+t):e.value!==\"\"+t&&(e.value=\"\"+t);else if(r===\"submit\"||r===\"reset\"){e.removeAttribute(\"value\");return}n.hasOwnProperty(\"value\")?bl(e,n.type,t):n.hasOwnProperty(\"defaultValue\")&&bl(e,n.type,fn(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Vu(e,n,t){if(n.hasOwnProperty(\"value\")||n.hasOwnProperty(\"defaultValue\")){var r=n.type;if(!(r!==\"submit\"&&r!==\"reset\"||n.value!==void 0&&n.value!==null))return;n=\"\"+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}t=e.name,t!==\"\"&&(e.name=\"\"),e.defaultChecked=!!e._wrapperState.initialChecked,t!==\"\"&&(e.name=t)}function bl(e,n,t){(n!==\"number\"||Tr(e.ownerDocument)!==e)&&(t==null?e.defaultValue=\"\"+e._wrapperState.initialValue:e.defaultValue!==\"\"+t&&(e.defaultValue=\"\"+t))}var gt=Array.isArray;function Qn(e,n,t,r){if(e=e.options,n){n={};for(var l=0;l\"+n.valueOf().toString()+\"\",n=lr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Ot(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&t.nodeType===3){t.nodeValue=n;return}}e.textContent=n}var St={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Dc=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(St).forEach(function(e){Dc.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),St[n]=St[e]})});function ps(e,n,t){return n==null||typeof n==\"boolean\"||n===\"\"?\"\":t||typeof n!=\"number\"||n===0||St.hasOwnProperty(e)&&St[e]?(\"\"+n).trim():n+\"px\"}function ms(e,n){e=e.style;for(var t in n)if(n.hasOwnProperty(t)){var r=t.indexOf(\"--\")===0,l=ps(t,n[t],r);t===\"float\"&&(t=\"cssFloat\"),r?e.setProperty(t,l):e[t]=l}}var Ic=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function to(e,n){if(n){if(Ic[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(y(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(y(60));if(typeof n.dangerouslySetInnerHTML!=\"object\"||!(\"__html\"in n.dangerouslySetInnerHTML))throw Error(y(61))}if(n.style!=null&&typeof n.style!=\"object\")throw Error(y(62))}}function ro(e,n){if(e.indexOf(\"-\")===-1)return typeof n.is==\"string\";switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}var lo=null;function Go(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var oo=null,Kn=null,Yn=null;function Wu(e){if(e=Jt(e)){if(typeof oo!=\"function\")throw Error(y(280));var n=e.stateNode;n&&(n=ol(n),oo(e.stateNode,e.type,n))}}function hs(e){Kn?Yn?Yn.push(e):Yn=[e]:Kn=e}function vs(){if(Kn){var e=Kn,n=Yn;if(Yn=Kn=null,Wu(e),n)for(e=0;e>>=0,e===0?32:31-(Kc(e)/Yc|0)|0}var or=64,ur=4194304;function wt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Dr(e,n){var t=e.pendingLanes;if(t===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,u=t&268435455;if(u!==0){var i=u&~l;i!==0?r=wt(i):(o&=u,o!==0&&(r=wt(o)))}else u=t&~l,u!==0?r=wt(u):o!==0&&(r=wt(o));if(r===0)return 0;if(n!==0&&n!==r&&!(n&l)&&(l=r&-r,o=n&-n,l>=o||l===16&&(o&4194240)!==0))return n;if(r&4&&(r|=t&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function Gt(e,n,t){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Re(n),e[n]=t}function Jc(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=xt),bu=String.fromCharCode(32),ei=!1;function js(e,n){switch(e){case\"keyup\":return Pf.indexOf(n.keyCode)!==-1;case\"keydown\":return n.keyCode!==229;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function Fs(e){return e=e.detail,typeof e==\"object\"&&\"data\"in e?e.data:null}var In=!1;function zf(e,n){switch(e){case\"compositionend\":return Fs(n);case\"keypress\":return n.which!==32?null:(ei=!0,bu);case\"textInput\":return e=n.data,e===bu&&ei?null:e;default:return null}}function Lf(e,n){if(In)return e===\"compositionend\"||!ru&&js(e,n)?(e=Ds(),Sr=eu=en=null,In=!1,e):null;switch(e){case\"paste\":return null;case\"keypress\":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:t,offset:n-e};e=r}e:{for(;t;){if(t.nextSibling){t=t.nextSibling;break e}t=t.parentNode}t=void 0}t=li(t)}}function Vs(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Vs(e,n.parentNode):\"contains\"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Bs(){for(var e=window,n=Tr();n instanceof e.HTMLIFrameElement;){try{var t=typeof n.contentWindow.location.href==\"string\"}catch{t=!1}if(t)e=n.contentWindow;else break;n=Tr(e.document)}return n}function lu(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n===\"input\"&&(e.type===\"text\"||e.type===\"search\"||e.type===\"tel\"||e.type===\"url\"||e.type===\"password\")||n===\"textarea\"||e.contentEditable===\"true\")}function Uf(e){var n=Bs(),t=e.focusedElem,r=e.selectionRange;if(n!==t&&t&&t.ownerDocument&&Vs(t.ownerDocument.documentElement,t)){if(r!==null&&lu(t)){if(n=r.start,e=r.end,e===void 0&&(e=n),\"selectionStart\"in t)t.selectionStart=n,t.selectionEnd=Math.min(e,t.value.length);else if(e=(n=t.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var l=t.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=oi(t,o);var u=oi(t,r);l&&u&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&(n=n.createRange(),n.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(n),e.extend(u.node,u.offset)):(n.setEnd(u.node,u.offset),e.addRange(n)))}}for(n=[],e=t;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof t.focus==\"function\"&&t.focus(),t=0;t=document.documentMode,jn=null,fo=null,_t=null,po=!1;function ui(e,n,t){var r=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;po||jn==null||jn!==Tr(r)||(r=jn,\"selectionStart\"in r&&lu(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),_t&&Ut(_t,r)||(_t=r,r=Fr(fo,\"onSelect\"),0$n||(e.current=wo[$n],wo[$n]=null,$n--)}function M(e,n){$n++,wo[$n]=e.current,e.current=n}var dn={},le=mn(dn),fe=mn(!1),_n=dn;function qn(e,n){var t=e.type.contextTypes;if(!t)return dn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in t)l[o]=n[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=l),l}function de(e){return e=e.childContextTypes,e!=null}function $r(){I(fe),I(le)}function pi(e,n,t){if(le.current!==dn)throw Error(y(168));M(le,n),M(fe,t)}function Js(e,n,t){var r=e.stateNode;if(n=n.childContextTypes,typeof r.getChildContext!=\"function\")return t;r=r.getChildContext();for(var l in r)if(!(l in n))throw Error(y(108,Oc(e)||\"Unknown\",l));return A({},t,r)}function Ar(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||dn,_n=le.current,M(le,e),M(fe,fe.current),!0}function mi(e,n,t){var r=e.stateNode;if(!r)throw Error(y(169));t?(e=Js(e,n,_n),r.__reactInternalMemoizedMergedChildContext=e,I(fe),I(le),M(le,e)):I(fe),M(fe,t)}var Ae=null,ul=!1,jl=!1;function qs(e){Ae===null?Ae=[e]:Ae.push(e)}function Zf(e){ul=!0,qs(e)}function hn(){if(!jl&&Ae!==null){jl=!0;var e=0,n=O;try{var t=Ae;for(O=1;e>=u,l-=u,Ve=1<<32-Re(n)+l|t<P?(B=_,_=null):B=_.sibling;var T=p(f,_,d[P],v);if(T===null){_===null&&(_=B);break}e&&_&&T.alternate===null&&n(f,_),a=o(T,a,P),C===null?E=T:C.sibling=T,C=T,_=B}if(P===d.length)return t(f,_),F&&gn(f,P),E;if(_===null){for(;PP?(B=_,_=null):B=_.sibling;var Pe=p(f,_,T.value,v);if(Pe===null){_===null&&(_=B);break}e&&_&&Pe.alternate===null&&n(f,_),a=o(Pe,a,P),C===null?E=Pe:C.sibling=Pe,C=Pe,_=B}if(T.done)return t(f,_),F&&gn(f,P),E;if(_===null){for(;!T.done;P++,T=d.next())T=m(f,T.value,v),T!==null&&(a=o(T,a,P),C===null?E=T:C.sibling=T,C=T);return F&&gn(f,P),E}for(_=r(f,_);!T.done;P++,T=d.next())T=g(_,f,P,T.value,v),T!==null&&(e&&T.alternate!==null&&_.delete(T.key===null?P:T.key),a=o(T,a,P),C===null?E=T:C.sibling=T,C=T);return e&&_.forEach(function(it){return n(f,it)}),F&&gn(f,P),E}function j(f,a,d,v){if(typeof d==\"object\"&&d!==null&&d.type===Dn&&d.key===null&&(d=d.props.children),typeof d==\"object\"&&d!==null){switch(d.$$typeof){case tr:e:{for(var E=d.key,C=a;C!==null;){if(C.key===E){if(E=d.type,E===Dn){if(C.tag===7){t(f,C.sibling),a=l(C,d.props.children),a.return=f,f=a;break e}}else if(C.elementType===E||typeof E==\"object\"&&E!==null&&E.$$typeof===Ze&&Si(E)===C.type){t(f,C.sibling),a=l(C,d.props),a.ref=mt(f,C,d),a.return=f,f=a;break e}t(f,C);break}else n(f,C);C=C.sibling}d.type===Dn?(a=Cn(d.props.children,f.mode,v,d.key),a.return=f,f=a):(v=Lr(d.type,d.key,d.props,null,f.mode,v),v.ref=mt(f,a,d),v.return=f,f=v)}return u(f);case Mn:e:{for(C=d.key;a!==null;){if(a.key===C)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){t(f,a.sibling),a=l(a,d.children||[]),a.return=f,f=a;break e}else{t(f,a);break}else n(f,a);a=a.sibling}a=Wl(d,f.mode,v),a.return=f,f=a}return u(f);case Ze:return C=d._init,j(f,a,C(d._payload),v)}if(gt(d))return w(f,a,d,v);if(at(d))return k(f,a,d,v);pr(f,d)}return typeof d==\"string\"&&d!==\"\"||typeof d==\"number\"?(d=\"\"+d,a!==null&&a.tag===6?(t(f,a.sibling),a=l(a,d),a.return=f,f=a):(t(f,a),a=Hl(d,f.mode,v),a.return=f,f=a),u(f)):t(f,a)}return j}var et=ua(!0),ia=ua(!1),qt={},Ue=mn(qt),Bt=mn(qt),Ht=mn(qt);function En(e){if(e===qt)throw Error(y(174));return e}function pu(e,n){switch(M(Ht,n),M(Bt,e),M(Ue,qt),e=n.nodeType,e){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:no(null,\"\");break;default:e=e===8?n.parentNode:n,n=e.namespaceURI||null,e=e.tagName,n=no(n,e)}I(Ue),M(Ue,n)}function nt(){I(Ue),I(Bt),I(Ht)}function sa(e){En(Ht.current);var n=En(Ue.current),t=no(n,e.type);n!==t&&(M(Bt,e),M(Ue,t))}function mu(e){Bt.current===e&&(I(Ue),I(Bt))}var U=mn(0);function Kr(e){for(var n=e;n!==null;){if(n.tag===13){var t=n.memoizedState;if(t!==null&&(t=t.dehydrated,t===null||t.data===\"$?\"||t.data===\"$!\"))return n}else if(n.tag===19&&n.memoizedProps.revealOrder!==void 0){if(n.flags&128)return n}else if(n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var Fl=[];function hu(){for(var e=0;et?t:4,e(!0);var r=Ul.transition;Ul.transition={};try{e(!1),n()}finally{O=t,Ul.transition=r}}function Ca(){return _e().memoizedState}function ed(e,n,t){var r=an(e);if(t={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null},_a(e))Pa(n,t);else if(t=ta(e,n,t,r),t!==null){var l=ue();Oe(t,e,r,l),Na(t,n,r)}}function nd(e,n,t){var r=an(e),l={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null};if(_a(e))Pa(n,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=n.lastRenderedReducer,o!==null))try{var u=n.lastRenderedState,i=o(u,t);if(l.hasEagerState=!0,l.eagerState=i,Me(i,u)){var s=n.interleaved;s===null?(l.next=l,fu(n)):(l.next=s.next,s.next=l),n.interleaved=l;return}}catch{}finally{}t=ta(e,n,l,r),t!==null&&(l=ue(),Oe(t,e,r,l),Na(t,n,r))}}function _a(e){var n=e.alternate;return e===$||n!==null&&n===$}function Pa(e,n){Pt=Yr=!0;var t=e.pending;t===null?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function Na(e,n,t){if(t&4194240){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,Jo(e,t)}}var Xr={readContext:Ce,useCallback:ee,useContext:ee,useEffect:ee,useImperativeHandle:ee,useInsertionEffect:ee,useLayoutEffect:ee,useMemo:ee,useReducer:ee,useRef:ee,useState:ee,useDebugValue:ee,useDeferredValue:ee,useTransition:ee,useMutableSource:ee,useSyncExternalStore:ee,useId:ee,unstable_isNewReconciler:!1},td={readContext:Ce,useCallback:function(e,n){return Ie().memoizedState=[e,n===void 0?null:n],e},useContext:Ce,useEffect:xi,useImperativeHandle:function(e,n,t){return t=t!=null?t.concat([e]):null,_r(4194308,4,wa.bind(null,n,e),t)},useLayoutEffect:function(e,n){return _r(4194308,4,e,n)},useInsertionEffect:function(e,n){return _r(4,2,e,n)},useMemo:function(e,n){var t=Ie();return n=n===void 0?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Ie();return n=t!==void 0?t(n):n,r.memoizedState=r.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},r.queue=e,e=e.dispatch=ed.bind(null,$,e),[r.memoizedState,e]},useRef:function(e){var n=Ie();return e={current:e},n.memoizedState=e},useState:Ei,useDebugValue:ku,useDeferredValue:function(e){return Ie().memoizedState=e},useTransition:function(){var e=Ei(!1),n=e[0];return e=bf.bind(null,e[1]),Ie().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,t){var r=$,l=Ie();if(F){if(t===void 0)throw Error(y(407));t=t()}else{if(t=n(),Z===null)throw Error(y(349));Nn&30||fa(r,n,t)}l.memoizedState=t;var o={value:t,getSnapshot:n};return l.queue=o,xi(pa.bind(null,r,o,e),[e]),r.flags|=2048,Kt(9,da.bind(null,r,o,t,n),void 0,null),t},useId:function(){var e=Ie(),n=Z.identifierPrefix;if(F){var t=Be,r=Ve;t=(r&~(1<<32-Re(r)-1)).toString(32)+t,n=\":\"+n+\"R\"+t,t=Wt++,0<\\/script>\",e=e.removeChild(e.firstChild)):typeof r.is==\"string\"?e=u.createElement(t,{is:r.is}):(e=u.createElement(t),t===\"select\"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,t),e[je]=n,e[Vt]=r,ja(e,n,!1,!1),n.stateNode=e;e:{switch(u=ro(t,r),t){case\"dialog\":D(\"cancel\",e),D(\"close\",e),l=r;break;case\"iframe\":case\"object\":case\"embed\":D(\"load\",e),l=r;break;case\"video\":case\"audio\":for(l=0;lrt&&(n.flags|=128,r=!0,ht(o,!1),n.lanes=4194304)}else{if(!r)if(e=Kr(u),e!==null){if(n.flags|=128,r=!0,t=e.updateQueue,t!==null&&(n.updateQueue=t,n.flags|=4),ht(o,!0),o.tail===null&&o.tailMode===\"hidden\"&&!u.alternate&&!F)return ne(n),null}else 2*W()-o.renderingStartTime>rt&&t!==1073741824&&(n.flags|=128,r=!0,ht(o,!1),n.lanes=4194304);o.isBackwards?(u.sibling=n.child,n.child=u):(t=o.last,t!==null?t.sibling=u:n.child=u,o.last=u)}return o.tail!==null?(n=o.tail,o.rendering=n,o.tail=n.sibling,o.renderingStartTime=W(),n.sibling=null,t=U.current,M(U,r?t&1|2:t&1),n):(ne(n),null);case 22:case 23:return Pu(),r=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(n.flags|=8192),r&&n.mode&1?me&1073741824&&(ne(n),n.subtreeFlags&6&&(n.flags|=8192)):ne(n),null;case 24:return null;case 25:return null}throw Error(y(156,n.tag))}function cd(e,n){switch(uu(n),n.tag){case 1:return de(n.type)&&$r(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return nt(),I(fe),I(le),hu(),e=n.flags,e&65536&&!(e&128)?(n.flags=e&-65537|128,n):null;case 5:return mu(n),null;case 13:if(I(U),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(y(340));bn()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return I(U),null;case 4:return nt(),null;case 10:return cu(n.type._context),null;case 22:case 23:return Pu(),null;case 24:return null;default:return null}}var hr=!1,re=!1,fd=typeof WeakSet==\"function\"?WeakSet:Set,S=null;function Hn(e,n){var t=e.ref;if(t!==null)if(typeof t==\"function\")try{t(null)}catch(r){V(e,n,r)}else t.current=null}function Ro(e,n,t){try{t()}catch(r){V(e,n,r)}}var Oi=!1;function dd(e,n){if(mo=Ir,e=Bs(),lu(e)){if(\"selectionStart\"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{t=(t=e.ownerDocument)&&t.defaultView||window;var r=t.getSelection&&t.getSelection();if(r&&r.rangeCount!==0){t=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{t.nodeType,o.nodeType}catch{t=null;break e}var u=0,i=-1,s=-1,c=0,h=0,m=e,p=null;n:for(;;){for(var g;m!==t||l!==0&&m.nodeType!==3||(i=u+l),m!==o||r!==0&&m.nodeType!==3||(s=u+r),m.nodeType===3&&(u+=m.nodeValue.length),(g=m.firstChild)!==null;)p=m,m=g;for(;;){if(m===e)break n;if(p===t&&++c===l&&(i=u),p===o&&++h===r&&(s=u),(g=m.nextSibling)!==null)break;m=p,p=m.parentNode}m=g}t=i===-1||s===-1?null:{start:i,end:s}}else t=null}t=t||{start:0,end:0}}else t=null;for(ho={focusedElem:e,selectionRange:t},Ir=!1,S=n;S!==null;)if(n=S,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,S=e;else for(;S!==null;){n=S;try{var w=n.alternate;if(n.flags&1024)switch(n.tag){case 0:case 11:case 15:break;case 1:if(w!==null){var k=w.memoizedProps,j=w.memoizedState,f=n.stateNode,a=f.getSnapshotBeforeUpdate(n.elementType===n.type?k:ze(n.type,k),j);f.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=n.stateNode.containerInfo;d.nodeType===1?d.textContent=\"\":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(y(163))}}catch(v){V(n,n.return,v)}if(e=n.sibling,e!==null){e.return=n.return,S=e;break}S=n.return}return w=Oi,Oi=!1,w}function Nt(e,n,t){var r=n.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Ro(n,t,o)}l=l.next}while(l!==r)}}function al(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function Oo(e){var n=e.ref;if(n!==null){var t=e.stateNode;switch(e.tag){case 5:e=t;break;default:e=t}typeof n==\"function\"?n(e):n.current=e}}function $a(e){var n=e.alternate;n!==null&&(e.alternate=null,$a(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[je],delete n[Vt],delete n[go],delete n[Xf],delete n[Gf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Aa(e){return e.tag===5||e.tag===3||e.tag===4}function Mi(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Aa(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Mo(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.nodeType===8?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(t.nodeType===8?(n=t.parentNode,n.insertBefore(e,t)):(n=t,n.appendChild(e)),t=t._reactRootContainer,t!=null||n.onclick!==null||(n.onclick=Ur));else if(r!==4&&(e=e.child,e!==null))for(Mo(e,n,t),e=e.sibling;e!==null;)Mo(e,n,t),e=e.sibling}function Do(e,n,t){var r=e.tag;if(r===5||r===6)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Do(e,n,t),e=e.sibling;e!==null;)Do(e,n,t),e=e.sibling}var J=null,Le=!1;function Ge(e,n,t){for(t=t.child;t!==null;)Va(e,n,t),t=t.sibling}function Va(e,n,t){if(Fe&&typeof Fe.onCommitFiberUnmount==\"function\")try{Fe.onCommitFiberUnmount(nl,t)}catch{}switch(t.tag){case 5:re||Hn(t,n);case 6:var r=J,l=Le;J=null,Ge(e,n,t),J=r,Le=l,J!==null&&(Le?(e=J,t=t.stateNode,e.nodeType===8?e.parentNode.removeChild(t):e.removeChild(t)):J.removeChild(t.stateNode));break;case 18:J!==null&&(Le?(e=J,t=t.stateNode,e.nodeType===8?Il(e.parentNode,t):e.nodeType===1&&Il(e,t),jt(e)):Il(J,t.stateNode));break;case 4:r=J,l=Le,J=t.stateNode.containerInfo,Le=!0,Ge(e,n,t),J=r,Le=l;break;case 0:case 11:case 14:case 15:if(!re&&(r=t.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,u=o.destroy;o=o.tag,u!==void 0&&(o&2||o&4)&&Ro(t,n,u),l=l.next}while(l!==r)}Ge(e,n,t);break;case 1:if(!re&&(Hn(t,n),r=t.stateNode,typeof r.componentWillUnmount==\"function\"))try{r.props=t.memoizedProps,r.state=t.memoizedState,r.componentWillUnmount()}catch(i){V(t,n,i)}Ge(e,n,t);break;case 21:Ge(e,n,t);break;case 22:t.mode&1?(re=(r=re)||t.memoizedState!==null,Ge(e,n,t),re=r):Ge(e,n,t);break;default:Ge(e,n,t)}}function Di(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var t=e.stateNode;t===null&&(t=e.stateNode=new fd),n.forEach(function(r){var l=Sd.bind(null,e,r);t.has(r)||(t.add(r),r.then(l,l))})}}function Ne(e,n){var t=n.deletions;if(t!==null)for(var r=0;rl&&(l=u),r&=~o}if(r=l,r=W()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*md(r/1960))-r,10e?16:e,nn===null)var r=!1;else{if(e=nn,nn=null,Jr=0,R&6)throw Error(y(331));var l=R;for(R|=4,S=e.current;S!==null;){var o=S,u=o.child;if(S.flags&16){var i=o.deletions;if(i!==null){for(var s=0;sW()-Cu?xn(e,0):xu|=t),pe(e,n)}function Ga(e,n){n===0&&(e.mode&1?(n=ur,ur<<=1,!(ur&130023424)&&(ur=4194304)):n=1);var t=ue();e=Ke(e,n),e!==null&&(Gt(e,n,t),pe(e,t))}function kd(e){var n=e.memoizedState,t=0;n!==null&&(t=n.retryLane),Ga(e,t)}function Sd(e,n){var t=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(t=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(y(314))}r!==null&&r.delete(n),Ga(e,t)}var Za;Za=function(e,n,t){if(e!==null)if(e.memoizedProps!==n.pendingProps||fe.current)ce=!0;else{if(!(e.lanes&t)&&!(n.flags&128))return ce=!1,sd(e,n,t);ce=!!(e.flags&131072)}else ce=!1,F&&n.flags&1048576&&bs(n,Br,n.index);switch(n.lanes=0,n.tag){case 2:var r=n.type;Pr(e,n),e=n.pendingProps;var l=qn(n,le.current);Gn(n,t),l=yu(null,n,r,e,l,t);var o=gu();return n.flags|=1,typeof l==\"object\"&&l!==null&&typeof l.render==\"function\"&&l.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,de(r)?(o=!0,Ar(n)):o=!1,n.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,du(n),l.updater=il,n.stateNode=l,l._reactInternals=n,Co(n,r,e,t),n=No(null,n,r,!0,o,t)):(n.tag=0,F&&o&&ou(n),oe(null,n,l,t),n=n.child),n;case 16:r=n.elementType;e:{switch(Pr(e,n),e=n.pendingProps,l=r._init,r=l(r._payload),n.type=r,l=n.tag=xd(r),e=ze(r,e),l){case 0:n=Po(null,n,r,e,t);break e;case 1:n=Li(null,n,r,e,t);break e;case 11:n=Ni(null,n,r,e,t);break e;case 14:n=zi(null,n,r,ze(r.type,e),t);break e}throw Error(y(306,r,\"\"))}return n;case 0:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),Po(e,n,r,l,t);case 1:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),Li(e,n,r,l,t);case 3:e:{if(Ma(n),e===null)throw Error(y(387));r=n.pendingProps,o=n.memoizedState,l=o.element,ra(e,n),Qr(n,r,null,t);var u=n.memoizedState;if(r=u.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:u.cache,pendingSuspenseBoundaries:u.pendingSuspenseBoundaries,transitions:u.transitions},n.updateQueue.baseState=o,n.memoizedState=o,n.flags&256){l=tt(Error(y(423)),n),n=Ti(e,n,r,t,l);break e}else if(r!==l){l=tt(Error(y(424)),n),n=Ti(e,n,r,t,l);break e}else for(he=on(n.stateNode.containerInfo.firstChild),ve=n,F=!0,Te=null,t=ia(n,null,r,t),n.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(bn(),r===l){n=Ye(e,n,t);break e}oe(e,n,r,t)}n=n.child}return n;case 5:return sa(n),e===null&&So(n),r=n.type,l=n.pendingProps,o=e!==null?e.memoizedProps:null,u=l.children,vo(r,l)?u=null:o!==null&&vo(r,o)&&(n.flags|=32),Oa(e,n),oe(e,n,u,t),n.child;case 6:return e===null&&So(n),null;case 13:return Da(e,n,t);case 4:return pu(n,n.stateNode.containerInfo),r=n.pendingProps,e===null?n.child=et(n,null,r,t):oe(e,n,r,t),n.child;case 11:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),Ni(e,n,r,l,t);case 7:return oe(e,n,n.pendingProps,t),n.child;case 8:return oe(e,n,n.pendingProps.children,t),n.child;case 12:return oe(e,n,n.pendingProps.children,t),n.child;case 10:e:{if(r=n.type._context,l=n.pendingProps,o=n.memoizedProps,u=l.value,M(Hr,r._currentValue),r._currentValue=u,o!==null)if(Me(o.value,u)){if(o.children===l.children&&!fe.current){n=Ye(e,n,t);break e}}else for(o=n.child,o!==null&&(o.return=n);o!==null;){var i=o.dependencies;if(i!==null){u=o.child;for(var s=i.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=He(-1,t&-t),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var h=c.pending;h===null?s.next=s:(s.next=h.next,h.next=s),c.pending=s}}o.lanes|=t,s=o.alternate,s!==null&&(s.lanes|=t),Eo(o.return,t,n),i.lanes|=t;break}s=s.next}}else if(o.tag===10)u=o.type===n.type?null:o.child;else if(o.tag===18){if(u=o.return,u===null)throw Error(y(341));u.lanes|=t,i=u.alternate,i!==null&&(i.lanes|=t),Eo(u,t,n),u=o.sibling}else u=o.child;if(u!==null)u.return=o;else for(u=o;u!==null;){if(u===n){u=null;break}if(o=u.sibling,o!==null){o.return=u.return,u=o;break}u=u.return}o=u}oe(e,n,l.children,t),n=n.child}return n;case 9:return l=n.type,r=n.pendingProps.children,Gn(n,t),l=Ce(l),r=r(l),n.flags|=1,oe(e,n,r,t),n.child;case 14:return r=n.type,l=ze(r,n.pendingProps),l=ze(r.type,l),zi(e,n,r,l,t);case 15:return Ta(e,n,n.type,n.pendingProps,t);case 17:return r=n.type,l=n.pendingProps,l=n.elementType===r?l:ze(r,l),Pr(e,n),n.tag=1,de(r)?(e=!0,Ar(n)):e=!1,Gn(n,t),oa(n,r,l),Co(n,r,l,t),No(null,n,r,!0,e,t);case 19:return Ia(e,n,t);case 22:return Ra(e,n,t)}throw Error(y(156,n.tag))};function Ja(e,n){return xs(e,n)}function Ed(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ee(e,n,t,r){return new Ed(e,n,t,r)}function zu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function xd(e){if(typeof e==\"function\")return zu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Yo)return 11;if(e===Xo)return 14}return 2}function cn(e,n){var t=e.alternate;return t===null?(t=Ee(e.tag,n,e.key,e.mode),t.elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=e.flags&14680064,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Lr(e,n,t,r,l,o){var u=2;if(r=e,typeof e==\"function\")zu(e)&&(u=1);else if(typeof e==\"string\")u=5;else e:switch(e){case Dn:return Cn(t.children,l,o,n);case Ko:u=8,l|=8;break;case Yl:return e=Ee(12,t,n,l|2),e.elementType=Yl,e.lanes=o,e;case Xl:return e=Ee(13,t,n,l),e.elementType=Xl,e.lanes=o,e;case Gl:return e=Ee(19,t,n,l),e.elementType=Gl,e.lanes=o,e;case us:return fl(t,l,o,n);default:if(typeof e==\"object\"&&e!==null)switch(e.$$typeof){case ls:u=10;break e;case os:u=9;break e;case Yo:u=11;break e;case Xo:u=14;break e;case Ze:u=16,r=null;break e}throw Error(y(130,e==null?e:typeof e,\"\"))}return n=Ee(u,t,n,l),n.elementType=e,n.type=r,n.lanes=o,n}function Cn(e,n,t,r){return e=Ee(7,e,r,n),e.lanes=t,e}function fl(e,n,t,r){return e=Ee(22,e,r,n),e.elementType=us,e.lanes=t,e.stateNode={isHidden:!1},e}function Hl(e,n,t){return e=Ee(6,e,null,n),e.lanes=t,e}function Wl(e,n,t){return n=Ee(4,e.children!==null?e.children:[],e.key,n),n.lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Cd(e,n,t,r,l){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Cl(0),this.expirationTimes=Cl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Cl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Lu(e,n,t,r,l,o,u,i,s){return e=new Cd(e,n,t,i,s),n===1?(n=1,o===!0&&(n|=8)):n=0,o=Ee(3,null,null,n),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},du(o),e}function _d(e,n,t){var r=3\"u\"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=\"function\"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(nc)}catch(e){console.error(e)}}nc(),bi.exports=ge;var Td=bi.exports,Bi=Td;Ql.createRoot=Bi.createRoot,Ql.hydrateRoot=Bi.hydrateRoot;function Rd(){const[e,n]=Tt.useState(null);return Tt.useEffect(()=>{fetch(\"api/v1/fruits\",{cache:\"no-cache\"}).then(t=>t.json()).then(t=>{n(t)})},[]),e===null?\"Loading...\":te.jsx(\"div\",{className:\"py-4\",children:te.jsx(\"div\",{className:\"rounded-xl shadow-lg p-3 max-w-xs md:max-w-3xl mx-auto border border-white bg-white\",children:te.jsx(\"div\",{className:\"bg-white text-gray-500 list-none font-medium text-xl\",children:te.jsx(\"ul\",{children:e.map(t=>te.jsx(\"li\",{children:t.name},t.id))})})})})}function Od(){return te.jsxs(te.Fragment,{children:[te.jsx(\"h1\",{className:\"py-4\",children:\"Render a List of Fruits\"}),te.jsx(\"p\",{children:\"This demo app renders a list of fruits. The tests for this app mock the api call to return only mocked data, intercept the request and add a new fruit to the response and use HAR files to mock the API\"}),te.jsx(\"p\",{children:te.jsx(\"a\",{href:\"https://github.com/microsoft/playwright-examples/blob/main/tests/api-mocking.spec.ts\",className:\"text-purple-300 hover:text-purple-300 hover:underline\",children:\"Check out the tests for this repo\"})}),te.jsx(\"p\",{children:te.jsx(\"a\",{href:\"https://playwright.dev/docs/mock\",className:\"text-purple-300 hover:text-purple-300 hover:underline\",children:\"Learn more on API mocking in Playwright\"})}),te.jsx(Rd,{})]})}Ql.createRoot(document.getElementById(\"root\")).render(te.jsx(wc.StrictMode,{children:te.jsx(Od,{})}));\n" + }, + "headersSize": 0, + "bodySize": 47144, + "redirectURL": "", + "_transferSize": 47144 + }, + "cache": {}, + "timings": { "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 23.649, "receive": 18.06 }, + "pageref": "page@636ec8b031ed4a6a49b49384476ab1fa", + "serverIPAddress": "[2606:50c0:8002::153]", + "_serverPort": 443, + "_securityDetails": { + "protocol": "TLS 1.3", + "subjectName": "demo.playwright.dev", + "issuer": "R3", + "validFrom": 1695585164, + "validTo": 1703361163 + } + }, + { + "startedDateTime": "2023-11-11T14:26:25.838Z", + "time": 19.6, + "request": { + "method": "GET", + "url": "https://demo.playwright.dev/api-mocking/assets/index-6d10c910.css", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": ":authority", "value": "demo.playwright.dev" }, + { "name": ":method", "value": "GET" }, + { "name": ":path", "value": "/api-mocking/assets/index-6d10c910.css" }, + { "name": ":scheme", "value": "https" }, + { "name": "accept", "value": "text/css,*/*;q=0.1" }, + { "name": "accept-encoding", "value": "gzip, deflate, br" }, + { "name": "accept-language", "value": "en-GB,en;q=0.9" }, + { "name": "referer", "value": "https://demo.playwright.dev/api-mocking/" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"macOS\"" }, + { "name": "sec-fetch-dest", "value": "style" }, + { "name": "sec-fetch-mode", "value": "no-cors" }, + { "name": "sec-fetch-site", "value": "same-origin" }, + { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" } + ], + "queryString": [], + "headersSize": 623, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": "accept-ranges", "value": "bytes" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "age", "value": "108" }, + { "name": "cache-control", "value": "max-age=600" }, + { "name": "content-encoding", "value": "gzip" }, + { "name": "content-length", "value": "2097" }, + { "name": "content-type", "value": "text/css; charset=utf-8" }, + { "name": "date", "value": "Sat, 11 Nov 2023 14:26:25 GMT" }, + { "name": "etag", "value": "W/\"653816e6-19a1\"" }, + { "name": "expires", "value": "Sat, 11 Nov 2023 14:21:12 GMT" }, + { "name": "last-modified", "value": "Tue, 24 Oct 2023 19:11:34 GMT" }, + { "name": "server", "value": "GitHub.com" }, + { "name": "vary", "value": "Accept-Encoding" }, + { "name": "via", "value": "1.1 varnish" }, + { "name": "x-cache", "value": "HIT" }, + { "name": "x-cache-hits", "value": "1" }, + { "name": "x-fastly-request-id", "value": "a92911be265308709c5d1d5f5dd4b9cd93eff6be" }, + { "name": "x-github-request-id", "value": "5264:1034D:1C6EA58:1CECCCC:654F8B80" }, + { "name": "x-proxy-cache", "value": "MISS" }, + { "name": "x-served-by", "value": "cache-fra-etou8220117-FRA" }, + { "name": "x-timer", "value": "S1699712786.893025,VS0,VE1" } + ], + "content": { + "size": 6561, + "mimeType": "text/css; charset=utf-8", + "compression": 4302, + "text": "#root{max-width:960px;margin:0 auto;padding:2rem;text-align:center}*,: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:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-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}*,: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-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--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-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--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: }.mx-auto{margin-left:auto;margin-right:auto}.max-w-xs{max-width:20rem}.list-none{list-style-type:none}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.p-3{padding:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-medium{font-weight:500}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-purple-300{--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}.hover\\:text-purple-300:hover{--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}@media (min-width: 768px){.md\\:max-w-3xl{max-width:48rem}}\n" + }, + "headersSize": 0, + "bodySize": 2259, + "redirectURL": "", + "_transferSize": 2259 + }, + "cache": {}, + "timings": { "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 18.375, "receive": 1.225 }, + "pageref": "page@636ec8b031ed4a6a49b49384476ab1fa", + "serverIPAddress": "[2606:50c0:8002::153]", + "_serverPort": 443, + "_securityDetails": { + "protocol": "TLS 1.3", + "subjectName": "demo.playwright.dev", + "issuer": "R3", + "validFrom": 1695585164, + "validTo": 1703361163 + } + }, + { + "startedDateTime": "2023-11-11T14:26:25.924Z", + "time": 24.21, + "request": { + "method": "GET", + "url": "https://demo.playwright.dev/api-mocking/api/v1/fruits", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": ":authority", "value": "demo.playwright.dev" }, + { "name": ":method", "value": "GET" }, + { "name": ":path", "value": "/api-mocking/api/v1/fruits" }, + { "name": ":scheme", "value": "https" }, + { "name": "accept", "value": "*/*" }, + { "name": "accept-encoding", "value": "gzip, deflate, br" }, + { "name": "accept-language", "value": "en-GB,en;q=0.9" }, + { "name": "cache-control", "value": "max-age=0" }, + { "name": "referer", "value": "https://demo.playwright.dev/api-mocking/" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"macOS\"" }, + { "name": "sec-fetch-dest", "value": "empty" }, + { "name": "sec-fetch-mode", "value": "cors" }, + { "name": "sec-fetch-site", "value": "same-origin" }, + { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" } + ], + "queryString": [], + "headersSize": 607, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": "accept-ranges", "value": "bytes" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "age", "value": "108" }, + { "name": "cache-control", "value": "max-age=600" }, + { "name": "content-length", "value": "762" }, + { "name": "content-type", "value": "application/octet-stream" }, + { "name": "date", "value": "Sat, 11 Nov 2023 14:26:25 GMT" }, + { "name": "etag", "value": "\"653816e6-2fa\"" }, + { "name": "expires", "value": "Sat, 11 Nov 2023 14:21:12 GMT" }, + { "name": "last-modified", "value": "Tue, 24 Oct 2023 19:11:34 GMT" }, + { "name": "server", "value": "GitHub.com" }, + { "name": "vary", "value": "Accept-Encoding" }, + { "name": "via", "value": "1.1 varnish" }, + { "name": "x-cache", "value": "HIT" }, + { "name": "x-cache-hits", "value": "1" }, + { "name": "x-fastly-request-id", "value": "edc5657d5425c992d9d5d05286928761fc2c1c58" }, + { "name": "x-github-request-id", "value": "473C:D2CF:51DED1D:53545BA:654F8B80" }, + { "name": "x-proxy-cache", "value": "MISS" }, + { "name": "x-served-by", "value": "cache-fra-etou8220117-FRA" }, + { "name": "x-timer", "value": "S1699712786.983363,VS0,VE2" } + ], + "content": { + "size": 762, + "mimeType": "application/octet-stream", + "compression": 0, + "text": "WwogIHsKICAgICJuYW1lIjogIkNvZGVjZXB0SlMiLAogICAgImlkIjogMTAwCiAgfSwKICB7CiAgICAibmFtZSI6ICJTdHJhd2JlcnJ5IiwKICAgICJpZCI6IDMKICB9LAogIHsKICAgICJuYW1lIjogIkJhbmFuYSIsCiAgICAiaWQiOiAxCiAgfSwKICB7CiAgICAibmFtZSI6ICJUb21hdG8iLAogICAgImlkIjogNQogIH0sCiAgewogICAgIm5hbWUiOiAiUGVhciIsCiAgICAiaWQiOiA0CiAgfSwKICB7CiAgICAibmFtZSI6ICJCbGFja2JlcnJ5IiwKICAgICJpZCI6IDY0CiAgfSwKICB7CiAgICAibmFtZSI6ICJLaXdpIiwKICAgICJpZCI6IDY2CiAgfSwKICB7CiAgICAibmFtZSI6ICJQaW5lYXBwbGUiLAogICAgImlkIjogMTAKICB9LAogIHsKICAgICJuYW1lIjogIlBhc3Npb25mcnVpdCIsCiAgICAiaWQiOiA3MAogIH0sCiAgewogICAgIm5hbWUiOiAiT3JhbmdlIiwKICAgICJpZCI6IDIKICB9LAogIHsKICAgICJuYW1lIjogIlJhc3BiZXJyeSIsCiAgICAiaWQiOiAyMwogIH0sCiAgewogICAgIm5hbWUiOiAiV2F0ZXJtZWxvbiIsCiAgICAiaWQiOiAyNQogIH0sCiAgewogICAgIm5hbWUiOiAiTGVtb24iLAogICAgImlkIjogMjYKICB9LAogIHsKICAgICJuYW1lIjogIk1hbmdvIiwKICAgICJpZCI6IDI3CiAgfSwKICB7CiAgICAibmFtZSI6ICJCbHVlYmVycnkiLAogICAgImlkIjogMzMKICB9LAogIHsKICAgICJuYW1lIjogIkFwcGxlIiwKICAgICJpZCI6IDYKICB9LAogIHsKICAgICJuYW1lIjogIk1lbG9uIiwKICAgICJpZCI6IDQxCiAgfSwKICB7CiAgICAibmFtZSI6ICJMaW1lIiwKICAgICJpZCI6IDQ0CiAgfQpdCg", + "encoding": "base64" + }, + "headersSize": 0, + "bodySize": 958, + "redirectURL": "", + "_transferSize": 958 + }, + "cache": {}, + "timings": { "dns": -1, "connect": -1, "ssl": -1, "send": 0, "wait": 23.395, "receive": 0.815 }, + "pageref": "page@636ec8b031ed4a6a49b49384476ab1fa", + "serverIPAddress": "[2606:50c0:8002::153]", + "_serverPort": 443, + "_securityDetails": { + "protocol": "TLS 1.3", + "subjectName": "demo.playwright.dev", + "issuer": "R3", + "validFrom": 1695585164, + "validTo": 1703361163 + } + }, + { + "startedDateTime": "2023-11-11T14:26:25.931Z", + "time": 78.333, + "request": { + "method": "GET", + "url": "https://playwright.dev/img/playwright-logo.svg", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": ":authority", "value": "playwright.dev" }, + { "name": ":method", "value": "GET" }, + { "name": ":path", "value": "/img/playwright-logo.svg" }, + { "name": ":scheme", "value": "https" }, + { "name": "accept", "value": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" }, + { "name": "accept-encoding", "value": "gzip, deflate, br" }, + { "name": "accept-language", "value": "en-GB,en;q=0.9" }, + { "name": "referer", "value": "https://demo.playwright.dev/" }, + { "name": "sec-ch-ua", "value": "\"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"" }, + { "name": "sec-ch-ua-mobile", "value": "?0" }, + { "name": "sec-ch-ua-platform", "value": "\"macOS\"" }, + { "name": "sec-fetch-dest", "value": "image" }, + { "name": "sec-fetch-mode", "value": "no-cors" }, + { "name": "sec-fetch-site", "value": "same-site" }, + { "name": "user-agent", "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" } + ], + "queryString": [], + "headersSize": 622, + "bodySize": 0 + }, + "response": { + "status": 200, + "statusText": "", + "httpVersion": "HTTP/2.0", + "cookies": [], + "headers": [ + { "name": "accept-ranges", "value": "bytes" }, + { "name": "access-control-allow-origin", "value": "*" }, + { "name": "age", "value": "173" }, + { "name": "cache-control", "value": "max-age=600" }, + { "name": "content-encoding", "value": "gzip" }, + { "name": "content-length", "value": "2117" }, + { "name": "content-type", "value": "image/svg+xml" }, + { "name": "date", "value": "Sat, 11 Nov 2023 14:26:26 GMT" }, + { "name": "etag", "value": "W/\"654cb375-13a9\"" }, + { "name": "expires", "value": "Thu, 09 Nov 2023 10:42:57 GMT" }, + { "name": "last-modified", "value": "Thu, 09 Nov 2023 10:24:53 GMT" }, + { "name": "server", "value": "GitHub.com" }, + { "name": "vary", "value": "Accept-Encoding" }, + { "name": "via", "value": "1.1 varnish" }, + { "name": "x-cache", "value": "HIT" }, + { "name": "x-cache-hits", "value": "1" }, + { "name": "x-fastly-request-id", "value": "175b260eaf4f0b88ecf7d989c4328f1331973335" }, + { "name": "x-github-request-id", "value": "DF8A:06A9:7772B24:797E096:654CB559" }, + { "name": "x-origin-cache", "value": "HIT" }, + { "name": "x-proxy-cache", "value": "MISS" }, + { "name": "x-served-by", "value": "cache-fra-etou8220032-FRA" }, + { "name": "x-timer", "value": "S1699712786.029684,VS0,VE2" } + ], + "content": { + "size": 5033, + "mimeType": "image/svg+xml", + "compression": 2522, + "text": "\n\n\n\n\n\n\n\n\n" + }, + "headersSize": 0, + "bodySize": 2511, + "redirectURL": "", + "_transferSize": 2511 + }, + "cache": {}, + "timings": { "dns": 0.009, "connect": 37.375, "ssl": 20.575, "send": 0, "wait": 19.887, "receive": 0.487 }, + "pageref": "page@636ec8b031ed4a6a49b49384476ab1fa", + "serverIPAddress": "185.199.110.153", + "_serverPort": 443, + "_securityDetails": { + "protocol": "TLS 1.3", + "subjectName": "playwright.dev", + "issuer": "R3", + "validFrom": 1695062500, + "validTo": 1702838499 + } + } + ] + } +} diff --git a/test/helper/Playwright_test.js b/test/helper/Playwright_test.js index c490b4b45..f435fc852 100644 --- a/test/helper/Playwright_test.js +++ b/test/helper/Playwright_test.js @@ -1578,3 +1578,48 @@ describe('Playwright - Video & Trace', () => { expect(test.artifacts.trace).to.include(path.join(global.output_dir, 'trace')); }); }); +describe('Playwright - HAR', () => { + before(() => { + global.codecept_dir = path.join(process.cwd()); + + I = new Playwright({ + url: siteUrl, + windowSize: '500x700', + show: false, + restart: true, + browser: 'chromium', + }); + I._init(); + return I._beforeSuite(); + }); + + beforeEach(async () => { + webApiTests.init({ + I, siteUrl, + }); + return I._before().then(() => { + page = I.page; + browser = I.browser; + }); + }); + + afterEach(async () => { + return I._after(); + }); + + it('replay from HAR - non existing file', async () => { + try { + await I.replayFromHar('./non-existing-file.har'); + await I.amOnPage('https://demo.playwright.dev/api-mocking'); + } catch (e) { + expect(e.message).to.include('cannot be found on local system'); + } + }); + + it('replay from HAR', async () => { + const harFile = './test/data/sandbox/testHar.har'; + await I.replayFromHar(harFile); + await I.amOnPage('https://demo.playwright.dev/api-mocking'); + await I.see('CodeceptJS'); + }); +});