5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/wix-cms-nextjs-template.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | registry=https://registry.npmjs.org
2 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 18
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | semi: true,
3 | onTrailingComma: true,
4 | singleQuote: true,
5 | };
6 |
--------------------------------------------------------------------------------
/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | yarnPath: .yarn/releases/yarn-3.3.0.cjs
2 |
3 | nodeLinker: node-modules
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Wix.com
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # A Wix CMS Next.js Education Template
2 |
3 | 
4 |
5 | This template is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). It uses [Wix Headless](https://dev.wix.com/api/sdk/about-wix-headless/overview) to leverage the Wix CMS business solution for managing the content on an education site.
6 |
7 | ## Local Development
8 |
9 | Prerequisites:
10 |
11 | 1. [Create a Wix Headless project](https://dev.wix.com/docs/go-headless/getting-started/setup/general-setup/create-a-project)
12 | 2. [Add the Content Manager app to your project](https://dev.wix.com/docs/go-headless/getting-started/setup/general-setup/add-apps-to-a-project)
13 | 3. Authorize the template with [quick start deployment](https://manage.wix.com/headless-funnel-nextjs/select-platform?templateName=cms) or by [creating an OAuth app](https://dev.wix.com/docs/go-headless/getting-started/setup/authorization/create-an-o-auth-app-for-visitors-and-members)
14 |
15 | Set up environment variables to consume Wix Headless APIs:
16 |
17 | 1. In the template's root folder, create a file for the local environment variables:
18 | ```sh
19 | cp .env.template .env.local.
20 | ```
21 | 2. In the new **.env.local** file, paste the OAuth app client ID after `NEXT_PUBLIC_WIX_CLIENT_ID=`.
22 |
23 | Run the development server:
24 |
25 | 1. Run either:
26 |
27 | ```sh
28 | yarn dev
29 | ```
30 |
31 | or
32 |
33 | ```sh
34 | npm i
35 | npm run dev
36 | ```
37 |
38 | 2. Open http://localhost:3000 in your browser to see the template home page.
39 |
40 | Edit the template:
41 |
42 | - Start editing the homepage by modifying **app/page.tsx**. The page auto-updates as you edit the file.
43 | - Edit any other page using the pattern **app/page.tsx**. For more information, see [Defining Routes](https://beta.nextjs.org/docs/routing/defining-routes) in the Next.js documentation.
44 |
45 | # Deployment
46 |
47 | You can deploy this repository using any platform which supports Next.js Version 13 and [App Router](https://nextjs.org/docs/app).
48 |
49 | The repository requires a single environment variable: `NEXT_PUBLIC_WIX_CLIENT_ID`, which should contain a client ID authorizing access to a Wix project's data.
50 |
51 | # Learn More
52 |
53 | To learn how to customize the template and add more functionality using Wix APIs, see the [Wix JavaScript SDK reference](https://dev.wix.com/api/sdk).
54 |
55 | This template is written in [Next.js](https://nextjs.org/docs) 13 using the [Next.js App Router](https://nextjs.org/docs/app).
56 |
57 | To learn more about Next.js, see:
58 |
59 | - [Next.js documentation](https://nextjs.org/docs): Learn about Next.js features and APIs.
60 | - [Learn Next.js](https://nextjs.org/learn): An interactive Next.js tutorial.
61 |
62 | Additionally, this template uses the following libraries and features:
63 |
64 | - [React Server Components](https://nextjs.org/docs/advanced-features/react-18/server-components)
65 | - [TypeScript](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-9.html)
66 | - [TanStack Query v4](https://tanstack.com/query/latest)
67 | - [Tailwind CSS](https://tailwindcss.com/)
68 | - [Flowbite](https://flowbite.com/)
69 | - [Wix client SDK](https://dev.wix.com/api/sdk/introduction)
70 |
71 | # Next.js and Wix Integration Guide
72 |
73 | See the comprehensive [integration guide](./docs/integration-guide.md) for step-by-step instructions on how to configure Wix as your headless Booking solution using Next.js on Vercel.
74 |
--------------------------------------------------------------------------------
/app/about/page.tsx:
--------------------------------------------------------------------------------
1 | import { WixMediaImage } from '@app/components/Image/WixMediaImage';
2 | export default async function About() {
3 | return (
4 |
5 |
6 |
13 |
14 |
15 |
About ChoosEquality
16 |
17 | ChoosEquality is a non-profit organization that aims to bring
18 | education to everyone, regardless of age, background, or location. We
19 | believe that education is a human right and a powerful force for
20 | positive change in the world. We provide training, tools, resources,
21 | and support to help schools achieve their educational goals and
22 | aspirations. We also advocate for policies and reforms that promote
23 | quality education for all.
24 |
25 |
26 | We envision a world where everyone has the opportunity to learn, grow,
27 | and thrive. Our mission is to empower people and communities with the
28 | knowledge and skills they need to create a better future for
29 | themselves and others.
30 |
31 |
32 | We are ChoosEquality and we invite you to join us in making a
33 | difference.
34 |
82 |
145 |
146 | Increase donations equally across 24 countries
147 |
148 |
149 |
150 |
258 |
259 | Help more children and teens graduate from high school
260 |
261 |
262 |
263 |
264 |
265 | );
266 | }
267 |
--------------------------------------------------------------------------------
/app/components/Carousel/Carousel.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 | import { Carousel } from 'flowbite-react';
3 |
4 | export const CarouselClient = () => {
5 | const texts = [
6 | '“I have been volunteering with ChoosEquality for over a year now and I can say that it has been a rewarding and meaningful experience.”',
7 | '“ChoosEquality is a movement that is transforming education for the better. I am proud to be part of it and I encourage anyone who cares about education to join us.”',
8 | '“I have also seen the positive impact that ChoosEquality has on the kids and the schools they work with.”',
9 | ];
10 |
11 | return (
12 |
38 | Page not available. Please add an environment variable called
39 | NEXT_PUBLIC_WIX_CLIENT_ID, containing the client ID, to your
40 | deployment provider.
41 |
51 | Our initiatives bring people together to help solve real problems
52 | and evoke a positive change. Explore our initiatives and see what
53 | you can do to help.
54 |
76 | We believe that education is a human right and a powerful tool for
77 | social change. We provide educational projects, learning resources
78 | and mentoring programs for kids of all ages and backgrounds. We
79 | aim to create a world where everyone has the opportunity to learn
80 | and grow.
81 |
121 | We welcome contributions in whatever form they come. Whether you
122 | want to contribute your time as a volunteer, join us as a partner
123 | or donate resources towards helping us achieve our goals, there is
124 | always an opportunity to make a difference.
125 |
27 | At ChoosEquality, we are always working on projects to improve the
28 | quality and accessibility of education for everyone. Take a look at
29 | some of our current and past projects.
30 |
24 | ChoosEquality is more than an organization. It is a family of
25 | passionate and dedicated people who share a common vision and mission
26 | of improving education for everyone. Meet some of our amazing team
27 | members below and learn more about their roles and stories.
28 |
29 |
33 | {team!.map((item) => (
34 |
35 |
36 |
41 |
42 |
43 |
{item.name}
44 |
{item.about}
45 | {item.email}
46 |
47 |
48 | ))}
49 |
50 |
51 | Our Volunteers
52 |
53 |
54 | ChoosEquality is powered by the passion and dedication of our
55 | volunteers, who are the heart and soul of our organization. Our
56 | volunteers are people from all walks of life, who share our vision and
57 | mission of improving education for everyone.
58 |
59 |
60 | {volunteers!.map((item) => (
61 |
62 |
63 |
64 | {item.name}
65 |
66 |
{item.about}
67 | {item.email}
68 |
69 |
70 | ))}
71 |
72 |
73 |
74 | );
75 | }
76 |
--------------------------------------------------------------------------------
/app/utils/date-formatter.ts:
--------------------------------------------------------------------------------
1 | const LOCALE = 'en-US';
2 |
3 | export function formatDate(date: Date): string {
4 | return Intl.DateTimeFormat(LOCALE, {
5 | month: 'short',
6 | day: 'numeric',
7 | year: 'numeric',
8 | }).format(date);
9 | }
10 |
--------------------------------------------------------------------------------
/app/utils/test-ids.ts:
--------------------------------------------------------------------------------
1 | const ids = {
2 | LAYOUT: {
3 | HEADER: 'page.header',
4 | FOOTER: 'page.footer',
5 | },
6 | HOME_PAGE: {
7 | HIGHLIGHTS: 'home.section.highlights',
8 | OUR_INITIATIVES_CTA: 'home.initiatives.cta',
9 | },
10 | PROJECTS_PAGE: {
11 | HEADER: 'projects-page.header',
12 | PROJECT_LIST: 'projects-page.project-list',
13 | PROJECT_ITEM_CONTAINER: 'projects-page.project-item.container',
14 | PROJECT_ITEM_CTA: 'projects-page.project-item.cta',
15 | },
16 | PROJECT_DETAILS_PAGE: {
17 | CONTAINER: 'project-details-page.container',
18 | },
19 | TEAM_PAGE: {
20 | CONTAINER: 'team-page.container',
21 | TEAM_MEMBERS: 'team-page.team-members',
22 | },
23 | NEWS_PAGE: {
24 | HEADER: 'news-page.header',
25 | NEWS_LIST: 'news-page.news-list',
26 | NEWS_ITEM_CONTAINER: 'news-page.news-item.container',
27 | NEWS_ITEM_CTA: 'news-page.news-item.cta',
28 | },
29 | NEWS_DETAILS_PAGE: {
30 | CONTAINER: 'news-details-page.container',
31 | },
32 | };
33 |
34 | export default ids;
35 |
--------------------------------------------------------------------------------
/docs/integration-guide.md:
--------------------------------------------------------------------------------
1 |
2 | [](https://manage.wix.com/headless-funnel-nextjs/netlify?repository=https://github.com/wix/wix-cms-nextjs-template) [](https://vercel.com/new/clone?integration-ids=oac_LZ0wUqGylqzgr8bE8a1R7JTE&skippable-integrations=1&build-command=yarn+build&deploymentIds=dpl_9Gtegfcme9RUmTXFvVGrP8BwDGUV&s=https%3A%2F%2Fgithub.com%2Fwix%2Fwix-cms-nextjs-template&demo-image=%2F%2Fgithub.com%2Fwix%2Fwix-cms-nextjs-template%2Fraw%2Fmain%2Fdocs%2Fmedia%2Ftemplate-showcase.gif&external-id=%7B%22repo%22%3A%22https%3A%2F%2Fgithub.com%2Fwix%2Fwix-cms-nextjs-template%22%2C%22referralInfo%22%3A%22repo-readme_education%22%7D&demo-title=Education+Starter&demo-description=Education+starter+template+with+Wix%E2%80%99s+Content+Management+solution.&demo-url=https%3A%2F%2Fvercel.cms-demo.wix.dev&repository-name=wix-cms-nextjs-template&referralInfo=repo-readme_education)
3 |
4 | # A Wix Data Next.js Education Template
5 |
6 | 
7 |
8 | This template is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). It uses [Wix Headless](https://dev.wix.com/api/sdk/about-wix-headless/overview) to leverage the Wix CMS business solution for managing the content on an education site.
9 |
10 | ## Part I: Get started
11 |
12 | To integrate the Wix Content Manager business solution with the template, first create and set up a project on Wix:
13 |
14 | ### Step 1: Create a project on Wix
15 |
16 | Create a [new Wix Headless project](https://www.wix.com/intro/headless?ref=netlify_github_education). For instructions on creating a Wix project, see [Create a Wix Headless Project](https://dev.wix.com/docs/go-headless/getting-started/setup/general-setup/create-a-project).
17 |
18 | When prompted to add functionalities to your new project, you don't need to select any business solutions, since every Wix Headless project includes CMS support:
19 |
20 | 
21 |
22 | If needed, you can add business solutions to your project later. See [Add Apps to a Project](https://dev.wix.com/docs/go-headless/getting-started/setup/general-setup/add-apps-to-a-project).
23 |
24 | ### Step 2: Set up the Wix business solutions you need
25 |
26 | In the project [dashboard](https://www.wix.com/my-account/site-selector/?buttonText=Select%20Site&title=Select%20a%20Site&autoSelectOnSingleSite=true&actionUrl=https:%2F%2Fwww.wix.com%2Fdashboard%2F%7B%7BmetaSiteId%7D%7D%2Fhome), click **Content Manager** in the sidebar menu to access the Content Manager.
27 |
28 | For information on creating and managing collections, see [Getting Started with the Content Manager](https://support.wix.com/en/article/about-the-content-manager-7160473).
29 |
30 | ### Step 3: Authorize the template
31 |
32 | There are 2 ways to authorize the template to access your Wix project:
33 |
34 | + [Option A: Quick start deployment](#option-a-quick-start-deployment).
35 | + [Option B: Create an OAuth client ID in the Wix dashboard](#option-b-create-an-oauth-client-id-in-the-wix-dashboard).
36 |
37 | #### Option A: Quick start deployment
38 |
39 | Click the quick start deployment link below to automatically authorize your template and configure your project. You'll be prompted to log in to your Wix account and to authorize the platform to access your project or site.
40 |
41 | Authentication credentials are automatically incorporated into the template, making it easy to get started coding and customizing.
42 |
43 | ---
44 |
45 | ##### Netlify
46 | [](https://app.netlify.com/sites/wix-cms-nextjs-template/deploys)
47 |
48 | [](https://manage.wix.com/headless-funnel-nextjs/netlify?repository=https://github.com/wix/wix-cms-nextjs-template)
49 |
50 |
51 | For more information, see [How to Deploy Next.js Sites to Netlify](https://www.netlify.com/blog/2020/11/30/how-to-deploy-next.js-sites-to-netlify/).
52 |
53 | You can also view our [live demo site](https://netlify.cms-demo.wix.dev/).
54 |
55 | ---
56 |
57 | ##### Vercel
58 | 
59 |
60 | [](https://vercel.com/new/clone?integration-ids=oac_LZ0wUqGylqzgr8bE8a1R7JTE&skippable-integrations=1&build-command=yarn+build&deploymentIds=dpl_9Gtegfcme9RUmTXFvVGrP8BwDGUV&s=https%3A%2F%2Fgithub.com%2Fwix%2Fwix-cms-nextjs-template&demo-image=%2F%2Fgithub.com%2Fwix%2Fwix-cms-nextjs-template%2Fraw%2Fmain%2Fdocs%2Fmedia%2Ftemplate-showcase.gif&external-id=%7B%22repo%22%3A%22https%3A%2F%2Fgithub.com%2Fwix%2Fwix-cms-nextjs-template%22%2C%22referralInfo%22%3A%22repo-readme_education%22%7D&demo-title=Education+Starter&demo-description=Education+starter+template+with+Wix%E2%80%99s+Content+Management+solution.&demo-url=https%3A%2F%2Fvercel.cms-demo.wix.dev&repository-name=wix-cms-nextjs-template&referralInfo=repo-readme_education)
61 |
62 | For more information, see [How to Deploy Next.js Sites to Vercel](https://vercel.com/docs/frameworks/nextjs).
63 |
64 | You can also view our [live demo site](https://vercel.cms-demo.wix.dev/).
65 |
66 | ---
67 |
68 | #### Option B: Create an OAuth client ID in the Wix dashboard
69 |
70 | If you don't want to use quick-start deployment, begin by forking this repo to your git account.
71 |
72 | Read [Set Up Authorization](https://dev.wix.com/api/sdk/auth:-headless-visitors/authorization:-create-an-oauth-app) in the Wix SDK documentation for instructions on how to manually create an OAuth app and generate a client ID in the [Headless Settings](https://www.wix.com/my-account/site-selector/?buttonText=Select%20Site&title=Select%20a%20Site&autoSelectOnSingleSite=true&actionUrl=https:%2F%2Fwww.wix.com%2Fdashboard%2F%7B%7BmetaSiteId%7D%7D%2Foauth-apps-settings) menu of the Wix dashboard.
73 |
74 | After creating an OAuth app, store the Client ID in a secure location.
75 |
76 | > **Note:** Do not push the client ID to your source control.
77 |
78 | To set up environment variables for consuming Wix Headless APIs, follow these steps:
79 |
80 | ##### Local development environment
81 |
82 | 1. At the terminal, in the template's root folder, type `cp .env.template .env.local`.
83 | 2. In the new `.env.local` file, paste the client ID after `NEXT_PUBLIC_WIX_CLIENT_ID=`.
84 |
85 | ##### Production environment
86 |
87 | In your deployment provider, add an environment variable called `NEXT_PUBLIC_WIX_CLIENT_ID` containing the client ID.
88 |
89 | ## Part II: Local Development
90 |
91 | Once you’ve [authorized and configured](#part-i-get-started) your client, run the development server:
92 |
93 | ```shell
94 | yarn
95 | yarn dev
96 | ```
97 |
98 | or
99 |
100 | ```shell
101 | npm i
102 | npm run dev
103 | ```
104 |
105 | Open http://localhost:3000 with your browser to see the template home page.
106 |
107 | You can start editing the homepage by modifying `app/page.tsx`. The page auto-updates as you edit the file.
108 |
109 | Similarly, you can edit any other page on the pattern `app//page.tsx`. For more information, see [Defining Routes](https://beta.nextjs.org/docs/routing/defining-routes) in the Next.js documentation.
110 |
111 | ## Part III: Learn more about the tech stack
112 |
113 | To learn how to customize the template and add more functionality using Wix APIs, see the [Wix JavaScript SDK reference documentation](https://dev.wix.com/api/sdk).
114 |
115 | This template is written in [Next.js](https://nextjs.org/docs) 13 using [Next.js app directory](https://beta.nextjs.org/docs/app-directory-roadmap). To learn more about `Next.js`, see the following resources:
116 |
117 | + [Next.js documentation](https://nextjs.org/docs): Learn about Next.js features and APIs.
118 | + [Learn Next.js](https://nextjs.org/learn): An interactive Next.js tutorial.
119 | + [Next.js app directory](https://beta.nextjs.org/docs/app-directory-roadmap): Information on the Next.js App Router Roadmap.
120 |
121 | Additionally, this template uses the following libraries and features:
122 | + [React Server Components](https://nextjs.org/docs/advanced-features/react-18/server-components)
123 | + [TypeScript](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-9.html)
124 | + [TanStack Query v4](https://tanstack.com/query/latest)
125 | + [Tailwind CSS](https://tailwindcss.com/)
126 | + [Flowbite](https://flowbite.com/)
127 | + [Wix client SDK](https://dev.wix.com/api/sdk/introduction)
128 |
129 | ## Part IV: Deployment
130 |
131 | You can deploy this repository using any platform which supports Next.js Version 13 and the [App Router Roadmap](https://beta.nextjs.org/docs/app-directory-roadmap).
132 |
133 | The repository only requires a single environment variable: `NEXT_PUBLIC_WIX_CLIENT_ID`, which should contain a client ID authorizing access to a Wix project's data.
134 |
135 | ## Part V :Package dependency management
136 |
137 | To ensure this repo always uses the latest APIs from the Wix JavaScript SDK, the repo is preconfigured with [Dependabot](https://docs.github.com/en/code-security/dependabot), GitHub's automated dependency management system. Due to the numerous pull requests generated by Dependabot, the repo also includes a preconfigured GitHub Action called "Combine PRs." This action can be executed manually to merge all of Dependabot's pull requests into a single PR, allowing for sanity checks to be performed only once. If the sanity check fails, each Dependabot PR can be inspected individually.
138 |
139 | ## Part VII :Testing
140 |
141 | This repo is preconfigured with [Playwright](https://playwright.dev/) for both functional and UI (screenshots) testing.
142 | It contains GitHub actions (for PRs) for both Netlify: [netlify-e2e.yml](../.github/workflows/netlify-e2e.yml) and Vercel: [vercel-e2e.yml](../.github/workflows/vercel-e2e.yml).
143 |
144 | Feel free to delete the one you are not using.
145 | **Note**: there is a `# TODO: change to your site name` in both `YAML` files, please change the site name to the actual site name in the relevant deployment platform
146 |
147 | ### Screenshot Testing
148 | This repo includes the screenshots to validate the initial site provided by this repo. Obviously, changing it to your needs would break these tests.
149 | To update the screenshots simply delete the failing ones under [location](../tests/e2e/__screenshots__), create a pull request and let the PR build fail, then head to `Netlify E2E / netlify-e2e`/`Vercel E2E / vercel-e2e` status checks, and under `Summary`, the screenshots generated by Playwright are available to download and update in the folder [location](../tests/e2e/__screenshots__)
150 |
151 | 
152 |
--------------------------------------------------------------------------------
/docs/media/github-action.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/docs/media/github-action.png
--------------------------------------------------------------------------------
/docs/media/project-business-solutions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/docs/media/project-business-solutions.png
--------------------------------------------------------------------------------
/docs/media/template-showcase.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/docs/media/template-showcase.gif
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | command = "npm run build"
3 | publish = ".next"
4 |
5 | [[plugins]]
6 | package = "@netlify/plugin-nextjs"
7 |
8 | [template]
9 | incoming-hooks = ["WixData"]
10 |
11 | [template.environment]
12 | NEXT_PUBLIC_WIX_CLIENT_ID = "Wix Headless Client ID"
13 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | env: {},
4 | reactStrictMode: true,
5 | swcMinify: true,
6 | experimental: {},
7 | eslint: {
8 | dirs: ['app'],
9 | },
10 | images: {
11 | domains: ['static.wixstatic.com'],
12 | formats: ['image/webp'],
13 | },
14 | };
15 |
16 | module.exports = nextConfig;
17 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "wix-cms-nextjs-template",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "debug": "NODE_OPTIONS='--inspect' next dev -p 3005",
8 | "test": "yarn e2e",
9 | "e2e": "yarn playwright test",
10 | "build": "next build",
11 | "start": "next start",
12 | "lint": "next lint --fix"
13 | },
14 | "dependencies": {
15 | "@netlify/plugin-nextjs": "^4.36.0",
16 | "@wix/data": "^1.0.47",
17 | "@wix/sdk": "^1.5.0",
18 | "flowbite": "^1.5.4",
19 | "flowbite-react": "^0.4.4",
20 | "next": "^13.4.9",
21 | "react": "^18.2.0",
22 | "react-dom": "^18.2.0"
23 | },
24 | "devDependencies": {
25 | "@playwright/test": "^1.34.3",
26 | "@types/node": "18.11.8",
27 | "@types/react": "18.0.24",
28 | "@types/react-dom": "18.0.8",
29 | "autoprefixer": "^10.4.13",
30 | "eslint": "^8.28.0",
31 | "eslint-config-next": "^13.4.9",
32 | "eslint-config-prettier": "^8.5.0",
33 | "eslint-plugin-prettier": "^4.2.1",
34 | "postcss": "^8.4.19",
35 | "prettier": "^2.8.0",
36 | "tailwindcss": "^3.2.4",
37 | "typescript": "4.8.4"
38 | },
39 | "packageManager": "yarn@3.3.0"
40 | }
41 |
--------------------------------------------------------------------------------
/playwright-report/data/1a3fd942def58d8d73864ce612fa28c115afab77.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/data/1a3fd942def58d8d73864ce612fa28c115afab77.zip
--------------------------------------------------------------------------------
/playwright-report/data/1fe778f5639b60ef8f99c73d7c7c3909cb8034c8.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/data/1fe778f5639b60ef8f99c73d7c7c3909cb8034c8.zip
--------------------------------------------------------------------------------
/playwright-report/data/a42cc3bd0ac361d776de26b7a531a407c1a51b04.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/data/a42cc3bd0ac361d776de26b7a531a407c1a51b04.zip
--------------------------------------------------------------------------------
/playwright-report/data/b4e27ae71faa27fc78306c45d2ed3c699c04c138.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/data/b4e27ae71faa27fc78306c45d2ed3c699c04c138.zip
--------------------------------------------------------------------------------
/playwright-report/data/ded07751d8c7bb32d1c9c6b50a34ee472b83c2a3.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/data/ded07751d8c7bb32d1c9c6b50a34ee472b83c2a3.zip
--------------------------------------------------------------------------------
/playwright-report/data/ebee76e04f9a0fbacd8dac22341b51cb0051f55c.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/data/ebee76e04f9a0fbacd8dac22341b51cb0051f55c.zip
--------------------------------------------------------------------------------
/playwright-report/data/f65bb65740e2c310db6ccf5249dd53a7036bd0c8.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/data/f65bb65740e2c310db6ccf5249dd53a7036bd0c8.zip
--------------------------------------------------------------------------------
/playwright-report/trace/codeMirrorModule.5d0f417c.css:
--------------------------------------------------------------------------------
1 | .CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error,.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors,.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}
2 |
--------------------------------------------------------------------------------
/playwright-report/trace/codicon.dcd00fb4.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/trace/codicon.dcd00fb4.ttf
--------------------------------------------------------------------------------
/playwright-report/trace/icon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/trace/icon-16x16.png
--------------------------------------------------------------------------------
/playwright-report/trace/icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/trace/icon-192x192.png
--------------------------------------------------------------------------------
/playwright-report/trace/icon-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/trace/icon-256x256.png
--------------------------------------------------------------------------------
/playwright-report/trace/icon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/trace/icon-32x32.png
--------------------------------------------------------------------------------
/playwright-report/trace/icon-384x384.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/trace/icon-384x384.png
--------------------------------------------------------------------------------
/playwright-report/trace/icon-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/playwright-report/trace/icon-512x512.png
--------------------------------------------------------------------------------
/playwright-report/trace/index.3960872c.js:
--------------------------------------------------------------------------------
1 | import{M as E,r as a,c as x,j as c,a as t,T as M,t as C,W as j,b as F,d as O}from"./assets/wsPort-fb5048bf.js";const I=()=>{const[l,P]=a.useState(!1),[d,h]=a.useState([]),[p,W]=a.useState([]),[f,N]=a.useState(L),[m,v]=a.useState({done:0,total:0}),[b,u]=a.useState(!1),[S,w]=a.useState(null),[y,U]=a.useState(null),g=a.useCallback(e=>{const o=[],s=[],r=new URL(window.location.href);for(let i=0;i{e.preventDefault(),g(e.dataTransfer.files)},[g]),R=a.useCallback(e=>{e.preventDefault(),e.target.files&&g(e.target.files)},[g]);return a.useEffect(()=>{const e=new URL(window.location.href).searchParams,o=e.getAll("trace");P(e.has("isServer"));for(const s of o)if(s.startsWith("file:")){U(s||null);return}e.has("isServer")?x({onEvent(s,r){s==="loadTrace"&&(h(r.url?[r.url]:[]),u(!1),w(null))},onClose(){}}).then(s=>{s("ready")}):o.some(s=>s.startsWith("blob:"))||h(o)},[]),a.useEffect(()=>{(async()=>{if(d.length){const e=r=>{r.data.method==="progress"&&v(r.data.params)};navigator.serviceWorker.addEventListener("message",e),v({done:0,total:1});const o=[];for(let r=0;r{e.preventDefault(),u(!0)},children:[c("div",{className:"hbox header",children:[t("div",{className:"logo",children:"🎭"}),t("div",{className:"product",children:"Playwright"}),f.title&&t("div",{className:"title",children:f.title}),t("div",{className:"spacer"}),t(M,{icon:"color-mode",title:"Toggle color mode",toggled:!1,onClick:()=>C()})]}),t("div",{className:"progress",children:t("div",{className:"inner-progress",style:{width:m.total?100*m.done/m.total+"%":0}})}),t(j,{model:f}),y&&c("div",{className:"drop-target",children:[t("div",{children:"Trace Viewer uses Service Workers to show traces. To view trace:"}),c("div",{style:{paddingTop:20},children:[c("div",{children:["1. Click ",t("a",{href:y,children:"here"})," to put your trace into the download shelf"]}),c("div",{children:["2. Go to ",t("a",{href:"https://trace.playwright.dev",children:"trace.playwright.dev"})]}),t("div",{children:"3. Drop the trace from the download shelf into the page"})]})]}),!l&&!b&&!y&&(!d.length||S)&&c("div",{className:"drop-target",children:[t("div",{className:"processing-error",children:S}),t("div",{className:"title",children:"Drop Playwright Trace to load"}),t("div",{children:"or"}),t("button",{onClick:()=>{const e=document.createElement("input");e.type="file",e.multiple=!0,e.click(),e.addEventListener("change",o=>R(o))},children:"Select file(s)"}),t("div",{style:{maxWidth:400},children:"Playwright Trace Viewer is a Progressive Web App, it does not send your trace anywhere, it opens it locally."})]}),l&&!d.length&&t("div",{className:"drop-target",children:t("div",{className:"title",children:"Select test to see the trace"})}),b&&t("div",{className:"drop-target",onDragLeave:()=>{u(!1)},onDrop:e=>D(e),children:t("div",{className:"title",children:"Release to analyse the Playwright Trace"})})]})},L=new E([]);(async()=>(F(),window.location.protocol!=="file:"&&(window.location.href.includes("isUnderTest=true")&&await new Promise(l=>setTimeout(l,1e3)),navigator.serviceWorker.register("sw.bundle.js"),navigator.serviceWorker.controller||await new Promise(l=>{navigator.serviceWorker.oncontrollerchange=()=>l()}),setInterval(function(){fetch("ping")},1e4)),O.render(t(I,{}),document.querySelector("#root"))))();
2 |
--------------------------------------------------------------------------------
/playwright-report/trace/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Playwright Trace Viewer
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
22 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/playwright-report/trace/popout.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/playwright-report/trace/uiMode.6f708c89.js:
--------------------------------------------------------------------------------
1 | import{u as ve,r as A,e as Se,_ as be,f as we,g as _e,a as p,R as g,h as ke,c as Te,s as de,j as E,S as Ee,i as Q,T as M,t as xe,E as Ce,m as ye,k as ae,W as Me,M as Re,l as Ne,b as Be,d as De}from"./assets/wsPort-fb5048bf.js";class Fe{constructor(e,t,s){this._tests=new Map,this._clearPreviousResultsWhenTestBegins=!1,this._rootSuite=new I("","root"),this._pathSeparator=e,this._reporter=t,this._reportConfig=s}dispatch(e){const{method:t,params:s}=e;if(t==="onBegin"){this._onBegin(s.config,s.projects);return}if(t==="onTestBegin"){this._onTestBegin(s.testId,s.result);return}if(t==="onTestEnd"){this._onTestEnd(s.test,s.result);return}if(t==="onStepBegin"){this._onStepBegin(s.testId,s.resultId,s.step);return}if(t==="onStepEnd"){this._onStepEnd(s.testId,s.resultId,s.step);return}if(t==="onError"){this._onError(s.error);return}if(t==="onStdIO"){this._onStdIO(s.type,s.testId,s.resultId,s.data,s.isBase64);return}if(t==="onEnd")return this._onEnd(s.result);if(t==="onExit")return this._onExit()}_setClearPreviousResultsWhenTestBegins(){this._clearPreviousResultsWhenTestBegins=!0}_onBegin(e,t){var s,n,r;this._rootDir=((s=this._reportConfig)==null?void 0:s.rootDir)||e.rootDir;for(const o of t){let c=this._rootSuite.suites.find(h=>h.project().id===o.id);c||(c=new I(o.name,"project"),this._rootSuite.suites.push(c),c.parent=this._rootSuite);const d=this._parseProject(o);if(c.project=()=>d,this._mergeSuitesInto(o.suites,c),e.listOnly){const h=new Set,u=f=>{f.tests.map(a=>a.testId).forEach(a=>h.add(a)),f.suites.forEach(u)};o.suites.forEach(u);const m=f=>{f.tests=f.tests.filter(a=>h.has(a.id)),f.suites.forEach(m)};m(c)}}(r=(n=this._reporter).onBegin)==null||r.call(n,this._parseConfig(e),this._rootSuite)}_onTestBegin(e,t){var r,o;const s=this._tests.get(e);this._clearPreviousResultsWhenTestBegins&&s._clearResults();const n=s._createTestResult(t.id);n.retry=t.retry,n.workerIndex=t.workerIndex,n.parallelIndex=t.parallelIndex,n.startTime=new Date(t.startTime),n.statusEx="running",(o=(r=this._reporter).onTestBegin)==null||o.call(r,s,n)}_onTestEnd(e,t){var r,o;const s=this._tests.get(e.testId);s.timeout=e.timeout,s.expectedStatus=e.expectedStatus,s.annotations=e.annotations;const n=s.resultsMap.get(t.id);n.duration=t.duration,n.status=t.status,n.statusEx=t.status,n.errors=t.errors,n.attachments=t.attachments,(o=(r=this._reporter).onTestEnd)==null||o.call(r,s,n)}_onStepBegin(e,t,s){var d,h;const n=this._tests.get(e),r=n.resultsMap.get(t),o=s.parentStepId?r.stepMap.get(s.parentStepId):void 0,c={titlePath:()=>[],title:s.title,category:s.category,location:this._absoluteLocation(s.location),parent:o,startTime:new Date(s.startTime),duration:0,steps:[]};o?o.steps.push(c):r.steps.push(c),r.stepMap.set(s.id,c),(h=(d=this._reporter).onStepBegin)==null||h.call(d,n,r,c)}_onStepEnd(e,t,s){var c,d;const n=this._tests.get(e),r=n.resultsMap.get(t),o=r.stepMap.get(s.id);o.duration=s.duration,o.error=s.error,(d=(c=this._reporter).onStepEnd)==null||d.call(c,n,r,o)}_onError(e){var t,s;(s=(t=this._reporter).onError)==null||s.call(t,e)}_onStdIO(e,t,s,n,r){var h,u,m,f;const o=r?globalThis.Buffer?Buffer.from(n,"base64"):atob(n):n,c=t?this._tests.get(t):void 0,d=c&&s?c.resultsMap.get(s):void 0;e==="stdout"?(u=(h=this._reporter).onStdOut)==null||u.call(h,o,c,d):(f=(m=this._reporter).onStdErr)==null||f.call(m,o,c,d)}_onEnd(e){var t,s;return((s=(t=this._reporter).onEnd)==null?void 0:s.call(t,e))||void 0}_onExit(){var e,t;return(t=(e=this._reporter).onExit)==null?void 0:t.call(e)}_parseConfig(e){const t={...fe,...e};return this._reportConfig&&(t.configFile=this._reportConfig.configFile,t.rootDir=this._reportConfig.rootDir,t.reportSlowTests=this._reportConfig.reportSlowTests,t.quiet=this._reportConfig.quiet),t}_parseProject(e){return{id:e.id,metadata:e.metadata,name:e.name,outputDir:this._absolutePath(e.outputDir),repeatEach:e.repeatEach,retries:e.retries,testDir:this._absolutePath(e.testDir),testIgnore:J(e.testIgnore),testMatch:J(e.testMatch),timeout:e.timeout,grep:J(e.grep),grepInvert:J(e.grepInvert),dependencies:e.dependencies,teardown:e.teardown,snapshotDir:this._absolutePath(e.snapshotDir),use:{}}}_mergeSuitesInto(e,t){for(const s of e){let n=t.suites.find(r=>r.title===s.title);n||(n=new I(s.title,s.type),n.parent=t,t.suites.push(n)),n.location=this._absoluteLocation(s.location),n._fileId=s.fileId,n._parallelMode=s.parallelMode,this._mergeSuitesInto(s.suites,n),this._mergeTestsInto(s.tests,n)}}_mergeTestsInto(e,t){for(const s of e){let n=t.tests.find(r=>r.title===s.title);n||(n=new Le(s.testId,s.title,this._absoluteLocation(s.location)),n.parent=t,t.tests.push(n),this._tests.set(n.id,n)),this._updateTest(s,n)}}_updateTest(e,t){return t.id=e.testId,t.location=this._absoluteLocation(e.location),t.retries=e.retries,t}_absoluteLocation(e){return e&&{...e,file:this._absolutePath(e.file)}}_absolutePath(e){return e&&this._rootDir+this._pathSeparator+e}}class I{constructor(e,t){this._requireFile="",this.suites=[],this.tests=[],this._parallelMode="none",this.title=e,this._type=t}allTests(){const e=[],t=s=>{for(const n of[...s.suites,...s.tests])n instanceof I?t(n):e.push(n)};return t(this),e}titlePath(){const e=this.parent?this.parent.titlePath():[];return(this.title||this._type!=="describe")&&e.push(this.title),e}project(){}}class Le{constructor(e,t,s){this.fn=()=>{},this.results=[],this.expectedStatus="passed",this.timeout=0,this.annotations=[],this.retries=0,this.repeatEachIndex=0,this.resultsMap=new Map,this.id=e,this.title=t,this.location=s}titlePath(){const e=this.parent?this.parent.titlePath():[];return e.push(this.title),e}outcome(){const e=this.results.filter(t=>t.status!=="skipped"&&t.status!=="interrupted");return e.length?e.every(t=>t.status===this.expectedStatus)?"expected":e.some(t=>t.status===this.expectedStatus)?"flaky":"unexpected":"skipped"}ok(){const e=this.outcome();return e==="expected"||e==="flaky"||e==="skipped"}_clearResults(){this.results=[],this.resultsMap.clear()}_createTestResult(e){const t={retry:this.results.length,parallelIndex:-1,workerIndex:-1,duration:-1,startTime:new Date,stdout:[],stderr:[],attachments:[],status:"skipped",statusEx:"scheduled",steps:[],errors:[],stepMap:new Map};return this.results.push(t),this.resultsMap.set(e,t),t}}const fe={forbidOnly:!1,fullyParallel:!1,globalSetup:null,globalTeardown:null,globalTimeout:0,grep:/.*/,grepInvert:null,maxFailures:0,metadata:{},preserveOutput:"always",projects:[],reporter:[[{}.CI?"dot":"list"]],reportSlowTests:{max:5,threshold:15e3},configFile:"",rootDir:"",quiet:!1,shard:null,updateSnapshots:"missing",version:"",workers:0,webServer:null};function J(i){return i.map(e=>e.s?e.s:new RegExp(e.r.source,e.r.flags))}const Pe=({source:i})=>{const[e,t]=ve(),[s,n]=A.useState(Se()),[r]=A.useState(be(()=>import("./assets/xtermModule-443332e6.js"),["./assets/xtermModule-443332e6.js","./xtermModule.6428296b.css"],import.meta.url).then(c=>c.default)),o=A.useRef(null);return A.useEffect(()=>(we(n),()=>_e(n)),[]),A.useEffect(()=>{const c=i.write,d=i.clear;return(async()=>{const{Terminal:h,FitAddon:u}=await r,m=t.current;if(!m)return;const f=s==="dark-mode"?Oe:We;if(o.current&&o.current.terminal.options.theme===f)return;o.current&&(m.textContent="");const a=new h({convertEol:!0,fontSize:13,scrollback:1e4,fontFamily:"var(--vscode-editor-font-family)",theme:f}),v=new u;a.loadAddon(v);for(const b of i.pending)a.write(b);i.write=b=>{i.pending.push(b),a.write(b)},i.clear=()=>{i.pending=[],a.clear()},a.open(m),v.fit(),o.current={terminal:a,fitAddon:v}})(),()=>{i.clear=d,i.write=c}},[r,o,t,i,s]),A.useEffect(()=>{setTimeout(()=>{o.current&&(o.current.fitAddon.fit(),i.resize(o.current.terminal.cols,o.current.terminal.rows))},250)},[e,i]),p("div",{"data-testid":"output",className:"xterm-wrapper",style:{flex:"auto"},ref:t})},We={foreground:"#383a42",background:"#fafafa",cursor:"#383a42",black:"#000000",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a0a0",brightBlack:"#000000",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#d19a66",brightBlue:"#4078f2",brightMagenta:"#a626a4",brightCyan:"#0184bc",brightWhite:"#383a42",selectionBackground:"#d7d7d7",selectionForeground:"#383a42"},Oe={foreground:"#f8f8f2",background:"#1e1e1e",cursor:"#f8f8f0",black:"#000000",red:"#ff5555",green:"#50fa7b",yellow:"#f1fa8c",blue:"#bd93f9",magenta:"#ff79c6",cyan:"#8be9fd",white:"#bfbfbf",brightBlack:"#4d4d4d",brightRed:"#ff6e6e",brightGreen:"#69ff94",brightYellow:"#ffffa5",brightBlue:"#d6acff",brightMagenta:"#ff92df",brightCyan:"#a4ffff",brightWhite:"#e6e6e6",selectionBackground:"#44475a",selectionForeground:"#f8f8f2"};function je(i){return`.playwright-artifacts-${i}`}let oe=()=>{},he=i=>{},pe={cols:80,rows:24},H=async()=>{};const W={pending:[],clear:()=>{},write:i=>W.pending.push(i),resize:(i,e)=>{pe={cols:i,rows:e},q("resizeTerminal",{cols:i,rows:e})}},ze=({})=>{var le;const[i,e]=g.useState(""),[t,s]=g.useState(!1),[n,r]=g.useState(new Map([["passed",!1],["failed",!1],["skipped",!1]])),[o,c]=g.useState(new Map),[d,h]=g.useState({config:void 0,rootSuite:void 0,loadErrors:[]}),[u,m]=g.useState(),[f,a]=g.useState({}),[v,b]=g.useState(new Set),[k,C]=g.useState(!1),[y,N]=g.useState(),[R,Y]=ke("watch-all",!1),[ee,V]=g.useState({value:new Set}),l=g.useRef(Promise.resolve()),_=g.useRef(new Set),[S,w]=g.useState(0),[T,x]=g.useState(!1),te=g.useRef(null),se=g.useCallback(()=>{C(!0),V({value:new Set}),oe(fe,new I("","root"),[],void 0),ge(!0).then(()=>{C(!1)})},[]);g.useEffect(()=>{var D;(D=te.current)==null||D.focus(),C(!0),Te({onEvent:Ue,onClose:()=>x(!0)}).then(F=>{H=F,se()})},[se]),oe=g.useCallback((D,F,L,j)=>{const P=D.configFile?de.getObject(D.configFile+":projects",void 0):void 0;for(const B of o.keys())F.suites.find(X=>X.title===B)||o.delete(B);for(const B of F.suites)o.has(B.title)||o.set(B.title,!!(P!=null&&P.includes(B.title)));!P&&o.size&&![...o.values()].includes(!0)&&o.set(o.entries().next().value[0],!0),h({config:D,rootSuite:F,loadErrors:L}),c(new Map(o)),y&&j?m({...j,total:y.testIds.size}):j||m(void 0)},[o,y]);const ie=g.useCallback((D,F)=>{D==="bounce-if-busy"&&y||(_.current=new Set([..._.current,...F]),l.current=l.current.then(async()=>{var P,B,X;const L=_.current;if(_.current=new Set,!L.size)return;{for(const z of((P=d.rootSuite)==null?void 0:P.allTests())||[])L.has(z.id)&&(z._clearResults(),z._createTestResult("pending"));h({...d})}const j=" ["+new Date().toLocaleTimeString()+"]";W.write("\x1B[2m—".repeat(Math.max(0,pe.cols-j.length))+j+"\x1B[22m"),m({total:L.size,passed:0,failed:0,skipped:0}),N({testIds:L}),await H("run",{testIds:[...L]});for(const z of((B=d.rootSuite)==null?void 0:B.allTests())||[])((X=z.results[0])==null?void 0:X.duration)===-1&&z._clearResults();h({...d}),N(void 0)}))},[y,d]),O=!!y;return E("div",{className:"vbox ui-mode",children:[T&&p("div",{className:"drop-target",children:p("div",{className:"title",children:"Process disconnected"})}),E(Ee,{sidebarSize:250,orientation:"horizontal",sidebarIsFirst:!0,children:[E("div",{className:"vbox",children:[E("div",{className:"vbox"+(t?"":" hidden"),children:[E(Q,{children:[p("div",{className:"section-title",style:{flex:"none"},children:"Output"}),p(M,{icon:"circle-slash",title:"Clear output",onClick:()=>W.clear()}),p("div",{className:"spacer"}),p(M,{icon:"close",title:"Close",onClick:()=>s(!1)})]}),p(Pe,{source:W})]}),p("div",{className:"vbox"+(t?" hidden":""),children:p(Ke,{item:f,rootDir:(le=d.config)==null?void 0:le.rootDir})})]}),E("div",{className:"vbox ui-mode-sidebar",children:[E(Q,{noShadow:!0,noMinHeight:!0,children:[p("img",{src:"icon-32x32.png"}),p("div",{className:"section-title",children:"Playwright"}),p(M,{icon:"color-mode",title:"Toggle color mode",onClick:()=>xe()}),p(M,{icon:"refresh",title:"Reload",onClick:()=>se(),disabled:O||k}),p(M,{icon:"terminal",title:"Toggle output",toggled:t,onClick:()=>{s(!t)}})]}),p(Ae,{filterText:i,setFilterText:e,statusFilters:n,setStatusFilters:r,projectFilters:o,setProjectFilters:c,testModel:d,runTests:()=>ie("bounce-if-busy",v)}),E(Q,{noMinHeight:!0,children:[!O&&!u&&p("div",{className:"section-title",children:"Tests"}),!O&&u&&p("div",{"data-testid":"status-line",className:"status-line",children:E("div",{children:[u.passed,"/",u.total," passed (",u.passed/u.total*100|0,"%)"]})}),O&&u&&p("div",{"data-testid":"status-line",className:"status-line",children:E("div",{children:["Running ",u.passed,"/",y.testIds.size," passed (",u.passed/y.testIds.size*100|0,"%)"]})}),p(M,{icon:"play",title:"Run all",onClick:()=>ie("bounce-if-busy",v),disabled:O||k}),p(M,{icon:"debug-stop",title:"Stop",onClick:()=>q("stop"),disabled:!O||k}),p(M,{icon:"eye",title:"Watch all",toggled:R,onClick:()=>Y(!R)}),p(M,{icon:"collapse-all",title:"Collapse all",onClick:()=>{w(S+1)}})]}),p(Ve,{statusFilters:n,projectFilters:o,filterText:i,testModel:d,runningState:y,runTests:ie,onItemSelected:a,setVisibleTestIds:b,watchAll:R,watchedTreeIds:ee,setWatchedTreeIds:V,isLoading:k,requestedCollapseAllCount:S})]})]})]})},Ae=({filterText:i,setFilterText:e,statusFilters:t,setStatusFilters:s,projectFilters:n,setProjectFilters:r,testModel:o,runTests:c})=>{const[d,h]=g.useState(!1),u=g.useRef(null);g.useEffect(()=>{var a;(a=u.current)==null||a.focus()},[]);const m=[...t.entries()].filter(([a,v])=>v).map(([a])=>a).join(" ")||"all",f=[...n.entries()].filter(([a,v])=>v).map(([a])=>a).join(" ")||"all";return E("div",{className:"filters",children:[p(Ce,{expanded:d,setExpanded:h,title:p("input",{ref:u,type:"search",placeholder:"Filter (e.g. text, @tag)",spellCheck:!1,value:i,onChange:a=>{e(a.target.value)},onKeyDown:a=>{a.key==="Enter"&&c()}})}),E("div",{className:"filter-summary",title:"Status: "+m+`
2 | Projects: `+f,onClick:()=>h(!d),children:[p("span",{className:"filter-label",children:"Status:"})," ",m,p("span",{className:"filter-label",children:"Projects:"})," ",f]}),d&&E("div",{className:"hbox",style:{marginLeft:14},children:[p("div",{className:"filter-list",children:[...t.entries()].map(([a,v])=>p("div",{className:"filter-entry",children:E("label",{children:[p("input",{type:"checkbox",checked:v,onClick:()=>{const b=new Map(t);b.set(a,!b.get(a)),s(b)}}),p("div",{children:a})]})}))}),p("div",{className:"filter-list",children:[...n.entries()].map(([a,v])=>p("div",{className:"filter-entry",children:E("label",{children:[p("input",{type:"checkbox",checked:v,onClick:()=>{var C;const b=new Map(n);b.set(a,!b.get(a)),r(b);const k=(C=o==null?void 0:o.config)==null?void 0:C.configFile;k&&de.setObject(k+":projects",[...b.entries()].filter(([y,N])=>N).map(([y])=>y))}}),p("div",{children:a})]})}))})]})]})},Ie=Ne,Ve=({statusFilters:i,projectFilters:e,filterText:t,testModel:s,runTests:n,runningState:r,watchAll:o,watchedTreeIds:c,setWatchedTreeIds:d,isLoading:h,onItemSelected:u,setVisibleTestIds:m,requestedCollapseAllCount:f})=>{const[a,v]=g.useState({expandedItems:new Map}),[b,k]=g.useState(),[C,y]=g.useState(f),{rootItem:N,treeItemMap:R,fileNames:Y}=g.useMemo(()=>{let l=He(s.rootSuite,s.loadErrors,e);Ye(l,t,i,r==null?void 0:r.testIds),me(l),l=Xe(l),Je(l);const _=new Map,S=new Set,w=new Set,T=x=>{x.kind==="group"&&x.location.file&&w.add(x.location.file),x.kind==="case"&&x.tests.forEach(te=>S.add(te.id)),x.children.forEach(T),_.set(x.id,x)};return T(l),m(S),{rootItem:l,treeItemMap:_,fileNames:w}},[t,s,i,e,m,r]);g.useEffect(()=>{if(C!==f){a.expandedItems.clear();for(const S of R.keys())a.expandedItems.set(S,!1);y(f),k(void 0),v({...a});return}if(!r||r.itemSelectedByUser)return;let l;const _=S=>{var w;S.children.forEach(_),!l&&S.status==="failed"&&(S.kind==="test"&&r.testIds.has(S.test.id)||S.kind==="case"&&r.testIds.has((w=S.tests[0])==null?void 0:w.id))&&(l=S)};_(N),l&&k(l.id)},[r,k,N,C,y,f,a,v,R]);const{selectedTreeItem:ee}=g.useMemo(()=>{const l=b?R.get(b):void 0;let _;l&&(_={file:l.location.file,line:l.location.line,source:{errors:s.loadErrors.filter(w=>{var T;return((T=w.location)==null?void 0:T.file)===l.location.file}).map(w=>({line:w.location.line,message:w.message})),content:void 0}});let S;return(l==null?void 0:l.kind)==="test"?S=l.test:(l==null?void 0:l.kind)==="case"&&l.tests.length===1&&(S=l.tests[0]),u({testCase:S,testFile:_}),{selectedTreeItem:l}},[u,b,s,R]);g.useEffect(()=>{if(!h)if(o)q("watch",{fileNames:[...Y]});else{const l=new Set;for(const _ of c.value){const S=R.get(_),w=S==null?void 0:S.location.file;w&&l.add(w)}q("watch",{fileNames:[...l]})}},[h,N,Y,o,c,R]);const V=l=>{k(l.id),n("bounce-if-busy",ne(l))};return he=l=>{const _=[],S=new Set(l);if(o){const w=T=>{const x=T.location.file;x&&S.has(x)&&_.push(...ne(T)),T.kind==="group"&&T.subKind==="folder"&&T.children.forEach(w)};w(N)}else for(const w of c.value){const T=R.get(w),x=T==null?void 0:T.location.file;x&&S.has(x)&&_.push(...ne(T))}n("queue-if-busy",new Set(_))},p(Ie,{treeState:a,setTreeState:v,rootItem:N,dataTestId:"test-tree",render:l=>E("div",{className:"hbox ui-mode-list-item",children:[p("div",{className:"ui-mode-list-item-title",children:l.title}),!!l.duration&&l.status!=="skipped"&&p("div",{className:"ui-mode-list-item-time",children:ye(l.duration)}),E(Q,{noMinHeight:!0,noShadow:!0,children:[p(M,{icon:"play",title:"Run",onClick:()=>V(l),disabled:!!r}),p(M,{icon:"go-to-file",title:"Open in VS Code",onClick:()=>q("open",{location:qe(l)}),style:l.kind==="group"&&l.subKind==="folder"?{visibility:"hidden"}:{}}),!o&&p(M,{icon:"eye",title:"Watch",onClick:()=>{c.value.has(l.id)?c.value.delete(l.id):c.value.add(l.id),d({...c})},toggled:c.value.has(l.id)})]})]}),icon:l=>l.status==="scheduled"?"codicon-clock":l.status==="running"?"codicon-loading":l.status==="failed"?"codicon-error":l.status==="passed"?"codicon-check":l.status==="skipped"?"codicon-circle-slash":"codicon-circle-outline",selectedItem:ee,onAccepted:V,onSelected:l=>{r&&(r.itemSelectedByUser=!0),k(l.id)},isError:l=>l.kind==="group"?l.hasLoadErrors:!1,autoExpandDepth:t?5:1,noItemsMessage:h?"Loading…":"No tests"})},Ke=({item:i,rootDir:e})=>{const[t,s]=g.useState(),[n,r]=g.useState(0),o=g.useRef(null),{outputDir:c}=g.useMemo(()=>({outputDir:i.testCase?$e(i.testCase):void 0}),[i]),[d,h]=g.useState(),u=g.useCallback(f=>h(ae(f)),[h]),m=d?t==null?void 0:t.model.actions.find(f=>ae(f)===d):void 0;return g.useEffect(()=>{var b,k;o.current&&clearTimeout(o.current);const f=(b=i.testCase)==null?void 0:b.results[0];if(!f){s(void 0);return}const a=f&&f.duration>=0&&f.attachments.find(C=>C.name==="trace");if(a&&a.path){ue(a.path).then(C=>s({model:C,isLive:!1}));return}if(!c){s(void 0);return}const v=`${c}/${je(f.workerIndex)}/traces/${(k=i.testCase)==null?void 0:k.id}.json`;return o.current=setTimeout(async()=>{try{const C=await ue(v);s({model:C,isLive:!0})}catch{s(void 0)}finally{r(n+1)}},500),()=>{o.current&&clearTimeout(o.current)}},[c,i,s,n,r]),p(Me,{model:t==null?void 0:t.model,hideTimelineBars:!0,hideStackFrames:!0,showSourcesFirst:!0,rootDir:e,initialSelection:m,onSelectionChanged:u,fallbackLocation:i.testFile,isLive:t==null?void 0:t.isLive,drawer:"bottom"},"workbench")};let $,Z,U;const ce=()=>{clearTimeout(Z),Z=void 0,oe(U.config,U.rootSuite,U.loadErrors,U.progress)},K=(i,e,t,s,n=!1)=>{U={config:i,rootSuite:e,loadErrors:t,progress:s},n?ce():Z||(Z=setTimeout(ce,250))},ge=i=>{if(!i)return H("list",{});let e,t;const s={passed:0,failed:0,skipped:0};let n;return $=new Fe(G,{onBegin:(r,o)=>{e||(e=o,t=[]),n=r,s.passed=0,s.failed=0,s.skipped=0,K(n,e,t,s,!0)},onEnd:()=>{K(n,e,t,s,!0)},onTestBegin:()=>{K(n,e,t,s)},onTestEnd:r=>{r.outcome()==="skipped"?++s.skipped:r.outcome()==="unexpected"?++s.failed:++s.passed,K(n,e,t,s)},onError:r=>{W.write((r.stack||r.value||"")+`
3 | `),t.push(r),K(n,e,t,s)}}),$._setClearPreviousResultsWhenTestBegins(),H("list",{})},q=(i,e)=>{if(window._overrideProtocolForTest){window._overrideProtocolForTest({method:i,params:e}).catch(()=>{});return}H(i,e).catch(t=>{console.error(t)})},Ue=(i,e)=>{var t;if(i==="listChanged"){ge(!1).catch(()=>{});return}if(i==="testFilesChanged"){he(e.testFileNames);return}if(i==="stdio"){if(e.buffer){const s=atob(e.buffer);W.write(s)}else W.write(e.text);return}(t=$==null?void 0:$.dispatch({method:i,params:e}))==null||t.catch(()=>{})},$e=i=>{var e;for(let t=i.parent;t;t=t.parent)if(t.project())return(e=t.project())==null?void 0:e.outputDir},qe=i=>{if(i)return i.location.file+":"+i.location.line},ne=i=>{const e=new Set;if(!i)return e;const t=s=>{var n;s.kind==="case"?s.tests.map(r=>r.id).forEach(r=>e.add(r)):s.kind==="test"?e.add(s.id):(n=s.children)==null||n.forEach(t)};return t(i),e};function re(i,e,t,s){if(e.length===0)return i;const n=e.join(G),r=s.get(n);if(r)return r;const o=re(i,e.slice(0,e.length-1),!1,s),c={kind:"group",subKind:t?"file":"folder",id:n,title:e[e.length-1],location:{file:n,line:0,column:0},duration:0,parent:o,children:[],status:"none",hasLoadErrors:!1};return o.children.push(c),s.set(n,c),c}function He(i,e,t){const s=[...t.values()].some(Boolean),n={kind:"group",subKind:"folder",id:"root",title:"",location:{file:"",line:0,column:0},duration:0,parent:void 0,children:[],status:"none",hasLoadErrors:!1},r=(c,d,h)=>{for(const u of d.suites){const m=u.title||"";let f=h.children.find(a=>a.title===m);f||(f={kind:"group",subKind:"describe",id:h.id+""+m,title:m,location:u.location,duration:0,parent:h,children:[],status:"none",hasLoadErrors:!1},h.children.push(f)),r(c,u,f)}for(const u of d.tests){const m=u.title;let f=h.children.find(b=>b.title===m);f||(f={kind:"case",id:h.id+""+m,title:m,parent:h,children:[],tests:[],location:u.location,duration:0,status:"none"},h.children.push(f));const a=u.results[0];let v="none";(a==null?void 0:a.statusEx)==="scheduled"?v="scheduled":(a==null?void 0:a.statusEx)==="running"?v="running":(a==null?void 0:a.status)==="skipped"?v="skipped":(a==null?void 0:a.status)==="interrupted"?v="none":a&&u.outcome()!=="expected"?v="failed":a&&u.outcome()==="expected"&&(v="passed"),f.tests.push(u),f.children.push({kind:"test",id:u.id,title:c,location:u.location,test:u,parent:f,children:[],status:v,duration:u.results.length?Math.max(0,u.results[0].duration):0,project:c}),f.duration=f.children.reduce((b,k)=>b+k.duration,0)}},o=new Map;for(const c of(i==null?void 0:i.suites)||[])if(!(s&&!t.get(c.title))){for(const d of c.suites){const h=re(n,d.location.file.split(G),!0,o);r(c.title,d,h)}for(const d of e){if(!d.location)continue;const h=re(n,d.location.file.split(G),!0,o);h.hasLoadErrors=!0}}return n}function Ye(i,e,t,s){const n=e.trim().toLowerCase().split(" "),r=[...t.values()].some(Boolean),o=d=>{const h=d.tests[0].titlePath().join(" ").toLowerCase();return!n.every(u=>h.includes(u))&&!d.tests.some(u=>s==null?void 0:s.has(u.id))?!1:(d.children=d.children.filter(u=>!r||(s==null?void 0:s.has(u.id))||t.get(u.status)),d.tests=d.children.map(u=>u.test),!!d.children.length)},c=d=>{const h=[];for(const u of d.children)u.kind==="case"?o(u)&&h.push(u):(c(u),(u.children.length||u.hasLoadErrors)&&h.push(u));d.children=h};c(i)}function me(i){for(const o of i.children)me(o);i.kind==="group"&&i.children.sort((o,c)=>o.location.file.localeCompare(c.location.file)||o.location.line-c.location.line);let e=i.children.length>0,t=i.children.length>0,s=!1,n=!1,r=!1;for(const o of i.children)t=t&&o.status==="skipped",e=e&&(o.status==="passed"||o.status==="skipped"),s=s||o.status==="failed",n=n||o.status==="running",r=r||o.status==="scheduled";n?i.status="running":r?i.status="scheduled":s?i.status="failed":t?i.status="skipped":e&&(i.status="passed")}function Xe(i){let e=i;for(;e.children.length===1&&e.children[0].kind==="group"&&e.children[0].subKind==="folder";)e=e.children[0];return e.location=i.location,e}function Je(i){const e=t=>{t.kind==="case"&&t.children.length===1?t.children=[]:t.children.forEach(e)};e(i)}async function ue(i){const e=new URLSearchParams;e.set("trace",i);const s=await(await fetch(`contexts?${e.toString()}`)).json();return new Re(s)}const G=navigator.userAgent.toLowerCase().includes("windows")?"\\":"/";(async()=>(Be(),window.location.protocol!=="file:"&&(window.location.href.includes("isUnderTest=true")&&await new Promise(i=>setTimeout(i,1e3)),navigator.serviceWorker.register("sw.bundle.js"),navigator.serviceWorker.controller||await new Promise(i=>{navigator.serviceWorker.oncontrollerchange=()=>i()}),setInterval(function(){fetch("ping")},1e4)),De.render(p(ze,{}),document.querySelector("#root"))))();
4 |
--------------------------------------------------------------------------------
/playwright-report/trace/uiMode.922a7b48.css:
--------------------------------------------------------------------------------
1 | .ui-mode-sidebar{background-color:var(--vscode-sideBar-background)}.ui-mode-sidebar input[type=search]{flex:auto}.ui-mode-sidebar .toolbar-button:not([disabled]) .codicon-play{color:var(--vscode-debugIcon-restartForeground)}.ui-mode-sidebar .toolbar-button:not([disabled]) .codicon-debug-stop{color:var(--vscode-debugIcon-stopForeground)}.ui-mode-list-item{flex:auto}.ui-mode-list-item-title{flex:auto;text-overflow:ellipsis;overflow:hidden}.ui-mode-list-item-time{flex:none;color:var(--vscode-editorCodeLens-foreground);margin:0 4px;user-select:none}.list-view-entry.selected .ui-mode-list-item-time,.list-view-entry.highlighted .ui-mode-list-item-time{display:none}.ui-mode .section-title{display:flex;flex:auto;flex-direction:row;align-items:center;font-size:11px;text-transform:uppercase;font-weight:700;text-overflow:ellipsis;overflow:hidden;padding:8px;height:30px}.ui-mode-sidebar img{flex:none;margin-left:6px;width:24px;height:24px}.ui-mode .disconnected{position:absolute;top:0;left:0;right:0;bottom:0;z-index:1000;background-color:#00000080}.status-line{flex:auto;white-space:nowrap;line-height:22px;padding-left:10px;display:flex;flex-direction:row;align-items:center;height:30px}.status-line>div{overflow:hidden;text-overflow:ellipsis}.list-view-entry:not(.highlighted):not(.selected) .toolbar-button:not(.toggled){display:none}.ui-mode-sidebar input[type=search]{flex:auto;padding:0 5px;line-height:24px;outline:none;margin:0 4px;border:none;color:var(--vscode-input-foreground);background-color:var(--vscode-input-background)}.filters{flex:none;display:flex;flex-direction:column;margin:2px 0}.filter-list{padding:0 10px 10px}.filter-title,.filter-summary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;user-select:none;cursor:pointer}.filter-label{color:var(--vscode-disabledForeground)}.filter-summary{line-height:24px;margin-left:24px}.filter-summary .filter-label{margin-left:5px}.filter-entry{line-height:24px}.filter-entry label{display:flex;align-items:center;cursor:pointer}.filter-entry input{flex:none;display:flex;align-items:center;cursor:pointer}.filter-entry label div{overflow:hidden;text-overflow:ellipsis}body{--vscode-font-family: system-ui, "Ubuntu", "Droid Sans", sans-serif;--vscode-font-weight: normal;--vscode-font-size: 13px;--vscode-editor-font-family: "Droid Sans Mono", "monospace", monospace;--vscode-editor-font-weight: normal;--vscode-editor-font-size: 14px;--vscode-foreground: #616161;--vscode-disabledForeground: rgba(97, 97, 97, .5);--vscode-errorForeground: #a1260d;--vscode-descriptionForeground: #717171;--vscode-icon-foreground: #424242;--vscode-focusBorder: #0090f1;--vscode-textSeparator-foreground: rgba(0, 0, 0, .18);--vscode-textLink-foreground: #006ab1;--vscode-textLink-activeForeground: #006ab1;--vscode-textPreformat-foreground: #a31515;--vscode-textBlockQuote-background: rgba(127, 127, 127, .1);--vscode-textBlockQuote-border: rgba(0, 122, 204, .5);--vscode-textCodeBlock-background: rgba(220, 220, 220, .4);--vscode-widget-shadow: rgba(0, 0, 0, .16);--vscode-input-background: #ffffff;--vscode-input-foreground: #616161;--vscode-inputOption-activeBorder: #007acc;--vscode-inputOption-hoverBackground: rgba(184, 184, 184, .31);--vscode-inputOption-activeBackground: rgba(0, 144, 241, .2);--vscode-inputOption-activeForeground: #000000;--vscode-input-placeholderForeground: #767676;--vscode-inputValidation-infoBackground: #d6ecf2;--vscode-inputValidation-infoBorder: #007acc;--vscode-inputValidation-warningBackground: #f6f5d2;--vscode-inputValidation-warningBorder: #b89500;--vscode-inputValidation-errorBackground: #f2dede;--vscode-inputValidation-errorBorder: #be1100;--vscode-dropdown-background: #ffffff;--vscode-dropdown-border: #cecece;--vscode-checkbox-background: #ffffff;--vscode-checkbox-border: #cecece;--vscode-button-foreground: #ffffff;--vscode-button-separator: rgba(255, 255, 255, .4);--vscode-button-background: #007acc;--vscode-button-hoverBackground: #0062a3;--vscode-button-secondaryForeground: #ffffff;--vscode-button-secondaryBackground: #5f6a79;--vscode-button-secondaryHoverBackground: #4c5561;--vscode-badge-background: #c4c4c4;--vscode-badge-foreground: #333333;--vscode-scrollbar-shadow: #dddddd;--vscode-scrollbarSlider-background: rgba(100, 100, 100, .4);--vscode-scrollbarSlider-hoverBackground: rgba(100, 100, 100, .7);--vscode-scrollbarSlider-activeBackground: rgba(0, 0, 0, .6);--vscode-progressBar-background: #0e70c0;--vscode-editorError-foreground: #e51400;--vscode-editorWarning-foreground: #bf8803;--vscode-editorInfo-foreground: #1a85ff;--vscode-editorHint-foreground: #6c6c6c;--vscode-sash-hoverBorder: #0090f1;--vscode-editor-background: #ffffff;--vscode-editor-foreground: #000000;--vscode-editorStickyScroll-background: #ffffff;--vscode-editorStickyScrollHover-background: #f0f0f0;--vscode-editorWidget-background: #f3f3f3;--vscode-editorWidget-foreground: #616161;--vscode-editorWidget-border: #c8c8c8;--vscode-quickInput-background: #f3f3f3;--vscode-quickInput-foreground: #616161;--vscode-quickInputTitle-background: rgba(0, 0, 0, .06);--vscode-pickerGroup-foreground: #0066bf;--vscode-pickerGroup-border: #cccedb;--vscode-keybindingLabel-background: rgba(221, 221, 221, .4);--vscode-keybindingLabel-foreground: #555555;--vscode-keybindingLabel-border: rgba(204, 204, 204, .4);--vscode-keybindingLabel-bottomBorder: rgba(187, 187, 187, .4);--vscode-editor-selectionBackground: #add6ff;--vscode-editor-inactiveSelectionBackground: #e5ebf1;--vscode-editor-selectionHighlightBackground: rgba(173, 214, 255, .5);--vscode-editor-findMatchBackground: #a8ac94;--vscode-editor-findMatchHighlightBackground: rgba(234, 92, 0, .33);--vscode-editor-findRangeHighlightBackground: rgba(180, 180, 180, .3);--vscode-searchEditor-findMatchBackground: rgba(234, 92, 0, .22);--vscode-editor-hoverHighlightBackground: rgba(173, 214, 255, .15);--vscode-editorHoverWidget-background: #f3f3f3;--vscode-editorHoverWidget-foreground: #616161;--vscode-editorHoverWidget-border: #c8c8c8;--vscode-editorHoverWidget-statusBarBackground: #e7e7e7;--vscode-editorLink-activeForeground: #0000ff;--vscode-editorInlayHint-foreground: rgba(51, 51, 51, .8);--vscode-editorInlayHint-background: rgba(196, 196, 196, .3);--vscode-editorInlayHint-typeForeground: rgba(51, 51, 51, .8);--vscode-editorInlayHint-typeBackground: rgba(196, 196, 196, .3);--vscode-editorInlayHint-parameterForeground: rgba(51, 51, 51, .8);--vscode-editorInlayHint-parameterBackground: rgba(196, 196, 196, .3);--vscode-editorLightBulb-foreground: #ddb100;--vscode-editorLightBulbAutoFix-foreground: #007acc;--vscode-diffEditor-insertedTextBackground: rgba(156, 204, 44, .4);--vscode-diffEditor-removedTextBackground: rgba(255, 0, 0, .3);--vscode-diffEditor-insertedLineBackground: rgba(155, 185, 85, .2);--vscode-diffEditor-removedLineBackground: rgba(255, 0, 0, .2);--vscode-diffEditor-diagonalFill: rgba(34, 34, 34, .2);--vscode-list-focusOutline: #0090f1;--vscode-list-focusAndSelectionOutline: #90c2f9;--vscode-list-activeSelectionBackground: #0060c0;--vscode-list-activeSelectionForeground: #ffffff;--vscode-list-activeSelectionIconForeground: #ffffff;--vscode-list-inactiveSelectionBackground: #e4e6f1;--vscode-list-hoverBackground: #e8e8e8;--vscode-list-dropBackground: #d6ebff;--vscode-list-highlightForeground: #0066bf;--vscode-list-focusHighlightForeground: #bbe7ff;--vscode-list-invalidItemForeground: #b89500;--vscode-list-errorForeground: #b01011;--vscode-list-warningForeground: #855f00;--vscode-listFilterWidget-background: #f3f3f3;--vscode-listFilterWidget-outline: rgba(0, 0, 0, 0);--vscode-listFilterWidget-noMatchesOutline: #be1100;--vscode-listFilterWidget-shadow: rgba(0, 0, 0, .16);--vscode-list-filterMatchBackground: rgba(234, 92, 0, .33);--vscode-tree-indentGuidesStroke: #a9a9a9;--vscode-tree-tableColumnsBorder: rgba(97, 97, 97, .13);--vscode-tree-tableOddRowsBackground: rgba(97, 97, 97, .04);--vscode-list-deemphasizedForeground: #8e8e90;--vscode-quickInputList-focusForeground: #ffffff;--vscode-quickInputList-focusIconForeground: #ffffff;--vscode-quickInputList-focusBackground: #0060c0;--vscode-menu-foreground: #616161;--vscode-menu-background: #ffffff;--vscode-menu-selectionForeground: #ffffff;--vscode-menu-selectionBackground: #0060c0;--vscode-menu-separatorBackground: #d4d4d4;--vscode-toolbar-hoverBackground: rgba(184, 184, 184, .31);--vscode-toolbar-activeBackground: rgba(166, 166, 166, .31);--vscode-editor-snippetTabstopHighlightBackground: rgba(10, 50, 100, .2);--vscode-editor-snippetFinalTabstopHighlightBorder: rgba(10, 50, 100, .5);--vscode-breadcrumb-foreground: rgba(97, 97, 97, .8);--vscode-breadcrumb-background: #ffffff;--vscode-breadcrumb-focusForeground: #4e4e4e;--vscode-breadcrumb-activeSelectionForeground: #4e4e4e;--vscode-breadcrumbPicker-background: #f3f3f3;--vscode-merge-currentHeaderBackground: rgba(64, 200, 174, .5);--vscode-merge-currentContentBackground: rgba(64, 200, 174, .2);--vscode-merge-incomingHeaderBackground: rgba(64, 166, 255, .5);--vscode-merge-incomingContentBackground: rgba(64, 166, 255, .2);--vscode-merge-commonHeaderBackground: rgba(96, 96, 96, .4);--vscode-merge-commonContentBackground: rgba(96, 96, 96, .16);--vscode-editorOverviewRuler-currentContentForeground: rgba(64, 200, 174, .5);--vscode-editorOverviewRuler-incomingContentForeground: rgba(64, 166, 255, .5);--vscode-editorOverviewRuler-commonContentForeground: rgba(96, 96, 96, .4);--vscode-editorOverviewRuler-findMatchForeground: rgba(209, 134, 22, .49);--vscode-editorOverviewRuler-selectionHighlightForeground: rgba(160, 160, 160, .8);--vscode-minimap-findMatchHighlight: #d18616;--vscode-minimap-selectionOccurrenceHighlight: #c9c9c9;--vscode-minimap-selectionHighlight: #add6ff;--vscode-minimap-errorHighlight: rgba(255, 18, 18, .7);--vscode-minimap-warningHighlight: #bf8803;--vscode-minimap-foregroundOpacity: #000000;--vscode-minimapSlider-background: rgba(100, 100, 100, .2);--vscode-minimapSlider-hoverBackground: rgba(100, 100, 100, .35);--vscode-minimapSlider-activeBackground: rgba(0, 0, 0, .3);--vscode-problemsErrorIcon-foreground: #e51400;--vscode-problemsWarningIcon-foreground: #bf8803;--vscode-problemsInfoIcon-foreground: #1a85ff;--vscode-charts-foreground: #616161;--vscode-charts-lines: rgba(97, 97, 97, .5);--vscode-charts-red: #e51400;--vscode-charts-blue: #1a85ff;--vscode-charts-yellow: #bf8803;--vscode-charts-orange: #d18616;--vscode-charts-green: #388a34;--vscode-charts-purple: #652d90;--vscode-editor-lineHighlightBorder: #eeeeee;--vscode-editor-rangeHighlightBackground: rgba(253, 255, 0, .2);--vscode-editor-symbolHighlightBackground: rgba(234, 92, 0, .33);--vscode-editorCursor-foreground: #000000;--vscode-editorWhitespace-foreground: rgba(51, 51, 51, .2);--vscode-editorIndentGuide-background: #d3d3d3;--vscode-editorIndentGuide-activeBackground: #939393;--vscode-editorLineNumber-foreground: #237893;--vscode-editorActiveLineNumber-foreground: #0b216f;--vscode-editorLineNumber-activeForeground: #0b216f;--vscode-editorRuler-foreground: #d3d3d3;--vscode-editorCodeLens-foreground: #919191;--vscode-editorBracketMatch-background: rgba(0, 100, 0, .1);--vscode-editorBracketMatch-border: #b9b9b9;--vscode-editorOverviewRuler-border: rgba(127, 127, 127, .3);--vscode-editorGutter-background: #ffffff;--vscode-editorUnnecessaryCode-opacity: rgba(0, 0, 0, .47);--vscode-editorGhostText-foreground: rgba(0, 0, 0, .47);--vscode-editorOverviewRuler-rangeHighlightForeground: rgba(0, 122, 204, .6);--vscode-editorOverviewRuler-errorForeground: rgba(255, 18, 18, .7);--vscode-editorOverviewRuler-warningForeground: #bf8803;--vscode-editorOverviewRuler-infoForeground: #1a85ff;--vscode-editorBracketHighlight-foreground1: #0431fa;--vscode-editorBracketHighlight-foreground2: #319331;--vscode-editorBracketHighlight-foreground3: #7b3814;--vscode-editorBracketHighlight-foreground4: rgba(0, 0, 0, 0);--vscode-editorBracketHighlight-foreground5: rgba(0, 0, 0, 0);--vscode-editorBracketHighlight-foreground6: rgba(0, 0, 0, 0);--vscode-editorBracketHighlight-unexpectedBracket\.foreground: rgba(255, 18, 18, .8);--vscode-editorBracketPairGuide-background1: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background2: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background3: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background4: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background5: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background6: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground1: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground2: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground3: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground4: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground5: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground6: rgba(0, 0, 0, 0);--vscode-editorUnicodeHighlight-border: #cea33d;--vscode-editorUnicodeHighlight-background: rgba(206, 163, 61, .08);--vscode-symbolIcon-arrayForeground: #616161;--vscode-symbolIcon-booleanForeground: #616161;--vscode-symbolIcon-classForeground: #d67e00;--vscode-symbolIcon-colorForeground: #616161;--vscode-symbolIcon-constantForeground: #616161;--vscode-symbolIcon-constructorForeground: #652d90;--vscode-symbolIcon-enumeratorForeground: #d67e00;--vscode-symbolIcon-enumeratorMemberForeground: #007acc;--vscode-symbolIcon-eventForeground: #d67e00;--vscode-symbolIcon-fieldForeground: #007acc;--vscode-symbolIcon-fileForeground: #616161;--vscode-symbolIcon-folderForeground: #616161;--vscode-symbolIcon-functionForeground: #652d90;--vscode-symbolIcon-interfaceForeground: #007acc;--vscode-symbolIcon-keyForeground: #616161;--vscode-symbolIcon-keywordForeground: #616161;--vscode-symbolIcon-methodForeground: #652d90;--vscode-symbolIcon-moduleForeground: #616161;--vscode-symbolIcon-namespaceForeground: #616161;--vscode-symbolIcon-nullForeground: #616161;--vscode-symbolIcon-numberForeground: #616161;--vscode-symbolIcon-objectForeground: #616161;--vscode-symbolIcon-operatorForeground: #616161;--vscode-symbolIcon-packageForeground: #616161;--vscode-symbolIcon-propertyForeground: #616161;--vscode-symbolIcon-referenceForeground: #616161;--vscode-symbolIcon-snippetForeground: #616161;--vscode-symbolIcon-stringForeground: #616161;--vscode-symbolIcon-structForeground: #616161;--vscode-symbolIcon-textForeground: #616161;--vscode-symbolIcon-typeParameterForeground: #616161;--vscode-symbolIcon-unitForeground: #616161;--vscode-symbolIcon-variableForeground: #007acc;--vscode-editorHoverWidget-highlightForeground: #0066bf;--vscode-editorOverviewRuler-bracketMatchForeground: #a0a0a0;--vscode-editor-foldBackground: rgba(173, 214, 255, .3);--vscode-editorGutter-foldingControlForeground: #424242;--vscode-editor-linkedEditingBackground: rgba(255, 0, 0, .3);--vscode-editor-wordHighlightBackground: rgba(87, 87, 87, .25);--vscode-editor-wordHighlightStrongBackground: rgba(14, 99, 156, .25);--vscode-editorOverviewRuler-wordHighlightForeground: rgba(160, 160, 160, .8);--vscode-editorOverviewRuler-wordHighlightStrongForeground: rgba(192, 160, 192, .8);--vscode-peekViewTitle-background: rgba(26, 133, 255, .1);--vscode-peekViewTitleLabel-foreground: #000000;--vscode-peekViewTitleDescription-foreground: #616161;--vscode-peekView-border: #1a85ff;--vscode-peekViewResult-background: #f3f3f3;--vscode-peekViewResult-lineForeground: #646465;--vscode-peekViewResult-fileForeground: #1e1e1e;--vscode-peekViewResult-selectionBackground: rgba(51, 153, 255, .2);--vscode-peekViewResult-selectionForeground: #6c6c6c;--vscode-peekViewEditor-background: #f2f8fc;--vscode-peekViewEditorGutter-background: #f2f8fc;--vscode-peekViewResult-matchHighlightBackground: rgba(234, 92, 0, .3);--vscode-peekViewEditor-matchHighlightBackground: rgba(245, 216, 2, .87);--vscode-editorMarkerNavigationError-background: #e51400;--vscode-editorMarkerNavigationError-headerBackground: rgba(229, 20, 0, .1);--vscode-editorMarkerNavigationWarning-background: #bf8803;--vscode-editorMarkerNavigationWarning-headerBackground: rgba(191, 136, 3, .1);--vscode-editorMarkerNavigationInfo-background: #1a85ff;--vscode-editorMarkerNavigationInfo-headerBackground: rgba(26, 133, 255, .1);--vscode-editorMarkerNavigation-background: #ffffff;--vscode-editorSuggestWidget-background: #f3f3f3;--vscode-editorSuggestWidget-border: #c8c8c8;--vscode-editorSuggestWidget-foreground: #000000;--vscode-editorSuggestWidget-selectedForeground: #ffffff;--vscode-editorSuggestWidget-selectedIconForeground: #ffffff;--vscode-editorSuggestWidget-selectedBackground: #0060c0;--vscode-editorSuggestWidget-highlightForeground: #0066bf;--vscode-editorSuggestWidget-focusHighlightForeground: #bbe7ff;--vscode-editorSuggestWidgetStatus-foreground: rgba(0, 0, 0, .5);--vscode-tab-activeBackground: #ffffff;--vscode-tab-unfocusedActiveBackground: #ffffff;--vscode-tab-inactiveBackground: #ececec;--vscode-tab-unfocusedInactiveBackground: #ececec;--vscode-tab-activeForeground: #333333;--vscode-tab-inactiveForeground: rgba(51, 51, 51, .7);--vscode-tab-unfocusedActiveForeground: rgba(51, 51, 51, .7);--vscode-tab-unfocusedInactiveForeground: rgba(51, 51, 51, .35);--vscode-tab-border: #f3f3f3;--vscode-tab-lastPinnedBorder: rgba(97, 97, 97, .19);--vscode-tab-activeModifiedBorder: #33aaee;--vscode-tab-inactiveModifiedBorder: rgba(51, 170, 238, .5);--vscode-tab-unfocusedActiveModifiedBorder: rgba(51, 170, 238, .7);--vscode-tab-unfocusedInactiveModifiedBorder: rgba(51, 170, 238, .25);--vscode-editorPane-background: #ffffff;--vscode-editorGroupHeader-tabsBackground: #f3f3f3;--vscode-editorGroupHeader-noTabsBackground: #ffffff;--vscode-editorGroup-border: #e7e7e7;--vscode-editorGroup-dropBackground: rgba(38, 119, 203, .18);--vscode-editorGroup-dropIntoPromptForeground: #616161;--vscode-editorGroup-dropIntoPromptBackground: #f3f3f3;--vscode-sideBySideEditor-horizontalBorder: #e7e7e7;--vscode-sideBySideEditor-verticalBorder: #e7e7e7;--vscode-panel-background: #ffffff;--vscode-panel-border: rgba(128, 128, 128, .35);--vscode-panelTitle-activeForeground: #424242;--vscode-panelTitle-inactiveForeground: rgba(66, 66, 66, .75);--vscode-panelTitle-activeBorder: #424242;--vscode-panelInput-border: #dddddd;--vscode-panel-dropBorder: #424242;--vscode-panelSection-dropBackground: rgba(38, 119, 203, .18);--vscode-panelSectionHeader-background: rgba(128, 128, 128, .2);--vscode-panelSection-border: rgba(128, 128, 128, .35);--vscode-banner-background: #004386;--vscode-banner-foreground: #ffffff;--vscode-banner-iconForeground: #1a85ff;--vscode-statusBar-foreground: #ffffff;--vscode-statusBar-noFolderForeground: #ffffff;--vscode-statusBar-background: #007acc;--vscode-statusBar-noFolderBackground: #68217a;--vscode-statusBar-focusBorder: #ffffff;--vscode-statusBarItem-activeBackground: rgba(255, 255, 255, .18);--vscode-statusBarItem-focusBorder: #ffffff;--vscode-statusBarItem-hoverBackground: rgba(255, 255, 255, .12);--vscode-statusBarItem-compactHoverBackground: rgba(255, 255, 255, .2);--vscode-statusBarItem-prominentForeground: #ffffff;--vscode-statusBarItem-prominentBackground: rgba(0, 0, 0, .5);--vscode-statusBarItem-prominentHoverBackground: rgba(0, 0, 0, .3);--vscode-statusBarItem-errorBackground: #c72e0f;--vscode-statusBarItem-errorForeground: #ffffff;--vscode-statusBarItem-warningBackground: #725102;--vscode-statusBarItem-warningForeground: #ffffff;--vscode-activityBar-background: #2c2c2c;--vscode-activityBar-foreground: #ffffff;--vscode-activityBar-inactiveForeground: rgba(255, 255, 255, .4);--vscode-activityBar-activeBorder: #ffffff;--vscode-activityBar-dropBorder: #ffffff;--vscode-activityBarBadge-background: #007acc;--vscode-activityBarBadge-foreground: #ffffff;--vscode-statusBarItem-remoteBackground: #16825d;--vscode-statusBarItem-remoteForeground: #ffffff;--vscode-extensionBadge-remoteBackground: #007acc;--vscode-extensionBadge-remoteForeground: #ffffff;--vscode-sideBar-background: #f3f3f3;--vscode-sideBarTitle-foreground: #6f6f6f;--vscode-sideBar-dropBackground: rgba(38, 119, 203, .18);--vscode-sideBarSectionHeader-background: rgba(0, 0, 0, 0);--vscode-sideBarSectionHeader-border: rgba(97, 97, 97, .19);--vscode-titleBar-activeForeground: #333333;--vscode-titleBar-inactiveForeground: rgba(51, 51, 51, .6);--vscode-titleBar-activeBackground: #dddddd;--vscode-titleBar-inactiveBackground: rgba(221, 221, 221, .6);--vscode-menubar-selectionForeground: #333333;--vscode-menubar-selectionBackground: rgba(184, 184, 184, .31);--vscode-notifications-foreground: #616161;--vscode-notifications-background: #f3f3f3;--vscode-notificationLink-foreground: #006ab1;--vscode-notificationCenterHeader-background: #e7e7e7;--vscode-notifications-border: #e7e7e7;--vscode-notificationsErrorIcon-foreground: #e51400;--vscode-notificationsWarningIcon-foreground: #bf8803;--vscode-notificationsInfoIcon-foreground: #1a85ff;--vscode-commandCenter-foreground: #333333;--vscode-commandCenter-activeForeground: #333333;--vscode-commandCenter-activeBackground: rgba(184, 184, 184, .31);--vscode-commandCenter-border: rgba(128, 128, 128, .35);--vscode-editorCommentsWidget-resolvedBorder: rgba(97, 97, 97, .5);--vscode-editorCommentsWidget-unresolvedBorder: #1a85ff;--vscode-editorCommentsWidget-rangeBackground: rgba(26, 133, 255, .1);--vscode-editorCommentsWidget-rangeBorder: rgba(26, 133, 255, .4);--vscode-editorCommentsWidget-rangeActiveBackground: rgba(26, 133, 255, .1);--vscode-editorCommentsWidget-rangeActiveBorder: rgba(26, 133, 255, .4);--vscode-editorGutter-commentRangeForeground: #d5d8e9;--vscode-debugToolBar-background: #f3f3f3;--vscode-debugIcon-startForeground: #388a34;--vscode-editor-stackFrameHighlightBackground: rgba(255, 255, 102, .45);--vscode-editor-focusedStackFrameHighlightBackground: rgba(206, 231, 206, .45);--vscode-mergeEditor-change\.background: rgba(155, 185, 85, .2);--vscode-mergeEditor-change\.word\.background: rgba(156, 204, 44, .4);--vscode-mergeEditor-conflict\.unhandledUnfocused\.border: rgba(255, 166, 0, .48);--vscode-mergeEditor-conflict\.unhandledFocused\.border: #ffa600;--vscode-mergeEditor-conflict\.handledUnfocused\.border: rgba(134, 134, 134, .29);--vscode-mergeEditor-conflict\.handledFocused\.border: rgba(193, 193, 193, .8);--vscode-mergeEditor-conflict\.handled\.minimapOverViewRuler: rgba(173, 172, 168, .93);--vscode-mergeEditor-conflict\.unhandled\.minimapOverViewRuler: #fcba03;--vscode-mergeEditor-conflictingLines\.background: rgba(255, 234, 0, .28);--vscode-settings-headerForeground: #444444;--vscode-settings-modifiedItemIndicator: #66afe0;--vscode-settings-headerBorder: rgba(128, 128, 128, .35);--vscode-settings-sashBorder: rgba(128, 128, 128, .35);--vscode-settings-dropdownBackground: #ffffff;--vscode-settings-dropdownBorder: #cecece;--vscode-settings-dropdownListBorder: #c8c8c8;--vscode-settings-checkboxBackground: #ffffff;--vscode-settings-checkboxBorder: #cecece;--vscode-settings-textInputBackground: #ffffff;--vscode-settings-textInputForeground: #616161;--vscode-settings-textInputBorder: #cecece;--vscode-settings-numberInputBackground: #ffffff;--vscode-settings-numberInputForeground: #616161;--vscode-settings-numberInputBorder: #cecece;--vscode-settings-focusedRowBackground: rgba(232, 232, 232, .6);--vscode-settings-rowHoverBackground: rgba(232, 232, 232, .3);--vscode-settings-focusedRowBorder: rgba(0, 0, 0, .12);--vscode-terminal-foreground: #333333;--vscode-terminal-selectionBackground: #add6ff;--vscode-terminal-inactiveSelectionBackground: #e5ebf1;--vscode-terminalCommandDecoration-defaultBackground: rgba(0, 0, 0, .25);--vscode-terminalCommandDecoration-successBackground: #2090d3;--vscode-terminalCommandDecoration-errorBackground: #e51400;--vscode-terminalOverviewRuler-cursorForeground: rgba(160, 160, 160, .8);--vscode-terminal-border: rgba(128, 128, 128, .35);--vscode-terminal-findMatchBackground: #a8ac94;--vscode-terminal-findMatchHighlightBackground: rgba(234, 92, 0, .33);--vscode-terminalOverviewRuler-findMatchForeground: rgba(209, 134, 22, .49);--vscode-terminal-dropBackground: rgba(38, 119, 203, .18);--vscode-testing-iconFailed: #f14c4c;--vscode-testing-iconErrored: #f14c4c;--vscode-testing-iconPassed: #73c991;--vscode-testing-runAction: #73c991;--vscode-testing-iconQueued: #cca700;--vscode-testing-iconUnset: #848484;--vscode-testing-iconSkipped: #848484;--vscode-testing-peekBorder: #e51400;--vscode-testing-peekHeaderBackground: rgba(229, 20, 0, .1);--vscode-testing-message\.error\.decorationForeground: #e51400;--vscode-testing-message\.error\.lineBackground: rgba(255, 0, 0, .2);--vscode-testing-message\.info\.decorationForeground: rgba(0, 0, 0, .5);--vscode-welcomePage-tileBackground: #f3f3f3;--vscode-welcomePage-tileHoverBackground: #dbdbdb;--vscode-welcomePage-tileShadow: rgba(0, 0, 0, .16);--vscode-welcomePage-progress\.background: #ffffff;--vscode-welcomePage-progress\.foreground: #006ab1;--vscode-debugExceptionWidget-border: #a31515;--vscode-debugExceptionWidget-background: #f1dfde;--vscode-ports-iconRunningProcessForeground: #369432;--vscode-statusBar-debuggingBackground: #cc6633;--vscode-statusBar-debuggingForeground: #ffffff;--vscode-editor-inlineValuesForeground: rgba(0, 0, 0, .5);--vscode-editor-inlineValuesBackground: rgba(255, 200, 0, .2);--vscode-editorGutter-modifiedBackground: #2090d3;--vscode-editorGutter-addedBackground: #48985d;--vscode-editorGutter-deletedBackground: #e51400;--vscode-minimapGutter-modifiedBackground: #2090d3;--vscode-minimapGutter-addedBackground: #48985d;--vscode-minimapGutter-deletedBackground: #e51400;--vscode-editorOverviewRuler-modifiedForeground: rgba(32, 144, 211, .6);--vscode-editorOverviewRuler-addedForeground: rgba(72, 152, 93, .6);--vscode-editorOverviewRuler-deletedForeground: rgba(229, 20, 0, .6);--vscode-debugIcon-breakpointForeground: #e51400;--vscode-debugIcon-breakpointDisabledForeground: #848484;--vscode-debugIcon-breakpointUnverifiedForeground: #848484;--vscode-debugIcon-breakpointCurrentStackframeForeground: #be8700;--vscode-debugIcon-breakpointStackframeForeground: #89d185;--vscode-notebook-cellBorderColor: #e8e8e8;--vscode-notebook-focusedEditorBorder: #0090f1;--vscode-notebookStatusSuccessIcon-foreground: #388a34;--vscode-notebookStatusErrorIcon-foreground: #a1260d;--vscode-notebookStatusRunningIcon-foreground: #616161;--vscode-notebook-cellToolbarSeparator: rgba(128, 128, 128, .35);--vscode-notebook-selectedCellBackground: rgba(200, 221, 241, .31);--vscode-notebook-selectedCellBorder: #e8e8e8;--vscode-notebook-focusedCellBorder: #0090f1;--vscode-notebook-inactiveFocusedCellBorder: #e8e8e8;--vscode-notebook-cellStatusBarItemHoverBackground: rgba(0, 0, 0, .08);--vscode-notebook-cellInsertionIndicator: #0090f1;--vscode-notebookScrollbarSlider-background: rgba(100, 100, 100, .4);--vscode-notebookScrollbarSlider-hoverBackground: rgba(100, 100, 100, .7);--vscode-notebookScrollbarSlider-activeBackground: rgba(0, 0, 0, .6);--vscode-notebook-symbolHighlightBackground: rgba(253, 255, 0, .2);--vscode-notebook-cellEditorBackground: #f3f3f3;--vscode-notebook-editorBackground: #ffffff;--vscode-keybindingTable-headerBackground: rgba(97, 97, 97, .04);--vscode-keybindingTable-rowsBackground: rgba(97, 97, 97, .04);--vscode-scm-providerBorder: #c8c8c8;--vscode-searchEditor-textInputBorder: #cecece;--vscode-debugTokenExpression-name: #9b46b0;--vscode-debugTokenExpression-value: rgba(108, 108, 108, .8);--vscode-debugTokenExpression-string: #a31515;--vscode-debugTokenExpression-boolean: #0000ff;--vscode-debugTokenExpression-number: #098658;--vscode-debugTokenExpression-error: #e51400;--vscode-debugView-exceptionLabelForeground: #ffffff;--vscode-debugView-exceptionLabelBackground: #a31515;--vscode-debugView-stateLabelForeground: #616161;--vscode-debugView-stateLabelBackground: rgba(136, 136, 136, .27);--vscode-debugView-valueChangedHighlight: #569cd6;--vscode-debugConsole-infoForeground: #1a85ff;--vscode-debugConsole-warningForeground: #bf8803;--vscode-debugConsole-errorForeground: #a1260d;--vscode-debugConsole-sourceForeground: #616161;--vscode-debugConsoleInputIcon-foreground: #616161;--vscode-debugIcon-pauseForeground: #007acc;--vscode-debugIcon-stopForeground: #a1260d;--vscode-debugIcon-disconnectForeground: #a1260d;--vscode-debugIcon-restartForeground: #388a34;--vscode-debugIcon-stepOverForeground: #007acc;--vscode-debugIcon-stepIntoForeground: #007acc;--vscode-debugIcon-stepOutForeground: #007acc;--vscode-debugIcon-continueForeground: #007acc;--vscode-debugIcon-stepBackForeground: #007acc;--vscode-extensionButton-prominentBackground: #007acc;--vscode-extensionButton-prominentForeground: #ffffff;--vscode-extensionButton-prominentHoverBackground: #0062a3;--vscode-extensionIcon-starForeground: #df6100;--vscode-extensionIcon-verifiedForeground: #006ab1;--vscode-extensionIcon-preReleaseForeground: #1d9271;--vscode-extensionIcon-sponsorForeground: #b51e78;--vscode-terminal-ansiBlack: #000000;--vscode-terminal-ansiRed: #cd3131;--vscode-terminal-ansiGreen: #00bc00;--vscode-terminal-ansiYellow: #949800;--vscode-terminal-ansiBlue: #0451a5;--vscode-terminal-ansiMagenta: #bc05bc;--vscode-terminal-ansiCyan: #0598bc;--vscode-terminal-ansiWhite: #555555;--vscode-terminal-ansiBrightBlack: #666666;--vscode-terminal-ansiBrightRed: #cd3131;--vscode-terminal-ansiBrightGreen: #14ce14;--vscode-terminal-ansiBrightYellow: #b5ba00;--vscode-terminal-ansiBrightBlue: #0451a5;--vscode-terminal-ansiBrightMagenta: #bc05bc;--vscode-terminal-ansiBrightCyan: #0598bc;--vscode-terminal-ansiBrightWhite: #a5a5a5;--vscode-interactive-activeCodeBorder: #1a85ff;--vscode-interactive-inactiveCodeBorder: #e4e6f1;--vscode-gitDecoration-addedResourceForeground: #587c0c;--vscode-gitDecoration-modifiedResourceForeground: #895503;--vscode-gitDecoration-deletedResourceForeground: #ad0707;--vscode-gitDecoration-renamedResourceForeground: #007100;--vscode-gitDecoration-untrackedResourceForeground: #007100;--vscode-gitDecoration-ignoredResourceForeground: #8e8e90;--vscode-gitDecoration-stageModifiedResourceForeground: #895503;--vscode-gitDecoration-stageDeletedResourceForeground: #ad0707;--vscode-gitDecoration-conflictingResourceForeground: #ad0707;--vscode-gitDecoration-submoduleResourceForeground: #1258a7}body.dark-mode{--vscode-font-family: system-ui, "Ubuntu", "Droid Sans", sans-serif;--vscode-font-weight: normal;--vscode-font-size: 13px;--vscode-editor-font-family: "Droid Sans Mono", "monospace", monospace;--vscode-editor-font-weight: normal;--vscode-editor-font-size: 14px;--vscode-foreground: #cccccc;--vscode-disabledForeground: rgba(204, 204, 204, .5);--vscode-errorForeground: #f48771;--vscode-descriptionForeground: rgba(204, 204, 204, .7);--vscode-icon-foreground: #c5c5c5;--vscode-focusBorder: #007fd4;--vscode-textSeparator-foreground: rgba(255, 255, 255, .18);--vscode-textLink-foreground: #3794ff;--vscode-textLink-activeForeground: #3794ff;--vscode-textPreformat-foreground: #d7ba7d;--vscode-textBlockQuote-background: rgba(127, 127, 127, .1);--vscode-textBlockQuote-border: rgba(0, 122, 204, .5);--vscode-textCodeBlock-background: rgba(10, 10, 10, .4);--vscode-widget-shadow: rgba(0, 0, 0, .36);--vscode-input-background: #3c3c3c;--vscode-input-foreground: #cccccc;--vscode-inputOption-activeBorder: #007acc;--vscode-inputOption-hoverBackground: rgba(90, 93, 94, .5);--vscode-inputOption-activeBackground: rgba(0, 127, 212, .4);--vscode-inputOption-activeForeground: #ffffff;--vscode-input-placeholderForeground: #a6a6a6;--vscode-inputValidation-infoBackground: #063b49;--vscode-inputValidation-infoBorder: #007acc;--vscode-inputValidation-warningBackground: #352a05;--vscode-inputValidation-warningBorder: #b89500;--vscode-inputValidation-errorBackground: #5a1d1d;--vscode-inputValidation-errorBorder: #be1100;--vscode-dropdown-background: #3c3c3c;--vscode-dropdown-foreground: #f0f0f0;--vscode-dropdown-border: #3c3c3c;--vscode-checkbox-background: #3c3c3c;--vscode-checkbox-foreground: #f0f0f0;--vscode-checkbox-border: #3c3c3c;--vscode-button-foreground: #ffffff;--vscode-button-separator: rgba(255, 255, 255, .4);--vscode-button-background: #0e639c;--vscode-button-hoverBackground: #1177bb;--vscode-button-secondaryForeground: #ffffff;--vscode-button-secondaryBackground: #3a3d41;--vscode-button-secondaryHoverBackground: #45494e;--vscode-badge-background: #4d4d4d;--vscode-badge-foreground: #ffffff;--vscode-scrollbar-shadow: #000000;--vscode-scrollbarSlider-background: rgba(121, 121, 121, .4);--vscode-scrollbarSlider-hoverBackground: rgba(100, 100, 100, .7);--vscode-scrollbarSlider-activeBackground: rgba(191, 191, 191, .4);--vscode-progressBar-background: #0e70c0;--vscode-editorError-foreground: #f14c4c;--vscode-editorWarning-foreground: #cca700;--vscode-editorInfo-foreground: #3794ff;--vscode-editorHint-foreground: rgba(238, 238, 238, .7);--vscode-sash-hoverBorder: #007fd4;--vscode-editor-background: #1e1e1e;--vscode-editor-foreground: #d4d4d4;--vscode-editorStickyScroll-background: #1e1e1e;--vscode-editorStickyScrollHover-background: #2a2d2e;--vscode-editorWidget-background: #252526;--vscode-editorWidget-foreground: #cccccc;--vscode-editorWidget-border: #454545;--vscode-quickInput-background: #252526;--vscode-quickInput-foreground: #cccccc;--vscode-quickInputTitle-background: rgba(255, 255, 255, .1);--vscode-pickerGroup-foreground: #3794ff;--vscode-pickerGroup-border: #3f3f46;--vscode-keybindingLabel-background: rgba(128, 128, 128, .17);--vscode-keybindingLabel-foreground: #cccccc;--vscode-keybindingLabel-border: rgba(51, 51, 51, .6);--vscode-keybindingLabel-bottomBorder: rgba(68, 68, 68, .6);--vscode-editor-selectionBackground: #264f78;--vscode-editor-inactiveSelectionBackground: #3a3d41;--vscode-editor-selectionHighlightBackground: rgba(173, 214, 255, .15);--vscode-editor-findMatchBackground: #515c6a;--vscode-editor-findMatchHighlightBackground: rgba(234, 92, 0, .33);--vscode-editor-findRangeHighlightBackground: rgba(58, 61, 65, .4);--vscode-searchEditor-findMatchBackground: rgba(234, 92, 0, .22);--vscode-editor-hoverHighlightBackground: rgba(38, 79, 120, .25);--vscode-editorHoverWidget-background: #252526;--vscode-editorHoverWidget-foreground: #cccccc;--vscode-editorHoverWidget-border: #454545;--vscode-editorHoverWidget-statusBarBackground: #2c2c2d;--vscode-editorLink-activeForeground: #4e94ce;--vscode-editorInlayHint-foreground: rgba(255, 255, 255, .8);--vscode-editorInlayHint-background: rgba(77, 77, 77, .6);--vscode-editorInlayHint-typeForeground: rgba(255, 255, 255, .8);--vscode-editorInlayHint-typeBackground: rgba(77, 77, 77, .6);--vscode-editorInlayHint-parameterForeground: rgba(255, 255, 255, .8);--vscode-editorInlayHint-parameterBackground: rgba(77, 77, 77, .6);--vscode-editorLightBulb-foreground: #ffcc00;--vscode-editorLightBulbAutoFix-foreground: #75beff;--vscode-diffEditor-insertedTextBackground: rgba(156, 204, 44, .2);--vscode-diffEditor-removedTextBackground: rgba(255, 0, 0, .4);--vscode-diffEditor-insertedLineBackground: rgba(155, 185, 85, .2);--vscode-diffEditor-removedLineBackground: rgba(255, 0, 0, .2);--vscode-diffEditor-diagonalFill: rgba(204, 204, 204, .2);--vscode-list-focusOutline: #007fd4;--vscode-list-activeSelectionBackground: #04395e;--vscode-list-activeSelectionForeground: #ffffff;--vscode-list-activeSelectionIconForeground: #ffffff;--vscode-list-inactiveSelectionBackground: #37373d;--vscode-list-hoverBackground: #2a2d2e;--vscode-list-dropBackground: #383b3d;--vscode-list-highlightForeground: #2aaaff;--vscode-list-focusHighlightForeground: #2aaaff;--vscode-list-invalidItemForeground: #b89500;--vscode-list-errorForeground: #f88070;--vscode-list-warningForeground: #cca700;--vscode-listFilterWidget-background: #252526;--vscode-listFilterWidget-outline: rgba(0, 0, 0, 0);--vscode-listFilterWidget-noMatchesOutline: #be1100;--vscode-listFilterWidget-shadow: rgba(0, 0, 0, .36);--vscode-list-filterMatchBackground: rgba(234, 92, 0, .33);--vscode-tree-indentGuidesStroke: #585858;--vscode-tree-tableColumnsBorder: rgba(204, 204, 204, .13);--vscode-tree-tableOddRowsBackground: rgba(204, 204, 204, .04);--vscode-list-deemphasizedForeground: #8c8c8c;--vscode-quickInputList-focusForeground: #ffffff;--vscode-quickInputList-focusIconForeground: #ffffff;--vscode-quickInputList-focusBackground: #04395e;--vscode-menu-foreground: #cccccc;--vscode-menu-background: #303031;--vscode-menu-selectionForeground: #ffffff;--vscode-menu-selectionBackground: #04395e;--vscode-menu-separatorBackground: #606060;--vscode-toolbar-hoverBackground: rgba(90, 93, 94, .31);--vscode-toolbar-activeBackground: rgba(99, 102, 103, .31);--vscode-editor-snippetTabstopHighlightBackground: rgba(124, 124, 124, .3);--vscode-editor-snippetFinalTabstopHighlightBorder: #525252;--vscode-breadcrumb-foreground: rgba(204, 204, 204, .8);--vscode-breadcrumb-background: #1e1e1e;--vscode-breadcrumb-focusForeground: #e0e0e0;--vscode-breadcrumb-activeSelectionForeground: #e0e0e0;--vscode-breadcrumbPicker-background: #252526;--vscode-merge-currentHeaderBackground: rgba(64, 200, 174, .5);--vscode-merge-currentContentBackground: rgba(64, 200, 174, .2);--vscode-merge-incomingHeaderBackground: rgba(64, 166, 255, .5);--vscode-merge-incomingContentBackground: rgba(64, 166, 255, .2);--vscode-merge-commonHeaderBackground: rgba(96, 96, 96, .4);--vscode-merge-commonContentBackground: rgba(96, 96, 96, .16);--vscode-editorOverviewRuler-currentContentForeground: rgba(64, 200, 174, .5);--vscode-editorOverviewRuler-incomingContentForeground: rgba(64, 166, 255, .5);--vscode-editorOverviewRuler-commonContentForeground: rgba(96, 96, 96, .4);--vscode-editorOverviewRuler-findMatchForeground: rgba(209, 134, 22, .49);--vscode-editorOverviewRuler-selectionHighlightForeground: rgba(160, 160, 160, .8);--vscode-minimap-findMatchHighlight: #d18616;--vscode-minimap-selectionOccurrenceHighlight: #676767;--vscode-minimap-selectionHighlight: #264f78;--vscode-minimap-errorHighlight: rgba(255, 18, 18, .7);--vscode-minimap-warningHighlight: #cca700;--vscode-minimap-foregroundOpacity: #000000;--vscode-minimapSlider-background: rgba(121, 121, 121, .2);--vscode-minimapSlider-hoverBackground: rgba(100, 100, 100, .35);--vscode-minimapSlider-activeBackground: rgba(191, 191, 191, .2);--vscode-problemsErrorIcon-foreground: #f14c4c;--vscode-problemsWarningIcon-foreground: #cca700;--vscode-problemsInfoIcon-foreground: #3794ff;--vscode-charts-foreground: #cccccc;--vscode-charts-lines: rgba(204, 204, 204, .5);--vscode-charts-red: #f14c4c;--vscode-charts-blue: #3794ff;--vscode-charts-yellow: #cca700;--vscode-charts-orange: #d18616;--vscode-charts-green: #89d185;--vscode-charts-purple: #b180d7;--vscode-editor-lineHighlightBorder: #282828;--vscode-editor-rangeHighlightBackground: rgba(255, 255, 255, .04);--vscode-editor-symbolHighlightBackground: rgba(234, 92, 0, .33);--vscode-editorCursor-foreground: #aeafad;--vscode-editorWhitespace-foreground: rgba(227, 228, 226, .16);--vscode-editorIndentGuide-background: #404040;--vscode-editorIndentGuide-activeBackground: #707070;--vscode-editorLineNumber-foreground: #858585;--vscode-editorActiveLineNumber-foreground: #c6c6c6;--vscode-editorLineNumber-activeForeground: #c6c6c6;--vscode-editorRuler-foreground: #5a5a5a;--vscode-editorCodeLens-foreground: #999999;--vscode-editorBracketMatch-background: rgba(0, 100, 0, .1);--vscode-editorBracketMatch-border: #888888;--vscode-editorOverviewRuler-border: rgba(127, 127, 127, .3);--vscode-editorGutter-background: #1e1e1e;--vscode-editorUnnecessaryCode-opacity: rgba(0, 0, 0, .67);--vscode-editorGhostText-foreground: rgba(255, 255, 255, .34);--vscode-editorOverviewRuler-rangeHighlightForeground: rgba(0, 122, 204, .6);--vscode-editorOverviewRuler-errorForeground: rgba(255, 18, 18, .7);--vscode-editorOverviewRuler-warningForeground: #cca700;--vscode-editorOverviewRuler-infoForeground: #3794ff;--vscode-editorBracketHighlight-foreground1: #ffd700;--vscode-editorBracketHighlight-foreground2: #da70d6;--vscode-editorBracketHighlight-foreground3: #179fff;--vscode-editorBracketHighlight-foreground4: rgba(0, 0, 0, 0);--vscode-editorBracketHighlight-foreground5: rgba(0, 0, 0, 0);--vscode-editorBracketHighlight-foreground6: rgba(0, 0, 0, 0);--vscode-editorBracketHighlight-unexpectedBracket\.foreground: rgba(255, 18, 18, .8);--vscode-editorBracketPairGuide-background1: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background2: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background3: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background4: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background5: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-background6: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground1: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground2: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground3: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground4: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground5: rgba(0, 0, 0, 0);--vscode-editorBracketPairGuide-activeBackground6: rgba(0, 0, 0, 0);--vscode-editorUnicodeHighlight-border: #bd9b03;--vscode-editorUnicodeHighlight-background: rgba(189, 155, 3, .15);--vscode-symbolIcon-arrayForeground: #cccccc;--vscode-symbolIcon-booleanForeground: #cccccc;--vscode-symbolIcon-classForeground: #ee9d28;--vscode-symbolIcon-colorForeground: #cccccc;--vscode-symbolIcon-constantForeground: #cccccc;--vscode-symbolIcon-constructorForeground: #b180d7;--vscode-symbolIcon-enumeratorForeground: #ee9d28;--vscode-symbolIcon-enumeratorMemberForeground: #75beff;--vscode-symbolIcon-eventForeground: #ee9d28;--vscode-symbolIcon-fieldForeground: #75beff;--vscode-symbolIcon-fileForeground: #cccccc;--vscode-symbolIcon-folderForeground: #cccccc;--vscode-symbolIcon-functionForeground: #b180d7;--vscode-symbolIcon-interfaceForeground: #75beff;--vscode-symbolIcon-keyForeground: #cccccc;--vscode-symbolIcon-keywordForeground: #cccccc;--vscode-symbolIcon-methodForeground: #b180d7;--vscode-symbolIcon-moduleForeground: #cccccc;--vscode-symbolIcon-namespaceForeground: #cccccc;--vscode-symbolIcon-nullForeground: #cccccc;--vscode-symbolIcon-numberForeground: #cccccc;--vscode-symbolIcon-objectForeground: #cccccc;--vscode-symbolIcon-operatorForeground: #cccccc;--vscode-symbolIcon-packageForeground: #cccccc;--vscode-symbolIcon-propertyForeground: #cccccc;--vscode-symbolIcon-referenceForeground: #cccccc;--vscode-symbolIcon-snippetForeground: #cccccc;--vscode-symbolIcon-stringForeground: #cccccc;--vscode-symbolIcon-structForeground: #cccccc;--vscode-symbolIcon-textForeground: #cccccc;--vscode-symbolIcon-typeParameterForeground: #cccccc;--vscode-symbolIcon-unitForeground: #cccccc;--vscode-symbolIcon-variableForeground: #75beff;--vscode-editorHoverWidget-highlightForeground: #2aaaff;--vscode-editorOverviewRuler-bracketMatchForeground: #a0a0a0;--vscode-editor-foldBackground: rgba(38, 79, 120, .3);--vscode-editorGutter-foldingControlForeground: #c5c5c5;--vscode-editor-linkedEditingBackground: rgba(255, 0, 0, .3);--vscode-editor-wordHighlightBackground: rgba(87, 87, 87, .72);--vscode-editor-wordHighlightStrongBackground: rgba(0, 73, 114, .72);--vscode-editorOverviewRuler-wordHighlightForeground: rgba(160, 160, 160, .8);--vscode-editorOverviewRuler-wordHighlightStrongForeground: rgba(192, 160, 192, .8);--vscode-peekViewTitle-background: rgba(55, 148, 255, .1);--vscode-peekViewTitleLabel-foreground: #ffffff;--vscode-peekViewTitleDescription-foreground: rgba(204, 204, 204, .7);--vscode-peekView-border: #3794ff;--vscode-peekViewResult-background: #252526;--vscode-peekViewResult-lineForeground: #bbbbbb;--vscode-peekViewResult-fileForeground: #ffffff;--vscode-peekViewResult-selectionBackground: rgba(51, 153, 255, .2);--vscode-peekViewResult-selectionForeground: #ffffff;--vscode-peekViewEditor-background: #001f33;--vscode-peekViewEditorGutter-background: #001f33;--vscode-peekViewResult-matchHighlightBackground: rgba(234, 92, 0, .3);--vscode-peekViewEditor-matchHighlightBackground: rgba(255, 143, 0, .6);--vscode-editorMarkerNavigationError-background: #f14c4c;--vscode-editorMarkerNavigationError-headerBackground: rgba(241, 76, 76, .1);--vscode-editorMarkerNavigationWarning-background: #cca700;--vscode-editorMarkerNavigationWarning-headerBackground: rgba(204, 167, 0, .1);--vscode-editorMarkerNavigationInfo-background: #3794ff;--vscode-editorMarkerNavigationInfo-headerBackground: rgba(55, 148, 255, .1);--vscode-editorMarkerNavigation-background: #1e1e1e;--vscode-editorSuggestWidget-background: #252526;--vscode-editorSuggestWidget-border: #454545;--vscode-editorSuggestWidget-foreground: #d4d4d4;--vscode-editorSuggestWidget-selectedForeground: #ffffff;--vscode-editorSuggestWidget-selectedIconForeground: #ffffff;--vscode-editorSuggestWidget-selectedBackground: #04395e;--vscode-editorSuggestWidget-highlightForeground: #2aaaff;--vscode-editorSuggestWidget-focusHighlightForeground: #2aaaff;--vscode-editorSuggestWidgetStatus-foreground: rgba(212, 212, 212, .5);--vscode-tab-activeBackground: #1e1e1e;--vscode-tab-unfocusedActiveBackground: #1e1e1e;--vscode-tab-inactiveBackground: #2d2d2d;--vscode-tab-unfocusedInactiveBackground: #2d2d2d;--vscode-tab-activeForeground: #ffffff;--vscode-tab-inactiveForeground: rgba(255, 255, 255, .5);--vscode-tab-unfocusedActiveForeground: rgba(255, 255, 255, .5);--vscode-tab-unfocusedInactiveForeground: rgba(255, 255, 255, .25);--vscode-tab-border: #252526;--vscode-tab-lastPinnedBorder: rgba(204, 204, 204, .2);--vscode-tab-activeModifiedBorder: #3399cc;--vscode-tab-inactiveModifiedBorder: rgba(51, 153, 204, .5);--vscode-tab-unfocusedActiveModifiedBorder: rgba(51, 153, 204, .5);--vscode-tab-unfocusedInactiveModifiedBorder: rgba(51, 153, 204, .25);--vscode-editorPane-background: #1e1e1e;--vscode-editorGroupHeader-tabsBackground: #252526;--vscode-editorGroupHeader-noTabsBackground: #1e1e1e;--vscode-editorGroup-border: #444444;--vscode-editorGroup-dropBackground: rgba(83, 89, 93, .5);--vscode-editorGroup-dropIntoPromptForeground: #cccccc;--vscode-editorGroup-dropIntoPromptBackground: #252526;--vscode-sideBySideEditor-horizontalBorder: #444444;--vscode-sideBySideEditor-verticalBorder: #444444;--vscode-panel-background: #1e1e1e;--vscode-panel-border: rgba(128, 128, 128, .35);--vscode-panelTitle-activeForeground: #e7e7e7;--vscode-panelTitle-inactiveForeground: rgba(231, 231, 231, .6);--vscode-panelTitle-activeBorder: #e7e7e7;--vscode-panel-dropBorder: #e7e7e7;--vscode-panelSection-dropBackground: rgba(83, 89, 93, .5);--vscode-panelSectionHeader-background: rgba(128, 128, 128, .2);--vscode-panelSection-border: rgba(128, 128, 128, .35);--vscode-banner-background: #04395e;--vscode-banner-foreground: #ffffff;--vscode-banner-iconForeground: #3794ff;--vscode-statusBar-foreground: #ffffff;--vscode-statusBar-noFolderForeground: #ffffff;--vscode-statusBar-background: #007acc;--vscode-statusBar-noFolderBackground: #68217a;--vscode-statusBar-focusBorder: #ffffff;--vscode-statusBarItem-activeBackground: rgba(255, 255, 255, .18);--vscode-statusBarItem-focusBorder: #ffffff;--vscode-statusBarItem-hoverBackground: rgba(255, 255, 255, .12);--vscode-statusBarItem-compactHoverBackground: rgba(255, 255, 255, .2);--vscode-statusBarItem-prominentForeground: #ffffff;--vscode-statusBarItem-prominentBackground: rgba(0, 0, 0, .5);--vscode-statusBarItem-prominentHoverBackground: rgba(0, 0, 0, .3);--vscode-statusBarItem-errorBackground: #c72e0f;--vscode-statusBarItem-errorForeground: #ffffff;--vscode-statusBarItem-warningBackground: #7a6400;--vscode-statusBarItem-warningForeground: #ffffff;--vscode-activityBar-background: #333333;--vscode-activityBar-foreground: #ffffff;--vscode-activityBar-inactiveForeground: rgba(255, 255, 255, .4);--vscode-activityBar-activeBorder: #ffffff;--vscode-activityBar-dropBorder: #ffffff;--vscode-activityBarBadge-background: #007acc;--vscode-activityBarBadge-foreground: #ffffff;--vscode-statusBarItem-remoteBackground: #16825d;--vscode-statusBarItem-remoteForeground: #ffffff;--vscode-extensionBadge-remoteBackground: #007acc;--vscode-extensionBadge-remoteForeground: #ffffff;--vscode-sideBar-background: #252526;--vscode-sideBarTitle-foreground: #bbbbbb;--vscode-sideBar-dropBackground: rgba(83, 89, 93, .5);--vscode-sideBarSectionHeader-background: rgba(0, 0, 0, 0);--vscode-sideBarSectionHeader-border: rgba(204, 204, 204, .2);--vscode-titleBar-activeForeground: #cccccc;--vscode-titleBar-inactiveForeground: rgba(204, 204, 204, .6);--vscode-titleBar-activeBackground: #3c3c3c;--vscode-titleBar-inactiveBackground: rgba(60, 60, 60, .6);--vscode-menubar-selectionForeground: #cccccc;--vscode-menubar-selectionBackground: rgba(90, 93, 94, .31);--vscode-notifications-foreground: #cccccc;--vscode-notifications-background: #252526;--vscode-notificationLink-foreground: #3794ff;--vscode-notificationCenterHeader-background: #303031;--vscode-notifications-border: #303031;--vscode-notificationsErrorIcon-foreground: #f14c4c;--vscode-notificationsWarningIcon-foreground: #cca700;--vscode-notificationsInfoIcon-foreground: #3794ff;--vscode-commandCenter-foreground: #cccccc;--vscode-commandCenter-activeForeground: #cccccc;--vscode-commandCenter-activeBackground: rgba(90, 93, 94, .31);--vscode-commandCenter-border: rgba(128, 128, 128, .35);--vscode-editorCommentsWidget-resolvedBorder: rgba(204, 204, 204, .5);--vscode-editorCommentsWidget-unresolvedBorder: #3794ff;--vscode-editorCommentsWidget-rangeBackground: rgba(55, 148, 255, .1);--vscode-editorCommentsWidget-rangeBorder: rgba(55, 148, 255, .4);--vscode-editorCommentsWidget-rangeActiveBackground: rgba(55, 148, 255, .1);--vscode-editorCommentsWidget-rangeActiveBorder: rgba(55, 148, 255, .4);--vscode-editorGutter-commentRangeForeground: #37373d;--vscode-debugToolBar-background: #333333;--vscode-debugIcon-startForeground: #89d185;--vscode-editor-stackFrameHighlightBackground: rgba(255, 255, 0, .2);--vscode-editor-focusedStackFrameHighlightBackground: rgba(122, 189, 122, .3);--vscode-mergeEditor-change\.background: rgba(155, 185, 85, .2);--vscode-mergeEditor-change\.word\.background: rgba(156, 204, 44, .2);--vscode-mergeEditor-conflict\.unhandledUnfocused\.border: rgba(255, 166, 0, .48);--vscode-mergeEditor-conflict\.unhandledFocused\.border: #ffa600;--vscode-mergeEditor-conflict\.handledUnfocused\.border: rgba(134, 134, 134, .29);--vscode-mergeEditor-conflict\.handledFocused\.border: rgba(193, 193, 193, .8);--vscode-mergeEditor-conflict\.handled\.minimapOverViewRuler: rgba(173, 172, 168, .93);--vscode-mergeEditor-conflict\.unhandled\.minimapOverViewRuler: #fcba03;--vscode-mergeEditor-conflictingLines\.background: rgba(255, 234, 0, .28);--vscode-settings-headerForeground: #e7e7e7;--vscode-settings-modifiedItemIndicator: #0c7d9d;--vscode-settings-headerBorder: rgba(128, 128, 128, .35);--vscode-settings-sashBorder: rgba(128, 128, 128, .35);--vscode-settings-dropdownBackground: #3c3c3c;--vscode-settings-dropdownForeground: #f0f0f0;--vscode-settings-dropdownBorder: #3c3c3c;--vscode-settings-dropdownListBorder: #454545;--vscode-settings-checkboxBackground: #3c3c3c;--vscode-settings-checkboxForeground: #f0f0f0;--vscode-settings-checkboxBorder: #3c3c3c;--vscode-settings-textInputBackground: #3c3c3c;--vscode-settings-textInputForeground: #cccccc;--vscode-settings-numberInputBackground: #3c3c3c;--vscode-settings-numberInputForeground: #cccccc;--vscode-settings-focusedRowBackground: rgba(42, 45, 46, .6);--vscode-settings-rowHoverBackground: rgba(42, 45, 46, .3);--vscode-settings-focusedRowBorder: rgba(255, 255, 255, .12);--vscode-terminal-foreground: #cccccc;--vscode-terminal-selectionBackground: #264f78;--vscode-terminal-inactiveSelectionBackground: #3a3d41;--vscode-terminalCommandDecoration-defaultBackground: rgba(255, 255, 255, .25);--vscode-terminalCommandDecoration-successBackground: #1b81a8;--vscode-terminalCommandDecoration-errorBackground: #f14c4c;--vscode-terminalOverviewRuler-cursorForeground: rgba(160, 160, 160, .8);--vscode-terminal-border: rgba(128, 128, 128, .35);--vscode-terminal-findMatchBackground: #515c6a;--vscode-terminal-findMatchHighlightBackground: rgba(234, 92, 0, .33);--vscode-terminalOverviewRuler-findMatchForeground: rgba(209, 134, 22, .49);--vscode-terminal-dropBackground: rgba(83, 89, 93, .5);--vscode-testing-iconFailed: #f14c4c;--vscode-testing-iconErrored: #f14c4c;--vscode-testing-iconPassed: #73c991;--vscode-testing-runAction: #73c991;--vscode-testing-iconQueued: #cca700;--vscode-testing-iconUnset: #848484;--vscode-testing-iconSkipped: #848484;--vscode-testing-peekBorder: #f14c4c;--vscode-testing-peekHeaderBackground: rgba(241, 76, 76, .1);--vscode-testing-message\.error\.decorationForeground: #f14c4c;--vscode-testing-message\.error\.lineBackground: rgba(255, 0, 0, .2);--vscode-testing-message\.info\.decorationForeground: rgba(212, 212, 212, .5);--vscode-welcomePage-tileBackground: #252526;--vscode-welcomePage-tileHoverBackground: #2c2c2d;--vscode-welcomePage-tileShadow: rgba(0, 0, 0, .36);--vscode-welcomePage-progress\.background: #3c3c3c;--vscode-welcomePage-progress\.foreground: #3794ff;--vscode-debugExceptionWidget-border: #a31515;--vscode-debugExceptionWidget-background: #420b0d;--vscode-ports-iconRunningProcessForeground: #369432;--vscode-statusBar-debuggingBackground: #cc6633;--vscode-statusBar-debuggingForeground: #ffffff;--vscode-editor-inlineValuesForeground: rgba(255, 255, 255, .5);--vscode-editor-inlineValuesBackground: rgba(255, 200, 0, .2);--vscode-editorGutter-modifiedBackground: #1b81a8;--vscode-editorGutter-addedBackground: #487e02;--vscode-editorGutter-deletedBackground: #f14c4c;--vscode-minimapGutter-modifiedBackground: #1b81a8;--vscode-minimapGutter-addedBackground: #487e02;--vscode-minimapGutter-deletedBackground: #f14c4c;--vscode-editorOverviewRuler-modifiedForeground: rgba(27, 129, 168, .6);--vscode-editorOverviewRuler-addedForeground: rgba(72, 126, 2, .6);--vscode-editorOverviewRuler-deletedForeground: rgba(241, 76, 76, .6);--vscode-debugIcon-breakpointForeground: #e51400;--vscode-debugIcon-breakpointDisabledForeground: #848484;--vscode-debugIcon-breakpointUnverifiedForeground: #848484;--vscode-debugIcon-breakpointCurrentStackframeForeground: #ffcc00;--vscode-debugIcon-breakpointStackframeForeground: #89d185;--vscode-notebook-cellBorderColor: #37373d;--vscode-notebook-focusedEditorBorder: #007fd4;--vscode-notebookStatusSuccessIcon-foreground: #89d185;--vscode-notebookStatusErrorIcon-foreground: #f48771;--vscode-notebookStatusRunningIcon-foreground: #cccccc;--vscode-notebook-cellToolbarSeparator: rgba(128, 128, 128, .35);--vscode-notebook-selectedCellBackground: #37373d;--vscode-notebook-selectedCellBorder: #37373d;--vscode-notebook-focusedCellBorder: #007fd4;--vscode-notebook-inactiveFocusedCellBorder: #37373d;--vscode-notebook-cellStatusBarItemHoverBackground: rgba(255, 255, 255, .15);--vscode-notebook-cellInsertionIndicator: #007fd4;--vscode-notebookScrollbarSlider-background: rgba(121, 121, 121, .4);--vscode-notebookScrollbarSlider-hoverBackground: rgba(100, 100, 100, .7);--vscode-notebookScrollbarSlider-activeBackground: rgba(191, 191, 191, .4);--vscode-notebook-symbolHighlightBackground: rgba(255, 255, 255, .04);--vscode-notebook-cellEditorBackground: #252526;--vscode-notebook-editorBackground: #1e1e1e;--vscode-keybindingTable-headerBackground: rgba(204, 204, 204, .04);--vscode-keybindingTable-rowsBackground: rgba(204, 204, 204, .04);--vscode-scm-providerBorder: #454545;--vscode-debugTokenExpression-name: #c586c0;--vscode-debugTokenExpression-value: rgba(204, 204, 204, .6);--vscode-debugTokenExpression-string: #ce9178;--vscode-debugTokenExpression-boolean: #4e94ce;--vscode-debugTokenExpression-number: #b5cea8;--vscode-debugTokenExpression-error: #f48771;--vscode-debugView-exceptionLabelForeground: #cccccc;--vscode-debugView-exceptionLabelBackground: #6c2022;--vscode-debugView-stateLabelForeground: #cccccc;--vscode-debugView-stateLabelBackground: rgba(136, 136, 136, .27);--vscode-debugView-valueChangedHighlight: #569cd6;--vscode-debugConsole-infoForeground: #3794ff;--vscode-debugConsole-warningForeground: #cca700;--vscode-debugConsole-errorForeground: #f48771;--vscode-debugConsole-sourceForeground: #cccccc;--vscode-debugConsoleInputIcon-foreground: #cccccc;--vscode-debugIcon-pauseForeground: #75beff;--vscode-debugIcon-stopForeground: #f48771;--vscode-debugIcon-disconnectForeground: #f48771;--vscode-debugIcon-restartForeground: #89d185;--vscode-debugIcon-stepOverForeground: #75beff;--vscode-debugIcon-stepIntoForeground: #75beff;--vscode-debugIcon-stepOutForeground: #75beff;--vscode-debugIcon-continueForeground: #75beff;--vscode-debugIcon-stepBackForeground: #75beff;--vscode-extensionButton-prominentBackground: #0e639c;--vscode-extensionButton-prominentForeground: #ffffff;--vscode-extensionButton-prominentHoverBackground: #1177bb;--vscode-extensionIcon-starForeground: #ff8e00;--vscode-extensionIcon-verifiedForeground: #3794ff;--vscode-extensionIcon-preReleaseForeground: #1d9271;--vscode-extensionIcon-sponsorForeground: #d758b3;--vscode-terminal-ansiBlack: #000000;--vscode-terminal-ansiRed: #cd3131;--vscode-terminal-ansiGreen: #0dbc79;--vscode-terminal-ansiYellow: #e5e510;--vscode-terminal-ansiBlue: #2472c8;--vscode-terminal-ansiMagenta: #bc3fbc;--vscode-terminal-ansiCyan: #11a8cd;--vscode-terminal-ansiWhite: #e5e5e5;--vscode-terminal-ansiBrightBlack: #666666;--vscode-terminal-ansiBrightRed: #f14c4c;--vscode-terminal-ansiBrightGreen: #23d18b;--vscode-terminal-ansiBrightYellow: #f5f543;--vscode-terminal-ansiBrightBlue: #3b8eea;--vscode-terminal-ansiBrightMagenta: #d670d6;--vscode-terminal-ansiBrightCyan: #29b8db;--vscode-terminal-ansiBrightWhite: #e5e5e5;--vscode-interactive-activeCodeBorder: #3794ff;--vscode-interactive-inactiveCodeBorder: #37373d;--vscode-gitDecoration-addedResourceForeground: #81b88b;--vscode-gitDecoration-modifiedResourceForeground: #e2c08d;--vscode-gitDecoration-deletedResourceForeground: #c74e39;--vscode-gitDecoration-renamedResourceForeground: #73c991;--vscode-gitDecoration-untrackedResourceForeground: #73c991;--vscode-gitDecoration-ignoredResourceForeground: #8c8c8c;--vscode-gitDecoration-stageModifiedResourceForeground: #e2c08d;--vscode-gitDecoration-stageDeletedResourceForeground: #c74e39;--vscode-gitDecoration-conflictingResourceForeground: #e4676b;--vscode-gitDecoration-submoduleResourceForeground: #8db9e2}.xterm-wrapper{padding-left:5px}.xterm-wrapper .xterm-viewport{background-color:var(--vscode-panel-background)!important;color:var(--vscode-foreground)!important}
2 |
--------------------------------------------------------------------------------
/playwright-report/trace/uiMode.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Playwright Test
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/playwright-report/trace/xtermModule.6428296b.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2014 The xterm.js authors. All rights reserved.
3 | * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
4 | * https://github.com/chjj/term.js
5 | * @license MIT
6 | *
7 | * Permission is hereby granted, free of charge, to any person obtaining a copy
8 | * of this software and associated documentation files (the "Software"), to deal
9 | * in the Software without restriction, including without limitation the rights
10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | * copies of the Software, and to permit persons to whom the Software is
12 | * furnished to do so, subject to the following conditions:
13 | *
14 | * The above copyright notice and this permission notice shall be included in
15 | * all copies or substantial portions of the Software.
16 | *
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | * THE SOFTWARE.
24 | *
25 | * Originally forked from (with the author's permission):
26 | * Fabrice Bellard's javascript vt100 for jslinux:
27 | * http://bellard.org/jslinux/
28 | * Copyright (c) 2011 Fabrice Bellard
29 | * The original design remains. The terminal itself
30 | * has been extended to include xterm CSI codes, among
31 | * other features.
32 | */.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;z-index:10;color:transparent}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:.5}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-decoration-overview-ruler{z-index:7;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}
33 |
--------------------------------------------------------------------------------
/playwright.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig, devices } from '@playwright/test';
2 | import * as process from 'process';
3 |
4 | /**
5 | * Read environment variables from file.
6 | * https://github.com/motdotla/dotenv
7 | */
8 | // require('dotenv').config();
9 |
10 | /**
11 | * See https://playwright.dev/docs/test-configuration.
12 | */
13 | const config = defineConfig({
14 | testDir: './tests/e2e',
15 | /* Run tests in files in parallel */
16 | fullyParallel: true,
17 | /* Fail the build on CI if you accidentally left test.only in the source code. */
18 | forbidOnly: !!process.env.CI,
19 | /* Retry on CI only */
20 | retries: process.env.CI ? 1 : 0,
21 | /* Opt out of parallel tests on CI. */
22 | workers: process.env.CI ? 1 : undefined,
23 | /* Reporter to use. See https://playwright.dev/docs/test-reporters */
24 | reporter: 'html',
25 | snapshotPathTemplate: `{testDir}/__screenshots__/${
26 | process.env.REMOTE_PROVIDER ?? 'local'
27 | }{/projectName}/{testFilePath}/{arg}{ext}`,
28 | /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
29 | use: {
30 | /* Base URL to use in actions like `await page.goto('/')`. */
31 | baseURL: process.env.PLAYWRIGHT_TEST_BASE_URL || 'http://127.0.0.1:3000',
32 |
33 | /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
34 | trace: process.env.CI ? 'on-first-retry' : 'on',
35 | screenshot: 'only-on-failure',
36 | },
37 |
38 | /* Configure projects for major browsers */
39 | projects: [
40 | {
41 | name: 'chromium',
42 | use: { ...devices['Desktop Chrome'] },
43 | },
44 | //
45 | // {
46 | // name: 'firefox',
47 | // use: { ...devices['Desktop Firefox'] },
48 | // },
49 | //
50 | // {
51 | // name: 'webkit',
52 | // use: { ...devices['Desktop Safari'] },
53 | // },
54 |
55 | /* Test against mobile viewports. */
56 | // {
57 | // name: 'Mobile Chrome',
58 | // use: { ...devices['Pixel 5'] },
59 | // },
60 | // {
61 | // name: 'Mobile Safari',
62 | // use: { ...devices['iPhone 12'] },
63 | // },
64 |
65 | /* Test against branded browsers. */
66 | // {
67 | // name: 'Microsoft Edge',
68 | // use: { ...devices['Desktop Edge'], channel: 'msedge' },
69 | // },
70 | // {
71 | // name: 'Google Chrome',
72 | // use: { ..devices['Desktop Chrome'], channel: 'chrome' },
73 | // },
74 | ],
75 |
76 | /* Run your local dev server before starting the tests */
77 | webServer: process.env.REMOTE_PROVIDER
78 | ? undefined
79 | : {
80 | command: 'yarn start',
81 | url: 'http://127.0.0.1:3000',
82 | },
83 | });
84 |
85 | export default config;
86 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | content: [
3 | './app/**/*.{js,ts,jsx,tsx}',
4 | './src/**/*.{js,ts,jsx,tsx}',
5 | './components/**/*.{js,ts,jsx,tsx}',
6 | ],
7 | plugins: {
8 | tailwindcss: {},
9 | autoprefixer: {},
10 | },
11 | };
12 |
--------------------------------------------------------------------------------
/public/images/placeholder.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/public/images/placeholder.jpg
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | './node_modules/flowbite-react/**/*.js',
5 | './app/**/*.{js,ts,jsx,tsx}',
6 | './pages/**/*.{js,ts,jsx,tsx}',
7 | './components/**/*.{js,ts,jsx,tsx}',
8 | ],
9 | theme: {
10 | extend: {
11 | fontSize: {
12 | 12: '12px',
13 | },
14 | colors: {
15 | 'purple-site': '#8751BD',
16 | 'blue-site': '#2859B6',
17 | },
18 | keyframes: {
19 | fade: {
20 | '0%': { opacity: 0 },
21 | '50%': { opacity: 0.5 },
22 | '100%': { opacity: 1 },
23 | },
24 | },
25 | animation: {
26 | 'fade-in': 'fade 3s ease-in-out',
27 | },
28 | },
29 | },
30 | plugins: [require('flowbite/plugin')],
31 | };
32 |
--------------------------------------------------------------------------------
/test-results/home-Home-Page-look-and-feel---highlights-chromium/trace.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/test-results/home-Home-Page-look-and-feel---highlights-chromium/trace.zip
--------------------------------------------------------------------------------
/test-results/home-Home-Page-navigation---Our-Initiatives-navigates-to-Projects-page-chromium/trace.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/test-results/home-Home-Page-navigation---Our-Initiatives-navigates-to-Projects-page-chromium/trace.zip
--------------------------------------------------------------------------------
/test-results/news-News-Page-look-and-feel---News-navigates-to-News-Details--chromium/trace.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/test-results/news-News-Page-look-and-feel---News-navigates-to-News-Details--chromium/trace.zip
--------------------------------------------------------------------------------
/test-results/news-News-Page-look-and-feel---news-chromium/trace.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/test-results/news-News-Page-look-and-feel---news-chromium/trace.zip
--------------------------------------------------------------------------------
/test-results/projects-Projects-Page-look-and-feel---Projects-navigates-to-Project-Details--chromium/trace.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/test-results/projects-Projects-Page-look-and-feel---Projects-navigates-to-Project-Details--chromium/trace.zip
--------------------------------------------------------------------------------
/test-results/projects-Projects-Page-look-and-feel---projects-chromium/trace.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/test-results/projects-Projects-Page-look-and-feel---projects-chromium/trace.zip
--------------------------------------------------------------------------------
/test-results/team-Team-Page-look-and-feel---team-chromium/trace.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/test-results/team-Team-Page-look-and-feel---team-chromium/trace.zip
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/.gitignore:
--------------------------------------------------------------------------------
1 | # Since each browser version might render a bit differently local run results are not stored in git
2 | /local
3 |
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/netlify/chromium/home.spec.ts/home-highlights.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/netlify/chromium/home.spec.ts/home-highlights.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/netlify/chromium/news.spec.ts/news-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/netlify/chromium/news.spec.ts/news-details.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/netlify/chromium/news.spec.ts/news-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/netlify/chromium/news.spec.ts/news-list.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/netlify/chromium/projects.spec.ts/project-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/netlify/chromium/projects.spec.ts/project-details.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/netlify/chromium/projects.spec.ts/project-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/netlify/chromium/projects.spec.ts/project-list.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/netlify/chromium/team.spec.ts/team-members.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/netlify/chromium/team.spec.ts/team-members.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/vercel/chromium/home.spec.ts/home-highlights.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/vercel/chromium/home.spec.ts/home-highlights.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/vercel/chromium/news.spec.ts/news-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/vercel/chromium/news.spec.ts/news-details.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/vercel/chromium/news.spec.ts/news-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/vercel/chromium/news.spec.ts/news-list.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/vercel/chromium/projects.spec.ts/project-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/vercel/chromium/projects.spec.ts/project-details.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/vercel/chromium/projects.spec.ts/project-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/vercel/chromium/projects.spec.ts/project-list.png
--------------------------------------------------------------------------------
/tests/e2e/__screenshots__/vercel/chromium/team.spec.ts/team-members.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wix-incubator/wix-cms-nextjs-template/c4f19931e9b51685eed64432e35fe0974e47d9aa/tests/e2e/__screenshots__/vercel/chromium/team.spec.ts/team-members.png
--------------------------------------------------------------------------------
/tests/e2e/home.spec.ts:
--------------------------------------------------------------------------------
1 | import { test, expect } from '@playwright/test';
2 | import testIds from '@app/utils/test-ids';
3 |
4 | test.describe('Home Page', () => {
5 | const PATH = '/';
6 |
7 | test('look and feel - highlights', async ({ page }) => {
8 | await page.goto(PATH);
9 |
10 | await expect(
11 | await page.getByTestId(testIds.HOME_PAGE.HIGHLIGHTS)
12 | ).toHaveScreenshot('home-highlights.png', {
13 | mask: [page.getByTestId(testIds.LAYOUT.HEADER)],
14 | });
15 | });
16 |
17 | test('navigation - "Our Initiatives" navigates to "Projects" page', async ({
18 | page,
19 | }) => {
20 | await page.goto(PATH);
21 |
22 | await page.getByTestId(testIds.HOME_PAGE.OUR_INITIATIVES_CTA).click();
23 |
24 | await expect(
25 | await page.getByTestId(testIds.PROJECTS_PAGE.HEADER)
26 | ).toBeVisible();
27 | });
28 | });
29 |
--------------------------------------------------------------------------------
/tests/e2e/news.spec.ts:
--------------------------------------------------------------------------------
1 | import { test, expect } from '@playwright/test';
2 | import testIds from '@app/utils/test-ids';
3 |
4 | test.describe('News Page', () => {
5 | const PATH = '/news';
6 |
7 | test('look and feel - news', async ({ page }) => {
8 | await page.goto(PATH);
9 |
10 | await expect(
11 | await page.getByTestId(testIds.NEWS_PAGE.NEWS_LIST)
12 | ).toHaveScreenshot('news-list.png', {
13 | mask: [page.getByTestId(testIds.LAYOUT.HEADER)],
14 | });
15 | });
16 |
17 | test('look and feel - "News" navigates to "News Details"', async ({
18 | page,
19 | }) => {
20 | await page.goto(PATH);
21 |
22 | await page.getByTestId(testIds.NEWS_PAGE.NEWS_ITEM_CTA).first().click();
23 |
24 | await expect(
25 | await page.getByTestId(testIds.NEWS_DETAILS_PAGE.CONTAINER)
26 | ).toBeVisible();
27 | await expect(
28 | await page.getByTestId(testIds.NEWS_DETAILS_PAGE.CONTAINER)
29 | ).toHaveScreenshot('news-details.png', {
30 | mask: [page.getByTestId(testIds.LAYOUT.HEADER)],
31 | });
32 | });
33 | });
34 |
--------------------------------------------------------------------------------
/tests/e2e/projects.spec.ts:
--------------------------------------------------------------------------------
1 | import { test, expect } from '@playwright/test';
2 | import testIds from '@app/utils/test-ids';
3 |
4 | test.describe('Projects Page', () => {
5 | const PATH = '/projects';
6 |
7 | test('look and feel - projects', async ({ page }) => {
8 | await page.goto(PATH);
9 |
10 | await expect(
11 | await page.getByTestId(testIds.PROJECTS_PAGE.PROJECT_LIST)
12 | ).toHaveScreenshot('project-list.png', {
13 | mask: [page.getByTestId(testIds.LAYOUT.HEADER)],
14 | });
15 | });
16 |
17 | test('look and feel - "Projects" navigates to "Project Details"', async ({
18 | page,
19 | }) => {
20 | await page.goto(PATH);
21 |
22 | await page
23 | .getByTestId(testIds.PROJECTS_PAGE.PROJECT_ITEM_CTA)
24 | .first()
25 | .click();
26 |
27 | await expect(
28 | await page.getByTestId(testIds.PROJECT_DETAILS_PAGE.CONTAINER)
29 | ).toBeVisible();
30 | await expect(
31 | await page.getByTestId(testIds.PROJECT_DETAILS_PAGE.CONTAINER)
32 | ).toHaveScreenshot('project-details.png', {
33 | mask: [page.getByTestId(testIds.LAYOUT.HEADER)],
34 | });
35 | });
36 | });
37 |
--------------------------------------------------------------------------------
/tests/e2e/team.spec.ts:
--------------------------------------------------------------------------------
1 | import { test, expect } from '@playwright/test';
2 | import testIds from '@app/utils/test-ids';
3 |
4 | test.describe('Team Page', () => {
5 | const PATH = '/team';
6 |
7 | test('look and feel - team', async ({ page }) => {
8 | await page.goto(PATH);
9 |
10 | await expect(
11 | await page.getByTestId(testIds.TEAM_PAGE.TEAM_MEMBERS)
12 | ).toHaveScreenshot('team-members.png', {
13 | mask: [page.getByTestId(testIds.LAYOUT.HEADER)],
14 | });
15 | });
16 | });
17 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".",
4 | "paths": {
5 | "@statics/*": ["public/*"],
6 | "@app/*": ["app/*"],
7 | "@tests/*": ["tests/*"],
8 | "@api/*": ["src/pages/api/*"]
9 | },
10 | "target": "es2015",
11 | "lib": ["dom", "dom.iterable", "esnext"],
12 | "allowJs": true,
13 | "skipLibCheck": true,
14 | "strict": true,
15 | "forceConsistentCasingInFileNames": true,
16 | "noEmit": true,
17 | "esModuleInterop": true,
18 | "module": "esnext",
19 | "moduleResolution": "node",
20 | "resolveJsonModule": true,
21 | "isolatedModules": true,
22 | "jsx": "preserve",
23 | "incremental": true,
24 | "plugins": [
25 | {
26 | "name": "next"
27 | }
28 | ]
29 | },
30 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
31 | "exclude": ["node_modules"]
32 | }
33 |
--------------------------------------------------------------------------------