diff --git a/.eslintignore b/.eslintignore index d168d82d7a56..e540ff4579a1 100644 --- a/.eslintignore +++ b/.eslintignore @@ -25,6 +25,7 @@ packages/next-codemod/**/*.d.ts packages/next-env/**/*.d.ts packages/create-next-app/templates/** test/integration/eslint/** +test/integration/script-loader/**/* test/development/basic/legacy-decorators/**/* test/production/emit-decorator-metadata/**/*.js test-timings.json diff --git a/.eslintrc.json b/.eslintrc.json index 26824c94ba66..224a065e585b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -15,7 +15,7 @@ "jsx": true }, "babelOptions": { - "presets": ["@babel/preset-env", "@babel/preset-react"], + "presets": ["next/babel"], "caller": { // Eslint supports top level await when a parser for it is included. We enable the parser by default for Babel. "supportsTopLevelAwait": true diff --git a/.github/workflows/build_test_deploy.yml b/.github/workflows/build_test_deploy.yml index d30b8207ca2a..bf9b28cf3a04 100644 --- a/.github/workflows/build_test_deploy.yml +++ b/.github/workflows/build_test_deploy.yml @@ -97,7 +97,7 @@ jobs: if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: profile: minimal - toolchain: nightly-2021-11-15 + toolchain: nightly-2022-02-23 components: rustfmt, clippy - name: Cache cargo registry @@ -181,7 +181,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -211,7 +211,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -241,6 +241,52 @@ jobs: name: Run test/development if: ${{needs.build.outputs.docsChange != 'docs only change'}} + - name: Upload test trace + if: always() + uses: actions/upload-artifact@v2 + with: + name: test-trace + if-no-files-found: ignore + retention-days: 2 + path: | + test/traces + + testDevE2E: + name: Test Development (E2E) + runs-on: ubuntu-latest + needs: [build, build-native-dev] + env: + NEXT_TELEMETRY_DISABLED: 1 + NEXT_TEST_JOB: 1 + steps: + - name: Setup node + uses: actions/setup-node@v2 + if: ${{needs.build.outputs.docsChange != 'docs only change'}} + with: + node-version: 14 + + - run: echo ${{needs.build.outputs.docsChange}} + + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off + + - uses: actions/cache@v2 + if: ${{needs.build.outputs.docsChange != 'docs only change'}} + id: restore-build + with: + path: ./* + key: ${{ github.sha }}-${{ github.run_number }}-${{ github.run_attempt }} + + - uses: actions/download-artifact@v2 + if: ${{needs.build.outputs.docsChange != 'docs only change'}} + with: + name: next-swc-dev-binary + path: packages/next-swc/native + + - run: npm i -g playwright-chromium@1.14.1 && npx playwright install-deps + if: ${{needs.build.outputs.docsChange != 'docs only change'}} + - run: NEXT_TEST_MODE=dev node run-tests.js --type e2e name: Run test/e2e (dev) if: ${{needs.build.outputs.docsChange != 'docs only change'}} @@ -265,7 +311,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -295,6 +341,42 @@ jobs: name: Run test/production if: ${{needs.build.outputs.docsChange != 'docs only change'}} + testProdE2E: + name: Test Production (E2E) + runs-on: ubuntu-latest + needs: [build, build-native-dev] + env: + NEXT_TELEMETRY_DISABLED: 1 + NEXT_TEST_JOB: 1 + steps: + - name: Setup node + uses: actions/setup-node@v2 + if: ${{needs.build.outputs.docsChange != 'docs only change'}} + with: + node-version: 14 + + - run: echo ${{needs.build.outputs.docsChange}} + + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off + + - uses: actions/cache@v2 + if: ${{needs.build.outputs.docsChange != 'docs only change'}} + id: restore-build + with: + path: ./* + key: ${{ github.sha }}-${{ github.run_number }}-${{ github.run_attempt }} + + - uses: actions/download-artifact@v2 + if: ${{needs.build.outputs.docsChange != 'docs only change'}} + with: + name: next-swc-dev-binary + path: packages/next-swc/native + + - run: npm i -g playwright-chromium@1.14.1 && npx playwright install-deps + if: ${{needs.build.outputs.docsChange != 'docs only change'}} + - run: NEXT_TEST_MODE=start node run-tests.js --type e2e name: Run test/e2e (production) if: ${{needs.build.outputs.docsChange != 'docs only change'}} @@ -310,11 +392,11 @@ jobs: strategy: fail-fast: false matrix: - group: [1, 2, 3, 4, 5, 6] + group: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -331,6 +413,10 @@ jobs: path: ./* key: ${{ github.sha }}-${{ github.run_number }}-${{ github.run_attempt }} + - uses: pnpm/action-setup@v2.2.1 + with: + version: 6.32.2 + - uses: actions/download-artifact@v2 if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: @@ -340,7 +426,7 @@ jobs: - run: npm i -g playwright-chromium@1.14.1 && npx playwright install-deps if: ${{needs.build.outputs.docsChange != 'docs only change'}} - - run: xvfb-run node run-tests.js --timings -g ${{ matrix.group }}/6 + - run: xvfb-run node run-tests.js --timings -g ${{ matrix.group }}/18 if: ${{needs.build.outputs.docsChange != 'docs only change'}} - name: Upload test trace @@ -364,7 +450,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -414,7 +500,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -449,7 +535,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -493,7 +579,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -530,7 +616,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 17 check-latest: true @@ -563,7 +649,7 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} + if: ${{needs.build.outputs.docsChange != 'docs only change'}} with: node-version: 14 @@ -598,7 +684,6 @@ jobs: steps: - name: Setup node uses: actions/setup-node@v2 - if: ${{ steps.docs-change.outputs.docsChange != 'docs only change' }} with: node-version: 14 @@ -647,7 +732,7 @@ jobs: if: ${{ steps.docs-change.outputs.DOCS_CHANGE != 'docs only change' }} with: profile: minimal - toolchain: nightly-2021-11-15 + toolchain: nightly-2022-02-23 - name: Cache cargo registry uses: actions/cache@v2 @@ -726,7 +811,7 @@ jobs: if: ${{ steps.docs-change.outputs.DOCS_CHANGE != 'docs only change' }} uses: actions-rs/toolchain@v1 with: - toolchain: nightly-2021-11-15 + toolchain: nightly-2022-02-23 profile: minimal - run: cd packages/next-swc && cargo test if: ${{ steps.docs-change.outputs.DOCS_CHANGE != 'docs only change' }} @@ -804,8 +889,8 @@ jobs: # Node.js in Baidu need to compatible with `GLIBC_2.12` build: >- set -e && - rustup toolchain install nightly-2021-11-15 && - rustup default nightly-2021-11-15 && + rustup toolchain install nightly-2022-02-23 && + rustup default nightly-2022-02-23 && rustup target add x86_64-unknown-linux-gnu && npm i -g @napi-rs/cli@2.4.4 turbo@1.0.28 && turbo run build-native --cache-dir=".turbo" -- --release --target x86_64-unknown-linux-gnu --zig --zig-abi-suffix 2.12 && @@ -815,8 +900,8 @@ jobs: docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine build: >- set -e && - rustup toolchain install nightly-2021-11-15 && - rustup default nightly-2021-11-15 && + rustup toolchain install nightly-2022-02-23 && + rustup default nightly-2022-02-23 && rustup target add x86_64-unknown-linux-musl && npm i -g @napi-rs/cli@2.4.4 turbo@1.0.28 && turbo run build-native --cache-dir=".turbo" -- --release --target x86_64-unknown-linux-musl && @@ -837,8 +922,8 @@ jobs: docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine-zig build: >- set -e && - rustup toolchain install nightly-2021-11-15 && - rustup default nightly-2021-11-15 && + rustup toolchain install nightly-2022-02-23 && + rustup default nightly-2022-02-23 && rustup target add aarch64-unknown-linux-gnu && npm i -g @napi-rs/cli@2.4.4 turbo@1.0.28 && turbo run build-native --cache-dir=".turbo" -- --release --target aarch64-unknown-linux-gnu --zig --zig-abi-suffix 2.12 && @@ -878,8 +963,8 @@ jobs: build: >- set -e && npm i -g @napi-rs/cli@2.4.4 turbo@1.0.28 && - rustup toolchain install nightly-2021-11-15 && - rustup default nightly-2021-11-15 && + rustup toolchain install nightly-2022-02-23 && + rustup default nightly-2022-02-23 && rustup target add aarch64-unknown-linux-musl && turbo run build-native --cache-dir=".turbo" -- --release --target aarch64-unknown-linux-musl && llvm-strip -x packages/next-swc/native/next-swc.*.node @@ -945,7 +1030,7 @@ jobs: with: profile: minimal override: true - toolchain: nightly-2021-11-15 + toolchain: nightly-2022-02-23 target: ${{ matrix.settings.target }} - name: Cache cargo registry @@ -1007,7 +1092,7 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: nightly-2021-11-15 + toolchain: nightly-2022-02-23 override: true target: wasm32-unknown-unknown @@ -1063,7 +1148,7 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: nightly-2021-11-15 + toolchain: nightly-2022-02-23 override: true target: wasm32-unknown-unknown diff --git a/docs/advanced-features/compiler.md b/docs/advanced-features/compiler.md index 439474fa11f3..16d415a0a11d 100644 --- a/docs/advanced-features/compiler.md +++ b/docs/advanced-features/compiler.md @@ -189,6 +189,36 @@ First, update to the latest version of Next.js: `npm install next@latest`. Then, ## Experimental Features +### Emotion + +We're working to port `@emotion/babel-plugin` to the Next.js Compiler. + +First, update to the latest version of Next.js: `npm install next@latest`. Then, update your `next.config.js` file: + +```js +// next.config.js + +module.exports = { + experimental: { + emotion: boolean | { + // default is true. It will be disabled when build type is production. + sourceMap?: boolean, + // default is 'dev-only'. + autoLabel?: 'never' | 'dev-only' | 'always', + // default is '[local]'. + // Allowed values: `[local]` `[filename]` and `[dirname]` + // This option only works when autoLabel is set to 'dev-only' or 'always'. + // It allows you to define the format of the resulting label. + // The format is defined via string where variable parts are enclosed in square brackets []. + // For example labelFormat: "my-classname--[local]", where [local] will be replaced with the name of the variable the result is assigned to. + labelFormat?: string, + }, + }, +} +``` + +Only `importMap` in `@emotion/babel-plugin` is not supported for now. + ### Minification You can opt-in to using the Next.js compiler for minification. This is 7x faster than Terser. diff --git a/docs/advanced-features/custom-app.md b/docs/advanced-features/custom-app.md index cf8a8fd1fee3..2a7d541cfd72 100644 --- a/docs/advanced-features/custom-app.md +++ b/docs/advanced-features/custom-app.md @@ -40,6 +40,8 @@ The `Component` prop is the active `page`, so whenever you navigate between rout `pageProps` is an object with the initial props that were preloaded for your page by one of our [data fetching methods](/docs/basic-features/data-fetching/overview.md), otherwise it's an empty object. +The `App.getInitialProps` receives a single argument called `context.ctx`. It's an object with the same set of properties as the [`context` object](/docs/api-reference/data-fetching/get-initial-props#context-object) in `getInitialProps`. + ### Caveats - If your app is running and you added a custom `App`, you'll need to restart the development server. Only required if `pages/_app.js` didn't exist before. diff --git a/docs/advanced-features/custom-document.md b/docs/advanced-features/custom-document.md index 2ef135fa783a..97d427fbec1b 100644 --- a/docs/advanced-features/custom-document.md +++ b/docs/advanced-features/custom-document.md @@ -41,7 +41,7 @@ Or add a `className` to the `body` tag: ## Caveats - The `
` component used in `_document` is not the same as [`next/head`](/docs/api-reference/next/head.md). The `
` component used here should only be used for any `
` code that is common for all pages. For all other cases, such as `
{excerpt}
+- {queryString} routed to https://swapi.co{queryString} -
- -{data ? JSON.stringify(data, null, 2) : 'Loading...'}-
:hover
.
+ {description}
+${price}
+{content}
-{data.content}
-...
-+ 🔥 Shop from the hottest items in the world 🔥 +
+external only
@@ -11,6 +12,7 @@ export const Test1 = ()=>external and static
@@ -21,6 +23,7 @@ export const Test2 = ()=>static only
@@ -85,6 +90,7 @@ export const Test5 = ()=>dynamic with constant variable
@@ -202,6 +212,7 @@ export const Test10 = ()=>test
- <_JSXStyle id={"713499aa363d6373"}>{"p.jsx-713499aa363d6373 a.jsx-713499aa363d6373 span.jsx-713499aa363d6373{color:red}p.jsx-713499aa363d6373 span{background:blue}p.jsx-713499aa363d6373 a[title=\"'w ' ' t'\"].jsx-713499aa363d6373{margin:auto}p.jsx-713499aa363d6373 span:not(.test){color:green}p.jsx-713499aa363d6373,h1.jsx-713499aa363d6373{color:blue;-webkit-animation:hahaha 3s ease forwards infinite;animation:hahaha 3s ease forwards infinite;-webkit-animation-name:hahaha;animation-name:hahaha;animation-delay:100ms}p.jsx-713499aa363d6373{-webkit-animation:hahaha 1s,hehehe 2s;animation:hahaha 1s,hehehe 2s}p.jsx-713499aa363d6373:hover{color:red}p.jsx-713499aa363d6373::before{color:red}.jsx-713499aa363d6373:hover{color:red}.jsx-713499aa363d6373::before{color:red}.jsx-713499aa363d6373:hover p.jsx-713499aa363d6373{color:red}p.jsx-713499aa363d6373+a.jsx-713499aa363d6373{color:red}p.jsx-713499aa363d6373~a.jsx-713499aa363d6373{color:red}p.jsx-713499aa363d6373>a.jsx-713499aa363d6373{color:red}@keyframes hahaha{from{top:0}to{top:100}}@keyframes hehehe{from{left:0}to{left:100}}@media(min-width:500px){.test.jsx-713499aa363d6373{color:red}}.test.jsx-713499aa363d6373{display:block}.inline-flex.jsx-713499aa363d6373{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}.flex.jsx-713499aa363d6373{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.test.jsx-713499aa363d6373{box-shadow:0 0 10px black,inset 0 0 5px black}.test[title=\",\"].jsx-713499aa363d6373{display:inline-block}.test.is-status.jsx-713499aa363d6373 .test.jsx-713499aa363d6373{color:red}.a-selector.jsx-713499aa363d6373:hover,.a-selector.jsx-713499aa363d6373:focus{outline:none}"} + <_JSXStyle id={"713499aa363d6373"}>{"p.jsx-713499aa363d6373 a.jsx-713499aa363d6373 span.jsx-713499aa363d6373{color:red}p.jsx-713499aa363d6373 span{background:blue}p.jsx-713499aa363d6373 a[title=\"'w ' ' t'\"].jsx-713499aa363d6373{margin:auto}p.jsx-713499aa363d6373 span:not(.test){color:green}p.jsx-713499aa363d6373,h1.jsx-713499aa363d6373{color:blue;-webkit-animation:hahaha 3s ease forwards infinite;-moz-animation:hahaha 3s ease forwards infinite;-o-animation:hahaha 3s ease forwards infinite;animation:hahaha 3s ease forwards infinite;-webkit-animation-name:hahaha;-moz-animation-name:hahaha;-o-animation-name:hahaha;animation-name:hahaha;-webkit-animation-delay:100ms;-moz-animation-delay:100ms;-o-animation-delay:100ms;animation-delay:100ms}p.jsx-713499aa363d6373{-webkit-animation:hahaha 1s,hehehe 2s;-moz-animation:hahaha 1s,hehehe 2s;-o-animation:hahaha 1s,hehehe 2s;animation:hahaha 1s,hehehe 2s}p.jsx-713499aa363d6373:hover{color:red}p.jsx-713499aa363d6373::before{color:red}.jsx-713499aa363d6373:hover{color:red}.jsx-713499aa363d6373::before{color:red}.jsx-713499aa363d6373:hover p.jsx-713499aa363d6373{color:red}p.jsx-713499aa363d6373+a.jsx-713499aa363d6373{color:red}p.jsx-713499aa363d6373~a.jsx-713499aa363d6373{color:red}p.jsx-713499aa363d6373>a.jsx-713499aa363d6373{color:red}@keyframes hahaha{from{top:0}to{top:100}}@keyframes hehehe{from{left:0}to{left:100}}@media(min-width:500px){.test.jsx-713499aa363d6373{color:red}}.test.jsx-713499aa363d6373{display:block}.inline-flex.jsx-713499aa363d6373{display:-webkit-inline-box;display:-webkit-inline-flex;display:-moz-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex.jsx-713499aa363d6373{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex}.test.jsx-713499aa363d6373{-webkit-box-shadow:0 0 10px black,inset 0 0 5px black;-moz-box-shadow:0 0 10px black,inset 0 0 5px black;box-shadow:0 0 10px black,inset 0 0 5px black}.test[title=\",\"].jsx-713499aa363d6373{display:inline-block}.test.is-status.jsx-713499aa363d6373 .test.jsx-713499aa363d6373{color:red}.a-selector.jsx-713499aa363d6373:hover,.a-selector.jsx-713499aa363d6373:focus{outline:none}"}test
- <_JSXStyle id={"768337a97aceabd1"}>{"html.jsx-768337a97aceabd1{background-image:linear-gradient(0deg,rgba(255,255,255,.8),rgba(255,255,255,.8)),url(/static/background.svg)}p{color:blue}p{color:blue}p,a.jsx-768337a97aceabd1{color:blue}.foo+a{color:red}body{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif}p.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1{color:red}*.jsx-768337a97aceabd1{color:blue}[href=\"woot\"].jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1 a.jsx-768337a97aceabd1 span.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1 span{background:blue}p.jsx-768337a97aceabd1 a[title=\"'w ' ' t'\"].jsx-768337a97aceabd1{margin:auto}p.jsx-768337a97aceabd1 span:not(.test){color:green}p.jsx-768337a97aceabd1,h1.jsx-768337a97aceabd1{color:blue;-webkit-animation:hahaha 3s ease forwards infinite;animation:hahaha 3s ease forwards infinite;-webkit-animation-name:hahaha;animation-name:hahaha;animation-delay:100ms}p.jsx-768337a97aceabd1{-webkit-animation:hahaha 1s,hehehe 2s;animation:hahaha 1s,hehehe 2s}p.jsx-768337a97aceabd1:hover{color:red}p.jsx-768337a97aceabd1::before{color:red}.jsx-768337a97aceabd1:hover{color:red}.jsx-768337a97aceabd1::before{color:red}.jsx-768337a97aceabd1:hover p.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1+a.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1~a.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1>a.jsx-768337a97aceabd1{color:red}@keyframes hahaha{from{top:0}to{top:100}}@keyframes hehehe{from{left:0}to{left:100}}@media(min-width:500px){.test.jsx-768337a97aceabd1{color:red}}.test.jsx-768337a97aceabd1{display:block}.inline-flex.jsx-768337a97aceabd1{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}.flex.jsx-768337a97aceabd1{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.test.jsx-768337a97aceabd1{box-shadow:0 0 10px black,inset 0 0 5px black}.test[title=\",\"].jsx-768337a97aceabd1{display:inline-block}.test.is-status.jsx-768337a97aceabd1 .test.jsx-768337a97aceabd1{color:red}.a-selector.jsx-768337a97aceabd1:hover,.a-selector.jsx-768337a97aceabd1:focus{outline:none}@media(min-width:1px)and (max-width:768px){[class*=\"grid__col--\"].jsx-768337a97aceabd1{margin-top:12px;margin-bottom:12px}}@media(max-width:64em){.test.jsx-768337a97aceabd1{margin-bottom:1em}@supports(-moz-appearance:none)and (display:contents){.test.jsx-768337a97aceabd1{margin-bottom:2rem}}}"} + <_JSXStyle id={"768337a97aceabd1"}>{"html.jsx-768337a97aceabd1{background-image:linear-gradient(0deg,rgba(255,255,255,.8),rgba(255,255,255,.8)),url(/static/background.svg)}p{color:blue}p{color:blue}p,a.jsx-768337a97aceabd1{color:blue}.foo+a{color:red}body{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif}p.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1{color:red}*.jsx-768337a97aceabd1{color:blue}[href=\"woot\"].jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1 a.jsx-768337a97aceabd1 span.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1 span{background:blue}p.jsx-768337a97aceabd1 a[title=\"'w ' ' t'\"].jsx-768337a97aceabd1{margin:auto}p.jsx-768337a97aceabd1 span:not(.test){color:green}p.jsx-768337a97aceabd1,h1.jsx-768337a97aceabd1{color:blue;-webkit-animation:hahaha 3s ease forwards infinite;-moz-animation:hahaha 3s ease forwards infinite;-o-animation:hahaha 3s ease forwards infinite;animation:hahaha 3s ease forwards infinite;-webkit-animation-name:hahaha;-moz-animation-name:hahaha;-o-animation-name:hahaha;animation-name:hahaha;-webkit-animation-delay:100ms;-moz-animation-delay:100ms;-o-animation-delay:100ms;animation-delay:100ms}p.jsx-768337a97aceabd1{-webkit-animation:hahaha 1s,hehehe 2s;-moz-animation:hahaha 1s,hehehe 2s;-o-animation:hahaha 1s,hehehe 2s;animation:hahaha 1s,hehehe 2s}p.jsx-768337a97aceabd1:hover{color:red}p.jsx-768337a97aceabd1::before{color:red}.jsx-768337a97aceabd1:hover{color:red}.jsx-768337a97aceabd1::before{color:red}.jsx-768337a97aceabd1:hover p.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1+a.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1~a.jsx-768337a97aceabd1{color:red}p.jsx-768337a97aceabd1>a.jsx-768337a97aceabd1{color:red}@keyframes hahaha{from{top:0}to{top:100}}@keyframes hehehe{from{left:0}to{left:100}}@media(min-width:500px){.test.jsx-768337a97aceabd1{color:red}}.test.jsx-768337a97aceabd1{display:block}.inline-flex.jsx-768337a97aceabd1{display:-webkit-inline-box;display:-webkit-inline-flex;display:-moz-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex.jsx-768337a97aceabd1{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex}.test.jsx-768337a97aceabd1{-webkit-box-shadow:0 0 10px black,inset 0 0 5px black;-moz-box-shadow:0 0 10px black,inset 0 0 5px black;box-shadow:0 0 10px black,inset 0 0 5px black}.test[title=\",\"].jsx-768337a97aceabd1{display:inline-block}.test.is-status.jsx-768337a97aceabd1 .test.jsx-768337a97aceabd1{color:red}.a-selector.jsx-768337a97aceabd1:hover,.a-selector.jsx-768337a97aceabd1:focus{outline:none}@media(min-width:1px)and (max-width:768px){[class*=\"grid__col--\"].jsx-768337a97aceabd1{margin-top:12px;margin-bottom:12px}}@media(max-width:64em){.test.jsx-768337a97aceabd1{margin-bottom:1em}@supports(-moz-appearance:none)and (display:contents){.test.jsx-768337a97aceabd1{margin-bottom:2rem}}}"}content
"}};var z={element:"span",mutate:function mutate(e){e.setAttribute("style","display: -webkit-flex; display: -ms-flexbox; display: flex;");e.innerHTML='hello'}};var F={element:"form",mutate:function mutate(e){e.setAttribute("tabindex",0);e.setAttribute("disabled","disabled")}};var I={element:"a",mutate:function mutate(e){e.href="#void";e.innerHTML='';return e.querySelector("img")}};var L={element:"div",mutate:function mutate(e){e.innerHTML=''+'';return e.querySelector("img")}};var B={element:function element(e,n){var t=n.createElement("iframe");e.appendChild(t);var r=t.contentWindow.document;r.open();r.close();return t},mutate:function mutate(e){e.style.visibility="hidden";var n=e.contentWindow.document;var t=n.createElement("input");n.body.appendChild(t);return t},validate:function validate(e){var n=e.contentWindow.document;var t=n.querySelector("input");return n.activeElement===t}};var H=!s.is.WEBKIT;function focusInZeroDimensionObject(){return H}var W={element:"div",mutate:function mutate(e){e.setAttribute("tabindex","invalid-value")}};var q={element:"label",mutate:function mutate(e){e.setAttribute("tabindex","-1")},validate:function validate(e,n,t){var r=e.offsetHeight;e.focus();return t.activeElement===e}};var U="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtb"+"G5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0ic3ZnIj48dGV4dCB4PSIxMCIgeT0iMjAiIGlkPSJ"+"zdmctbGluay10ZXh0Ij50ZXh0PC90ZXh0Pjwvc3ZnPg==";var G={element:"object",mutate:function mutate(e){e.setAttribute("type","image/svg+xml");e.setAttribute("data",U);e.setAttribute("width","200");e.setAttribute("height","50");e.style.visibility="hidden"}};var V={name:"can-focus-object-svg",element:"object",mutate:function mutate(e){e.setAttribute("type","image/svg+xml");e.setAttribute("data",U);e.setAttribute("width","200");e.setAttribute("height","50")},validate:function validate(e,n,t){if(s.is.GECKO){return true}return t.activeElement===e}};var K=!s.is.IE9;function focusObjectSwf(){return K}var Z={element:"div",mutate:function mutate(e){e.innerHTML=''+'';return e.querySelector("img")},validate:function validate(e,n,t){var r=e.querySelector("area");return t.activeElement===r}};var $={element:"fieldset",mutate:function mutate(e){e.innerHTML='';return false},validate:function validate(e,n,t){var r=e.querySelector('input[tabindex="-1"]');var a=e.querySelector('input[tabindex="0"]');e.focus();e.querySelector("legend").focus();return t.activeElement===r&&"focusable"||t.activeElement===a&&"tabbable"||""}};var Y={element:"div",mutate:function mutate(e){e.setAttribute("style","width: 100px; height: 50px; overflow: auto;");e.innerHTML='content
";return e.firstElementChild}};function makeFocusableForeignObject(){var e=document.createElement("div");e.innerHTML='';return e.firstChild.firstChild}function focusSvgForeignObjectHack(e){var n=e.ownerSVGElement||e.nodeName.toLowerCase()==="svg";if(!n){return false}var t=makeFocusableForeignObject();e.appendChild(t);var r=t.querySelector("input");r.focus();r.disabled=true;e.removeChild(t);return true}function generate(e){return'"}function focus(e){if(e.focus){return}try{HTMLElement.prototype.focus.call(e)}catch(n){focusSvgForeignObjectHack(e)}}function validate(e,n,t){focus(n);return t.activeElement===n}var ee={element:"div",mutate:function mutate(e){e.innerHTML=generate('